2017-02-02 6 views
0

ページ上にいくつかのマップを表示したいのですが、基本的にはすべて同じですが、パラメータ値によって異なるレイヤーがあります。変数によってレイヤースタイルが異なる

私が書いたコードはすべてのマップ上にレイヤーを表示していますが、スタイルは常にループ内の変数の最後の値をとります。私の場合、常に2の値をとっています。

レイヤのスタイルがループの値に従っていないのは間違いです。

私が書いた私のスクリプトの一部は、あなたが期待しているようなスタイル機能がforループ内で実行されることはありません

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

を以下の通りです。 forループは最初にすべてのレイヤーを作成し、各レイヤーの各フィーチャーに対してstyle関数が呼び出されます。それはなぜ変数の値が常に2になるのでしょうか。 慎重にデバッグしてください。

編集1: ベクトルレイヤーを作成してループ内で呼び出すメソッドを記述し、変数値を渡して値が正しく維持されるようにします。

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; 
} 
+0

ありがとうございました。私は3つの異なる機能を作ろうと試みることによってこれに気付きました。それぞれのスタイルはループを介して呼び出されます。これが唯一の方法です。しかし、私はあまりにも多くの関数を作成することを避けたかった。私はそれが実用的だとは思わない。 これを解決する考えはありますか? – philippos

+0

作業コードを含むように私の答えを編集しました。 –

+0

ありがとう!あなたのコード編集は私が問題を解決し、私が望むものを得るのを助けました。 – philippos

関連する問題