MySQL有一个聚合ST_UNION()吗?

时间:2017-11-29 10:36:09

标签: mysql gis

我已经花了好几个小时才能让我的查询工作但没有成功。

我有一个带有GEOMETRY列的表,它存储来自子地区的给定区域的POLYGON。 现在我想将它们全部联合到父区域的一个更高级别的边界,例如:

SELECT ST_Union(geometry) FROM area

我总是错误:

  

#1582 - 调用原生函数' ST_Union'

时参数计数不正确

我不认为这是函数的通缉行为,因为这使它完全没用。有人知道如何使用这个函数来产生预期的结果吗?

2 个答案:

答案 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 ...;