Openlayersでレイヤーの順序を定義する方法は?


28

マーカーレイヤー、2つのベクターレイヤー、2つのラスターレイヤーがあります。マーカーレイヤーは2つのラスターレイヤーで覆われます。

マーカーレイヤーを常に一番上に移動する方法はありますか?

編集: Zインデックスの順序はベクターレイヤーでうまく機能しますが、Zインデックスの低いマップに別のWMSラスターレイヤーを追加しても、ラスターレイヤーはベクターレイヤーを覆います。

編集:レイヤーの「LayerIndex」と「Z-Index」の観点からレンダリング順序の違いを指摘できる人はいますか?レイヤーインデックスはオーバーレイオーダーを処理し、Zindexはベクターレイヤーのフィーチャオーダーを処理すると思います。


layerindexとz-indexはOpenLayersで交換可能な用語だと思います。これらは、ドキュメントの同じコンテキストで使用されます。例:dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…–
ケーシー

こんにちは@Casey、あなたの例に感謝します。ただし、layerindexとz-indexは互換性がないと思います。私自身の経験では、setZindexは機能しませんが、setIndexは機能します。1. OpenlayerのZ-indexの例はベクターレイヤーの機能に対して機能し、rendererOptions:{zIndexing:true}によって有効になります。2.ラスターイメージレイヤーの例から、レイヤーのレンダリング順序は、マップコントロールの表示に基づいていることがわかります。これは、レイヤーのインデックス(応答コードとして)に依存します。3.レイヤインデックスは、私は新しい層の上に追加オーダー(ベースレイヤー0など...)によって設定されている

1.あなたは正しいと思います。2および3。ただし、setLayerIndexメソッドを呼び出すことにより、デフォルトの動作をオーバーライドできます。setLayerIndexメソッドは、レイヤーのz-indexを調整します。これは、マップコントロール内のレイヤーの順序とレイヤーの描画順序に影響します。
ケーシー

回答:


24

各レイヤーのz-indexの設定が役立つはずです:http : //www.openlayers.org/dev/examples/ordering.html

編集済み

最初にリンクした例はあまり役に立ちません。レイヤー内のメーカーではなく、レイヤーのlayerindex / z-indexを設定します(順序付けの例で示したように)。カスタムレイヤーのインデックス作成を示す例を(この例に基づいて)まとめました。Canada Rasterをオンにすると、マーカーレイヤーが一番上に残ることに注意してください。

関連するコードは次のとおりです。

map.setLayerIndex(dm_wms, 0); //set the image overlay to the bottom
map.setLayerIndex(markers, 99); //set the marker layer to an arbitrarily high layer index

setLayerIndexコードのドキュメントはこちらです:http ://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex


この例はマルウェアにリンクしています。
Bazinga777

8

あなたはそれを行うことができます、あなたがあなたのベクターレイヤーを常に単にコードでトップにしたいなら...

var vecLyr = map.getLayersByName('VectorLayer')[0];
map.raiseLayer(vecLyr, map.layers.length);

簡単かもしれません!


4

上記のどれも私にとってはうまくいきませんでしたが、新しいレイヤーを追加するたびにこれを行うだけで、マーカーレイヤーを一番上に保つことができました:

myMarkerLayer.setZIndex(1001);


これも私にとっては唯一の答えでした。他のどれも機能しませんでした。
マシューロック

3

マップにレイヤーを追加することは、既存のシートの上に新しいシートを配置することと考えることができます。新しいシートが透明でない場合、以下のすべてが非表示になります。

残念ながら、OpenLayersにはinsertLayerAtメソッドがないため、挿入後にレイヤーを並べ替える必要があります。解決策は、レイヤーを追加してから、スタック内で目的の深さまで下に移動するか、必要な深さまで上に移動することです。

次のようにできます。

// add your wms as usual
var yourWMSLayer = new ....
map.addLayer(yourWMSlayer);

// you can do it both ways:
// 1. now move the markers to the top of the stack
var yourMarkers = map.getLayersByName("the marker layer name")[0];
map.setLayerIndex(yourMarkers, map.layers.length-1);

// 2. OR you move the WMS down
// this is more succint
map.setLayerIndex(yourWMSLayer, map.layers.length-2);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.