Openlayer 5 — Цвет в стиле запроса дает неверный результат

#javascript #openlayers #openstreetmap #geojson #openlayers-5

#javascript #openlayers #openstreetmap #geojson #openlayers-5

Вопрос:

у меня есть OSM с векторным слоем (три круга с местоположениями, загруженными из файла GEOJSON). Нажатие на объект (круг) вызывает изменение цвета круга. Эта работа прекрасна:

 map.on('click', function (e) {
  var pixel = map.getEventPixel(e.originalEvent);
  map.forEachFeatureAtPixel(pixel, function (feature) {
    style1 = new ol.style.Style({image: new ol.style.Circle( ({ radius: 10, fill: new ol.style.Fill({ color: '#3ED120' }) }))
        });

       if (feature) {
          console.info(style.getImage().getFill().getColor());          
          feature.setStyle(style1);
        } 
     });
   });
  

Итак, я проверил цвет круга перед изменением. Результат правильный (он красного цвета: #ff0000). При повторном нажатии на круг я ожидаю, что результирующий цвет будет «#3ED120», но console.info показать, что это все еще «#ff0000», хотя круг на карте меняет свой цвет при первом нажатии с красного на зеленый (#3ED120).

Что не так? Должен ли я выполнять обновление слоя?

Информация: Я хочу прочитать цвет круга для запроса, если круг уже был нажат (это когда круг уже зеленый).

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

1. где вы определили «стиль» в своем console.info ? Вероятно, вам следует вместо этого выполнить feature.getStyle(), чтобы получить текущий стиль вашей функции

2. feature.getStyle() я уже протестировал. работает корректно, когда я помещаю это после setStyle(). В противном случае выдается ошибка: «Неперехваченная ошибка типа: не удается прочитать свойство ‘getImage’, равное нулю». Мне нужно прочитать цвет перед установкой setStyle ().

3. Где вы определили исходный ‘style’ (= red)? если вы сделали это на слое, сами объекты не имеют стиля (следовательно, имеют значение null), пока вы не установите стиль объекта в своей функции click. Если задан стиль объекта, openlayers использует его вместо стиля слоя. Если это так, попробуйте оформить все объекты «красным» вместо слоя.

4. Да, Роб, я определяю стиль для векторного слоя: var vectorLayer = new ol. слой. Вектор ({style: функция (feature) { style.getText().setText(feature.get(‘name’) » feature.get(‘days’)); возвращает стиль; }}); — я добавил туда «feature.setStyle(style);» и теперь это работает как аспектировано. Но текст все тот же. Я думаю, что что-то было перезаписано с помощью setStyle.

5. вам следует либо использовать stylefunction, возвращающую стиль, либо задать стиль функции, но прямо сейчас вы делаете и то, и другое, что может привести к перезаписи некоторых вещей