第15章 外部データの利用
ここでは国土地理院や国土交通省など,GMT外部から得たデータの使用方法について記す.
国土地理院標高メッシュデータ
データの下準備
地理院からデータをダウンロードするとzipで圧縮されている.中にはXML形式のファイルが入っている. これを扱いやすくするために緯度,経度,標高のxyz形式にするため, 同じく地理院からダウンロードできる基盤地図情報ビューアをインストールする. これを起動して開く画面に,標高メッシュのzipファイルをドラッグすると地形が描画される.
「エクスポート>標高メッシュをシェープファイルへ出力」を選んで開く画面で,(1)直角座標系に出力するチェックを外し,(2)出力ファイル名の拡張子を「.xyz」に変える.拡張子がデフォルトのままだと,後で開いても文字化けして読み取れなかった.ただし(1)はナントカ座標系とやらのxyz座標で出力したいのならチェックが必要(図--).

データの読み込み
作成したxyzファイルは,numpyを使ってcsvと同じ方法で読み込める. すなわちdelimiterを「,」にしてnp.loadtxt()である. ただそのままだと最初の列に行番号が入っているので, 必要なxyzの列だけを取り出すためにusecols=[1,2,3]としてcolumnを指定すると良い.
dat = np.loadtxt(r"out.xyz",
delimiter=",",
usecols=[1,2,3])
シェープファイルのプロット
(v0.12.0)
Note
データの例:
国土数値情報(国土交通省)の海岸線
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-C23.html
国交省による国土数値情報などはシェープファイルで提供されるが, PyGMT単体ではシェープファイルは読み込めない. そこでgeopanasを使えばシェープファイルを読み込んでfig.plotでプロットできる.
geopandasのインストール
mamba install geopandas
mambaを使用していない場合は「conda install geopandas」でも良い.
プロット
import geopandas
import pygmt
# ファイル読み込み
coast = geopandas.read_file(<入力ファイル.shp>)
# coast = geopandas.read_file(<入力ファイル.zip>) も可.
# プロット
pygmt.Figure()
...
fig.plot(
data = coast,
pen = '0.5p',
)
...
国土数値情報などからダウンロードしたファイルで zipファイルの中にshpファイルがある場合, 展開して中のshpファイルをgeopandasで読み込んでも良いが, 展開せずに直接zipファイルをgeopandas.read_fileで読み込むこともできる.
国交省による道路等の線データの利用
道路や鉄道路線などのデータをダウンロードすると,シェープファイルやgeojsonファイルなどが入っている.これをライブラリを使って取り込んでプロットする.
jsonライブラリの利用
(1)import json. (2)open(<.geojson>, 'r', encoding=
ダウンロードしたファイルのutf-8フォルダー中にある方の.geojsonデータを使う.直上のフォルダにも.geojsonがあるがencodingを何にすれば良いのかわからず使えなかった.'cp932'にしてみたがエラーが出た.
import json
train_path_gj = "鉄道/utf8/N02-21_RailroadSection.geojson"
jopen = open(train_path_gj,
'r',
encoding = 'utf_8_sig'
)
dat_j = json.load(jopen)
kobe = []
# ftr = []
for data in dat_j["features"]:
if "神戸電鉄" in data["properties"]["N02_004"]:
# ftr.append(data["properties"]["N02_004"])
tmp = data["geometry"]["coordinates"]
kobe.append(tmp)
(略)
for i in range(len(kobe)):
fig.plot(
data = kobe[i],
style = 'f0.2c/0.1c',
pen = '0.5p'
)

geopandasの利用
gpd.read_file(<utf-8のgeojsonデータ>, encoding='utf_8_sig')
condaでインストールできるライブラリgeopandasを使う方法.(1)shpファイルを使う場合:
train_path = "鉄道/N02-21_RailroadSection.shp"
df = gpd.read_file(train_path_gj, encoding='cp932')
(2)geojsonファイルを使う場合:
import geopandas as gpd
train_path_gj = "鉄道/N02-21_RailroadSection.geojson"
df = gpd.read_file(train_path_gj, encoding='utf_8_sig')