2015-07-19 78 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

相關問題