概要
国土交通省の国土数値情報ダウンロードサイトから各都道府県の海岸線データ(XML形式)を取得して,緯度経度データを抜き出し,CSVファイルに保存する処理を実行しました.
使用言語・実行環境
- Python3.8
- OS: Windows11
- pandas
- os
- xml.etree.ElementTree
- folium
- matplotlib
- tqdm.notebook
実行コード
以下がすべての実行コードになります.今回は,一例として千葉県の海岸線情報を取得しました.各処理の詳細は後述.
import pandas as pd
import xml.etree.ElementTree as ET
import os
# データ取得関数
# file_path:海岸線データのパス
# prefecture_name: 都道府県名
def get_coastlines_df(file_path, prefecture_name):
if not(os.path.isfile(file_path)):
print("file path not found")
return pd.DataFrame()
#xmlデータを読み込みます
tree = ET.parse(file_path)
#一番上の階層の要素を取り出します
root = tree.getroot()
lat = [] #緯度
lon = [] #経度
for value in tqdm(root.iter('DirectPosition.coordinate'), leave=False):
tmp = value.text
tmp = tmp.split(' ')
lat.append(tmp[0])
lon.append(tmp[1])
df = pd.DataFrame()
df['緯度'] = lat
df['経度'] = lon
df.index = [prefecture_name] * len(lat)
return df
# 実行
prefecture_name = "千葉県"
file_path = "C23-06_12\C23-06_12.xml"
Chiba_coastline = get_coastlines_df(file_path, prefecture_name)
・結果
手順
1. 各都道府県データをダウンロード
ダウンロードサイトにアクセスし、必要な都道府県のデータファイル(zip形式)をダウンロードし、展開して任意の場所に置きます。
※zipファイルを自動でダウンロードし、データ取得後に自動削除することも可能ですが今回は省略します。
2. XML形式から必要なデータを抜き出す
上記のコードを実行します。 実行する際は、file_pathをxmlファイルがあるパスに、prefecture_nameを都道府県名に変更して実行してください。 xmlファイルの詳細な操作は参考サイトをご覧ください。※取得後はxmlファイルを削除しても構いません。
おまけ(マッピング)
データを取得したので、実際に緯度経度データを地図上にマッピングしてみましょう。今回は、先ほど取得した千葉県を例にマッピングしてみます。
※本記事では、Foliumを用いてマッピングを行なっています。
以下が実行コードになります。
import folium
import matplotlib.pyplot as plt
from tqdm.notebook import tqdm
def mapping_coastlines(data, prefecture):
cm = "jet"
n_samples = 20
cmap = plt.get_cmap("jet")
if prefecture=='all':
return 0
else:
df = data[data.index==prefecture]
initial_location = [df.iloc[0, 0], df.iloc[0, 1]]
# 地図生成
folium_map = folium.Map(location=initial_location, zoom_start=7)
for i in tqdm(range(len(df)), leave=False):
folium.CircleMarker(
location=[df.iloc[i, 0], df.iloc[i, 1]],
radius=5,
#popup=data.hpg_genre_name.iloc[200],
color='blue',
fill=True,
fill_color='blue',
).add_to(folium_map)
return folium_map
maps = mapping_coastlines(Chiba_coastline, '千葉県')
maps
作成したデータフレームから、一行ずつデータを取得し、地図上にマッピングする処理を記述しています(Foliumの詳細は、参考サイトの記事をご覧ください)。
実行すると以下のような結果が得られます。
しっかりと千葉県海岸線の緯度経度データを取得できていることが確認できます。
まとめ
以上のようにして、海岸線データの取得を行いました。これらの処理は、適宜書き換えることにより、複数の都道府県のデータを一括で作成するなど効率化することができるかと思うので、それぞれの使いやすいように書き換えていただければと思います。
つたない文章ですが,最後までご覧いただきありがとうございました!