#!/usr/bin/perl -- # Geocodeサンプルプログラム by masa # CSVアドレスマッチングサービス*を利用して、住所から経度緯度に変換します。 # * http://www.tkl.iis.u-tokyo.ac.jp/~sagara/geocode/ # 簡易RESTインタフェースに変換するインタフェースラッパーCGIになっています。 # http://xxx.cgi?addr=(住所)&mode=(測地系) # 測地系: TKY(日本測地系) or WGS(世界測地系) # # 出力形式 # # 住所 # 経度 # 緯度 # 精度 # use strict; use LWP::UserAgent; use HTTP::Request::Common; use Jcode; my %FORM; &form_decode; my $addr = $FORM{'addr'}; my $mode = $FORM{'mode'}; $mode = "TKY" if(!$mode); print << "_EOM_"; Content-Type: text/xml _EOM_ my $url3 = "http://newspat.csis.u-tokyo.ac.jp/cgi-bin/geocode.cgi"; my $port; if ($mode eq "TKY" || $mode eq "TD"){ $port = 8600; }else{ $port = 8800; } if($addr){ my $content = $addr; my $ua = new LWP::UserAgent; my $req = POST $url3, Content_Type => 'form-data', Content => [ action => 'input', spat_host => 'newspat.csis.u-tokyo.ac.jp', spat_port => $port, ncolumn => '1', input_kanji_code => 'auto', output_kanji_code => 'sjis', output_file_format => 'csv', file => [ undef, 'test.csv', Content_Type => 'text/csv', Content => $content ]]; my $res = $ua->request($req); unless($res =~ /Geocoding/){ my $results = $res->content; chomp($results); $results =~ s/\"//g; my @data = split(/\,/,$results); $data[1] =~ s/\// /g; print "$data[1]\n"; print "$data[2]\n"; print "$data[3]\n"; print "$data[4]\n"; # print "$data[5]\n"; } } print "\n"; exit; sub form_decode{ my $form; if($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$form,$ENV{'CONTENT_LENGTH'}); } else{ $form=$ENV{'QUERY_STRING'}; } my @pairs = split(/&/,$form); foreach my $pair(@pairs){ my($name,$value)=split(/=/,$pair); $value=~tr/+/ /; $value=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $name=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $value=~s/>/>/g; $value=~s/sjis; $name=jcode($name)->sjis; $FORM{$name}=$value; } }