2017-04-05 118 views
0

我正在研究一個項目,其中有許多車輛(2000年左右)和我的數據庫(與mongo一起工作)上的多個多邊形。mongoDB - 檢查多個位置的進入/退出多邊形事件的最佳方法是什麼?

我有不同種類的多邊形(城市,國家,十字路口...),讓我們說4種類型的事情。

每分鐘我都會得到車輛的新位置,我需要在客戶端的桌面上顯示當前的國家,城市和交叉路口(或最後一個路口)。我真正想知道的是車輛進入/退出多邊形時。

我知道可以查詢當前的多邊形車輛的具體位置,但我需要獲得2000輛車的當前4多邊形類型。

這就是8000(!!!)DB的查詢每分鐘。

什麼是最好的方式做我想要的? 謝謝:)

回答

0

我認爲有一個更好的解決方案,因爲車輛不能經常更改他們的城市/國家,直到他們飛行。我正在考慮以下內國家schema-

Country={ 
     id: ObjectId or String, 
     name: String, 
     cities: [<array of city subdocuments>], 
     near_country: [<array of IDs of neighbour countries>], 
     boundary: location boundary for city <city would be polygon or your choice of geoType> 
} 

市子文檔可以有模式像{id, name, boundary, near_city}.我會選擇我的車輛架構爲{id, location_cordinates, curr_city, curr_country}

現在,當你得到車輛位置數據,剛剛從存儲車輛文檔獲取curr_city和檢查位置是否仍在curr_city中。如果這沒有問題,否則你只需要檢查該位置是否在near_city內。

如果城市/國家由於車輛移動而改變,那麼您需要使用最新數據更新車輛。

以這種方式,您將盡量減少對數據庫的查詢。這將需要一些代碼,因爲一切都不會在數據庫中完成。

喜歡 - 車輛

  • 位置在這裏,我已經採取了一些假設將被存儲的車輛文件內。如果不是你的情況,那就把它刪除。您可能會從GPS或類似的東西獲取位置,並且不需要根據您的需要進行存儲。
  • 我無法理解相交部分。它是過渡還是交叉?通常國家有州,州有城市等。城市名稱可以在州內或州內複製。但是一個城市將成爲唯一一個國家的一部分。如果情況並非如此,那麼你只需要在多個國家放置同一個城市,並將代碼邏輯放在這些城市中。
  • 在靠近城市的同時,您需要考慮位於國家邊界的城市,並且可能會從另一個國家/地區到達城市附近。

希望我明白你的問題和解決方案對你有幫助。如果獲得更多信息,我會很樂意提供幫助。

相關問題