ここでの例は、「Live Contacts Control」と「Virtual Earth Control」を組み合わせて連絡先を地図上に表示する例を示したが、ほかにも、地図情報を使ったWebアプリケーションは、さまざまなものが考えられるだろう。
例えば、得意先の場所を地図に表示する、配送物が現在どこにあるのかを表示する、といった具合だ。そのような場合でも、「緯度/経度」または「住所など特定する情報」が分かれば、その位置にプッシュピンを付けるのは容易だ。
なお、今回は紹介できなかったが、Virtual Earth Controlでは、プッシュピンだけでなく線や多角形を描くこともできる。もちろん、航空地図や、Virtual Earthで人気の高い「3D表示」も、コードから制御できるのだ。
いかなる場合でも、コントロールとして実装されている以上、その操作はJavaScriptから行えばよく、それほど難しいことではない。
“マッシュアップとは、コーディングの技量ではなくて、アイデア次第ともいえるだろう”。
<!-- 名前空間を設定する -->
<html xmlns:devlive="http://dev.live.com">
<head>
<title>連絡先の地図検索</title>
<!-- Virtual Earth Controlのソースの読み込み -->
<script language="JavaScript"
src="http://dev.virtualearth.net/mapcontrol/v4/mapcontrol.js">
</script>
<!-- Live Contactsのソースの読み込み -->
<script language="JavaScript"
src="http://dev.live.com/scripts/base/v0.2/live.js">
</script>
<script language="JavaScript"
src="http://dev.live.com/scripts/contacts/v0.2/control.js">
</script>
<script language="JavaScript">
<!-- 地図の初期化 -->
var map = null;
function InitMap()
{
map = new VEMap('mapArea');
map.LoadMap();
var lat = new VELatLong(35.6811, 139.76709);
map.SetCenterAndZoom(lat, 13);
}
<!-- 検索対象が見つかったときのコールバック関数 -->
function onFind(results)
{
// プッシュピンとして表示
var pin = new VEPushpin(
results[0].ID, results[0].LatLong,
'http://www.itmedia.co.jp/favicon.ico',
'友人');
map.AddPushpin(pin);
}
<!-- 連絡先データを受信する -->
function onData(p_contacts)
{
// 送信された連絡先の数
var recvlength = p_contacts.length;
// プッシュピンクリア
map.Clear();
// ループして展開
for (var i = 0; i < recvlength; i++)
{
var username = p_contacts[i].name;
var state = p_contacts[i].personalState;
var city = p_contacts[i].personalCity;
var street = p_contacts[i].personalStreet;
// 地図の検索
map.FindLocation(state+city+street, onFind);
}
}
</script>
</head>
<body onLoad="InitMap();">
<h1>連絡先の地図検索</h1>
<div id="mapArea"
style="width:320px; height:320px;float:left;">
</div>
<devlive:contactscontrol
style="width:180px; height=240px;float:right;"
devlive:privacyStatementURL=
"http://example.com/privacy.htm"
devlive:channelEndpointURL=
"http://example.com/channel.htm"
devlive:dataDesired=
"name,personalState,personalCity,personalStreet"
devlive:market="jp"
devlive:onData="onData">
</devlive:contactscontrol>
</body>
</html>
Copyright © ITmedia, Inc. All Rights Reserved.