从DirectionsRenderer中获取折线或标记的事件

时间:2011-01-26 09:52:19

标签: javascript google-maps google-maps-api-3

我正在使用DirectionsService和路由方法生成DirectionsResult。我也使用DirectionsRenderer对象来显示结果,因为它非常容易使用。我没有检测到directions_changed事件的问题,但我想知道是否可以从折线代表行程中获取事件,甚至是拖动折线后生成的标记(小圆圈)事件。

使用谷歌地图(maps.google.com,“获取路线”)时,您可以拖动折线,右键单击它(或标记),这样可以显示菜单。所以我猜有一种方法可以从DirectionsRenderer捕获事件(假设Google在这种情况下使用此对象)。

如果有人有想法

1 个答案:

答案 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答案,我希望我能提供帮助。

亲切的问候, 约翰尼