Клуб API Карт

Посчитать длину маршрута внутри полигона

papuska
20 октября, 22:51

Добрый день, мне нужно посчитать длину маршрута который проходит внутри мкад. Исходя из примеров  в песочнице и т.д. мне пришла в голову мысль разбить маршрут на сегменты, затем добавить их в GeoQuery и проверить на вхождение в полигон и затем посчитать длины отрезков через properties.get('distance').value.
Но, например,  есть проблема, например, от Балашихи до мкада идет сегмент с "Шоссе энтузиастов" и соответственно он очень длинный, и длинная его часть немного внутри мкада, а остальная часть за пределами мкада и длина этого отрезка 15 километров, соответственно этот отрезок через searchInside не входит в выборку и мы теряем достаточно большое количество километров. Также если включить и пересекающие сегменты, тогда мы получим слишком много лишних километров. Что делать?

6 комментариев
Вам нужно использовать координаты сегментов собрав из них массив линий из 2х точек, как примере. Для крайних линий, которые попадают в полигон частично нужно вычислить крайние точки, например через обратную геодезическую задачу.


https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ICoordSystem-docpage/#solveInverseProblem





Склеить все линии в одну и узнать длину ее геометрии


https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geometry.LineString-docpage/#getDistance
var pathsObjects = ymaps.geoQuery(multiRoute.getActiveRoute().getPaths());
console.log(pathsObject);
возвращает пустой

GeoQueryResult {_parent: null, _objects: Array(0), _map: null, _cachedBounds: null, _lastPromise: Promise, …}
papuska,
Соберите пример на jsfiddle
dimik,


https://jsfiddle.net/e9qt90Lq/11/
papuska,
Используйте сегменты
https://jsfiddle.net/e9qt90Lq/26/
dimik,
спасибо, разобрался. У меня еще вопрос такой, возможно ли полигон, например, тот же молигон МКАДа увеличить равномерно на определенный радиус, т.е сделать шире? Есть ли какая-нибудь функция?