今回はGoogle Places APIについて紹介します。
■Google Places APIとは
API内で施設、地理的位置、有名なスポットとして定義されている場所の
情報を取得できるサービスです。緯度と経度の座標や地名をリクエストすることでその場所の情報をが取得できます。1日1000件までリクエストできます。
■Google Places APIの機能
Google Places APIには6つの機能があります。
・プレイス検索
ユーザーの現在地または検索文字列に基づいてプレイスの一覧を取得できます。
・プレイス詳細
ユーザーのクチコミなど特定のプレイスに関する詳細情報を取得できます。
・プレイスアクション
Googleのプレイスデータベースのデータをアプリケーションのデータで補うことができます。
・プレイスフォト
Googleのプレイスデータベースに保存されている数百件のプレイス関連の写真にアクセスできます。
・プレイスオートコンプリート
ユーザーの入力に応じてプレイスの名称や住所を自動で取得できます。
・クエリオートコンプリート
テキストベースの検索用のクエリ予測サービスを活用してユーザーの入力に応じたクエリ候補を取得できます。
■Google Places APIを使用するには
Google Developers Consoleで「Places API」を有効にし、API KEYを作成する必要があります。
※Google Developers ConsoleでAPIを有効にする方法とAPI KEYを作成する方法は参考サイトにあるGoogle API 第6回を参照してください。
Goolge Place APIを説明するに当たり機能が多いので3回に分けて説明します。今回はプレイス検索とプレイス詳細について、第9回ではプレイスアクションとプレイスフォトについて、第10回ではプレイスオートコンプリートとクエリオートコンプリートについて説明します。
■Google Place APIのプレイス検索とプレイス詳細について
1.プレイス検索
施設、地理的位置、有名なスポットなど様々なプレイス情報を検索できます。
数値(緯度と経度)または文字列を基準に検索ができます。
プレイス検索では検索した場所の一覧と概要が取得できます。
プレイス検索にはリクエストの種類が3つあります。
周辺検索リクエスト、テキスト検索リクエスト、レーダ検索リクエストです。
○周辺検索リクエスト
周辺検索リクエストでは指定した範囲でプレイスを検索できます。
基本的なURLは下記の通りです。
https://maps.googleapis.com/maps/api/place/nearbysearch/output?location=33.885029,130.8810465&radius=5&key={API_KEY}
outputにはjson(推奨)またはxmlを指定できます。
jsonを指定したらJSON形式で、xmlを指定したらXML形式で検索結果を取得できます。
・URLのパラメータについて
必須パラメータはkey、location、radiusです。
keyはGoogle Developers Consoleで作成したAPI KEYを割り当てます。
locationは数値(緯度と経度)を指定します。
「緯度30°経度130°」を指定する場合は「location=30,130」となります。
radiusにはプレイスの結果を取得する範囲を指定します。50000(メートル)まで指定できます。
その他のパラメータはkeyword、language、minprice・minprice、
name、opennow、rankby、types、pagetoken、zagatselectedがあります。
keywordはGoogleが登録したすべてのコンテンツと突き合わせるキーワードです。
languageは結果を返す場合に使用する言語です。言語コードで指定することで反映されます。
minprice・maxpriceには価格レベルを指定します。
価格レベルの範囲は0(最も安い)~4(最も高い)です
nameは場所の名前と突き合わせる1つ以上のキーワードです。
opennowはクエリが送信された時点で開店している場所のみ取得できます。
rankbyは結果を並べる順序を指定します。
rankbyにはprominence(デフォルト)またはdistanceが指定できます。
prominenceは重要度を基準に、distanceは指定されたlocationからの距離を基準に並べ替えられます。
typesはプレイスタイプを指定します。プレイスタイプは参考サイトのプレイスタイプにあるので参照してください。指定したプレイスタイプに関係するプレイスを取得できます。
pagetokenは直前に実行した検索から次の20件を取得できます。
zagatselectedは試験中のパラメータで、Zagatで選ばれたお店やサービスである場所のみに制限されます。
※以降、パラメータの説明が重複する部分について省略します。
検索結果でよく使われるパラメータについて簡単に説明します。
statusは検索結果のステータスです。検索結果の成功や失敗などがわかります。
resultsは検索結果の情報を配列として持っています。
geometryは場所の情報を持つlocation、検索対象範囲を示すviewportなどで構成されます。
location、viewportはlatとlngのパラメータを持ち、それぞれ緯度と経度を示します。
nameは建物やお店、サービスの名称です。
○テキスト検索リクエスト
テキスト検索リクエストは文字列に基づいたプレイスに関する情報を取得できます。「博多のラーメン」や「福岡の屋台」、「北九州の飲食店」などを検索できます。
基本的なURLは下記の通りです。
https://maps.googleapis.com/maps/api/place/textsearch/output?query=小倉&key={API_KEY}
・URLのパラメータについて
必須パラメータはkeyとqueryです。
queryには検索する文字列を指定します。文字列と一致する候補を取得できます。
その他のパラメータはlocation、radius、language、minprice・maxprice、opennow、types、zagatselectedがあります。
※テキスト検索の検索結果は周辺検索と同じなので省略します。
○レーダー検索リクエスト
レーダー検索リクエストは一度に200件までプレイスを検索できます
基本的なURLは下記の通りです。
https://maps.googleapis.com/maps/api/place/radarsearch/output?location=33.885029,130.8810465&radius=5&types=bar&key={API_KEY}
・URLのパラメータについて
必須パラメータはkey、location、radiusとtypesです。
その他のパラメータはkeyword、minprice・maxprice、name、opennow、types、zagatselectedがあります。
※レーダー検索の検索結果は周辺検索と同じなので省略します。
2.プレイス詳細
プレイス詳細リクエストでは特定のお店やスポットの詳細情報(住所、電話番号、評価など)を取得できます。
基本的なURLは下記の通りです。
https://maps.googleapis.com/maps/api/place/details/output?reference=CoQBfQAAAMdbxuDeae2nKkHgkGmVCH1FfwaPle8lztsRw8ypnxUmGOgv0KuuFvNRd9ZtdqH4UxPOQMhosX_M-1bVMlwGR5o7VTcTzALL24Cvcu9KOzJTXSEP13SY4yGs3naG5z0OX1i1MV1-f6PlIqFtRZc1N72tqstXwqGisvgIS1rZ2W5FEhBDcBF_rW8W9Lqh2F2qoWwNGhQvTM2PCUZWQ5Js55kNdjTUhbAkDQ&key={API_KEY}
・URLのパラメータについて
必須パラメータはkey、referenceです。
referenceはプレイス検索から返される場所を一意に識別するIDです。
その他のパラメータはextensions、languageがあります。
extensionsは試験中のパラメータで、追加フィールドを指定できます。
追加フィールドには別のライセンスを必要とするプレミアムデータや、通常はリクエストされない値を入れることができます。
※プレイス詳細の検索結果は周辺検索と同じなので省略します。
■Google Place APIのライブラリについて
Google Place APIのライブラリではプレイス検索を行うことができ、Google Maps JavaScript APIで使用することができます。
※Google Maps JavaScript APIについては参考サイトにあるGoogle API 第5回を参照してください。
JavaScriptでプレイスの検索結果を簡単に処理できるのが利点です。
APIのライブラリを使用するためにスクリプトタグで下記のURLを読み込ませます。
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
librariesパラメータにplacesを指定してライブラリをロードします。
ライブラリでのプレイス検索はPlacesServiceのtextSearchメソッドを呼び出して行います。textSearchメソッドには、検索パラメータと検索結果を処理する関数を引数として割り当てます。検索パラメータはrequestに、検索結果を処理する関数はcallbackに記述しています。
var request = { location: latlng, radius: '500', query: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } } }
検索パラメータにはlocation、radius、query、keyword、name、rankBy、types、referenceがあります。
必須パラメータはqueryのみです。
Googleマップに検索した場所をマーカーで表示します。
※下記のGoogleマップは付録のサンプル1にあります。
サンプル1
以上がプレイス検索とプレイス詳細です。
緯度・経度または地名(文字列)を指定するだけで気になる場所の情報を簡単に検索できます。またGoogle Places APIのライブラリを使用すると検索結果の処理が容易に行え、Googleマップに検索結果をマーカーとして表示できるので便利です。
次回はGoogle Places APIのプレイスアクションとプレイスフォトについて紹介します。
<参考サイト>
・Google Places API
・Google API 第6回
・Google API 第5回
<付録>
・サンプル1
プレイス検索結果をマーカーで表示するサンプルコードです
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>サンプル1</title> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script> <script type="text/javascript"> var map; function sample1() { var latlng = new google.maps.LatLng(33.889577,130.885284); var opts = { //地図の縮尺 zoom: 15, //地図の中心座標 center: latlng, //地図の種類 mapTypeId: google.maps.MapTypeId.ROADMAP, }; //マップの表示 map = new google.maps.Map(document.getElementById("map_canvas1"), opts); //検索パラメータ var request = { //検索の中心座標 location: latlng, //検索の範囲(メートル) radius: '500', //検索文字列 query: 'restaurant' }; //プレイス検索 service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } //検索結果の処理 function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } } } //マーカーを表示 function createMarker(place) { var marker = new google.maps.Marker({ position: place.geometry.location, map: map, title :place.name }); } window.onload = sample1; </script> </head> <body> <div id="map_canvas1" style="width:300px; height:300px"></div> </body> </html>