シェープファイルを使って海より宇宙の方が近い場所を探す
TL; DR
- シェープファイルから海岸線っぽいところを取ってきて距離を計算してみました
関連記事
これまでのシェープファイル関係のブログです。
やったこと
やったことの一覧です。
- 全国のポリゴンから海岸線っぽいものを取得する
- for文を回してポリゴンに入っている地点を計算し、距離計算を行う候補とする
- Haversine formula を用いて各地点から最寄りの海岸線あたりまでの距離を求める
- 100km以上離れている地点を可視化する
それぞれ見ていきます。
海岸線っぽいものを取得する
これまでもshpファイルを使っていますが、実は各都道府県のものではなく全国のファイルもあるので、使えば同じことができます。全国のシェープファイルから、これまでの処理と同じく unary_union を計算し、面積の大きいものを4つ取ってきました。当たり前ですが、本州・北海道・九州・四国になります。今回は海から遠いところを調べたかったので、沖縄や他の島々の処理は省略しています。
ランキング上位のもの(ポリゴン)の外縁(exterior)の位置情報(coords)を可視化しました。それっぽいものが取れていますね。
1位 | 2位 | 3位 | 4位 |
---|---|---|---|
こちら4つの縁をmatplotlibで描画すると大まかな海岸線っぽいものが得られます。
for文を回して距離計算の候補を取得する
全部の日本国内の地点を虱潰しに計算すればいいのですが(脳筋)、さすがに大変なので緯度経度を見て適当に計算地点の候補を取得します。処理としてはfor文で回した各緯度経度について、4つのポリゴンに含まれているかどうかを取得し、海岸線までの距離を計算する候補とします。ここでは計算を楽するために
- 経度
の範囲で50分割 (numpyだと(129, 147) np.linspace(127, 147, num=50)
) - 緯度
の範囲で50分割 (numpyだと(30, 50) np.linspace(30, 50, num=50)
)
計算結果の候補地点を赤く塗りつぶした図がこちらです。だいたい入っていそうですね。これらの各地点から、縁までが100km以上の地点を探してくれば良いです。
Haversine formula を用いた距離の計算
式自体はこちらを見てください。
Julia版の実装は私の昔の記事にも出てきます。
これを使って地球儀上の距離を大まかに計算できます。各点について、縁との距離を計算しますが、実際は遠くの縁は無視して良さそうです。そこでscikit-learnのKDTreeを使って縁の位置情報に空間索引を貼っておき、各地点から一番近い点を取得し、取得したものと赤い候補地点の距離を計算することで、全組の計算などをしなくてよくなるのでラッキーです。
海より宇宙のほうが近い場所を可視化する
最後に可視化したものを出します。候補地点(赤○)を作るのに怠けたのでスカスカなのですが、長野あたり(中央2ヵ所)、群馬あたり(長野の右上)、北海道の3候補地点に海より宇宙が近い場所がありそうだと分かりました。
ついでに米国?の定義である80km以上で可視化したもの(候補地点は省略しました)を載せてみます。それっぽい結果が得られましたかね?
まとめ
宇宙の定義(100km以上、80km以上)、考えたことが特になかったのでTwitterではじめて知りました。
プログラム置き場です。
ところでこんな記事は読んでいないで「よりもい(宇宙よりも遠い場所)」を見ましょう。
Discussion