Thiết lập khả năng hiển thị 3 lớp của OpenLayers


9

Tôi đang cố gắng nâng cấp bản đồ Openlayers 2.12 của mình lên Openlayers 3 để tận dụng các hiệu ứng chuyển tiếp tuyệt vời trên các lớp trong suốt (Thứ gì đó OL2 và Tờ rơi không thể hấp dẫn). Điều này và tôi không muốn tụt hậu so với việc nâng cấp trang web của mình khi OL3 được phát hành chính thức. Trong trang web hiện tại của tôi (OL2.12), tôi sử dụng các hộp kiểm trong menu HTML đơn giản để chuyển đổi mức độ hiển thị của lớp. Tôi đẩy mỗi lớp thành một mảng (Tôi hy vọng tôi nghĩ rằng OL3 bây giờ sẽ tự động tạo một mảng cho các lớp được gọi là 'lớp') và mỗi hộp kiểm gọi hàm này (các hộp kiểm được đưa ra một giá trị đại diện cho số mảng của lớp ):

function layerswitch(evt){
    layers[evt.value].setVisibility(evt.checked);
}

Trong OL3, điều này không còn hoạt động nữa và tôi không thể tìm thấy bất kỳ ví dụ hoặc tài liệu nào chi tiết cách thiết lập mức độ hiển thị của lớp.

Câu trả lời:


4

bạn có thể tìm thêm thông tin ở đây dưới phần thuộc tính.

visible     boolean | undefined     Visibility. Default is true (visible).

và ví dụ trực tiếp trong ví dụ nhóm lớp .

ol3


1
Thật không may, những liên kết đã chết.
Auspex

8

Aragon, câu trả lời của bạn chỉ cho tôi đi đúng hướng. Dưới đây là mã ô uế cuối cùng của tôi để thêm các lớp vào một mảng và sau đó kiểm soát chúng.

Trong tệp javascript, tôi đã khởi tạo bản đồ và sử dụng một chức năng để chuyển đổi mức độ hiển thị như sau:

//Layer array
var layersArray = [];

//Map view (Initial location)
var view = new ol.View2D({
// the view's initial state
center: ol.proj.transform([*Lat*,*Long*], 'EPSG:4326', 'EPSG:3857'),
zoom: 12
});

/*  Map Initialization  */
function initializeMap(){

var esribase = new ol.layer.Tile({
preload: Infinity,
  source: new ol.source.XYZ({
    url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' +
        'World_Topo_Map/MapServer/tile/{z}/{y}/{x}'
  })
});

var poly1 = new ol.layer.Tile({
source: new ol.source.TileWMS({
  url: 'http://localhost:8080/geoserver/wms',
  params: {'LAYERS': '*Workspace*:*Layer*', 'TILED': true}
 })
}); 
poly1.setVisible(false);

var poly2 = new ol.layer.Tile({
source: new ol.source.TileWMS({
  url: 'http://localhost:8080/geoserver/wms',
  params: {'LAYERS': '*Workspace*:*Layer*', 'TILED': true}
 })
}); 
poly2.setVisible(false);

var poly3 = new ol.layer.Tile({
source: new ol.source.TileWMS({
  url: 'http://localhost:8080/geoserver/wms',
  params: {'LAYERS': '*Workspace*:*Layer*', 'TILED': true}
 })
}); 
poly3.setVisible(false);

layersArray.push(esribase); //0
layersArray.push(poly1); //1
layersArray.push(poly2); //2
layersArray.push(poly3);//3

var map = new ol.Map({
controls: ol.control.defaults().extend([
new ol.control.ScaleLine({
  units: ol.control.ScaleLineUnits.METRIC
})
]),
renderer: ol.RendererHint.CANVAS,
target: 'map',
layers: layersArray,

view:view
});
}

// Layer visibility function
function layerswitch(evt){
layersArray[evt.value].setVisible(evt.checked);
}

Trong HTML tôi đã sử dụng các hộp kiểm đơn giản (ví dụ về chuyển đổi poly1):

<input  style='cursor:pointer' type="checkbox" value="1" onclick="javascript:layerswitch(this)" class="Cpoly1" name="poly1check" id="poly1check"/><label id="poly1checkLabel" for="poly1check">Polygon 1 Layer Switcher</label>

Imho với ol.layer.bindTo ( ol3js.org/en/master/apidoc/ol.layer.Vector.html#bindTo ) bạn có thể xử lý nó thậm chí còn thanh lịch hơn.
Mistapink

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.