2016-06-23 3 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

правый у вас есть 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); 
          } 

         } 

        } 


       )}