Przegląd
Możesz obliczać wskazówki dojazdu (korzystając z różnych środków transportu) za pomocą obiektu DirectionsService. Ten obiekt komunikuje się z usługą wskazówek dojazdu interfejsu API Map Google, która odbiera żądania wskazówek dojazdu i zwraca optymalną trasę.
Czas podróży jest głównym czynnikiem, który jest optymalizowany, ale pod uwagę mogą być brane inne czynniki, takie jak odległość, liczba zakrętów i wiele innych.
Możesz samodzielnie obsłużyć te wyniki kierunkowe lub użyć obiektu DirectionsRenderer, aby je wyrenderować.
Podczas określania miejsca wyjazdu lub miejsca docelowego w żądaniu wskazówek dojazdu możesz podać ciąg zapytania (np. „Chicago, IL” lub „Darwin, NSW, Australia”), wartość LatLng lub obiekt Place.
Usługa Directions może zwracać wieloczęściowe wskazówki dojazdu, korzystając z serii punktów pośrednich. Wskazówki dojazdu są wyświetlane jako linia łamana przedstawiająca trasę na mapie lub dodatkowo jako seria opisów tekstowych w elemencie <div> (np. „Skręć w prawo na zjazd na most Williamsburg Bridge”).
Pierwsze kroki
Zanim zaczniesz korzystać z usługi wskazówek dojazdu w Maps JavaScript API, upewnij się, że interfejs Directions API (starsza wersja) jest włączony w konsoli Google Cloud w tym samym projekcie, który został skonfigurowany na potrzeby Maps JavaScript API.
Aby wyświetlić listę włączonych interfejsów API:
- Otwórz konsolę Google Cloud.
- Kliknij przycisk Wybierz projekt, a następnie wybierz ten sam projekt, który został skonfigurowany dla interfejsu Maps JavaScript API, i kliknij Otwórz.
- Na liście interfejsów API w panelu znajdź Directions API (starsza wersja).
- Jeśli interfejs API jest na liście, nie musisz nic robić. Jeśli interfejsu API nie ma na liście, włącz go na stronie https://console.cloud.google.com/apis/library/directions-backend.googleapis.com.
Ceny i zasady
Ceny
Informacje o cenach i zasadach korzystania z usługi JavaScript Directions znajdziesz w sekcji Korzystanie i rozliczenia dotyczącej interfejsu Directions API (starsza wersja).
Zasady
Korzystanie z usługi Directions musi być zgodne z zasadami opisanymi w przypadku interfejsu Directions API (starsza wersja).
Zapytania o trasę
Dostęp do usługi wskazówek dojazdu jest asynchroniczny, ponieważ interfejs API Map Google musi wywołać serwer zewnętrzny. Z tego powodu musisz przekazać metodę wywołania zwrotnego, która zostanie wykonana po zakończeniu żądania. Ta metoda wywołania zwrotnego powinna przetworzyć wyniki. Pamiętaj, że usługa wskazówek dojazdu może zwrócić więcej niż 1 możliwy plan podróży jako tablicę oddzielnych obiektów routes[].
Aby używać wskazówek dojazdu w interfejsie Maps JavaScript API, utwórz obiekt typu DirectionsService i wywołaj DirectionsService.route(), aby zainicjować żądanie do usługi wskazówek dojazdu, przekazując jej literał obiektu DirectionsRequest zawierający dane wejściowe i metodę wywołania zwrotnego, która ma zostać wykonana po otrzymaniu odpowiedzi.
Literał obiektu DirectionsRequest zawiera te pola:
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
Pola te zostały opisane poniżej:
origin(wymagany) określa lokalizację początkową, od której mają być obliczane wskazówki dojazdu. Tę wartość można określić jakoString(np. „Chicago, IL”), jako wartośćLatLnglub jako obiekt Place. Jeśli używasz obiektu Place, możesz określić identyfikator miejsca, ciąg zapytania lub lokalizacjęLatLng. Identyfikatory miejsc możesz pobierać z usług geokodowania, wyszukiwania miejsc i autouzupełniania miejsc w interfejsie Maps JavaScript API. Przykład użycia identyfikatorów miejsc z autouzupełniania miejsc znajdziesz w artykule Autouzupełnianie miejsc i wskazówki dojazdu.destination(wymagany) określa lokalizację końcową, do której mają zostać wyznaczone wskazówki dojazdu. Opcje są takie same jak w przypadku polaoriginopisanego powyżej.travelMode(wymagany) określa środek transportu, który ma być używany podczas obliczania wskazówek dojazdu. Prawidłowe wartości są podane poniżej w sekcji Środki transportu.transitOptions(opcjonalny) określa wartości, które mają zastosowanie tylko do żądań, w którychtravelModetoTRANSIT. Prawidłowe wartości są opisane poniżej w sekcji Opcje transportu.drivingOptions(opcjonalny) określa wartości, które mają zastosowanie tylko do żądań, w którychtravelModetoDRIVING. Prawidłowe wartości są opisane poniżej w sekcji Opcje jazdy.unitSystem(opcjonalny) określa, jakiego systemu jednostek używać podczas wyświetlania wyników. Prawidłowe wartości są podane w sekcji Układy jednostek poniżej.waypoints[](opcjonalny) określa tablicęDirectionsWaypoint. Punkty pośrednie zmieniają trasę, kierując ją przez określone lokalizacje. Punkt pośredni jest określany jako literał obiektu z polami pokazanymi poniżej:locationokreśla lokalizację punktu pośredniego jakoLatLng, obiekt Place lubString, który zostanie poddany geokodowaniu.stopoverto wartość logiczna, która wskazuje, że punkt pośredni jest przystankiem na trasie, co powoduje podzielenie trasy na 2 trasy.
(Więcej informacji o punktach pośrednich znajdziesz w sekcji Używanie punktów pośrednich w trasach poniżej).
optimizeWaypoints(opcjonalny) określa, że trasa z użyciem podanegowaypointsmoże zostać zoptymalizowana przez zmianę kolejności punktów na trasie na bardziej efektywną. Jeślitrue, usługa Directions zwróci zmienioną kolejnośćwaypointsw poluwaypoint_order.(Więcej informacji znajdziesz poniżej w sekcji Używanie punktów pośrednich w trasach).provideRouteAlternatives(opcjonalny) – jeśli jest ustawiony natrue, określa, że usługa wskazówek dojazdu może podać w odpowiedzi więcej niż 1 trasę alternatywną. Pamiętaj, że podanie alternatywnych tras może wydłużyć czas odpowiedzi serwera. Ta funkcja jest dostępna tylko w przypadku żądań bez pośrednich punktów orientacyjnych.avoidFerries(opcjonalny) – ustawienie wartościtruewskazuje, że obliczone trasy powinny w miarę możliwości omijać promy.avoidHighways(opcjonalny) – gdy jest ustawiony natrue, wskazuje, że obliczone trasy powinny w miarę możliwości omijać główne autostrady.avoidTolls(opcjonalny) – gdy jest ustawiony natrue, wskazuje, że obliczone trasy powinny w miarę możliwości unikać dróg płatnych.region(opcjonalny) określa kod regionu jako dwuznakową wartość ccTLD („domena najwyższego poziomu”). (Więcej informacji znajdziesz w sekcji Faworyzowanie regionu poniżej).
Poniżej znajdziesz przykładowy plik DirectionsRequest:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Środki transportu
Podczas obliczania wskazówek dojazdu musisz określić, którego środka transportu chcesz użyć. Obecnie obsługiwane są te środki transportu:
DRIVING(Default) – wskazuje standardowe wskazówki dojazdu z wykorzystaniem sieci dróg.BICYCLINGprosi o wskazówki dojazdu rowerem ścieżkami rowerowymi i preferowanymi ulicami.TRANSITprosi o wskazówki dojazdu trasami transportu publicznego.WALKINGprosi o trasę pieszą ścieżkami dla pieszych i chodnikami.
Aby dowiedzieć się, w jakim stopniu dany kraj obsługuje wskazówki dojazdu, zapoznaj się z szczegółami dotyczącymi zasięgu Google Maps Platform. Jeśli poprosisz o wskazówki dojazdu w regionie, w którym dany typ wskazówek jest niedostępny, odpowiedź zwróci DirectionsStatus="ZERO_RESULTS".
Uwaga: trasy piesze mogą nie obejmować wyraźnych ścieżek dla pieszych, dlatego w DirectionsResult będą wyświetlane ostrzeżenia. Te ostrzeżenia muszą być zawsze wyświetlane użytkownikowi. Jeśli nie używasz domyślnego elementu DirectionsRenderer, musisz zadbać o to, aby ostrzeżenia były wyświetlane.
Opcje transportu publicznego
Dostępne opcje prośby o wskazówki dojazdu różnią się w zależności od środka transportu.
Podczas wysyłania prośby o wskazówki dojazdu transportem publicznym opcje avoidHighways, avoidTolls, waypoints[] i optimizeWaypoints będą ignorowane. Możesz określić opcje wyznaczania trasy dla transportu publicznego za pomocą literału obiektu TransitOptions.
Wskazówki dojazdu transportem publicznym są zależne od czasu. Wskazówki dojazdu będą zwracane tylko w przypadku terminów w przyszłości.
Literał obiektu TransitOptions zawiera te pola:
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
Pola te zostały opisane poniżej:
arrivalTime(opcjonalny) określa pożądany czas przybycia jako obiektDate. Jeśli podano czas przyjazdu, czas odjazdu jest ignorowany.departureTime(opcjonalny) określa żądany czas odjazdu jako obiektDate. Jeśli podaszarrivalTime,departureTimezostanie zignorowany. Jeśli nie podano wartości dladepartureTimeaniarrivalTime, domyślnie przyjmuje się bieżący czas.modes[](opcjonalny) to tablica zawierająca co najmniej 1 literał obiektuTransitMode. To pole można uwzględnić tylko wtedy, gdy żądanie zawiera klucz interfejsu API. Każdy elementTransitModeokreśla preferowany środek transportu. Dozwolone są te wartości:BUSwskazuje, że obliczona trasa powinna preferować podróż autobusem.RAILwskazuje, że obliczona trasa powinna preferować podróż pociągiem, tramwajem, koleją miejską i metrem.SUBWAYwskazuje, że obliczona trasa powinna preferować podróż metrem.TRAINwskazuje, że obliczona trasa powinna preferować podróż pociągiem.TRAMwskazuje, że obliczona trasa powinna preferować podróż tramwajem i koleją miejską.
routingPreference(opcjonalny) określa preferencje dotyczące tras transportu publicznego. Za pomocą tej opcji możesz wpływać na zwracane opcje, zamiast akceptować domyślną najlepszą trasę wybraną przez interfejs API. To pole można określić tylko wtedy, gdy żądanie zawiera klucz interfejsu API. Dozwolone są te wartości:FEWER_TRANSFERSwskazuje, że obliczona trasa powinna preferować ograniczoną liczbę przesiadek.LESS_WALKINGwskazuje, że obliczona trasa powinna preferować ograniczone ilości chodzenia.
Poniżej znajduje się przykładowy DirectionsRequest transportem publicznym:
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Opcje jazdy
Opcje wyznaczania trasy dla wskazówek dojazdu możesz określić za pomocą obiektu DrivingOptions.
Obiekt DrivingOptions zawiera te pola:
{ departureTime: Date, trafficModel: TrafficModel }
Pola te zostały opisane poniżej:
departureTime(wymagany, aby literał obiektudrivingOptionsbył prawidłowy) określa żądany czas odjazdu jako obiektDate. Wartość musi być ustawiona na bieżący czas lub czas w przyszłości. Nie może przypadać w przeszłości. (Interfejs API konwertuje wszystkie daty na czas UTC, aby zapewnić spójne działanie w różnych strefach czasowych). Jeśli klienci korzystający z abonamentu Premium Google Maps Platform uwzględnią w żądaniu parametrdepartureTime, interfejs API zwróci najlepszą trasę z uwzględnieniem przewidywanych warunków na drodze w danym momencie i poda w odpowiedzi przewidywany czas jazdy w ruchu ulicznym (duration_in_traffic). Jeśli nie określisz godziny wyjazdu (czyli jeśli żądanie nie zawiera parametrudrivingOptions), zwrócona trasa będzie ogólnie dobra, ale nie będzie uwzględniać warunków na drodze.trafficModel(opcjonalny) określa założenia, które mają być używane podczas obliczania czasu w ruchu drogowym. To ustawienie wpływa na wartość zwracaną w poluduration_in_trafficw odpowiedzi, które zawiera przewidywany czas w ruchu ulicznym na podstawie średnich historycznych. Domyślna wartość tobestguess. Dozwolone są te wartości:bestguess(domyślny) wskazuje, że zwracany obiektduration_in_trafficpowinien być najlepszym oszacowaniem czasu podróży na podstawie informacji o historycznych i bieżących warunkach na drodze. Im bliżej bieżącego momentu znajduje siędepartureTime, tym ważniejsze stają się informacje o ruchu na żywo.pessimisticwskazuje, że zwracany czasduration_in_trafficpowinien być dłuższy niż rzeczywisty czas podróży w większości dni, chociaż w niektóre dni, gdy warunki na drodze są szczególnie złe, może przekroczyć tę wartość.optimisticwskazuje, że zwracany czasduration_in_trafficpowinien być krótszy niż rzeczywisty czas podróży w większości dni, chociaż w niektóre dni, gdy warunki na drodze są szczególnie dobre, czas podróży może być krótszy niż ta wartość.
Poniżej znajdziesz przykładowy obiekt DirectionsRequest ze wskazówkami dojazdu:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Układy jednostek
Domyślnie wskazówki dojazdu są obliczane i wyświetlane przy użyciu systemu jednostek kraju lub regionu, z którego pochodzi zapytanie.
(Uwaga: miejsca początkowe wyrażone za pomocą współrzędnych geograficznych, a nie adresów, są zawsze domyślnie podawane w jednostkach metrycznych). Na przykład trasa z „Chicago, IL” do „Toronto, ONT” będzie wyświetlać wyniki w milach, a trasa w odwrotnym kierunku – w kilometrach. Możesz zastąpić ten system jednostek, ustawiając go bezpośrednio w żądaniu za pomocą jednej z tych wartości UnitSystem:
UnitSystem.METRICokreśla użycie systemu metrycznego. Odległości są wyświetlane w kilometrach.UnitSystem.IMPERIALokreśla użycie systemu imperialnego (angielskiego). Odległości są wyświetlane w milach.
Uwaga: to ustawienie systemu jednostek wpływa tylko na tekst wyświetlany użytkownikowi. Wynik wskazówek dojazdu zawiera też wartości odległości, które nie są wyświetlane użytkownikowi i są zawsze wyrażone w metrach.
Dostosowywanie wskazówek dojazdu do regionu
Usługa wskazówek dojazdu interfejsu API Map Google zwraca wyniki adresowe, na które wpływa domena (region lub kraj), z której wczytano kod JavaScript. (Ponieważ większość użytkowników wczytuje https://maps.googleapis.com/,
ustawia to niejawną domenę na Stany Zjednoczone). Jeśli wczytasz kod początkowy z innej obsługiwanej domeny, otrzymasz wyniki, na które ta domena będzie miała wpływ. Na przykład wyszukiwanie hasła „San Francisco” może zwracać inne wyniki w aplikacjach, które wczytują https://maps.googleapis.com/ (Stany Zjednoczone), niż w tych, które wczytują http://maps.google.es/ (Hiszpania).
Możesz też ustawić usługę wskazówek dojazdu tak, aby zwracała wyniki faworyzujące dany region, używając parametru region. Ten parametr przyjmuje kod regionu określony jako dwuznakowy (nienumeryczny) podtag regionu Unicode. W większości przypadków te tagi są mapowane bezpośrednio na dwuznakowe wartości ccTLD („domena najwyższego poziomu”), np. „uk” w „co.uk”. W niektórych przypadkach tag region obsługuje też kody ISO-3166-1, które czasami różnią się od wartości ccTLD (np. „GB” dla „Wielkiej Brytanii”).
Podczas korzystania z parametru region:
- Podaj tylko jeden kraj lub region. Wiele wartości jest ignorowanych i może spowodować niepowodzenie żądania.
- Używaj tylko 2-znakowych podtagów regionu (format Unicode CLDR). Wszystkie inne dane wejściowe spowodują błędy.
Ustalanie regionu jest obsługiwane tylko w krajach i regionach, w których obsługiwane są wskazówki dojazdu. Aby sprawdzić zasięg międzynarodowy interfejsu Directions API (starsza wersja), zapoznaj się z szczegółami zasięgu Google Maps Platform.
Renderowanie wskazówek dojazdu
Inicjowanie zapytania o trasę dojazdu do DirectionsService za pomocą metody route() wymaga przekazania wywołania zwrotnego, które jest wykonywane po zakończeniu zapytania o usługę. To wywołanie zwrotne zwróci w odpowiedzi kod DirectionsResult i DirectionsStatus.
Stan zapytania o trasę
DirectionsStatus może zwracać te wartości:
OKwskazuje, że odpowiedź zawiera prawidłowyDirectionsResult.NOT_FOUNDoznacza, że nie udało się znaleźć kodu geograficznego co najmniej jednej z lokalizacji określonych w żądaniu jako punkt początkowy, punkt docelowy lub punkt pośredni.ZERO_RESULTSoznacza, że nie udało się znaleźć trasy między miejscem początkowym a docelowym.MAX_WAYPOINTS_EXCEEDEDwskazuje, że wDirectionsRequestpodano zbyt wiele pólDirectionsWaypoint. Więcej informacji znajdziesz w sekcji Limity dotyczące punktów na trasie poniżej.MAX_ROUTE_LENGTH_EXCEEDEDoznacza, że żądana trasa jest za długa i nie można jej przetworzyć. Ten błąd występuje, gdy zwracane są bardziej złożone wskazówki dojazdu. Spróbuj zmniejszyć liczbę punktów na trasie, skrętów lub instrukcji.INVALID_REQUESTwskazuje, że podany parametrDirectionsRequestbył nieprawidłowy. Najczęstsze przyczyny tego kodu błędu to żądania, w których brakuje miejsca początkowego lub docelowego, albo żądania dotyczące transportu publicznego, które zawierają punkty pośrednie.OVER_QUERY_LIMIToznacza, że strona internetowa wysłała zbyt wiele żądań w dozwolonym okresie.REQUEST_DENIEDoznacza, że strona internetowa nie może korzystać z usługi wskazówek dojazdu.UNKNOWN_ERRORoznacza, że nie udało się przetworzyć prośby o wskazówki dojazdu z powodu błędu serwera. Jeśli spróbujesz ponownie, żądanie może się powieść.
Przed przetworzeniem wyniku sprawdź tę wartość, aby upewnić się, że zapytanie o wskazówki dojazdu zwróciło prawidłowe wyniki.
Wyświetlanie DirectionsResult
Obiekt DirectionsResult zawiera wynik zapytania o trasę, który możesz obsłużyć samodzielnie lub przekazać do obiektu DirectionsRenderer, który może automatycznie obsłużyć wyświetlanie wyniku na mapie.
Aby wyświetlić DirectionsResult za pomocą DirectionsRenderer, musisz wykonać te czynności:
- Utwórz obiekt
DirectionsRenderer. - Wywołaj funkcję
setMap()w rendererze, aby powiązać go z przekazaną mapą. - Wywołaj metodę
setDirections()w rendererze, przekazując jej obiektDirectionsResult, jak opisano powyżej. Ponieważ moduł renderujący jest obiektemMVCObject, automatycznie wykrywa wszelkie zmiany swoich właściwości i aktualizuje mapę, gdy powiązane z nią wskazówki dojazdu ulegną zmianie.
W tym przykładzie obliczane są wskazówki dojazdu między 2 lokalizacjami na Route 66, gdzie miejsce rozpoczęcia i zakończenia trasy są określone przez podane wartości "start" i "end" na listach. DirectionsRenderer obsługuje wyświetlanie linii łamanej między wskazanymi lokalizacjami oraz umieszczanie znaczników w miejscu początkowym, docelowym i w punktach pośrednich (jeśli dotyczy).
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
W treści HTML:
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
Poniższy przykład pokazuje wskazówki dojazdu różnymi środkami transportu z Haight-Ashbury do Ocean Beach w San Francisco w Kalifornii:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
W treści HTML:
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
Obiekt DirectionsRenderer nie tylko obsługuje wyświetlanie linii łamanej i powiązanych z nią znaczników, ale może też wyświetlać wskazówki dojazdu w formie serii kroków. Aby to zrobić, wywołaj setPanel() na DirectionsRenderer, przekazując <div>, w którym mają być wyświetlane te informacje.
Dzięki temu wyświetlisz też odpowiednie informacje o prawach autorskich i wszelkie ostrzeżenia, które mogą być powiązane z wynikiem.
Wskazówki tekstowe będą podawane w języku preferowanym w przeglądarce lub w języku określonym podczas wczytywania interfejsu API JavaScript za pomocą parametru language. (więcej informacji znajdziesz w artykule na temat
lokalizacji). W przypadku wskazówek dojazdu transportem publicznym godzina będzie wyświetlana w strefie czasowej przystanku.
Poniższy przykład jest identyczny z powyższym, ale zawiera panel <div>, w którym wyświetlane są wskazówki dojazdu:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
W treści HTML:
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
Obiekt DirectionsResult
Gdy wysyłasz żądanie wskazówek do interfejsu DirectionsService, otrzymujesz odpowiedź zawierającą kod stanu i wynik, który jest obiektem DirectionsResult. DirectionsResult to literał obiektu z tymi polami:
geocoded_waypoints[]zawiera tablicę obiektówDirectionsGeocodedWaypoint, z których każdy zawiera szczegółowe informacje o geokodowaniu miejsca rozpoczęcia, miejsca docelowego i punktów pośrednich.routes[]zawiera tablicę obiektówDirectionsRoute. Każda trasa wskazuje sposób dotarcia z miejsca wyjazdu do miejsca docelowego podanego w parametrzeDirectionsRequest. Zwykle w odpowiedzi na dane żądanie zwracana jest tylko jedna trasa, chyba że poleprovideRouteAlternativesżądania ma wartośćtrue. W takim przypadku może zostać zwróconych kilka tras.
Uwaga: właściwość via_waypoint jest wycofana w trasach alternatywnych. Wersja 3.27 to ostatnia wersja interfejsu API, która dodaje dodatkowe punkty pośrednie na trasach alternatywnych. W przypadku interfejsu API w wersji 3.28 lub nowszej możesz nadal implementować wskazówki dojazdu z możliwością przeciągania za pomocą usługi Directions, wyłączając przeciąganie tras alternatywnych.
Można przeciągać tylko główną trasę. Użytkownicy mogą przeciągać główną trasę, aż będzie pasować do trasy alternatywnej.
Punkty trasy z geokodowaniem w Directions API
DirectionsGeocodedWaypoint zawiera szczegółowe informacje o kodowaniu geograficznym miejsca rozpoczęcia podróży, miejsca docelowego i punktów pośrednich.
DirectionsGeocodedWaypoint to literał obiektu z tymi polami:
geocoder_statuswskazuje kod stanu wynikający z operacji geokodowania. To pole może zawierać te wartości:"OK"oznacza, że nie wystąpiły żadne błędy, adres został pomyślnie przeanalizowany i zwrócono co najmniej 1 kod geograficzny."ZERO_RESULTS"oznacza, że kodowanie geograficzne zakończyło się powodzeniem, ale nie zwróciło żadnych wyników. Może się tak zdarzyć, jeśli do geokodera przekazano nieistniejący elementaddress.
-
partial_matchwskazuje, że geokoder nie zwrócił dopasowania ścisłego do pierwotnego żądania, ale udało mu się dopasować część żądanego adresu. Sprawdź, czy w pierwotnym żądaniu nie ma błędów pisowni lub niekompletnego adresu.Częściowe dopasowania występują najczęściej w przypadku adresów, które nie istnieją w miejscowości podanej w żądaniu. Częściowe dopasowania mogą być też zwracane, gdy żądanie pasuje do co najmniej 2 lokalizacji w tej samej miejscowości. Na przykład „Hillpar St, Bristol, UK” zwróci częściowe dopasowanie zarówno dla Henry Street, jak i Henrietta Street. Pamiętaj, że jeśli żądanie zawiera błędnie wpisany element adresu, usługa geokodowania może zasugerować alternatywny adres. Sugestie wywołane w ten sposób będą również oznaczone jako częściowe dopasowanie.
place_idto unikalny identyfikator miejsca, którego można używać z innymi interfejsami API Google. Możesz na przykład użyćplace_idz biblioteką Google Places API, aby uzyskać szczegółowe informacje o firmie działającej lokalnie, takie jak numer telefonu, godziny otwarcia, opinie użytkowników i inne. Zobacz omówienie identyfikatorów miejsc.types[]to tablica wskazująca typ zwróconego wyniku. Ta tablica zawiera zbiór co najmniej 1 tagu identyfikującego typ obiektu zwróconego w wyniku. Na przykład kod geograficzny „Chicago” zwraca „locality”, co oznacza, że „Chicago” to miasto, a także „political”, co oznacza, że jest to jednostka polityczna.
Trasy dojazdu
Uwaga: nazwa starszego obiektu DirectionsTrip została zmieniona na DirectionsRoute. Pamiętaj, że trasa odnosi się teraz do całej podróży od początku do końca, a nie tylko do etapu podróży nadrzędnej.
DirectionsRoute zawiera pojedynczy wynik z określonego miejsca początkowego i docelowego. Trasa może składać się z co najmniej 1 etapu (typu DirectionsLeg) w zależności od tego, czy określono punkty pośrednie. Trasa zawiera też informacje o prawach autorskich i ostrzeżenia, które oprócz informacji o trasie muszą być wyświetlane użytkownikowi.
DirectionsRoute to literał obiektu z tymi polami:
legs[]zawiera tablicę obiektówDirectionsLeg, z których każdy zawiera informacje o odcinku trasy między 2 lokalizacjami na danej trasie. Dla każdego określonego punktu na trasie lub miejsca docelowego będzie dostępny oddzielny odcinek. (Trasa bez punktów pośrednich będzie zawierać dokładnie 1 elementDirectionsLeg). Każdy odcinek składa się z serii elementówDirectionStep.waypoint_orderzawiera tablicę wskazującą kolejność punktów pośrednich na obliczonej trasie. Ta tablica może zawierać zmienioną kolejność, jeśli przekazano parametrDirectionsRequestoptimizeWaypoints: true.overview_pathzawiera tablicę obiektówLatLng, które reprezentują przybliżoną (wygładzoną) ścieżkę wynikowych wskazówek dojazdu.overview_polylinezawiera pojedynczy obiektpoints, który przechowuje reprezentację trasy w postaci zakodowanej linii łamanej. Ta linia łamana jest przybliżoną (wygładzoną) ścieżką wynikowych wskazówek dojazdu.boundszawiera elementLatLngBoundswskazujący granice linii łamanej wzdłuż danej trasy.copyrightszawiera tekst dotyczący praw autorskich, który ma być wyświetlany dla tej trasy.warnings[]zawiera tablicę ostrzeżeń, które mają być wyświetlane podczas pokazywania tych wskazówek dojazdu. Jeśli nie używasz podanego obiektuDirectionsRenderer, musisz samodzielnie obsługiwać i wyświetlać te ostrzeżenia.farezawiera łączną opłatę (czyli łączny koszt biletów) na tej trasie. Ta właściwość jest zwracana tylko w przypadku żądań dotyczących transportu publicznego i tylko w przypadku tras, na których informacje o opłatach są dostępne dla wszystkich odcinków transportu publicznego. Informacje te obejmują:currency: kod waluty w formacie ISO 4217 wskazujący walutę, w której wyrażona jest kwota.value: łączna kwota opłaty za przejazd w walucie określonej powyżej.
Etapy trasy
Uwaga: nazwa starszego obiektu DirectionsRoute została zmieniona na DirectionsLeg.
DirectionsLeg definiuje pojedynczy etap podróży od miejsca wyjazdu do miejsca docelowego na obliczonej trasie.
W przypadku tras, które nie zawierają punktów pośrednich, trasa będzie składać się z jednego „etapu”, ale w przypadku tras, które definiują co najmniej 1 punkt pośredni, trasa będzie składać się z co najmniej 1 etapu, odpowiadającego konkretnym etapom podróży.
DirectionsLeg to literał obiektu z tymi polami:
steps[]zawiera tablicę obiektówDirectionsStep, które zawierają informacje o każdym osobnym etapie podróży.distancewskazuje łączną odległość pokonaną na tym etapie jako obiektDistancew tej postaci:value– odległość w metrach,textzawiera ciąg znaków reprezentujący odległość, która domyślnie jest wyświetlana w jednostkach używanych w miejscu początkowym. (np. mile będą używane w przypadku dowolnego miejsca wylotu w Stanach Zjednoczonych). Możesz zastąpić ten system jednostek, ustawiając parametrUnitSystemw pierwotnym zapytaniu. Pamiętaj, że niezależnie od używanego systemu jednostek poledistance.valuezawsze zawiera wartość wyrażoną w metrach.
Jeśli odległość jest nieznana, te pola mogą być niezdefiniowane.
durationwskazuje łączny czas trwania tego odcinka jako obiektDurationw następującej postaci:valuewskazuje czas trwania w sekundach.textzawiera ciąg znaków reprezentujący czas trwania.
Jeśli czas trwania jest nieznany, te pola mogą być niezdefiniowane.
duration_in_trafficwskazuje łączny czas trwania tego odcinka z uwzględnieniem aktualnych warunków na drodze. Wartośćduration_in_trafficjest zwracana tylko wtedy, gdy są spełnione wszystkie te warunki:- Żądanie nie zawiera punktów pośrednich. Oznacza to, że nie obejmuje punktów pośrednich, w których
stopoverma wartośćtrue. - Prośba dotyczy konkretnie wskazówek dojazdu – parametr
modejest ustawiony nadriving. departureTimejest częścią poladrivingOptionsw żądaniu.- Warunki na drodze są dostępne dla wybranej trasy.
duration_in_trafficzawiera te pola:valuewskazuje czas trwania w sekundach.textzawiera zrozumiałą dla człowieka reprezentację czasu trwania.
- Żądanie nie zawiera punktów pośrednich. Oznacza to, że nie obejmuje punktów pośrednich, w których
arrival_timezawiera szacowany czas dotarcia na tym odcinku. Ta właściwość jest zwracana tylko w przypadku wskazówek dojazdu transportem publicznym. Wynik jest zwracany jako obiektTimez 3 właściwościami:valueczas określony jako obiektDatew JavaScripcie.text– czas określony jako ciąg znaków. Godzina jest wyświetlana w strefie czasowej przystanku transportu publicznego.time_zonezawiera strefę czasową tej stacji. Wartość to nazwa strefy czasowej zdefiniowana w bazie danych stref czasowych IANA, np. „America/New_York”.
departure_timezawiera szacowany czas odjazdu na tym odcinku, określony jako obiektTime. Parametrdeparture_timejest dostępny tylko w przypadku wskazówek dojazdu transportem publicznym.start_locationzawieraLatLngmiejsca rozpoczęcia tego odcinka. Ponieważ usługa internetowa wskazówek dojazdu oblicza wskazówki dojazdu między lokalizacjami, korzystając z najbliższej opcji transportu (zwykle drogi) w punktach początkowym i końcowym,start_locationmoże się różnić od podanego miejsca rozpoczęcia tego etapu, jeśli na przykład w pobliżu miejsca rozpoczęcia nie ma drogi.end_locationzawieraLatLngmiejsca docelowego tego etapu.DirectionsServiceoblicza wskazówki dojazdu między lokalizacjami, korzystając z najbliższej opcji transportu (zwykle drogi) w punktach początkowym i końcowym. Dlategoend_locationmoże się różnić od podanego miejsca docelowego tego etapu, jeśli np. w pobliżu miejsca docelowego nie ma drogi.start_addresszawiera zrozumiały dla człowieka adres (zwykle adres ulicy) początku tego odcinka.
Te treści powinny być odczytywane w takiej postaci, w jakiej są. Nie analizuj sformatowanego adresu programowo.end_addresszawiera zrozumiały dla człowieka adres (zwykle adres ulicy) końca tego odcinka.
Te treści powinny być odczytywane w takiej postaci, w jakiej są. Nie analizuj sformatowanego adresu programowo.
Kroki trasy
DirectionsStep to najbardziej podstawowa jednostka trasy, która zawiera pojedynczy krok opisujący konkretną instrukcję dotyczącą podróży. np. „Skręć w lewo na skrzyżowaniu z ulicą W. 4th St." Krok zawiera nie tylko instrukcję, ale też informacje o odległości i czasie trwania, które pokazują, jak ten krok odnosi się do następnego.
Na przykład krok oznaczony jako „Zjedź na I-80 West” może zawierać czas trwania „37 mil” i „40 minut”, co oznacza, że następny krok jest oddalony o 37 mil lub 40 minut od tego kroku.
Gdy używasz usługi Directions do wyszukiwania wskazówek dojazdu transportem publicznym, tablica steps będzie zawierać dodatkowe informacje dotyczące transportu publicznego w postaci obiektu transit. Jeśli wskazówki dojazdu obejmują kilka środków transportu, szczegółowe wskazówki dotyczące pieszych lub samochodowych etapów trasy zostaną podane w tablicy steps[].
Na przykład krok dotyczący chodzenia będzie zawierał wskazówki dojazdu z lokalizacji początkowej i końcowej: „Idź do Innes Ave & Fitch St”. Ten krok będzie zawierać szczegółowe wskazówki dotyczące trasy pieszej w tablicy steps[], takie jak „Kieruj się na północny zachód”, „Skręć w lewo w Arelious Walker” i „Skręć w lewo w Innes Ave”.
DirectionsStep to literał obiektu z tymi polami:
instructionszawiera instrukcje dotyczące tego kroku w ciągu tekstowym.distancezawiera odległość pokonaną w tym kroku do następnego kroku jako obiektDistance. (patrz opis w sekcjiDirectionsLegpowyżej). Jeśli odległość jest nieznana, to pole może być niezdefiniowane.durationzawiera szacowany czas potrzebny na wykonanie kroku do następnego kroku jako obiektDuration. (patrz opis w sekcjiDirectionsLegpowyżej). Jeśli czas trwania jest nieznany, to pole może być niezdefiniowane.start_locationzawiera zakodowane geograficznieLatLngpunktu początkowego tego kroku.end_locationzawieraLatLngpunktu końcowego tego kroku.polylinezawiera pojedynczy obiektpoints, który przechowuje reprezentację kroku w postaci zakodowanej linii łamanej. Ta linia łamana to przybliżona (wygładzona) ścieżka kroku.steps[]– literał obiektuDirectionsStep, który zawiera szczegółowe wskazówki dojazdu samochodem lub pieszo w ramach wskazówek dojazdu transportem publicznym. Podetapy są dostępne tylko w przypadku wskazówek dojazdu transportem publicznym.travel_modezawieraTravelModeużywany w tym kroku. Wskazówki dojazdu transportem publicznym mogą obejmować połączenie wskazówek dojazdu transportem publicznym i wskazówek dojazdu pieszo.pathzawiera tablicęLatLngsopisującą przebieg tego kroku.transitzawiera informacje dotyczące transportu publicznego, takie jak godziny przyjazdu i odjazdu oraz nazwa linii.
Informacje o transporcie publicznym
Wskazówki dojazdu transportem publicznym zawierają dodatkowe informacje, które nie są istotne w przypadku innych środków transportu. Te dodatkowe właściwości są udostępniane przez obiekt TransitDetails, który jest zwracany jako właściwość DirectionsStep. Z obiektu TransitDetails możesz uzyskać dostęp do dodatkowych informacji o obiektach TransitStop, TransitLine, TransitAgency i VehicleType, jak opisano poniżej.
Szczegóły transportu publicznego
Obiekt TransitDetails udostępnia te właściwości:
arrival_stopzawiera obiektTransitStopreprezentujący stację/przystanek przyjazdu z tymi właściwościami:name– nazwa stacji transportu publicznego/przystanku. np. „Plac Zamkowy”.location– lokalizacja stacji lub przystanku transportu publicznego, reprezentowana jakoLatLng.
departure_stopzawiera obiektTransitStopreprezentujący stację/przystanek początkowy.arrival_timezawiera czas przybycia określony jako obiektTimez 3 właściwościami:valueczas określony jako obiektDatew JavaScripcie.text– czas określony jako ciąg znaków. Godzina jest wyświetlana w strefie czasowej przystanku transportu publicznego.time_zonezawiera strefę czasową tej stacji. Wartość to nazwa strefy czasowej zdefiniowana w bazie danych stref czasowych IANA, np. „America/New_York”.
departure_timezawiera czas odjazdu określony jako obiektTime.headsignokreśla kierunek jazdy na tej linii, zgodnie z oznaczeniem na pojeździe lub na przystanku odjazdu. Często będzie to stacja końcowa.headway– jeśli jest dostępna, określa oczekiwaną liczbę sekund między odjazdami z tego samego przystanku w tym czasie. Jeśli na przykład wartośćheadwaywynosi 600, a autobus ucieknie, czas oczekiwania wyniesie 10 minut.linezawiera literał obiektuTransitLine, który zawiera informacje o linii transportu publicznego używanej na tym etapie.TransitLinezawiera nazwę i operatora linii oraz inne właściwości opisane w dokumentacji referencyjnejTransitLine.num_stopszawiera liczbę przystanków w tym kroku. Obejmuje przystanek docelowy, ale nie przystanek początkowy. Jeśli na przykład wskazówki dojazdu obejmują wyjazd z przystanku A, przejazd przez przystanki B i C oraz przyjazd na przystanek D, funkcjanum_stopszwróci wartość 3.
Linia transportu publicznego
Obiekt TransitLine udostępnia te właściwości:
namezawiera pełną nazwę tej linii transportu publicznego, np. „7 Avenue Express” lub „14th St Crosstown”.short_namezawiera krótką nazwę tej linii transportu publicznego. Zwykle jest to numer linii, np. „2” lub „M14”.agenciesto tablica zawierająca pojedynczy obiektTransitAgency. ObiektTransitAgencyzawiera informacje o operatorze tej linii, w tym te właściwości:namezawiera nazwę przewoźnika.phonezawiera numer telefonu agencji transportu publicznego.urlzawiera adres URL przewoźnika.
Uwaga: jeśli wskazówki dojazdu transportem publicznym renderujesz ręcznie, a nie za pomocą obiektu
DirectionsRenderer, musisz wyświetlać nazwy i adresy URL przewoźników obsługujących wyniki podróży.urlzawiera adres URL tej linii transportu publicznego podany przez przewoźnika.iconzawiera adres URL ikony powiązanej z tą linią. W większości miast będą używane ogólne ikony, które różnią się w zależności od typu pojazdu. Niektóre linie transportu publicznego, takie jak metro w Nowym Jorku, mają ikony charakterystyczne dla danej linii.colorzawiera kolor powszechnie używany w oznakowaniu tego środka transportu. Kolor będzie określony jako ciąg szesnastkowy, np. #FF0033.text_colorzawiera kolor tekstu powszechnie używanego w oznakowaniu tej linii. Kolor zostanie określony jako ciąg szesnastkowy.vehiclezawiera obiektVehicle, który obejmuje te właściwości:namezawiera nazwę pojazdu w tym wierszu. np. „Metro”.typezawiera typ pojazdu używanego na tej linii. Pełną listę obsługiwanych wartości znajdziesz w dokumentacji dotyczącej typu pojazdu.iconzawiera adres URL ikony powszechnie kojarzonej z tym typem pojazdu.local_iconzawiera adres URL ikony powiązanej z tym typem pojazdu na podstawie lokalnych znaków transportowych.
Typ pojazdu
Obiekt VehicleType udostępnia te właściwości:
| Wartość | Definicja |
|---|---|
VehicleType.RAIL |
Kolej. |
VehicleType.METRO_RAIL |
Kolej miejska. |
VehicleType.SUBWAY |
Podziemna kolej miejska. |
VehicleType.TRAM |
Naziemna kolej miejska. |
VehicleType.MONORAIL |
Kolej jednoszynowa. |
VehicleType.HEAVY_RAIL |
Kolej naziemna. |
VehicleType.COMMUTER_TRAIN |
Kolej podmiejska. |
VehicleType.HIGH_SPEED_TRAIN |
Pociąg szybkobieżny. |
VehicleType.BUS |
Autobus. |
VehicleType.INTERCITY_BUS |
Autobus krajowy. |
VehicleType.TROLLEYBUS |
Trolejbus. |
VehicleType.SHARE_TAXI |
Taksówka zbiorowa to rodzaj autobusu, który może wysadzać i zabierać pasażerów w dowolnym miejscu na trasie. |
VehicleType.FERRY |
Prom. |
VehicleType.CABLE_CAR |
Pojazd poruszający się po kablu, zwykle na ziemi. Kolejki linowe mogą być typu VehicleType.GONDOLA_LIFT. |
VehicleType.GONDOLA_LIFT |
Kolejka linowa. |
VehicleType.FUNICULAR |
Pojazd, który jest wciągany na strome zbocze za pomocą liny. Kolejka linowo-terenowa składa się zwykle z 2 wagoników, które działają jak przeciwwaga dla siebie nawzajem. |
VehicleType.OTHER |
Wszystkie inne pojazdy będą zwracać ten typ. |
Sprawdzanie DirectionsResults
Podczas analizowania odpowiedzi dotyczącej wskazówek dojazdu można sprawdzać i używać komponentów DirectionsResults: DirectionsRoute, DirectionsLeg, DirectionsStep i TransitDetails.
Ważne: jeśli renderujesz wskazówki dojazdu transportem publicznym ręcznie, zamiast używać obiektu DirectionsRenderer, musisz wyświetlać nazwy i adresy URL przewoźników obsługujących wyniki podróży.
Poniższy przykład przedstawia trasę pieszą do niektórych atrakcji turystycznych w Nowym Jorku. Sprawdzamy DirectionsStep trasy, aby dodać znaczniki dla każdego kroku, i dołączamy informacje do InfoWindow z tekstem instrukcji dla tego kroku.
Uwaga: ponieważ obliczamy trasę pieszą, wyświetlamy też użytkownikowi ostrzeżenia w osobnym panelu <div>.
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
W treści HTML:
<div>
<strong>Start: </strong>
<select id="start">
<option value="penn station, new york, ny">Penn Station</option>
<option value="grand central station, new york, ny">Grand Central Station</option>
<option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option>
<option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option>
<option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
<option value="260 Broadway New York NY 10007">City Hall</option>
<option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option>
<option value="moma, New York, NY">MOMA</option>
<option value="350 5th Ave, New York, NY, 10118">Empire State Building</option>
<option value="253 West 125th Street, New York, NY">Apollo Theatre</option>
<option value="1 Wall St, New York, NY">Wall St</option>
</select>
<div>Używanie punktów pośrednich w trasach
Jak wspomniano w opisie DirectionsRequest, podczas obliczania tras za pomocą usługi wskazówek dojazdu dla pieszych, rowerzystów lub kierowców możesz też określić punkty orientacyjne (typu DirectionsWaypoint). Punkty na trasie nie są dostępne w przypadku wskazówek dojazdu transportem publicznym.
Punkty pośrednie umożliwiają obliczanie tras przez dodatkowe lokalizacje. W takim przypadku zwrócona trasa przebiega przez podane punkty pośrednie.
waypoint składa się z tych pól:
location(wymagany) określa adres punktu pośredniego.stopover(opcjonalny) wskazuje, czy ten punkt pośredni jest rzeczywistym przystankiem na trasie (true), czy tylko preferencją dotyczącą trasy przez wskazaną lokalizację (false). Przystanki są domyślnie ustawione natrue.
Domyślnie usługa Directions oblicza trasę przez podane punkty pośrednie w podanej kolejności. Opcjonalnie możesz przekazać optimizeWaypoints: true w parametrze
DirectionsRequest, aby umożliwić usłudze Directions optymalizację podanej trasy przez zmianę kolejności punktów na bardziej efektywną. (Ta optymalizacja jest zastosowaniem
problemu komiwojażera). Czas podróży jest głównym czynnikiem, który jest optymalizowany, ale przy podejmowaniu decyzji o tym, która trasa jest najbardziej efektywna, mogą być brane pod uwagę inne czynniki, takie jak odległość, liczba zakrętów i wiele innych. Aby usługa Directions mogła zoptymalizować trasę, wszystkie punkty pośrednie muszą być przystankami.
Jeśli poprosisz usługę Directions o zoptymalizowanie kolejności punktów pośrednich, ich kolejność zostanie zwrócona w polu waypoint_order w obiekcie DirectionsResult.
W tym przykładzie obliczamy trasy przez Stany Zjednoczone, używając różnych punktów początkowych, końcowych i pośrednich. (Aby wybrać kilka punktów, naciśnij Ctrl i kliknij elementy na liście).
Zwróć uwagę, że sprawdzamy routes.start_address i routes.end_address, aby uzyskać tekst punktu początkowego i końcowego każdej trasy.
TypeScript
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
Limity i ograniczenia dotyczące punktów na trasie
Obowiązują te limity wykorzystania i ograniczenia:
- Maksymalna liczba punktów pośrednich dozwolona podczas korzystania z usługi wskazówek dojazdu w Maps JavaScript API to 25, nie licząc punktu początkowego i docelowego. Limity są takie same jak w przypadku usługi internetowej Directions API (starsza wersja).
- W przypadku usługi internetowej Directions API (starsza wersja) klienci mogą używać 25 punktów pośrednich oraz punktu początkowego i docelowego.
- Klienci korzystający z abonamentu Premium Google Maps Platform mogą dodać 25 punktów pośrednich oraz punkt początkowy i docelowy.
- Punkty pośrednie nie są obsługiwane w przypadku wskazówek dojazdu transportem publicznym.
Przeciąganie trasy
Użytkownicy mogą dynamicznie modyfikować wskazówki dojazdu rowerem, pieszo lub samochodem wyświetlane za pomocą elementu DirectionsRenderer, jeśli można je przeciągać. Pozwala to użytkownikowi wybierać i zmieniać trasy przez klikanie i przeciąganie wynikowych ścieżek na mapie.
Możesz określić, czy wyświetlacz modułu renderującego umożliwia przeciąganie wskazówek dojazdu, ustawiając właściwość draggable na true. Wskazówek dojazdu transportem publicznym nie można przeciągać.
Jeśli wskazówki dojazdu można przeciągać, użytkownik może wybrać dowolny punkt na ścieżce (lub punkt pośredni) wyrenderowanego wyniku i przenieść wskazany komponent do nowej lokalizacji. DirectionsRenderer zostanie dynamicznie zaktualizowany, aby wyświetlać zmodyfikowaną ścieżkę. Po zwolnieniu przycisku do mapy zostanie dodany punkt pośredni (oznaczony małym białym znacznikiem). Zaznaczenie i przeniesienie segmentu ścieżki spowoduje zmianę tego odcinka trasy, a zaznaczenie i przeniesienie znacznika punktu pośredniego (w tym punktów początkowych i końcowych) spowoduje zmianę odcinków trasy przechodzących przez ten punkt pośredni.
Ponieważ wskazówki dojazdu z możliwością przeciągania są modyfikowane i renderowane po stronie klienta, możesz monitorować i obsługiwać zdarzenie directions_changed w DirectionsRenderer, aby otrzymywać powiadomienia, gdy użytkownik zmodyfikuje wyświetlane wskazówki dojazdu.
Poniższy kod pokazuje podróż z Perth na zachodnim wybrzeżu Australii do Sydney na wschodnim wybrzeżu. Kod monitoruje zdarzenie directions_changed, aby aktualizować łączną odległość wszystkich etapów podróży.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;