Клуб API Карт

geoQuery

Пост в архиве.

 

ymaps.ready(init);
function init() {
    var myMap = new ymaps.Map("map", {
        center: [55.73, 37.75],
        zoom: 8
    });
    // Создадим объекты на основе JSON-описания геометрий.
    var objects = ymaps.geoQuery([{
        type: 'Point',
        coordinates: [55.73, 37.75]
    }, {
        type: 'Point',
        coordinates: [55.10, 37.45]
    }, {
        type: 'Point',
        coordinates: [55.25, 37.35]
    }, {
        type: 'Polygon',
        coordinates: [
            [
                [55.75, 37.80],
                [55.80, 37.90],
                [55.75, 38.00],
                [55.70, 38.00],
                [55.70, 37.80]
            ]
        ]
    }]);
    // Найдем объекты, попадающие в видимую область карты.
    objects.searchInside(myMap)
    // И затем добавим найденные объекты на карту.
    .addToMap(myMap);
    myMap.events.add('boundschange', function () {
        // После каждого сдвига карты будем смотреть, какие объекты попадают в видимую область.
        var visibleObjects = objects.searchInside(myMap).addToMap(myMap);
        // Оставшиеся объекты будем удалять с карты.
        objects.remove(visibleObjects).removeFromMap(myMap);
    });
}

 

Почему не работает? Что я делаю не так?

2 комментария

У сложных геообъектов есть особенность - для них нельзя посчитать пересечения или вхождения с другими объектами, пока они не добавлены на карту. Пример из песочницы работает только для точечных объектов. Для остальных объектов придется сделать немного по-другому.

 

//... тут инициализация объектов

// делаем объекты невидимыми и добавляем на карту

objects.setOptions('visible', false).addToMap(myMap);

objects.searchInside(myMap).setOptions('visible', true);

 

ну и дальше по аналогии не удаляем-добавляем объекты с карты, а меняем их видимость

 

Мы поправим пример в песочнице или напишем там комментарий по этому поводу

Комментарий удалён

Используйте метод searchIntersect(), у него как раз такая логика