OSM: преобразовать связи из проецируемых координат в сферическом меркаторе "EPSG: 900913" в координаты "EPSG: 4326" - PullRequest
3 голосов
/ 27 сентября 2011

Я использую карту со слоем (из примера):

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 голосов
/ 27 сентября 2011

Почему бы просто не заставить OpenLayers спроектировать его обратно для вас?Поэтому, если вы хотите установить центральную точку как WGS84, просто сделайте:

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

Я думаю, вы обнаружите, что все равно будете делать то, что хотите, по крайней мере, если я правильно понял вопрос ...

Кстати, EPSG: 4326 - это натуральные значения широты / долготы WGS84, которые вы, похоже, ищете - большие числа - это проекционные координаты в сферическом меркаторе, то есть EPSG: 900913.

...