LoginSignup
1
1

国土交通省サイトから海岸線の緯度経度データを取得

Posted at

概要

国土交通省の国土数値情報ダウンロードサイトから各都道府県の海岸線データ(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)

・結果

スクリーンショット 2024-02-10 124117.png

手順

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の詳細は、参考サイトの記事をご覧ください)。
実行すると以下のような結果が得られます。

スクリーンショット 2024-02-10 125333.png

しっかりと千葉県海岸線の緯度経度データを取得できていることが確認できます。

まとめ

以上のようにして、海岸線データの取得を行いました。
これらの処理は、適宜書き換えることにより、複数の都道府県のデータを一括で作成するなど効率化することができるかと思うので、それぞれの使いやすいように書き換えていただければと思います。
つたない文章ですが,最後までご覧いただきありがとうございました!

参考サイト

Python XMLファイルから特定要素を抽出する方法 メモ
foliumの基本的な使い方とオープンデータ活用

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1