使用 Google Maps JavaScript API 中的路線服務以前,首先要確保在爲 Google Maps JavaScript API 設置的同一項目的 Google API Console 中啓用 Google Maps Directions API。javascript
要查看已啓用 API 的列表,請執行如下操做:css
對於路線服務,具備如下使用限額:html
不管有多少位用戶共享同一項目,均以用戶會話爲單位施加速率限制。java
單位會話速率限制可防止將客戶端服務用於批量請求。對於批量請求,請使用 Google Maps Directions API 網絡服務。數據庫
必須按照所介紹的適用於 Google Maps Directions API 的政策使用路線服務。api
因爲 Google Maps API 須要調用外部服務器,所以訪問「路線」服務是異步進行的。爲此,您須要傳遞一個在完成請求後執行的回調方法。此回調方法會對結果進行處理。請注意,「路線」服務可能會以獨立 routes[]
數組形式返回多個可能的行程。數組
要使用 Google Maps JavaScript API 中的路線服務,須要建立一個 DirectionsService
類型的對象,並調用 DirectionsService.route()
向「路線」服務發起請求,同時向其傳遞一個 DirectionsRequest
對象字面量,後者包含輸入字詞和一個在收到響應後當即執行的回調方法。瀏覽器
DirectionsRequest
對象字面量包含如下字段:服務器
{
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,
avoidHighways: Boolean,
avoidTolls: Boolean,
region: String
}
這些字段解釋以下:網絡
origin
(必填):用於指定計算路線時所用的起始地點。該值能夠指定爲 String
(例如「伊利諾斯州芝加哥市」)、LatLng
值或 google.maps.Place
對象。若是使用 google.maps.Place
對象,您能夠指定一個地點 ID、一個查詢字符串或一個 LatLng
地點。您能夠從 Google Maps JavaScript API 中的地理編碼服務、地點搜索服務和地點自動完成服務檢索地點 ID。如需查看使用來自「地點自動完成」的地點 ID 的示例,請參閱地點自動完成和路線。destination
(必填):用於指定計算路線時所用的結束地點。其選項與上面所述 origin
字段的選項相同travelMode
(必填):用於指定計算路線時所用的交通方式。有效值見下文出行方式部分所述transitOptions
(可選):用於指定僅適用於 travelMode
爲 TRANSIT
的請求的值。有效值見下文公交選項部分所述drivingOptions
(可選):用於指定僅適用於 travelMode
爲 DRIVING
的請求的值。有效值見下文行車選項部分所述unitSystem
(可選):用於指定顯示結果時所用的單位制。有效值見下文單位制部分所述
waypoints[]
(可選):用於指定 DirectionsWaypoint
數組。路徑點經過使路線通過指定位置來改變路線。您可將路徑點指定爲帶有以下所示字段的一個對象字面量:
location
:用於以 LatLng
、google.maps.Place
對象或將進行地理編碼的 String
形式指定路徑點位置stopover
:一個布爾值,表示路徑點是路線上的一個停留點,可將路線一分爲二(如需瞭解有關路徑點的詳細信息,請參閱下文的在路線中使用路徑點。)
optimizeWaypoints
(可選):用於指明,可經過按更高效的順序從新安排路徑點,對使用提供的 waypoints
的路線進行優化。若是該值設置爲 true
,那麼「路線」服務將在 waypoint_order
字段中返回從新排序的 waypoints
。(有關詳細信息,請參閱下文在路線中使用路徑點部分。)provideRouteAlternatives
(可選):設置爲 true
時,指明「路線」服務可在響應中提供多條備用路線。請注意,提供備選路線可能會增長服務器的響應時間。avoidHighways
(可選):設置爲 true
時,表示計算的路線應避開主要公路(若是可能)。avoidTolls
(可選):設置爲 true
時,表示計算的路線應避開收費道路(若是可能)。region
(可選):用於以 ccTLD(「頂級域」)雙字符值形式指定地區代碼。(如需瞭解詳細信息,請參閱下面的地區偏向。)注:durationInTraffic
字段現已棄用。之前,咱們建議 Google Maps APIs Premium Plan 客戶使用此字段指明結果包含的持續時間是否應考慮當前交通情況。如今,您應改成使用 drivingOptions
字段。
下面是 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
}
計算路線時,您須要指定要使用的交通方式。目前支持如下出行方式:
DRIVING
(默認方式):表示使用道路網的標準駕車路線。BICYCLING
:請求經由自行車道和首選街道的騎行路線。TRANSIT
:請求經由公共交通線路的路線。WALKING
:請求經由步道和人行道的步行路線。請查閱 Google 地圖覆蓋範圍數據,肯定某個國家/地區支持的路線範圍。若是您對該路線類型不適用的區域請求路線,響應將會返回 DirectionsStatus
="ZERO_RESULTS
"。
步行路線有時可能不包含暢通無阻的步道,所以,若是您未使用默認的 DirectionsRenderer
,那麼步行路線將會在您應顯示的 DirectionsResult
中返回警告。
適用於某一路線請求的選項會根據出行方式的不一樣而有所區別。請求公交路線時,將會忽略 avoidHighways
、avoidTolls
、waypoints[]
和 optimizeWaypoints
選項。您能夠經過 TransitOptions
對象字面量指定公交專屬路線選項。
公交路線具備時效性。只有對於將來的時間纔會返回路線。
TransitOptions
對象字面量包含如下字段:
{
arrivalTime: Date,
departureTime: Date,
modes[]: TransitMode,
routingPreference: TransitRoutePreference
}
這些字段解釋以下:
arrivalTime
(可選):用於以 Date
對象的形式指按期望到達時間。若是指定了到達時間,就會忽略出發時間departureTime
(可選):用於以 Date
對象的形式指按期望出發時間。若是指定了 arrivalTime
,則 departureTime
將被忽略。若是未對 departureTime
或 arrivalTime
指定任何值,則默認採用當前時間modes[]
(可選):一個包含一個或多個 TransitMode
對象字面量的數組。只有在請求中包含 API 密鑰時纔會包括該字段。每一個 TransitMode
均指定一個首選的公交方式。容許使用如下值:
BUS
:表示計算的路線應首選公共汽車出行。RAIL
:表示計算的路線應首選火車、有軌電車、輕軌和地鐵出行。SUBWAY
:表示計算的路線應首選地鐵出行。TRAIN
:表示計算的路線應首選火車出行。TRAM
:表示計算的路線應首選有軌電車和輕軌出行。routingPreference
(可選):用於指定公交路線首選項。能夠利用該選項影響返回的選項,而不是接受 API 選擇的默認最佳路線。只有當請求包括 API 密鑰時,才能指定此字段。容許使用如下值:
FEWER_TRANSFERS
:表示計算的路線應首選換乘次數有限的路線。LESS_WALKING
:表示計算的路線應首選步行距離有限的路線。下面是針對公交方式的 DirectionsRequest
示例:
{
origin: 'Hoboken NJ',
destination: 'Carroll Gardens, Brooklyn',
travelMode: 'TRANSIT',
transitOptions: {
departureTime: new Date(1337675679473),
modes: ['BUS'],
routingPreference: 'FEWER_TRANSFERS'
},
unitSystem: google.maps.UnitSystem.IMPERIAL
}
您能夠經過 DrivingOptions
對象指定行車路線的行程選項。若是您想在 DirectionsRequest
中包含 drivingOptions
字段,則必須在加載 API 時提供一個 Google Maps APIs Premium Plan 客戶端 ID。
DrivingOptions
對象包含如下字段:
{
departureTime: Date,
trafficModel: TrafficModel
}
這些字段解釋以下:
departureTime
(drivingOptions
對象字面量必須具備此項纔有效):用於以 Date
對象指按期望出發時間。其值必須設置爲當前時間或將來某個時間,而不能是過去的時間。(API 會將全部日期都轉換爲 UTC,以確保不管時區如何,均提供一致處理。)對於 Google Maps APIs Premium Plan 客戶,若是您在請求中包含 departureTime
,則 API 會根據該時間內的預期交通情況,返回最佳路線,而且在響應中包含預計交通時間 (duration_in_traffic
)。若是您沒有指定出發時間(即:請求中沒有包含 drivingOptions
),則返回的路線一般是不考慮交通情況條件下的較佳路線。trafficModel
(可選):用於指定計算交通時間時所用的假設條件。此設置影響響應中 duration_in_traffic
字段中返回的值,該字段包含根據歷史平均值預測的交通時間。默認設置爲 bestguess
。容許使用如下值:
bestguess
(默認值)表示返回的 duration_in_traffic
應爲在同時考慮已知歷史交通情況和實時交通情況的狀況下對出行時間作出的最佳估計。departureTime
越接近當前時間,實時交通情況就越重要pessimistic
表示返回的 duration_in_traffic
應在大多很多天期長於實際出行時間,但在交通情況特別糟糕的日期,可能偶爾會發生超過該值的狀況。optimistic
表示返回的 duration_in_traffic
應在大多很多天期短於實際出行時間,但在交通情況特別理想的日期,可能偶爾會發生小於該值的狀況。下面是針對行車路線的 DirectionsRequest
示例:
{
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'
}
}
默認狀況下,使用起點所在國家或地區的單位制來計算和顯示路線。(注:以緯度/經度座標而不是地址表示的起點始終默認採用公制單位。)例如,從「伊利諾斯州芝加哥市」到「安大略省多倫多市」的路線結果將以英里顯示,而反向路線結果以千米顯示。您可使用如下某個 UnitSystem
值在請求中顯式設置一個單位制來重寫此單位制:
UnitSystem.METRIC
:用於指定使用公制單位。以千米爲單位顯示距離UnitSystem.IMPERIAL
:用於指定使用英制單位。以英里爲單位顯示距離注:此單位制設置僅會影響向用戶顯示的文本。路線結果還包括始終以米爲單位表示的距離值,但這些值不向用戶顯示。
Google Maps API Directions Service 返回的地址結果受到您從中載入 JavaScript 引導程序的域(國家或地區)的影響。(因爲大多數用戶都會加載 https://maps.google.com/
,所以對於美國用戶而言,這就設置了一個隱式域。)若是您是從其餘的支持域加載該引導程序的,那麼所得到的結果將會受到該域的影響。例如,搜索「San Francisco」時,加載 https://maps.google.com/
(美國)的應用與加載 http://maps.google.es/
(西班牙)的應用可能會返回不一樣的結果。
您還可使用 region
參數將「路線」服務設置爲返回偏向特定區域的結果。此參數採用一個以 IANA 語言 region
子標記指定的區域代碼。大多數狀況下,這些標記會直接映射到 ccTLD(「頂級域」)雙字符值,例如「co.uk」中的「uk」。某些狀況下,region
標記也支持 ISO-3166-1 代碼,該代碼有時會與 ccTLD 值有所不一樣(例如,「GB」表示「Great Britain」)。
請查閱 Google 地圖覆蓋範圍數據,肯定某個國家/地區支持的路線範圍。
若是使用 route()
方法向 DirectionsService
發起路線請求,則必須傳遞一個在該服務請求完成後執行的回調。此回調將在響應中返回 DirectionsResult
和 DirectionsStatus
代碼。
DirectionsStatus
可能會返回如下值:
OK
:表示響應包含一個有效的 DirectionsResult
NOT_FOUND
表示請求的起點、目的地或路徑點中指定的至少其中一個位置沒法接受地理編碼。ZERO_RESULTS
表示在起點與目的地之間未找到路線。MAX_WAYPOINTS_EXCEEDED
:表示 DirectionsRequest
中提供的 DirectionsWaypoint
字段過多。請參閱下文有關路徑點限制的內容。INVALID_REQUEST
:表示提供的 DirectionsRequest
無效。出現該錯誤代碼的最多見緣由包括:請求中缺乏起點或終點;或者公交請求中包括路徑點OVER_QUERY_LIMIT
:表示網頁在容許的時間段內發送的請求過多REQUEST_DENIED
:表示不容許網頁使用路線服務UNKNOWN_ERROR
表示因爲服務器發生錯誤而沒法處理路線請求。若是您重試一次,請求可能會成功您應該在處理結果前檢查此值,確保路線查詢返回的結果有效。
DirectionsResult
包含路線查詢結果,您能夠自行處理該結果,也能夠將其傳遞到 DirectionsRenderer
對象,該對象會自動處理將該結果顯示在地圖上。
要使用 DirectionsRenderer
顯示 DirectionsResult
,您只需執行如下操做:
DirectionsRenderer
對象setMap()
,以將其綁定到傳遞的地圖setDirections()
,以向其傳遞上述 DirectionsResult
。呈現程序是一個 MVCObject
,它會自動檢測其屬性發生的任何變化,並在其關聯路線更改時更新地圖下例計算了 66 號公路上兩個地點之間的路線,其中起點和終點由下拉列表中給定的 "start"
和 "end"
值設置。DirectionsRenderer
處理指定位置之間折線的顯示,並將標記放在起點、終點和全部路徑點(如適用)上。
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(41.850033, -87.6500523);
var mapOptions = {
zoom:7,
center: chicago
}
map = new google.maps.Map(document.getElementById('map'), mapOptions);
directionsDisplay.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') {
directionsDisplay.setDirections(result);
}
});
}
在 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