Python 指定した地域名の緯度経度を取得する。さらにそれを中心とした四角形を地図上に描く「folium」

 本記事では、国土地理院の無料のAPIを利用して、指定した地域名の緯度と経度を取得する雛形コードを載せました。そして、ライブラリ「folium」を利用して、下図のように抽出した緯度と経度を中心座標として矩形を描く雛形コードを載せました。

国土地理院APIの利用は、次のようにそのURLの最後に地名を入力します。下記は「鳥取砂丘」の位置座標データを取得したい場合の例です。

https://msearch.gsi.go.jp/address-search/AddressSearch?q=鳥取砂丘

■ライブラリ「folium」のインストール

foliumは地図を可視化するためのライブラリです。

# anaconda環境下の場合
conda install -c conda-forge folium

# pipの場合
pip install folium

■本プログラム

foliumはwebブラウザ上で表示することができるため、本記事ではJupyterLabでインタラクティブに実行してゆきます。

import requests
import urllib
import folium

# 取得したい地域名
my_keyword = '鳥取砂丘'

# 国土地理院のAPIを使って、キーワードに関するデータを抽出する
api_url = "https://msearch.gsi.go.jp/address-search/AddressSearch?q="
s_quote = urllib.parse.quote(my_keyword)
response = requests.get(api_url + s_quote)
response

上記が成功すれば、下図のように戻り値200が返ってきます。

# 取得したデータの一覧を確認
#(キーワードに完全一致のデータのみが取得されるわけではないため)
my_json_data = response.json()
my_json_data

大抵、下図のように複数抽出されます。指定したワードと完全一致が抽出されるわけではありません。

# 上記結果から取得したい「title」を指定する
my_title = '鳥取砂丘'

# 指定したキーワードと一致する緯度と経度を抽出する関数
def extract_coordinates(json_data, key_word):
    for feature in json_data:
        if 'properties' in feature and 'title' in feature['properties']:
            title = feature['properties']['title']
            if title == key_word:
                coordinates = feature['geometry']['coordinates']
                latitude, longitude = coordinates[1], coordinates[0]
                return latitude, longitude

    return None

# 緯度と経度を抽出
my_region = extract_coordinates(my_json_data, my_title)
latitude, longitude = my_region
print(f"{my_title}の緯度: {latitude}, 経度: {longitude}")

上記を実行すると、下記のように緯度と経度の位置座標を取得できます。

# 位置座標を指定して地図を描く
map = folium.Map(location=my_region, zoom_start=15)

# 指定した座標にマーカーを置く
folium.Marker(my_region, popup=my_title).add_to(map)

# 描画
map

上記を実行すると、下図のようにマーカーを記されます。

# 指定した座標を中心にした矩形範囲を描く
latitude_min = latitude - 0.005 # 南端の緯度
longitude_min = longitude - 0.01 # 西端の経度
latitude_max = latitude + 0.005 # 北端の緯度
longitude_max = longitude + 0.01 # 東端の経度
folium.Rectangle(
    # bounds=[[南端の緯度, 西端の経度], [北端の緯度, 東端の経度]]
    bounds=[[latitude_min, longitude_min], [latitude_max, longitude_max]],
    color='blue',
    fill=True,
    fill_color='blue',
    popup=my_title
).add_to(map)

# 描画
map

上記を実行すると、指定した四辺形の頂点座標を元に、下図のように地図上に描きます。

以上

<広告>