该服务还作为 Google Maps JavaScript API 的一部分提供,或随 Java 和 Python 客户端内容库提供。
简介
Google Maps Directions API 是一项利用 HTTP 请求计算位置间路线的服务。
这段视频介绍了如何利用 Google Maps Directions API 来帮助用户找到方向。视频就如何在移动应用中使用该 API 时通过服务器代理该 Web 服务来保护您的 API 密钥提供了建议。
您可以搜索包括公共交通、驾车、步行或骑行在内的几种交通模式的路线。路线可能以文本字符串(例如:“Chicago, IL”或“Darwin, NT, Australia”)或纬度/经度坐标形式指定起点、目的地和路径点。Directions API 可使用一系列路径点返回多段式路线。
该服务一般设计用于计算静态(事先已知)地址的路线,以便在地图上放置应用内容;举例来说,该服务并非设计用于对用户输入作出实时响应。如需了解有关动态路线计算(例如,用户界面元素内的计算)的信息,请查阅 Google Maps JavaScript API Directions Service 的文档。
计算路线是一项耗费时间和资源的任务。请尽一切可能事先计算已知地址(利用本文介绍的服务),并将结果存储在您自己设计的临时缓存内。
受众
本文档的适用对象是想要在其中一个 Google Maps API 提供的地图内计算路线数据的网站和移动开发者。它介绍了 API 使用方法,并提供了有关可用参数的参考资料。
路线请求
Google Maps Directions API 请求使用以下格式:
https://maps.googleapis.com/maps/api/directions/output?parameters
其中,output 可以是以下值之一:
json(推荐)指示以 JavaScript 对象标记 (JSON) 输出xml指示以 XML 格式输出
如需通过 HTTP 访问 Google Maps Directions API,请使用:
http://maps.googleapis.com/maps/api/directions/output?parameters
对于请求中包含用户位置等敏感用户数据的应用,建议使用 HTTPS。
Google Maps Directions API URL 在接受 URL 编码后被限制在大约 2000 个字符。由于一些 Google Maps Directions API URL 可能涉及路径沿线的多个位置,请在构建 URL 时注意这一限制。
请求参数
某些参数是必备参数,其他则是可选参数。依照 URL 的标准,所有参数都使用“与”字符 (&) 分隔。下面枚举了各个参数及其可能的值。
必填参数
origin– 作为您路线计算起点的地址、纬度/经度文本值或地点 ID。- 如果您传递字符串形式的地址,Directions 服务将对字符串进行地理编码,并将其转换为纬度/经度坐标以计算路线。该坐标可能不同于 Google Maps Geocoding API 返回的值,例如可能是建筑入口而不是其中心。
- 如果您传递坐标,它们将不加更改地直接用于计算路线。确保纬度值与经度值之间不存在空格。
- 地点 ID 必须带有
place_id:前缀。只有在请求包括 API 密钥或 Google Maps API for Work 客户 ID 时,才能指定地点 ID。您可以从 Google Maps Geocoding API 和 Google Places API(包括“地点自动完成”)检索地点 ID。如需查看使用来自“地点自动完成”的地点 ID 的示例,请参阅地点自动完成和路线。如需了解更多有关地点 ID 的内容,请参阅地点 ID 概览。
destination– 作为您路线计算终点的地址、纬度/经度文本值或地点 ID。destination参数的选项与上述origin参数相同。key– 您的应用的 API 密钥。此密钥可以标识您的应用,以便进行配额管理。了解如何获取密钥。
注:Google Maps API for Work 用户必须在其 Directions 请求中提供有效的 client 和 signature 参数。如需了解详细信息,请参阅 Google Maps API for Work Web Services 一章。
可选参数
mode(默认为driving)– 指定在计算路线时使用的交通模式。出行模式中规定了有效值和其他请求详情。waypoints– 指定一组路径点。路径点通过使路线经过指定位置来改变路线。路径点以纬度/经度坐标、地点 ID 或将接受地理编码的地址形式指定。地点 ID 必须带有place_id:前缀。只有在请求包括 API 密钥或 Google Maps API for Work 客户 ID 时,才能指定地点 ID。只有驾车、步行和骑行路线支持路径点。(如需了解有关路径点的详细信息,请参阅下文的在路线中使用路径点。)alternatives– 设置为true时,指定 Directions 服务可在响应中提供多个备选路线。请注意,提供备选路线可能会增加服务器的响应时间。avoid– 表示计算的路线应避开指定的特征。该参数支持下列自变量:tolls表示计算的路线应避开收费公路/桥梁。highways表示计算的路线应避开高速公路。ferries表示计算的路线应避开渡口。indoor表示计算的路线应避开步行路线和公共交通路线的室内分段。只有包括 API 密钥或 Google Maps API for Work 客户 ID 的请求会在默认情况下收到室内分段。
language– 指定返回结果时使用的语言。请参阅支持的区域语言列表。请注意,我们会经常更新支持的语言,因此,此列表可能并不全面。如果未提供language,服务将会尝试使用发送请求区域的当地语言。units– 指定显示结果时使用的单位制。有效值见下文单位制部分所述region– 指定地区代码,以 ccTLD(“顶级域”)双字符值形式指定。(如需了解详细信息,请参阅下面的地区偏向。)arrival_time– 指定所需的公共交通路线到达时间,以协调世界时 1970 年 1 月 1 日午夜以来的秒数表示。您可以指定departure_time或arrival_time之一,但不能同时指定这两者。请注意,arrival_time必须指定为整数。departure_time– 指定所需的出发时间。您可以将该时间指定为一个整数,以协调世界时 1970 年 1 月 1 日午夜以来的秒数表示。此外,您还可以指定now值,该值将出发时间设置为当前时间(修正为最接近的秒)。可在两种情况下指定出发时间:- 对于出行模式为公共交通的请求:作为可选步骤,您可以指定
departure_time或arrival_time之一。如果两个时间均未指定,则departure_time默认使用 now 值(即,出发时间默认为当前时间)。 - 对于出行模式为驾车的请求:您可以指定
departure_time以获得考虑了交通状况因素的路线和驾行持续时间(响应字段:duration_in_traffic)。只有在请求包含有效的 API 密钥,或者有效的 Google Maps API for Work 客户 ID 和签名时,此选项才可用。departure_time必须设置为当前时间或未来的某个时间,而不能是过去的时间。
- 对于出行模式为公共交通的请求:作为可选步骤,您可以指定
traffic_model(默认为best_guess)– 指定在计算交通时间时使用的假设。此设置影响响应中duration_in_traffic字段中返回的值,该字段包含根据历史平均值预测的交通时间。只能为请求中包括departure_time的驾车路线指定traffic_model参数,并且只能在请求包括 API 密钥或 Google Maps API for Work 客户 ID 时进行指定。该参数的可用值如下:best_guess(默认值)表示返回的duration_in_traffic应为在同时考虑已知历史交通状况和实时交通状况的情况下对出行时间做出的最佳估计。departure_time与当前时间越接近,实时交通状况就越重要。pessimistic表示返回的duration_in_traffic应在大多数日期长于实际出行时间,但在交通状况特别糟糕的日期,可能偶尔会发生超过该值的情况。optimistic表示返回的duration_in_traffic应在大多数日期短于实际出行时间,但在交通状况特别理想的日期,可能偶尔会发生小于该值的情况。
transit_mode– 指定一个或多个首选公共交通模式。只能为公共交通路线指定此参数,并且只有在请求包括 API 密钥或 Google Maps API for Work 客户 ID 时才能进行指定。该参数支持下列自变量:bus表示计算的路线应首选公共汽车出行。subway表示计算的路线应首选地铁出行。train表示计算的路线应首选火车出行。tram表示计算的路线应首选有轨电车和轻轨出行。rail表示计算的路线应首选火车、有轨电车、轻轨和地铁出行。它相当于transit_mode=train|tram|subway。
transit_routing_preference– 指定公共交通路线首选项。您可以利用该参数影响返回的选项,而不是接受 API 选择的默认最佳路线。只能为公共交通路线指定此参数,并且只有在请求包括 API 密钥或 Google Maps API for Work 客户 ID 时才能进行指定。该参数支持下列自变量:less_walking表示计算的路线应首选步行距离有限的路线fewer_transfers表示计算的路线应首选换乘次数有限的路线
示例路线请求
以下请求返回从安大略省多伦多至魁北克省蒙特利尔的驾车路线。
https://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&key=YOUR_API_KEY
通过更改 mode 和 avoid 参数,可将初始请求修改为返回避开大型高速公路的观光自行车骑行路线。
https://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&avoid=highways&mode=bicycling&key=YOUR_API_KEY
以下请求搜索从纽约市布鲁克林区至纽约市皇后区的公共交通路线。该请求未指定 departure_time,因此出发时间默认为当前时间:
https://maps.googleapis.com/maps/api/directions/json?origin=Brooklyn&destination=Queens&mode=transit&key=YOUR_API_KEY
以下请求包括具体的出发时间。
注:在该示例中,指定的出发时间是 2012 年 7 月 30 日上午 09:45。为避免错误,您必须将该参数更改为某个未来时间,然后再提交请求。
https://maps.googleapis.com/maps/api/directions/json?origin=Brooklyn&destination=Queens&departure_time=1343641500&mode=transit&key=YOUR_API_KEY
以下请求利用地点 ID 返回从英国格拉斯哥至英国珀斯的驾车路线。
https://maps.googleapis.com/maps/api/directions/json?origin=place_id:ChIJ685WIFYViEgRHlHvBbiD5nE&destination=place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y&key=YOUR_API_KEY
出行模式
当您计算路线时,可以指定要使用的交通 mode。默认情况下,计算的路线为 driving 路线。支持下列出行模式:
driving(默认值)表示使用道路网的标准驾车路线。walking请求经由步道和人行道(如有)的步行路线。bicycling请求经由自行车道和首选街道(如有)的骑行路线。transit请求经由公共交通线路(如有)的路线。如果您将该模式设置为transit,作为可选步骤,您可以指定departure_time或arrival_time。如果两个时间均未指定,则departure_time默认使用 now 值(即,出发时间默认为当前时间)。作为可选步骤,您还可提供transit_mode和/或transit_routing_preference。
注:有时,步行路线和骑行路线可能均不包括明确的步道或自行车道,因此这些路线将在您必须向用户显示的返回结果中返回 warnings。
路径点
使用 Google Maps Directions API 计算路线时,您还可以指定驾车、步行或骑行路线的路径点(不为公共交通路线提供路径点)。您可以利用路径点计算途经附加位置的路线,在这种情况下,返回的路线将包括在每个已知路径点处的停靠站。
路径点在 waypoints 参数内指定,包括一个或多个由管道字符 (|) 分隔的地址或位置。
例如,以下 URL 发起的 Directions 请求针对马萨诸塞州波士顿至马萨诸塞州康科德的路线,期间顺次停靠查尔斯顿和列克星敦:
https://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&waypoints=Charlestown,MA|Lexington,MA&key=YOUR_API_KEY
对于请求中的每个路径点,路线响应均会在 legs 数组中加入一个额外条目,提供该段旅程的对应详情。
如果您想在不添加停靠站的情况下利用路径点影响路线,请为路径点添加 via: 前缀。带有 via: 前缀的路径点不会向 legs 数组添加条目,而是将旅程路线改为途经提供的路径点。
以下 URL 对之前请求做了适当修改,将旅程路线改为途经列克星敦,并且不做停靠:
https://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&waypoints=Charlestown,MA|via:Lexington,MA&key=YOUR_API_KEY
创建路线来响应用户在地图上拖动路径点的操作时,via: 前缀最为有效。这样做可让用户实时了解最终路线的具体走向,并有助于确保将路径点放置在 Google Maps Directions API 可以访问的位置。
优化您的路径点
默认情况下,“路线”服务会按所提供路径点的给定顺序计算经过这些路径点的路线。作为可选步骤,您可以传递 optimize:true 作为 waypoints 参数内的第一个自变量,以便 Directions 服务通过按更高效的顺序重组路径点来优化提供的路线。(此优化用于求解旅行推销员问题。)
如果您指示 Directions 服务优化其路径点的顺序,其顺序将通过 routes 对象内的 waypoint_order 字段返回。waypoint_order 字段返回以零为起点的值。
以下示例利用路线优化计算从南澳大利亚州阿德莱德至南澳大利亚州各主要葡萄酒产区的公路旅行路线。
https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&key=YOUR_API_KEY
对计算路线的检查表明,该路线是按以下路径点顺序计算的:
"waypoint_order": [ 1, 0, 2, 3 ]
限制
计算的路线可以遵从特定限制。利用 avoid 参数来表示限制,该参数的自变量表示需要避开的限制。支持下列限制:
avoid=tollsavoid=highwaysavoid=ferries
可通过同时向 avoid 参数传递多种限制来请求可避开收费公路、高速公路和渡口任意组合的路线。例如:avoid=tolls|highways|ferries。
注:添加限制不会将包括受限特征的路线排除在外,其作用仅仅是通过影响结果来获得更有利的路线。
单位制
路线结果在 distance 字段内包含有 text,可向用户显示这些文本,以指示路线某一“分段”的距离。默认情况下,这些文本使用起点国家或地区的单位制。
例如,从“伊利诺斯州芝加哥市”到“安大略省多伦多市”的路线结果将以英里显示,而反向路线结果以公里显示。您可以通过在请求的 units 参数内显式地进行设置,传递下列值之一,来重写该单位制:
metric指定使用公制。返回的文本距离使用公里和米。imperial指定使用英制。返回的文本距离使用英里和英尺。
注:此单位制设置只影响显示在 distance 字段内的 text。distance 字段还包含始终以米表示的 values。
地区偏向
您还可以利用 region 参数将 Directions 服务设置为返回偏向特定地区的结果。该参数带有指定地区偏向的 ccTLD(国家代码顶级域)自变量。大多数 ccTLD 代码与 ISO 3166-1 代码相同,但有一些明显的例外。例如,英国的国家代码顶级域名为“uk”(.co.uk),而其 ISO 3166-1 代码却是“gb”(专指“大不列颠及北爱尔兰联合王国”这一实体)。
您可以利用 Google 地图主应用发布了驾车路线的任何域。
例如,如果 region 设置为 es,从“托莱多”至“马德里”的路线请求便可返回结果,因为“托莱多”会被解读为西班牙城市:
https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=YOUR_API_KEY
{
"status": "OK",
"routes": [ {
"summary": "AP-41",
"legs": [ {
...
} ],
"copyrights": "Map data ©2010 Europa Technologies, Tele Atlas",
"warnings": [ ],
"waypoint_order": [ ]
} ]
}
如果发送的“托莱多”至“马德里”路线请求不带 region 参数,则不会返回任何结果,因为“托莱多”会被解读为俄亥俄州的城市:
https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&key=YOUR_API_KEY
{
"status": "ZERO_RESULTS",
"routes": [ ]
}
路线响应
路线响应以 URL 请求路径中 output 标志指示的格式返回。
示例响应
下面显示了一个示例 HTTP 请求,计算从伊利诺伊州芝加哥至加利福尼亚州洛杉矶,途径密苏里州乔普林和俄克拉荷马州俄克拉荷马市这两个路径点的路线。
https://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&key=YOUR_API_KEY
以上示例请求 JSON 输出。也可请求 XML 输出。点击下面的选项卡,查看 JSON 和 XML 响应示例。
由于路线结果可能相当冗长,因此为清楚起见,省略了响应内的重复元素。
{
"status": "OK",
"geocoded_waypoints" : [
{
"geocoder_status" : "OK",
"place_id" : "ChIJ7cv00DwsDogRAMDACa2m4K8",
"types" : [ "locality", "political" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJ69Pk6jdlyIcRDqM1KDY3Fpg",
"types" : [ "locality", "political" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJgdL4flSKrYcRnTpP0XQSojM",
"types" : [ "locality", "political" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJE9on3F3HwoAR9AhGJW_fL-I",
"types" : [ "locality", "political" ]
}
],
"routes": [ {
"summary": "I-40 W",
"legs": [ {
"steps": [ {
"travel_mode": "DRIVING",
"start_location": {
"lat": 41.8507300,
"lng": -87.6512600
},
"end_location": {
"lat": 41.8525800,
"lng": -87.6514100
},
"polyline": {
"points": "a~l~Fjk~uOwHJy@P"
},
"duration": {
"value": 19,
"text": "1 min"
},
"html_instructions": "Head \u003cb\u003enorth\u003c/b\u003e on \u003cb\u003eS Morgan St\u003c/b\u003e toward \u003cb\u003eW Cermak Rd\u003c/b\u003e",
"distance": {
"value": 207,
"text": "0.1 mi"
}
},
...
... additional steps of this leg
...
... additional legs of this route
"duration": {
"value": 74384,
"text": "20 hours 40 mins"
},
"distance": {
"value": 2137146,
"text": "1,328 mi"
},
"start_location": {
"lat": 35.4675602,
"lng": -97.5164276
},
"end_location": {
"lat": 34.0522342,
"lng": -118.2436849
},
"start_address": "Oklahoma City, OK, USA",
"end_address": "Los Angeles, CA, USA"
} ],
"copyrights": "Map data ©2010 Google, Sanborn",
"overview_polyline": {
"points": "a~l~Fjk~uOnzh@vlbBtc~@tsE`vnApw{A`dw@~w\\|tNtqf@l{Yd_Fblh@rxo@b}@xxSfytAblk@xxaBeJxlcBb~t@zbh@jc|Bx}C`rv@rw|@rlhA~dVzeo@vrSnc}Axf]fjz@xfFbw~@dz{A~d{A|zOxbrBbdUvpo@`cFp~xBc`Hk@nurDznmFfwMbwz@bbl@lq~@loPpxq@bw_@v|{CbtY~jGqeMb{iF|n\\~mbDzeVh_Wr|Efc\\x`Ij{kE}mAb~uF{cNd}xBjp]fulBiwJpgg@|kHntyArpb@bijCk_Kv~eGyqTj_|@`uV`k|DcsNdwxAott@r}q@_gc@nu`CnvHx`k@dse@j|p@zpiAp|gEicy@`omFvaErfo@igQxnlApqGze~AsyRzrjAb__@ftyB}pIlo_BflmA~yQftNboWzoAlzp@mz`@|}_@fda@jakEitAn{fB_a]lexClshBtmqAdmY_hLxiZd~XtaBndgC"
},
"warnings": [ ],
"waypoint_order": [ 0, 1 ],
"bounds": {
"southwest": {
"lat": 34.0523600,
"lng": -118.2435600
},
"northeast": {
"lat": 41.8781100,
"lng": -87.6297900
}
}
} ]
}
一般而言,查询路线时只返回 routes 数组中的一个条目,但如果您传递 alternatives=true,Directions 服务则可返回几个路线。
请注意,如果您想从结果中提取值,通常需要对这些结果进行解析。JSON 的解析相对容易。请参阅解析 JSON,了解一些建议的设计模式。
<DirectionsResponse>
<status>OK</status>
<geocoded_waypoint>
<geocoder_status>OK</geocoder_status>
<type>locality</type>
<type>political</type>
<place_id>ChIJ7cv00DwsDogRAMDACa2m4K8</place_id>
</geocoded_waypoint>
<geocoded_waypoint>
<geocoder_status>OK</geocoder_status>
<type>locality</type>
<type>political</type>
<place_id>ChIJ69Pk6jdlyIcRDqM1KDY3Fpg</place_id>
</geocoded_waypoint>
<geocoded_waypoint>
<geocoder_status>OK</geocoder_status>
<type>locality</type>
<type>political</type>
<place_id>ChIJgdL4flSKrYcRnTpP0XQSojM</place_id>
</geocoded_waypoint>
<geocoded_waypoint>
<geocoder_status>OK</geocoder_status>
<type>locality</type>
<type>political</type>
<place_id>ChIJE9on3F3HwoAR9AhGJW_fL-I</place_id>
</geocoded_waypoint>
<route>
<summary>I-40 W</summary>
<leg>
<step>
<travel_mode>DRIVING</travel_mode>
<start_location>
<lat>41.8507300</lat>
<lng>-87.6512600</lng>
</start_location>
<end_location>
<lat>41.8525800</lat>
<lng>-87.6514100</lng>
</end_location>
<polyline>
<points>a~l~Fjk~uOwHJy@P</points>
</polyline>
<duration>
<value>19</value>
<text>1 min</text>
</duration>
<html_instructions>Head <b>north</b> on <b>S Morgan St</b> toward <b>W Cermak Rd</b></html_instructions>
<distance>
<value>207</value>
<text>0.1 mi</text>
</distance>
</step>
...
... additional steps of this leg
...
... additional legs of this route
<duration>
<value>74384</value>
<text>20 hours 40 mins</text>
</duration>
<distance>
<value>2137146</value>
<text>1,328 mi</text>
</distance>
<start_location>
<lat>35.4675602</lat>
<lng>-97.5164276</lng>
</start_location>
<end_location>
<lat>34.0522342</lat>
<lng>-118.2436849</lng>
</end_location>
<start_address>Oklahoma City, OK, USA</start_address>
<end_address>Los Angeles, CA, USA</end_address>
<copyrights>Map data ©2010 Google, Sanborn</copyrights>
<overview_polyline>
<points>a~l~Fjk~uOnzh@vlbBtc~@tsE`vnApw{A`dw@~w\|tNtqf@l{Yd_Fblh@rxo@b}@xxSfytAblk@xxaBeJxlcBb~t@zbh@jc|Bx}C`rv@rw|@rlhA~dVzeo@vrSnc}Axf]fjz@xfFbw~@dz{A~d{A|zOxbrBbdUvpo@`cFp~xBc`Hk@nurDznmFfwMbwz@bbl@lq~@loPpxq@bw_@v|{CbtY~jGqeMb{iF|n\~mbDzeVh_Wr|Efc\x`Ij{kE}mAb~uF{cNd}xBjp]fulBiwJpgg@|kHntyArpb@bijCk_Kv~eGyqTj_|@`uV`k|DcsNdwxAott@r}q@_gc@nu`CnvHx`k@dse@j|p@zpiAp|gEicy@`omFvaErfo@igQxnlApqGze~AsyRzrjAb__@ftyB}pIlo_BflmA~yQftNboWzoAlzp@mz`@|}_@fda@jakEitAn{fB_a]lexClshBtmqAdmY_hLxiZd~XtaBndgC</points>
</overview_polyline>
<waypoint_index>0</waypoint_index>
<waypoint_index>1</waypoint_index>
<bounds>
<southwest>
<lat>34.0523600</lat>
<lng>-118.2435600</lng>
</southwest>
<northeast>
<lat>41.8781100</lat>
<lng>-87.6297900</lng>
</northeast>
</bounds>
</route>
</DirectionsResponse>
请注意,XML 响应包含一个 <DirectionsResponse> 和下列顶级元素:
<status>包含请求的元数据。请参阅下面的状态代码。- 每个路径点一个
<geocoded_waypoint>,外加起点和目的地,提供有关对这些元素进行地理编码结果的详情。可能存在空的<geocoded_waypoint/>元素。请参阅下文的地理编码路径点。 - 零个或多个
<route>元素,每个都包含一组起点与目的地之间的路线信息。
除非出于某种原因,您的服务要求使用 xml,否则我们建议您使用 json 作为首选输出标志。处理 XML 树时应小心谨慎,以便引用正确的节点和元素。如需了解输出处理的推荐设计模式,请参阅使用 XPath 解析 XML。
本文档的其余部分将使用 JSON 语法。在大多数情况下,在用于说明文档中的概念或字段名称时,输出格式无关紧要。但请注意下列细微差异:
- XML 结果包装在
<DirectionsResponse>根元素中。 - JSON 通过复数数组 (
steps) 表示包含多个元素的条目,而 XML 表示同样内容时使用的是多个单数元素 (<step>)。 - 在 JSON 中,通过空数组来表示空元素,但在 XML 中,则是通过任何此类元素的不存在来表示。例如,在 JSON 中,不生成结果的响应将返回空的
routes数组,但在 XML 中,则是不返回<route>元素。
路线响应元素
路线响应包含下列根元素:
status包含请求的元数据。请参阅下面的状态代码。geocoded_waypoints包含一个数组,其中提供了有关起点、目的地和路径点地理编码的详情。请参阅下文的地理编码路径点。routes包含一个数组,其中提供了从起点至目的地的路线。请参阅下文的路线。路线包括嵌套的段和分段。
状态代码
Directions 响应对象中的 status 字段包含了请求的状态,还可能包含调试信息,以帮助您追查 Directions 服务的失败原因。status 字段可以包含以下值:
OK表示响应包含有效的result。NOT_FOUND表示请求的起点、目的地或路径点中指定的至少其中一个位置无法接受地理编码。ZERO_RESULTS表示在起点与目的地之间未找到路线。MAX_WAYPOINTS_EXCEEDED表示请求中提供的waypoints过多。允许的最大waypoints数量是 23 个,外加起点和目的地。(如果请求不包括 API 密钥,则允许的最大waypoints数量为 8。Google Maps API for Work 客户提交的请求最多可包含 23 个路径点。)INVALID_REQUEST表示提供的请求无效。这一状态的常见原因包括参数或参数值无效。OVER_QUERY_LIMIT表示服务在允许的时段内从您的应用收到的请求数量过多。REQUEST_DENIED表示服务拒绝您的应用使用路线服务。UNKNOWN_ERROR表示由于服务器发生错误而无法处理路线请求。如果您重试一次,请求可能会成功
错误消息
如果状态代码不是 OK,在 Directions 响应对象中可能会包含附加的 error_message 字段。此字段更详细地说明了给定状态代码背后的原因。
注:此字段不保证始终出现,并且其内容可能会更改。
地理编码路径点
如需了解有关各路径点以及起点和目的地地理编码的详情,请参阅 (JSON) geocoded_waypoints 数组。可以利用它们推断出服务返回意外路线或不返回路线的原因。
geocoded_waypoints 数组中的元素按照其以零为起点的位置,与起点、指定顺序的路径点及目的地一一对应。每个元素都包含下列有关对应路径点地理编码运算的详情:
geocoder_status:表示地理编码操作所产生的状态代码。此字段可能包含以下值:"OK"表示未出现任何错误;已成功解析地址,并且至少返回了一个地理编码。"ZERO_RESULTS"表示地理编码成功,但未返回任何结果。如果向地理编码器传递了一个不存在address,就可能会发生这种情况。
-
partial_match表示虽然地理编码器能够匹配所请求的地址的一部分,但它未能返回原始请求的精确匹配项。您不妨检查一下原始请求中是否有拼写错误和/或地址不完整的情况。对于请求中所传递的行政区划内不存在的街道地址,最常发生部分匹配的情况。当请求与同一行政区划中的两个或更多位置相匹配时,也可能会返回部分匹配。例如,“21 Henr St, Bristol, UK”将返回 Henry Street 和 Henrietta Street 这两项部分匹配结果。请注意,如果请求中包含拼写错误的地址组成部分,地理编码服务可能会建议一个备选地址。以这种方式触发的建议也将标记为部分匹配。
place_id是唯一一个可以与其他 Google API 结合使用的标识符。例如,您可以使用 Google 地点自动完成响应中的place_id来计算前往本地商家的路线。请参阅地点 ID 概览。types表示用于计算路线的地理编码结果的地址类型。返回以下类型:street_address表示精确的街道地址。route:表示已命名的路线(例如“US 101”)intersection:表示主要交叉路口,通常是两条主要道路的交叉路口political:表示政治实体。通常,这种类型表示某个民政管理部门的多边形country:表示国家政治实体,通常是由地理编码器返回的最高级别类型administrative_area_level_1:表示国家/地区级别以下的一级行政实体。在美国,这种行政级别就是州。并非所有国家都设有这类行政级别administrative_area_level_2:表示国家/地区级别以下的二级行政实体。在美国,这种行政级别就是县。并非所有国家都设有这类行政级别administrative_area_level_3:表示国家/地区级别以下的三级行政实体。此类型表示较小的行政区划单位。并非所有国家都设有这类行政级别administrative_area_level_4:表示国家/地区级别以下的四级行政实体。此类型表示较小的行政区划单位。并非所有国家都设有这类行政级别administrative_area_level_5:表示国家/地区级别以下的五级行政实体。此类型表示较小的行政区划单位。并非所有国家都设有这类行政级别colloquial_area:表示实体的常用替代名称locality表示合并的城市或城镇政治实体。ward表示一种特定的日本行政区划类型,以便于区分某个日本地址中的多个行政区划组成部分。sublocality:表示 locality 以下的一级行政实体。某些位置可能会收到其他类型之一:从sublocality_level_1到sublocality_level_5。每个 sublocality 级别都是一个行政实体。数字越大,表示的地理区域越小neighborhood表示已命名的街区premise表示已命名的位置,通常是具有常见名称的一栋或一群建筑物subpremise表示指定位置以下的一级实体,通常是同名建筑群中的单个建筑物postal_code表示邮政编码,用于国内的地址邮寄。natural_feature:表示著名的自然景观airport:表示机场park:表示已命名的公园。point_of_interest表示已命名的景点。通常,这些“景点”是不容易归入其他类别的著名地方实体,如“帝国大厦”或“自由女神像”。
空的类型列表表示特殊的地址组成部分没有对应的已知类型,例如法国的地方 (Lieu-dit)。
如果服务未返回结果,则指定为文本纬度/经度值的路径点将不存在这些详情。这是因为,找到路线后,只会对此类路径点进行反向地理编码以获得它们所代表的地址。空 JSON 对象将占据 geocoded_waypoints 数组中的相应地点。
路线
当 Google Maps Directions API 返回结果时,会将这些结果放在一个 (JSON) routes 数组中。即使服务没有返回任何结果(例如,如果起点和/或目的地不存在),它仍然会返回一个空的 routes 数组。(XML 响应包含零个或更多个 <route> 元素。)
routes 数组的每个元素都包含来自指定起点和目的地的单个结果。视是否指定了任何路径点而定,该路线可能包括一个或多个段。除路线信息外,该路线还包含必须向用户显示的版权和警告信息。
routes 字段内的每个路线都可能包含下列字段:
summary包含包含简短的路线文本说明,适用于命名路线以及消除路线与备选路线的歧义。legs[]包含一个数组,其中包含给定路线内某一段(两个位置之间)的相关信息。指定的每个路径点或目的地都有单独的段与之对应。(不含路径点的路线在legs数组内将只包含一个段。)每一段都包含一系列分段。(请参阅下文的路线段。)waypoint_order包含一个数组,用于指示所计算路线内所有路径点的顺序。如果为请求的waypoints参数传递了optimize:true,则可对这些路径点重新排序。overview_polyline:其中包含单个points对象,用于储存以经过编码的折线表示的路线。此折线是所生成路线的近似(平滑处理)路径bounds包含overview_polyline的视口边界框。copyrights包含需要为该路线显示的版权文本。您必须自行处理和显示该信息。warnings[]:其中包含要在显示这些路线时显示的一组警告。您必须自行处理和显示这些警告。fare:若存在,则包含该路线的总票价(即总票费)。此属性只针对公交请求返回,且仅适用于所有公交路程均有票价信息的路线。这些信息包括:currency:ISO 4217 币种代码,表示票价所采用的币种value:总票价(以上面指定的币种为单位)text:总票价金额,设置为所请求语言的格式
以下是路线内票价信息的示例:
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 37.8079996,
"lng" : -122.4074334
},
"southwest" : {
"lat" : 37.7881005,
"lng" : -122.4203553
}
},
"copyrights" : "Map data ©2015 Google",
"fare" : {
"currency" : "USD",
"value" : 6
"text" : "$6.00"
},
...
}]
段
legs 数组中的每个元素都指定所计算路线内从起点至目的地的某一段旅程。对于不包含任何路径点的路线,将包含一段“路程”;但对于定义了一个或多个路径点的路线,将包含一段或多段路程(与相关行程的特定路程相对应)。
legs 字段内的每个段都可能包含下列字段:
steps[]包含一系列分段,表示有关旅程段每个单独分段的信息。(请参阅下文的路线分段。)distance表示该段覆盖的总距离,采用包含下列元素的字段形式:value:表示距离(以米为单位)text包含可人工读取的距离值,以起点处使用的单位(或者请求中units参数内重写的单位)显示。(例如,美国境内的任何起点都将使用英里和英尺。)请注意,无论将什么单位制显示为文本,distance.value字段包含的值始终以米表示。
如果距离未知,可能不会出现这些字段。
duration表示该段的总持续时间,采用包含下列元素的字段形式:value:表示持续时间(以秒为单位)text:其中包含以可人工读取形式表示的持续时间
如果持续时间未知,可能不会出现这些字段。
duration_in_traffic表示该段的总持续时间。该值是根据当前和历史交通状况预估的交通时间。请参阅traffic_model请求参数,了解您可以利用哪些选项来请求以乐观估计、悲观估计或最佳猜测估计作为返回值。只有在满足所有下列条件时,才会返回交通持续时间:- 请求包括
departure_time参数 - 请求包含有效的 API 密钥,或者有效的 Google Maps API for Work 客户 ID 和签名
- 可以获得所请求路线的交通状况
- 请求不包括停靠路径点
- 请求专用于驾车路线–
mode参数设置为driving
duration_in_traffic包含以下字段:value:表示持续时间(以秒为单位)text:其中包含以可人工读取形式表示的持续时间
- 请求包括
arrival_time:其中包含此路程的预计到达时间。该属性只针对公交路线返回。结果以Time对象形式返回,具有以下三个属性:value:以 JavaScriptDate对象指定的时间text:以字符串形式指定的时间。时间以公共交通车站的时区显示。time_zone包含该站的时区。该值就是 IANA 时区数据库中定义的时区名称,例如“America/New_York”
departure_time:其中包含以Time对象指定的此路程的预计出发时间。只会为公共交通路线提供departure_time。start_location包含该段起点的纬度/经度坐标。由于 Directions API 在计算位置间的路线时使用的是最接近起点和终点的交通方案(通常是道路),举例来说,如果起点附近没有道路,start_location则可能不同于所提供的该段起点。end_location包含该段给定目的地的纬度/经度坐标。由于 Google Maps Directions API 在计算位置间的路线时使用的是最接近起点和终点的交通方案(通常是道路),举例来说,如果目的地附近没有道路,end_location则可能不同于所提供的该段目的地。start_address包含通过对该段的start_location进行反向地理编码所获得的可人工读取地址(通常是街道地址)。end_address包含通过对该段的end_location进行反向地理编码所获得的可人工读取地址(通常是街道地址)。
分段
steps 数组中的每个元素都定义所计算路线内的某个分段。分段是导航路线的最基本单位,其包含的单个分段描述的是一条具体的旅程导航指令。例如:“在西四街左转”。这个路段不仅介绍指示,同时也包含有关此路段到下个路段的距离和持续时间信息。例如,一个以“并入 I-80 West”表示的路段可能包含距离“37 英里”和持续时间“40 分钟”这些信息,指示下一个路段距离此路段有 37 英里/40 分钟。
使用 Google Maps Directions API 搜索公共交通路线时,分段数组将包括 transit_details 数组形式的附加公共交通详情。如果路线包括多种交通模式,将以内部 steps 数组形式提供步行或驾车分段的详细路线。例如,步行分段将包括从开始位置和结束位置开始的路线:“步行前往 Innes Ave & Fitch St”。该分段将以内部 steps 数组形式提供该路线的详细步行导航,例如:“朝西北方向走”、“左转进入 Arelious Walker”和“左转进入 Innes Ave”。
steps 字段内的每个分段都可能包含下列字段:
html_instructions包含该分段的格式化指令,以 HTML 文本字符串形式呈现。distance包含从该分段至下一分段起点的覆盖距离。(请参阅上文路线段中对该字段的介绍。)如果距离未知,那么此字段可能未定义duration包含完成该分段至下一分段起点距离通常需要的时间。(请参阅上文路线段中的说明。)如果持续时间未知,该字段可能处于未定义状态。start_location包含该分段起点的位置,以一组lat字段和lng字段形式表示。end_location包含该分段终点的位置,以一组lat字段和lng字段形式表示。polyline:其中包含一个points对象,用于储存以经过编码的折线形式表示的路段。该多段线是分段的近似(平滑)路径。steps包含公共交通路线中步行或驾车分段的详细路线。只有在travel_mode设置为“transit”时,才会出现分段。内部steps数组与steps的类型相同。transit_details包含公共交通专属信息。只有在travel_mode设置为“transit”时,才会返回该字段。请参阅下文的公共交通详情。
公交详情
公共交通路线返回与其他交通模式无关的附加信息。这些附加属性通过 transit_details 对象公开,以 steps[] 数组中元素字段的形式返回。您可以通过 TransitDetails 对象访问有关公共交通车站、公共交通线路和公共交通局的附加信息。
transit_details 对象可能包含下列字段:
arrival_stop和departure_stop包含有关该部分旅程的车站信息。车站详情可能包括:name,公共交通车站的名称,例如:“联合广场”location,公共交通车站的位置,以lat字段和lng字段形式表示
arrival_time和departure_time包含该段旅程的到达时间或出发时间,以下列三个属性形式指定:text:以字符串形式指定的时间。时间以公共交通车站的时区显示。value,时间,以 Unix 时间或者协调世界时 1970 年 1 月 1 日午夜以来的秒数指定。time_zone包含该站的时区。该值就是 IANA 时区数据库中定义的时区名称,例如“America/New_York”
headsign指定该线路的行进方向,即车辆或出发车站所标示的方向。这通常是终点站。headway表示目前同一车站各次发车的预计间隔秒数。例如,当headway值为 600 时,如果您错过了一班公交,那么预计需要 10 分钟才能等到下一班num_stops包含该分段的车站数,计算到达站,不计算出发站。例如,如果您的路线是从站点 A 出发,途经站点 B 和 C,最终到达站点 D,那么num_stops将返回 3line包含有关该分段中所使用公共交通线路的信息,可能包括下列属性:name包含该公共交通线路的全名,例如:“第 7 大道快线”。short_name包含该公共交通线路的简称。这通常是线路编号,如“M7”或“355”。color包含该公共交通线路标牌中常用的颜色。颜色以十六进制字符串形式指定,例如:#FF0033agencies包含一个TransitAgency对象数组,其中的每个对象都提供有关线路运营商的信息,包括下列属性:name:其中包含公交机构的名称url:其中包含公交机构的 URLphone包含公共交通运营机构的电话号码
您必须显示提供旅程结果的公共交通运营机构的名称和 URL。
url包含由公共交通运营机构提供的该公共交通线路的 URL。icon包含与该线路关联的图标的 URL。text_color:其中包含该线路站牌上常用的文字颜色。颜色以十六进制字符串形式指定vehicle包含该线路使用的车辆类型。这可能包括下列属性:name:其中包含该线路上交通工具的名称。例如:“地铁”。type包含在该线路上运行的车辆类型。有关受支持值的完整列表,请参阅交通工具类型文档icon包含与该车辆类型关联的图标的 URL。
交通工具类型
vehicle.type 属性可能返回下列值之一:
| 值 | 定义 |
|---|---|
RAIL |
火车 |
METRO_RAIL |
轻轨交通 |
SUBWAY |
地下轻轨 |
TRAM |
地上轻轨 |
MONORAIL |
单轨 |
HEAVY_RAIL |
重轨 |
COMMUTER_TRAIN |
通勤轨道 |
HIGH_SPEED_TRAIN |
高速列车 |
BUS |
公共汽车 |
INTERCITY_BUS |
长途客车 |
TROLLEYBUS |
无轨电车 |
SHARE_TAXI |
合乘出租车是一种可在其运行路线上随处上下乘客的公共汽车。 |
FERRY |
渡船 |
CABLE_CAR |
一种靠电缆运行的车辆,通常在地面上行驶。空中缆车可能属于 GONDOLA_LIFT 类型。 |
GONDOLA_LIFT |
空中缆车 |
FUNICULAR |
一种由缆线拉上陡坡的交通工具。索道缆车通常由两个车体组成,彼此作为对方的平衡重物。 |
OTHER |
所有其他车辆都返回此类型。 |
sensor 参数
Google Maps API 之前要求您将 sensor 参数包括在内,以指示您的应用是否使用传感器来确定用户的位置。但该参数现在不再是必填项。
