2014-11-03 55 views
-1

我在Google地图上显示路线,一切正常。问题是当我更新其中一个标记(出发或到达)时,新标记将被添加到地图中,而不是删除前一个标记。我试图将directionsDisplay设置为全局变量,但无法解决问题。在显示新路线之前有没有办法清除地图?更改路线时显示多个标记的地图

这里是它的样子:

我也试过这对API的建议:

directionDisplay = new google.maps.DirectionsRenderer(); 
directionDisplay.suppressMarkers = true; 
directionDisplay.setMap(null);![enter image description here][1] 

感谢您的帮助

我的代码是

var map = drawMap(map, mapOptions); 
    var departure; 
    var arrival; 
    var marker = createMarker(); 

    function mainMap(mapOptions) { 
    departure1 = '#autocomplete_departure'; 
    arrival1 = '#autocomplete_arrival'; 

    var placeDeparture = getAddress(departure1); 
    var placeArrival = getAddress(arrival1); 


     google.maps.event.addListener(placeDeparture, 'place_changed', function(){ 
     placeMarker(placeDeparture, departure1); 
     }); 

     google.maps.event.addListener(placeArrival, 'place_changed', function(){ 
     placeMarker(placeArrival, arrival1); 
     }); 
    }; 

function setMarkerPosition(marker, place){ 
    marker.setPosition(place.geometry.location); 
    marker.setMap(map); 
} 

function drawMap(){ 
    return new google.maps.Map(map, mapOptions); 
} 

function createMarker(){ 
    var markerOptions = { 
    map: map 
    } 
    return new google.maps.Marker(markerOptions); 
} 


function placeMarker(place, stop){ 
    var place = place.getPlace(); 
    if (place.geometry.viewport) { 
    map.fitBounds(place.geometry.viewport); 
    } else { 
    map.setCenter(place.geometry.location); 
    map.setZoom(17); 
    } 

    marker.setPosition(place.geometry.location); 
    marker.setMap(map); 

    if (stop == '#autocomplete_departure') { 
     departure = stop; 
    } else if (stop == '#autocomplete_arrival') { 
     arrival = stop; 
    } 

    if (arrival !== undefined && departure !== undefined) { 
     updateRouteOnMap(arrival, departure); 
    } 

    function updateRouteOnMap(departure, arrival){ 
    var from = $(departure).val(); 
    var to = $(arrival).val(); 

    var request = { 
     origin: from, 
     destination: to, 
     travelMode: google.maps.TravelMode.DRIVING 
    }; 

    var directionsDisplay; 
    if (directionsDisplay != undefined) directionsDisplay.setMap(null); 
    directionsService = new google.maps.DirectionsService(); 
    directionsDisplay = new google.maps.DirectionsRenderer(); 
    directionsDisplay.setMap(map); 

    directionsService.route(request, function(response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 
     $("#directions-panel").html() 
     directionsDisplay.setPanel(document.getElementById('directions-panel')); 
     } 
     else{ 
     alert("there has been an error. Please try again!") 
     } 
    });  
+0

请提供[最小,完整,测试和可读示例](http://stackoverflow.com/help/mcve)。在覆盖之前,您需要从地图上隐藏/删除“标记”变量。 – geocodezip 2014-11-03 20:47:49

+0

嗨,谢谢你的回答,这是我的第一篇文章,所以下次会试着多加注意。我把地图的整个代码放在地图上,因为我试图在询问但是没有得到任何结果之前去除不同部分的市场,所以我对如何进行操作有点困惑。感谢您的帮助 – user3623363 2014-11-04 20:35:51

+0

我已经清除了相关位的代码。我试过在调用DirectionsRenderer()之前使用函数删除标记,但没有做任何结果。任何建议?谢谢 – user3623363 2014-11-07 10:20:02

回答

0

经过多次尝试,我设法找到了解决方案。

我设置directionsDisplay并为DirectionsService为全局变量和绘制地图前加上这段代码:

directionsDisplay.setDirections({routes: []}); 

这将在每次进入一个新的方向时间重置地图。