Отображение множества маршрутов в картах Google из уже определенных маршрутов - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно отобразить маршруты, уже определенные в моей переменной testf, в Google Maps. Мне нужно проследить маршрут от точки Id 1 до точки Id 2, затем нарисовать другой маршрут от точки Id 3 до точки Id 4, то есть разные маршруты для каждой пары точек, как это сделать? Я не могу заставить карты Google понимать, как читать от начальной точки до конечной точки, передавая переменную, которая содержит все эти точки. Это только та часть javascript, которую я не могу заставить работать:

var testef = [{
"Id": 1,
"Latitude": 38.726177,
"Longitude": -9.180716
},
{
"Id": 2,
"Latitude": 38.716177,
"Longitude": -9.170716
},
{
"Id": 3,
"Latitude": 38.736177,
"Longitude": -9.160716
},
 {
"Id": 4,
"Latitude": 38.729177,
"Longitude": -9.110716
 }];

 //traçando a rota
for(var k=0; k < testef.length; k++){
    var objk=testef[k];

    var mypath = new google.maps.LatLng(objk.Latitude,objk.Longitude);

    var teste = new google.maps.Polyline({
        path: mypath,
        geodesic: true,
        strokeColor: '#ff0000',
        strokeOpacity: 1.0,
        strokeWeight: 3
    });
} 

  teste.setMap(map); 

Я надеялся нарисовать несколько уже определенных маршрутов

1 Ответ

0 голосов
/ 28 мая 2019

Я получаю ошибку javascript с опубликованным кодом: InvalidValueError: not an Array, потому что значение mypath не является массивом.

  • Создание точек из вашего массива парами, создание массива с каждым набором точек (путь для каждого сегмента точки):
for (var k = 0; k < testef.length-1; k+=2) {
    // start of segment
    var objk = testef[k];
    var pt = new google.maps.LatLng(objk.Latitude, objk.Longitude);
    // end of segment 
    var objkp1 = testef[k+1];
    var pt1 = new google.maps.LatLng(objkp1.Latitude, objkp1.Longitude);
    // create the path for this segment
    var mypath = [pt, pt1];
    // create the polyline for this segment
    var teste = new google.maps.Polyline({
      path: mypath,
      geodesic: true,
      strokeColor: '#ff0000',
      strokeOpacity: 1.0,
      strokeWeight: 3
    });
    // add this segment to the map
    teste.setMap(map);
}

подтверждение концепции скрипки

screenshot of resulting map

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 3,
    center: {
      lat: 0,
      lng: -180
    },
    mapTypeId: 'terrain'
  });

  //traçando a rota
  var bounds = new google.maps.LatLngBounds();
  for (var k = 0; k < testef.length - 1; k += 2) {
    var objk = testef[k];
    var pt = new google.maps.LatLng(objk.Latitude, objk.Longitude);
    bounds.extend(pt);
    var objkp1 = testef[k + 1];
    var pt1 = new google.maps.LatLng(objkp1.Latitude, objkp1.Longitude);
    bounds.extend(pt1);
    var mypath = [pt, pt1];
    var teste = new google.maps.Polyline({
      path: mypath,
      geodesic: true,
      strokeColor: '#ff0000',
      strokeOpacity: 1.0,
      strokeWeight: 3
    });
    teste.setMap(map);
  }
  map.fitBounds(bounds);
}
var testef = [{
    "Id": 1,
    "Latitude": 38.726177,
    "Longitude": -9.180716
  },
  {
    "Id": 2,
    "Latitude": 38.716177,
    "Longitude": -9.170716
  },
  {
    "Id": 3,
    "Latitude": 38.736177,
    "Longitude": -9.160716
  },
  {
    "Id": 4,
    "Latitude": 38.729177,
    "Longitude": -9.110716
  }
];
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...