東京図書館マップ

以前、都内の図書館やらをマーキングする Google マイマップを作ったのだけど、手作業でマーカーを追加するしかなく非常にめんどうだったので放置していた。
が、いつのまにか KML インポート機能が追加されていたので、これを使ってさっくり完成させました。


図書館のデータはなぜか既にある。

[h@lily gmap]$ ls libs*.txt
libs-national.txt  libs-tokyo-east.txt  libs-tokyo-west.txt
[h@lily gmap]$ cat libs-national.txt 
国立,国会図書館,東京都千代田区永田町1-10-1,35.678418,139.744149
#国立,国会図書館関西館,京都府相楽郡精華町精華台8-1-3,34.74368,135.77009
[h@lily gmap]$ 

KML は Geo::GoogleEarth::Document なるものが CPAN にあったのでこれを使ってみた。載せるまでもないけど一応。

#!/usr/bin/perl
use strict;
use warnings;
use Geo::GoogleEarth::Document;

my @cols = qw/blue red green lightblue yellow purple pink orange/;

my $doc = Geo::GoogleEarth::Document->new(name => '東京図書館マップ');
foreach my $col (@cols) {
  $doc->Style(id => $col, iconHref => "http://maps.google.co.jp/mapfiles/ms/icons/$col.png");
}

my $idx = 0;
my $last;
while (<>) {
  chomp;
  my @c = split ',';
  next
    if $c[0] =~ /^#/;
  $idx = $idx < $#cols ? $idx + 1 : 0
    if $last && $last ne $c[0];
  $doc->Placemark(
    name => $c[0] . $c[1], lat => $c[3], lon => $c[4], address => $c[2], styleUrl => "#$cols[$idx]");
  $last = $c[0];
}

print $doc->render();
[h@lily gmap]$ cat libs-*.txt | ./mkkml.pl > libs-tokyo.kml
[h@lily gmap]$ cat libs-tokyo.kml
<?xml version='1.0' standalone='yes'?>
<Document>
  <name>東京図書館マップ</name>
  <Placemark>
    <name>国立国会図書館</name>
    <Point>
      <coordinates>139.744149,35.678418,0</coordinates>
    </Point>
    <address>東京都千代田区永田町1-10-1</address>
    <styleUrl>#blue</styleUrl>
  </Placemark>
  <Placemark>
...(略)...
  </Style>
  <Style id="orange">
    <IconStyle>
      <Icon>
        <href>http://maps.google.co.jp/mapfiles/ms/icons/orange.png</href>
      </Icon>
    </IconStyle>
  </Style>
</Document>

間違って何度もインポートするのは嫌なので Google Earth で確認してみた。予想通り2、3度やり直したよ。
ローカルディスクからインポートできるようなのだがなぜか失敗するので、一度どこかにアップロードし URL 指定でインポートすると成功するみたい。


東京図書館マップ

東京は図書館が多すぎて一度にすべてを表示できないみたい…。