以上で完了です。

開発を始めるには、デベロッパー ドキュメント をご覧下さい。

Google Maps Geocoding API をアクティベートする

まず初めに Google Developers Console で次の作業を行います。

  1. プロジェクトを作成または選択する
  2. Google Maps Geocoding API をアクティベートする
  3. 適切なキーを作成する
続ける

ジオコーディング時の割り当ての最適な使い方

ジオコーディングとは、住所(たとえば「東京都港区六本木 6-10-1」)を地理的座標(たとえば、35.6604282、139.7269877)に変換するプロセスです。変換した座標は、マップ上に場所の目印を付ける場合や、位置指定を行う場合に使用できます。Google Maps API では、次の 2 つのアプローチでジオコーディングを使用できます。

  • クライアント側のジオコーディング。一般に、ユーザー操作のレスポンスとしてブラウザで実行されます。Google Maps JavaScript API は、リクエストを作成するクラスを提供しています。このアプローチについては、Google Maps JavaScript API のドキュメントをご覧ください。
  • HTTP サーバー側のジオコーディング。サーバーが Google のサーバーに対してジオコードのクエリを直接実行できます。Google Maps Geocoding API はこの機能を提供するウェブサービスです。通常、このサービスとサーバー側で実行している他のコードを組み合わせて使用します。サーバー側のジオコーディングについては、Google Maps Geocoding API のドキュメントをご覧ください。

クライアント側およびサーバー側のジオコーディングの例

このクライアント側のジオコーディングの例では、住所を取得し、ジオコーディングを実行し、地図の中心をその住所に移動して、そこにマップのマーカーを追加しています。

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

その他の例については、Google Maps JavaScript API のドキュメントをご覧ください。

次の例では、Python を使用してサーバー側のジオコーディング リクエストを実行しています。

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)
jsongeocode = response.read()

これにより、次のコンテンツを含む JSON オブジェクトが生成されます。

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

サーバー側のジオコーダは、JSON の代わりに XML 形式も提供できます。その他の例については、Google Maps Geocoding API のドキュメントと、Python やその他の言語のクライアント ライブラリをご覧ください。

割り当てに関する考慮事項

ジオコーディングの割り当てとレート制限に対応するには、このドキュメントに記載された戦略が有効です。

標準プラン で使用する場合は、ブラウザを使用するクライアント側でも、Google Maps Geocoding API ウェブサービスを使用するサーバー側でも、1 日あたりの全リクエスト数は 2,500 までという割り当て量が決められています。1 日のすべてのリクエストが、プロジェクトの割り当てに対してカウントされます。1 日あたりの割り当てを増やすには、使用制限のガイドに記載された従量課金を有効にします。

1 日あたりの割り当ての上限に加えて、ジオコーディング サービスには 50 QPS(1 秒あたりのクエリ数)のレート制限が課せられます。QPS はクライアント側とサーバー側の合計クエリ数として計算されます。

モバイルアプリなど、クライアント側のジオコーディング リクエストを定期的に実行する場合、すべてのユーザーが同時にリクエストを実行するとエラーが返されるおそれがあります(たとえば、1 分ごとにまったく同じタイミングですべてのリクエストを実行した場合)。この問題を回避するには、次のいずれかの方法を検討してください。

  • キャッシュ戦略を採用する。
  • ランダムな間隔でリクエストを実行する(ジッター)。ユーザーベース全体でランダムにリクエストを発生させる。
  • Android 向けに開発する場合は、不正確なリピート アラームを使用する。
  • Android 向けに開発する場合は、適切な位置情報戦略を選択する。

Google Maps APIs Premium Plan ユーザーは、API で利用できる 1 日あたりの割り当てがさらに多くなります。Google Maps APIs Premium Plan の割り当ての詳細については、Premium Plan の使用レートと使用制限のガイドをご覧ください。Google Maps APIs Premium Plan を使用しても割り当ての上限に達する場合は、Google Cloud Support Portal でサポート リクエストを申請してください。

