我已经花了好几个小时才能让我的查询工作但没有成功。
我有一个带有GEOMETRY列的表,它存储来自子地区的给定区域的POLYGON。 现在我想将它们全部联合到父区域的一个更高级别的边界,例如:
SELECT ST_Union(geometry) FROM area
我总是错误:
#1582 - 调用原生函数' ST_Union'
时参数计数不正确
我不认为这是函数的通缉行为,因为这使它完全没用。有人知道如何使用这个函数来产生预期的结果吗?
答案 0 :(得分:0)
MySQL没有ST_Union
的聚合形式,或任何其他空间函数。
如果您正在寻找空间聚合,则必须迁移到PostgreSQL / PostGIS。 MySQL只有很少的GIS功能。
SELECT ST_Union( Point(0,0), Point(0,1) );
有关MySQL和PostgreSQL的比较,请参阅我的帖子
答案 1 :(得分:0)
由于MySQL ST_Union()仅接受两个几何,因此解决方法是构造两个几何集合。一个集合包含所有要汇总在一起的功能。它是使用功能WKT上的GROUP_CONCAT()构造的。第二个几何可以是没有特征的空集合。
您可能需要大幅增加@@ sort_buffer_size和@@ group_concat_max_len变量,以使其起作用。
SELECT ST_Union(
ST_GeomFromText(
concat("GEOMETRYCOLLECTION ("
, GROUP_CONCAT( ST_AsText(shape) )
, ")"
)
), ST_GeomFromText("GEOMETRYCOLLECTION EMPTY")
) as geom
FROM ...
WHERE ...
GROUP BY ...;