感谢您的时间。
简短的:
- 谷歌地图 API V3 项目
- 点击地图放置标记
- 路线服务计算两个连续点之间的路线
目标:
拖动标记之一时重新计算路线。
进步:
到目前为止,我已经组装了这个页面:http ://test.bluecactus.ro/gmaps.html 。我已经注释了大部分代码。
问题:
第一次拖动页面可以正常工作。当我拖动第二个标记或再次拖动第一个标记时,折线不再按照应有的方式“重新生成”(删除传入和传出,从新位置计算,在地图上绘制)。
对于同一标记上的多次拖动,一些应删除的折线将留在地图上。拖动第二个标记时,将删除错误的多段线。
这使我相信在包含所有标记的数组中识别拖动标记的位置有问题;下面的函数。我已经重做了几次“数学”——在纸上看起来还可以。我尝试将所有内容都放在for循环之外,并使用循环来识别全局变量中的位置。他们都没有工作。
http://test.bluecactus.ro/gmaps.html
google.maps.event.addListener(marker, 'dragend', function(event) { //ondrag
for (var i = 0; i < gmarkers.length; i++) {
if(gmarkers[i].getPosition() == marker.getPosition()) { //find out array position of current marker
console.log("i = " + i);
//hide incoming and outgoing polylines; polylines index offset by -1 (n markers => n-1 polylines)
gpolys[i-1].setMap(null);
gpolys[i].setMap(null);
drawPath(gmarkers[i-1].getPosition(), marker.getPosition()); //calculate route between moved marker and previous point
drawPath(marker.getPosition(), gmarkers[i+1].getPosition()); //calculate route between moved marker and next point
//overwrite initial polylines; drawPath function automatically adds new polylines to end of gpolys array
gpolys[i-1] = gpolys[gpolys.length-2];
console.log(gpolys);
gpolys[i] = gpolys[gpolys.length-1];
console.log(gpolys);
//delete last 2 elements from gpolys
gpolys.pop();
console.log(gpolys);
gpolys.pop();
console.log(gpolys);
}
}
});
备注:
- 第一个和最后一个标记不起作用,暂时不处理它们。
- 我找到了一些解决方法:在拖动时重新计算整个路线 - 获取数组中的所有标记并在 i 和 i+1 之间绘制;但是,这仅适用于较小的路线,并且不会拖到快速 - 否则 OVER_QUERY_LIMIT 将被击中。可以通过呼叫之间的延迟来解决,但每次只为一个点重新计算所有内容似乎很奇怪。
我觉得我接近解决方案,但无法掌握。任何建议将不胜感激。谢谢你。