簡體   English   中英

需要在OL3中克隆圖層

[英]Need to clone layer in OL3

如何在OL3中克隆圖層?

目前,我嘗試了此操作,但它為我提供了一個具有真正ol.layer不同方面的不同對象。 就像您在內部控制台日志中看到的那樣,我丟失了該層的實例,這對我來說很重要。

 <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="https://openlayers.org/en/v3.20.1/css/ol.css" type="text/css"> <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x --> <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://openlayers.org/en/v3.20.1/build/ol.js"></script> </head> <body> <div id="map" class="map" tabindex="0"></div> <script> var map = new ol.Map({ layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], target: 'map', view: new ol.View({ center: [0, 0], zoom: 2 }) }); console.log("map layer is an instanceof ol.layer.tile? ", map.getLayers().getArray()[0] instanceof ol.layer.Tile) function cloneLayer() { map.getLayers().getArray().forEach(function(layer) { var copyLayer = jQuery.extend(true, {}, layer); console.log("CopyLayer is an instanceof ol.layer.tile? ", copyLayer instanceof ol.layer.Tile) console.log("CopyLayer is equal to mapLayer? ", map.getLayers().getArray()[0] == copyLayer) }); } cloneLayer() </script> </body> </html> 

我試圖找到一種情況,您將需要克隆一個圖層,但我找不到它。

ol3中的許多其他類都有其方法clone來實現。 復制層涉及復制您的源代碼,該源代碼具有功能以及許多其他許多對象。

jQuery.extend工作非常適合DOM元素,它是針對DOM對象制作的, 請參閱docs ,對於作為自定義類實例的原型的復雜對象,原型類(如取消所有ol類)而言,克隆對象要比迭代復雜得多其屬性並復制每個屬性。

因此,如果您需要具有相同特征的另一層,我建議您創建一個新層並僅復制其選項。

或者,如果您可以解釋需要克隆圖層的情況,也許我們可以有一個替代解決方案。

我對OL3不熟悉,但是也許您可以嘗試將原始對象用作新對象的原型,

var copyLayer = Object.create(layer.prototype)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM