OpenLayers:如何仅平移足够多的贴图,以使功能处于视图中

OpenLayers:如何仅平移足够多的贴图,以使功能处于视图中,openlayers,pan,Openlayers,Pan,当我在地图上放置一个特征时,我想确保它在视图中 我目前正在使用panTo()和特征的质心来实现这一点。但是,每次都会将贴图移动到要素的中心。当要素在附近时,这会使地图非常紧张 我想要的是地图平移到足以确保弹出窗口在视图中的位置(例如,在地图边缘与居中)。而且,如果特征已经在地图上…不要平移 以下是生成特征的代码(注意:这是一个高频循环,可快速添加/删除特征以创建动画): 下面是setCenter的代码: setCenter : function(lon, lat) { chMap.map

当我在地图上放置一个特征时,我想确保它在视图中

我目前正在使用panTo()和特征的质心来实现这一点。但是,每次都会将贴图移动到要素的中心。当要素在附近时,这会使地图非常紧张

我想要的是地图平移到足以确保弹出窗口在视图中的位置(例如,在地图边缘与居中)。而且,如果特征已经在地图上…不要平移

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

下面是setCenter的代码:

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

为了帮助其他人,下面是我最后的代码,它允许在地图上显示“以下”功能:

if (!map.getExtent().containsBounds(feature.geometry.getBounds(), false, true)) {
    chMap.setCenter(lon, lat);
}
使用containsBounds()可确保整个功能可见。最初尝试的onScreen()方法即使在屏幕上有1个像素的功能,也不会移动地图


向约翰·巴萨(John Barça)致敬,感谢他的帮助

说清楚,这是功能上的弹出窗口,而不是您想要确保的功能在视图中?如果是这样的话,整个弹出窗口需要在视图中,或者只是锚定点?另外,我假设您正在使用添加功能的层的featureadded事件来调用panTo?嗨,John-我想确保的是该功能本身在视图中。很抱歉,弹出窗口出现了混乱。panTo调用是在layer.addFeatures()调用之后完成的。您好,功能需要完全显示还是部分显示。你能为你到目前为止为“添加功能”和“平移到零件”所做的工作发布一些代码吗?在原始文章中添加了代码片段。我想知道设置中心内检查lon/lat是否在地图中心的特定距离内的逻辑是否有效(例如,“如果(到屏幕边缘的距离>80%)设置中心”)
if (!map.getExtent().containsBounds(feature.geometry.getBounds(), false, true)) {
    chMap.setCenter(lon, lat);
}