Google Maps API は、シンプルな RESTful インターフェイスを通じて強力な地理空間機能の世界を開きます。わずか数行のコードで、住所のジオコーディング、距離の計算、カスタム マップの表示などを行うことができます。
この包括的なガイドでは、Python を使用して Google Maps API を使い始める方法を学びます。以下について説明します。
- APIキーの取得
- 住所のジオコーディングと座標の取得
- 距離と移動時間の計算
- WebスクレイピングでAPIの制限を克服する
- Python を使用して Google マップ データをスクレイピングする
他にもたくさん!飛び込んでみましょう。
Google Maps API の概要
Google Maps API は、JSON/XML インターフェイスを介して Google の強力なマッピング プラットフォームへのアクセスを提供する Web サービスです。 Google マップをウェブページに埋め込んだり、マップ スタイル、マーカー、ポリゴン、オーバーレイをカスタマイズしたりできます。
ただし、この API を使用すると、次のような非常に便利な地理空間機能も有効になります。
- ジオコーディング – 番地を地理座標に変換する
- 逆ジオコーディング – 地理座標を最も近い住所に変換する
- 距離行列 – 場所間の移動距離と時間を計算する
- 方向 – ポイントツーポイントのルートとルートの取得
- 場所 – 地元の場所やビジネスの検索と詳細の取得
- 静的マップ – 静的な地図画像の生成
15 を超える API と 100 以上の機能を備えており、その範囲は驚くべきものです。また、Google Maps API の価格は非常に手頃であり、多くの機能は使用制限まで無料です。
そこで Python 統合が役に立ちます。単純な Python コードを通じてこれらすべての API にアクセスし、ワークフローを自動化し、強力な地理空間アプリケーションを構築できます。
まずはセットアップから始めましょう。
Google Maps APIキーの取得
Google Maps API を使用するには、まずプロジェクトを識別する API キーを取得する必要があります。その方法は次のとおりです。
に行きます Google クラウド コンソール Googleアカウントでログインします。
ナビゲーション メニューをクリックし、[API とサービス] > [資格情報] を選択します。
[認証情報] ページで、[認証情報の作成] をクリックし、[API キー] を選択します。
この新しい API キーをコピーし、安全な場所に保存します。早速使ってみます!
このキーを使用すると、使用する API の有効化を開始できます。このガイドでは、次の 2 つの重要なものに焦点を当てます。
- ジオコーディング API
- 距離行列 API
[資格情報] ページで、上部にある [API とサービスを有効にする] をクリックします。それらの API を検索し、プロジェクトで有効にします。
これで、Python で API を使用する準備が整いました。
Python で住所をジオコーディングする
Google Maps API の最も便利なアプリケーションの 1 つは、住所を地理座標 (緯度と経度) に変換することです。このプロセスはと呼ばれます ジオコーディング.
Geocoding API を使用すると、任意の住所を渡し、その位置座標を取得できます。これを行うための Python 関数を次に示します。
import requests
def geocode_address(api_key, address):
url = ‘https://maps.googleapis.com/maps/api/geocode/json‘
params = {
‘address‘: address,
‘key‘: api_key
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
if data[‘status‘] == ‘OK‘:
location = data[‘results‘][0][‘geometry‘][‘location‘]
lat = location[‘lat‘]
lng = location[‘lng‘]
return lat, lng
else:
print(f"Error: {data[‘error_message‘]}")
return None, None
else:
print(‘Request failed.‘)
return None, None
これにより、Geocoding API にリクエストが作成され、アドレスがパラメータとして渡されます。成功すると、応答から緯度と経度の座標が抽出されます。
テストしてみましょう:
api_key = ‘YOUR_API_KEY‘
address = ‘1600 Amphitheatre Parkway Mountain View, CA 94043‘
lat, lng = geocode_address(api_key, address)
print(lat, lng)
これにより、座標 37.4224764、-122.0842499 が出力されるはずです。
Google Maps Geocoding API を使用して、Python で住所を地理座標に変換する簡単な方法ができました。
ジオコーディングのいくつかの使用例:
- 住所のリストから地図上に場所をプロットする
- 顧客の地理的分布を分析する
- 近接検索のためにデータベース レコードに緯度/経度でタグ付けする
しかし、逆の方法、つまり地理座標を住所に変換したい場合はどうすればよいでしょうか?
Python でのリバース ジオコーディング
リバース ジオコーディングを使用すると、指定された緯度/経度座標に最も近い住所を取得できます。
Geocoding API はこれを次のように処理します。 latlng
代わりにパラメータ address
:
import requests
def reverse_geocode(api_key, lat, lng):
url = ‘https://maps.googleapis.com/maps/api/geocode/json‘
params = {
‘latlng‘: f‘{lat},{lng}‘,
‘key‘: api_key
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
if data[‘status‘] == ‘OK‘:
return data[‘results‘][0][‘formatted_address‘]
else:
print(f"Error: {data[‘error_message‘]}")
return None
else:
print(‘Request failed.‘)
return None
テストしてみましょう:
lat = 37.4224764
lng = -122.0842499
address = reverse_geocode(api_key, lat, lng)
print(address)
「1600 Amphitheatre Pkwy、Mountain View、CA 94043、USA」と印刷されます。
リバース ジオコーディングは、緯度/経度データから地図上に住所をプロットする場合に便利です。
次に、Google Maps API を使用して場所間の距離を計算する方法を見てみましょう。
Python での距離と移動時間の計算
Distance Matrix API は、出発地と目的地のマトリックスの移動距離と時間を提供します。
出発地と目的地のセットを渡すと、出発地と目的地の各ペア間の距離と所要時間が返されます。
リクエストのサンプルは次のとおりです。
import requests
origins = ‘Vancouver+BC|Seattle‘
destinations = ‘San+Francisco|Victoria+BC‘
url = ‘https://maps.googleapis.com/maps/api/distancematrix/json‘
params = {
‘origins‘: origins,
‘destinations‘: destinations,
‘key‘: api_key
}
response = requests.get(url, params=params)
data = response.json()
これは、バンクーバーとシアトルからサンフランシスコとビクトリアまでの距離と時間を計算します。
rows
各原点の結果が含まれており、 elements
宛先ごとの結果が表示されます。
距離行列 API の使用例:
- 店舗の所在地までの到達圏を計算する
- 注文の納期を見積もる
- 多数のドライバーのルートを最適化する
これは、Google Maps API でできることのほんの一部を示しています。次にいくつかの制限を克服する方法を見てみましょう。
WebスクレイピングでGoogle Maps APIの制限を克服する
Google Maps API は、寛大な無料制限により優れた価値を提供します。ただし、レートと使用量には依然として制限があります。
これらを超えると、リクエストは調整またはブロックされ始めます。トラフィックの多いアプリの場合は、プレミアム プランの購入が必要になる場合があります。
代替はです Google マップのデータをスクレイピングする Selenium、Beautiful Soup などの Python ライブラリを使用してブラウザから直接。
これにより、バックエンド API を使用するのではなくフロントエンドからデータを抽出するため、API の制限が完全に回避されます。
Google マップをスクレイピングすると、必要なデータを柔軟に抽出できます。
- 地名、写真、レビュー、属性など。
- 行き方とルート
- 混雑予想と人気の時間帯
- ストリートビュー画像
Python を使用して Google マップ データをスクレイピングする方法を簡単に見てみましょう。
Python と BeautifulSoup を使用して Google マップをスクレイピングする
Google マップの Web スクレイピングをデモンストレーションするために、いくつかのレストランの名前とレビューを抽出します。
まずはGoogleマップで「バンクーバーのレストラン」を検索してみます。次に、最初のページで場所の名前、評価、サンプルレビューをスクラップします。
私たちのスクリプトは次のことを行います:
- Selenium を使用してページをロードする
- BeautifulSoup に切り替えて HTML を解析します
- CSSセレクターを使用して場所要素を検索する
- 名前、評価、レビューを抽出する
完全なコードは次のとおりです。
from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver = webdriver.Chrome()
url = ‘https://www.google.com/maps/search/restaurants+in+vancouver‘
driver.get(url)
time.sleep(3)
soup = BeautifulSoup(driver.page_source, ‘html.parser‘)
places = soup.select(‘div.section-result-content‘)
data = []
for place in places:
name = place.select_one(‘h3.section-result-title‘).text
rating = place.select_one(‘span.section-result-rating‘).text
reviews = [review.text for review in place.select(‘span.section-review-text‘)]
data.append({
‘name‘: name,
‘rating‘: rating,
‘sample_reviews‘: reviews[:2]
})
driver.quit()
print(data)
これにより、次のようなデータが抽出されます。
[
{
‘name‘: ‘The Flying Pig‘,
‘rating‘: ‘4.6‘,
‘sample_reviews‘: [‘Amazing food!‘, ‘Staff are so friendly.‘]
},
{
‘name‘: ‘The Eatery‘,
‘rating‘: ‘4.5‘,
‘sample_reviews‘: [‘Delicious!‘, ‘Great prices.‘]
}
]
主な利点は、API の制限がないことです。あらゆるデータを大規模に抽出できます。
責任ある Web スクレイピングのためのヒント:
- サーバーの過負荷を避けるためにランダムな遅延を追加します。
- ボットではなく通常のブラウザとして識別する
- robots.txt のルールを尊重する
- プロキシ ローテーションを使用して IP ブロックを回避する
Google マップのスクレイピングに関するその他のヒントについては、詳細ガイドをご覧ください。
主要な取り組み
Google Maps API は、シンプルなインターフェースを通じて強力な地理空間機能を有効にします。
- 住所のジオコーディングと逆ジオコーディング座標
- 距離と移動時間を計算する
- 場所や道順などを検索して詳細を確認する
リクエストモジュールを使用すると、Python と簡単に統合できます。ただし、使用制限により、ワークロードが大きくなると課題が生じる可能性があります。
Web スクレイピングは、Google マップから地理空間データを無制限に抽出するためのスケーラブルな代替手段を提供します。
Selenium や BeautifulSoup などの Python ライブラリを使用すると、場所、レビュー、ルート案内、交通統計、ストリート ビューなどを簡単に収集できます。
これにより、API またはスクレイピングを使用して Google マップ データの可能性を最大限に引き出すための強固な基盤が得られることを願っています。可能性は無限です。