我有一个带有基础层和矢量图层的OpenLayers 3地图。
this.topoLayer = new ol.layer.Vector({
source: new ol.source.Vector(),
style: style
});
var baseLayer = new ol.layer.Tile({
source: new ol.source.XYZ({
url: 'http://[…]/{z}/{x}/{y}.png',
crossOrigin: 'null'
})
});
this.map = new ol.Map({
target: 'map',
layers: [baseLayer, this.topoLayer],
view: new ol.View2D({
center: ol.proj.transform([11.38, 48.54], this.options.markerEPSG, this.options.mapEPSG),
zoom: 5,
}),
});
在用户交互时,我向向量图层添加和删除了几个要素。以下是添加新功能的功能:
var feature = new ol.Feature({
topo: topo,
selected: false,
geometry: new ol.geom.Point(ol.proj.transform(location, this.options.markerEPSG, this.options.mapEPSG)),
});
this.topoLayer.getSource().addFeatures([feature]);
添加/删除新功能后,我想自动缩放并平移地图以适应我的功能。在旧的OpenLayers API中,向量图层上有getDataExtent
函数,用于检索显示的所有要素周围的“边界框”。但我想知道如何使用新API。
答案 0 :(得分:23)
在版本3.7中,ol.View.fitExtent()
和ol.View.fitGeometry()
已统一在一个功能中:fit
。
现在代码是:
var extent = myLayer.getSource().getExtent();
map.getView().fit(extent, map.getSize());
答案 1 :(得分:8)
根据Tyler DeWitt的回答,您应该能够做到这样的事情:
var view = yourmap.getView();
var view2D = view.getView2D();
var extent = yourlayer.getSource().getExtent();
view2D.fitExtent(extent, yourmap.getSize());
编辑:像蒂姆和斯图亚特说的那样上面不再适用了。以下应该做的伎俩:
var extent = yourlayer.getSource().getExtent();
map.getView().fitExtent(extent, map.getSize());
答案 2 :(得分:3)
var source = layer.getSource();
goog.events.listen(source, ol.source.VectorEventType.ADD, function(evt) {
// taken from ol/source/vectorsource.js
var extent = ol.extent.createEmpty();
var geometry = null;
var feature;
var features = source.getFeatures().getArray();
for (var i = 0, ii = features.length; i < ii; ++i) {
feature = features[i];
geometry = feature.getGeometry();
if (!goog.isNull(geometry)) {
ol.extent.extend(extent, geometry.getExtent());
}
// here you should have your extent
}
}, false, this);
未测试。
应该有更优雅的方式,但我现在不确定,在哪里找到它。
答案 3 :(得分:2)
由于我无法评论,我将不得不发布另一个答案: Danny Hoek的回答不再正确,这是更新:
var view = yourmap.getView();
var extent = yourlayer.getSource().getExtent();
view.fitExtent(extent, yourmap.getSize());
基本上2D道具似乎已经消失了。
答案 4 :(得分:0)
现在getExtent()
上有一个ol.source
功能,所以我可以拨打<layer>.getSource().getExtent()
。但是,我无法弄清楚如何让我的地图缩放到那个级别。 <map>.zoomToExtent(extent)
已不复存在。