1

開いているレイヤー ライブラリで、画面座標を緯度と経度に変換する方法を以下に示します。このメソッドがカプセル化するロジックを理解できませんか?

getLatLonFromPoint: function (point) {
    var center = this.getCenter();
    //map center lat/lon
    var res  = this.getResolution(); 
    //pre defined by the user. Represents the change in lat long per screen unit at the given zoom level
    var size = this.getSize(); 
    //this is the width and height of the div in which the map has to be displayed
    var delta_x = point.x - (size.w / 2);
    var delta_y = point.y - (size.h / 2);
    return new OpenLayers.LatLon(
        center.lat - delta_y * res,
        center.lon + delta_x * res );
   }

誰かがいくつかの指針を提供してもらえますか?

4

3 に答える 3

5

この関数は、マップの現在の解像度、現在のマップの中心点の緯度と経度、および選択した点がマップの中心から離れている距離に基づいて、指定された点の緯度と経度を計算します。

var センター = this.getCenter();
//地図の中心緯度/経度
var res = this.getResolution();
//ユーザーによって事前に定義されています。緯度経度の変化を表します ...
var サイズ = this.getSize();

上記のコードは、計算に必要な情報を収集します: 現在のマップ ビューの中心点 (中心点の緯度/経度がわかります)、現在のマップ解像度、およびユーザー画面上の現在のマップ サイズ。 (画面サイズなどの影響を受ける場合があります)。

計算は次のようになります。

    //これは、マップを表示する必要がある div の幅と高さです
    var delta_x = point.x - (size.w / 2);
    var delta_y = point.y - (size.h / 2);

最初に x 座標 (ピクセル単位) を取り、マップの幅 (ピクセル単位) を引きます。これにより、マップの中心ピクセルが 0 である新しい x 座標が得られます。delta-x は、-(size.w/2) から +(size.w/2) の範囲のピクセル値になります。次に、y 座標についても同じことを行います。したがって、デルタ x とデルタ y は、マップの中心を原点とするデカルト座標になりました。

    新しい OpenLayers.LatLon( を返す
        center.lat - delta_y * res、
        center.lon + delta_x * res );

デルタ x とデルタ y をピクセルから緯度/経度に変換する必要があります。まず、デルタ x とデルタ y を現在の解像度で乗算します。これにより正しいスケールが得られますが、正しい原点は得られません。center.lat および center.lon adusts を追加して、現在表示されているマップに基づいて緯度/経度を取得します。

最後に、'new OpenLayers.LatLon' 呼び出しは、上記の計算を LatLon オブジェクトにラップするだけなので、関数から LatLon オブジェクトとして返すことができます。

編集: ピクセルを操作する場合、x 座標の増加は通常「右に移動」を意味し、y 座標の増加は通常「上に移動」を意味します。地図上で経度を上げると、通常は「右に移動」します。ただし、緯度は逆さまです。緯度を上げると、通常はマップ上で「下に移動」します。

したがって、緯度は、画面上の通常の y 座標スキームとは反対の方向に機能します。したがって、最終的な計算では、center.lat にはマイナスが使用されますが、center.lon にはプラスが使用されます。

于 2009-05-07T06:50:52.540 に答える
2

これを試して:

map.events.register("mousemove", map, function(e) { 
    var position = this.events.getMousePosition(e);
    var p = map.getLonLatFromPixel(new OpenLayers.Pixel(position.x, position.y));
    // your longitude value = p.lon;
    // your latitude value = p.lat;
});
于 2011-05-25T11:46:53.907 に答える