Как перерисовать (изменить цвет фона) метку kml, нажав на нее? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть страница, которая отображает квадратные сетки из KML.

введите описание изображения здесь

https://saxrub.net/GeoPortail/500x500m.kml

Пользователь может выбрать/ отмените выбор сетки, выделение осуществляется по цвету сетки.Если он щелкает по красной сетке, она становится зеленой, и наоборот.

KML добавляется с помощью

var KML3 = new ol.layer.Vector ({ 
  source: new ol.source.Vector ({ 
      url: kml_1x1km, 
         format: new ol.format.KML ({ 
             extractStyles: true, 
             showPointNames: showPointNames 
        }) 
    }) 
 }); 
 allLayers.push (KML3); 
 allLayerSwitcher.push ({ 
    layer: KML3, 
    config: { 
       title: kml_1x1km_title, 
       description: kml_1x1km_title, 
    } 
 })

Клик по меткам фиксируется:

 var displayFeatureInfo = function (pixel) { 
     var currentZoom = map.getView (). getZoom (); 
     var feature = map.forEachFeatureAtPixel (pixel, function (feature, layer) { 
        return feature;
   }); 

 if (feature) { 
    var f = feature; 
    var att = feature.getProperties (); 
    styleUrl = att.styleUrl.split ("#"); 
    mesh=att.description.split = ( "~"); 
    if (styleUrl [1] == "Red_red") 
        { 
             att.styleUrl = "# Jaune_Vert"; 
             feature.style = eval (mesh [3]). getStyle ("#Yellow_Green",   {}) 
         } 
    else 
         { 
               att.styleUrl = "# Rouge_Rouge"; 
               feature.style = eval (mesh [3]). getStyleFunction ("# Red_Red", {}) 
      `   } 
 eval (mesh [3]) redraw (). 
 this.unselect (feature); 
 return 1; 
 } else { 
 return 0; 
 } 
}; 

С OpenLayer 2 API я делал

  if (f) { 

  mesh=f.attributes.description.split = ( "~"); 

  if (f.attributes.styleUrl == "# Red_Red") 
     { 
         f.attributes.styleUrl = "# Jaune_Vert"; 
         f.style = eval (mesh [3]). protocol.format.getStyle ("#Yellow_Yellow", {}) 
     } 
   else 
     { 
         f.attributes.styleUrl = "# Rouge_Rouge"; 
         f.style = eval (mesh [3]). protocol.format.getStyle ("# Red_red", {}) 
     } 
eval (mesh [3]) redraw (). 
 this.unselect (f); 
 } 

, но я не могу найти эквивалент функции перерисовки в V4.

Идея?

1 Ответ

0 голосов
/ 20 февраля 2019

То, как вы сейчас устанавливаете стиль для выбранной функции, ничего не изменит, потому что ol/Feature не имеет свойства style.Вы должны использовать функцию установки setStyle():

feature.setStyle(yourStyle);

Средство визуализации получит уведомление об этом изменении, поэтому вам не нужно ничего перерисовывать вручную после вызова setStyle() для функции.

...