カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

GoogleMapで距離計測(v3)

この記事は最終更新日から1年以上経過しています。

Google Maps Javascript APIを利用して2点間の距離と、移動にかかる所要時間を計測します。
計測にはgoogle.maps.DirectionsServiceクラスを使用します。
基本はGoogleMap ルート検索と同じです。

リクエスト用のプロパティクラスを作成します。

var request = {
    origin: null,      //出発地点のLatLngオブジェクト
    destination: null, //到着地点のLatLngオブジェクト

    //DRIVING=自動車,BICYCLING=自転車,TRANSIT=電車,WALKING=徒歩
    travelMode: google.maps.DirectionsTravelMode.DRIVING,

    avoidHighways: false,
    //trueの場合、ルートサービスで可能な場合は高速道路を避けるように指示します。省略可能

    avoidTolls: false,
    //true の場合、ルート サービスで可能な場合は有料道路を避けるように指示します。省略可能

    provideRouteAlternatives: false,
    //代替ルートを提供するかどうかを指定します。省略可能

    unitSystem: google.maps.UnitSystem.METRIC
    //距離を表示する際に使用される優先単位系。デフォルトは出発地点の国で使用される単位系。
    //IMPERIAL=距離をヤード法の単位で表す。METRIC=の距離をメートル法の単位で表す。
};

DirectionsServiceのインスタンスを生成

var directionsService = new google.maps.DirectionsService();

出発地点と到着地点を設定します。

request.origin      = new google.maps.LatLng(34.73307796637832, 135.49859046936035);  //新大阪駅
request.destination = new google.maps.LatLng(35.681003987351055, 139.76703643798828); //東京駅


返ってきたレスポンスを取得するためのDirectionsRendererクラスのインスタンスを生成

directionsDisplay = new google.maps.DirectionsRenderer();

ルート検索を実行し、距離を計測します。

directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);

        currentDirections = directionsDisplay.getDirections();

        var route = currentDirections.routes[0];

        for(var i = 0; i < route.legs.length; i++) {

            //リクエストで指定されたUnitSystemを使用した、距離値の文字列表現
            route.legs[i].distance.text;

            route.legs[i].distance.value; //メートル単位の距離

            route.legs[i].duration.text;  //所要時間の文字列
            route.legs[i].duration.value; //秒単位の所要時間

        }

    }
});

【複数の出発地と目的地の間の距離を計算する】

ただし、複数指定できる件数は出発地と目的地で各25件までです。
それを超過した場合はgoogle.maps.DistanceMatrixStatus.MAX_DIMENSIONS_EXCEEDEDが返されます。

DistanceMatrixServiceクラスのインスタンスを生成

var distanceMatrixService = new google.maps.DistanceMatrixService();

出発地と到着地を配列で作成

var org = new Array();
org.push(new google.maps.LatLng(34.73307796637832, 135.49859046936035));  //新大阪駅
org.push(new google.maps.LatLng(35.681003987351055, 139.76703643798828)); //東京駅
org.push(new google.maps.LatLng(33.5895625839363, 130.42046070098877));   //博多駅

var dst = new Array();
dst.push(new google.maps.LatLng(35.36056613998345, 138.72788429260254));  //富士山

リクエスト用のプロパティクラスを作成

var request = {
    avoidHighways: false,
    //true の場合、可能な限り高速道路を避ける(省略可)

    avoidTolls: false,
    //true の場合、可能な限り有料道路を避ける(省略可)

    destinations: dst,
    //Array.<LatLng>|Array.<string> 目的地の住所文字列の配列やLatLngオブジェクトの配列(必須)

    origins: org,
    //Array.<LatLng>|Array.<string> 出発地の住所文字列の配列やLatLngオブジェクトの配列(必須)

    travelMode: google.maps.DirectionsTravelMode.DRIVING,
    //DRIVING=自動車,BICYCLING=自転車,TRANSIT=電車,WALKING=徒歩

    unitSystem: google.maps.UnitSystem.METRIC
    //距離を表示する際に使用される優先単位系。デフォルトは出発地点の国で使用される単位系。
    //IMPERIAL=距離をヤード法の単位で表す。METRIC=の距離をメートル法の単位で表す。
};

実行します。

distanceMatrixService.getDistanceMatrix(reqest, function(response, status) {
    if(status == google.maps.DistanceMatrixStatus.OK) {
        var s = "";

        for(var i = 0; i < response.rows.length; i++) {

            s += response.originAddresses[i] + "~";  //出発地点の住所
            s += response.destinationAddresses + " "; //到着地点の住所

            s += response.rows[i].elements[0].distance.value + "m"; //メートル単位の距離

        }

        alert(s);
    }
});
この記事がお役に立ちましたらシェアお願いします
8,870 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です