@stcmd04236

Как найти последний полигон через которого прошел маршрут на Яндекс Карты API 2.1?

Добрый день! Задача такая. На карте нарисовано несколько полигонов. Надо проложить маршрут от центра полигона до указанного адреса. Посчитать длину маршрута. Посчитать длину маршрута в каждом полигоне и вне полигона.
Все что перечислено выше сделал. Для этого создаю полигоны, проложу маршрут и разбиваю на отрезки. Далее используя 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');
                            });
                        });
                    }
                });
            });
        }
    });
}
  • Вопрос задан
  • 286 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы