您可使用 DirectionsService
对象计算路线(使用各类交通方式)。此对象与 Google Maps API 路线服务进行通讯,该服务会接收路线请求并返回计算的结果。您能够自行处理这些路线结果,也可使用 DirectionsRenderer
对象呈现这些结果。javascript
您能够经过文本字符串(例如,“伊利诺斯州芝加哥市”或“澳大利亚新南威尔士州达尔文市”)或 LatLng
值的形式来指定路线的起点和终点。路线服务可使用一系列路标返回多段路线。路线能够显示为一条在地图上绘制路线的折线,此外,也能够显示为 <div>
元素中的一些文字说明(例如,“右转上中山南路”)。html
因为 Google Maps API 须要调用外部服务器,所以对路线服务的访问是异步进行的。为此,您须要传递一个回调方法,以便在请求完成时执行。此回调方法将会对结果进行处理。请注意,路线服务可能会以单个 routes[]
数组的形式返回多个可能的行程。java
要在 V3 中使用路线,请建立一个类型为 DirectionsService
的对象,并调用 DirectionsService.route()
向路线服务发起请求,同时向其传递一个 DirectionsRequest
对象常量(其中包含输入字词和一个用于在收到响应后执行的回调方法)。数据库
DirectionsRequest
对象常量包含如下字段:canvas
{ origin: LatLng | String, destination: LatLng | String, travelMode: TravelMode, transitOptions: TransitOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidHighways: Boolean, avoidTolls: Boolean region: String }
下面对这些字段进行了说明:数组
origin
(必填),用于指定计算路线时所用的起始地点。该值能够指定为 String
(例如“伊利诺斯州芝加哥市”),也能够指定为 LatLng
值。destination
(必填),用于指定计算路线时所用的结束地点。该值能够指定为 String
(例如“伊利诺斯州芝加哥市”),也能够指定为 LatLng
值。travelMode
(必填),用于指定计算路线时所用的交通方式。下面的出行方式中指明了有效值。transitOptions
(可选),用于指定仅适用于其中 travelMode
为 google.maps.TravelMode.TRANSIT
的请求的值。下面的公交选项中说明了有效值。unitSystem
(可选),用于指定显示结果时所用的单位制。您可在下面的单位制中指定有效的值。浏览器
waypoints[]
(可选),用于指定 DirectionsWaypoint
数组。路标可以使路线通过指定地点,从而更改路线。您可将路标指定为带有以下字段的一个对象常量:服务器
location
,用于以 LatLng
或要进行地理编码的 String
的形式指定路标的位置。stopover
(布尔值),用于表示路标是否为路线上的车站(可将该路线一分为二)。(有关路标的详情,请参阅下面的在路线中使用路标。)网络
optimizeWaypoints
(可选),用于指定可对使用提供的 waypoints
的路线进行优化,以提供尽量最短的路线。若是该值为 true
,那么路线服务将在 waypoints
字段中返回从新排序的 waypoint_order
。(有关详情,请参阅下面的在路线中使用路标。)provideRouteAlternatives
(可选),用于在设为 true
时指定路线服务可在响应中提供多条备用路线。请注意,提供备用路线可能会增长服务器的响应时间。avoidHighways
(可选),用于在设为 true
时表示计算的路线应避开主要公路(若是可能)。avoidTolls
(可选),用于在设为 true
时表示计算的路线应避开收费道路(若是可能)。region
(可选),用于指定代码,该区域代码已指定为 ccTLD(“顶级域”)双字符值。(有关详情,请参阅下面的区域偏向。)DirectionsRequest
示例以下所示:异步
{ origin: "Chicago, IL", destination: "Los Angeles, CA", waypoints: [ { location:"Joplin, MO", stopover:false },{ location:"Oklahoma City, OK", stopover:true }], provideRouteAlternatives: false, travelMode: TravelMode.DRIVING, unitSystem: UnitSystem.IMPERIAL }
计算路线时,您须要指定要使用的交通方式。目前支持如下出行方式:
google.maps.TravelMode.DRIVING
(默认),用于表示使用道路网络的标准行车路线。google.maps.TravelMode.BICYCLING
,用于请求通过骑行道和优先街道的骑行路线。google.maps.TravelMode.TRANSIT
,用于请求通过公交路线的路线。google.maps.TravelMode.WALKING
,用于请求通过步行街和人行道的步行路线。请查阅 Google 地图覆盖范围电子表格,肯定某个国家/地址支持的路线范围。若是您对该路线类型不适用的区域请求路线,响应将会返回DirectionsStatus
="ZERO_RESULTS
"。
步行路线有时可能不包含畅通无阻的步行街,所以,若是您未使用默认的 DirectionsRenderer
,那么步行路线将会在您应显示的 DirectionsResult
中返回警告。
公交服务目前属于“实验性”服务。在此阶段中,咱们会设定速率限制以防止 API 滥用。咱们最终会基于 API 的公平使用对每次加载地图的总查询次数设定上限。
适用于某一路线请求的选项会根据出行方式的不一样而有所区别。在请求公交路线时,将会忽略 avoidHighways
、avoidTolls
、waypoints[]
和 optimizeWaypoints
选项。您能够经过 TransitOptions
对象常量指定专门针对公交的路线选项。
公交路线具备时效性。只有对于将来的时间才会返回路线。
TransitOptions
对象常量包含如下字段:
{ departureTime: Date, arrivalTime: Date }
下面对这些字段进行了说明:
departureTime
(可选),用于以 Date
对象的形式指按期望出发时间。若是指定了 arrivalTime
,就会忽略 departureTime
。若是未对 departureTime
或 arrivalTime
指定任何值,则默认采用当前时间。arrivalTime
(可选),用于以 Date
对象的形式指按期望到达时间。若是指定了到达时间,就会忽略出发时间。公交 DirectionsRequest
的示例以下所示:
{ origin: "Hoboken NJ", destination: "Carroll Gardens, Brooklyn", travelMode: google.maps.TravelMode.TRANSIT, transitOptions: { departureTime: new Date(1337675679473) }, unitSystem: google.maps.UnitSystem.IMPERIAL }
默认状况下,使用起点所在国家或地区的单位制计算和显示路线。(注意:以纬度/经度坐标而不是地址表示的起点始终默认采用公制单位。)例如,将以英里显示从“伊利诺斯州芝加哥市”到“安大略省多伦多市”的路线结果,而以千米显示反向路线结果。您可使用如下某个 UnitSystem
值在请求中显式设置一个单位制,从而覆盖此单位制:
UnitSystem.METRIC
,用于指定使用公制。以千米为单位显示距离。UnitSystem.IMPERIAL
,用于指定使用英制。以英里为单位显示距离。注意:此单位制设置仅会影响向用户显示的文字。路线结果也包括始终以米为单位表示的距离值,但这些值不向用户显示。
Google Maps API Directions Service 将返回受到您从中载入 JavaScript 启动的域(区域或国家/地区)影响的地址结果。(因为大多数用户都会加载http://maps.google.com/
,所以对于美国用户而言,这就设置了一个隐式域。)若是您是从其余的支持域加载该引导程序的,那么所得到的结果将会受到该域的影响。例如,当加载 http://maps.google.com/
(美国)与加载 http://maps.google.es/
(西班牙)时,搜索“San Francisco”可能会从应用返回不一样的结果。
您还可使用 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
过多。容许的路标数目上限为 8 个,此外还包括起点和终点。Maps API for Business 客户可以使用 23 个路标,此外还包括起点和终点。公交路线不支持路标。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, mapTypeId: google.maps.MapTypeId.ROADMAP, center: chicago } map = new google.maps.Map(document.getElementById("map_canvas"), 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: google.maps.TravelMode.DRIVING }; directionsService.route(request, function(result, status) { if (status == google.maps.DirectionsStatus.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