住所から緯度と経度を求める

codeなにがし::Google map api(http)で住所から緯度経度を求める。にインスパイヤーされて作ってみました。

今ではブームが下火になってしまったアマチュア無線には「Q 符号」なるものがあり、決まった 3 文字のアルファベットをキーワードにして、言葉の通じない相手であっても最小限の通信ができるようになっています。 その中に QTH というものがあり、住所を示すことが多いのですが、本当は緯度経度を報告するものです。 そうした緯度経度情報から「今どのあたりの人と話しているんだな」と想像を膨らませたりしていたものです。

さて、緯度経度を知るためには、Geocoding - 住所から緯度経度を検索が便利です。 Google Maps とも連動していますので、必要な情報が大体得られます。 また、API を公開していますので、他の言語からも簡単に取得できるのではないかと思います。

#! /usr/local/bin/gawk -f
# latitude_longitude.awk
# 住所から緯度と経度を求める
# usage: gawk -f latitude_longitude.awk address

BEGIN {
    # Geocoding - 住所から緯度経度を検索 のサービスを利用する
    #   http://www.geocoding.jp/
    address  = ARGV[1];
    base_url = "www.geocoding.jp";

    FS  = "[<>]";
    ORS = "\r\n";

    # リクエスト先のポート指定とリクエスト
    http_service = "/inet/tcp/0/" base_url "/80";
    http_request = "GET http://" base_url "/api/?q=" address " HTTP/1.0";

    # TCP でのデータの取得
    print http_request          |& http_service;
    print ""                    |& http_service;
    while ((http_service |& getline) 0) {
        if ($0 ~ /<lat>/) {
            print address "の緯度と経度は、";
            print "緯度: " $3 " 度";
        }
        if ($0 ~ /<lng>/) {
            print "経度: " $3 " 度";
            print "です。";
            break;
        }
    }
    close(http_service);

}

API から得られるものは XML ですが、1 行 1 項目で返されているので、xgawk の XML パース機能を使っていません。 実行してみましょう。

$ gawk -f latitude_longitude.awk '東京都港区芝公園4-2-8'
東京都港区芝公園4-2-8の緯度と経度は、
緯度: 35.658671 度
経度: 139.7454 度
です。

このように緯度と経度を取得することができます。

tag_gawk.pngtag_gawk.png