gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:53:44 26 4
gpt4 key购买 nike

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

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

如果有人有想法

最佳答案

我也在为你的问题寻找答案。在那之前,我会尝试自己弄清楚,如果我发现有用的东西,我会发回。

更新:在使用 JavaScript 几分钟后,我发现 DirectionsResult 对象包含一个航路点数组,包括用光标拖动路径时创建的航路点。如果您完成了 Draggable Directions tutorial您可以在 directions_changed 事件的回调方法中通过 directionsDisplay.directions 访问该对象。该对象包含一个名为 sf 的成员,该成员包含一个 waypoints 数组(如果有),如果没有,则为空。该数组的每个成员都包含一个名为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,恕不另行通知。直到他们制作了一个公共(public) API 用于在拖动方向后操纵航路点,我想不出更好的解决方案。

这是我对 Stack Overflow 的第一个回答,希望对您有所帮助。

亲切的问候,强尼

关于javascript - 从 DirectionsRenderer 的折线或标记获取事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com