Yandex Map: отображение меток в зависимости от масштаба карты
Работал давече с плагином HeatMap для яндекс карт. Всё хорошо, но один нюанс — невозможно навесить эвент на клик по точке карты. Ну или не нашел как. Пришлось задействовать «финт ушами» — при достижении определенного приближения, принудительно отрисовывать поверх точек heatmap свои «кликабельные» точки. В результете родилось нечто подобное:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | obj = data.result;                  heatmap = new ymaps.Heatmap(obj, {                     // Радиус влияния.                     radius: 15,                     // Нужно ли уменьшать пиксельный размер точек при уменьшении зума. False - не нужно.                     dissipating: false,                     // Прозрачность тепловой карты.                     opacity: 0.8,                     // Прозрачность у медианной по весу точки.                     intensityOfMidpoint: 0.05,                     // JSON описание градиента.                     gradient: {                            0.1: 'rgba(128, 255, 0, 0.7)',                            0.2: 'rgba(255, 255, 0, 0.8)',                            0.7: 'rgba(234, 72, 58, 0.9)',                            0.9: 'rgba(162, 36, 25, 1)',                            1.0: 'rgba(0, 0, 0, 1)'                        }                 });                 heatmap.options.events.add('click', function (e) {                        console.log(e);                     var objectId = e.get('objectId');                         //objectManager.objects.balloon.open(objectId);                 });                                     heatmap.setMap(myMap);                  myMap.events.add('boundschange', function () {                     size = myMap.getZoom();                     console.log(size);                     if (size>15){                         console.log("-- пора бы и нарисовать метки");                         if (all_deleted==true){                             console.log("--- рисуем метки");                             // настройки кластеризакции                             objectManager = new ymaps.ObjectManager({                                 clusterDisableClickZoom: true,                                 geoObjectOpenBalloonOnClick: true,                                 clusterize: false                             }); //кластеризуем                             objectManager=SetClusterProp(objectManager);                                  myMap.geoObjects.add(objectManager);                                objectManager.add(obj);                               objectManager.objects.events.add('click', function (e) {                                    console.log(e);                                 var objectId = e.get('objectId');                                     objectManager.objects.balloon.open(objectId);                             });                                                                   all_deleted=false;                           };                     } else {                         if (all_deleted==false){                             myMap.geoObjects.remove(myMap.geoObjects.get(myMap.geoObjects.getLength()-1));                                                       all_deleted=true;                           };                     };                 }); | 




