我现在从两个角度解决了这个问题,但我肯定错过了PostGIS库的实际执行需求的知识。
基本上我在一个名为“geom”的列中包含一个Polygon(没有多边形)。它们都是非常简单的城市边界形状。我已经确定了如何计算质心,但我想查询多边形中距离质心的最长点是什么。
更直接:我无法找到如何从几何列中分出点,在顶点和质心之间运行ST_Distance()
并输出最长距离。
我怀疑我必须使用ST_DumpPoints()
,但我不知道如何编写表达式来完成剩下的工作。
我的解决方案与此类似:
SELECT max(ST_Distance(ST_DumpPoints(geom), ST_Centroid(geom))) AS distance
答案 0 :(得分:3)
ST_DumpPoints()
函数返回一组(geom,path)行,其中geom
是多边形的点,path
是一个整数数组(在本例中)位置1处多边形的环和位置2处环中POINT的索引。由于ST_DumpPoints()
是一个集合返回函数,因此应该在FROM
子句中使用它。 (虽然示例都是有用的,但PostGIS文档使用SELECT
子句中的函数,但这是不好的做法,不推荐使用。)
为了完成所有工作,您需要在加入的“表格”dump
中创建LATERAL JOIN
:您使用之前指定的表格my_table t
中的列。完成函数后,如本例所示,隐式允许LATERAL JOIN
。
SELECT t.id AS city_id,
ST_Centroid(t.geom) AS center,
max(ST_Distance(dump.geom, ST_Centroid(t.geom))) AS distance,
dump.path AS path_to_the_burbs
FROM my_table t
JOIN ST_DumpPoints(t.geom) dump ON true
GROUP BY 1, 2, 4
ORDER BY 1;