OSM:将球形墨卡托“EPSG:900913”中投影坐标的关系转换为“EPSG:4326”坐标

时间:2011-09-27 12:33:46

标签: openlayers openstreetmap coordinate-transformation epsg

我正在使用带图层的地图(来自示例):

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

出了什么问题?

1 个答案:

答案 0 :(得分:3)

为什么不让OpenLayers为您投射回来?因此,如果您希望中心点为WGS84,那么就这样做:

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

我认为无论如何你会发现你会做你想做的事,至少如果我理解了这个问题......

顺便说一句,EPSG:4326是您看起来正在寻找的自然WGS84纬度/经度值 - 大数是球形墨卡托的投影坐标,即EPSG:900913。