Javascript 清除谷歌地图中的路线指示

Javascript 清除谷歌地图中的路线指示,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我有一组从XML加载的标记;单击标记时,我会呈现从当前位置到标记位置的方向。但是,我希望能够清除路线,最好是在用户单击其他标记时。目前所有路线都显示在一起。我不知道我把事情搞砸了。我已经尝试了directionsDisplay.setMap(null),但是没有清除它们。如果您注意到问题所在,请告诉我。多谢各位 function loadGoogleMap(){ // load google map var script = document.createElement('scr

我有一组从XML加载的标记;单击标记时,我会呈现从当前位置到标记位置的方向。但是,我希望能够清除路线,最好是在用户单击其他标记时。目前所有路线都显示在一起。我不知道我把事情搞砸了。我已经尝试了directionsDisplay.setMap(null),但是没有清除它们。如果您注意到问题所在,请告诉我。多谢各位

function loadGoogleMap(){
    // load google map
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' +
        'callback=MyMap';
    document.body.appendChild(script);
}


var map = ''

function MyMap(){

/* 

document.getElementById('finddate').value

 */

var im = 'http://www.robotwoods.com/dev/misc/bluecircle.png';
var CustomMarker = 'http://findmyyard.com/images/MarkerIcon.png';

if(navigator.geolocation){

    navigator.geolocation.getCurrentPosition(locate, noPos());
} else { 

noPos();

}

function locate(position){


      var directionsDisplay = new google.maps.DirectionsRenderer();
      var directionsService = new google.maps.DirectionsService();

    var myLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    var mapOptions = {
      zoom: 12,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      zoomControl: false,
      streetViewControl: false,
      mapTypeControl: false,
      panControlOptions: { position: google.maps.ControlPosition.TOP_RIGHT},
      zoomControlOptions: { position: google.maps.ControlPosition.TOP_RIGHT }
    }
    var map = new google.maps.Map(document.getElementById('map-canvas'),
                                  mapOptions);
    var userMarker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        icon: im
    });
var infoWindow = new google.maps.InfoWindow;



  // Change this depending on the name of your PHP file

    downloadUrl("phps/xmltest.php", function(data) {
    var xml = data.responseXML;         
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
      var name = markers[i].getAttribute("name");
      var address = markers[i].getAttribute("address");
      var dt1 = markers[i].getAttribute("date1");
      var dt2 = markers[i].getAttribute("date2");
      var dt3 = markers[i].getAttribute("date3");
      var tm1 = markers[i].getAttribute("time1");
      var tm2 = markers[i].getAttribute("time2");
      var tm3 = markers[i].getAttribute("time3");
      var pid = markers[i].getAttribute("PID");
      var d = new Date();
      var raw = pid * d.getFullYear();
      var jshtml = '<a href='+'phps/info.php?raw='+ raw +'>More Info</a>'
      var html = "<b>" + name + "</b> <br/>" + "Date of Yard Sale: " + dt1 + '&nbsp;' + tm1 + '&nbsp;' + dt2 + '&nbsp;' + tm2 + '&nbsp;' + dt3 + '&nbsp;' + tm3 + '&nbsp;' + "<br/>" + address + "&nbsp;" + "Click this for: " + jshtml;
      var point = new google.maps.LatLng(
          parseFloat(markers[i].getAttribute("lat")),
          parseFloat(markers[i].getAttribute("lng")));
      var marker = new google.maps.Marker({
        map: map,
        position: point,
        icon: CustomMarker
      });



      bindInfoWindow(marker, map, infoWindow, html, directionsDisplay);
    }


   });




function bindInfoWindow(marker, map, infoWindow, html, directionsDisplay) {


  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker, html);
    center: position;

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



                          directionsDisplay = new google.maps.DirectionsRenderer();
                          directionsDisplay.setMap(map)
                          var start = myLatLng;
                          var latitude = marker.getPosition().lat().toFixed(6) 
                          var longitude = marker.getPosition().lng().toFixed(6)
                          var end = new google.maps.LatLng(latitude, longitude);
                          var request = {
                            origin:start,
                            destination:end,
                            travelMode: google.maps.TravelMode.DRIVING
                          };
                          directionsService.route(request, function(result, status) {

                            if (status == google.maps.DirectionsStatus.OK) {

                                directionsDisplay.setMap(null)
                                directionsDisplay.setMap(map);  
                              directionsDisplay.setDirections(result);  

                            }
                          });


  });
}

