多边形点距离其质心的最远距离

时间:2015-07-19 01:14:50

标签: postgresql postgis

我现在从两个角度解决了这个问题,但我肯定错过了PostGIS库的实际执行需求的知识。

基本上我在一个名为“geom”的列中包含一个Polygon(没有多边形)。它们都是非常简单的城市边界形状。我已经确定了如何计算质心,但我想查询多边形中距离质心的最长点是什么。

更直接:我无法找到如何从几何列中分出点,在顶点和质心之间运行ST_Distance()并输出最长距离。

我怀疑我必须使用ST_DumpPoints(),但我不知道如何编写表达式来完成剩下的工作。

我的解决方案与此类似:

SELECT max(ST_Distance(ST_DumpPoints(geom), ST_Centroid(geom))) AS distance

1 个答案:

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