2013-04-10 1 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);