3 Stimmen

OSM: Umrechnung von projizierten Koordinaten im sphärischen Merkator "EPSG:900913" in "EPSG:4326" Koordinaten

Ich verwende eine Karte mit einer Ebene (aus dem Beispiel):

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

Am Ende der Bewegung erhalte ich die Koordinaten der Mitte:

map.getCenter();
map.getZoom();

und Zoomstufe: 4925535.4503328, -9668990.0134335, 12

Algorithmus aus der Dokumentation verwenden

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

Ich erhalte Y ~ 90, und X ~ 432662

aber ich brauche Koordinaten in Grenzen: -180..180

etwas wie: 40.4088576, -86.8576718

Was ist los?

3voto

TomH Punkte 8650

Warum lassen Sie es nicht einfach von OpenLayers für Sie zurückprojizieren? Wenn Sie also den Mittelpunkt als WGS84 haben wollen, dann tun Sie das einfach:

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

Ich denke, Sie werden feststellen, dass Sie damit sowieso erreichen, was Sie wollen, zumindest wenn ich die Frage richtig verstanden habe...

EPSG:4326 ist übrigens der natürliche WGS84 Breiten- und Längengrad, den Sie zu suchen scheinen - die großen Zahlen sind die projizierten Koordinaten in sphärischem Merkator, also EPSG:900913.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X