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 / リファレンスを返す
}
トラックバック URL: https://perltips.twinkle.cc/trackback/29
Posted on 2005-11-28 by yas |
はじめまして。 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のどちらとも失敗しました
Posted by iCon (未認証ユーザ) on 2006/06/01(木) 08:11
そうですね。私の方も今 CPAN でインストールしてみたら失敗しました。それ以前の問題として、密かに Google Maps のフル機能を実装していた https://perltips.twinkle.cc/ajax/google_maps_bbs.php が動かなくなり、修復しようとしていたところでした。 正直、Google Maps API は少し放っておいたのですが、バージョン2になり、機能アップしているようです。またいろいろ試してみないといけないですね。お役に立てずに申し訳ないです。 --- yas
Posted by yas (未認証ユーザ) on 2006/06/01(木) 09:59
 お返事ありがとうございます。 動かなくなったということが解っただけでも、大助かりです。ソースを見る限り、Google側のMapsの表示方法が大幅に変わっているようですね。経度と緯度を抽出する部分に手を入れれば動きそうなので、試しています。
Posted by iCon (未認証ユーザ) on 2006/06/06(火) 16:45