Добавление на карту объектов, попадающих в область видимости

Open in CodeSandbox

С помощью метода GeoQueryResult можно создавать объекты на карте из их JSON-описания.

В данном примере рассматривается, как добавлять на карту только объекты, попадающие в ее видимую область.

<!DOCTYPE html>

<html>
    <head>
        <title>
            Добавление на карту объектов, попадающих в область видимости
        </title>
        <meta
            http-equiv="Content-Type"
            content="text/html; charset=utf-8"
        />
        <!--
        Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
        Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
    -->
        <script
            src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>"
            type="text/javascript"
        ></script>
        <script
            src="show_visible_objects.js"
            type="text/javascript"
        ></script>
        <style>
            body,
            html {
                font-family: Arial;
                font-size: 11pt;
                padding: 0;
                margin: 0;
                width: 100%;
                height: 95%;
            }
            p {
                padding: 10px;
            }
            #map {
                width: 100%;
                height: 85%;
            }
        </style>
    </head>

    <body>
        <p>
            На карту добавляются только метки, попадающие в видимую область
        </p>
        <div id="map"></div>
    </body>
</html>
ymaps.ready(init);

function init() {
    var myMap = new ymaps.Map(
        "map",
        {
            center: [55.73, 37.75],
            zoom: 8,
        },
        {
            searchControlProvider: "yandex#search",
        }
    );

    // Создадим объекты на основе JSON-описания геометрий.
    var objects = ymaps.geoQuery([
        {
            type: "Point",
            coordinates: [55.73, 37.75],
        },
        {
            type: "Point",
            coordinates: [55.1, 37.45],
        },
        {
            type: "Point",
            coordinates: [55.25, 37.35],
        },
        {
            type: "Point",
            coordinates: [55.25, 67.35],
        },
    ]);

    // Найдем объекты, попадающие в видимую область карты.
    objects
        .searchInside(myMap)
        // И затем добавим найденные объекты на карту.
        .addToMap(myMap);

    myMap.events.add("boundschange", function () {
        // После каждого сдвига карты будем смотреть, какие объекты попадают в видимую область.
        var visibleObjects = objects.searchInside(myMap).addToMap(myMap);
        // Оставшиеся объекты будем удалять с карты.
        objects.remove(visibleObjects).removeFromMap(myMap);
    });
}