住所から緯度・経度を調べる方法

2,142 views
Skip to first unread message

kei

unread,
Sep 8, 2005, 3:49:38 AM9/8/05
to Google-Maps-API-Japan
はじめまして。ナガイといいます。
こんなの[http://komenotsugama.jp/cgi/gmapbbs/gmapbbs.html]を作ってます。
(APIの操作が簡単なのでサクサク作れちゃいますね。)

早速ですが、住所から緯度、経度を簡単に調べる方法を探しています。

自作したページ内で検索を行いたいので、
http://maps.google.com/maps?q=住所
という方法以外で実現したいと思っています。

google
mapsのAPIに実装されていたりはしないのでしょうか?
もしくは、このような機能を提供しているWebサービスはないのでしょうか?
amazonのWebサービスみたいにURLを投げてXMLで取得できるサービスがあると
とても便利なのに。

国土交通省が国土数値情報[http://nlftp.mlit.go.jp/ksj/]を公開しているというの知ったのですが、
これをすべて自前のデータベースに取り込んで検索機能を実装するってのは
大変だし、効率悪いなーと思い質問いたしました。
普通はどう実装しているんでしょう。

google maps
APIの話題ではありませんが、ご存知の方がいれば教えていただけるとうれしいです。

nagoyan the earthhopper

unread,
Sep 8, 2005, 4:15:20 AM9/8/05
to Google-Map...@googlegroups.com
ナガイさん、はじめまして。
「ひとこと掲示板 on google map」、以前に私も一言残させてもらいましたが、
なかなかおもしろいですね。ラベルが付けられるようになってますね。

住所を経緯度に変換することを専門用語で「ジオコーディング(Geocoding)」と
言うのだそうですが、とりあえずこんな例があります。

全国ロケ地マップ、東京アートイベント地図のDigital Life Innovatorさんの
日本の住所のGeocodingに関してのエントリーです。
http://saya.s145.xrea.com/archives/2005/07/geocoding.html
http://saya.s145.xrea.com/archives/2005/08/geocoding_1.html

その後、この東大のCSVアドレスマッチングサービスのサーバの負荷は
どうなんでしょうかね・・・

また、経緯度から住所に変換するサービスも、個人ベースで展開されている
方がいます。TEDDY-Gさんの作られた広告モデルのプロトタイプで、
Nakamura-KU ADDICTさんのInvGecoderサービスを利用されています。

http://teddy-g.cocolog-nifty.com/blog/2005/08/google_maps_man_d312.html
http://www.knya.net/archives/2005/07/rest.html

ジオコーディングのサービスは、ほんとに国土地理院で無料サービスに
してほしいですね・・・かなり経済効果あると思うんだけど。
地図記号の公募ともまあいいんだけど・・・
http://www.asahi.com/national/update/0908/TKY200509070383.html

kei

unread,
Sep 8, 2005, 9:00:33 PM9/8/05
to Google-Maps-API-Japan
ナガイです。情報ありがとうございます。

>専門用語で「ジオコーディング(Geocoding)」と言う
とは、はじめて知りました。
こういった用語を知ってると、検索での情報収集の質も全然違いますし。

リンク先にあった「東大のCSVアドレスマッチングサービス」は使えそうですね。
ちゃんと使ってはないのですが、これを使えば自分でもWebサービスが作れそうです。

>ジオコーディングのサービスは、ほんとに国土地理院で無料サービスにしてほしいですね・・・
ホント、そう思います。郵便番号検索と合わせて公共サービスにしてくれると、開発者は喜ぶのにな。

nagoyan the earthhopper

unread,
Sep 10, 2005, 8:43:05 AM9/10/05
to Google-Map...@googlegroups.com
> >専門用語で「ジオコーディング(Geocoding)」と言う

その名も geocoding.jp っていうサイトがあるみたいなんですが、ここは何かの
APIで経緯度返してくれるようなサービスはしてないのかなあ・・・

http://www.geocoding.jp/

Aoba

unread,
Oct 4, 2005, 12:59:04 AM10/4/05
to Google-Maps-API-Japan
Geocoding.jp 管理人のAobaです。

実験的にREST APIを公開してみました。
仕様の情報不足や不具合なども多々あると思いますが
よろしければお試しください。

アクセス過多になったら突然止めるかもしれませんが...(汗)

http://www.geocoding.jp/api/

TEDDY-G

unread,
Oct 12, 2005, 12:15:36 PM10/12/05
to Google-Maps-API-Japan
Aobaさん、有用なAPIを公開戴き、誠に有難う御座います。
geocoding.jp REST
APIを利用して、緯度経度情報を取得し、Google Maps
APIに投げるためのJavaScriptの関数を作ってみました。

http://www.got2do.com/api/geocoding.js

got2do.com上にXMLをJSONに変換するプロキシを置いておき、それを利用する形にしておりますので、上記jsファイルをインクルードするだけでgeocoding.jpを利用することができます。仕組み自体は弊ブログの「JSONでBiddersインクリメンタル検索、をブログに貼ってみる」と同じですので、興味あればご参照ください(大した内容ではないですが)。
http://teddy-g.cocolog-nifty.com/blog/2005/10/jsonbidders_56f9.html

一応JavaScriptレベルで「5秒に1度」のアクセス制限をかけておりますが、geocoding.jpへのリクエストはすべてgot2do.com経由になってしまうので、got2do.comからのリクエストは5秒に1度以内になってしまう可能性があります。
使い方は下記の通りです。

【geocoder.jsをインクルード】
<script src="http://www.got2do.com/api/geocoder.js"
charset="utf-8"></script>

【初期化】
map = new Gmap(...) → Google Maps APIの初期化
...
handleGmap(Gmapインスタンス,ローディングメッセージ用ID,ローディングメッセージ,検索結果表示用ID);
・Gmapインスタンス:Gmapインスタンスを指定します(上記例だとmap)。
・ローディングメッセージ用ID:HTML中の、ローディングメッセージを表示したい箇所のIDを指定します。デフォルトは"message"です。指定IDを持つ要素が見つからない場合、ローディングメッセージは表示されません。
・ローディングメッセージ:ローディング中のメッセージを指定します。デフォルトは"...Loading..."です。
・検索結果表示用ID:HTML中の、検索結果を表示したい箇所のIDを指定します。デフォルトは"message"です。指定IDを持つ要素が見つからない場合、検索結果は表示されません。

【検索&マップ移動】
keyToGmap(encodeURI(キーワード));
keyToGmap関数にUTF8でエンコードしたキーワードを渡すと、検索結果(緯度経度)をもとに、初期化した際に指定したGmapインスタンスの位置を移動します。検索結果が複数の場合、初期化時に指定したIDの箇所に検索結果を表示します。

下記にサンプルを作りましたのでご参照ください。

http://www.got2do.com/lab/gm_geocoder.htm
http://teddyg.fc2web.com/

CGIやPHPの使えないfc2webでもちゃんと使えていることがおわかりかと思います。なお、「5秒に1度」をなるべく実現できるよう、Submitボタンをクリック後にdisable=trueにし、地図移動後にdsable=falseに戻すようにしております。この辺は下記を参考にしております。
http://d.hatena.ne.jp/naoya/20050803/1123053496

また、サンプルの下のほうにある「Bookmarklet」を任意のWebサイト上でキーワードを選択の上実行すると、上記サンプルサイトに飛びます。ちょっと変えればgeocoding.jp本家に飛ばすことも可能です。

上記JavaScript関数は、Google Maps
API同様、サーバ上にXMLファイルや他のプログラム等を要さずに利用できますので、例えば、<a
href="#"
onClick="keyToGmap(''東京タワー')">東京タワー</a>のようにHTML文中に埋め込むこともできます。

色々改善の余地があると思いますので、突っ込み等戴ければ幸甚です。

Ksc

unread,
Oct 13, 2005, 8:33:24 PM10/13/05
to Google-Maps-API-Japan
KsGMap で動作するサンプルを作ってみました。
http://www.ksgmap.jp/map/lab/20051014.html

初期化のタイミングの問題で、KsGMap Ver1.01β03
以降が必要です。

すばらしいスクリプトとサービスを提供して下さった
TEDDY-G さんと、Geocoding.jp さんに感謝です。

TEDDY-G

unread,
Oct 13, 2005, 8:59:03 PM10/13/05
to Google-Maps-API-Japan
早速使って頂き、有難う御座います。
このままですと、「検索」ボタンを押した後ボタンがDisableになったまま戻りませんので、
GEvent.addListener(map, "moveend", function() {
document.searchform.sbmt.disabled=false;
});
としてmoveendイベントにDisableを戻すFunctionをBindするか、検索フォームのonsubmitからdocument.searchform.sbmt.disable=trueの部分をはずして、SubmitボタンDisableテクニックを使わないようにしてみてください。
(個人的にはSubimitボタンDisableテクニックはユーザビリティが高いと思うので、前者のほうが好ましいと思いますが...)

検索表示内容の変更とか、ON/OFFの指定とかできた方がよかったら言って下さい。

Ksc

unread,
Oct 13, 2005, 9:29:23 PM10/13/05
to Google-Maps-API-Japan
どうもありがとうございます。早速修正しました。

表示内容は個人的に座標は必要ないと思うのですが、どうでしょうか?

gucchi

unread,
Oct 13, 2005, 10:39:41 PM10/13/05
to Google-Maps-API-Japan
うわ! すばらしい。
これでカテゴリを選択してアイテムデータにデータを登録出来たら最高です!

Aobaさんの
<アクセス過多になったら突然止めるかもしれませんが...(汗)
が心配ですが・・・

皆様に感謝!

TEDDY-G

unread,
Oct 17, 2005, 5:57:10 AM10/17/05
to Google-Maps-API-Japan
>Kscさん
私も座標はいらない気がしてます(笑)。
検索終わったよ、というのが地図の移動以外に欲しかったもので、暫定的に入れているものです。デフォルトは何もしなくて、お好みでコールバック関数を指定できるように...とかに変更します。

>gucchiさん
確かにAobaさんのサービスストップが心配ですね。ご好意で公開戴いているものなので、無理は申し上げられませんが。
earthhopperさんから弊GoogleMapAds(http://www.got2do.com/api/gm_weather.php)に戴いたトラックバック(http://earthhopper.seesaa.net/article/6075804.html)を参考に、geocoder.jsを利用される場合にはAobaさんのアフィリエイトIDで広告を表示するとか、皆でドネーションするとかの仕組みが必要かもしれません。
アフィリエイトプログラムを利用した広告であれば、利用者もIDを入れられる仕組みにすれば、Aobaさんも、利用者の皆さんも双方にHappyになれるかもしれませんね。

Andy

unread,
Oct 17, 2005, 1:13:01 PM10/17/05
to Google-Maps-API-Japan
これは内部的にGoogle
Mapsを呼び出しているのではないのでしょうか?
そうだとすると利用規約違反だと思うのですが。

参考:
http://groups.google.com/group/Google-Maps-API/browse_frm/thread/d27df1c66e4106e1/7fa25a13e6153d02

TEDDY-G

unread,
Oct 18, 2005, 4:54:49 AM10/18/05
to Google-Maps-API-Japan
言われてみて初めてGeocoding.jpさんの検索結果と、Google
Maps本家の検索結果を比較してみましたが、似てますね...。
もしGoogle
Mapsをスクレイピングしているのであれば確かに規約違反となりますが、その辺は作者であるAobaさんの説明を待ちましょう。
取り急ぎ、geocoder.jsは他のgeocodingサービスも利用できるように改修を進めてますので、完成次第、本グループ上で発表致します。

TEDDY-G

unread,
Oct 18, 2005, 5:56:26 AM10/18/05
to Google-Maps-API-Japan
早速ですが、geocoder.jsからDigital Life
Innovatorさん作成の東京大学空間情報科学研究センターのCSVアドレスマッチングサービスを利用したgeocoder(http://saya.s145.xrea.com/archives/2005/07/geocoding.html)を使えるように改修いたしました。
また、検索成功時、失敗時のコールバック関数を指定できるようにしました。
http://www.got2do.com/api/geocoding.js

各々、handleGmapで下記の通り指定します。

handleGmap(Gmapインスタンス,ローディングメッセージ用ID,ローディングメッセージ,検索結果表示用ID,成功時コールバック関数,失敗時コールバック関数,サービス名)

サービス名は"geocodingjp"でgeocoding.jpを、"geocodingCsis"でCSVアドレスマッチングサービスを指定します。デフォルトは"geocodingjp"です。

成功時コールバック関数は、下記の通り作成して渡してください。
idには検索結果表示用IDが渡されます。
callbackSuccess = function(緯度,経度,id) {...}

失敗時コールバック関数は、下記の通り作成して渡してください。
同じく、idには検索結果表示用IDが渡されます。
callbackFault = function(id) { ... }

Gmapインスタンスさえ渡せば動きますので、それ以外のパラメータを指定せずに、
handleGmap(Gmapインスタンス);
としても動きます。また、
handleGmap(Gmapインスタンス,null,null,null,null,null,'geocodingCsis');
のような指定でも動きます。

動作はIEとFirefoxで確認済みです。なお、Digital Life
Innovatorさんにいつまでもサーバー負荷をかけているのも何ですので、そのうち私のサーバーの方にもCSVアドレスマッチングサービス利用のgeocoderを設置したいと思います。

efren

unread,
Oct 21, 2005, 11:34:53 PM10/21/05
to Google-Maps-API-Japan
TEDDY-Gさん

> 私も座標はいらない気がしてます(笑)。

はじめまして。
サンプルを見るとすでに座標の表示はないですよね?
取得した緯度・経度を表示するにはどうしたらよいのでしょうか?
javascriptがあんまりわからないので教えていただけないでしょうか?

TEDDY-G

unread,
Oct 24, 2005, 12:31:01 AM10/24/05
to Google-Maps-API-Japan
efrenさん、

>取得した緯度・経度を表示するにはどうしたらよいのでしょうか?

上述の通り、取得した緯度・軽度を表示するためには検索成功時のコールバック関数をhandleGmap()にて指定する必要があります。
成功時、失敗時の関数を指定したサンプルは下記の通りとなります。
http://www.got2do.com/lab/gm_geocoder.htm

なお、Geocoding.jpと東大CSIS(空間情報科学研究センター)を切り替えられるようにしました。Submitしたときに毎回handleGmapにてサービスを指定しなおしているだけです。ソースをご覧ください。

>javascriptがあんまりわからないので教えていただけないでしょうか?

私も最近のAJAXやGoogle
Maps関連の盛り上がりを見て、見よう見真似でJavaScriptをいじっています(笑)。ブログの方にも書きましたが、今回JSONを使うにあたっては、「最速インターフェース研究会」「はてな技術勉強会」「Hatena::Diary::naoya(prototype.js
でデザインパターン)」を参考にしています(クラスやprototype.jsは使っていませんが)。
http://la.ma.la/blog/diary_200504140039.htm
http://www.hatena.ne.jp/info/tech
http://d.hatena.ne.jp/naoya/20050813/1123919908
お互い頑張りましょう。

efren

unread,
Oct 24, 2005, 2:11:03 AM10/24/05
to Google-Maps-API-Japan
サンプルありがとうございます。
見よう見まねにしては凄すぎですよ~
RESTの取得がいまいち理解できてないんですよ。
PHPなら多少わかるんですが、
PHPでの取得サンプルって見かけないですし…

話は変わりますがGoogleローカルの携帯版に表示させる事は可能なんでしょうか?

Andy

unread,
Oct 24, 2005, 12:22:13 PM10/24/05
to Google-Maps-API-Japan
PHPのRESTは簡単ですよ。
ファイルの読み書きと一緒です。XMLで答えが返ってくる場合は
そちらの関数を使う必要がありますが。
参考までにgeocoder.us
(米国の無償geocodingサービスの一つ)を呼び出す例を
挙げておきます。

function GetGeocode($address) {
$callpath = 'http://rpc.geocoder.us/service/rest?address='
. urlencode($address);
$data = @implode("",file($callpath));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parse_into_struct($parser,$data,&$d_ar,&$i_ar);
xml_parser_free($parser);
foreach ($d_ar as $token) {
if ($token['tag'] == 'dc:description') $newaddress =
$token['value'];
if ($token['tag'] == 'geo:long') $long = $token['value'];
if ($token['tag'] == 'geo:lat') $lat = $token['value'];
}
$r = array ($newaddress, $long, $lat);
return $r;
}

efren

unread,
Oct 25, 2005, 5:05:23 AM10/25/05
to Google-Maps-API-Japan
Andyさん、ありがとうございます。
凄く参考になりました。

TEDDY-Gさん
Geocoding.jpと東大CSIS(空間情報科学研究センター)ですが、
表示結果が恐ろしく違うのは何故でしょうか?
地元(愛知)の表示の場合、全然違う結果になります。
Google Mapで調べた結果とGeocoding.jpは、
ほぼ同じ結果です。(でもこの結果が凄くずれてる)
東大CSIS(空間情報科学研究センター)の方が正確な表示をします。
これって愛知だけでしょうか?

Ksc

unread,
Oct 25, 2005, 12:59:12 PM10/25/05
to Google-Maps-API-Japan
> 話は変わりますがGoogleローカルの携帯版に表示させる事は可能なんでしょうか?

基本的に不可能です。
ハックして表示させることは可能かも知れませんが、規約違反っぽいので。
将来に期待しましょう。

Reply all
Reply to author
Forward
0 new messages