OpenLayersというのは2005年に誕生した地図表示JSライブラリの代表格である。バージョン3からは劇的進化を遂げ、WEB上でヌルサクの使い勝手を提供している素晴らしいプロジェクトである。
最近は利用しやすいLeaflet/MapBox勢力がシェアを高めているように思うが細かい所まで手が届く機能面と安定性から私は現在もOpenLayersを利用している。
さて、OpenLayersではol.mapにはgetLayersメソッドでレイヤー一覧を取得出来るが、ここで取得出来るのはol.layer.Layerとol.layer.LayerGroupである。
getLayersで取得したol.CollectionをforEachメソッドで回すわけだがそのさいに、ol.layer.LayerGroupの場合は更にgetLayersメソッドで入れ子構成を取得したいわけだがol.Collectionでol.layer.Layerとol.layer.LayerGroupの判断方法に悩んだのでメモしておく
なんてことはない getLayersを typeof で型判定し再帰処理すればすべてのレイヤーを取得出来る(これより良い方法をご存知の方は是非コメントお願いします!)
map.getLayers().forEach(function(layerGroup){ getLayer(layerGroup); }); function getLayer(layer){ console.log(layer.get("title")); if(typeof layer.getLayers == 'function') { layer.getLayers().forEach(function (l) { getLayer(l); }); } }
コメント