2017-11-26 2 views
0

I Gleichungen verwenden für die Umwandlung von geographischen Punkten auf der Erde zu Pixelkoordinaten, wie in Daniel Shiffman Tutorial erklärt: https://gist.github.com/shiffman/a0d2fde31f571163c730ba0da4a01c82Invertierung Web Mercator Gleichungen Pixel konvertieren Länge zur Breite

Das heißt:

function webMercX(lon, zoom) { 
    lon = radians(lon); 
    var w = 256; //width/2; 
    var a = (w/PI) * pow(2, zoom); 
    var b = (lon + PI); 
    var x = a * b; 
    return x; 
} 

function webMercY(lat, zoom) { 
    lat = radians(lat); 
    var w = 256; //height/2; 
    var a = (w/PI) * pow(2, zoom); 
    var c = tan(PI/4 + lat/2); 
    var b = PI - log(c); 
    var y = a * b; 
    return y; 
} 

Based auf: https://en.wikipedia.org/wiki/Web_Mercator

Nun, um eine genaue Maus Interaktion zu implementieren, ich versuche, das Gegenteil zu tun; Konvertiere Pixel in Lat und Lon. Ich habe es geschafft, die erste Gleichung zu invertieren, so x zu lon funktioniert gut:

function inverseWebMercX(x,zoom) { 
    var w = 256; //width/2; 
    var a = (w/PI) * pow(2, zoom); 
    var b = x/a; 
    var lon = b-PI; 
    lon = degrees(lon); 
    return lon; 
} 

Dies kann über

inverseWebMercX (webMercX (10,2), 2) getestet werden;

Aber ich habe so ausgefallen weit von y umwandeln wahrscheinlich zu lat, weil ich die Lösung nicht die Teilgleichungen für var c und var lat rechts:

function inverseWebMercY(y,zoom) { 
    var w = 256; //width/2; 
    var a = (w/PI) * pow(2, zoom); 
    var b = y/a; 
    var c = -(exp(b) + PI); 
    var lat = (atan2(c) - (PI/4))*2; 
    lat = degrees(lat); 
    return lat; 
} 

Also, einfach ausgedrückt, vielleicht jemand mit einem Hintergrund besser Mathematik weiß, wie diese Gleichungen für lat zu lösen bzw. c:

var c = tan(PI/4 + lat/2); 
var b = PI - log(c); 

Geschätzt
+0

nicht das letzte Kommentar im Kern Sie oben Antwort verknüpfen Sie Ihre Frage? – barrycarter

+0

@barrycarter Nein, das ist mein eigener Kommentar, die gleiche Frage – Kajuna

+0

@Kajuna 'c = exp (PI - b) Versuchen Sie'. – Anton

Antwort

0

@ user3290797 hat den cuplrit gefunden, und ich musste atan2() für atan() ändern. Das funktioniert gut, so weit: (übrigens, ich benutze diese innerhalb P5js, so dass deshalb mathematische Funktionen einfacher aussehen, als sie es sollten)

function inverseWebMercX(x,zoom) { 
    var w = height/2; 
    var a = (w/PI) * pow(2, zoom); 
    var b = x/a; 
    var lon = b-PI; 
    lon = degrees(lon); 
    return lon; 
} 

function inverseWebMercY(y,zoom) { 
    var w = height/2; 
    var a = (w/PI) * pow(2, zoom); 
    var b = (y/a); 
    var c = exp(PI-b); 
    var lat = (atan(c) - (PI/4))*2; 
    lat = degrees(lat); 
    return lat; 
} 
Verwandte Themen