Можно добавлять полигоны в одну коллекцию, а точки (получаемые, например, из центра занимаемого ими полигона 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)
}
}
}