第一:即使您在編譯時不知道點(位置)的集合,也可以計算中心:在運行時,您知道所有點(否則無法將座標插入到URL中),因此您可以輕鬆地遍歷所有點並計算中心。你可以計算所有座標的平均值,並得到幾何中心(也稱爲質心):這是更簡單的方法。另一種方法是檢查距離最遠的一對位置(緯度和經度),然後將中間點設置爲中心:這需要稍微更多的編碼(例如計算您需要考慮的經度距離你必須在兩個方向上計算距離,因爲它有可能在世界各地出現,而且它具有更高的複雜性。
我不會深究這個主題,因爲即使您正確計算了點的中心點,這也不能解決問題,而且由Google靜態地圖API自動提供的中心始終是正確的:再次該中心與問題有關,但不是(問題的)問題。
一個微不足道但重要的要點是:Google靜態地圖總是通過考慮最短路徑(即通過繪製最短直線)在兩個位置之間繪製路徑。
因此,如果您處於一種情況,即您的路徑必須從A地點移到B地點,並且A和B之間的最短路徑走向「世界各地」(或者更好,它會從一側),那麼路徑將顯示爲「borken」,如同您已經顯示的地圖一樣。在實踐中,A和B靠近地圖的左右邊界,並且由於路徑的其他點,地圖不能沿着A和B之間的最短路徑的某個點居中。當你移除'羅馬'時會發生這種情況:如果沒有羅馬,地圖可以以路徑不是borken的方式爲中心。
形式上,我認爲當赤道上的路徑投影長於360度的經度時,問題出現(即路徑被破壞),並且路徑總是沿着相同的方向(即總是西向東或總是東向西)。
在這種情況下,Google靜態地圖只是在第一個地圖旁添加另一個世界地圖:如果將縮放比例設置爲最小,則最多可以查看三個世界地圖。由於以下幾個原因,這實際上是不切實際的:
我搜索了很多關於這個問題,我沒有找到任何解決方案,有一個錯誤跟蹤器打開的錯誤,但它沒有解決。
在我看來,「正確」的做法只是簡單的如下:最多一張地圖,如果一個路徑必須從地圖/圖像的一個邊界出去,那麼它應該出現在相反的邊界並繼續到目的地,繪製在同一張地圖上。
於是我找到了第一個解決方法:
- 您繪製路徑,並用相同的風格(線的顏色等),你也畫以相反的方式路徑(谷歌靜態地圖允許繪製多個路徑在相同的地圖中),即path = A | B | C path = C | B | A並且這將在許多情況下解決該問題(即路徑從圖像的一側退出並從另一側進入)。不幸的是這不工作始終:如果你有穿越的圖像邊緣連續兩次的路徑,那麼你失去了你的路徑的一部分
爲了解決這個問題,我找到了第二個解決方法: - 不是簡單地畫但是爲路徑的每一對位置(並且顛倒)繪製不同的路徑,即對於路徑A-> B-> C,則路徑:A | B,路徑= B | C,路徑= C | B,路徑= B | A,並且此作品始終爲
缺點是以這種方式URL變得非常長,並且URL的2048個字符的限制很容易達到。
最好的解決方案是手動計算中心,手動檢查路徑跨越邊界的位置,只有路徑的這一部分在邊界的兩個位置之間繪製額外的路徑(也可能是反過來),但我認爲它並不值得,儘管我認爲谷歌永遠不會解決這個問題。