web-dev-qa-db-ja.com

Google Maps API V3:ポイントAからポイントB(青い線)への方向をどのように表示しますか?

データベースに2つのポイントの緯度と経度があり、GoogleマップにポイントAからポイントBへのルートを表示したい...

here (Google Maps Directions)のように

Image from the link

地図にその方向線を描く方法は?

71
Yugal Jindle

Google Maps API v3の ルートサービス を使用します。これは基本的にルートAPIと同じですが、Google Maps APIにうまくまとめられており、地図上にルートを簡単にレンダリングする便利な方法も提供します。

地図上のルート案内のレンダリングに関する情報と例については、Google Maps API v3ドキュメントの レンダリングルートのセクション をご覧ください。

54
Tomik

JavaScriptを使用する

JavaScriptでGoogle Maps API Directions Serviceを使用する方法を示す実用的なデモを作成しました。

  • DirectionsServiceオブジェクトは、方向要求を送受信します
  • DirectionsRendererオブジェクトは、返されたルートを地図に表示します
function initMap() {
  var pointA = new google.maps.LatLng(51.7519, -1.2578),
    pointB = new google.maps.LatLng(50.8429, -0.1313),
    myOptions = {
      zoom: 7,
      center: pointA
    },
    map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
    // Instantiate a directions service.
    directionsService = new google.maps.DirectionsService,
    directionsDisplay = new google.maps.DirectionsRenderer({
      map: map
    }),
    markerA = new google.maps.Marker({
      position: pointA,
      title: "point A",
      label: "A",
      map: map
    }),
    markerB = new google.maps.Marker({
      position: pointB,
      title: "point B",
      label: "B",
      map: map
    });

  // get route from A to B
  calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB);

}



function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB) {
  directionsService.route({
    Origin: pointA,
    destination: pointB,
    travelMode: google.maps.TravelMode.DRIVING
  }, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
    } else {
      window.alert('Directions request failed due to ' + status);
    }
  });
}

initMap();
    html,
    body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    #map-canvas {
      height: 100%;
      width: 100%;
    }
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>

<div id="map-canvas"></div>

Jsfiddleでも: http://jsfiddle.net/user2314737/u9no8te4/

Google Maps Webサービスの使用

次のようなリクエストを発行するAPI_KEYを使用して、Webサービスを使用できます。

https://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&key=API_KEY

Google Developer ConsoleでAPI_KEYを取得できます。割り当ては1日あたり2,500件の無料リクエストです。

リクエストは、マップ上にパスを描くために使用できるJSONまたはXMLの結果を返すことができます。

Google Maps Directions APIを使用したWebサービスの公式ドキュメントは here です

40
user2314737

あなたの場合、これは directions service を使用した実装です。

function displayRoute() {

    var start = new google.maps.LatLng(28.694004, 77.110291);
    var end = new google.maps.LatLng(28.72082, 77.107241);

    var directionsDisplay = new google.maps.DirectionsRenderer();// also, constructor can get "DirectionsRendererOptions" object
    directionsDisplay.setMap(map); // map should be already initialized.

    var request = {
        Origin : start,
        destination : end,
        travelMode : google.maps.TravelMode.DRIVING
    };
    var directionsService = new google.maps.DirectionsService(); 
    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
        }
    });
}
17
  // First Initiate your map. Tie it to some ID in the HTML eg. 'MyMapID'
  var map = new google.maps.Map(
    document.getElementById('MyMapID'),
    {
      center: {
        lat: Some.latitude,
        lng: Some.longitude
      }
    }
  );
  // Create a new directionsService object.
  var directionsService = new google.maps.DirectionsService;
    directionsService.route({
      Origin: Origin.latitude +','+ Origin.longitude,
      destination: destination.latitude +','+ destination.longitude,
      travelMode: 'DRIVING',
    }, function(response, status) {
      if (status === google.maps.DirectionsStatus.OK) {
        var directionsDisplay = new google.maps.DirectionsRenderer({
          suppressMarkers: true,
          map: map,
          directions: response,
          draggable: false,
          suppressPolylines: true, 
          // IF YOU SET `suppressPolylines` TO FALSE, THE LINE WILL BE
          // AUTOMATICALLY DRAWN FOR YOU.
        });

        // IF YOU WISH TO APPLY USER ACTIONS TO YOUR LINE YOU NEED TO CREATE A 
        // `polyLine` OBJECT BY LOOPING THROUGH THE RESPONSE ROUTES AND CREATING A 
        // LIST
        pathPoints = response.routes[0].overview_path.map(function (location) {
          return {lat: location.lat(), lng: location.lng()};
        });

        var assumedPath = new google.maps.Polyline({
         path: pathPoints, //APPLY LIST TO PATH
         geodesic: true,
         strokeColor: '#708090',
         strokeOpacity: 0.7,
         strokeWeight: 2.5
       });

       assumedPath.setMap(map); // Set the path object to the map
5
Thomas Valadez

directions API を使用します。

Ajax呼び出し、つまり.

https://maps.googleapis.com/maps/api/directions/json?parameters

そして、応答を解析します