要计算路线,您必须至少指定路线的位置 出发地和路线的目的地。您可以在以下位置将这些位置定义为航点: 。
除了出发地和目的地外,您还可以指定不同类型的 航点以及如何处理路线的航点。如需更多信息和 示例,请参阅以下主题:
为路线指定位置
您可以通过创建 Waypoint (REST) 来表示营业地点 或 Waypoint (gRPC) 对象。在 航点定义时,可以采用以下任意方式指定位置:
您可以用相同的方式为请求中的所有航点指定位置, 也可以混合使用例如,您可以使用纬度/经度坐标 起点航点并使用地点 ID 作为目的地航点。
为提高效率和准确性,请使用地点 ID 而非纬度/经度 坐标或地址字符串。地点 ID 具有明确的唯一性, 例如,接入点和交通变量等,可带来地理编码方面的优势。他们 有助于避免可能由其他方法 指定位置:
- 使用经纬度坐标可能会导致位置 沿这些坐标系的道路(该坐标可能不是 或者是快速或安全的道路, 指向目标网址。
- 若要转换地址字符串,必须先由 Routes API 进行地理编码 转换为纬度/经度坐标,然后才能计算路线。 这种转化可能会影响效果。
将营业地点指定为地点 ID
您可以使用地点 ID 来指定航点的位置。由于经纬度坐标会贴靠到道路,因此您可能会发现,在某些情况下,地点 ID 会提供更好的结果。
通过 Geocoding API 检索地点 ID,并 Places API(包括 Place 自动补全)。有关地点 ID 的更多信息,请参阅 地点 ID 概览。
以下示例使用 placeId
属性为二者传递地点 ID
origin
和 destination
:
{ "origin":{ "placeId": "ChIJayOTViHY5okRRoq2kGnGg8o" }, "destination":{ "placeId": "ChIJTYKK2G3X5okRgP7BZvPQ2FU" }, ... }
以经纬度坐标的形式指定位置
要定义航点中的位置,请指定 位置 (REST) 或 Location(gRPC):使用 纬度/经度坐标。
例如,为路线 origin
和 destination
指定航点
使用 latitude
和 longitude
坐标:
{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, ... }
以地址字符串的形式指定位置
地址字符串是以字符串表示的文本地址(例如“1600”) ”)。地理编码是 将地址字符串转换为纬度和经度坐标(例如 纬度 37.423021,经度 -122.083739)。
如果您将地址字符串作为航点的位置传递,Routes API 在内部对字符串进行地理编码,以将其转换为经纬度 坐标。
例如,要计算路线,您需要为路线 origin
指定一个航点,
使用地址字符串的 destination
:
{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "450 Serra Mall, Stanford, CA 94305, USA" }, ... }
在此示例中,Routes API 会对这两个地址进行地理编码,以将其转换为 纬度和经度坐标。
如果地址值不明确,则 Routes API 可能会调用 区分类似地址的歧义。例如:“第一街”可以是 “1st street NE”的完整值或部分值或“1st St SE”。这个 可能与 Geocoding API 返回的结果不同。您可以避免 误解。
设置地址的区域
如果您将不完整的地址字符串作为航点的位置,API 可能使用了错误的地理编码纬度/经度坐标。例如: 您发出一个指定“托莱多”的请求为起点,将“Madrid”用作 为驾车路线的目的地:
{ "origin":{ "address": "Toledo" }, "destination":{ "address": "Madrid" }, "travelMode": "DRIVE" }
在这个例子中,“Toledo”解释为位于美国的 美国的俄亥俄州,而非西班牙。因此,该请求会返回 空数组,表示不存在路由:
{ [] }
您可以将 API 配置为通过以下方法返回偏向于特定区域的结果:
包括 regionCode
参数。此参数将区域代码指定为
ccTLD(“顶级域名”)
两个字符的值。大多数 ccTLD 代码都与 ISO 3166-1 代码相同,
一些值得注意的例外情况。例如,英国的 ccTLD 为“uk”
(.co.uk),而其 ISO 3166-1 代码为“gb”(技术上适用于“
英国”)。
包含 regionCode
参数的“托莱多”至“马德里”路线请求会返回适当的结果,因为“托莱多”会被解读为西班牙的城市:
{ "origin":{ "address": "Toledo" }, "destination":{ "address": "Madrid" }, "travelMode": "DRIVE", "regionCode": "es" }
响应现在包含从西班牙托莱多计算出的路线 西班牙马德里:
{ "routes": [ { "distanceMeters": 75330, "duration": "4137s", ... } ] }
以 Plus Code 形式指定位置
许多人没有精确的地址,这让他们很难知道 以便接收货物。或者,有地址的用户可能更愿意接受 在更具体的地点提供送货服务,例如后门或物品加载区 。
Plus Codes 就像是没有 实际地址使用 Plus Codes,而不是包含街道名称和门牌号的地址 基于纬度/经度坐标,以数字和 字母。
Google 开发了 Plus 代码 让每个人都能享受地址带来的便利Plus Code 是一种编码 通过纬度/经度坐标推导的位置参考, 表示面积:1/8000 度 x 1/8000 度(约 14 米 x 赤道 14 米)或更小。你可以使用 Plus Codes 来替代 没有提供街道地址或没有建筑物所在地的街道地址 未给街道编号或街道命名。
Plus Code 必须采用全局代码或复合代码格式:
- 全局代码由 4 个字符的区号和 6 个字符组成,
字符或更长的本地代码。
例如,对于地址“1600 Amphitheatre Parkway, Mountain View, CA”,全局代码是“849V”本地代码是 “CWC8+R9”。然后使用完整的 10 个字符的 Plus Code 指定 位置值设为“849VCWC8+R9”。
- 复合代码由至少 6 个字符组成
与显式位置相结合的本地代码。
例如,地址“450 Serra” Mall, Stanford, CA 94305, USA”本地代码为“CRHJ+C3”。对于化合物 将本地代码与城市、州/省/自治区/直辖市、邮政编码以及国家/地区组合起来 “CRHJ+C3 Stanford, CA 94305, USA”形式的地址部分。
例如,通过为路线
origin
指定航点来计算路线 和destination
(使用 Plus Codes):{ "origin":{ "address": "849VCWC8+R9" }, "destination":{ "address": "CRHJ+C3 Stanford, CA 94305, USA" }, "travelMode": "DRIVE" }
Google Maps Platform API 均支持 Plus Code,包括 地点自动补全、 地点详情、 Directions API 和 Geocoding API。 例如,您可以使用 Geocoding API 对 (通过纬度/经度坐标指定) 营业地点的 Plus Code。