地名を入力するとそこに地図が移動するような機能を設置しようとしているのですが、
Googlemapsでは実装されているのに、APIが公開されていないことを知りました。
そこで
http://www.geocoding.jp/api/
を知ったわけですが、
フォームから住所や地名を受け取り、http://www.geocoding.jp/api/q=
+ form.value
で返されるxmlから地図上に表示。
このような実装された方いませんか?
但し、回避しないといけない問題があります。
それはJavaScriptのセキュリティ問題です。
同一ドメインからでないとXMLファイルを読み込むことができません。
それを回避するためにcgiを設置しました。
このcgiがgeocoding.jpへデータの依頼をし、得たデータをそのまま表示します。
具体的には以下のようなものを作りました。
------------------------------------------------------------------------
#!/usr/bin/perl
print "Content-Type: text/xml\n\n";
#フォームから地名を取得
use CGI;
my $q = new CGI;
my $locate = $q->param('q') or die;
#XMLデータを取得
my $url = "http://www.geocoding.jp/api/?q=$locate";
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent('');
$ua->timeout(5);
my $response = $ua->get($url);
unless ($response->is_success) {
die 'file get error';
}
#取得したXMLを出力
print $response->content;
------------------------------------------------------------------------
このプログラムを適当な名前のcgi(例えばxml.cgi)としてサーバにアップすればXMLを取得できるはずです。
使用するときは
http://www.geocoding.jp/api/?q=*******
の代わりに
http://www.example.com/xml.cgi?q=*******
としてXMLを取得すればいいはずです。
(www.example.com/xml.cgiはあなたのサーバのURLに置き換えてください。)
僕はここで手が止まっていたんですよ。JavaScriptのセキュリティだったんですね。
ソースまで!
ありがとうございます!感謝です。
参考までに、こんなページを作ってみました。
http://www.tizdes.net/test_geocoding.php
自分のサーバにおいたプログラムで
http://www.geocoding.jp/api/
に対してリクエストを投げます。
戻ってきたxmlから座標を取り出せばその位置が
表示されます。
PHPだとfsockopen()関数等を使います。
サンプルは、「成功時」のみ処理しています。
「重複時」「エラー時」は、アラートで逃げています。
サンプルですので。。。
ご参考まで。。
重複時をどう処理するかもいろいろ考えようですね。
ご参考までに、geocoding.jpさんを使わないサンプルです。
GoogleMapsAPIとは、直接関係ないので詳細は控えます。
http://www.tizdes.net/tizdes00003.php
(番地までの検索となります。)
ちなみに、現段階では東京都のデータしか入れていません。
ご参考まで。。
実装例:
http://members.jcom.home.ne.jp/wa-ga-ya/map/map.htm
中央上部の[明石市人丸町2−6][住所検索]
の箇所です。
住所だけでなく駅名やお城の名前なんかでもヒットしますが不確かです。
いろいろ機能を付けすぎてソースは複雑怪奇ですみません。
質問があればこの場でどうぞ。
因みに、Maps Api本体の関数にもあるようですが、残念ながらまだ日本はサポートされていません。