Google Maps API指示会在拖动时重新计算

时间:2013-02-21 11:51:15

标签: google-maps-api-3 map-directions

感谢您的时间。

简介:

  • Google Maps API V3项目
  • 点击地图以放置标记
  • 路线服务计算两个连续点之间的路线

目标:

拖动其中一个标记时重新计算路线。

进度:

到目前为止,我已经汇总了这个页面:http://test.bluecactus.ro/gmaps.html。我评论了大部分代码。

问题:

页面适用于第一次拖动。当我拖动第二个标记或再次拖动第一个标记时,折线不再按它们的方式“重新生成”(删除传入和传出,从新位置计算,在地图上绘图)。

对于同一标记上的多个拖动,应删除的一些折线将保留在地图上。在拖动第二个标记时,将删除错误的折线。

这让我相信在识别拖动标记在阵列中的位置时会出现问题,该阵列中包含所有标记; 以下功能。我已经多次重做'数学'了 - 在纸上似乎没问题。我已经尝试将所有内容放在之外的循环中,并使用循环来识别全局变量中的位置。他们都没有工作。

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&amp; I + 1;但是这只适用于较小的路线而且没有拖动到快速 - 否则将被击中OVER_QUERY_LIMIT。可以通过调用之间的延迟来解决,但是每次重新计算一切只是一点似乎很奇怪。

我觉得我接近解决方案,但无法掌握它。任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您不需要自己实施拖动方向,它自2010年以来就已经成为JavaScript API v3的一部分。您可以在航点上设置标记,但路线中的任何点都可以拖动。

https://developers.google.com/maps/documentation/javascript/examples/directions-draggable https://developers.google.com/maps/documentation/javascript/directions#DraggableDirections