多边形点距其质心的最远距离
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;
我现在已经从两个角度解决了这个问题,但我确实缺少 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;