OpenLayers:如何只填充地图,以便在视图中使用该功能

时间:2014-07-06 16:26:23

标签: openlayers pan

当我在地图上放置一个功能时,我想确保它在视图中。

我目前正在使用panTo()和功能的质心作为执行此操作的方法。但是,这会使地图每次都以特征为中心。当附近有特色时,这可能会产生一个非常紧张的地图。

我想要的是地图平移足以确保弹出窗口在视野中(例如在地图的边缘与居中)。并且,如果该功能已经在地图上......请不要平移。

以下是生成该功能的代码(注意:这是一个高频循环,可以快速添加/删除功能以创建动画):

var feature = new OpenLayers.Feature.Vector(
                    new OpenLayers.Geometry.Collection(geometries), {
                        "color" : color,
                        "strokeOpacity" : settings.lineOpacity,
                        "fillOpacity" : settings.fillOpacity,
                        "label" : ""
                    });

layer.addFeatures([ feature ]);
setCenter(lon, lat);

而且,这是setCenter的代码:

setCenter : function(lon, lat) {
    chMap.map.panTo(
        new OpenLayers.LonLat(
            lon, lat
        ).transform(chMap.EPSG4326, chMap.EPSG900913)
    );
}

1 个答案:

答案 0 :(得分:1)

如果它有助于其他人,这里是最终的代码,我最终允许在地图上“跟踪”功能:

if (!map.getExtent().containsBounds(feature.geometry.getBounds(), false, true)) {
    chMap.setCenter(lon, lat);
}

使用containsBounds()可确保整个功能可见。最初尝试过的onScreen()方法即使屏幕上有1个像素,也不会移动地图。

向JohnBarça提供帮助