2017-01-18 10 views
0

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>

+0

私はそれをテストし、それは私のために働く。より多くのコードを提供すれば、より良い方法でお手伝いすることができます – Icarus

+0

私はプランナーを追加します。あなたはそれが同等ではないことがわかり、レイヤーのインスタンスを失った... – FatAl

答えて

1

私はあなたが層をクローンする必要があり、私はそれを見つけることができない状況を見つけようとしています。

OL3の多くの他のクラスは、それを行うために彼らの方法cloneを持っています。レイヤーをクローン化するには、ソースをコピーする必要があります。そのソースには、機能や他の多くのオブジェクトがたくさんあります。

jQuery.extend作業のDOM要素のための罰金、それは、DOMオブジェクトに対して行われたsee docs、カスタムクラスのインスタンスである複雑なオブジェクトのために、クラスを試作、すべてオールクラスがオフに作られているように、オブジェクトを複製することははるかにありましたそのプロパティを反復してそれぞれをコピーするよりも複雑です。

だから、私はあなたが新しいレイヤーを作成することを示唆しているとあなたは同じ特性を持つ別の層が必要な場合だけ、そのオプションをコピーします。

それとも、あなたは層のクローンを作成する必要がある状況を説明することができれば、多分私達は、代替ソリューションを持つことができます。

+0

があなたの正しいかもしれ参照、私は私のアプローチを分析して得られます詳細は後で。ありがとう – FatAl

+1

最後に、私がレイヤーをクローンする必要はもうなく、おそらくそれを行うには悪いアプローチです。 – FatAl

0

私はOL3とfamilliarないですが、多分あなたは(

VAR copyLayer = Object.createと新しいもののプロトタイプとして、あなたの元のオブジェクトを使用することを試みることができます

+0

レイヤー自体の代わりにレイヤープロトタイプを渡す必要があります。 は、layerプロパティをcopyLayerに複製しません。 は[Object.createの仕様](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create) – tfidelis

関連する問題