2015-11-10 96 views
3

Turfjs有沒有方法確定LineString與多邊形邊界相交的座標?查找LineString與地圖中的多邊形邊界相交的座標

有很多方法可以找出一個點是否在一個多邊形內,並且有很多方法可以找出一個點是否在一條線上等,但我似乎無法找到一種方法請詢問「此線與多邊形的邊界相交點」

我可以使用線交點算法來枚舉多邊形中的點以找到該點,但我想知道是否有更多的「草皮」方法來做到這一點。

對於上下文,我已經加載了一個GPX軌道,並且想要估計軌道進入/離開定義區域的位置/時間。

由於GPX軌道只記錄特定間隔的位置,它通常是在時間tN記錄的pN在區域外的情況,並且在時間tN + 1記錄的pN + 1在該區域內。 如果我可以得到線(pN,pN + 1)與多邊形邊界相交的點,我可以估計出軌道穿過多邊形的確切時間。

+0

您可能想考慮在gis.stackexchange.com上詢問這個問題。 –

+0

謝謝@SteveBennett,我在那邊問過。 – rifboy

回答

2

最終,turfjs似乎沒有這樣做的API。

我能夠通過枚舉GeoJSON對象中的多邊形中的點來構建一系列線段,然後使用函數來測試交點,從而得到我想要的答案。

0

我看不到Turf函數確實如此,但有intersect,它找到兩個多邊形之間的交集區域。

,你可以:

  1. 通過連接線本身反轉(ABC這樣變成ABCBA)
  2. 查找ABCBA和P,使用相交原多邊形的intersection構造一個多邊形。
  3. 交叉點應該是一個零區域多邊形,它是ABCBA內部P的一部分。以某種方式計算它的長度(奇怪的是沒有周長函數)。
  4. 從ABC的original length減去該長度。

不完全優雅,真實。 :)

編輯

試過這個。如果其中一個多邊形是零區域,則Turf-intersect不會返回交點。

+0

我_think_ [草地線到多邊形](https://github.com/Turfjs/turf-line-to-polygon)可以做到這一點。然後你可以緩衝一小部分,這樣多邊形就不是空的。我會玩弄它,看看它給出了什麼樣的結果。 – rifboy

+0

是的,我發現Github組織中的Turf模塊比「官方」列表多得多:https://github.com/Turfjs –