Mysql
MySQL 等效於空間 ST_Union 聚合函式?
我正在 Mysql 中開發一個數據庫空間項目,我試圖對一組形狀執行聯合操作。我正在尋找類似於 SQL Server 函式
UnionAggregate
或 PostGIS Spatial Aggregate 函式的東西ST_Union
例如(在 SQL SERVER 中):
SELECT geometry::STGeomFromWKB(Shape,27582), area_code FROM area_table WHERE area_code='xxxxxxx';
ST_GeomFromWKB 在 Mysql 中做同樣的工作。
在第二部分中,使用
UnionAggregate
函式 + group by :select dbo.UnionAggregate((geometry::STGeomFromWKB(Shape,27582)).MakeValid()), area_code FROM area_table WHERE area_code='xxxxxxx' GROUP BY area_code;
任何想法如何在 Mysql 中執行類似的操作(聚合+分組)。
謝謝。
我找到了另一種使用ST_Union執行聯合聚合的替代方法。我遇到了一些問題,因為這個 Mysql 函式只有 2 個參數作為輸入。
作為解決方案,我創建了自己的函式,如下所示:
CREATE FUNCTION `fct_create_geom_collection`(ac CHAR(8)) RETURNS GEOMETRY BEGIN DECLARE position INT; DECLARE sortie BOOLEAN DEFAULT FALSE; -- get all area_IDs DECLARE curgeom CURSOR FOR SELECT DISTINCT area_ID FROM area_table WHERE area_code= ac ORDER BY area_ID; DECLARE CONTINUE HANDLER FOR NOT FOUND SET sortie = TRUE; OPEN curgeom; -- get the first area_id FETCH curgeom INTO position ; -- put the shape into @var_g_0 for this area_id SELECT ST_GeomFromWKB(Shape,27582) INTO @var_g_0 FROM area_table WHERE area_ID = position ; LLD: LOOP IF sortie THEN LEAVE LLD; END IF; -- get the second area_id FETCH curgeom INTO position ; -- put the second shape into @var_g for this area_id SELECT ST_GeomFromWKB(Shape,27582) INTO @var_g FROM area_table WHERE area_ID = position ; -- performing a union operation between @var_g_0 and @var_g SET @geom = ST_UNION(@var_g_0,@var_g); -- enclosed st_union -- put the result into @var_g_0 SET @var_g_0 = @geom; END LOOP; CLOSE curgeom; RETURN ST_GeomFromText(ST_ASTEXT(@geom)); -- RETURN ST_GeomFromWKB(@geom); END$$
此功能為每個“區號”啟用聚合聯合形狀,這是 UnionAggregate 所做的以及我需要的。