我做了類似的事情一次(查找所有經/緯度,圍繞着一個最大半徑的點對象。),並用於此處給出的公式: http://www.movable-type.co.uk/scripts/latlong.html 然而,相當耗時。所以我有點「拳擊」拳頭。根據上面的計算(當然還原了),我計算了具有最大距離的那些座標的北,西,南和東的經度和緯度。使用軟管最大值和最小值(對於緯度和經度)我查詢了所有有問題的物體。只有那些我計算出確切的距離,並將它們包括在結果列表中或排除它們。
但是,到目前爲止,這並不完全符合您的問題。但我試圖進一步加強計算。爲此,我對自己說,我不需要從搜索到的對象到我的確切距離,但是知道它比其中一個盒子座標更接近它。並且該部分是與您的問題很好對應的部分:
您的情況可能會更容易。假設有問題的位置(最短的一次)接近你想要分配的位置,所有這些複雜的數學可能不起作用。你不需要確切的距離。你需要的是最後一個。爲此,我假設地球是平坦的,而經度(或緯度)之間的距離是線性的。當然這不是真的,但應該足以弄清楚,哪些是最接近的。 從那裏你可以使用畢達哥拉斯。
Distance = sqrt(sqr(difference-in-lat) + sqr(difference-in-lon));
爲了比較的距離,並找到最短的單純目的,你甚至可以取代費時,並且具有較快sqare操作廣場的路線。
Square-Of-Distance = sqr(difference-in-lat) + sqr(difference-in-lon).
然後比較各種平方距離而不是距離。結果將是相同的,但更快。
順便說一句,那是一個PHP項目。這就是爲什麼我不能提供示例代碼,只是解釋算法。
只是好奇:爲什麼不使用CLLocation的內置distanceFromLocation:佔用曲率而不是2D距離公式的方法? – Anna
我沒有使用它,因爲我不知道它存在:D將相應地編輯代碼,謝謝:D – Fogmeister
剛剛得到舊版本的一些快速測試工作,現在將實現這個更新的版本。感謝@AnnaKarenina&Fogmeister的更新。 –