การตั้งค่าการเปิดเผย 3 เลเยอร์ของ OpenLayers


9

ฉันพยายามอัปเกรดแผนที่ Openlayers 2.12 เป็น Openlayers 3 เพื่อใช้ประโยชน์จากเอฟเฟกต์การเปลี่ยนแปลงที่ยอดเยี่ยมในเลเยอร์โปร่งใส (Something OL2 และ Leaflet ไม่สามารถดึงดูดความสนใจได้) สิ่งนี้และฉันไม่ต้องการล้าหลังการอัพเกรดเว็บไซต์ของฉันเมื่อ OL3 เปิดตัวอย่างเป็นทางการ ในเว็บไซต์ปัจจุบันของฉัน (OL2.12) ฉันใช้ช่องทำเครื่องหมายในเมนู HTML อย่างง่ายเพื่อสลับการแสดงเลเยอร์ ฉันผลักแต่ละเลเยอร์ไปยังอาร์เรย์ (ฉันหวังว่าฉันคิดถูก OL3 ตอนนี้สร้างอาเรย์โดยอัตโนมัติสำหรับเลเยอร์ที่เรียกว่า 'เลเยอร์') และแต่ละช่องทำเครื่องหมายเรียกใช้ฟังก์ชันนี้ (ช่องทำเครื่องหมายจะได้รับค่าที่เป็นตัวแทนของหมายเลขอาเรย์ของเลเยอร์ ):

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

ใน OL3 ไม่สามารถใช้งานได้อีกต่อไปและฉันไม่สามารถหาตัวอย่างหรือเอกสารประกอบที่ให้รายละเอียดวิธีตั้งค่าเลเยอร์การมองเห็นได้

คำตอบ:


4

คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่ภายใต้ส่วนคุณสมบัติ

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

และเป็นตัวอย่างที่อาศัยอยู่ในตัวอย่างกลุ่มเลเยอร์

ol3


1
น่าเสียดายที่ลิงค์เหล่านั้นเสียชีวิต
Auspex

8

อารากอนคำตอบของคุณชี้ให้ฉันในทิศทางที่ถูกต้อง ด้านล่างเป็นรหัสที่ไม่สะอาดครั้งสุดท้ายของฉันสำหรับการเพิ่มเลเยอร์ในอาเรย์แล้วควบคุมมัน

ในไฟล์จาวาสคริปต์ฉันเริ่มต้นแผนที่และใช้ฟังก์ชั่นเพื่อสลับการมองเห็นดังนี้:

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

ใน HTML ฉันใช้ช่องทำเครื่องหมายอย่างง่าย (ตัวอย่างของการสลับ 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 กับ ol.layer.bindTo ( ol3js.org/en/master/apidoc/ol.layer.Vector.html#bindTo ) คุณสามารถจัดการกับมันได้อย่างสง่างามยิ่งขึ้น
mistapink

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.