VEMap.GetDirections メソッド

多地点のルートをマップ上に描画し、ルートに関する詳細情報をコールバック関数に渡します。

構文

VEMap.GetDirections(locations, options);

パラメータ

パラメータ 説明

locations

ルート上で通過する必要がある地点を指定するオブジェクトの配列。地点として指定できるのは VELatLong クラス オブジェクトまたは文字列オブジェクトです。最大 25 か所を指定できます。

options

ルート設定のオプションを指定する VERouteOptions クラス オブジェクト。

戻り値

options パラメータに渡された VERouteOptions オブジェクトの VERouteOptions.RouteCallback プロパティに指定されているコールバック関数は、順路案内などのルートの詳細情報が格納された VERoute クラス オブジェクトを受け取ります。

locations パラメータの長さが 25 を超えている場合、空の VERoute オブジェクトが返されます。空の VERoute オブジェクトには道順情報が格納されておらず、VERoute.Distance プロパティVERoute.Time プロパティは 0 です。

locations パラメータで指定された地点の中に見つからないものが 1 つでもあると、コールバック関数に null が返されます。

VERouteOptions.RouteMode プロパティVERouteMode.Walking に設定されている場合、出発地点と到着地点の間のルートの距離の合計が 16 キロメートルを超えていると、空の VERoute オブジェクトが返されます。このルートの合計距離には、徒歩で移動しない部分も含みます。たとえば、ルート上のフェリーで移動する部分も、ルートの合計距離に含まれます。

解説

ローカライズされた道順案内をルートに含めることができます。そのためには、mkt 属性をマップ コントロール参照に追加します (さらに VERouteOptions.UseMWS プロパティtrue に設定しなければならない場合もあります)。サポートされているカルチャなど、ローカライズされた結果を返す方法の詳細については、「ローカライズされた結果を返す方法」を参照してください。

この内容をマイル単位ではなくキロメートル単位にする必要がある場合は、VERouteOptions.DistanceUnit プロパティVERouteDistanceUnit.Kilometer に設定します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1"></script>

<script type="text/javascript">
var map = null;

// 初期マップ ビュー
var SeattleEastside = new VELatLong(47.65, -122.24, 0, VEAltitudeMode.Default);

function GetMap()
         {
map = new VEMap('myMap');
map.LoadMap(SeattleEastside, 8);
         }

function GetRouteMap()
         {
var locations;

if (legForm.legType[0].checked)
            {
          locations = new Array("Tacoma WA", "Seattle WA", "Everett WA");
            }
else if (legForm.legType[1].checked)
            {
locations = new Array("Tacoma WA", "Bellevue WA", "Everett WA");
            }

var options = new VERouteOptions;

// 次の行の設定を忘れずに行う必要があります。
options.DrawRoute      = true;

// マップを変更しないように設定します。
options.SetBestMapView = false;

// マップ上のルートが決定すると、次の行で指定する関数が呼び出されます。
options.RouteCallback  = ShowTurns;

// マイル単位で表示します。
options.DistanceUnit   = VERouteDistanceUnit.Mile;

// 地名の選択画面を表示します。
options.ShowDisambiguation = true;

map.GetDirections(locations, options);
         }

function ShowTurns(route)
         {
var turns = "<h3>進路変更ごとの案内</h3> (四捨五入による誤差の可能性があります)";

turns += "<p><b>距離:</b> " + route.Distance.toFixed(1) + " マイル";

turns += "<br/><b>時間:</b> " + GetTime(route.Time) + "</p>";

if (dirsForm.dirsType[0].checked)
            {
// ルートの詳細情報を取り出して、DIV タグ内に挿入します。
var legs          = route.RouteLegs;
var leg           = null;
var turnNum       = 0;  // 進路の番号

// 中間区間を取得します。
for(var i = 0; i < legs.length; i++)
               {
// 参照のたびに添え字を指定する手間を省くため、現在の区間を変数に格納します。
leg = legs[i];  // leg は VERouteLeg オブジェクトです。

var legNum = i + 1;
turns += "<br/><b>距離 (区間 " + legNum + "):</b> " + leg.Distance.toFixed(1) + " マイル" +
"<br/><b>時間 (区間 "     + legNum + "):</b> " + GetTime(leg.Time) + "<br/><br/>";

// 各中間区間の詳細情報を取り出します。
var turn        = null;  // 進路
var legDistance = null;  // 進路の距離
                  
for(var j = 0; j < leg.Itinerary.Items.length; j ++)
                  {
turnNum++;
                     
turn = leg.Itinerary.Items[j];  // turn は VERouteItineraryItem オブジェクトです。

turns += "<b>" + turnNum + "</b>\t" + turn.Text;

legDistance    = turn.Distance;

// 到着地の情報に "0.0" と表示されないようにします。
if(legDistance > 0)
                     {
// 距離を四捨五入して小数点以下 1 桁までにします。
turns += " (" + legDistance.toFixed(1) + " マイル";

// 時間情報がある場合は追加します。
if(turn.Time != null)
                        {
turns += "; " + GetTime(turn.Time);
                        }

turns += ")<br/>";
                     }
                  }

turns += "<br/>";
               }

// DIV タグ内に道順案内を挿入します。
SetDirections(turns);
            }
         }

function SetDirections(s)
         {
var d = document.getElementById("directions");
d.innerHTML = s;
         }

// time は秒単位の時間を表す整数値です。
// 適切な形式の文字列を返します。
function GetTime(time)
         {
if(time == null)
            {
return("");
            }

if(time > 60)
{                                 // time == 100 の場合
var seconds = time % 60;       // seconds == 40
var minutes = time - seconds;  // minutes == 60
minutes     = minutes / 60;    // ここで minutes == 1 になります。


if(minutes > 60)
{                                     // minutes == 100 の場合
var minLeft = minutes % 60;        // minLeft    == 40
var hours   = minutes - minLeft;   // hours      == 60
hours       = hours / 60;          // ここで hours == 1 になります。

return(hours + " 時間 " + minLeft + " 分 " + seconds + " 秒");
               }
else
               {
return(minutes + " 分 " + seconds + " 秒");
               }
            }
else
            {
return(time + " 秒");
            }
         }
        
function ClearAll()
         {
map.DeleteRoute();
SetDirections("");
map.LoadMap(SeattleEastside, 8);
         }
</script>
</head>
<body onload="GetMap();" style="font-family:MS PGothic">
<h3>Tacoma から Everett へのルートと道順案内の取得 (道順案内の取得は任意)</h3>

<div id='myMap' style="position:relative; width:400px; height:400px;"></div>

<form name="legForm">
ルート:
<br />
<input id="thruSeattle" type="radio" name="legType" checked="checked"/>
        Seattle 経由
<br />
<input id="thruBellevue" type="radio" name="legType"/>
        Bellevue 経由
</form>

<form name="dirsForm">
<input id="showdirs" type="radio" name="dirsType" checked="checked"/>
進路変更ごとの道順案内を下に表示する
<br />
<input id="showdirs" type="radio" name="dirsType"/>
進路変更ごとの道順案内を表示しない
</form>

<input id="getroutemap" type="button" value="ルート マップの取得" onclick="GetRouteMap();"/>
<input id="clear"       type="button" value="すべて消去"     onclick="ClearAll();"/>

<div id='directions'></div>
</body>
</html>

関連項目

概念

VERouteOptions クラス
VERoute クラス
ローカライズされた結果を返す方法