ホームページ制作/SEO対策なら株式会社サイバーブレーンへ

 03-5961-5681 平日10:00~19:00

 2019-06-01

郵便番号から緯度経度の取得

Google Geocoding

郵便番号7桁から緯度経度を取得して、そこから周辺の店舗を表示するという処理をしていたのですが、3月下旬頃から突然Not Foundが増えて半分ぐらいヒットしなくなった。
https://japan.googleblog.com/2019/03/GoogleMapsRefresh.html
にあるようにGoogle Mapの変更による影響と思われます。
そこで対処したのは郵便局が提供している郵便番号データから住所を検索し、その住所からGoogle Geocoding API を利用して緯度経度を取得するようにしました。
この際、最初に郵便番号から緯度経度を求めて、見つからなかった場合に郵便番号データからの住所で緯度経度を求めるようにしていました。
そのうちGoogle MAPのデータが正しく更新されて見つからないケースが減るのではと思っていたのですが、5月末になっても相変わらず減らないので、最初から郵便番号データから住所を検索して住所による緯度経度取得に変えようかと思って色々検証していたら面白いことに気づきました。

郵便番号からの緯度経度取得はハイフンの有無で変わる

ハイフン(-)付きの郵便番号で検索して緯度経度がヒットする場合はハイフン無しでも同一の緯度経度が返却される。
しかしハイフン付きで緯度経度がヒットしない郵便番号が、ハイフン無しだとヒットして正しい緯度経度が返却される。

少なくとも3月中旬ごろまではどちらでも問題なくほぼすべての郵便番号でハイフンの有無に関係なく緯度経度が取得できていたので、まったく予想外の結果でした。

ハイフンを外して緯度経度を求める

参考までGoogle Geocoding APIに郵便番号を投げる手前までの処理を
phpコードで記載します。
1.郵便番号だけが入力されているかを調べる為の変換処理
 $zip = mb_convert_kana($postCode, 'as');//全角英数字と全角スペースを半角に変換
// ハイフン配列 (これ以外にもハイフンに似た全角記号があるかもしれません)
$hyphenUTF8 = array(
"\xEF\xBC\x8D", // (全角ハイフンマイナス)0xEF, 0xBC, 0x8D
"\xE2\x80\x90", // (全角ハイフン)0xE2, 0x80, 0x90
"\xE2\x88\x92", // (全角マイナス)0xE2, 0x88, 0x92
"\xE2\x80\x92", // (フィギュアダッシュ)0xE2, 0x80, 0x92
"\xE2\x80\x94", // (全角ダッシュ)0xE2, 0x80, 0x94
"\xE2\x80\x93", // (二分ダッシュ)0xE2, 0x80, 0x93
"\xE2\x80\x95", // (ホリゾンタルバー)0xE2, 0x80, 0x95
"\xE3\x83\xBC", // (全角長音)0xE3, 0x83, 0xBC
"\xEF\xBD\xB0", // (半角長音)0xEF, 0xBD, 0xB0
"\xE2\x94\x80", // (罫線)0xE2, 0x94, 0x80
"\xE2\x94\x81", // (罫線)0xE2, 0x94, 0x81
"\xE4\xB8\x80", // (いち)0xE4, 0xB8, 0x80
);
//ハイフンを外す
$zip = str_replace($hyphenUTF8, '', $zip);
$zip = str_replace('-', '', $zip);

2.文字列が7桁ですべてが数字文字列かどうかをチェックする
if (ctype_digit($zip) && strlen($zip) == 7)) {
//郵便番号としてGeocoding APIからの緯度経度取得

}

~この記事の著者~

サイト制作に関するご相談はこちら

 03-5961-5681 平日10:00~19:00

メールフォーム

あなたが
サイトに
求める要素
あなたがサイトに求める0要素