GISで使われる地図データなどをPythonで利用する機会があったので、調べたことをまとめておく。最終的には、シェープファイル形式のデータをPythonで読み込んで、matplotlibでプロットしてみる。
Windows10のWSL(Ubuntu 18.04)。
GISで使われるデータフォーマットにはいくつか種類があって、まずはラスターデータとベクターデータに分けられる。ラスターデータはざっくり言うとjpgやpngなどの画像で、ベクターデータは座標や線などの情報からなるデータ。PDFで拡大しても画像のように線などが荒くならないのは、PDFではベクターデータを扱えるから。GISで使われるベクターデータにもいくつかフォーマットがあって、そのひとつがシェープファイル。シェープファイルは本体の拡張子shpのファイルとその他の複数のファイルから構成される。
国土地理院のホームページにある地球地図日本の第2.2版ベクタの全レイヤをダウンロード。ダウンロードしたファイルを解凍すると、いくつかのシェープファイルがある。今回は日本の海岸線データ(coastl_jpn.shp)とフェリー航路データ(ferryl_jpn.shp)を可視化してみる。
調べた限りGIS用データを扱えるPythonライブラリはいくつかあるが、GeoPandasを使うことにした。Pandasという名前がついているように、GeoPandasではPandasと同じデータ形式が使える。Pandasに慣れていれば他のライブラリよりも扱いやすいかもしれない。
GeoPandasはpipでインストールできる。
ダウンロードしたシェープファイルをmatplotlibで可視化する。
結果は以下の通りで、日本の海岸線は黒、フェリー航路は青でプロットした。
環境
Windows10のWSL(Ubuntu 18.04)。
GISで使われるデータ
GISで使われるデータフォーマットにはいくつか種類があって、まずはラスターデータとベクターデータに分けられる。ラスターデータはざっくり言うとjpgやpngなどの画像で、ベクターデータは座標や線などの情報からなるデータ。PDFで拡大しても画像のように線などが荒くならないのは、PDFではベクターデータを扱えるから。GISで使われるベクターデータにもいくつかフォーマットがあって、そのひとつがシェープファイル。シェープファイルは本体の拡張子shpのファイルとその他の複数のファイルから構成される。
可視化するデータ
国土地理院のホームページにある地球地図日本の第2.2版ベクタの全レイヤをダウンロード。ダウンロードしたファイルを解凍すると、いくつかのシェープファイルがある。今回は日本の海岸線データ(coastl_jpn.shp)とフェリー航路データ(ferryl_jpn.shp)を可視化してみる。
GIS用データを扱えるPythonライブラリ
調べた限りGIS用データを扱えるPythonライブラリはいくつかあるが、GeoPandasを使うことにした。Pandasという名前がついているように、GeoPandasではPandasと同じデータ形式が使える。Pandasに慣れていれば他のライブラリよりも扱いやすいかもしれない。
GeoPandasはpipでインストールできる。
シェープファイルの可視化
ダウンロードしたシェープファイルをmatplotlibで可視化する。
import geopandas as gpd
# matplotlibのターミナル対応
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
def main():
# シェープファイルのあるディレクトリ
shape_dir = 'gm-jpn-all_u_2_2/'
# シェープファイル名
shape_fname_l = ['coastl_jpn.shp', 'ferryl_jpn.shp']
# プロットする色
color_l = ['black', 'blue']
fig, ax = plt.subplots(figsize = (20,16))
for shape_fname, color in zip(shape_fname_l, color_l):
# シェープファイルの読み込み
data = gpd.read_file(shape_dir + shape_fname)
data.plot(ax=ax, color=color)
plt.savefig('gis_coast_ferry.pdf')
plt.clf()
if __name__ == '__main__':
main()
結果は以下の通りで、日本の海岸線は黒、フェリー航路は青でプロットした。

0 件のコメント:
コメントを投稿