谷歌地图中间的折线(质心?)

fxc*_*xck 3 javascript google-maps google-maps-api-3 google-polyline

我有一个折线列表,就像谷歌地图一样,当我点击折线时我想要一个信息窗口显示我点击的位置,它可以很好地使用这个功能

function mapsInfoWindow(polyline, content) {
    google.maps.event.addListener(polyline, 'click', function(event) {            
        infowindow.content = content;
        infowindow.position = event.latLng;
        infowindow.open(map);
    });
}
Run Code Online (Sandbox Code Playgroud)

问题来自于我点击列表(使用相同的功能),事件显然没有latLng,但我想infowindow无论如何都要显示在折线的中间,就像你做的那样点击我之前提到的谷歌地图链接中的列表.

试过LatLngBounds(); 但是这给了折线创建的区域的实际中心,而不是我需要的中间区域.

知道怎么做吗?

fxc*_*xck 5

所以这是(有点hacky)解决方案.

使用http://www.geocodezip.com/scripts/v3_epoly.js库,然后计算折线的总长度(各种方式),将其除以一半并调用epoly的.GetPointsAtDistance()函数.

这应该返回LatLng点,但它有时会有点怪异,返回两点甚至以某种方式"破坏"该点.所以你可以做的最安全的事情可能就是:

var pointInHalf = polyline.GetPointsAtDistance(polylineLength);
var pointCoordinate = new google.maps.LatLng(pointInHalf[0].lat(), pointInHalf[0].lng());
Run Code Online (Sandbox Code Playgroud)

好吧,总比没有好.