OpenLayers — масштабирование по маркеру при определенном уровне масштабирования

#javascript #onclick #zooming #openlayers #marker

#javascript #onclick #масштабирование #openlayers #маркер

Вопрос:

Я хочу создать событие по щелчку на маркере, которое масштабируется на определенном уровне при нажатии. текущий код загружает маркер и при щелчке увеличивает масштаб до максимального уровня масштабирования маркера. Я хочу добавить определенный уровень масштабирования в коде, поэтому, когда на маркере происходит событие щелчка, он должен установить вид на этом уровне масштабирования.у меня есть растровые плитки на карте с уровнем масштабирования 16 и выше, поэтому, когда я нажимаю на маркер, он должен увеличивать растровые плитки и скрывать маркер оттуда.

     var marker = new ol.layer.Vector({
      source: new ol.source.Vector({
          format: new ol.format.GeoJSON(),
          url: "data.js"  
      }),
      style: new ol.style.Style({
        image: new ol.style.Icon({
                anchor: [0.5, 0.5],
                anchorXUnits: 'fraction',
                anchorYUnits: 'pixels',
                scale:0.03,
                src: "img.png"
              })
          })  
    });
    map.addLayer(marker);
    map.on("singleclick", (event) => {        
        const feature = map.forEachFeatureAtPixel(event.pixel, (feature) => {
          return feature;
        });
        if (feature instanceof ol.Feature) {
              map.getView().fit(feature.getGeometry());       
         }
      });

  

Ответ №1:

Вместо использования подгонки установите центр вида и масштаб

 map.getView().setCenter(ol.extent.getCenter(feature.getGeometry().getExtent()));
map.getView().setZoom(16);
  

Вы можете «скрыть» объект, присвоив ему нулевой стиль

 feature.setStyle(null);
  

Комментарии:

1. Спасибо за помощь. он отлично работает для масштабирования местоположения, но функция все еще видна после присвоения нулевого значения. есть ли какое-либо конкретное местоположение, которое мне нужно назначить для его работы?

2. ОК, значение null не переопределяет стиль слоя, поэтому используйте пустой массив стилей feature.setStyle([]);