2014-08-27 57 views
1

通過使用貝塞爾曲線折線繪製功能provided by nicoabie我能夠從地圖上的一個點繪製曲線到另一個點。問題是這個函數並沒有考慮到這樣一個事實,即當一個點超過最大座標時,它不一定在地圖的另一邊,因爲它繞了一圈。谷歌地圖API:貝塞爾曲線折線包裹

例如,繪製從西雅圖到東京的曲線。一條規則的多段線將穿過太平洋,但曲線在整個地球上都向東。

geodesic: true在這種情況下不起作用,因爲該線必須具有一致的曲率。

我的問題是:能始終如一的曲線繪製的是發生在佔地圖包裝?

+0

是的,它可以,什麼是你的代碼是什麼樣子?你能提供一個[最小,完整,測試和可讀的例子](http://stackoverflow.com/help/mcve),表現出這個問題? – geocodezip 2014-08-27 14:53:48

+0

您是否曾嘗試在國際日期線上添加一條從西雅圖到東京的曲線? – geocodezip 2014-08-27 17:26:05

回答

1

使用google.maps.LatLng class的第三個「nowrap」參數強制所有相關點具有相同的符號(將其設置爲true,默認爲false)。

gmarkers[10].setPosition(new google.maps.LatLng(35.689488,139.69170)); // Tokyo 
gmarkers[0].setPosition(new google.maps.LatLng(47.60621,(360-122.332071),true)); // Seattle 
boundsCenter.setPosition(new google.maps.LatLng(36.096756,(360-178.986565),true)); // control point 1 
gmarkers[6].setPosition(new google.maps.LatLng(48.511996,180)); // control point 2 

var curvedLine = new GmapsCubicBezier(gmarkers[0].getPosition().lat(), gmarkers[0].getPosition().lng(), boundsCenter.getPosition().lat(), boundsCenter.getPosition().lng(), gmarkers[6].getPosition().lat(), gmarkers[6].getPosition().lng(), gmarkers[10].getPosition().lat(), gmarkers[10].getPosition().lng(), 0.01, map); 

working fiddle