見出し画像

Pythonで日本地図を扱う -その1:地図の読み込み

先日リリースのスカイマティクスのクラウド型地図表現自動化サービス「SEKAIZ(セカイズ)」で使われている技術について紹介したいと思います。

SEKAIZ(セカイズ)を使えば、誰でも簡単に、自分で用意したデータを使って目的に合った様々なスタイルの地図を作成することができるのですが、その内部で使われている地図にはさまざまなアレンジが加えられています。スカイマティクスでは以下の例のように「いかに面白い地図を自動で作ることができるか?」に日々取り組んでいます。

例えばできるこんなこと

都道府県どうしの位置関係を考慮してメッシュに当てはめた地図

画像1


日本地図の形状の特徴を保ちつつスムーズにした地図

画像2


日本地図と水墨画を組み合わせた地図

画像3


日本地図の地形と水墨画を組み合わせた地図

画像4


世界地図とテクスチャを掛け合わせた地図

画像5


日本の略地図にそれっぽい地形を入れた地図

画像6


日本地図を表示する

今回対象とする地図は主にGeoJSON形式とし、地図上の各領域が多角形(ポリゴン)で構成されていると想定します。PythonでGeoJSONを扱うためには下記のパッケージを使うのが便利です。

geopandas:地理データを含むデータを扱うことができる
shapely:ポリゴンなどの平面幾何学図形の分析や操作をすることができる
pyproj:投影座標系、測地系の座標変換を行うことができる
matplotlib : 図やグラフの描画

インストールしていない人は

pip install geopandas shapely pyproj matplotlib

でインストールしましょう。以後、書いていく上で必要なパッケージが出てきたら追加でインストールしましょう。

まずは元になる地図でGeoJSONファイルを取得しましょう。今回はgeoBoundariesというサイトから取ってきたものを使います。ファイルに若干の前処理を加えたものをここに置きました。それをgeopandasを使って読み込み、描画してみましょう。

 import geopandas as gpd
 import matplotlib.pyplot as plt
 
 input_path = 'japan.geojson'
 # ファイルの読み込み
 df = gpd.read_file(input_path)
   
 # 描画
 df.plot(color='none', edgecolor='blue')
 plt.show()

描画結果はこちら。

画像7

では次回以降、色々と処理を加えていきたいと思います。

最後に

SEKAIZ(セカイズ)ではユーザーが簡単に面白い地図を作成することができるように日々工夫を重ねています。自分も一員となって毎日ワクワクしながら面白いアイデアを出し開発していきたい、と言う方がいらっしゃいましたら是非ともエントリーください!