libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

Googleマップを利用する (5/8)

作成:2012-05-13 10:49
更新:2012-05-13 10:49

■Geocodeオブジェクトの構造

Geoコーディングで取得されるオブジェクトには「results」というプロパティが用意されており、この中に取得された位置や住所に関する情報がまとめられています。このresultsは配列になっており、位置・住所情報が必要なだけここに保管されます。(ただし、GeocoderのメソッドでGeoコーディングした場合には1つだけしか保管されていないはずです)

このresultsの他、「status」というプロパティもあり、これは正常に値が取得されれば"OK"というテキストが設定されています。

では、問題のresults配列内のオブジェクトの構造をざっと整理してみましょう。
results = [
   {
      address_components=[
         {long_name=長い名前,
            short_name=短い名前,
            types=[値がどういうものかを示すタイプの配列]},
         {……必要なだけ住所のコンポーネントが並ぶ……}
      ],
      formatted_address=……整形された住所のテキスト……,
      types=[住所のタイプの配列],
      geometry={
         bounds={
            southwest={ lng=経度 , lat=緯度 },
            northeast={ lng=経度 , lat=緯度 }
         },
         viewport={
            southwest={ lng=経度 , lat=緯度 },
            northeast={ lng=経度 , lat=緯度 }
         },
         location_type=位置のタイプ,
         location={ lng=経度 , lat=緯度 }
      }
   },
   {……必要なだけオブジェクトが用意される……}
]

ぱっと見ても、何がなんだかわかりません。とりあえず大雑把な形で整理をしましょう。resulsに保管されるオブジェクトは、だいたい以下のプロパティに情報がまとめられています。

address_components――住所に関する個々の値が配列としてまとめられています。例えば東京都新宿区新宿1-2-3といった住所だと、Geoコーディングでは「日本」「東京都」「新宿区」「以下略」……という具合に、国、都道府県、市町村というような形の住所データの集まりとして住所の情報が得られるのです。この1つ1つの情報を管理するオブジェクトが、ここにまとめられているわけです。

formatted_address――1まとまりのテキストに整形された住所です。単に住所を知りたいならこれで十分でしょう。

types――住所のタイプです。タイプというのは、その住所の値がどういう種類の情報かを示すものです。例えば郵便番号とか、国や都道府県といった値なのか、あるいは地名なのか、電車の駅の名前か、観光地名か、建物名か……というように、Googleマップの内部で事細かに種類分けがされているのです。そのタイプ名がまとめられます。

geometry――位置に関する情報がまとめられています。Geoコーディングした時には、ここから必要な値を取り出します。領域を示すbounds、表示領域を示すviewport、位置のタイプを示すlocation_type、位置を示すlocationといった情報があります。すboundsviewportは、得られた情報からマップの表示エリアなどを算出するのに役立つものと考えればよいでしょう。単純に位置を知りたいだけなら、locationの値だけわかれば十分です。

かなり面倒くさい構造になっていることがわかりますね。とりあえず、簡単な利用例をあげておきますので、それを見ながら使い方を理解してください。下のスクリプトは、入力した住所の位置を調べて表示するものです。実行すると、スプレッドシートに入力ダイアログが現れるので、適当に書いて実行してください。



(※実際にやってみるとわかるのですが、どうも日本語の住所は文字化けしてしまい、Googleマップからうまく取得できないようです。ここではリージョンをUSにして英語で取り出すようにしていますが、ストリートアドレスなど一部がまだ化けてしまうのが確認できました。外国の住所はほとんど問題なく取り出せます。このあたりについては今後のバージョンアップを待つしかないようです)

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function showGeoCode() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var getname = Browser.inputBox("地名", 
      "地名を入力:", Browser.Buttons.OK_CANCEL);
  // Geocoderを取得する
  var geocode = Maps.newGeocoder().setRegion("US").
      setLanguage("en").geocode(getname);
  var geo = geocode.results[0];
  try {
    // 住所と位置の値を取り出し表示する
    var addresstext = geo.formatted_address;
    var geodata = geo.geometry;
    Browser.msgBox(addresstext + " [経度:" + geodata.location.lng + 
                   ", 緯度:" + geodata.location.lat + "]");
  } catch(e){
    Browser.msgBox("問題が発生しました。:" + e);
  }
}

※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る