我有一个带有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()
但我还没有发现任何有关“网址”的信息。属性。
你能提供一种方法吗?
答案 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.Feature和ol.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.addLayer和ol.Map.removeLayer来完成此操作。
// m is your map variable
v = new ol.layer.Vector(cfg);
m.addLayer(v);
m.removeLayer(v);
最终答案
上面列出的所有选项都会切换图层的网址。每个选项都会触发自己的一组事件,并使用不同的参数和对象。根据我个人的理解,我建议:
如果要加载的新图层具有旧图层的相同属性,但使用新数据,则使用选项1.
如果您对Vector图层的某些功能进行的更改很少,请使用选项2.
使用选项3,如果您有一个全新图层,其属性与上一图层不同。