早速ですが、住所から緯度、経度を簡単に調べる方法を探しています。
自作したページ内で検索を行いたいので、
http://maps.google.com/maps?q=住所
という方法以外で実現したいと思っています。
google
mapsのAPIに実装されていたりはしないのでしょうか?
もしくは、このような機能を提供しているWebサービスはないのでしょうか?
amazonのWebサービスみたいにURLを投げてXMLで取得できるサービスがあると
とても便利なのに。
国土交通省が国土数値情報[http://nlftp.mlit.go.jp/ksj/]を公開しているというの知ったのですが、
これをすべて自前のデータベースに取り込んで検索機能を実装するってのは
大変だし、効率悪いなーと思い質問いたしました。
普通はどう実装しているんでしょう。
google maps
APIの話題ではありませんが、ご存知の方がいれば教えていただけるとうれしいです。
>専門用語で「ジオコーディング(Geocoding)」と言う
とは、はじめて知りました。
こういった用語を知ってると、検索での情報収集の質も全然違いますし。
リンク先にあった「東大のCSVアドレスマッチングサービス」は使えそうですね。
ちゃんと使ってはないのですが、これを使えば自分でもWebサービスが作れそうです。
>ジオコーディングのサービスは、ほんとに国土地理院で無料サービスにしてほしいですね・・・
ホント、そう思います。郵便番号検索と合わせて公共サービスにしてくれると、開発者は喜ぶのにな。
実験的にREST APIを公開してみました。
仕様の情報不足や不具合なども多々あると思いますが
よろしければお試しください。
アクセス過多になったら突然止めるかもしれませんが...(汗)
初期化のタイミングの問題で、KsGMap Ver1.01β03
以降が必要です。
すばらしいスクリプトとサービスを提供して下さった
TEDDY-G さんと、Geocoding.jp さんに感謝です。
検索表示内容の変更とか、ON/OFFの指定とかできた方がよかったら言って下さい。
表示内容は個人的に座標は必要ないと思うのですが、どうでしょうか?
Aobaさんの
<アクセス過多になったら突然止めるかもしれませんが...(汗)
が心配ですが・・・
皆様に感謝!
>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になれるかもしれませんね。
参考:
http://groups.google.com/group/Google-Maps-API/browse_frm/thread/d27df1c66e4106e1/7fa25a13e6153d02
各々、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を設置したいと思います。
> 私も座標はいらない気がしてます(笑)。
はじめまして。
サンプルを見るとすでに座標の表示はないですよね?
取得した緯度・経度を表示するにはどうしたらよいのでしょうか?
javascriptがあんまりわからないので教えていただけないでしょうか?
>取得した緯度・経度を表示するにはどうしたらよいのでしょうか?
上述の通り、取得した緯度・軽度を表示するためには検索成功時のコールバック関数を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
お互い頑張りましょう。
話は変わりますがGoogleローカルの携帯版に表示させる事は可能なんでしょうか?
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;
}
TEDDY-Gさん
Geocoding.jpと東大CSIS(空間情報科学研究センター)ですが、
表示結果が恐ろしく違うのは何故でしょうか?
地元(愛知)の表示の場合、全然違う結果になります。
Google Mapで調べた結果とGeocoding.jpは、
ほぼ同じ結果です。(でもこの結果が凄くずれてる)
東大CSIS(空間情報科学研究センター)の方が正確な表示をします。
これって愛知だけでしょうか?
基本的に不可能です。
ハックして表示させることは可能かも知れませんが、規約違反っぽいので。
将来に期待しましょう。