Javascript 移动OpenLayers。最多可弹出10个像素,左边可弹出15个像素?

Javascript 移动OpenLayers。最多可弹出10个像素,左边可弹出15个像素?,javascript,jquery,openlayers,openstreetmap,Javascript,Jquery,Openlayers,Openstreetmap,下午好,我在地图上有一个弹出窗口,我只想移动10个像素高,向左移动15个像素,问题是当你改变它在纬度和经度上的位置时,它完全在另一个位置,当我远离标记时,我想要的只是移动到新的位置,而不考虑缩放,始终保持在标记上方 var size = new OpenLayers.Size(21,25); var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); var icon = new OpenLayers.Icon('/openlayer

下午好,我在地图上有一个弹出窗口,我只想移动10个像素高,向左移动15个像素,问题是当你改变它在纬度和经度上的位置时,它完全在另一个位置,当我远离标记时,我想要的只是移动到新的位置,而不考虑缩放,始终保持在标记上方

var size   = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon   = new OpenLayers.Icon('/openlayers/img/marker.png',size,offset);
var lonlat = new OpenLayers.LonLat(long,lat);
var proj_1 = new OpenLayers.Projection("EPSG:4326");
var proj_2 = new OpenLayers.Projection("EPSG:900913");
var EPSG   = lonlat.transform(proj_1,proj_2);
var marker = new OpenLayers.Marker(EPSG, icon);
markers.addMarker(marker);
marker.events.register("click", marker, function(e){ // on click popup
    var popup = new OpenLayers.Popup.FramedCloud(id,
                marker.lonlat,
                new OpenLayers.Size(200,200),
                '<div class="popup">info example</div>',
                null,true);
    map.addPopup(popup);
});
var labelepopup = new OpenLayers.Popup(null,
    EPSG,
    new OpenLayers.Size(37,13),
    '<p style="font-size: 8.5px;">always info</p>'
);
map.addPopup(labelepopup);
var size=新的OpenLayers.size(21,25);
var偏移=新的OpenLayers.Pixel(-(大小为w/2),-size.h);
var icon=new OpenLayers.icon('/OpenLayers/img/marker.png',大小,偏移量);
var lonlat=新OpenLayers.lonlat(long,lat);
var proj_1=新OpenLayers.投影(“EPSG:4326”);
var proj_2=新OpenLayers.投影(“EPSG:900913”);
变量EPSG=lonlat.变换(项目1,项目2);
var marker=新的OpenLayers.marker(EPSG,图标);
标记。添加标记(标记);
marker.events.register(“单击”,标记,函数(e){//单击弹出窗口
var popup=新的OpenLayers.popup.FramedCloud(id,
马克·隆拉特,
新OpenLayers.尺寸(200200),
'信息示例',
空,真);
map.addPopup(弹出窗口);
});
var labelepopup=新的OpenLayers.Popup(空,
EPSG,
新开放层。尺寸(37,13),
“

始终保持信息” ); map.addPopup(labelepopup);


标记上的弹出窗口labelepopup出现时,我只想在标记上方容纳labelepopup。

您可以使用
getPixelFromLonLat
map函数从纬度和经度获取精确的像素,然后使用返回的
pixel
对象添加或删除所需像素。然后,您可以使用
moveTo
弹出功能更改弹出位置,该功能需要
像素
对象

var size   = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon   = new OpenLayers.Icon('/openlayers/img/marker.png',size,offset);
var lonlat = new OpenLayers.LonLat(long,lat);
var proj_1 = new OpenLayers.Projection("EPSG:4326");
var proj_2 = new OpenLayers.Projection("EPSG:900913");
var EPSG   = lonlat.transform(proj_1,proj_2);
var marker = new OpenLayers.Marker(EPSG, icon);
markers.addMarker(marker);
marker.events.register("click", marker, function(e){ // on click popup
    var popup = new OpenLayers.Popup.FramedCloud(id,
                marker.lonlat,
                new OpenLayers.Size(200,200),
                '<div class="popup">info example</div>',
                null,true);
    map.addPopup(popup);
});
var labelepopup = new OpenLayers.Popup(null,
    EPSG,
    new OpenLayers.Size(37,13),
    '<p style="font-size: 8.5px;">always info</p>'
);
map.addPopup(labelepopup);
大概是这样的:

var pixel = map.getPixelFromLonLat(popup.lonlat); //or use another OpenLayers.LonLat object
pixel.x += DESIRED_X_AMOUNT;
pixel.y += DESIRED_Y_AMOUNT;
popup.moveTo(pixel);