2010-03-24 70 views
3

如何計算海上2個座標之間的距離?我也希望能夠在兩個座標之間繪製一條路線。海邊距離計算器,中間座標?

目前唯一的解決方案是將地圖拆分爲像素,將每個像素標識爲LAND或SEA,然後嘗試使用A *算法查找路徑。然後將像素轉換爲相對座標。

我可以購買一些軟件包,但都沒有在線擴展。計算海港之間的距離並在地圖上繪製路徑的服務是searates.com

回答

1

您需要將海洋分解爲像素並執行類似A *的操作。您可以通過將連續的像素合併爲更大的區域來優化它,但如果保留所有正方形,則可能會使搜索更容易。搜索將不再是曼哈頓風格,但如果你有足夠大的方格,額外的連接決定時間將超過彌補。或者,您可以迭代地「增長」來自所有端口的多邊形,構建凸多邊形(以便多邊形內的任何點都可以從任何其他點到達,而不需要出去,例如,您想避免PacMan形狀,例如),儘管這是我首次提到的「方塊」方法的細化/併發症/優化。關鍵是,你知道一旦你在一個地區,你可以到達那個地區的其他地方。

我不知道這是否有幫助,抱歉。這是一個漫長的一天。祝你好運,但。這聽起來像一個有趣的問題!

編輯:忘了提及,你也可以預先把你的區域預處理成四叉樹。也就是說,把你的整個地圖垂直和水平地分成一半(你不需要同時做兩個分割,如果你想花一些時間做更好的分割,你可以稍後做) ,並遞歸地做到這一點,直到每個節點完全是陸地或海洋。從這裏你可以簡單地建立一個連接網絡(只需連接相鄰的葉子),並且A *應該很容易從那裏實現。無論如何,這可能是實施我的第一個建議的最簡單方法。 :)

2

小心地圖可以扭曲距離的事實。例如,在墨卡託投影中,遠離赤道的投影段表示實際距離小於等長赤道附近的段。如果您只爲像素/方塊等分配統一成本,則最終會導致非最佳佈線和錯誤的距離計算。

如果你在地圖上投影一個網格(像素僅僅是許多可能的網格中的一個特定網格)並且使用A *搜索最優路徑,那麼只需要設置好搜索算法的行爲就可以了根據沿球體表面(地球)的實際距離的邊緣權重而不是地圖上的距離。

要小心,只是說「海或不海」是不足以確定適航性。還有深度問題,交通路線問題(例如,航運交通認爲英吉利海峽被分成多條車道)和政治考慮因素(領水等)。您還需要爲地圖上顯示的路徑(巴拿馬,蘇伊士)手動添加路線,並調整其成本以涵蓋發生的任何開銷。

+0

對於我的解決方案「海或不海」是好的,我用它作爲一般信息,而不是專業導航。對於想做專業導航軟件的人來說,有付費地圖和/或軟件。 – Lucian2k 2010-04-01 15:23:08

1

我達到了滿意的解決方案。這與你的建議和最初的想法是一致的,但是我花了一段時間才弄清楚了軟件和GIS的概念,我是一個GIS新手。如果有人再次碰到類似的東西,這裏是我的設置:PostgreSQL的PostGIS,地圖Natural Earth,GIS編輯軟件qGisOpenJUmp,路由算法pgRouting

自然地球地圖需要一些處理纔有用,我加入了海洋多邊形和河流,以便能夠獲得一些準確的路徑到最內陸的點。然後我用1度刻度線獲得從一個大陸到另一個大陸的路徑(我需要找到比這更優雅的解決方案,因爲有些路徑看起來像棋子)。所有這些操作都可以使用PostGIS從命令行完成,我發現使用桌面軟件更容易(下一步,下一步)。自然地球地圖的替代方案可能是OpenStreetMap,但planet.osm轉儲的容量是200Gb,這讓我感到氣餒。

我想這個設置也解決了距離精度問題,PostGIS考慮到了地球的實際形式和距離應該是相當準確的。

我仍然需要做一些測試和細調,但我可以說它可以計算並繪製來自世界海岸線上任意兩點的路線(還沒有小的孤島)並顯示路線點名稱(頻道,海,河流,海洋)。