为路由矩阵指定位置

欧洲经济区 (EEA) 开发者

如需计算路线矩阵,您必须至少指定一个路线出发地和一个路线目的地。

指定路线的地点

您可以通过创建 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"
  },
  ...
}

将地点指定为经纬度坐标

如需在航点中定义地点,请使用 Location (REST)Location(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 SE”的部分值。此结果可能与 Geocoding API 返回的结果不同。您可以使用地点 ID 避免可能的误解。

设置地址的区域

如果您传递不完整的地址字符串作为航点的位置,API 可能会使用错误的地理编码经纬度坐标。例如,您发出请求,将“Toledo”指定为出发地,将“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 参数的“Toledo”到“Madrid”的路线请求会返回适当的结果,因为“Toledo”被解读为西班牙的一个城市:

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

响应现在包含从西班牙托莱多到西班牙马德里计算出的路线:

{
  "routes": [
    {
      "distanceMeters": 75330,
      "duration": "4137s",
      ...
    }
  ]
}

导航点令牌是一个字符串,用于对地点和其他路线上下文进行编码。导航点令牌可以提供精确的路线,指向入口、装货码头或指定接送区域附近的特定接入点。这在食品外卖或 拼车等场景中非常有用,因为在这些场景中,接送点可能不明确。

您可以通过调用 Geocoding API 的 Destinations 方法来获取导航点令牌。

如需指定导航点令牌,请执行以下操作:

  1. SearchDestinations 方法获取 navigationPointToken,该方法属于 Geocoding API如需了解详情,请参阅 Geocoding API 文档。
  2. 通过传入 navigationPointToken 创建航点。

以下示例使用 navigation_point_token 属性为 origindestination 传递导航点令牌:

{
  "origin":{
    "navigation_point_token": "ENCODED_NAVIGATION_POINT_TOKEN_FOR_ORIGIN"
  },
  "destination":{
    "navigation_point_token": "ENCODED_NAVIGATION_POINT_TOKEN_FOR_DESTINATION"
  },
  ...
}

将地点指定为 Plus Code

许多人没有确切的地址,这可能会导致他们难以接收送货。或者,有地址的人可能更愿意在更具体的地点(例如后门或装货码头)接收送货。

Plus Code 就像没有实际地址的人或地点的街道地址。Plus Code 不是包含街道名称和门牌号的地址,而是基于经纬度坐标,并以数字和字母的形式显示。

Google 开发了 Plus Code ,旨在让每个人和每个地点都能享受到地址带来的便利。Plus Code 是经过编码的位置引用,衍生自经纬度坐标,表示面积不超过 1/8, 000 度 x 1/8, 000 度(在赤道处约为 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 Code 为路线 origindestination 指定航点,以计算路线:

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

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