当我在地图上放置一个功能时,我想确保它在视图中。
我目前正在使用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)
);
}
答案 0 :(得分:1)
如果它有助于其他人,这里是最终的代码,我最终允许在地图上“跟踪”功能:
if (!map.getExtent().containsBounds(feature.geometry.getBounds(), false, true)) {
chMap.setCenter(lon, lat);
}
使用containsBounds()可确保整个功能可见。最初尝试过的onScreen()方法即使屏幕上有1个像素,也不会移动地图。
向JohnBarça提供帮助