我正在使用DirectionsService和路由方法生成DirectionsResult。我也使用DirectionsRenderer对象来显示结果,因为它非常容易使用。我没有检测到directions_changed事件的问题,但我想知道是否可以从折线代表行程中获取事件,甚至是拖动折线后生成的标记(小圆圈)事件。
使用谷歌地图(maps.google.com,“获取路线”)时,您可以拖动折线,右键单击它(或标记),这样可以显示菜单。所以我猜有一种方法可以从DirectionsRenderer捕获事件(假设Google在这种情况下使用此对象)。
如果有人有想法
答案 0 :(得分:3)
我也在寻求你的问题的答案。在那之前,我会尝试自己解决这个问题,如果找到有用的东西,我会回复。
更新:在JavaScript中几分钟后,我发现 DirectionsResult 对象包含一个航点点阵列,包括用光标拖动路径时创建的航点。如果您已完成Draggable Directions tutorial,则可以通过directionsDisplay.directions访问该对象,在 directions_changed 事件的回调方法中。该对象包含一个名为 sf 的成员,如果存在,则包含 waypoints 数组,如果没有,则为null。此数组的每个成员都包含一个名为 location 的成员,存储 wa (纬度)和 ya (经度)下的坐标。
为了演示航路点处理,我写了一个小功能,在路标点的位置显示标记。为了测试它,将以下全局变量添加到脚本中;
var markers = [];
修改 directions_changed 事件回调函数
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答案,我希望我能提供帮助。
亲切的问候, 约翰尼