指定路由的位置

如需计算路线,您必须至少指定路线出发地和路线目的地的位置。您可以将这些位置定义为路线上的“航点”。

除了出发地和目的地之外,您还可以指定不同类型的航点,以及如何处理路线的航点。如需了解详情和示例,请参阅以下主题:

为路线指定位置

您可以通过创建 Waypoint (REST)Waypoint (gRPC) 对象来表示位置。在航点定义中,您可以通过以下任一方式指定位置:

您可以在请求中以同样的方式指定所有航点的位置,也可以混合使用这些航点。例如,您可以为出发地航点使用纬度/经度坐标,并为目的地航点使用地点 ID。

为提高效率和准确性,请使用地点 ID,而不要使用纬度/经度坐标或地址字符串。地点 ID 具有唯一明确性,可为路线提供地理编码优势,例如接入点和路况变量。这有助于避免因其他方式指定位置而导致的以下情况:

  • 使用纬度/经度坐标可能会导致位置与最接近这些坐标的道路对应起来 - 该道路可能不是房源的接入点,甚至是快速或安全地通往目的地的道路。
  • 地址字符串必须先由 Routes API 进行地理编码,以将其转换为纬度/经度坐标,然后才能计算路线。这种转化可能会影响效果。

将位置指定为地点 ID

您可以使用地点 ID 指定航点的位置。由于纬度和经度坐标与道路对应,因此在某些情况下,您可能会发现地点 ID 可以提供更好的结果。

通过 Geocoding APIPlaces API(包括地点自动补全)检索地点 ID。如需详细了解地点 ID,请参阅地点 ID 概览

以下示例使用 placeId 属性为 origindestination 传递地点 ID:

{
  "origin":{
    "placeId": "ChIJayOTViHY5okRRoq2kGnGg8o"
  },
  "destination":{
    "placeId": "ChIJTYKK2G3X5okRgP7BZvPQ2FU"
  },
  ...
}

以纬度和经度坐标形式指定位置

如需在航点中定义位置,请使用纬度/经度坐标指定位置 (REST)位置(gRPC)

例如,使用 latitudelongitude 坐标为路线 origindestination 指定航点:

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
...
}

以地址字符串形式指定位置

地址字符串是由字符串表示的文字地址(例如“1600 Amphitheatre Parkway, Mountain View, CA”)。地理编码是将地址字符串转换为纬度和经度坐标(例如纬度 37.423021 和经度 -122.083739)的过程。

当您传递地址字符串作为航点的位置时,Routes API 会在内部对该字符串进行地理编码,以将其转换为纬度和经度坐标。

例如,如需计算路线,您可以使用地址字符串为路线 origindestination 指定航点:

{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "450 Serra Mall, Stanford, CA 94305, USA"
  },
  ...
}

在此示例中,Routes API 会对这两个地址进行地理编码,以将其转换为纬度和经度坐标。

如果地址值不明确,Routes API 可能会调用搜索来区分类似地址。例如,“1st Street”可以是“1st street NE”或“1st St St SE”的完整值或部分值。此结果可能与 Geocoding API 返回的结果不同。您可以使用地点 ID 来避免可能出现的误解。

设置地址的区域

如果您传递的地址字符串不完整作为航点的位置,API 可能会使用错误的地理编码纬度/经度坐标。例如,您发出请求,将“托莱多”指定为出发地,将“马德里”指定为行车路线的目的地:

{
  "origin":{
    "address": "Toledo"
  },
  "destination":{
    "address": "Madrid"
  },
  "travelMode": "DRIVE"
}

在此示例中,“托莱多”解读为美国俄亥俄州(而非西班牙)的城市。因此,该请求会返回一个空数组,这意味着不存在任何路由:

{
  []
}

您可以通过添加 regionCode 参数,将 API 配置为返回偏向特定区域的结果。此参数以 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 Code 基于纬度/经度坐标,以数字和字母的形式显示,而非包含街道名称和编号的地址。

Google 开发了 Plus Code,让所有人受益于地址。Plus Code 是一种经过编码的位置引用,源自纬度/经度坐标,表示的区域范围为 1/8000 度、1/8000 度(赤道约 14 米 x 14 米)或更小的区域。在没有街道地址或者建筑物未编号或街道未命名的地方,您可以使用 Plus Code 来代替街道地址。

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”。

    例如,通过使用 Plus 代码为路线 origindestination 指定航点,计算路线:

    {
      "origin":{
        "address": "849VCWC8+R9"
      },
      "destination":{
        "address": "CRHJ+C3 Stanford, CA 94305, USA"
      },
      "travelMode": "DRIVE"
    }

Google Maps Platform API 支持 Plus 代码,包括地点自动补全地点详情Directions APIGeocoding API。例如,您可以使用 Geocoding API 对通过纬度/经度坐标指定的位置进行反向地理编码,以确定该位置的 Plus Code。