古い記事
ランダムジャンプ
新しい記事
かなり前に作った、キーワード(住所の一部)を入れると緯度経度を返すコマンドラインスクリプトを整理して公開しときます。YOLPのジオコーダAPIを叩いているだけのサンプルプログラムです。実行にはアプリケーションIDが必要です。

こちらの「ジオコーダAPI」では住所の一部に対してのみ情報を返します。

- YOLP(地図):Yahoo!ジオコーダAPI - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html

「コンテンツジオコーダAPI」はそれにプラスしてランドマーク名にも対応しています。

- YOLP(地図):コンテンツジオコーダAPI - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/contentsgeocoder.html

後者の「コンテンツジオコーダAPI」の方が良さそうですが、意図しない結果が出ることがあり調整が必要なのが難点。説明が面倒なのでまた別途記事を書きますね。

今回は前者の「ジオコーダAPI」を使い、キーワードを住所の一部に限定したバージョンをのせておきます。

■コード (address2latlong.pl)
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::Simple;
use URI::Escape;
my $appid = "(YOUR APP ID)";
while (<>) {
    chomp;
    my @r = address_to_latlong({key => $_, appid => $appid});
    print join("\t", @r, $_)."\n";
}
sub address_to_latlong {
    my ($args_ref) = @_;
    my $ek = URI::Escape::uri_escape($args_ref->{key});
    my $murl =
        "http://geo.search.olp.yahooapis.jp/OpenLocalPlatform/V1/geoCoder"
        ."?appid=$args_ref->{appid}&query=$ek&datum=tky";
    my $r = get($murl);
    my ($lat, $long) = $r =~ m{<Coordinates>(.+?),(.+?)</Coordinates>};
    return ($lat||"", $long||"");
}

■実行例
% cat address2latlong-test.txt
東京都渋谷区
東京都港区
神奈川県横浜市中区
神奈川県足柄上郡山北町
こんにちは
東京タワー
東京ミッドタウン
% ./address2latlong.pl address2latlong-test.txt
139.69822020	35.66403830	東京都渋谷区
139.75160740	35.65807070	東京都港区
139.64218630	35.44470240	神奈川県横浜市中区
139.08383880	35.36060800	神奈川県足柄上郡山北町
		こんにちは
		東京タワー
		東京ミッドタウン
(「住所の一部」でないクエリは、結果が返って来ません)

以上、どうぞご利用ください。

なお、アプリケーションID (appid) の取得は下記からどうぞ:
http://e.developer.yahoo.co.jp/webservices/register_application