Virtual Earth SDKで正式にはIPアドレスから位置情報の取得はサポートしていませんが、次のアドレス http://maps.live.com/WiFiIPService/locate.ashx を利用して取得が可能です。ただし特定のIPアドレスを指定して位置情報を取得という使い方はできません。
上のURL先にアクセスすると
SetAutoLocateViewport(35.761944, 139.733194, 7, false, "お使いのコンピュータの IP アドレスから場所を特定しました。");
というような文字列が返ってきます。「35.761944, 139.733194」のところが経緯度になってます。SetAutoLocateViewportという名前の関数を呼び出す形になっているので、JavaScriptでこの名前の関数を用意しておいて、コールバックしてもらうというスンポーです。
たとえばこんな感じ。第3引数はたぶん ちょうどよいズームレベルで、第4引数はよくわかりません。
function SetAutoLocateViewport(latitude, longitude, lvl, bl, msg) {
var latlong = new VELatLong(latitude, longitude);
var pin = new VEShape(VEShapeType.Pushpin, latlong);
pin.SetTitle(msg);
pin.SetDescription(latitude + ', ' + longitude);
map.AddShape(pin);
map.SetCenterAndZoom(latlong, lvl);
}
もし何らかのエラーが発生した場合は、SetAutoLocateViewportではなく、ShowMessageを呼ぶ文字列が返ってくるようです。
function ShowMessage(msg) {
alert(msg);
}
MSDNライブラリには、AjaxによりURLにアクセスし 得られた文字列をevalするという記事がありますが、もはや動かないコードのようです。もっと単純にscriptタグで参照するようにすれば動きます。下のコードは、ページの最後にマップを初期化する自作関数pageLoadedを呼び出した後に挿入しています。
<body>
<div id='myMap' style="position:absolute; width:400px; height:400px;"></div>
<script type="text/javascript">
pageLoaded();
</script>
<script type="text/javascript" src="http://maps.live.com/WiFiIPService/locate.ashx"></script>
</body>
実行結果は以下の感じ。クリックすると実際のページに移動します。
日本というのはあってるのだけどねー。ちなみに、英語のLive Mapsにはこの機能が付いています。Optionsから「Locate Me」ボタン。