住所で北海道の輪郭は見えるのか(perl GD)

gd-honshu
TVアニメ『ハイスクール・フリート』。女の子と艦隊。一話目で『沈黙の艦隊』を思い起こさせるストーリー展開があったので、ああ、こういうのも面白いだろうなあ、と見ています。ゆるゆる感はあるのですが、それはそれで。作品中にドイツ人におもてなし料理をふるうシーンがあって、ドイツっぽく作った料理は全部ドイツ人の口に合わなかったのですが、肉じゃがは美味しかったようです。肉じゃがって世界で通用するってことでしょうか。私も肉じゃがは好きです。じゃがいもはもっと。「北海道産」とついているだけで、美味しさ倍増しますよね。

上の画像は、位置情報ダウンロードサービス(「位置参照情報 国土交通省」)で取得したデータから経度緯度情報を利用して点描画した画像です。住所が存在する箇所が、ほぼ本州の輪郭になっています。人の住んでいない滋賀の湖や、日本アルプスの山々など、住所データがないので、点が打たれていません。

そこで私が気になったのが、じゃがいもが美味しい北海道。友人から聞いた話では、北海道では隣の家というのは、 肉じゃが作りすぎたからお隣さん食べてくださいと気軽に鍋もって歩いて行ける距離ではなくて、ガソリン残量を気にしながらハンドル握って行くような離れた場所にあるらしいです。つまり、住所どうしが離れた場所にあるので、住所から画像を作ったら、もしかしたら北海道の形にならないのではないか? と疑問になった次第です。

画像生成ですが、今回はperlでGDを使います。

~$ perl -e 'use GD;$img=new GD::Image(320,200);
$img->colorAllocate(0,255,0);print $img->png();' > gd-green.png
~$ 

上記コマンドラインを実行すると、下のような四角い緑のPNG画像が生成されます。
gd-green

次は円を描いてみましょう。

~$ perl -e 'use GD;$img=new GD::Image(320,200);
$img->colorAllocate(0,255,0);
$blue=$img->colorAllocate(0,0,255);
$img->arc(50,50,50,50,0,360,$blue);
print $img->png();' > gd-arc.png

申し訳なさそうに左上に円が見えるかと思います。
gd-arc-ongreen

では、本題である北海道の位置情報から点描画するコマンドです。 setPixelを使えば点が打てますが、あえてarcを使っています。hokkaidoコマンドと名づけました。

~$ cat -n hokkaido
     1	#!/usr/bin/perl -n
     2	
     3	BEGIN{
     4		use GD;
     5	
     6		$img = new GD::Image(500,500);
     7		$black = $img->colorAllocate(0,0,0);
     8		$white = $img->colorAllocate(0xFF,0xFF,0xFF);
     9		$green = $img->colorAllocate(0,0xFF,0);
    10	}
    11	
    12	s/\"//g;
    13	($lat,$long) = (split(/,/,$_))[7..8];
    14	$y=500-($lat-41)*100;
    15	$x=($long-139)*80;
    16	$img->arc($x,$y,1,1,0,360,$white);
    17	
    18	
    19	END{ print $img->png();}
    20	
~$ 

hokkaidoコマンドには、あらかじめchmodで実行権限を付けておきます。

~$ chmod 755 hokkaido
-rwxr-xr-x 1 takk takk 349  6月 15 21:55 hokkaido
~$ 

実行はパスを通していないので、./をつけて行ないます。

~$ ./hokkaido locdata-utf8.txt > gd-hokkaido.png

gd-hokkaido

思ったよりも、北海道の輪郭になっていますね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA