OpenLayers3更改图层源URL(或替换从其他URL加载的功能)

时间:2015-08-13 14:45:40

标签: openlayers-3

我有一个带有Vector图层的地图,其中包含来自GeoJSON源的功能:

var map = new ol.Map({
    layers: [new ol.layer.Tile({
                 source: new ol.source.OSM()
             }),
             new ol.layer.Vector({
                 source: new ol.source.Vector({
                     url: 'http://example.com:5000/geo/data/zones/1',
                     format: new ol.format.GeoJSON()
                 }),
             })],
    renderer: 'canvas',
    target: 'map',
    view: new ol.View({
        center: [737514.438475665, 5864533.629390752],
        zoom: 13
    })
});

我有多个返回s GeoJSON字符串的网址:

  • http://example.com:5000/geo/data/zones/1
  • http://example.com:5000/geo/data/zones/2
  • http://example.com:5000/geo/data/zones/n

我需要能够切换我的图层来源的网址(或从其他网址获取和显示要素)。

我试图找到' url' ol.Layer.Vector实例上的属性:

l=m.getLayers().getArray()[1]
l.getProperties()

并在ol.source.Vector实例上:

s = l.getSource()
s.getProperties()

但我还没有发现任何有关“网址”的信息。属性。

你能提供一种方法吗?

  • 是否可以简单地更新源URL(并自动刷新图层功能)?
  • 我应该删除现有的功能,使用我自己的逻辑加载新功能并添加加载的功能吗?
  • 我应该删除整个图层,重新创建它,然后重新添加它吗?

1 个答案:

答案 0 :(得分:3)

  
      
  • 是否可以简单地更新源URL(并自动刷新图层功能)?
  •   

您可以使用ol.layer.Layer.setSource创建新来源并在目标图层上进行设置。

s=new ol.source.Vector(/* your source config goes here */);
l=m.getLayers().getArray()[1];
l.setSource(s);

如果两个图层都可见,地图将自动刷新要素。

  
      
  • 我应该删除现有功能,使用我自己的逻辑加载新功能并添加加载的功能吗?
  •   

您可以使用以下方法在矢量图层上添加或删除功能:

另请参阅:ol.Featureol.layer.Vector.forEachFeature

var feature = new ol.Feature({
  geometry: new ol.geom.Polygon(polyCoords),
  labelPoint: new ol.geom.Point(labelCoords),
  name: 'My Polygon'
});

l=m.getLayers().getArray()[1];
s=l.getSource();
s.addFeature(feature);
s.addFeatures(/* array of features */);
s.removeFeature(feature);
  
      
  • 我应该删除整个图层,重新创建它,然后重新添加它吗?
  •   

您可以使用ol.Map.addLayerol.Map.removeLayer来完成此操作。

// m is your map variable
v = new ol.layer.Vector(cfg);
m.addLayer(v);
m.removeLayer(v);

最终答案

上面列出的所有选项都会切换图层的网址。每个选项都会触发自己的一组事件,并使用不同的参数和对象。根据我个人的理解,我建议:

  • 如果要加载的新图层具有旧图层的相同属性,但使用新数据,则使用选项1.

  • 如果您对Vector图层的某些功能进行的更改很少,请使用选项2.

  • 使用选项3,如果您有一个全新图层,其属性与上一图层不同。