2014-06-16 26 views
-2

我有一組標記,點擊標記時有一個按鈕可以獲取路線。問題是,它只給出了從xml最後加載的標記的方向,而不是單個標記。這是我的代碼,也許有人可以告訴我做錯了什麼。謝謝。Google指示錯誤的標記

UPDATE:WORKING CODE,QUESTION ANSWERED

var map; 
var point; 
var directionsDisplay; 
var directionsService; 
var marker; 
var myLatLng; 
var marklat; 
var marklong; 
var markers; 
var DirLat; 
var DirLng; 

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(){ 

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

    var im = //user location icon 
    var CustomMarker = //marker icon location 

    if(navigator.geolocation){ 

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

    noPos(); 

    } 

    function locate(position){ 

     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 } 
     } 
     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; 

     downloadUrl("phps/xmltest.php", function(data) { 
     var xml = data.responseXML;   
     markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var nam = markers[i].getAttribute("name"); 
      var name = nam.replace('=', '\''); 
      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 DirLat = markers[i].getAttribute("lat"); 
     var DirLng = markers[i].getAttribute("lng"); 
     var d = Math.round(Math.random()*1679735965724*236896135089834); 
     var raw = pid * d; 
     //move up the creation of point 
     point = new google.maps.LatLng(
       DirLat, 
       DirLng); 

     marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: CustomMarker, 
     id: raw, 
     id2: d 

     }); 
     var content = "<button onclick='getDir();'>Get Directions</button>"; 
     var jshtml = "<button onclick='raw();'>More Info</button>"; //an href function that redirects 
     var html = "<b>" + name + "&nbsp;" + content+ '&nbsp;' + jshtml+ "</b> <br/>" + "Date of Yard Sale: " + dt1 + '&nbsp;' + tm1 + '&nbsp;' + dt2 + '&nbsp;' + tm2 + '&nbsp;' + dt3 + '&nbsp;' + tm3;  
     bindInfoWindow(marker, map, infoWindow, html); 
     } 

     }); 

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

    document.getElementById('iLat').value = marker.getPosition().lat().toFixed(6); 
    document.getElementById('iLng').value = marker.getPosition().lng().toFixed(6); 
    document.getElementById('iRaw1').value = marker.id; 
    document.getElementById('iRaw2').value = marker.id2; 

     }); 
    } 

    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() {} 
    } 


    function noPos(error){ 

     var mapOptions = { 
      zoom: 4, 
      center: new google.maps.LatLng(41.850033, -87.6500523), 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      zoomControl: true, 
      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 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; 
     markers = xml.documentElement.getElementsByTagName("marker"); 
     for (var i = 0; i < markers.length; i++) { 
      var nam = markers[i].getAttribute("name"); 
      var name = nam.replace('=', '\''); 
      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 = Math.round(Math.random()*1679735965724*236896135089834); 
      var raw = pid * d; 
      var jshtml = "<button onclick='raw();'>More Info</button>";; 
      var html = "<b>" + name + '&nbsp;' + jshtml + "</b>" + "<br>" + "Date of Yard Sale: " + dt1 + '&nbsp;' + tm1 + '&nbsp;' + dt2 + '&nbsp;' + tm2 + '&nbsp;' + dt3 + '&nbsp;' + tm3; 
      point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: CustomMarker, 
      id: raw, 
      id2: d 
      }); 

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

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

    document.getElementById('iRaw1').value = marker.id; 
    document.getElementById('iRaw2').value = marker.id2; 

     }); 
    } 

    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(null); 
    } 
     function doNothing() {} 

    } 

} 


function getDir(){ 
    directionsDisplay.setMap(map); 

    var start = myLatLng; 
    //LatLng created based on the passed arguments 
    var end = point; 
    var request = { 
        origin:start, 
        destination:end, 
        travelMode: google.maps.TravelMode.DRIVING 
       }; 
    directionsService.route(request, function(result, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(result); 
    } 
    }); 
} 
+0

您的getDir()函數如何知道哪個標記被點擊?只有一個「點」值留在最後一個標記的值處。 – geocodezip

+0

我相信那是我遇到麻煩的地方;我不確定如何指定正在點擊哪個標記。如果可能,我想要一些幫助。 – Alex

+0

[Mike Williams'v2教程的例子之一,翻譯成v3](http://www.geocodezip.com/v3_MW_example_map4c.html)可能會有所幫助。 – geocodezip

回答

0

我全局定義的每個變量所必需的方向:

var map; 
var point; 
var directionsDisplay; 
var directionsService; 
var marker; 
var myLatLng; 
var marklat; 
var marklong; 
var markers; 
var DirLat; 
var DirLng; 

創建的功能的按鈕,並且其中是可見的內容而設定infowindow:

var content = "<button onclick='getDir();'>Get Directions</button>"; 

接下來,我在地圖pag中創建了隱藏的輸入字段e,並分配點擊標記的緯度和經度值。

document.getElementById('iLat').value = marker.getPosition().lat().toFixed(6); 
document.getElementById('iLng').value = marker.getPosition().lng().toFixed(6); 

的方向發揮作用GETDIR爲目標拉這些值,myLatLng是用戶的當前位置:

function getDir(){ 
    directionsDisplay.setMap(map); 

    var start = myLatLng; 
    var LatDir = document.getElementById('iLat').value; 
    var LngDir = document.getElementById('iLng').value; 
    var end = new google.maps.LatLng(LatDir,LngDir); 

    var request = { 
        origin:myLatLng, 
        destination:new google.maps.LatLng(LatDir,LngDir), 
        travelMode: google.maps.TravelMode.DRIVING 
       }; 
    directionsService.route(request, function(result, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(result); 
    } 
    }); 
} 

有關完整代碼,請參見更新問題的代碼。