2015-10-22 4 views
1

У меня есть карта ol 3.10.1, целью которой является динамическое изменение свойств слоя. В пути, чтобы добраться туда, я использую функцию source.clear(). Странно то, что source.clear() действительно очищает функции от уровня на текущем уровне масштабирования, но при масштабировании или отключении функций все еще есть. Я использую функцию source.clear() правильно? Ниже приведен фрагмент кода, который я использую для тестирования.OpenLayers-3 - Какое правильное использование source.clear()

 var image = new ol.style.Circle({ 
      radius: 5, 
      fill: null, 
      stroke: new ol.style.Stroke({color: 'red', width: 1}) 
     }); 

     var styles = { 
      'Point': [new ol.style.Style({ 
      image: image 
      })]}; 

     var styleFunction = function(feature, resolution) { 
      return styles[feature.getGeometry().getType()]; 

     }; 

     var CITYClusterSource = new ol.source.Cluster({ 
       source: new ol.source.Vector({ 
       url: 'world_cities.json', 
       format: new ol.format.GeoJSON(), 
       projection: 'EPSG:3857' 
      }), 
     }) 
     var CITYClusterLayer = new ol.layer.Vector({ 
      source: CITYClusterSource, 
      style: styleFunction 

     }); 

     setTimeout(function() { CITYClusterSource.clear(); }, 5000); 

     var map = new ol.Map({ 
      target: 'map', 
      renderer: 'canvas', 
       layers: [ 
       new ol.layer.Tile({ 
        source: new ol.source.OSM(), 
       }), 
       CITYClusterLayer 
      ], 
      view: new ol.View({ 
       center: ol.proj.transform([15.0, 45.0], 'EPSG:4326', 'EPSG:3857'), 
       zoom:3 
      }) 
     }); 

Я использую функцию setTimout(), чтобы иметь характеристики, видимые в течение нескольких секунд, прежде чем они должны быть очищены.

Прошу совета.

ответ

0

UPDATE: http://jsfiddle.net/jonataswalker/ayewaz87/

Я забыл, ПР будет загружать свои функции снова и снова, для каждого разрешения. Поэтому, если вы хотите удалить раз и навсегда, используйте специальный загрузчик, см. Скрипт.

Ваш источник асинхронно загружен, поэтому установить тайм-аут, когда он будет готов:

CITYClusterSource.once('change', function(evt){ 
    if (CITYClusterSource.getState() === 'ready') { 
     // now the source is fully loaded 
     setTimeout(function() { CITYClusterSource.clear(); }, 5000); 
    } 
}); 

Примечание метод once, вы можете использовать on вместо него.

+0

Я внедрил ваше решение. Тем не менее, функции все еще видны при масштабировании и/или выходе. – stenhh

+0

Красивый мир работы. Спас мой день. Спасибо – stenhh

+0

К вашим услугам! –

Смежные вопросы