2013-08-17 3 views
0

Я создал код, чтобы нарисовать на карте направление рисования, но с полилинией, потому что с путевыми точками я могу просто увидеть восемь точек.Google maps direction

Во-первых у меня есть функция nArray() которая возвращает мне значение, как показано в этой консоли:

Array[5] 
    0: Object 
    1: Object 
     DISTANCE_FROM_PREVIOUS_OBJECT_LOCATION: 2.087970147789207 
     lat: "48.866588" 
     leftPosition: 183 
     lng: "2.309037999999987" 
     topPosition: 57 
      __proto__: Object 
    2: Object 
    3: Object 
    4: Object 
    length: 5 
    __proto__: Array[0] 

Теперь я хочу все объекты (широта, долгота), установленного в качестве отправной точки в:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="http://maps.google.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script> 
     <script> 
     var map = null; 
     var directionService = null; 
     var directionsRenderer = null; 

     var bigArray = nArray(); 

     function initialize() { 
      var mapOptions = { 
      center: new google.maps.LatLng(35.75936182169444, -90.35907120698232), 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      zoom: 4 
      }; 
      map = new google.maps.Map(document.getElementById("map"), mapOptions); 
      directionService = new google.maps.DirectionsService(); 
      directionsRenderer = new google.maps.DirectionsRenderer({ map: map });  
     } 

     function drawDirections(myPath) { 
      var myLine = new google.maps.Polyline({ 
       path: myPath, 
       strokeColor: '#ff0000', 
       strokeOpacity: 1.0, 
       strokeWeight: 2 
      }); 
      myLine.setMap(map); 
     } 

     function drawRoutes() { 
      var i; 
      var npts = bigArray.length - 1; 

      for (i = 0; i < npts; i++) { 
       var marker = new google.maps.Marker({ 
        map: map, 
        position: new google.maps.LatLng(bigArray[i].lat, bigArray[i].lng) 
       }); 
       var request = { 
        origin: new google.maps.LatLng(bigArray[i].lat, bigArray[i].lng), 
        destination: new google.maps.LatLng(bigArray[i + 1].lat, bigArray[i + 1].lng), 
        travelMode: google.maps.DirectionsTravelMode.DRIVING 
       } 

       directionService.route(request, function(result, status) { 
        //route = result.routes[0]; 
        if (status == google.maps.DirectionsStatus.OK) { 
         drawDirections(result.routes[0].overview_path); 
        } 
       }); 
      } 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: new google.maps.LatLng(bigArray[i].lat, bigArray[i].lng) 
      }); 
     } 
     </script> 
    </head> 
    <body onload="initialize();"> 
     <div id="map" style="width: 500px; height: 400px;"></div> 
     <input type="button" onclick="drawRoutes()" value="Draw Routes" /> 
    </body> 
</html> 

Как получить широту и долготу для каждого объекта от nArray?

ответ

0

В настоящее время вы уже получаете широту и долготу для каждого объекта в вашем цикле, но есть 2 проблемы:

  1. , чтобы получить тот же результат, что и при использовании DirectionsRenderer с путевыми точками, вы должны использовать результат (например, result.routes[0].legs[0].start_location), чтобы установить положение маркеров, в противном случае маркеры не будут размещены на маршруте

  2. вы должны забыть этот подход, чтобы превысить лимит путевых точек, существует ограничение в 10 запросов в секунду, вы скоро получит ответ «OVER_QUERY_LIMIT»

+0

так, что вы предлагаете? использовать путевые точки? –

+0

Это было бы лучше. Но когда вам нужно больше 8 путевых точек, это не сработает (без бизнес-лицензии), возможные варианты: установите задержку между запросами (чтобы вы не достигли предела в секунду), когда массив содержит более 10 (в противном случае вам не потребуется обходной путь, путевые точки будут работать), разделить массив по частям с 10 точками и запросить указания для этих точек ... с помощью путевых точек (если у вас есть, например, 15 мест, это займет 2 запроса вместо 14 с вашей текущей стратегией) –

+0

хорошо, но есть ли какой-то пример, вы можете показать мне jsfiddle? –