2015-07-19 50 views
2

我从两个角度解决了这个问题,但是我肯定缺少PostGIS库的知识来实际执行我的需求。多边形点离质心最远的距离

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

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

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

我的解决方案已经看过类似:

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

回答

2

ST_DumpPoints()函数返回一组(的geom,路径)行,其中geom是从多边形中的点和path是整数的阵列与(在这种情况下)位置1处的多边形的环和位置2处的环内的POINT的索引。由于ST_DumpPoints()是设置返回功能,因此它应该在FROM子句中使用。 (尽管这些实例都是功能齐全,PostGIS的文档使用SELECT子句中的功能,但是这是不好的做法,不推荐使用。)

为了使这一切工作,你需要做一个LATERAL JOIN:在加入“表”dump您使用先前指定的表中的一列,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; 
+0

感谢您对此的帮助!我会给你更多的细节,因为你的解决方案只有一半解释了我需要去的地方。我的几何值实际上是一个封闭的多边形 - 通常具有各种形状的10-15个顶点。问题是我想计算从质心到每个多边形的距离以确定最长点。我可以使用最小边界圆来做到这一点,但似乎是不必要的复杂。 – ddibiase

+0

我工作的一个不同的解决方案,也许更优: SELECT ST_AsText(ST_CENTROID(ST_MinimumBoundingCircle(GEOM)::几何形状)), ST_AsText(ST_MinimumBoundingCircle(GEOM)::几何) FROM “地区” 我在想,如果我找到MBC并且它的质心可以计算从MBC中返回的任何多边形的距离。 现在我需要弄清楚如何从质心或直径计算半径。这是一种圆满的方式来完成我想要但可能工作。 – ddibiase

+0

我完全不理解这些评论。帕特里克的答案如何解决您的问题?什么是“封闭”多边形而不是多边形?由于积分没有长度,什么是“最长”的一点?这是一种X-Y情况,您尚未描述您的实际问题,而是询问了您认为的解决方案? – user464502

相关问题