2016-06-23 144 views
0

我想建立一個層交換機和我在哪裏,我需要得到的地圖,所以我用所有層的點...的OpenLayers 3 map.getLayers()不

// array with layers: 
var layers = map.getLayers().getArray(); 

然而,我收到錯誤消息「map.getLayers是不是一個功能」

我使用OL3 3.16 ...任何幫助非常感謝!

這裏是我的地圖...

<div class="col-md-12" id="map" style="padding-top: 0px; width: 100vw; height: 90vh;z-index: 0"></div> 

這裏是我實例化地圖...

var map = new ol.Map({ 
     target: 'map', 
     layers: [ 
      new ol.layer.Tile({ 
       source: new ol.source.MapQuest({ layer: 'sat' }) 
      }) 
      //,layer 
     ], 
     view: new ol.View({ 
      projection: 'EPSG:4326', 
      center: [0, 0], 
      zoom: 0, 

     }) 
    }); 
+0

的'ol.Map' [確實有getLayers()方法](http://openlayers.org/en/v3.16.0/apidoc/ol.Map.html#getLayers),所以唯一合理的結論是你的'map'變量不是一個真正的'ol.Map'。不可能在沒有更多上下文的情況下分辨。 – kryger

+0

你有沒有ID地圖的div? – bartvde

+0

我編輯過的問題包括創建地圖,我覺得這是一個給定的。 :) –

回答

0

使用AngularJS我需要在我的控制器創建一個映射對象創建地圖...

angular.module('webMapAPI.LoadMap', [ 
    ...load objects 
]) 
    .factory('WebMapLoad', WebMapLoadFactory); 
WebMapLoadFactory.$inject = ['$parse', '$state', '$stateParams','$q']; 
function WebMapLoadFactory($parse, $state, $stateParams,$q) { 
    function WebMapLoad() { 
     this.map = new ol.Map({}); 
    } 

然後在同一個控制器的「LoadMap」函數中...(就像我決定做的那樣它)...分配給$範圍對象地圖...

WebMapLoad.prototype.LoadMap = function() { 
var control = this; (in angular sometimes you need to pull the main controllers $scope object in) 

control.map = new ol.Map({ 
     target: 'map', 
     layers: [ 
      new ol.layer.Tile({ 
       source: new ol.source.MapQuest({ layer: 'sat' }) 
      }) 
      //,layer 
     ], 
     view: new ol.View({ 
      projection: 'EPSG:4326', 
      center: [0, 0], 
      zoom: 0, 

     }) 
    }); 
} 

一旦我做到這一點,我不得不進入地圖中每個控制器我注入「WebMapLoad」之中。

*免責聲明上述代碼是僞代碼,尚未經過測試。

0

該解決方案的另外一點功能是獲取圖層的訪問權限並能夠操作其屬性。這是我做到了,這似乎是很乾淨......(WebMapLoad的是,我用它來創建我的地圖的AngularJS模塊)

$scope.setVisibility = function (layer) { 
        angular.forEach(WebMapLoad.map.getLayers().getArray(), function (Field, key) { 
         if(layer.get('id') == Field.get('id')) 
         { 
          if (layer.U.visible) { 
           Field.setVisible(false); 
          } 
          else { 
           Field.setVisible(true); 
          } 

         } 

        } 


       )}