2017-12-13 37 views
0

市区町村名に基づいてカナダの代表的な郵便番号を取得する必要があります。私の最初のアプローチは、GoogleのジオコーディングAPIを使用して都市、州を[lat,lng]逆ジオコードに変換して、一致するアドレスを取得し、そこから郵便番号を抽出することでした。都道府県はGoogleマップのオートコンプリートを使用するフォームから来ているため、(少なくともほぼ)常に有効となることはわかっています。いくつかのテストでは、これは正常に動作していますが、私は実際には失敗した実際のデータのケースに直面しました:Snow Lake、マニトバ。ジオメトリセクションでGoogleの逆ジオコーディングから確実に郵便番号を見つける方法

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

、私が取得:

location  
    lat 54.87856679999999 
    lng -100.0220321 
location_type "APPROXIMATE" 

しかし、私は(精度のさまざまなレベルを含む)、その場所の検索を行うたびに、私は含まれていない結果を取り戻します郵便番号。

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

私もいろいろなものから返されるplace_id、ない運でこれを試してみました。奇妙なことに、Google MapsのSnow Lake、Manitobaを検索すると、それが特定され、郵便番号がR0B 1M0であることがわかります。だからなぜ彼らのサイトは良い情報を与えるが、APIはないのですか? 2番目のURLの場所を、検索後のURL(54.8808471、-100.0274579)にあるGoogleマップの場所に置き換えても、私はまだ郵便番号を返しません。それはその場所(531湖畔のドライブ)のために与える。

Google Mapsで一部の通りの名前を調べると、117 Balsam St.を検索すると、郵便番号と郵便番号を取得するためにジオコードを逆転できる場所の両方が表示されることがわかりました。しかし、私の入ってくるデータには、市町村だけの通り名や番号がないので、これは解決策ではありません。この住所は、私がいくつかの他のもののために得るAPPROXIMATEまたはRANGE_INTERPOLATEDではなく、location_typeのROOFTOPを与えてくれます。

誰もがここでの取引が分かりますか?私はこのAPIから必要なものを得るために使うことができる信頼できる方法があるのでしょうか?それとも単にヒット・アンド・ミスの命題になるのでしょうか?

答えて

0

私は、逆ジオコーディングを使用して郵便番号を検索する考えは一般的に正しいと考えていますが、動作しない場合があります。例を挙げて説明しましょう。

  1. 郵便番号QC H1H。 Googleマップでは、この郵便番号を見れば、私のスクリーンショットのように、あなたはそれがポリゴンジオメトリを持っていることがわかります

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

ですから、この多角形の内側の点を指定した場合、たとえば45.594402、-73.642216、および結果の型は、郵便番号でなければならないことも、逆ジオコーディングの指定を実行するために、あなたは結果

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

を取得します
  1. あなたの例の郵便番号R0B 1M0。 Googleマップでこの郵便番号を見ると、この郵便番号にはポリゴンのジオメトリがないことがわかります。これは単一の点として定義されています。

    enter image description here

    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

により逆ジオコーディングが失敗とZERO_RESULTSが返される。この理由。

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

私はとき場合には次の回避策を提案することができます:私はこれがGoogle側でのデータの問題で、Googleマップヘルプ次のGoogleに報告できると信じ

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

郵便番号にはポリゴンのジオメトリが関連付けられていません:

  • 座標空間fオフィスを投稿する

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

要求が行わID ChIJp3yT08Ax9lIRk0eG4BkTvXgで郵便オフィスを返す設定タイプのまたは地域と半径例2-5キロ。

  • 私はこれが役に立てば幸い前述の場所のID

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

郵便局

{ 
    "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" 
     ] 
} 

のアドレス構成要素から郵便番号を抽出するためにジオコーディング要求を実行します!

+0

優秀、ありがとう!これは完全に機能します。私は、ロンドン、イングランドの代わりにオンタリオ州のロンドンで結果を出さないという別の質問を書き始めましたが、それは不思議なことに働き始めました。おそらくすべてのデバッグクエリで、私はカナダの住所にしか興味がないと訓練されています... –

関連する問題