编程语言
首页 > 编程语言> > javascript-从多义线获取事件或从DirectionsRenderer获取标记

javascript-从多义线获取事件或从DirectionsRenderer获取标记

作者:互联网

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

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

如果有人知道

解决方法:

我也在寻找您问题的答案.在此之前,我会尝试自己解决问题,如果发现有用的内容,我会回发.

更新:使用JavaScript几分钟后,我发现DirectionsResult对象包含一个航点数组,包括当用光标拖动路径时创建的航点.如果完成了Draggable Directions tutorial,则可以通过directions_changed事件的回调方法内的directionsDisplay.directions访问该对象.该对象拥有一个名为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答案,希望对我有所帮助.

亲切的问候,
强尼

标签:google-maps,google-maps-api-3,javascript
来源: https://codeday.me/bug/20191208/2094025.html