2017-12-13 2 views
0

Ich brauche eine repräsentative kanadische Postleitzahl basierend auf Stadt und Provinz Name. Mein erster Ansatz war es, die Geokodierungs-API von Google zu verwenden, um Stadt, Provinz in umgekehrten Geocode umzuwandeln, um die übereinstimmende Adresse zu erhalten und die Postleitzahl daraus zu extrahieren. Die Stadt und die Provinz kommen von einem Formular, das die Google Maps-Autocomplete verwendet, sodass ich weiß, dass sie (zumindest fast) immer gültig sind. In einigen Tests funktioniert das gut, aber ich stieß schnell auf einen Fall in unseren tatsächlichen Daten, der scheitert: Snow Lake, Manitoba.So finden Sie zuverlässig Postleitzahlen von Google Reverse Geocoding

https://maps.googleapis.com/maps/api/geocode/json?address=Snow+Lake%2C+Manitoba&key=MYKEY

In der Geometrie Abschnitt, erhalte ich:

location  
    lat 54.87856679999999 
    lng -100.0220321 
location_type "APPROXIMATE" 

Aber immer, wenn ich eine Suche nach diesem Ort tun (einschließlich Maß an Präzision variiert), erhalte ich Ergebnisse zurück, die nicht enthalten eine Postleitzahl.

https://maps.googleapis.com/maps/api/geocode/json?latlng=54.8785668,-100.0220321&key=MYKEY

Ich habe dies auch versucht, mit den place_id, die aus verschiedenen Dingen zurückgegeben werden, aber kein Glück. Seltsam ist, wenn ich auf der regulären Google Maps-Seite nach Snow Lake, Manitoba suche, es genau aufspürt und mir sagt, dass die Postleitzahl R0B 1M0 ist. Warum gibt ihre Site gute Informationen, aber nicht die API? Selbst wenn ich den Standort in meiner zweiten URL durch den Standort ersetzen soll, den Google Maps in der URL nach meiner Suche hat (54.8808471, -100.0274579), bekomme ich immer noch keine Postleitzahl, auch wenn ich eine Adresse verwende, die es gibt für diesen Ort (531 Lakeshore Drive).

Durch Versuch und Irrtum (Blick auf die Google Map für einige Straßennamen), fand ich, dass die Suche 117 Balsam St. gibt sowohl eine Postleitzahl und einen Ort, den ich Geocode umkehren können, um eine Postleitzahl zu erhalten. Aber meine eingehenden Daten haben keine Straßennamen oder Nummern, nur Stadt und Provinz, also ist das keine Lösung. Diese Adresse gibt mir ROOFTOP für den location_type, nicht APPROXIMATE oder RANGE_INTERPOLATED, die ich für einige andere bekomme.

Wer weiß, was der Deal hier ist? Gibt es eine zuverlässige Methode, die ich verwenden kann, um zu bekommen, was ich von dieser API benötige, oder wird es einfach ein Hit-and-Miss-Angebot sein?

Antwort

0

Ich glaube, dass die Idee, eine Postleitzahl mit der umgekehrten Geocodierung zu suchen, im Allgemeinen richtig ist, aber es kann bestimmte Situationen geben, in denen es nicht funktioniert. Lass mich das mit Beispielen erklären.

  1. Postleitzahl QC H1H. Wenn Sie an diesem Postleitzahl in Google Maps betrachten, werden Sie sehen, dass es eine Polygongeometrie hat, wie in meinem Screenshot

https://www.google.com/maps/place/Montr%C3%A9al-Nord,+QC+H1H,+Canada/@45.5755194,-73.6272394,14z/data=!4m5!3m4!1s0x4cc91f6dd2d3b269:0xc3ff559c136d8af2!8m2!3d45.5893471!4d-73.6419587

enter image description here

gezeigt

Also, wenn Sie einen Punkt innerhalb dieses Polygons angeben, -73,642216, zum Beispiel 45,594402, und führen Reverse Geocoding Spezifizierungs auch, dass der Ergebnistyp eine Postleitzahl sein sollte, werden Sie ein Ergebnis

https://maps.googleapis.com/maps/api/geocode/json?latlng=45.594402%2C-73.642216&result_type=postal_code&key=YOUR_API_KEY

erhalten
  1. Postleitzahl R0B 1M0 aus Ihrem Beispiel. Wenn Sie sich diese Postleitzahl in Google Maps ansehen, sehen Sie, dass diese Postleitzahl keine Polygongeometrie hat. Es ist als ein einzelner Punkt definiert.

https://www.google.com/maps/place/Snow+Lake,+MB+R0B+1M0,+Canada/@54.8792581,-100.0226575,17.04z/data=!4m5!3m4!1s0x52f631c0d3937ca9:0x143db2e5b7611e34!8m2!3d54.880844!4d-100.0252639

enter image description here

Aus diesem Grund die umgekehrte Geocodierung und gibt ZERO_RESULTS versagt.

https://maps.googleapis.com/maps/api/geocode/json?latlng=54.87856679999999%2C-100.0220321&result_type=postal_code&key=YOUR_API_KEY

Ich glaube, dies ist ein Datenproblem auf Google Seite und Sie können es bei Google nach dem Google Maps-Hilfe-Bericht:

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

Ich kann die folgende Problemumgehung in Fall vorschlagen, wenn die Postleitzahl hat keine zugehörige Polygongeometrie:

  • Ausführen von Places API-Suche mit Koordinate f oder den Ort und den Radius zum Beispiel 2-5 km mit Typ-Set Büro

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=54.87856679999999%2C-100.0220321&radius=2000&type=post_office&key=YOUR_API_KEY

Die Anfrage liefert Postamt mit Platz ID ChIJp3yT08Ax9lIRk0eG4BkTvXg posten.

  • Execute Geocodierungsanfrage für oben genannten Ort ID

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJp3yT08Ax9lIRk0eG4BkTvXg&key=YOUR_API_KEY

Extract Postleitzahl von Adresskomponenten der Post

{ 
    "address_components":[ 
    { 
     "long_name":"81", 
     "short_name":"81", 
     "types":[ 
     "street_number" 
     ] 
    }, 
    { 
     "long_name":"Balsam Street", 
     "short_name":"Balsam St", 
     "types":[ 
     "route" 
     ] 
    }, 
    { 
     "long_name":"Snow Lake", 
     "short_name":"Snow Lake", 
     "types":[ 
     "locality","political" 
     ] 
    }, 
    { 
     "long_name":"Division No. 21", 
     "short_name":"Division No. 21", 
     "types":[ 
     "administrative_area_level_2","political" 
     ] 
    }, 
    { 
     "long_name":"Manitoba", 
     "short_name":"MB", 
     "types":[ 
     "administrative_area_level_1","political" 
     ] 
    }, 
    { 
     "long_name":"Canada", 
     "short_name":"CA", 
     "types":[ 
     "country","political" 
     ] 
    }, 
    { 
     "long_name":"R0B 1M0", 
     "short_name":"R0B 1M0", 
     "types":[ 
     "postal_code" 
     ] 
} 

Ich hoffe, das hilft!

+0

Hervorragend, vielen Dank! Das funktioniert perfekt. Ich fing an, eine weitere Frage darüber zu formulieren, dass ich keine Ergebnisse für London, Ontario, sondern für London, England erhielt, aber dann begann es auf geheimnisvolle Weise zu arbeiten. Vielleicht wurde ich mit all meinen Debugging-Anfragen so trainiert, dass ich nur an kanadischen Adressen interessiert bin ... –