2016-09-01 9 views
1

私は以前はJavaScriptを使ったことがありません。私は、ユーザーの好みごとに異なるレイヤーを隠すことができるマップを作成しようとしています。私はhttps://www.mapbox.com/mapbox-gl-js/example/toggle-layers/に正確なコードを示すマップボックス上の参考例を見つけました。マップボックスjs;表示と非表示を切り替える

私の問題は、大きさの異なる多数のポイントレイヤーがあるため、いくつかのレイヤーを作成し、それぞれのポイントの外観がその特定の大きさを反映するように、望ましい属性に基づいてフィルタリングすることでした。しかし、私はこれらの点を何年も整理しておきたいので、私は層をグループ化しました。したがって、私のレイヤー名はすべてこのようになります(2006_mag2,2006_mag8,2010_mag3 ...)。

ただし、hide/showオプションを使用すると、年に基づいてレイヤーを表示できます。だから私はsqlで使用するような何らかの演算子(つまり、 '2006%'やLIKE演算子)を実行できると思っていました。いくつかの投稿を見ると、多くの人がJavaScriptで '*'を使用していますか? は、これはそれが前に個別にそれぞれの層のためにどのように見えるかです:

var toggleableLayerIds = [ '2006_mag2', '2010_mag3' ]; 

for (var i = 0; i < toggleableLayerIds.length; i++) { 
    var id = toggleableLayerIds[i]; 
} 

、これは一緒にグループに層数をしようで私のしくじった試みです:

​​

どれ指導君たちを提供することができます大いに感謝されます。

答えて

0

regexでループを使用して、レイヤーIDを日付別にグループ化することができます。申し訳ありませんが、変数の名前を変更しました。これにより、layerIdsが日付順にグループ化されたオブジェクトが表示されます。

var layerIds = [ '2006_mag2', '2010_mag3', '2006_mag8', '2006_mag1', '2008_mag2']; 
 
    var dates = ['2006', '2010']; 
 
    var groupedLayers = {}; 
 

 
    //init your object to have a member for each date 
 
    //this could be done inside the loops below by testing if the array exists before pushing the matching layerId 
 
    for (var i=0; i < dates.length; i++) { 
 
     groupedLayers[dates[i]] = []; 
 
    } 
 
    
 
    //loop over your layerIds to match with the RegExp 
 
    for (var i=0; i < layerIds .length; i++) { 
 
     for (var j=0; j < dates.length; j++) { 
 
      var searchPattern = new RegExp('^' + dates[j]); 
 
      if (searchPattern.test(layerIds[i])) { 
 
       groupedLayers[dates[j]].push(layerIds[i]); 
 
      } 
 
     } 
 
    } 
 

 
    console.log(groupedLayers)

正確なあなたはので、私はもっとあなたを助けることができる必要がある結果を教えてください。

+0

クイックアンサーに感謝します。ループは理にかなっています。私はちょうど毎年のスクリーンの右側にボタンがあることを望んでいる。誰かがボタンをクリックすると、その年に関連するすべてのポイントが消えます。私は自分が何をしているのかわからないと言ってもそれほど控えめではないと思います。驚いたことに、驚いたことに、私は仕事に就くことができないjsfiddleです。助言がありますか? https://jsfiddle.net/albinoham/x1qvuzg9/2/#&togetherjs=UfvI3hbGSB – user6784706

+0

jsFiddleを編集しました。動作させるためにmapBoxトークンを提供する必要があります[https://jsfiddle.net/x1qvuzg9/4/ ](https://jsfiddle.net/x1qvuzg9/4/)mapBox ressourceファイルを正しくインポートしない限り、マップはjsfiddleに表示されません。私はあなたのローカルhtmlファイルにのみjavascriptをコピー/貼り付けすることをお勧めします。 –

+0

あなたは絶対星です。時間を割いていただきありがとうございます。 – user6784706

関連する問題