2017-02-02 12 views
0

У меня есть функция, называемая «LoadMap»Как вызвать на обновления спроса/перерисовывать из ol.Map

rcisWebMapLoad.prototype.LoadMap = function (param1, param2) { 
    //Get some vector objects and create layers 
    var fieldVectorObjs = rcisWebMapVectorObjs.GetFieldVectorObjects(param1, param2); 
     var objectVectorLines = rcisWebMapVectorObjs.GetLinesVectorObjects(param1, param2, 1); 

     //Create Map object and add layers then insert into map div 
     control.map = new ol.Map({ 
      target: 'map', 
      renderer: 'canvas', 
      layers: layers, 
      view: new ol.View({ 
       projection: 'EPSG:4326', 
       center: [0, 0], 
       zoom: 8 
      }) 
     }); 

      //******* MapServer imagery *************** 
      var aerial = new ol.layer.Tile({ 
       name: 'Imagery', 
       source: new ol.source.TileWMS({ 
        url: mapServerPath.ResponseString, 
        params: { 'LAYERS': 'aerial', 'FORMAT': 'image/png', 'TILED': true }, 
        serverType: 'mapserver' 

       }) 

      }); 
      control.map.addLayer(aerial); 


    } 

Это загрузит карту здорово !!

У меня есть свои образы и векторные объекты на карте ... Однако проблема возникает, когда я хочу, чтобы переключиться на другую карту, т.е. (различных изображений и векторных объектов) ...

UPDATE:. Первоначально я думал, что карта не обновляется, но в реальности создается другая карта get и добавляется прямо под исходной картой ... Как повторно использовать или заменять объект карты, который уже существует, чтобы отобразить другую карту?

Поскольку я использую AngularJS и передавая параметры карт через службу, я не могу просто повторно вызвать страницу и получить параметры из строки запроса, как мне раньше предлагалось.

Это похоже на то, что будет основной функцией для онлайн-карты.

Любая помощь очень ценится

+0

вы пытались 'map.getView(). Изменен()' ??? Это должно привести к событию изменения в виде карты. http://openlayers.org/en/latest/apidoc/ol.View.html#changed. Или, может быть, 'map.changed()' – pavlos

+0

http://openlayers.org/en/latest/apidoc/ol.Map.html#render собирается перерисовать карту. Существует также http://openlayers.org/en/latest/apidoc/ol.Map.html#renderSync, который является синхронным. – mistapink

+0

Да, я пробовал все это и ничего не происходит ??? –

ответ

0

Хорошо, так что я не смог заставить обновления по требованию объекта карты для OpenLayers 3.

Так что я в конечном итоге делает, чтобы разрушить карту объект и каждый раз создавать новый.

так и для приведенного выше примера это будет выглядеть так ...

Для angularJS пользователей, вы также должны убедиться, что вы создаете пустую карту в вашей .factory функции нагрузки (так что есть что-то, чтобы уничтожить изначально) ... если вы не используете угловые, вам просто нужно создать карту на странице load.

function rcisWebMapLoad() {   

     this.map = new ol.Map({}); 

    } 



rcisWebMapLoad.prototype.LoadMap = function (param1, param2) { 
//Get some vector objects and create layers 
var fieldVectorObjs = rcisWebMapVectorObjs.GetFieldVectorObjects(param1, param2); 
    var objectVectorLines = rcisWebMapVectorObjs.GetLinesVectorObjects(param1, param2, 1); 

     var layers = []; 

уничтожить объект карты, прежде чем создавать новый один

 control.map.setTarget(null); 
    control.map = null; 

    //Create Map object and add layers then insert into map div 
    control.map = new ol.Map({ 
     target: 'map', 
     renderer: 'canvas', 
     layers: layers, 
     view: new ol.View({ 
      projection: 'EPSG:4326', 
      center: [0, 0], 
      zoom: 8 
     }) 
    }); 

     //******* MapServer imagery *************** 
     var aerial = new ol.layer.Tile({ 
      name: 'Imagery', 
      source: new ol.source.TileWMS({ 
       url: mapServerPath.ResponseString, 
       params: { 'LAYERS': 'aerial', 'FORMAT': 'image/png', 'TILED': true }, 
       serverType: 'mapserver' 

      }) 

     }); 
     control.map.addLayer(aerial); 


}