我也在寻找你问题的答案。在那之前,我会尝试自己解决这个问题,如果我发现有用的东西,我会回复。
更新:在 JavaScript 中学习了几分钟后,我发现方向结果对象保存一组路点,包括用光标拖动路径时创建的路点。如果您完成了可拖动方向教程 http://code.google.com/apis/maps/documentation/javascript/services.html#DraggableDirections您可以在回调方法内通过directionsDisplay.directions访问该对象方向已更改事件。该对象拥有一个名为sf其中持有一个航路点如果有则为数组,如果没有则为空。该数组的每个成员都包含一个名为location,将坐标存储在wa(纬度)和ya(经度)。
为了演示航路点处理,我编写了一个小函数,它在航路点的位置显示标记。为了测试它,请将以下全局变量添加到脚本中;
var markers = [];
修改方向已更改事件回调函数
google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
computeTotalDistance(directionsDisplay.directions);
});
至以下内容;
google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
computeTotalDistance(directionsDisplay.directions);
displayWaypoints(directionsDisplay.directions);
});
并添加这个功能
function displayWaypoints(result) {
for (var i = 0; i < markers.length; ++i) {
markers[i].setMap(null);
}
markers = [];
if (result.sf.waypoints) {
for (var i = 0; i < result.sf.waypoints.length; ++i) {
var latitude = result.sf.waypoints[i].location.wa;
var longitude = result.sf.waypoints[i].location.ya;
markers.push(new google.maps.Marker({
position: new google.maps.LatLng(latitude, longitude),
map: map
}));
}
}
}
您可能还想抑制 DirectionsRenderer 的内置标记绘制。
代替
var rendererOptions = {
draggable: true
};
与以下
var rendererOptions = {
draggable: true,
suppressMarkers: true
};
我找不到任何官方参考资料sf成员。使用它的风险由您自行承担,Google 可能会修改 API,恕不另行通知。在他们制作一个公共 API 来在拖动方向后操作路径点之前,我想不出更好的解决方案。
这是我在 Stack Overflow 上的第一个回答,希望对您有所帮助。
亲切的问候,
约翰尼