Отображать маленькие полигоны при мелком масштабе карты

Рейтинг: -1Ответов: 1Опубликовано: 18.03.2023

Есть мелкие полигоны (сторона - 100 метров и меньше). Их нужно показать на карте РФ. При таком масштабе они не видны. Возможно ли, например, вместо них при определенных масштабах показывать точки? А с увеличением мсштаба уже отображать сами полигоны? Или есть более корректые варианты их отображения?

Ответы

▲ 0Принят

Можно добавлять полигоны в одну коллекцию, а точки (получаемые, например, из центра занимаемого ими полигона ymaps.util.bounds.getCenter(el.geometry.getBounds()) – в другую. После отслеживать изменение границ boundschange (свойственное в т.ч. изменению масштаба) карты и добавлять к геообъектам карты в зависимости от масштаба ту или иную коллекцию, удаляя другую.

Пример может и грубый, но рабочий – https://jsbin.com/cecahib/edit?js,output

ymaps.ready(init);
function init() {
    var myMap = new ymaps.Map("map", {
        center: [55.73, 37.75],
        zoom: 6
    }, {
        searchControlProvider: 'yandex#search'
    }),
    polyCollection = new ymaps.GeoObjectCollection(null, {}),
    pointCollection = new ymaps.GeoObjectCollection(null, {});

    var myPolygon1 = new ymaps.Polygon([[[55, 37], [56, 37], [56, 39], [55, 39]]], {hintContent: "Многоугольник1"}, {fillColor: '#00FF00'});
    var myPolygon2 = new ymaps.Polygon([[[56, 35], [57, 35], [57, 37], [56, 37]]], {hintContent: "Многоугольник2"}, {fillColor: '#FFFF00'});

    polyCollection.add(myPolygon1).add(myPolygon2)
    myMap.geoObjects.add(polyCollection)

    myMap.events.add('boundschange', zoomCheck);

    polyCollection.each(function (el) {
        var center = ymaps.util.bounds.getCenter(el.geometry.getBounds())
            var hint = el.properties.get('hintContent')
            pointCollection.add(new ymaps.Placemark(center, {hintContent: hint}));
    })

    zoomCheck()

    function zoomCheck() {
        if (myMap.getZoom() >= 7) {
            myMap.geoObjects.remove(pointCollection)
            myMap.geoObjects.add(polyCollection)
        } else {
            myMap.geoObjects.remove(polyCollection)
            myMap.geoObjects.add(pointCollection)
        }
    }

}