У меня есть приложение, которое отслеживает транспортные средства и рисует полилинию их дорожки на карте. Я хочу преобразовать эту полилинию в маршрут, используя маршрутизацию маршрутов. Это позволит мне перемещать путь и манипулировать им и т.д.
Проблема в том, что я не могу придумать хорошее решение этого, и я не уверен, что это возможно. Если я перехожу в массив координат полилинии к маршруту обслуживания маршрутов, он только рисует маршрут, используя начало и конец полилинии, он не принимает во внимание ни одну из координат между ними.
Я попытался создать массив "waypoints", используя массив координат полилинии, разделив его и получив 8 координат между ними и передав их в качестве путевых точек, но теперь он вообще не отображается. Если я тестирую код, используя массив координат, который был сгенерирован путем рисования маршрута, он работает, поэтому я знаю, что код работает. Я предполагаю, что это терпит неудачу, потому что некоторые из этих координат могут быть немного от дороги (это полилиния, взятая из GPS-позиционирования, поэтому она не на 100% точна), и Google не просто привязывает ее к ближайшему принятому местоположению.
Может ли кто-нибудь подумать об этом?
Вот примеры кода, чтобы сделать его более понятным:
// In the polyline app
var encoded_path = google.maps.geometry.encoding.encodePath(coordinate_array)
// In the route app
var coordinates = google.maps.geometry.encoding.decodePath(encoded_path);
var waypoints = [];
// Evenly get coordinates across the entire array to be used as waypoints
for (var i = 1; i <= 8; ++i) {
var index = Math.floor((coordinates.length/10) * i);
if (index >= coordinates.length - 1)
break;
waypoints.push({
'location': new google.maps.LatLng(coordinates[index].lat(), coordinates[index].lng()),
'stopover': false
});
}
var request = {
origin: coordinates[0],
destination: coordinates[coordinates.length - 1],
travelMode: google.maps.DirectionsTravelMode.DRIVING,
waypoints: waypoints
};
MapService.directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
MapService.directionsDisplay.setDirections(response);
}
});