2013-04-10 51 views
0

下午好,我在地圖上有一個彈出窗口,我只想向左移動10個像素高和15個像素,問題是,當您在經度和緯度上更改其位置時,完全位於另一個位置,我從標記放大,我想要的只是移動到新的位置,無論變焦,始終保持在標記之上。將OpenLayers.Popup移動到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); 

標記爲labelepopup的彈出窗口出現了,我只想要容納標記上面的labelepopup。

回答

1

您可以使用getPixelFromLonLat地圖功能從經度和緯度中獲取確切的像素,然後使用返回的Pixel對象添加或移除所需的像素。然後您可以使用moveTo彈出式功能更改彈出式位置,該功能需要一個Pixel對象。

事情是這樣的:

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);