根据变量的不同图层样式

时间:2017-02-02 14:58:34

标签: javascript openlayers-3 geojson

我想在页面上显示很少的地图,基本上它们都是相同的,除了它们具有根据参数值而不同的不同层。

我编写的代码显示了所有地图上的图层,但样式始终采用循环中变量的最后一个值。在我的情况下,总是取2的值。

我想知道图层的样式与循环值不一致的错误在哪里。

我编写的脚本部分如下

for (variable  = 0 ; variable <= 2 ; variable++){
  vectorLayers[variable] = new ol.layer.Vector({
    source: new ol.source.Vector({
      url: '/myLocation/myFiles',
      format: new ol.format.GeoJSON()
    }),
    style:  function(feature) {
      id = feature.get('reading'+variable);
      parameter = id[1];
      fill.setColor(
        parameter >= 0 && paramter < 0.10 ? lightBlue:
        ...);
        return style;
      }
    });

1 个答案:

答案 0 :(得分:1)

样式函数不会像你期望的那样在for循环中执行。 for循环将首先创建所有图层,然后将为每个图层的每个要素调用样式函数。这就是为什么变量值总是2。  仔细调试你会看到。

编辑1: 编写一个方法,该方法将创建Vector层并在循环内调用它并传递变量值,以便正确维护该值。

for (variable  = 0 ; variable <= 2 ; variable++){
  vectorLayers[variable] = createVectorLayer(variable);
}

function createVectorLayer(variable) {
    var layer = new ol.layer.Vector({
    source: new ol.source.Vector({
      url: '/myLocation/myFiles',
      format: new ol.format.GeoJSON()
    }),
    style:  function(feature) {
      id = feature.get('reading'+variable);
      parameter = id[1];
      fill.setColor(
        parameter >= 0 && paramter < 0.10 ? lightBlue:
        ...);
        return style;
      }
    });
    return layer;
}