概要
地理空間情報を記録したShapeファイル.shp
を開くためには、通常ArcGISやQGISなどの専用ソフトウェアが必要となる。
ここでは、それらのソフトウェアを使わずに、Shapeファイルの内容を確認する方法について説明する。
また、ファイルの情報を地図上に表示する方法についても解説する。
Shapeファイルを開く
必要なモジュール
- geopandas
geopandas
は地理空間情報を扱う上で非常に便利だが、インストールにやや手間取ることが多い。
インストール手順については以下の記事を参照のこと。
GeoPandasのインストールに失敗した場合の対処法(Fiona/GDALのエラー + Rtreeのインストール)
この記事は Pythonの環境によっては、pipを用いたGeoPandasのインストールに失敗するみたいです。 私は失敗しました。 というわけで、解決策を記録しておきます。 (この記事では、GeoPandasのインストール中にFiona関連...
使用するデータ
例として、ここでは「国土地理院|国土数値情報ダウンロード」にある「都道府県地価調査データ」を用いる。
国土数値情報 | 都道府県地価調査データ
上記サイトから「富山県・令和1年」のデータをダウンロードして展開すると、以下の構成のファイルが得られる。
L02-19_16_GML
├ L02_19_16.dbf
├ L02_19_16.prj
├ L02_19_16.shp
├ L02_19_16.shx
├ L02_19_16.geojson
└ L02_19_16.xml
L02_19_16.shp
ファイルには、L02_006
のカラムに地価の情報が格納されている。
コード
上記L02-19_16_GML
フォルダをカレントディレクトリとして、以下のコードを実行するとL02_19_16.shp
の内容を表示できる。
(ここでは、Jupyter Notebookを使用して表示した)
import geopandas as gpd
price = gpd.read_file("L02_19_16.shp")
price
データを地図上にプロット
必要なモジュール
地図を表示するために
- folium
を使用する。また、各種計算や調整を行うために、ここでは
- numpy
- matplotlib
を用いる。
これらのモジュールはすべて、pip install
からインストールできる。
コード
# マップの中心を決める(手打ちで丁度よい緯度経度を探しても良い)
y_mass, x_mass = np.array([[geo.y, geo.x] for geo in price["geometry"]]).mean(axis=0)
# マップの作成
map1 = folium.Map(location=[y_mass, x_mass], zoom_start=10)
# カラーマップと対応する数値の範囲を設定する
norm = cl.Normalize(vmin=np.log(price["L02_006"]).min(), vmax=np.log(price["L02_006"]).max())
# カラーマップとして viridis (青→黄)を使用
convert = plt.get_cmap('viridis')
# map1 の上に点を打っていく
for geo, pri in zip(price["geometry"], np.log(price["L02_006"])):
folium.Circle(location=(geo.y, geo.x),
radius = 100,
color = cl.to_hex(convert(norm(pri))),
fill = True
).add_to(map1)
# map1 を表示
map1
地価の数値は対数を取り、分散が大きくなりすぎないようにしている。
また、地図上に丸マーカーを表示するfolium.Circle()
のcolor
を指定する際には、その値を16進数で渡さなければならない。
そこでcl.to_hex(convert(norm(pri)))
では
norm()
でpri
の値を「最小値~最大値」の範囲にノーマライズするconvert()
でカラーマップに対応する数値に変換するcl.to_hex()
で値を16進数に変換する
の一連の作業を行っている。
Comments