Посчитать метки в нарисованном полигоне

Рейтинг: 0Ответов: 3Опубликовано: 07.04.2023

Я наношу на карту метки абонентов в кол-ве около 100 тыс. шт. Посредством файла json. Рисую через myMap.geoObjects.add(objectManager); У каждой метки есть атрибут (Стоимость услуги). Всё отрисовывается, красиво разукрашено, всё чётко. но появилась потребность такого рода: Хочу рисовать на карте произвольную область, и чтобы в каком-то окошке выводилась информация, сколько меток я зацепил этой областью и на какую стоимость. Через что это можно реализовать?

введите сюда описание изображения

Ответы

▲ 0Принят

Итак, у меня всё получилось. Делал так: рисовал полигон как обычный многоугольник через рисование (есть в примерах Яндекса).

var myPolygon = new ymaps.Polygon([], }, {});
myMap.geoObjects.add(myPolygon);
myPolygon.editor.startDrawing();            

добавил событие по щелчку показать кол-во и сумму точек абонентов и их список.

myPolygon.events.add('click', function () {})

но вывожу всё в примитивный alert().

upd.: сделал через баллун-панель. вроде нормально

▲ 0

Рисование произвольного полигона есть в примерах Яндекса. Попадание точек в окружность при помощи searchInside от geoQuery тоже есть в примерах. Вам нужно их объединить и добавить подсчёт содержимого полей стоимости в отобранной группе GeoQueryResult.

▲ 0

Пример с фильтрацией по нескольким полигонам.

MyMap.prototype.filterByPolygons = function (markers) {
    if (!this.polygons.length) {
        return markers;
    }
    for (var i = 0; i < markers.length; i++) {
        if (markers[i].found) {
            var found = false;
            for (var j = 0; j < this.polygons.length; j++) {
                var geometry = this.polygons[j].geometry;
                if (geometry.contains(markers[i].geometry.coordinates)) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                markers[i].found = false;
            }
        }
    }
    return markers;
};