0

こんにちは。マップにポップアップがあり、高さ 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 を配置することだけです。

4

1 に答える 1

1

map 関数を使用getPixelFromLonLatして緯度と経度から正確なピクセルを取得し、Pixel返されたオブジェクトを使用して目的のピクセルを追加または削除できます。次に、オブジェクトmoveToを必要とする popup 関数を使用してポップアップの位置を変更できます。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);
于 2013-09-05T10:09:49.387 に答える