Javascript 谷歌交通地图上的可拖动标记
我试图使用谷歌地图创建公交地图(带有公交/地铁指示),但当我从输入中创建“开始”和“结束”标记(带有自动完成地址)时,无法拖动任何标记,尽管设置了Javascript 谷歌交通地图上的可拖动标记,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我试图使用谷歌地图创建公交地图(带有公交/地铁指示),但当我从输入中创建“开始”和“结束”标记(带有自动完成地址)时,无法拖动任何标记,尽管设置了拖动选项为真 将travelMode选项更改为google.maps.travelMode.DRIVINGdraggin'已启用。将此属性返回到google.maps.TravelMode.TRANSITdaggin'将返回禁用状态 有办法解决这个问题吗 代码: var directionsService; var directionsDisp
拖动选项为真
将travelMode
选项更改为google.maps.travelMode.DRIVING
draggin'已启用。将此属性返回到google.maps.TravelMode.TRANSIT
daggin'将返回禁用状态
有办法解决这个问题吗
代码:
var directionsService;
var directionsDisplay;
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: {lat: -32.89, lng: -68.845} // Mendoza.
});
directionsService = new google.maps.DirectionsService;
directionsDisplay = new google.maps.DirectionsRenderer({
draggable: true,
map: map,
panel: document.getElementById('right-panel')
});
directionsDisplay.addListener('directions_changed', function() {
var addresses = directionsDisplay.getDirections().routes[0].legs[0];
document.getElementById('from').value = addresses.start_address;
document.getElementById('to').value = addresses.end_address;
});
google.maps.event.addDomListener(document.getElementById('go'), 'click', displayRoute);
var input_from = document.getElementById('from');
var autocomplete = new google.maps.places.Autocomplete(input_from);
autocomplete.bindTo('bounds', map);
var input_to = document.getElementById('to');
var autocomplete = new google.maps.places.Autocomplete(input_to);
autocomplete.bindTo('bounds', map);
displayRoute();
}
function displayRoute() {
directionsService.route({
origin: document.getElementById('from').value,
destination: document.getElementById('to').value,
//travelMode: google.maps.TravelMode.DRIVING,
travelMode: google.maps.TravelMode.TRANSIT
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
console.log(response);
directionsDisplay.setDirections(response);
} else {
alert('Could not display directions due to: ' + status);
}
});
}
google.maps.event.addDomListener(window, 'load', initMap);
不幸的是,“可拖动”模式不适用于公交出行模式。刚才我在想办法,顺便问一下你的问题
编辑
正如谷歌文档所说:
用户可以修改显示的自行车、步行或驾驶方向
如果可拖动,则动态使用DirectionsRenderer,允许
用户可以通过单击并拖动来选择和更改路线
地图上的结果路径。您可以指示渲染器的显示
通过将其draggable属性设置为true,允许拖动方向。
运输方向不能设置为可拖动。
请在此处查看:
我们必须找到另一种方法。。。如果我找到它,我会让你知道,如果你先找到它,如果你告诉我,我将不胜感激。我找到的“解决方案”(hack),使用尝试和错误,是为了防止显示API创建的标记:
var directionsDisplay = new m.DirectionsRenderer({
suppressMarkers: true, // Supressing the default markers
map: map,
// another options...
});
并实现我自己的功能来显示标记:
function placeMarker(e, t) {
t < 2 && (markers[t] = new m.Marker({
position: e,
draggable: true, // YES! It's draggable!
map: map
}), m.event.addListener(markers[t], "dragend", function() {
geocodePosition(markers[t].getPosition(), t);
}), markers[t].setVisible(true), geocodePosition(markers[t].getPosition(), t), arrangeBounds());
}
功能定位标记(e,t){
t<2&(标记[t]=新的m.标记({
职位:e,
可拖动:是的,//是的!可拖动!
地图:地图
}),m.event.addListener(标记[t],“dragend”,函数(){
地理编码定位(标记[t].getPosition(),t);
}),markers[t].setVisible(true),geocodePosition(markers[t].getPosition(),t),arrangeBounds());
}
然后,标记可以使用谷歌交通地图拖动。。。解决方案已经晚了,但我希望不是最不重要的。您如何添加标记?请提供一个例子来说明这个问题。@geocodezip我将使用过的代码添加到了答案中。谢谢。那么这些标记是默认的方向渲染器标记?我可以理解为什么谷歌可能不让这些可拖动,你可能需要添加你自己的带有dragend侦听器的可拖动标记,以便在它们移动时重新计算方向。@geocodezip标记将是DirectionRenderer标记,将travelMode
更改为google.maps.travelMode.DRIVING
(注释代码行)标记可以移动。。。我不明白为什么在TRANSIT
时标记是不可拆卸的。