Openlayers OSM:从球面墨卡托投影坐标转换拉杆“;EPSG:900913“;至;EPSG:4326“;协调

Openlayers OSM:从球面墨卡托投影坐标转换拉杆“;EPSG:900913“;至;EPSG:4326“;协调,openlayers,openstreetmap,coordinate-transformation,epsg,Openlayers,Openstreetmap,Coordinate Transformation,Epsg,我正在使用带有图层的贴图(来自示例): 在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 - ((

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

在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


怎么了?

为什么不让OpenLayers为您重新投影呢?因此,如果您希望中心点为WGS84,则只需执行以下操作:

var center = map.getCenter().transform(map.getProjectionObject(),
                                       new OpenLayers.Projection("EPSG:4326"));
我想你会发现,不管怎样,这都能满足你的需求,至少如果我正确理解这个问题的话

顺便说一下,EPSG:4326是您似乎正在寻找的自然WGS84 lat/lon值-大的数字是球面墨卡托投影坐标,即EPSG:900913

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