最近、趣味として地理データを用いた小品をちらほら作っている。
もともと大学生のころにGPSデータを触る経験があって、久しぶりに「やっぱ、地図って面白いなぁ」と無垢な気分で遊んでいる。
数学的に正しい待ち合わせ
とあるコミュニティで年度末の飲み会幹事を仰せつかり、とにかく頭脳明晰な人たちが集まるコミュニティだったので、普通に会場設定をしても「面白くないなー」と言われそうと思い、日曜大工した。
国交省が公開している全国の駅座標をもとに、参加者の最寄駅を入力すると重心と幾何中央値を表示してくれるもの。
一般に"待ち合わせ場所"と言ったら、「品川と新宿だったら、間とって恵比寿かな?」みたいな重心を想像しがちだけど、
「品川から3人、新宿から1人」みたいになってくると、「みんなの移動距離の総和を最小にしたい」となる。
幾何的な中央値を求めるアルゴリズムはWeiszfeldとか色々あるのは知っていたけど、自分でやったことがなかったので作ってみた。
ついでにPostgreSQLでGISデータを扱った経験もなかったので、PostGISも触ってみた。
無駄に地球の曲率を考慮して、直線距離でなく球面距離で算出するようにしてみたり。
いつの間にかLeafletがめちゃくちゃ使いやすくなっていて、本当に日曜日だけで完成した。
場所の好感度
Leafletが非常に使いやすかったので、調子に乗って作ったのが「場所に対する好感度の可視化」。
割と引っ越しが好きで、首都圏だけでも7箇所ぐらい点々としたので、それぞれの場所に思い入れや好みがある。
そこで、「場所の雰囲気や住みやすさは連続しており単純に距離によって伝播している」という大胆な仮説を立てて、数箇所評価するだけで「おそらく、あなたはこの辺も好き/嫌いですよ」を可視化してくれるものを作ってみた。
ちなみに、この仮説は東銀座に住んでいた経験から全く成り立たないことを知っている。
銀座、いわゆる高級ブティック街は歌舞伎座あたりを境にして、いきなり築地の市場街となり、香水の匂いが突如として酢飯の匂いに変わる特異点がある。
試遊してみた結果、やはり仮説は成り立たないことがわかった。
街区じゃなくて都道府県ぐらいのスケールでやったら成り立つのかもしれない。
しかし、「距離じゃないとしたら、何で伝播してるの?」という新たな疑問を湧かせてくれたので、「歴史的経緯(城下町、門前町、埋立地…)を定量化したら良いのかな」など、次回作につながるモチベにはなった。
総括
地理データやグラフ理論はやっぱり楽しい。
楽しいだけでなく、Mini Cut等を考えると「1個だけ爆弾を仕掛けるなら品川駅が一番被害大きい」「それでもNYやParisより東京はマシ」みたいなこともわかっちゃう。
「微積が苦手だから数学が嫌い」みたいな人でもグラフ理論は楽しかったりするんじゃないかと思って、もっとこういう遊びをする人が増えたら良いのにな、と思う。

