2019年5月22日水曜日

PythonでGIS用シェープファイルを可視化する

GISで使われる地図データなどをPythonで利用する機会があったので、調べたことをまとめておく。最終的には、シェープファイル形式のデータをPythonで読み込んで、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 件のコメント:

コメントを投稿