2013-12-08 47 views
0

問題查找位置與N個現有位置的萬里

我有隨緯度和經度〜5000個的位置的座標列表叫做A,並呼籲B.這個列表的一個獨立的子集,我想找到的所有位置從A那是B.

結構

所有這些數據都存儲在MySQL數據庫中,並通過Python腳本要求的任何位置正英里。

方法

我目前的做法是通過每個位置正英里範圍內B中的所有位置,並要求場所進行迭代,將其添加到列表中,如果還不存在他們。

這是有效的,但在最糟糕的情況下,這需要花費大量的時間,而且效率很低。我覺得應該有更好的方法,但我不知道如何去做。

想法

  1. 加載的所有位置到Python中的列表,並計算距離那裏。這會減少mysql查詢的次數,並可能加速操作。它仍然會很慢。
+0

你在尋找徑向距離還是道路距離? –

+0

徑向距離。 – xur17

+0

您可能想要查看空間數據庫,例如[PostGIS](http://postgis.net/)。 –

回答

1

負載B轉換爲Python列表,併爲每個計算maxlat,minlat,MAXLONG,閩龍的框外的一切絕對是您的半徑之外,如果你的半徑是在海里和度緯度/長。然後,您可以針對滿足以下條件的點提出SQL查詢:minlat < lat < maxlat和minlong < long < maxlong。然後可以檢查得到的點的精確距離,並將其添加到範圍列表中,如果它們在範圍內。

我會建議在多個進程中這樣做。

+1

謝謝你的回覆 - 這看起來是最好的方法。由於此查詢每天運行幾次,因此我選擇將所有內容加載到python列表中,並使用haversine來計算點之間的距離。這加快了速度,操作需要幾秒鐘,這是完全可以接受的。不打擾優化更多,以保持代碼庫簡單。 – xur17