Google 带有字母的地点详情街道号码

Google place details street numbers with letters

当我在 google 的自动完成中搜索时,我看到了正确的地址。示例:

Pavlichenko Street, 20b, Bila Tserkva, Kyiv Oblast, Ukraine

这个地址有place_id: EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk

我需要获取街道号码“20b”。为此,我使用地点详情 API: https://maps.googleapis.com/maps/api/place/details/json?placeid=EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk&key=MY_KEY

这是回应:

      "address_components" : [
         {
            "long_name" : "20",
            "short_name" : "20",
            "types" : [ "street_number" ]
         },
         {
            "long_name" : "Pavlichenko Street",
            "short_name" : "Pavlichenko Street",
            "types" : [ "route" ]
         },
         {
            "long_name" : "Bila Tserkva",
            "short_name" : "Bila Tserkva",
            "types" : [ "locality", "political" ]
...

但是“20”实际上是不同的房子,我需要“20b”。所有有字母的街道都会发生同样的情况。有办法解决这个问题吗?谢谢

长地址 ID EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk 表示此地址不存在于 Google 数据库中。他们尝试将其插入到与您的搜索相匹配的最知名位置。

请注意,现有的数据库地址有一个简短的地点 ID,类似于 ChIJNSfioSOjpBIRSwaYW7O3LJY

您的预测具有以下类型

 "types":[
    "route","geocode"
  ]

所以看起来 Google 可以将其解析为路线级别,但不能解析为街道地址级别。

我建议按照文档中的说明向 Google 数据团队报告丢失的地址

https://support.google.com/maps/answer/3094088

希望这能解决您的疑问。

为了帮助某人,我们使用正则表达式来检查街道号码是否为“特殊”格式,例如3a,甚至 3/24,两者都被 Google.

减少为“3”

我们使用“格式化”地址作为参考检查。随意修改以满足您的需求:

  parseStreetNumber(streetNumber, formatted) {

    //Handle a format like 23/241 or 3a, which Google strips
    const regex = new RegExp(`^([0-9a-z]+/${streetNumber}|${streetNumber}[a-z])`, 'i')
    const matches = formatted.match(regex)
    if (matches) {
      return matches[1]
    }

    //Return as is
    return streetNumber
  }