2014-12-07 13 views
7

Witam Próbuję narysować mapę trasy między dwoma markery za pomocą javascript. Próbowałem różnych przykładów znalezionych w Internecie, ale moja mapa nie ładuje się podczas wypróbowywania różnych przykładów. Nie jestem w stanie ustalić przyczyny błędu. Moja mapa się nie ładuje.jak narysować trasę między dwoma markery w Google Maps

Próbuję narysować trasę dla dwóch poniższych markerów.

<script> 

     function mapLocation() { 
      var directionsDisplay; 
      var directionsService = new google.maps.DirectionsService(); 
      var map; 

      function initialize() { 
       directionsDisplay = new google.maps.DirectionsRenderer(); 
       var chicago = new google.maps.LatLng(37.334818, -121.884886); 
       var mapOptions = { 
        zoom: 7, 
        center: chicago 
       }; 
       map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
       directionsDisplay.setMap(map); 
      } 

      function calcRoute() { 
       var start = new google.maps.LatLng(37.334818, -121.884886); 
       var end = new google.maps.LatLng(38.334818, -181.884886); 
       var request = { 
        origin: start, 
        destination: end, 
        travelMode: google.maps.TravelMode.DRIVING 
       }; 
       directionsService.route(request, function (response, status) { 
        if (status == google.maps.DirectionsStatus.OK) { 
         directionsDisplay.setDirections(response); 
        } 
       }); 
      }    

      google.maps.event.addDomListener(window, 'load', initialize); 
     } 
     mapLocation(); 
    </script> 

Czy ktoś może mi pomóc narysować trasę między dwoma znacznikami?

+1

Istnieje [próbka w dokumentacji] (https://developers.google.com/maps/documentation/javascript/examples/directions-simple) robiąc dokładnie to. – mensi

+0

Po prostu pojawia się pusty ekran bez mapy: - | –

+0

Uzyskaj funkcję 'initialize' z funkcji' mapLocation'. Wywołaj 'mapLocation' z poziomu funkcji' initialize', po zainicjowaniu mapy lub na zdarzeniu 'idle' na mapie. Sprawdź swoją konsolę javascript pod kątem błędów. – MrUpsidown

Odpowiedz

22

Dwa komentarze:

  1. Twoje pytanie pyta o kierunkach między markerami, ale nie istnieją żadne znaczniki w kodzie zaksięgowane. Istnieją dwie pozycje zdefiniowane przez obiekty LatLng. Usługa wskazówek automatycznie doda znaczniki na początku i końcu trasy. Jeśli chcesz uzyskać wskazówki między dwoma markerami, musisz najpierw dodać je do swojej mapy.
  2. Nie ma połączenia z calcRoute w opublikowanym kodzie (dodałem przycisk "route", który powoduje, że zostanie wykonany).

Issues:

  1. usługa kierunki wraca ZERO_RESULTS do oryginalnych punktów, więc nie ma trasa jest rysowany. Dodaj obsługę błędów w innym przypadku do testu if (status == "OK"), aby to zobaczyć.
  2. jeśli zmienię punkty do miejsca, które w rzeczywistości może być kierowane (Palo Alto, CA), kierunki droga usługa nie są renderowane, ponieważ nigdy nie można ustawić „map” własność służby kierunkach

working fiddle

function mapLocation() { 
    var directionsDisplay; 
    var directionsService = new google.maps.DirectionsService(); 
    var map; 

    function initialize() { 
     directionsDisplay = new google.maps.DirectionsRenderer(); 
     var chicago = new google.maps.LatLng(37.334818, -121.884886); 
     var mapOptions = { 
      zoom: 7, 
      center: chicago 
     }; 
     map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
     directionsDisplay.setMap(map); 
     google.maps.event.addDomListener(document.getElementById('routebtn'), 'click', calcRoute); 
    } 

    function calcRoute() { 
     var start = new google.maps.LatLng(37.334818, -121.884886); 
     //var end = new google.maps.LatLng(38.334818, -181.884886); 
     var end = new google.maps.LatLng(37.441883, -122.143019); 
     var bounds = new google.maps.LatLngBounds(); 
     bounds.extend(start); 
     bounds.extend(end); 
     map.fitBounds(bounds); 
     var request = { 
      origin: start, 
      destination: end, 
      travelMode: google.maps.TravelMode.DRIVING 
     }; 
     directionsService.route(request, function (response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       directionsDisplay.setDirections(response); 
       directionsDisplay.setMap(map); 
      } else { 
       alert("Directions Request from " + start.toUrlValue(6) + " to " + end.toUrlValue(6) + " failed: " + status); 
      } 
     }); 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 
} 
mapLocation(); 

kod działa urywek:

function mapLocation() { 
 
    var directionsDisplay; 
 
    var directionsService = new google.maps.DirectionsService(); 
 
    var map; 
 

 
    function initialize() { 
 
    directionsDisplay = new google.maps.DirectionsRenderer(); 
 
    var chicago = new google.maps.LatLng(37.334818, -121.884886); 
 
    var mapOptions = { 
 
     zoom: 7, 
 
     center: chicago 
 
    }; 
 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 
    directionsDisplay.setMap(map); 
 
    google.maps.event.addDomListener(document.getElementById('routebtn'), 'click', calcRoute); 
 
    } 
 

 
    function calcRoute() { 
 
    var start = new google.maps.LatLng(37.334818, -121.884886); 
 
    //var end = new google.maps.LatLng(38.334818, -181.884886); 
 
    var end = new google.maps.LatLng(37.441883, -122.143019); 
 
    var request = { 
 
     origin: start, 
 
     destination: end, 
 
     travelMode: google.maps.TravelMode.DRIVING 
 
    }; 
 
    directionsService.route(request, function(response, status) { 
 
     if (status == google.maps.DirectionsStatus.OK) { 
 
     directionsDisplay.setDirections(response); 
 
     directionsDisplay.setMap(map); 
 
     } else { 
 
     alert("Directions Request from " + start.toUrlValue(6) + " to " + end.toUrlValue(6) + " failed: " + status); 
 
     } 
 
    }); 
 
    } 
 

 
    google.maps.event.addDomListener(window, 'load', initialize); 
 
} 
 
mapLocation();
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<input type="button" id="routebtn" value="route" /> 
 
<div id="map-canvas"></div>

+0

Znacznie lepsza odpowiedź niż moja! – gothical

0

Dość kilka błędów. Pierwsza to geolokalizacja. Twoja druga lokalizacja jest zła, ponieważ długość geograficzna może wynosić tylko od +180 do -180, więc -181 nie istnieje na Ziemi! Po drugie, jak wspomniałem MrUidedidedown w komentarzu, wywołujecie funkcję w ramach funkcji. Najpierw popraw geolokalizację, a następnie wywołaj funkcje, które powinny rozwiązać problemy, które masz.

Powiązane problemy