逆Geocoder結果の分解の仕方

172 views
Skip to first unread message

まさ

unread,
Jun 10, 2009, 5:11:47 AM6/10/09
to Google-Maps-API-Japan
お世話様です。

Google Map APIの逆Geocoderの住所の戻り値って、成功すると
「日本東京都中央区日本橋1-1-1」みたいな感じで県名も町名も全部ひとつのstringで返されてしまいますよね。
この結果を、うまく都道府県名や市町村名とか切り出す方法ってないものでしょか?

昨日GDDに出て、GNavLabelControl() なんてものを初めて知ったのですが(汗)、これはこれですごい機能ですね。内部では都道府県
や市町村でデータが分けれているようなんですけど、ここらへんを利用して・・・っていう方法はあるのでしょうか?

Tatsushi

unread,
Jun 10, 2009, 10:27:31 AM6/10/09
to Google-Maps-API-Japan
On 6月10日, 午後6:11, まさ <motoh...@mxd.mesh.ne.jp> wrote:
> お世話様です。
>
> Google Map APIの逆Geocoderの住所の戻り値って、成功すると
> 「日本東京都中央区日本橋1-1-1」みたいな感じで県名も町名も全部ひとつのstringで返されてしまいますよね。
> この結果を、うまく都道府県名や市町村名とか切り出す方法ってないものでしょか?
逆に得られた結果をGeocorderにかければ、切り出した都道府県名や市町村名を単独で得られますよ。
問い合わせ回数を2回使っちゃいますが。

shige

unread,
Jun 10, 2009, 8:39:22 PM6/10/09
to Google-Maps-API-Japan
On 6月10日, 午後6:11, まさ <motoh...@mxd.mesh.ne.jp> wrote:
>
> Google Map APIの逆Geocoderの住所の戻り値って、成功すると
> 「日本東京都中央区日本橋1-1-1」みたいな感じで県名も町名も全部ひとつのstringで返されてしまいますよね。
> この結果を、うまく都道府県名や市町村名とか切り出す方法ってないものでしょか?
>
このページの方法で呼び出せば「AddressDetails」に都道府県や市区町村に分かれて入っています。
http://www.tagchan.net/blog/2008/12/google_maps_api_geocode.html

まさ328

unread,
Jun 10, 2009, 9:46:24 PM6/10/09
to Google-Maps-API-Japan

> このページの方法で呼び出せば「AddressDetails」に都道府県や市区町村に分かれて入っています。> >http://www.tagchan.net/blog/2008/12/google_maps_api_geocode.html

ありがとうございます。↑このサイトを参考に都道府県や市町村にわけることができました!!

var geocoder = new GClientGeocoder();

geocoder.getLocations(point, function(addresses) {

if (addresses.Status.code == 200) {
var result = addresses.Placemark[0];
window.alert(result.address);//住所
window.alert(result.AddressDetails.Accuracy);//精度
window.alert(result.AddressDetails.Country.CountryNameCode);// JPと

window.alert
(result.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName); //
都道府県
window.alert
(result.AddressDetails.Country.AdministrativeArea.Locality.LocalityName); //
市区
window.alert
(result.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.DependentLocalityName); //
町村
window.alert
(result.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName); //
丁目他

}
});

YON

unread,
Jun 10, 2009, 10:09:33 PM6/10/09
to Google-Maps-API-Japan
> この結果を、うまく都道府県名や市町村名とか切り出す方法ってないものでしょか?

GClientGeocoderのgetLocations() で返されるJSON形式のObjectは、
HTTP リクエスト経由のジオコーディングで返される<kml>の<Placemark>要素を
JSON形式に変換したものとほぼ同じものだと思われるので、
その詳細については、↓で説明されています。
http://code.google.com/intl/ja/apis/maps/documentation/services.html#Geocoding_Structured

ただ、地点によっては返される第一候補の<Placemark>が、住所でなく
道路名であったり、スポット名であったり、国や県や市の代表情報であったりする事が
あるのが、わずらわしいです。






まさ328

unread,
Jun 10, 2009, 11:28:40 PM6/10/09
to Google-Maps-API-Japan
YONさん

> ただ、地点によっては返される第一候補の<Placemark>が、住所でなく
> 道路名であったり、スポット名であったり、国や県や市の代表情報であったりする事が
> あるのが、わずらわしいです。

そうなんですね。
実は、道路をトレースするサービスに使うつもりだったのですが、国道や大きな道は道路名を拾ってきてしまって
本来やりたい市町村レベルの名前は取ってこれないことが大変多いのに気づきました。(泣)

GNavLabelControl() では、市町村名が国道上の座標を参照してもちゃんと表示されるので、データはどこかに持っていると思うんですけ
どね。どうにかならないでしょうか・・

強制的にポイントをずらして逆Geoするのもなー

YON

unread,
Jun 11, 2009, 7:55:04 AM6/11/09
to Google-Maps-API-Japan
YONです。
> GNavLabelControl() では、市町村名が国道上の座標を参照してもちゃんと表示されるので、データはどこかに持っていると思うんですけ
> どね。どうにかならないでしょうか・・

一応JSON形式の<Placemark>は複数配列で帰ってきてます。その中のAccuracyという項目
の値をみればある程度は見分けられます。

http://code.google.com/intl/ja/apis/maps/documentation/reference.html#GGeoAddressAccuracy

 ・返されるaddressが道路名の時はAccuracyの値が6になっています。
   GGeoAddressAccuracy表によると、通りレベルの精度だそうです。
 ・精度の高い住所の時は4とか8になっているはずです。
 ・5は郵便番号(怪しい)で、9はスポット名なので却下です
 ・2(県)と3(郡、市町村)も場所によりあやふやです。7は意味不明です。
※Accuracyについては以前にも投稿されてますが、今のところ参考程度にした方がよいのかも
 しれません

いずれにせよ、<Placemark>の中身をハンドリングしなければならないので面倒ですね。
いっその事、HTTP リクエスト経由のジオコーディングみたいに<XML>で返してくれた方が
ハンドリングしやすいと思う昨今です。


まさ328

unread,
Jun 11, 2009, 9:09:50 PM6/11/09
to Google-Maps-API-Japan
YONさん

結局、Accuracy=6 の道路名を拾ってくると面倒なので(使えないので)、Placemarkを1とか2にして精度を落として強制的に
Accuracyが5以下の物を拾ってくるようにしました。ただそれでも郵便番号をリジェクトしたり、道路名ではなくなったんだけど、
日本神奈川県とか逆に超アバウト表示になったりする地点が増えたりだとか、都会と地方でPlacemarkの最適値がちがうよう
な気がして中途半端に終わっています。

USのマップとかは、逆に道路名とか拾うケースが少ないような気がするので、地域(国)毎にそこらへんの設定のポリシーが
違うようです。

On 6月11日, 午後8:55, YON <yyr...@gmail.com> wrote:
> YONです。
>
> > GNavLabelControl() では、市町村名が国道上の座標を参照してもちゃんと表示されるので、データはどこかに持っていると思うんですけ
> > どね。どうにかならないでしょうか・・
>
> 一応JSON形式の<Placemark>は複数配列で帰ってきてます。その中のAccuracyという項目
> の値をみればある程度は見分けられます。
>
> http://code.google.com/intl/ja/apis/maps/documentation/reference.html...
Reply all
Reply to author
Forward
0 new messages