geocoder について
geocoderは、住所と地理座標を相互変換するPythonライブラリおよびコマンドラインツールです。CSVの一括処理や住所要素の解析、結果のキャッシュに対応し、Nominatim、Google、Bingを利用できます。
主な機能
- 01住所と座標の相互変換
- 02CSVの一括処理
- 03Nominatim、Google、Bingに対応
- 04住所要素の構造化
- 05結果のキャッシュ
活用シーン
- 01顧客住所を座標に変換
- 02座標に住所を付加
- 03住所の標準化と確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill geocoderインストール後、Claude Code で/geocoderを入力して読み込まれたか確認します。
同梱ファイルscripts/geocoder.pyscripts/requirements.txt
詳細
ジオコーダー
住所と地理座標を相互に変換します。
機能
- ジオコーディング:住所を座標に変換
- 逆ジオコーディング:座標を住所に変換
- バッチ処理:CSV ファイルを処理
- 複数のプロバイダー:Nominatim(無料)、Google、Bing
- 住所の構成要素:構造化された住所の解析
- キャッシュ:結果のキャッシュ機能を内蔵
クイックスタート
from geocoder import Geocoder
geo = Geocoder()
# Address to coordinates
result = geo.geocode("1600 Amphitheatre Parkway, Mountain View, CA")
print(f"Coordinates: {result['lat']}, {result['lon']}")
# Coordinates to address
result = geo.reverse(37.4224, -122.0840)
print(f"Address: {result['address']}")
CLI の使用方法
# Geocode address
python geocoder.py --geocode "Empire State Building, New York"
# Reverse geocode
python geocoder.py --reverse "40.7484,-73.9857"
# Batch geocode CSV
python geocoder.py --input addresses.csv --column address --output geocoded.csv
# Batch reverse geocode
python geocoder.py --input coords.csv --lat lat --lon lon --reverse-batch --output addresses.csv
API リファレンス
Geocoder クラス
class Geocoder:
def __init__(self, provider: str = "nominatim", api_key: str = None)
# Single operations
def geocode(self, address: str) -> dict
def reverse(self, lat: float, lon: float) -> dict
# Batch operations
def batch_geocode(self, addresses: list, delay: float = 1.0) -> list
def batch_reverse(self, coordinates: list, delay: float = 1.0) -> list
# File operations
def geocode_csv(self, input: str, column: str, output: str) -> str
def reverse_csv(self, input: str, lat: str, lon: str, output: str) -> str
プロバイダー
Nominatim(デフォルト)
- 無料で、API キーは不要です
- リクエストはレート制限されています(1 秒あたり 1 件)
- OpenStreetMap のデータを使用します
Google Maps
geo = Geocoder(provider="google", api_key="YOUR_KEY")
Bing Maps
geo = Geocoder(provider="bing", api_key="YOUR_KEY")
ジオコーディングの結果
{
"address": "1600 Amphitheatre Parkway, Mountain View, CA",
"lat": 37.4224764,
"lon": -122.0842499,
"components": {
"house_number": "1600",
"road": "Amphitheatre Parkway",
"city": "Mountain View",
"state": "California",
"postcode": "94043",
"country": "United States"
},
"raw": {...} # Provider-specific data
}
逆ジオコーディングの結果
{
"lat": 40.7484,
"lon": -73.9857,
"address": "20 W 34th St, New York, NY 10001, USA",
"components": {
"house_number": "20",
"road": "West 34th Street",
"city": "New York",
"state": "New York",
"postcode": "10001",
"country": "United States"
}
}
ワークフローの例
顧客の住所をジオコーディングする
geo = Geocoder()
result = geo.geocode_csv(
input="customers.csv",
column="shipping_address",
output="customers_geocoded.csv"
)
print(f"Geocoded {result['success']} of {result['total']} addresses")
住所を検証する
geo = Geocoder()
address = "123 Main St, Anytown"
result = geo.geocode(address)
if result:
print(f"Valid: {result['address']}")
print(f"Standardized: {result['components']}")
else:
print("Address not found")
住所から座標を追加する
geo = Geocoder()
locations = [
(40.7128, -74.0060),
(34.0522, -118.2437),
(41.8781, -87.6298)
]
for lat, lon in locations:
result = geo.reverse(lat, lon)
print(f"({lat}, {lon}): {result['address']}")
レート制限
Nominatim では、各リクエストの間に 1 秒空ける必要があります。バッチ関数がこれを自動的に処理します。
# Automatic delay in batch operations
results = geo.batch_geocode(addresses, delay=1.0)
# For paid providers, can reduce delay
geo = Geocoder(provider="google", api_key="KEY")
results = geo.batch_geocode(addresses, delay=0.1)
エラー処理
result = geo.geocode("Invalid Address XYZ123")
if result is None:
print("Address not found")
elif result.get('error'):
print(f"Error: {result['error']}")
else:
print(f"Found: {result['address']}")
依存関係
- geopy>=2.4.0
- pandas>=2.0.0
コメント
Markdown 対応