Perl で、住所から緯度経度を取得する方法

Geo::Google モジュールを利用する (米国)。住所を渡せばコーディング的にはほとんど 1行で緯度経度を返してくれる。Google Maps にアクセスしにいって緯度経度を取ってきていてるので、地図データベースは Google Maps のものである。以前紹介した PHP のときのように SOAP も何もいらない (Geo::Google は、内部で LWP::Simple を利用している)。PHP の Geocoder 版は、Geocoder のデータベースに SOAP 経由でアクセスする。少し使ってみた結果、Geocoder のデータベースは少しズレが生じるようである (米国の場合)


use utf8;
use Encode;
use Geo::Google;
use XML::Parser;
#!/usr/bin/perl use utf8; use Encode; use Geo::Google; use XML::Parser; my $lng, $lat; my $address1 = 'your address part 1 here'; my $address2 = 'your address part 2 here'; my ($degree) = getDegrees("$address1 $address2"); if($degree) {
$lng = $degree->longitude;
$lat = $degree->latitude;
} else {
$lng = ''; $lat = '';
} sub getDegrees { # 住所から緯度経度を検索
return $GEO->location( address => Encode::encode_utf8(shift));
                                                    # shift = address / リファレンスを返す
}

Comments

Submitted by iCon (not verified) on 2006/05/31 - 16:11

Permalink

はじめまして。 Geo::Googleをインストールしようとしているのですが、以下のようなテストの段階で以下のようなエラーが発生します。

t/Geo-Google....ok 5/14Use of uninitialized value in subroutine entry at /Library/Perl/5.8.6/darwin-thread-multi-2level/XML/Parser/Expat.pm line 474.
Google Maps自身のバージョンアップの為のような気がしますが、コンパイルの際に何か特別のことをしましたか? 私の方は、CPANでのインストール、手動でperl Makefile.pl, make, make testのどちらとも失敗しました

そうですね。私の方も今 CPAN でインストールしてみたら失敗しました。それ以前の問題として、密かに Google Maps のフル機能を実装していた https://perltips.twinkle.cc/ajax/google_maps_bbs.php が動かなくなり、修復しようとしていたところでした。 正直、Google Maps API は少し放っておいたのですが、バージョン2になり、機能アップしているようです。またいろいろ試してみないといけないですね。お役に立てずに申し訳ないです。 --- yas

Submitted by iCon (not verified) on 2006/06/06 - 00:45

Permalink

 お返事ありがとうございます。 動かなくなったということが解っただけでも、大助かりです。ソースを見る限り、Google側のMapsの表示方法が大幅に変わっているようですね。経度と緯度を抽出する部分に手を入れれば動きそうなので、試しています。