2009-07-24 261 views
5

我有一個多邊形點的數據庫作爲緯度和經度對,我需要測試一個給定的經緯度點是否在任何一個多邊形內。處理多邊形的多邊形算法,處理跨邊界的多邊形

圍繞these有幾種算法,但如果多邊形跨越antemeridian(新西蘭海岸外,經度從+180度向東翻轉至-180度向西),它們將不起作用。

我看到的一個解決方案是檢測多邊形是否跨越了antemeridian,如果是這樣,將它分成兩個多邊形,每邊一個,然後檢查它們中的每一個。

回答

2

另一個(更簡單)的選項IMO只是爲了測試這種特殊情況,如果存在,請將轉換應用到查詢點和多邊形。例如,如果它橫跨反經絡,只是將所有東西都翻譯成特定的經度,以使其不能跨越子午線,並進行標準測試。

1

這可能是矯枉過正,但您可以考慮使用球形多邊形,而不是將地圖視爲飛機。 Java中的library可以處理它們,並且可以執行點球面多邊形檢查。儘管如果您的多邊形包含超過一半的地球或兩個極點,那麼您可能會遇到問題,因爲封閉區域的定義開始出現故障。

+0

同意 - 最好的辦法是把它們當作球形多邊形。但是,除非您遵循卷繞慣例(即,將內部定義爲由CCW遍歷所包圍的區域),否則封閉區域總是不明確的。 – 2009-07-24 01:43:00

0

感謝您的建議。最後,我測試的多邊形是一個矩形,所以如果它橫跨了antemeridian(它有不同的跡象),將它切成兩個多邊形,每邊一個,並查詢與它們相交的對象。

0

難道你不能通過添加360將所有的經度座標'移動'到GW子午線的正面?例如:座標是-178度,然後變成+ 182度,-1度變爲359度,1度變爲361等...

我不知道這將如何影響兩極,但它可能會正常工作,不要碰兩極。

+0

我沒有評論無處不在特權,所以作出答案是讓我說出來的唯一方法... – 2012-10-01 11:45:55