見出し画像

郵便番号から緯度・経度自動取得をする方法について【Python】

概要

Google Maps APIを活用し、郵便番号から緯度・経度を自動取得するシステムを開発しました。これは、輸送の最適化を行う際の前処理として、拠点間の緯度・経度を取得し、それを基に距離を算出するために使用されます。このシステムでは、郵便番号を入力データとして与えると、対応する緯度・経度を自動的に返します。物流業務で頻繁に利用されるため、実務に役立つツールとしてご紹介できればと思います。

使用技術

  • Python (Pandas, Requests)

  • Google Maps API

  • Excel (openpyxl)

コードと解説

1. Google Maps APIキーの設定

import pandas as pd
import requests

# APIキーを設定(取得したAPIキーに置き換えてください)
google_api_key = "Your_API_key"

解説: ここでは、Google Maps APIを使用するためにAPIキーを設定しています。

2. 緯度・経度を取得する関数

def get_lat_lng_google(postal_code):
    base_url = "https://maps.googleapis.com/maps/api/geocode/json"
    response = requests.get(base_url, params={"address": postal_code, "key": google_api_key})
    data = response.json()

解説: get_lat_lng_google 関数は、郵便番号をGoogle Maps Geocoding APIに送信して、その結果を取得します。requests.get() を使用してAPIリクエストを送信し、GoogleからのレスポンスをJSON形式で受け取っています。この際、APIのURLに郵便番号とAPIキーをパラメータとして渡しています。

3. APIレスポンスの処理

    if data["status"] == "OK":
        location = data["results"][0]["geometry"]["location"]
        return location["lat"], location["lng"]
    else:
        return None, None

解説: Google Maps APIからのレスポンスが "OK" の場合、JSONデータ内の geometry フィールドから lat(緯度)と lng(経度)を取得します。もしAPIリクエストが失敗した場合や無効な郵便番号が送信された場合は、 None を返し、エラーに備えます。

4. エクセルファイルの読み込み

# エクセルファイルを読み込む
file_path = 'postal_codes.xlsx'
df = pd.read_excel(file_path, engine='openpyxl')

解説: ここでは、Pandasの read_excel() 関数を使用して、エクセルファイルから郵便番号のリストを読み込んでいます。このファイルには、各行に郵便番号が含まれ、後でそれぞれに対応する緯度・経度を追加します。

5. 各郵便番号の緯度・経度情報を取得

# 各郵便番号の緯度経度情報を取得し、新しい列に追加
df['緯度'], df['経度'] = zip(*df['郵便番号'].apply(get_lat_lng_google))

解説: この部分では、Pandasの apply() 関数を使用して、エクセルファイル内の各郵便番号に対して先ほど作成した get_lat_lng_google() 関数を適用しています。そして、それぞれの結果を 緯度 と 経度 という新しい列に追加しています。 zip() を使って、関数の戻り値であるタプルを分割し、2つの列にデータを格納しています。

6. エクセルファイルに書き出し

# 結果を新しいエクセルファイルに書き出す
output_file = 'postal_codes_with_lat_lng_google.xlsx'
df.to_excel(output_file, index=False)

解説: 最後に、取得した緯度・経度のデータを新しいエクセルファイルに書き出します。 to_excel() 関数を使用し、 index=False にすることで、行番号(インデックス)を除外して保存しています。これにより、読みやすい形式で結果が保存されます。

手作業での緯度・経度の検索を自動化し、時間と労力を大幅に削減することができます。ぜひ活用してみてください。

いいなと思ったら応援しよう!