2010-04-30 39 views
6

Vì vậy, mệt mỏi vì luôn luôn nhìn thấy các đa giác màu cam mặc định sáng màu cam, tôi đang cố gắng học cách tạo kiểu OpenLayers.Rắc rối với OpenLayers Styles

Tôi đã có một số thành công với:

 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; 

Nhưng sin Tôi vẽ đa giác của tôi với DrawFeature, phong cách của tôi chỉ có hiệu lực sau khi đã hoàn thành bản vẽ, và nhìn thấy nó chụp từ màu cam sáng xám là loại rối loạn. Vì vậy, tôi đã tìm hiểu về các kiểu tạm thời và đã thử:

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

Điều này đã cho tôi hình vuông màu cam vẫn còn - cho đến khi tôi dừng vẽ, khi nó được chuyển sang màu đen hoàn toàn mờ. Tôi nghĩ rằng có lẽ tôi đã phải thiết lập một cách rõ ràng fillOpacity ... không có xúc xắc. Ngay cả khi tôi thay đổi cả hai màu tô thành màu hồng và xanh dương, tương ứng, tôi vẫn chỉ thấy màu cam và màu đen đục.

Tôi đã thử gây rối với StyleMaps, vì tôi đọc rằng nếu bạn chỉ thêm một kiểu vào bản đồ kiểu, nó sử dụng kiểu mặc định cho mọi thứ, bao gồm kiểu tạm thời.

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; 

Điều đó cũng cho tôi hình vuông mờ đen. (Mặc dù phong cách lớp đó hoạt động khi không được cung cấp cho bản đồ). Chuyển bản đồ tới chính lớp đó như sau:

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

Không hiểu gì cả. Cam tất cả các cách, ngay cả sau khi rút ra.

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

Thành công hơn rất nhiều: Màu cam khi vẽ, màu đen mờ với viền đen khi vẽ. Cũng giống như khi tôi không sử dụng bản đồ. Vấn đề là, vẫn không có tạm thời ...

Vì vậy, tôi đã cố gắng khởi tạo bản đồ của tôi theo cách này:

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

Không vuông đục, nhưng không có con xúc xắc cho tạm thời, hoặc là ... chụp tĩnh cam sang màu đen trong suốt. Ngay cả khi tôi tạo một Style mới (layer_style2), và thiết lập tạm thời cho nó, vẫn không có may mắn. Và không có may mắn với thiết lập "chọn" phong cách, một trong hai.

Tôi đang làm gì sai? IS tạm thời để tạo kiểu cho những thứ hiện đang được phác họa, đúng không? Có một số cách khác cụ thể cho bộ điều khiển drawFeature?

Chỉnh sửa: thiết extendDefault đến mức khó tin dường như không giúp đỡ, hoặc là ...

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

Trả lời

12

Tôi đã tìm thấy hai giải pháp cho vấn đề này. Trong cả hai giải pháp, bạn phải thay đổi một số tham số của DrawFeature để có được chức năng mà bạn muốn.

1.Thay đổi kiểu xử lý của DrawFeature. Hàm drawFeature trong OpenLayers.Handler.Polygon sử dụng kiểu tham số của trình xử lý cho đối tượng địa lý. Vì vậy, bạn phải thay đổi phong cách này.

Khi tạo sử dụng Tính năng:

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

Sau đó, bạn có thể thay đổi nó bằng cách:

drawPolygon.handler.style = myStyle; 

2.Thay đổi tạo callback của DrawFeature. Thay đổi kiểu dáng của tính năng tạm thời mới tạo trong gọi lại.

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}) 
}}}); 

Tương tự, bạn có thể thay đổi gọi lại sau.

+3

Bạn, thưa bạn, là một thiên tài. Điều này khiến tôi phát điên! Khi tôi đang nhìn xung quanh các tùy chọn xử lý cho drawFeature, tôi không thấy bất kỳ kiểu "phong cách" nào tôi có thể chuyển vào, vì vậy tôi nghĩ đó không phải là một lựa chọn ... Tất cả những gì tôi biết là tùy chọn "bên:" và thậm chí sau đó, tôi không thể tìm thấy một tham chiếu đến vị trí trong API mà họ đã đề cập đến. Cảm ơn! – Jenny

+0

Sử dụng giải pháp đầu tiên, khi đa giác cuối cùng được xác nhận bằng cách nhấp đúp, kiểu được đặt lại về mặc định, vì vậy cuối cùng tôi vẫn cần sử dụng gọi lại để đặt lại kiểu. –

4

Nếu bạn muốn tất cả các vectơ là một phong cách không đổi, nhưng không phải là cam nhàm chán sau đó thử này:

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

Bạn có vô số tài sản mà bạn có thể mess về với, có một cái nhìn tại các trang này:

Các vấn đề liên quan