4

Мне было поручено использовать API Карт Google для создания инструмента, который ресторан может использовать для определения зон доставки. Вот прогресс: http://codepen.io/keithpickering/pen/NqdzKOAPI Карт Google Maps: сделать «привязку к дороге» более прощающей

Пользователи должны иметь возможность нарисовать многоугольник, после чего он будет быстро приближаться к близлежащим дорогам. Это работает относительно хорошо, за исключением того факта, что встроенная функция Google для работы с дорогой ... ну, вроде отстой. Если ваши очки не будут достаточно близко друг к другу, они либо откажутся от привязки к чему-либо, либо просто сделают какую-то странную чертову линию.

Что мне нужно для того, чтобы инструмент был более «прощающим» с его привязкой к дороге; другими словами, кто-то должен лениво рисовать практически любой вид многоугольника с любого расстояния масштабирования, а линии должны быть FORCED, чтобы привязываться к одной дороге или другой.

Вот часть кода я использую оснастки:

... 

// Snap polygon to roads 
    placeIdArray = []; 
    runSnapToRoad(poly, path, color); 
}); 

// Snap a user-created polyline to roads and draw the snapped path 
function runSnapToRoad(poly, path, color) { 
    var pathValues = []; 
    for (var i = 0; i < path.getLength(); i++) { 
    pathValues.push(path.getAt(i).toUrlValue()); 
    } 

    $.get('https://roads.googleapis.com/v1/snapToRoads', { 
    interpolate: true, 
    key: apiKey, 
    path: pathValues.join('|') 
    }, function(data) { 
    processSnapToRoadResponse(data); 
    drawSnappedPolyline(poly, path, color); 
    }); 
} 

// Store snapped polyline returned by the snap-to-road method. 
function processSnapToRoadResponse(data) { 
    snappedCoordinates = []; 
    placeIdArray = []; 
    for (var i = 0; i < data.snappedPoints.length; i++) { 
    var latlng = new google.maps.LatLng(
     data.snappedPoints[i].location.latitude, 
     data.snappedPoints[i].location.longitude); 
    snappedCoordinates.push(latlng); 
    placeIdArray.push(data.snappedPoints[i].placeId); 
    } 
} 

Будет ли это необходимо, чтобы отказаться от API на дорогах и идти на более индивидуальное решение, используя сервис направления? У кого-нибудь есть идеи? Спасибо за любую помощь.

+0

Если вы рассматриваете альтернативы, ответ [здесь] (http://stackoverflow.com/questions/10513360/polyline-snap-to-road-using-google-maps-api-v3) может помочь. Он использует направления вместо Roads api. – Andy

+0

@ Andy Это то, что я хотел бы сделать, но так как этот пример не использует Drawing Tools, он не работает из коробки. Как я могу получить значения «origin» и «destination» в событии «polygoncomplete»? –

ответ

0

К сожалению, это невозможно сделать с использованием текущего API. API предназначен для исправления путей, которые фактически пересекают дороги, и учитывает такие факторы, как разрешенные направления движения (т. Е. Дороги с односторонним движением), действительные повороты и порядок предоставленных точек.

Отказоустойчивый чертеж пути рядом с некоторыми дорогами может быть не допустимым маршрутом (особенно с удаленного уровня масштабирования), поэтому API не находит путь с высокой вероятностью быть реальным.

Если хотите, вы можете запросить эту функцию на issue tracker.