Geolokalizacja i Google Maps, cz. 4 – odległość pomiędzy punktami

W ostatnim wpisie pisałem o nanoszeniu obiektów na mapę Google Maps. Dziś pokażę jak obliczać odległość miedzy nimi.

<html>
    <head>
        <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&amp;libraries=places"></script>
        <script>
            var origin1 = new google.maps.LatLng(51.1462584, 21.9684219);
            var origin2 = "Opole Lubelskie";
            var destinationA = "Warszawa";
            var destinationB = new google.maps.LatLng(52.24125614966341, 20.9619140625);

            var service = new google.maps.DistanceMatrixService();
            service.getDistanceMatrix(
                    {
                        origins: [origin1, origin2],
                        destinations: [destinationA, destinationB],
                        travelMode: google.maps.TravelMode.DRIVING,
                        avoidHighways: false,
                        avoidTolls: false
                    }, callback);

            function callback(response, status) {
                console.log(response);
                console.log(status);
            }
        </script>
    </head>
</body>
</html>

Odległość pomiędzy punktami obliczana jest za pomocą service.getDistanceMatrix(). Metoda ta zwiera kilka ustawień:

  • origins – są to punkty startowe. Podajemy tablicę punktów google.maps.LatLng i/lub adres w postaci stringu.
  • destinations – są to punkty docelowe. Podajemy tablicę punktów google.maps.LatLng i/lub adres w postaci stringu.
  • travelMode – informacja jakim środkiem się poruszamy. Dostępne opcje: google.maps.TravelMode.DRIVING (samochód), google.maps.TravelMode.WALKING (pieszo), google.maps.TravelMode.BICYCLING (motocykl).
  • avoidHighways – przy ustawieniu true oblicza odległość przez autostrady, o ile to możliwe.
  • avoidTolls – przy ustawieniu true oblicza odległość przez drogi wolne od opłat, o ile to możliwe.

Oczywiście nie jest to pełna lista możliwych opcji. Więcej informacjo znajdziesz w dokumentacji.

Odpowiedź z serwera przekazywana jest w funkcji callback() jako obiekt DistanceMatrixResponse.

{
  "origin_addresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ],
  "destination_addresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ],
  "rows": [ {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 70778,
        "text": "19 hours 40 mins"
      },
      "distance": {
        "value": 1887508,
        "text": "1173 mi"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 44476,
        "text": "12 hours 21 mins"
      },
      "distance": {
        "value": 1262780,
        "text": "785 mi"
      }
    } ]
  }, {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 96000,
        "text": "1 day 3 hours"
      },
      "distance": {
        "value": 2566737,
        "text": "1595 mi"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 69698,
        "text": "19 hours 22 mins"
      },
      "distance": {
        "value": 1942009,
        "text": "1207 mi"
      }
    } ]
  } ]
}

Najważniejsze dla nas informacje są w kolumnie rows. Zawiera ona listę elements zawierającą obliczone odległości dla wszystkich, podanych punktów. Dodatkowo funkcja zwraca zmienną status, o której możesz poczytać w dokumentacji :)

Print Friendly, PDF & Email