子前提的 PlaceId

PlaceId for subpremise

为什么我得到的响应是另一个 place_id,然后是我在我的位置详情 API 查询中使用的那个?

https://maps.googleapis.com/maps/api/place/details/json?placeid=Eiw5LzUwIE1hcmtldCBTdHJlZXQsIE1lbGJvdXJuZSBWSUMsIEF1c3RyYWxpYSIwEi4KFAoSCR3TztZMXdZqEREXsZzx5CRAEDIqFAoSCXUvVtBMXdZqEc9Cc6QFzzMr&fields=address_components,formatted_address,place_id,types&key=

{
   "html_attributions" : [],
   "result" : {
      "address_components" : [
         {
            "long_name" : "50",
            "short_name" : "50",
            "types" : [ "street_number" ]
         },
         {
            "long_name" : "Market Street",
            "short_name" : "Market St",
            "types" : [ "route" ]
         },
         {
            "long_name" : "Melbourne",
            "short_name" : "Melbourne",
            "types" : [ "locality", "political" ]
         },
         {
            "long_name" : "Melbourne City",
            "short_name" : "Melbourne",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "Victoria",
            "short_name" : "VIC",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "Australia",
            "short_name" : "AU",
            "types" : [ "country", "political" ]
         },
         {
            "long_name" : "3000",
            "short_name" : "3000",
            "types" : [ "postal_code" ]
         }
      ],
      "formatted_address" : "50 Market St, Melbourne VIC 3000, Australia",
      "place_id" : "Eis1MCBNYXJrZXQgU3QsIE1lbGJvdXJuZSBWSUMgMzAwMCwgQXVzdHJhbGlhIjASLgoUChIJHdPO1kxd1moRERexnPHkJEAQMioUChIJdS9W0Exd1moRz0JzpAXPMys",
      "types" : [ "street_address" ]
   },
   "status" : "OK"
}

我还注意到 returned 地址不同。

我查询中的 placeid 是我收到的自动完成服务响应。

{
     "description" : "9/50 Market Street, Melbourne VIC, Australia",
     "id" : "06f000a321dc5f1347b79dcbe4d611390f750f36",
     "matched_substrings" : [
        {
           "length" : 18,
           "offset" : 0
        }
     ],
     "place_id" : "Eiw5LzUwIE1hcmtldCBTdHJlZXQsIE1lbGJvdXJuZSBWSUMsIEF1c3RyYWxpYSIwEi4KFAoSCR3TztZMXdZqEREXsZzx5CRAEDIqFAoSCXUvVtBMXdZqEc9Cc6QFzzMr",
     "reference" : "Eiw5LzUwIE1hcmtldCBTdHJlZXQsIE1lbGJvdXJuZSBWSUMsIEF1c3RyYWxpYSIwEi4KFAoSCR3TztZMXdZqEREXsZzx5CRAEDIqFAoSCXUvVtBMXdZqEc9Cc6QFzzMr",
     "structured_formatting" : {
        "main_text" : "9/50 Market Street",
        "main_text_matched_substrings" : [
           {
              "length" : 18,
              "offset" : 0
           }
        ],
        "secondary_text" : "Melbourne VIC, Australia"
     },
     "terms" : [
        {
           "offset" : 0,
           "value" : "9/50 Market Street"
        },
        {
           "offset" : 20,
           "value" : "Melbourne"
        },
        {
           "offset" : 30,
           "value" : "VIC"
        },
        {
           "offset" : 35,
           "value" : "Australia"
        }
     ],
     "types" : [ "route", "geocode" ]
  }

似乎出于某种原因,google 地图在使用地点详细信息 API 和 returning street_address 时正在删除次权限信息。

有什么方法可以强制 google 将 API 映射到 return 子前提的详细信息?

在您的示例中,像 Eis1MCBNYXJrZXQgU3QsIE1lbGJvdXJuZSBWSUMgMzAwMCwgQXVzdHJhbGlhIjASLgoUChIJHdPO1kxd1moRERexnPHkJEAQMioUChIJdS9W0Exd1moRz0JzpAXPMys 这样的长地点 ID 意味着您在 Google 的数据库中没有确切的街道地址供您搜索。这是一个近似值。当您搜索数据库中存在的地址时,您将获得较短的地点 ID(例如 ChIJrTLr-GyuEmsRBfy61i59si0)。

如果 Google 数据库中不存在地址,您可以从自动完成服务获取一个长地点 ID,并从地点详细信息端点获取另一个长地点 ID。这些端点可以使用不同的算法进行近似,从而为数据库中未找到的地址生成不同的地点 ID。

文档中提到了两种类型的地点 ID https://developers.google.com/places/place-id#id-overview

解决该问题的最直接方法是向 Google 数据团队报告丢失的地址,如中所述 https://support.google.com/maps/answer/6320846.

一旦添加到 Google 数据库中,您的问题就会消失,您将在自动完成和详细信息中获得一个简短的地点 ID。

此外,您的问题可能与 Google 问题跟踪器中报告的错误有关,该错误涉及对 subpremises in place autocomplete 服务的有限支持。看看

https://issuetracker.google.com/issues/35830389

希望这能解决您的疑问。