此产品处于旧版状态。自 2026 年 10 月起,您将无法再为新的 Google Cloud 项目启用 Directions API(旧版)。现有项目仍会得到全面支持。如需体验新功能和更出色的性能,请迁移到 Routes API。
示例请求
以下请求会返回从安大略省多伦多到魁北克省蒙特利尔的行车路线。
网址
https://maps.googleapis.com/maps/api/directions/json?destination=Montreal &origin=Toronto &key=YOUR_API_KEY
curl
curl -L -X GET '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 ?avoid=highways &destination=Montreal &mode=bicycling &origin=Toronto &key=YOUR_API_KEYYOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&avoid=highways&mode=bicycling&key=YOUR_API_KEY'YOUR_API_KEY'
以下请求会搜索从纽约布鲁克林到纽约皇后区的公交路线。请求未指定 departure_time,因此出发时间默认为当前时间:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Queens &mode=transit &origin=Brooklyn &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Brooklyn&destination=Queens&mode=transit&keyYOUR_API_KEY'
以下公交请求包含特定的出发时间。
注意:在此示例中,出发时间指定为 2012 年 7 月 30 日上午 9:45。为避免出错,您必须在提交请求之前将该参数更改为未来的时间。
网址
https://maps.googleapis.com/maps/api/directions/json ?departure_time=1343641500 &destination=Queens &mode=transit &origin=Brooklyn &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Brooklyn&destination=Queens&mode=transit&departure_time=1343641500&key=YOUR_API_KEY'
以下请求使用 Plus Code 返回印度加尔各答从 H8MW+WP 到 GCG2+3M 的行车路线。
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=GCG2%2B3M%20Kolkata%20India &origin=H8MW%2BWP%20Kolkata%20India &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=H8MW%2BWP%20Kolkata%20India&destination=GCG2%2B3M%20Kolkata%20India&key=YOUR_API_KEY'
以下请求使用地点 ID 返回从英国格拉斯哥到英国珀斯的行车路线。
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=place_id%3AChIJA01I-8YVhkgRGJb0fW4UX7Y &origin=place_id%3AChIJ685WIFYViEgRHlHvBbiD5nE &keyYOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=place_id%3AChIJ685WIFYViEgRHlHvBbiD5nE&destination=place_id%3AChIJA01I-8YVhkgRGJb0fW4UX7Y&key=YOUR_API_KEY'
出行方式
计算路线时,您可以指定要使用的交通mode。默认情况下,系统会计算driving路线。支持以下出行方式:
driving(默认)- 表示使用道路网的标准行车路线。walking请求经由步道和人行道(如有)的步行路线。bicycling- 用于请求经由自行车道和首选街道(如有)的骑车路线。transit- 用于请求经由公交路线(如有)的路线。如果您将模式设置为transit,则可以选择指定departure_time或arrival_time。如果未指定任何时间,则departure_time默认为当前时间(即出发时间默认为当前时间)。您还可以选择添加transit_mode和/或transit_routing_preference。
注意:步行和骑车路线有时可能不包含畅通无阻的步道或自行车道,因此这些路线会在返回的结果中返回 warnings,您必须向用户显示这些警告。
路况信息
在满足以下所有条件(在路线响应中收到
duration_in_traffic 字段的必要条件)时会使用路况信息:
- travel
mode参数为driving或未指定(driving为默认出行方式)。 - 请求包含有效的
departure_time参数。departure_time可设置为当前时间或未来的某个时间,而不能是过去的时间。 - 请求不包含停靠航点。如果请求包含航点,请为每个航点添加
via:前缀来影响路线,但要避免停靠。例如:&waypoints=via:San Francisco|via:Mountain View|...
(可选)您可以在请求中添加
traffic_model 参数,以指定计算交通时间时要使用的假设条件。
以下网址会发起路线请求,查询从马萨诸塞州波士顿到马萨诸塞州康科德(途经查尔斯顿和列克星敦)的行程。请求中包含出发时间,满足在 Directions 响应中返回 duration_in_traffic 字段的所有要求。
网址
https://maps.googleapis.com/maps/api/directions/json ?departure_time=now &destination=Concord%2C%20MA &origin=Boston%2C%20MA &waypoints=via%3ACharlestown%2CMA%7Cvia%3ALexington%2CMA &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Boston%2C%20MA&destination=Concord%2C%20MA&waypoints=via%3ACharlestown%2CMA%7Cvia%3ALexington%2CMA&departure_time=now&key=YOUR_API_KEY'
航点
使用 Directions API(旧版)计算路线时,您可以指定航点,以返回包含中间位置的经停点或中途停留点的路线。您可以向驾车、步行或骑车路线添加航点,但不能向公共交通路线添加航点。
在 waypoints 参数中指定位置。
您可以提供一个或多个位置(以竖线字符 [| 或 %7C] 分隔),格式为地点 ID、地址或纬度/经度坐标。默认情况下,路线服务会按照航点的指定顺序计算路线。解析航点值的优先级顺序为:地点 ID、纬度/经度坐标、地址。
- 如果您传递地点 ID,则必须为其添加
place_id:前缀。您可以从 Geocoding API 和 Places API(包括地点自动补全)检索地点 ID。如需查看使用来自地点自动补全服务的地点 ID 的示例,请参阅地点自动补全和路线。如需详细了解地点 ID,请参阅地点 ID 概览。为了提高效率和准确性,请尽可能使用地点 ID。这些 ID 像纬度/经度值对一样明确,可为路线规划提供地理编码优势,例如接入点和交通变量。与地址不同,ID 不需要服务执行搜索或中间请求来获取地点详情,因此性能更好。
- 如果您传递纬度/经度坐标,这些值会直接发送到前端服务器,以便在不进行地理编码的情况下计算路线。这些点会贴靠到道路上,可能无法提供应用所需的准确性。如果您确信这些值确实指定了应用路线规划所需的点,而无需考虑可能的接入点或其他地理编码详细信息,请使用坐标。确保使用英文逗号 (
%2C) 而非空格 (%20) 分隔纬度和经度值。 - 如果您传递的是地址,Directions 服务会对该字符串进行地理编码,并将其转换为纬度/经度坐标,以计算路线。如果地址值不明确,该值可能会触发搜索,以消除与类似地址的歧义。例如,“1st Street”可能是完整值,也可能是“1st street NE”或“1st St SE”的部分值。此结果可能与 Geocoding API 返回的结果不同。您可以使用地点 ID 来避免可能的误解。 请参阅排查路线请求结果中的问题。
或者,您也可以使用编码多段线算法提供一组经过编码的点。您会发现,编码集对于大量航点非常有用,因为网址会明显缩短。所有网络服务的网址长度上限均为 16384 个字符。
- 编码的多段线必须以
enc:为前缀,后跟英文冒号 (:)。例如:waypoints=enc:gfo}EtohhU:。 - 您还可以添加多条经过编码的多段线,并用竖线字符 (
|) 分隔。例如,waypoints=via:enc:wc~oAwquwMdlTxiKtqLyiK:|enc:c~vnAamswMvlTor@tjGi}L:| via:enc:udymA{~bxM:
以下网址会发起一个路线请求,查询从马萨诸塞州波士顿到马萨诸塞州康科德的行程,中途依次在查尔斯顿和列克星敦停留。该示例使用以下地址:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Concord%2C%20MA &origin=Boston%2C%20MA &waypoints=via%3ACharlestown%2CMA%7Cvia%3ALexington%2CMA &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Boston%2C%20MA&destination=Concord%2C%20MA&waypoints=via%3ACharlestown%2CMA%7Cvia%3ALexington%2CMA&key=YOUR_API_KEY'
通过经停点和途径点影响路线
对于请求中的每个航点,路线响应都会向 legs 数组附加一个条目,以提供该路段停靠点的详细信息。
如果您想使用航点影响路线,但不添加停靠点,请为航点添加前缀 via:。带有 via: 前缀的航点不会向 legs 数组添加条目,但会使行程经过该航点。
以下网址修改了上一个请求,使行程路线经过列克星敦,但不停留:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Concord%2C%20MA &origin=Boston%2C%20MA &waypoints=Charlestown%2CMA%7Cvia%3ALexington%2CMA &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Boston%2C%20MA&destination=Concord%2C%20MA&waypoints=Charlestown%2CMA%7Cvia%3ALexington%2CMA&key=YOUR_API_KEY'
在响应用户拖动地图上的航点而创建路线时,via: 前缀最有效。这样,用户就可以实时查看最终路线,并有助于确保将航点放置在 Directions API(旧版)可访问的位置。
以下网址使用纬度/经度坐标请求航点:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Perth%2C%20AU &origin=Sydney%2C%20AU &waypoints=via%3A-37.81223%2C144.96254%7Cvia%3A-34.92788%2C138.60008 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Sydney%2C%20AU&destination=Perth%2C%20AU&waypoints=via%3A-37.81223%2C144.96254%7Cvia%3A-34.92788%2C138.60008&key=YOUR_API_KEY'
下面是同一个请求,不过是使用编码多段线:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Perth%2C%20AU &origin=Sydney%2C%20AU &waypoints=via%3Aenc%3AlexeF%7B~wsZejrPjtye%40%3A &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Sydney%2C%20AU&destination=Perth%2C%20AU&waypoints=via%3Aenc%3AlexeF%7B~wsZejrPjtye%40%3A&key=YOUR_API_KEY'
请注意,您可以将 via: 说明符与位置修饰符自由混合。例如:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Perth%2C%20AU &origin=Sydney%2C%20AU &waypoints=side_of_road%3Avia%3Aenc%3AlexeF%7B~wsZejrPjtye%40%3A &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Sydney%2C%20AU&destination=Perth%2C%20AU&waypoints=side_of_road%3Avia%3Aenc%3AlexeF%7B~wsZejrPjtye%40%3A&key=YOUR_API_KEY'
优化您的路径点
默认情况下,路线服务会按所提供航点的指定顺序计算途经这些航点的路线。或者,您也可以在 waypoints 参数中传递 optimize:true 作为第一个实参,以便路线服务按照更高效的顺序重新排列这些航点,从而对提供的路线进行优化。(这种优化用于解决旅行推销员问题)。行程时间是主要因素且进行了优化,但在确定哪条路线最高效时,可以将距离、转弯次数及许多其他因素考虑在内。所有航点都必须是停靠点,以便路线服务优化路线。
如果您指示路线服务对航点顺序进行优化,那么系统将在 routes 对象的 waypoint_order 字段中返回这些航点的顺序。
waypoint_order 字段返回的值从零开始。
以下示例使用路线优化功能计算从南澳大利亚州阿德莱德到南澳大利亚州各个主要葡萄酒产区的公路行程。
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Adelaide%2C%20SA &origin=Adelaide%2C%20SA &waypoints=optimize%3Atrue%7CBarossa%20Valley%2C%20SA%7CClare%2C%20SA%7CConnawarra%2C%20SA%7CMcLaren%20Vale%2C%20SA &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide%2C%20SA&destination=Adelaide%2C%20SA&waypoints=optimize%3Atrue%7CBarossa%20Valley%2C%20SA%7CClare%2C%20SA%7CConnawarra%2C%20SA%7CMcLaren%20Vale%2C%20SA&key=YOUR_API_KEY'
对计算出的路线进行检查后,您会发现计算过程按以下航点顺序使用了航点:
"waypoint_order": [ 3, 2, 0, 1 ]
限制
可以计算出遵守某些限制的路线。限制通过使用 avoid 参数以及该参数的实参(指示要避免的限制)来指示。支持下列限制:
avoid=tollsavoid=highwaysavoid=ferries
通过将两个限制条件都传递给 avoid 参数,可以请求避开收费站、高速公路和轮渡的任意组合的路线。例如:avoid=tolls|highways|ferries。
注意:添加限制条件并不会排除包含受限特征的路线,而是会使结果偏向于更合适的路线。
单位制
路线查询结果在 distance 字段中包含 text,这些字段可能会向用户显示,以指明路线中特定“路段”的距离。默认情况下,此文本使用出发地所在国家或地区的单位制。
例如,从“伊利诺伊州芝加哥市”到“安大略省多伦多市”的路线结果将以英里显示,反向路线结果则以公里显示。您可以替换此单位制,只需在请求的 units 参数中明确设置一种单位制,并传递以下任一值即可:
metric指定使用公制。 返回的文本距离使用公里和米。imperial指定使用英制。返回的文本距离使用英里和英尺。
请注意 :此单位制设置仅影响 distance 字段中显示的 text。distance 字段还包含 values,这些值始终以米为单位。
地区自定义调整
您可以使用 region 参数,将路线服务设置为返回特定地区的结果。此参数采用双字符 ccTLD(国家/地区代码顶级域名)实参来指定地区偏向。多数 ccTLD 代码都与 ISO 3166-1 alpha-2 代码相同,但也有一些需要注意的例外情况。例如,英国的 ccTLD 为“uk”(.co.uk),而其 ISO 3166-1 代码为“gb”(代表“大不列颠及北爱尔兰联合王国”)。如需了解支持的地区,请参阅 Google Maps Platform 覆盖范围详细信息。
您可以使用主要 Google 地图应用已推出行车路线功能的任何网域。
例如,如果将 region 设置为 es,那么从“Toledo”到“Madrid”的路线请求会返回适当的结果,因为“Toledo”会被解读为西班牙城市:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Madrid &origin=Toledo ®ion=es &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=YOUR_API_KEY'
JSON
{ "geocoded_waypoints": [ { "geocoder_status": "OK", "place_id": "ChIJ8f21C60Lag0R_q11auhbf8Y", "types": ["locality", "political"], }, { "geocoder_status": "OK", "place_id": "ChIJgTwKgJcpQg0RaSKMYcHeNsQ", "types": ["locality", "political"], }, ], "routes": [ { "bounds": { "northeast": { "lat": 40.4165207, "lng": -3.7026134 }, "southwest": { "lat": 39.862808, "lng": -4.029406799999999 }, }, "copyrights": "Map data ©2022 Inst. Geogr. Nacional", "legs": [ { "distance": { "text": "74.3 km", "value": 74327 }, "duration": { "text": "57 mins", "value": 3446 }, "end_address": "Madrid, Spain", "end_location": { "lat": 40.4165207, "lng": -3.705076 }, "start_address": "Toledo, Spain", "start_location": { "lat": 39.862808, "lng": -4.0273727 }, "steps": [ { "distance": { "text": "0.6 km", "value": 615 }, "duration": { "text": "2 mins", "value": 106 }, "end_location": { "lat": 39.8681019, "lng": -4.029378299999999 }, "html_instructions": "Head <b>northwest</b> on <b>Av. de la Reconquista</b> toward <b>C. de la Diputación</b>", "polyline": { "points": "quhrF`rqWCBQJUJm@PQFg@Ni@JeBh@}@XaD|@{@Vk@Ns@RUFoA^u@R_AXwA`@WHMBG@C?E?GAC?IC", }, "start_location": { "lat": 39.862808, "lng": -4.0273727 }, "travel_mode": "DRIVING", }, // Additional steps omitted for brevity ], "traffic_speed_entry": [], "via_waypoint": [], }, ], "overview_polyline": { "points": "quhrF`rqWcHzBaNzDeG~A][?k@lA{Dr@mBR]HmA[WQDWE[g@mAeE... (truncated for brevity)", }, "summary": "A-42", "warnings": [], "waypoint_order": [], }, ], "status": "OK", }
XML
<DirectionsResponse> <status>OK</status> <route> <summary>A-42</summary> <leg> <step> <travel_mode>DRIVING</travel_mode> <start_location> <lat>39.8628080</lat> <lng>-4.0273727</lng> </start_location> <end_location> <lat>39.8681019</lat> <lng>-4.0293783</lng> </end_location> <polyline> <points>quhrF`rqWCBQJUJm@PQFg@Ni@JeBh@}@XaD|@{@Vk@Ns@RUFoA^u@R_AXwA`@WHMBG@C?E?GAC?IC</points> </polyline> <duration> <value>106</value> <text>2 mins</text> </duration> <html_instructions>Head <b>northwest</b> on <b>Av. de la Reconquista</b> toward <b>C. de la Diputación</b></html_instructions> <distance> <value>615</value> <text>0.6 km</text> </distance> </step> <!-- Additional steps omitted for brevity --> <duration> <value>3446</value> <text>57 mins</text> </duration> <distance> <value>74327</value> <text>74.3 km</text> </distance> <start_location> <lat>39.8628080</lat> <lng>-4.0273727</lng> </start_location> <end_location> <lat>40.4165207</lat> <lng>-3.7050760</lng> </end_location> <start_address>Toledo, Spain</start_address> <end_address>Madrid, Spain</end_address> </leg> <copyrights>Map data ©2022 Inst. Geogr. Nacional</copyrights> <overview_polyline> <points>quhrF`rqWcHzBaNzDeG~A][?k@lA{Dr@mBR]HmA[WQDWE[g@mAeE... (truncated for brevity)</points> </overview_polyline> <bounds> <southwest> <lat>39.8628080</lat> <lng>-4.0294068</lng> </southwest> <northeast> <lat>40.4165207</lat> <lng>-3.7026134</lng> </northeast> </bounds> </route> <geocoded_waypoint> <geocoder_status>OK</geocoder_status> <type>locality</type> <type>political</type> <place_id>ChIJ8f21C60Lag0R_q11auhbf8Y</place_id> </geocoded_waypoint> <geocoded_waypoint> <geocoder_status>OK</geocoder_status> <type>locality</type> <type>political</type> <place_id>ChIJgTwKgJcpQg0RaSKMYcHeNsQ</place_id> </geocoded_waypoint> </DirectionsResponse>
如果发送从“托莱多”到“马德里”的路线请求时未指定 region 参数,则不会返回结果,因为“托莱多”会被解读为俄亥俄州的城市,而不是西班牙的城市:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=Madrid &origin=Toledo &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&key=YOUR_API_KEY'
JSON
{ "geocoded_waypoints": [ { "geocoder_status": "OK", "place_id": "ChIJeU4e_C2HO4gRRcM6RZ_IPHw", "types": ["locality", "political"], }, { "geocoder_status": "OK", "place_id": "ChIJgTwKgJcpQg0RaSKMYcHeNsQ", "types": ["locality", "political"], }, ], "routes": [], "status": "ZERO_RESULTS", }
XML
<DirectionsResponse> <status>ZERO_RESULTS</status> <geocoded_waypoint> <geocoder_status>OK</geocoder_status> <type>locality</type> <type>political</type> <place_id>ChIJeU4e_C2HO4gRRcM6RZ_IPHw</place_id> </geocoded_waypoint> <geocoded_waypoint> <geocoder_status>OK</geocoder_status> <type>locality</type> <type>political</type> <place_id>ChIJgTwKgJcpQg0RaSKMYcHeNsQ</place_id> </geocoded_waypoint> </DirectionsResponse>
地理位置修饰符
您可以使用位置修饰符来指引司机应如何抵达特定位置,方法是使用 side_of_road 参数指定应使用道路的哪一侧,或指定航向以指明正确的行驶方向。这些修饰符可以与中间航点的 via: 修饰符自由混合。
指定路线必须经过道路的特定一侧
指定航点时,您可以使用 side_of_road: 前缀请求路线经过航点偏向的道路一侧。例如,以下路线请求将返回一条长路线,以便车辆最终停在航点偏向的道路一侧:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=side_of_road%3A37.7663444%2C-122.4412006 &origin=37.7680296%2C-122.4375126 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=37.7680296%2C-122.4375126&destination=side_of_road%3A37.7663444%2C-122.4412006&key=YOUR_API_KEY'
将 side_of_road: 与编码多段线搭配使用时,该参数会应用于多段线上的每个位置。
side_of_road: 修饰符只能在满足以下限制条件的情况下使用:
-
travel
mode参数为driving或未指定(driving为默认出行方式)。
指定路线应具有特定航向
指定航点时,您可以请求路线以特定航向穿过该航点。此航向使用前缀 heading=X: 指定,其中 X 是介于 0(含)到 360(不含)之间的整数度数值。朝向为 0 表示正北,90 表示正东,依此类推(顺时针)。例如,在此路线请求中,路线从起点向东行驶,然后掉头:
网址
https://maps.googleapis.com/maps/api/directions/json ?destination=37.773245%2C-122.469502 &origin=heading%3D90%3A37.773279%2C-122.468780 &key=YOUR_API_KEY
curl
curl -L -X GET 'https://maps.googleapis.com/maps/api/directions/json?origin=heading%3D90%3A37.773279%2C-122.468780&destination=37.773245%2C-122.469502&key=YOUR_API_KEY'
heading=X: 修饰符只能与以下限制条件搭配使用:
-
travel
mode参数为driving、bicycling或未指定(driving为默认出行方式)。 - 未为同一位置指定
side_of_road修饰符。 - 位置通过纬度/经度值指定。您不得将
heading与地址、地点 ID 或编码的多段线搭配使用。