У меня есть приложение, которое получает ограниченные данные о маршрутной точке, и хотя Google Maps Road Snapping делает замечательную работу по угадыванию правильных дорог на основе этих данных , Я все еще испытываю уровень неточности, который не будет работать для нашего приложения.API для Google Maps API v3 - Как повысить точность с ограниченными данными о путевых точках
В этом примере фиолетовые маркеры представляют в реальном мире «источник» путевые точки, которые посылаются в, в то время как синие маркеры показывают отрезали вэйпоинты данных, поступающие назад от Google на основе данных от источника путевые точки. Я использую привязанные синие путевые точки для генерации полилинии, чтобы показать маршрут (фиолетовая полилиния), к сожалению, привязанные путевые точки и последующий маршрут действительно должны больше напоминать красную полилинию.
Я проверил это вручную в онлайн-демонстрации API с аналогичными «исходными» путевыми точками, и маршрут все еще привязан к некорректному, поэтому я могу только предположить, что данных для Google недостаточно, чтобы точно установить , Вопрос в том, есть ли способ улучшить шансы правильной привязки, учитывая ограниченные данные, подобные этому? Есть ли способ, которым я мог бы интерполировать путевые точки с ограниченным исходным кодом, чтобы попытаться «направлять» Google, чтобы обеспечить более точную привязку?
Вот код похож на то, что я использую - JSFiddle is here
//setup vars
var trip = [{
"lat": -27.068,
"lng": 153.1483
}, {
"lat": -27.0642,
"lng": 153.1546
}, {
"lat": -27.0552,
"lng": 153.156
}, {
"lat": -27.0518,
"lng": 153.1563
}, {
"lat": -27.0503,
"lng": 153.1552
}, {
"lat": -27.0457,
"lng": 153.1456
}, {
"lat": -27.042,
"lng": 153.1463
}, {
"lat": -27.0349,
"lng": 153.1476
}];
var unsnappedWaypoints = [];
var snappedWaypoints = [];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: {
lat: 0,
lng: 0
}
});
var bounds = new google.maps.LatLngBounds();
//add each waypoint to an array of lat/lngs
$.each(trip, function(key, waypoint) {
unsnappedWaypoints.push(waypoint.lat + ',' + waypoint.lng);
var marker = new google.maps.Marker({
map: map,
icon: 'http://mt.google.com/vt/icon/name=icons/spotlight/spotlight-ad.png',
position: {
lat: waypoint.lat,
lng: waypoint.lng
}
});
});
//perform Google Maps API call with joined array for snapped results
$.ajax({
url: 'https://roads.googleapis.com/v1/snapToRoads?path=' + unsnappedWaypoints.join('|') + '&key=AIzaSyA1JWR3ohBFQ_P7F5eSMSJb0dwV9PbB3pA&interpolate=true',
crossDomain: true,
dataType: 'jsonp'
}).done(function(response) {
//iterate through returned waypoints to create array of lat/lngs for polyline
$.each(response, function(key, snappedPoints) {
$.each(snappedPoints, function(key, snappedPoint) {
snappedWaypoints.push({
lat: snappedPoint.location.latitude,
lng: snappedPoint.location.longitude
});
//add snapped waypoints to map to show difference between originals and returned
var marker = new google.maps.Marker({
map: map,
icon: 'http://mt.google.com/vt/icon?color=ff004C13&name=icons/spotlight/spotlight-waypoint-blue.png',
position: {
lat: snappedPoint.location.latitude,
lng: snappedPoint.location.longitude
}
});
//increase the bounds to take into account waypoints
bounds.extend(new google.maps.LatLng(snappedPoint.location.latitude, snappedPoint.location.longitude));
});
});
//create polyline from snapped waypoints
var tripRoute = new google.maps.Polyline({
path: snappedWaypoints,
gseodesic: true,
strokeColor: '#663496',
strokeOpacity: 1.0,
strokeWeight: 2
});
tripRoute.setMap(map);
//fit these bounds to the map
map.fitBounds(bounds);
});
Я думал об использовании API Directions в качестве альтернативы, но некоторые поездки будут иметь более 100 путевых точек, которые делают его довольно что невозможно, учитывая нынешний предел путевой точки. –
Кажется, что API Roads работает неправильно в этой области. [Перекрестная проверка результата на DirectionsService показывает, что данные существуют в базе данных.] (Https://jsfiddle.net/geocodezip/w7Lnbbun/3/) – geocodezip
Спасибо за проверку того, что @geocodezip - если это _is_ проблема API, стоит ли создавать проблему на странице поддержки API? Посмотрите, насколько хорошо работает ваша маршрутизация. Я использую службу направления, но я не знаю, насколько практично это возможно сделать 13 или 14 вызовов API для одной поездки с 100 путевыми точками. –