キャッシュに関する考慮事項

Google Maps API の利用規約では、ジオコードのキャッシュ(一定の期間、ジオコードをサーバーに保存すること)が許可されています。同じ住所を繰り返し検索する必要がある場合は、キャッシュが有用です。ただし、ジオコーディングの結果は、Google が収集するデータの精度が高まるにつれて変動する点に注意してください。データをキャッシュする場合は定期的に結果を更新して、位置情報に最も近いジオコードを取得できるようにしてください。

クライアント側のジオコーディングはいつ使用するか

端的な答えは、「ほぼ常に」です。その理由は次のとおりです。

  • ユーザーにとってはクライアント側でやり取りするリクエストとレスポンスのほうが高速で、よりインタラクティブな操作が可能です。
  • クライアント側のリクエストには、ユーザーの言語、地域、ビューポートなど、ジオコーディングの精度を向上するための情報を含めることができます。

特に、クライアント側のジオコーディングは、ユーザーからの入力に基づいて住所をジオコーディングする際に最適です。

クライアント側のジオコーディングには、次の 2 つの基本アーキテクチャがあります。

  • ジオコーディングと表示を完全にブラウザ内で実行する。たとえば、ユーザーがページ上で住所を入力すると、アプリはその住所をジオコーディングします。次に、ページでそのジオコードを使用してマップ上にマーカーを作成します。または、ジオコードを使用してアプリで簡単な解析を行います。サーバーにはデータは送信されません。この方法により、サーバーの負荷を軽減できます。
  • ブラウザでジオコーディングを行い、その結果をサーバーに送信する。たとえば、ユーザーがページ上で住所を入力すると、アプリはブラウザ内でその住所をジオコーディングします。次に、アプリがデータをサーバーに送信します。サーバーは目的地付近の有名なスポットなどのデータを返します。この方法により、独自のデータに基づいてレスポンスをカスタマイズでき、必要に応じてジオコードをキャッシュすることもできます。キャッシュを使用すればさらに最適化できます。たとえば、サーバーに対して住所のクエリを実行し、最近キャッシュしたジオコードがあるかを確認できます。キャッシュに一致するデータがない場合は、該当データなしとブラウザに応答し、ブラウザで結果をジオコーディングして、それをサーバーに送信してキャッシュします。

サーバー側のジオコーディングはいつ使用するか

サーバー側のジオコーディングは、クライアント側で入力をせずに住所をジオコーディングする必要があるアプリに最適です。よくある例としては、ユーザーによる入力以外の方法でデータセットを取得している場合です。たとえば、ジオコーディングが必要な住所が固定で限定されており、すでに把握できているケースが該当します。サーバー側のジオコーディングは、クライアント側のジオコーディングが失敗したときのバックアップとしても有用です。

ただし、ユーザーにとっては不要な待ち時間が増えることや、クライアント側よりもリクエストで使用できる情報が少ないためにジオコーディングの結果の精度が低下することが懸念されます。

サーバー側のジオコーディング アプリの基本アーキテクチャは次のとおりです。

  • サーバーベースのアプリは、住所をサーバーのジオコーディング スクリプトに送信します。
  • スクリプトがキャッシュを参照し、その住所を最近ジオコーディングしたかを確認します。
  • 最近ジオコーディングしている場合、スクリプトはその結果を元のアプリに返します。
  • 最近ジオコーディングしていない場合、スクリプトはジオコーディング リクエストを Google に送信します。結果が返されたらキャッシュして、元のアプリに結果を返します。

まとめ

一般に、クライアント側のジオコーディングとキャッシュを組み合わせれば、ほとんどのニーズを満たすことができます。割り当てに関する問題が発生した場合は、課金を有効にするか、Premium Plan ライセンスを購入することをおすすめします。

フィードバックを送信...

Google Maps Geocoding API
Google Maps Geocoding API
ご不明な点がありましたら、Google のサポートページをご覧ください。