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&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 :)