동일레이어에 FEATURE단위 위상(ZINDEX) 부여하기


동일한 레이어상에서도 특정 feature가 가려지는 현상 등을 방지하기 위해 위상을 부여할 필요가 있을 수 있다.

이때 사용가능한 방법이다.

 

첫째>
vectorLayer 생성시 “rendererOptions: { zIndexing: true } ” 옵션 부여하기

 

fn_initVectorLayer : function() {
vectorLayer = new OpenLayers.Layer.Vector(“LayerName”, {
rendererOptions: { zIndexing: true }
});

sMap.addLayers([vectorLayer]);

controls = {
point: new OpenLayers.Control.DrawFeature(vectorLayer, OpenLayers.Handler.Point),
line: new OpenLayers.Control.DrawFeature(vectorLayer, OpenLayers.Handler.Path),
polygon: new OpenLayers.Control.DrawFeature(vectorLayer, OpenLayers.Handler.Polygon),
drag: new OpenLayers.Control.DragFeature(vectorLayer),
modify: new OpenLayers.Control.ModifyFeature(vectorLayer)
};

for (var key in controls) {
sMap.addControl(controls[key]);
}
}

두번째>

벡터레이어에 적용할 style에 graphicZIndex부여하기

var style = {
strokeColor: colors[istIdx – 1],
strokeOpacity: 1,
strokeWidth: roxIdx,
pointRadius: 6,
context: “보여주고 싶은 정보 또는 도움말”,
pointerEvents: “visiblePainted”,
featureType: “fireSpreadLine”,
graphicZIndex: featureIdx
};

var line = [];

var oriPt = new OpenLayers.Geometry.Point(points[0].x, points[0].y);
var chgPt = oriPt.clone().transform(new OpenLayers.Projection(“EPSG:5186”), new OpenLayers.Projection(“EPSG:900913”));
line.push(new OpenLayers.Geometry.Point(chgPt.x, chgPt.y));
var oriPt = new OpenLayers.Geometry.Point(points[1].x, points[1].y);
var chgPt = oriPt.clone().transform(new OpenLayers.Projection(“EPSG:5186”), new OpenLayers.Projection(“EPSG:900913”));
line.push(new OpenLayers.Geometry.Point(chgPt.x, chgPt.y));

return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(line), null, style);

세번째>

원하는 시점(이벤트가 발생하는 시점)에 graphicZIndex부여하기

var style = oFeature.style;
style.fontSize = “20px”;
style.fontFamily = “dotum”;
style.fontWeight = “bold”;