vue3-Открытые слои: Изменение цвета объектов в соответствии со свойствами на лету из шаблона

#vue.js #openlayers #vue3-openlayers

Вопрос:

У меня есть эти особенности

  <ol-vector-layer title="Features" :visible="vectorMenuDisplay" >
    <ol-source-vector ref="sourceVectorNew" :projection="projection" :features="existingFeatures">
      <ol-interaction-modify v-if="!mapLock amp;amp; modifyEnabled" :features="selectedFeatures" @modifyend="modifyend"></ol-interaction-modify>
      <ol-interaction-draw v-if="!mapLock amp;amp; drawEnable" :type="drawType" @drawend="drawend"></ol-interaction-draw>
    </ol-source-vector>
    <ol-style>
      <ol-style-stroke color="red" :width="5"></ol-style-stroke>
      <ol-style-fill color="rgba(255,255,255,0.1)"></ol-style-fill>
      <ol-style-circle :radius="7">
        <ol-style-fill color="green"></ol-style-fill> 
        // this color should be from extra data in properties of the feature
      </ol-style-circle>
    </ol-style>
  </ol-vector-layer>
 

Я хотел бы color="green" динамически изменять в зависимости от изменяющегося состояния связанную с ним информацию, которая является отдельной и хранится в функции properties values

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

 const overrideStyleFunction = (feature, style) => {
  const difficulty = feature.get('difficulty');
  const mode = feature.get('mode')
  let color = getPointColor(mode, difficulty)
  console.log(color) // getting 'red', 'blue', etc...
  style.getImage().getFill().setColor(color); // wrong color in style after first; they are all same color as first
}
 

Ответ №1:

вы можете добавить функцию переопределения функции в такой стиль

  <ol-style :overrideStyleFunction="overrideStyleFunction">
            <ol-style-stroke color="red" :width="2"></ol-style-stroke>
            <ol-style-fill color="rgba(255,255,255,0.1)"></ol-style-fill>

            <ol-style-circle :radius="20">
                <ol-style-stroke color="black" :width="15" :lineDash="[]" lineCap="butt"></ol-style-stroke>
                <ol-style-fill color="black"></ol-style-fill>
            </ol-style-circle>

            <ol-style-text>
                <ol-style-fill color="white"></ol-style-fill>
            </ol-style-text>
        </ol-style>
 

В сценарии :

    const overrideStyleFunction = (feature, style) => {

       let properties= feature.get('bla bla bla');  //from extra data in properties of the feature
       if(properties == "....") // change the style
           style.getImage().getFill().setColor("red");
    
    }
 

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

1. только что сделал это и похоже, что это работает неправильно; Я получаю только один цвет; все мои точки одного цвета :/ Не уверен, что происходит; Я миллион раз проверяю, что мой цвет соответствует правильному значению, прежде чем применять стиль, но я всегда получаю один цвет для всех функций

2. Я добавил свою функцию в quation; Я могу подтвердить, что это всегда первый цвет