2014-07-07 16 views
3

我在分析推文,並且需要從他們的GPS座標中找到用戶所處的狀態(在美國)。我將無法使用互聯網連接,因此我無法使用在線服務(例如Google Maps API)來反轉地理編碼。從GPS座標確定美國狀態而不使用在線服務

有沒有人有任何建議?我正在用python編寫腳本,所以如果有人知道我可以使用的python庫會很棒。或者如果任何人都可以指向我的研究論文或有效的算法,我可以實現這一點,這也將是非常有用的。我發現了一些代表GPS座標中狀態邊界的數據,但我想不出一種有效的方法來確定用戶座標處於哪種狀態。

+1

使用多邊形算法中的一個點來確定座標是否處於某個狀態的內部(用GSP座標爲點的多邊形表示)。實際上,看起來你不可能提高太多。 – Nuclearman

+0

@Nuclearman感謝您指引我正確的方向;這正是我所期待的。你可以寫你的評論作爲答案,我會接受它。 – todd

+0

我通常會將這樣的簡短答案作爲評論發佈,因爲如果海報與你處於相同的情況,或者海報實際上是在尋找更多的細節,那麼這是一個折騰。更容易刪除不準確的評論比編輯/刪除不準確(就提問者而言)答案我想。 – Nuclearman

回答

2

使用點多邊形算法來確定座標處於狀態的內部(由以GAP座標表示的多邊形表示)。實際上,如果簡單地逐個檢查每個狀態,看起來似乎並不能提高很多,但如果速度太慢,可以進行一些優化。

但是,阿拉斯加的部分地區是在第180次子午線兩側出現哪些情況下的問題。一種解決方案是通過爲每個GPS座標(用戶座標和狀態座標)添加30度模數180來校正座標。這樣做的效果是將第180個子午線向西移動30度,並且應該足以確保整個美國位於第180子午線的一側。

+0

阿拉斯加呢。映射佛羅里達州的GPS座標時,會出現任何錯誤,而不是阿拉斯加。 –

+0

阿拉斯加和佛羅里達州的位置很難混淆,它們在經度和緯度上都很分離。阿拉斯加需要小心謹慎,阿拉斯加的位置在經度+/- 180的兩側。 –

+0

@HighPerformanceMark:在看着我的地球儀或者島嶼很小的時候,一定錯過了。編輯我的答案。 – Nuclearman

1

看看緯度/緯度地圖上的狀態形狀,很明顯可能有70%的邊界與長/長軸對齊。其他人遵循非常線性或接近線性的路徑。它看起來像一個「精心打造」bsp tree應該是決定哪個國家的位置最快的方式。

「精心打造」的定義很難建立,但我建議你儘量平衡消除州(整個國家在這條線的A或B方),並迅速隔離大型人口中心。理想情況下,如果你必須用一條線來細分一個州,那麼這樣做是爲了讓大型人口中心位於該線的一側。

將人口分散包括在您的邊界創建中應該會提高您的平均案例時間。考慮到不少州有沿河的邊界,樹中最長的路徑可能會很深,但您應該節省大量的時間來逐個檢查每個狀態。