3

マーカー付きのレイヤーと、マウスオーバー時にポップアップウィンドウを表示するイベントリスナーがあるとします。

var hints = new OpenLayers.Control.SelectFeature(wplayer, {
  hover: true,
  eventListeners: {
    featurehighlighted: function(event) {
      var feature = event.feature;
      popup = new OpenLayers.Popup(null,
        feature.geometry.getBounds().getCenterLonLat().add(3000, 3000),
        new OpenLayers.Size(200,10),
        feature.attributes.name, false, null);
      ...

これはこれまでのところ機能しておりadd(3000, 3000)、場所を問題なく移動できます。しかし、現在のズームレベルとは関係なく、同じ量のピクセルだけシフトしたいと考えています。実際のマーカーがポップアップによってブロックされないようにします。

つまり、(+15px, +15px) のような変換を現在表示されている openlayers 座標系に変換する必要があります。擬似コード:

feature.geometry.getBounds().getCenterLonLat().add(Pixels(15,15).toMap())

openlayers メソッドでこれを行う方法はありますか?

4

1 に答える 1

3

がある:

これらの関数を使用すると、次のように変換を計算できます。

var ll = feature.geometry.getBounds().getCenterLonLat();
var px = map.getViewPortPxFromLonLat(ll, 72);
px = px.add(15, -15);
ll = map.getLonLatFromViewPortPx(px);
...
popup = new OpenLayers.Popup(null, ll, ...);

おそらく、現在のビューポート/画面解像度を照会する方法もあります (上記では 72 を使用しています)。

于 2012-06-26T20:20:13.533 に答える