2011-05-30 89 views
1

如何檢索2 gps座標之間的航路(航點)城市列表?在城市2 gps座標之間獲取航點表

我有一個所有城市lat-lon的表格。 所以,如果我有一個起始位置(lat-lon)和結束位置(lat-lon)...... 確定城市(從表格)通過(航點)從開始獲取的路徑(lat-lon)到en(lat-lon)?

我看了不同的算法和方位。仍然不清楚。

+0

y我們的城市表格包含連接數據?例如「城市A到城市B,走57路」?除非你有關於它們如何互連的數據,否則地點本身是無用的。否則,簡單的答案是「在開始點和結束點之間直接驅動」 – 2011-05-30 21:27:21

回答

2

如果您使用A點和B點之間的方法,那麼您只需分別在第一個和第二個之間查詢經度和緯度的城市。

如果您想獲得從A到B的直線X英里範圍內的城市,那麼您需要計算起點和坡度,然後查詢距離該線路X英里內的城市

如果您不使用簡單的A點來忽略道路的B點方法,那麼您需要A和B之間的實際道路上的某種數據,以便我們給您一個答案。這可以使用db中的Node系統完成,也可以通過使用各種地理位置API來完成。

1

解決這可以通過標準離散路由算法

這些算法需要的一組節點(開始,目的地,您的市)和邊緣的那些節點之間(表示可能道路或更一般的距離來找到位置節點和邊緣之間。)

形成一個圖...起點和目的地是已知的...現在你可以使用像A *或djikstra算法沿着這條曲線

典型的解決途徑這種方法的問題可能是你沒有邊緣的定義(u黑貂之間的直接路徑)。你可以通過多種方式創建這樣的「路網」,例如:

初始化「NETWORK_ID」 0

把你的起點位置,並找到最接近的其他位置。測量距離並乘以一個因子。現在將每個位置連接到距離小於此值且尚未連接到當前位置的原始位置。將通過此步驟連接的所有位置添加到列表中。用當前的「Network_ID」標記當前位置,爲該列表上的下一個位置重複此步驟。如果列表中的地點用完了,請增加「Network_ID」並選擇一個尚未處理的隨機地點,然後重複步驟

所有位置都已處理後,您有一個或多個道路網絡(如果多個道路網絡,它們還沒有連接,在它們之間添加適當的連接邊緣,或者以更大的因子重新啓動該過程)

您必須確保啓動和目標具有相同的network_ID或兩個網絡已連接

1

嗯......我已經使用BETWEEN min和max來表示這樣的事情,但不完全一樣。 嘗試可能:

SELECT * from `cities` WHERE `lat` BETWEEN 'minlat' AND 'maxlat' AND `lon` BETWEEN 'minlon' and 'maxlon'; 

類似的東西可能工作

看看MySQL的比較,在這裏:

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html