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