缩放OpenLayers3贴图以覆盖多个矢量层

Zooming an OpenLayers3 map to cover multiple vector layers

本文关键字:覆盖 OpenLayers3 缩放      更新时间:2023-09-26

我有一个OpenLayers3映射,由一个OSM Tile层和一个或多个Vector层组成。我可以使用将地图缩放为单层

vector.addEventListener("change", function() {
    map.getView().fitExtent(vectorSource.getExtent(), map.getSize());
});

这是有效的。然而,如果我尝试使用添加层的循环中的以下内容来缩放以覆盖多个层

vector.addEventListener("change", function () {
    if (bounds == null) {
        bounds = vectorSource.getExtent();
    } else {
        bounds = bounds.extend(vectorSource.getExtent());
    }
    map.getView().fitExtent(bounds, map.getSize());
});

在循环外声明边界的情况下,使用单层的映射将继续工作。然而,对于多个层,else块中的代码会给出错误"未定义不是函数"。

根据文档,getExtent()返回一个扩展对象,而扩展对象有一个扩展方法,所以我不确定为什么会出错。

一边解决自己的问题。我错误地使用了extend。正确的代码是:

vector.addEventListener("change", function () {
    if (bounds == null) {
        bounds = vectorSource.getExtent();
    } else {
        bounds = ol.extent.extend(bounds, vectorSource.getExtent());
    }
    map.getView().fitExtent(bounds, map.getSize());
});