OSM:将球形墨卡托投影坐标系(EPSG:900913)中的连接转换为“EPSG:4326”坐标系中的坐标。

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
                );

移动结束时,我会获取中心坐标:
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。

出了什么问题?

1个回答

3
为什么不让OpenLayers为您投影呢?因此,如果您想要WGS84的中心点,则只需执行以下操作:

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

我认为你会发现这样做可以满足你的需求,至少如果我正确理解了问题的话...
顺便说一下,EPSG:4326是你似乎正在寻找的WGS84经纬度值 - 大数字是球形墨卡托投影坐标,即EPSG:900913。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接