function downloadUrl(url, callback) {
  var request = window.ActiveXObject ?
      new ActiveXObject('Microsoft.XMLHTTP') :
      new XMLHttpRequest;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request, request.status);
    }
  };


     request.open('GET', url, true);
  request.send();
}
     function doNothing() {}
}
函数loadGoogleMap(){
//加载谷歌地图
var script=document.createElement('script');
script.type='text/javascript';
script.src=https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' +
'callback=MyMap';
document.body.appendChild(脚本);
}
变量映射=“”
函数MyMap(){
/* 
document.getElementById('finddate').value
*/
var im=http://www.robotwoods.com/dev/misc/bluecircle.png';
自定义标记变量http://findmyyard.com/images/MarkerIcon.png';
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(locate,noPos());
}否则{
noPos();
}
功能定位(位置){
var directionsDisplay=new google.maps.DirectionsRenderer();
var directionsService=new google.maps.directionsService();
var myLatLng=new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
变量映射选项={
缩放:12,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.ROADMAP,
动物控制:错误,
街景控制:错误,
mapTypeControl:false,
panControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT},
ZoomControl选项:{position:google.maps.ControlPosition.TOP_RIGHT}
}
var map=new google.maps.map(document.getElementById('map-canvas'),
地图选项);
var userMarker=new google.maps.Marker({
职位:myLatLng,
地图:地图,
图标:即时通讯
});
var infoWindow=new google.maps.infoWindow;
//根据PHP文件的名称更改此选项
下载URL(“phps/xmltest.php”,函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
对于(var i=0;i“+”庭院销售日期:“+dt1+”+tm1+”+dt2+”+tm2+”+dt3+”+tm3+”
“+地址+”+”+”点击此链接获得:“+jshtml; var point=new google.maps.LatLng( parseFloat(标记[i].getAttribute(“lat”), parseFloat(markers[i].getAttribute(“lng”)); var marker=new google.maps.marker({ 地图:地图, 位置:点,, 图标:自定义标记 }); bindInfoWindow(标记、地图、infoWindow、html、方向显示); } }); 函数bindInfoWindow(标记、地图、infoWindow、html、方向显示){ google.maps.event.addListener(标记'click',函数(){ setContent(html); 打开(地图、标记、html); 中心:位置; directionsDisplay.setMap(空) directionsDisplay.setDirections({routes:[]}); 方向显示=空; directionsDisplay=new google.maps.DirectionsRenderer(); directionsDisplay.setMap(地图) var start=myLatLng; 变量纬度=marker.getPosition().lat().toFixed(6) 变量经度=marker.getPosition().lng().toFixed(6) var end=new google.maps.LatLng(纬度、经度); var请求={ 来源:start, 目的地:完, travelMode:google.maps.travelMode.DRIVING }; 路由(请求、功能(结果、状态){ if(status==google.maps.directionstatus.OK){ directionsDisplay.setMap(空) 方向显示.setMap(地图); 方向显示。设置方向(结果); } }); }); } 函数下载url(url,回调){ var请求=window.ActiveXObject? 新的ActiveXObject('Microsoft.XMLHTTP'): 新的XMLHttpRequest; request.onreadystatechange=函数(){ if(request.readyState==4){ request.onreadystatechange=doNothing; 回调(请求、请求、状态); } }; 打开('GET',url,true); request.send(); } 函数doNothing(){} }
从单击回调中删除此选项:

directionsDisplay = new google.maps.DirectionsRenderer();
此行始终创建一个新的DirectionsRenderer实例,但当您一次只想显示一个路由时,您只需要一个实例(该实例已在
locate
中初始化)


使用单个实例时,无需清除任何内容。一个directionsRenderer将永远不会显示超过1条路由,只要调用setDirections,先前绘制的路由将自动删除。

从单击回调中删除此路由:

directionsDisplay = new google.maps.DirectionsRenderer();
此行始终创建一个新的DirectionsRenderer实例,但当您一次只想显示一个路由时,您只需要一个实例(该实例已在
locate
中初始化)

那里有