API Карт Google V3: Як показати напрямок від точки А до точки В (синя лінія)?


74

У мене є база даних широти та довготи для 2 балів, я хочу, щоб на моїй карті Google відображався маршрут від точки А до точки В ...

Так само, як ми бачимо тут (Вказівки на Картах Google)

Зображення за посиланням

Як намалювати лінію напрямку на карті?

Відповіді:


57

Скористайтеся послугою вказівок API Карт Google v3. В основному це те ж саме, що і API напрямків, але добре упакований в API Карт Google, який також забезпечує зручний спосіб легкого відображення маршруту на карті.

Інформацію та приклади про візуалізацію маршруту маршрутів на карті можна знайти в розділі рендеринга документації API Карт Google v3.


2
@Tomik чи можливо, щоб код зробив знімок зображення після того, як лінія була намальована?
CodeGuru

Будь ласка, подивіться на другий приклад: є код :)
Натан,

43

Використання Javascript

Я створив робочу демонстраційну версію, яка показує, як користуватися службою вказівок API Google Maps у Javascript через

  • DirectionsService об'єкт для надсилання та отримання запитів на напрямок
  • DirectionsRenderer об'єкт для відображення повернутого маршруту на карті

function initMap() {
  var pointA = new google.maps.LatLng(51.7519, -1.2578),
    pointB = new google.maps.LatLng(50.8429, -0.1313),
    myOptions = {
      zoom: 7,
      center: pointA
    },
    map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
    // Instantiate a directions service.
    directionsService = new google.maps.DirectionsService,
    directionsDisplay = new google.maps.DirectionsRenderer({
      map: map
    }),
    markerA = new google.maps.Marker({
      position: pointA,
      title: "point A",
      label: "A",
      map: map
    }),
    markerB = new google.maps.Marker({
      position: pointB,
      title: "point B",
      label: "B",
      map: map
    });

  // get route from A to B
  calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB);

}



function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB) {
  directionsService.route({
    origin: pointA,
    destination: pointB,
    travelMode: google.maps.TravelMode.DRIVING
  }, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
    } else {
      window.alert('Directions request failed due to ' + status);
    }
  });
}

initMap();
    html,
    body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    #map-canvas {
      height: 100%;
      width: 100%;
    }
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>

<div id="map-canvas"></div>

Також на Jsfiddle: http://jsfiddle.net/user2314737/u9no8te4/

Використання веб-служб Карт Google

Ви можете використовувати Веб-служби за допомогою API_KEY, що видає такий запит:

https://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&key=API_KEY

API_KEY можна отримати в Google Developer Console з квотою 2500 безкоштовних запитів на день.

Запит може повернути результати JSON або XML, які можна використовувати для накреслення шляху на карті.

Офіційна документація для веб-служб із використанням Google Maps Directions API знаходиться тут


Гей, я використовую цей код і він працює нормально, але я хочу додати ще один маркер А до С в іншому напрямку, я намагаюся багатьма способами, але не працюю
aniruddh

Я досить новий у API Google Maps, він працює для мене, але як я можу відстань від маршруту?
Сарц

2
@Sarz погляньте на цю іншу демонстрацію, яку я зробив jsfiddle.net/user2314737/fLogwsff
user2314737

19

У вашому випадку це реалізація за допомогою служби вказівок .

function displayRoute() {

    var start = new google.maps.LatLng(28.694004, 77.110291);
    var end = new google.maps.LatLng(28.72082, 77.107241);

    var directionsDisplay = new google.maps.DirectionsRenderer();// also, constructor can get "DirectionsRendererOptions" object
    directionsDisplay.setMap(map); // map should be already initialized.

    var request = {
        origin : start,
        destination : end,
        travelMode : google.maps.TravelMode.DRIVING
    };
    var directionsService = new google.maps.DirectionsService(); 
    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
        }
    });
}

1
Для повноти додайте це до коду: var directionService = new google.maps.DirectionsService ();
Dabbler

1
Дякую @Dabbler, я редагував, вільно редагував, якщо ви бачите помилки у відповідях.
Ваге Арутюнян

чи можливо для коду зробити знімок зображення після накреслення рядка?
CodeGuru

Я не впевнений, чи надає "послуга вказівок" такий функціонал ((
Ваге Арутюнян,

хороша відповідь! Хоча багаторазове клацання для вказівки продукту B балів за кожного натиснутого - як скинути маршрут / маркери? :)
treyBake

7
  // First Initiate your map. Tie it to some ID in the HTML eg. 'MyMapID'
  var map = new google.maps.Map(
    document.getElementById('MyMapID'),
    {
      center: {
        lat: Some.latitude,
        lng: Some.longitude
      }
    }
  );
  // Create a new directionsService object.
  var directionsService = new google.maps.DirectionsService;
    directionsService.route({
      origin: origin.latitude +','+ origin.longitude,
      destination: destination.latitude +','+ destination.longitude,
      travelMode: 'DRIVING',
    }, function(response, status) {
      if (status === google.maps.DirectionsStatus.OK) {
        var directionsDisplay = new google.maps.DirectionsRenderer({
          suppressMarkers: true,
          map: map,
          directions: response,
          draggable: false,
          suppressPolylines: true, 
          // IF YOU SET `suppressPolylines` TO FALSE, THE LINE WILL BE
          // AUTOMATICALLY DRAWN FOR YOU.
        });

        // IF YOU WISH TO APPLY USER ACTIONS TO YOUR LINE YOU NEED TO CREATE A 
        // `polyLine` OBJECT BY LOOPING THROUGH THE RESPONSE ROUTES AND CREATING A 
        // LIST
        pathPoints = response.routes[0].overview_path.map(function (location) {
          return {lat: location.lat(), lng: location.lng()};
        });

        var assumedPath = new google.maps.Polyline({
         path: pathPoints, //APPLY LIST TO PATH
         geodesic: true,
         strokeColor: '#708090',
         strokeOpacity: 0.7,
         strokeWeight: 2.5
       });

       assumedPath.setMap(map); // Set the path object to the map

5

Використовуйте API вказівок .

Зробіть дзвінок ajax, тобто

https://maps.googleapis.com/maps/api/directions/json?parameters

а потім проаналізуйте відповідь


чи можливо для коду зробити знімок зображення після накреслення рядка?
CodeGuru

0

Я використовую спливаюче вікно, щоб показати карту в новому вікні. Я використовую наступну URL-адресу

https://www.google.com/maps?z=15&daddr=LATITUDE,LONGITUDE

Фрагмент HTML

<a target='_blank' href='https://www.google.com/maps?z=15&daddr=${location.latitude},${location.longitude}'>Calculate route</a>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.