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

Farthest distance of a polygon point from it's centroid

我现在已经从两个角度解决了这个问题,但我确实缺少 PostGIS 库的知识来实际执行我的需求。

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

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

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

我的解决方案与此类似:

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

ST_DumpPoints()函数returns一组(几何,路径)行,其中geom是多边形的点,path是整数数组与(在本例中)位置 1 处的多边形环和位置 2 处环内的 POINT 索引。由于 ST_DumpPoints() 是一个返回集合的函数,因此应该在 FROM 条款。 (虽然这些示例都是函数式的,但 PostGIS 文档在 SELECT 子句中使用了函数,但这是不好的做法,不推荐。)

为了使其全部正常工作,您需要创建一个 LATERAL JOIN:在加入的 "table" dump 中,您使用先前指定的 table 中的列, 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;