Клуб API Карт

Как сделать выборку меток из выделенной области

mr.shanik
10 августа, 09:29

Есть карта, там выводятся метки по следующему коду:

var myGeoObjects = [];
        $.get('url', function (data) {
            for (var i = 0; i < data.length; i++) {
                //if (data[i].id == id_view) continue;
                var id = data[i].id;
                var geo = data[i].geo.split(',');
                var name = data[i].name;
                var description = data[i].description;
                myGeoObjects[i] = new ymaps.GeoObject({
                    // Тип геометрии - точка.
                    // Описание геометрии.
                    geometry: {
                        type: 'Point',
                        // Координаты точки.
                        coordinates: [geo[0], geo[1]]
                    },
                    properties: {
                        clusterCaption: 'Геообъект №' + id,
                        balloonContent: '<strong>' + name + '</strong><br/>' + description,
                        hintContent: name
                    }
                })

            }
            filtrMap.geoObjects.events.add('mouseenter', function (e) {
                e.get('target').options.set('preset', 'islands#pinkIcon');
            }).add('mouseleave', function (e) {
                e.get('target').options.unset('preset');
            });
            var myClusterer = new ymaps.Clusterer({clusterDisableClickZoom: true});
            myClusterer.add(myGeoObjects);
            filtrMap.geoObjects.add(myClusterer);




Необходимо получить координаты меток, либо id,  которые находятся внутри выделенной области и которая рисуется многоугольником:
 

     var myPolygon = new ymaps.Polygon([], {}, {
                // Курсор в режиме добавления новых вершин.
                editorDrawingCursor: "crosshair",
                // Максимально допустимое количество вершин.
                //editorMaxPoints: 5,
                // Цвет заливки.
                fillColor: '#00FF00',
                // Цвет обводки.
                strokeColor: '#0000FF',
                // Ширина обводки.
                strokeWidth: 2
            });
            
            // Добавляем многоугольник на карту.
            filtrMap.geoObjects.add(myPolygon);

            // В режиме добавления новых вершин меняем цвет обводки многоугольника.
            var stateMonitor = new ymaps.Monitor(myPolygon.editor.state);
            stateMonitor.add("drawing", function (newValue) {
                myPolygon.options.set("strokeColor", newValue ? '#FF0000' : '#0000FF');
            });

            // Включаем режим редактирования с возможностью добавления новых вершин.
            myPolygon.editor.startDrawing();



Есть пример с окружностью но не понятно, как его применить для многоугольника и как получить координаты:
 

ymaps.ready(init);

function init() {
    var myMap = new ymaps.Map("map", {
            center: [55.43, 37.75],
            zoom: 8
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objects = ymaps.geoQuery([
            {
                type: 'Point',
                coordinates: [55.73, 37.75]
            },
            {
                type: 'Point',
                coordinates: [55.10, 37.45]
            },
            {
                type: 'Point',
                coordinates: [55.25, 37.35]
            }
        ]).addToMap(myMap),
        circle = new ymaps.Circle([[55.43, 37.7], 10000], null, { draggable: true });
        
    circle.events.add('drag', function () {
        // Объекты, попадающие в круг, будут становиться красными.
        var objectsInsideCircle = objects.searchInside(circle);
        objectsInsideCircle.setOptions('preset', 'islands#redIcon');
        // Оставшиеся объекты - синими.
        objects.remove(objectsInsideCircle).setOptions('preset', 'islands#blueIcon');
    });
    myMap.geoObjects.add(circle);
}

3 комментария
Подписаться на комментарии к посту
ymaps.geoQuery(myGeoObjects).searchInside(myPolygon).each(function(geoObject) {
console.log(geoObject.geometry.getCoordinates());
});
Обновлено 10 августа, 09:54
dimik,
спасибо.
Получилось так:




var myPolygon = new ymaps.Polygon([], {}, {
// Курсор в режиме добавления новых вершин.
editorDrawingCursor: "crosshair",
// Максимально допустимое количество вершин.
//editorMaxPoints: 5,
// Цвет заливки.
fillColor: '#00FF00',
// Цвет обводки.
strokeColor: '#0000FF',
// Ширина обводки.
strokeWidth: 2
});
// Добавляем многоугольник на карту.
filtrMap.geoObjects.add(myPolygon);
// В режиме добавления новых вершин меняем цвет обводки многоугольника.
var stateMonitor = new ymaps.Monitor(myPolygon.editor.state);
stateMonitor.add("drawing", function (newValue) {
myPolygon.options.set("strokeColor", newValue ? '#FF0000' : '#0000FF');
});
// Включаем режим редактирования с возможностью добавления новых вершин.
myPolygon.editor.startDrawing();
objects = ymaps.geoQuery(myGeoObjects);
myPolygon.editor.events.add(["vertexadd", "vertexdragend"], function () {
geoId = [];
var objectsInside = objects.searchInside(myPolygon);
objectsInside.setOptions('preset', 'islands#redIcon');
objects.remove(objectsInside).setOptions('preset', 'islands#blueIcon');
objectsInside.each(function (geoObject, i) {


geoId[i] = geoObject.properties._data['id'];
});
});
mr.shanik,
только не надо использовать педальные поля, они не будут работать с продакшн-сборкой АПИ


geoId[i] = geoObject.properties._data['id'];


используйте задокументированные интерфейсы
geoId[i] = geoObject.properties.get('id');
Обновлено 15 августа, 12:48