Ivan Sadovsky
Ivan Sadovsky

Reputation: 37

Google place details street numbers with letters

When I do search in google's autocomplete I see correct address. Example:

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

This address has place_id: EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk

I need to get a street number which is "20b". To do so I use Place Details API: https://maps.googleapis.com/maps/api/place/details/json?placeid=EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk&key=MY_KEY

And here what is in response:

      "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" ]
...

But "20" is actually different house, I need "20b". Same happens to all streets with letters. Is there way to solve this problem? Thank you

Upvotes: 2

Views: 2357

Answers (2)

Adam Reis
Adam Reis

Reputation: 4473

In case it helps someone, we use a regex to check whether a street number is of a "special" format, e.g. 3a, or even 3/24, both of which are reduced to just "3" by Google.

We use the "formatted" address as a reference check. Feel free to modify to match your needs:

  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
  }

Upvotes: 0

xomena
xomena

Reputation: 32148

The long place ID EjtQYXZsaWNoZW5rbyBTdHJlZXQsIDIwYiwgQmlsYSBUc2Vya3ZhLCBLeWl2IE9ibGFzdCwgVWtyYWluZSIwEi4KFAoSCVcssl0EQtNAEeDmEfl02RgXEBQqFAoSCVGxb54DQtNAEbhYfU4LYvbk indicates that this address is not present in Google database. They try to interpolate it to the best known position that matches your search.

Note that the existing in database addresses have a short place IDs, something like ChIJNSfioSOjpBIRSwaYW7O3LJY.

Your prediction has a following type

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

So it looks like Google could resolve it to route level, but not to street address level.

I can suggest reporting a missing address to Google data team as explained in the documentation

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

I hope this addresses your doubt.

Upvotes: 1

Related Questions