Добрый день! Задача такая. На карте нарисовано несколько полигонов. Надо проложить маршрут от центра полигона до указанного адреса. Посчитать длину маршрута. Посчитать длину маршрута в каждом полигоне и вне полигона.
Все что перечислено выше сделал. Для этого создаю полигоны, проложу маршрут и разбиваю на отрезки. Далее используя geoQuery получаю все необходимые данные. Все прекрасно. Осталось последняя: мне нужно найти последний полигон через которого прошел маршрут. Как можно это сделать?
// второй способ поиска адреса и расчета зон
function findAddressTwo(address, zone) {
ymaps.geocode(address).then(function (r) {
var firstObject = r.geoObjects.get(0);
if (firstObject) {
//сообщаем
raiseEvent(firstObject.geometry.getCoordinates(), "coords");
// создаем метку
var placemark = new ymaps.Placemark(firstObject.geometry.getCoordinates());
routes.removeAll();
placemark.properties.set('hintContent', address);
routes.add(placemark);
// создаем выборку
var geoStorage = ymaps.geoQuery(myMap.geoObjects);
// получаем зону куда попала метка
var zones = geoStorage.searchContaining(placemark);
// расчет
geoStorage.search(`properties.zone = ${zone}`).each(function (polygon) {
// получаем точку в текущей зоне
geoStorage.searchInside(polygon).search('geometry.type = "Point"').each(function (point) {
if (!(point == placemark)) {
// построим маршрут
ymaps.route([
placemark.geometry.getCoordinates(),
point.geometry.getCoordinates()
]).then(function (route) {
var edges = getEdges(route);
var geoQuery = ymaps.geoQuery(edges).setOptions('strokeWidth', 3).addTo(routes);
// расчет полигонов
geoStorage.search('geometry.type = "Polygon"').each(function (polygon) {
var distance = route.getLength();
var distanceIn = getDistance(geoQuery.searchInside(polygon));
var distanceOut = getDistance(geoQuery.remove(geoQuery.searchInside(polygon)).remove(geoQuery.searchIntersect(polygon)));
var polygonZone = polygon.properties.get('zone');
var placemarkZone = zones.getLength() > 0 ? zones.get(0).properties.get('zone') : 9;
raiseEvent({
zoneName: polygon.properties.get('hintContent'),
distanceAll: distance,
distanceInZone: distanceIn,
distanceOutZone: distanceOut,
polygonZone: polygonZone,
placemarkZone: placemarkZone
}, 'zone');
});
});
}
});
});
}
});
}