地図とオンラインOSの関係(後編)Windows Liveが魅せる次世代マッシュアップ(4/5 ページ)

» 2007年02月22日 08時00分 公開
[大澤文孝,ITmedia]

function onData(p_contacts)
{
…
}

 引数p_contactsで受け取った場合、i番目の連絡先は、p_contacts[i]だ。それぞれの連絡先の値は、次のようにプロパティとして取得できる。このプロパティ名は、大文字小文字を区別する。


p_contacts[i].personalState;
p_contacts[i].personalCity;
p_contacts[i].personalStreet;

Live Contacts ControlとVirtual Earth Controlを組み合わせる

 Live Contacts Controlの仕組みが分かったところで、Virtual Earth Controlと組み合わせてみよう。

 ここでは、連絡先情報を送信すると、その連絡先の個人住所が、Virtual Earth Control上にプッシュピンとして表示されるという例を示す(リスト5、画面9)

 リスト5では、検索のために次に挙げるFindLocationメソッドを使っている(関連記事:前編)


map.FindLocation(state+city+street, onFind);

 FindLocationメソッドの第2引数に渡すのは、コールバックの関数だ。FindLocationメソッドは非同期のメソッドであり、検索対象が見つかると、ここで指定したメソッドをコールバックする。

 コールバック先のメソッドでは、その見つかった位置が、VESearchResultオブジェクトの配列として得られる。


function onFind(results)
{
  // resultsはVESearchResultオブジェクト
}

 VESearchResultオブジェクトには、IDプロパティとLatLongプロパティがある。

 IDプロパティは検索したそれぞれのアイテムを識別するユニークなID値、LatLongはその場所を示すVELatLongオブジェクトだ。そこで次のようにすれば、検索結果として最初に見つかった位置にプッシュピンを付けることができる。


var pin = new VEPushpin(
  results[0].ID, results[0].LatLong, 
  'http://www.itmedia.co.jp/favicon.ico', 
  '友人');
map.AddPushpin(pin);

 本来であれば、プッシュピンに表示される文字を「友人」ではなくて、その人の名称にしたいところだろう。しかしコールバック関数が絡んでおり、非同期で呼び出されるため、それを実現するコードは複雑となる。

 現在検索対象となっている「個人名」「住所」などをオブジェクトで表現し、それをコールバック関数に渡すといった仕組みを考える必要がある(特に、コールバック関数では、オブジェクト化したときにthisがどこを指すのかという問題がつきまとうのだ)。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