2010-04-30 3 views
6

항상 밝은 오렌지색의 기본 정다각형을 보지 않으려면 OpenLayers 스타일을 배우려고합니다. 내가 그리기 완료했습니다, 그리고 밝은 오렌지에서 스냅 보는 것은 회색 일단 내 스타일에만 적용됩니다,OpenLayers 스타일에 문제가 있습니다.

 var layer_style = OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']); 
    layer_style.fillColor = "#000000"; 
layer_style.strokeColor = "#000000"; 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

그러나 사인 내가 DrawFeature 내 다각형 그리기 오전 :

나는 몇 가지 성공 했어 당황 스럽네. 그래서, 임시 스타일에 대해 배우고, 시도 :

var layer_style = new OpenLayers.Style({"default": {fillColor: "#000000"}, "temporary": {fillColor: "#000000"}}) 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

은 나에게 여전히 오렌지 광장을 가지고 - 나는 완전히 불투명 한 검은 색으로 스냅 할 때, 그리기 중지 될 때까지. 필자가 명시 적으로 fillOpacity ... no dice를 설정해야한다고 생각했습니다. 두 채우기 색상을 모두 분홍색과 파란색으로 바꿨을 때도 오렌지와 불투명 한 검정색 만 보았습니다.

스타일 맵에 하나의 스타일 만 추가하면 임시 스타일을 포함하여 모든 것을 기본값으로 사용한다는 것을 읽었으므로 StyleMaps를 망쳐 놓으 려했습니다.

var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
var style_map = new OpenLayers.StyleMap(layer_style); 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = style_map; 

저도 검은 색 불투명 한 사각형을 가졌습니다. (지도에 지정되지 않은 경우 해당 레이어 스타일이 작동 함에도 불구하고). 다음과 같이 레이어 자체에지도를 전달합니다.

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", style_map); 

아무 것도 가져 오지 않았습니다. 그려진 후에도 오렌지는 줄곧 있습니다.

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", {styleMap: style_map}); 

그려지는 동안 오렌지색, 반투명 검정색 및 검은 색 윤곽선이 더 성공적입니다. 내가지도를 사용하지 않았을 때처럼. ... 어느

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}); 

없음 불투명 광장, 그러나 임시 없음 주사위 검은 색에 여전히 오렌지 스냅 : 문제는 내지도 이런 식으로 초기화 시도, 그래서 여전히 더 일시적 ...

없다 투명한. 비록 새로운 스타일 (layer_style2)을 만들고 임시로 설정해도 여전히 운이 없다. 그리고 "선택"스타일을 설정하는데도 아무런 운이 없습니다.

내가 뭘 잘못하고 있니? 현재 스케치되고있는 것들을 스타일링하기위한 임시 IS는 맞습니까? drawFeature 컨트롤러에 특정한 다른 방법이 있습니까?

편집 : extendDefault이 사실로 설정 중 ...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"}); 

답변

12

나는이 문제에 대한 두 가지 솔루션을 발견했습니다 도움이하지 않는 것 같습니다. 두 가지 솔루션 모두 DrawFeature의 매개 변수를 변경하여 원하는 기능을 구현해야합니다.

1. DrawFeature의 핸들러 스타일을 변경하십시오. OpenLayers.Handler.Polygon의 drawFeature 함수는 해당 기능에 대한 핸들러의 매개 변수 스타일을 사용합니다. 따라서이 스타일을 변경해야합니다.

기능 사용을 만들 때 :

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {handlerOptions:{style:myStyle}}); 

나중에하여 변경할 수 있습니다

drawPolygon.handler.style = myStyle; 

2.DrawFeature의 Create 콜백을 변경하십시오. 작성 콜백에서 새로 작성된 임시 기능의 스타일을 변경하십시오.

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, { 
     callbacks:{create: function(vertex, feature) { 
      feature.style = myStyle; 
      this.layer.events.triggerEvent("sketchstarted", {vertex:vertex,feature:feature}) 
}}}); 

마찬가지로 콜백을 변경할 수 있습니다.

+3

당신은 선생님입니다. 이것은 나를 미치게했다! drawFeature에 대한 핸들러 옵션을 파고 들었을 때, 나는 전달할 수있는 "스타일"을 보지 못했습니다. 그래서 옵션이 아닌 것 같았습니다 ... 내가 아는 전부는 "sides :"옵션입니다 , 심지어 API를 언급 한 곳을 찾을 수 없었습니다. 감사! – Jenny

+0

첫 번째 해결 방법을 사용하면 두 번 클릭하여 최종 다각형을 확인한 다음 스타일을 기본값으로 다시 설정하므로 결국 콜백을 사용하여 스타일을 다시 설정해야합니다. –

4

당신은 모든 벡터가 일정한 스타일이 될하려는 경우가 아니라 지루한 오렌지는이 시도 :

vecLayer = new OpenLayers.Layer.Vector(
    "Route Layer", //layer name 
    {styleMap: new OpenLayers.StyleMap({ 
     pointRadius: "6", 
     fillColor: "#666666" 
    }), 
    renderers:renderer} 
); 

당신은, 당신이 혼란에 대해 할 수있는 성질의 부하가이 페이지를 보라 :