3

レイヤーのあるマップを使用しています(例から):

var lonLat = new OpenLayers.LonLat(40.4088576, -86.8576718)
                .transform(
                    new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                    map.getProjectionObject() // to Spherical Mercator Projection
                );

moveendで私は中心座標を取得しています:

map.getCenter();
map.getZoom();

およびズーム レベル: 4925535.4503328、-9668990.0134335、12

ドキュメントからのアルゴリズムの使用

public PointF TileToWorldPos(double tile_x, double tile_y, int zoom) 
{
    PointF p = new Point();
    double n = Math.PI - ((2.0 * Math.PI * tile_y) / Math.Pow(2.0, zoom));

    p.X = (float)((tile_x / Math.Pow(2.0, zoom) * 360.0) - 180.0);
    p.Y = (float)(180.0 / Math.PI * Math.Atan(Math.Sinh(n)));

    return p;
}

Y ~ 90、および X ~ 432662 を取得します。

しかし、境界内の座標が必要です: -180..180

のようなもの: 40.4088576, -86.8576718

なにが問題ですか?

4

1 に答える 1

3

OpenLayers に投影してもらいませんか? したがって、中心点を WGS84 にしたい場合は、次のようにします。

var center = map.getCenter().transform(map.getProjectionObject(),
                                       new OpenLayers.Projection("EPSG:4326"));

とにかく、少なくとも私が質問を正しく理解していれば、それがあなたが望むことをすることがわかると思います...

ところで、EPSG:4326 は、あなたが探していると思われる自然な WGS84 緯度/経度値です。大きな数字は、EPSG:900913 である球メルカトルの投影座標です。

于 2011-09-27T15:14:56.030 に答える