openlayers - OSM : convert ties from projected coordinates in spherical mercator "EPSG:900913" to "EPSG:4326" coordinates

标签 openlayers openstreetmap coordinate-transformation epsg

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

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

怎么了?

最佳答案

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

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

我想你会发现无论如何都会做你想做的事,至少如果我理解正确的话......

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

关于openlayers - OSM : convert ties from projected coordinates in spherical mercator "EPSG:900913" to "EPSG:4326" coordinates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569179/

相关文章:

javascript - 如何使用图像填充 OpenLayers 中的图层?

json - jsFiddle如何获取json?

javascript - OpenLayers - 输入新搜索时清除搜索结果中的标记

javascript - OpenLayers 无法在 map 上绘制 geoJSON

android - 是否有可能在OpenGL中点击多维数据集的哪个表面?

c++ - 我的矩阵堆栈实现 (OpenGL ES 2.0) 有什么问题?

javascript - 有没有办法减去 toShortString() 返回的值?

javascript - openlayers - wms - map 未加载

python - 为大 id 数创建邻接矩阵

matlab - 如何投影一个新的点到PCA新的基础上?