今日の位置ログ地図
今日は車であちこち行かなきゃならなかったので、モバツイッターの試用をかねて所々でその時居る地名を送っていた。せっかくなので地図上に表示してみた。
方法は、
- Twitter API でステータス履歴取得
- モバツイッター経由のステータス(地名)抽出
- Google Maps API でジオコーディング
- Google Maps 地図画像取得 URL 生成
かな。
で、結果。予想以上にしょぼかった…。画像が汚いのは容量抑えるのに JPEG で生成しているため。
もうちょっと経路とかわかるかと思ったんだけどなー。敗因は、
- 点(地名)が少ない
- 範囲が広い
- こんなことする予定じゃなかったので地名がてきとー → 緯度経度取得失敗
- 送ったつもりの地名が登録できてない、室内かな
- Twitter でやることじゃない
あたりかな。
一応、ソース。中心の位置とかズーム値とかあとから調整してるよ!
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use JSON 'jsonToObj'; use YAML 'Dump'; use Readonly; Readonly my $APIKEY => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; Readonly my $ID => 'hetappi'; my $ua = LWP::UserAgent->new; my $resp = $ua->get(sprintf 'http://twitter.com/statuses/user_timeline/%s.json', $ID); my @places; foreach (reverse @{jsonToObj($resp->content)}) { push @places, $1 if ($_->{text} =~ /^(.+)\[mb\]$/); } print Dump \@places; my @latlongs; foreach (do { my %tbl; grep { !$tbl{$_}++ } @places }) { my $resp = $ua->get(sprintf 'http://maps.google.com/maps/geo?q=%s&output=json&key=%s', $_, $APIKEY); my $obj = jsonToObj($resp->content); push @latlongs, { lat => $obj->{Placemark}[0]->{Point}->{coordinates}[1], long => $obj->{Placemark}[0]->{Point}->{coordinates}[0] } if ($obj->{Status}->{code} == 200); } print Dump \@latlongs; my $url = 'http://maps.google.com/mapdata?' . 'latitude_e6=35658230&longitude_e6=139697702&zm=20000&w=500&h=500&cc=JP&min_priority=1&image_format=3'; my $no = 51; $url .= sprintf '&Point=b&Point.latitude_e6=%d&Point.longitude_e6=%d&Point.iconid=%d&Point=e', $_->{lat} * 1000000, $_->{long} * 1000000, $no++ foreach (@latlongs); print $url, "\n";
なぜか駒沢公園が2つあるし、一番遠かった羽田空港ないし、明治公園が北海道だし。
見にくいので改行調整した。
[hetappi@lily work]$ perl ./mkmap.pl --- - 中野坂上交差点 - 新宿大ガード西 - 四谷4丁目 - 明治公園 - 宮下公園 - 渋谷橋 - 駒沢公園 - 駒沢公園 - 玉川田園調布 - 大鳥居 - 品川シーサイド - 中目黒 - 道玄坂 - 南青山 - 東京駅 - 国会前 - 新宿区役所 - 中野駅 --- - lat: 35.688699 long: 139.716125 - lat: 43.334801 long: 145.598708 - lat: 35.624597 long: 139.660272 - lat: 35.600729 long: 139.665848 - lat: 35.569082 long: 138.554232 - lat: 35.608524 long: 139.749549 - lat: 35.639115 long: 139.701178 - lat: 35.65823 long: 139.697702 - lat: 35.665656 long: 139.717812 - lat: 35.681099 long: 139.767084 - lat: 35.463821 long: 135.400218 - lat: 35.69384 long: 139.703549 - lat: 35.706032 long: 139.665652 http://maps.google.com/mapdata? latitude_e6=35658230&longitude_e6=139697702&zm=20000&w=500&h=500&cc=JP&min_priority=1&image_format=3& Point=b&Point.latitude_e6=35688699&Point.longitude_e6=139716125&Point.iconid=51&Point=e& Point=b&Point.latitude_e6=43334801&Point.longitude_e6=145598708&Point.iconid=52&Point=e& Point=b&Point.latitude_e6=35624597&Point.longitude_e6=139660272&Point.iconid=53&Point=e& Point=b&Point.latitude_e6=35600729&Point.longitude_e6=139665848&Point.iconid=54&Point=e& Point=b&Point.latitude_e6=35569082&Point.longitude_e6=138554232&Point.iconid=55&Point=e& Point=b&Point.latitude_e6=35608524&Point.longitude_e6=139749549&Point.iconid=56&Point=e& Point=b&Point.latitude_e6=35639115&Point.longitude_e6=139701178&Point.iconid=57&Point=e& Point=b&Point.latitude_e6=35658230&Point.longitude_e6=139697702&Point.iconid=58&Point=e& Point=b&Point.latitude_e6=35665656&Point.longitude_e6=139717812&Point.iconid=59&Point=e& Point=b&Point.latitude_e6=35681099&Point.longitude_e6=139767084&Point.iconid=60&Point=e& Point=b&Point.latitude_e6=35463821&Point.longitude_e6=135400218&Point.iconid=61&Point=e& Point=b&Point.latitude_e6=35693840&Point.longitude_e6=139703549&Point.iconid=62&Point=e& Point=b&Point.latitude_e6=35706032&Point.longitude_e6=139665652&Point.iconid=63&Point=e [hetappi@lily work]$
2007/10/07 追記
ちょっといじった。