2014-08-27 53 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