4 votos

Conversión de coordenadas (longitud; latitud) a (X; Y)

Tenemos un antiguo sistema de mapeo que necesitamos para convertir algunos datos hacia y desde.

Necesitamos convertir de Lng / lat a XY y de XY a Lng / Lat.

Podemos convertir de Lng / Lat a XY usando lo siguiente:

 MapWidth and MapHeight = 8192

x = (LngX + 180) * (mapWidth / 360)
y = (mapHeight / 2) - (mapWidth * Math.Log(Math.Tan((Math.PI / 4) + ((LatY * Math.PI / 180) / 2))) / (2 * Math.PI))
 

Lo que no podemos hacer bien es la conversión, tenemos la X correcta:

 lng = (X - (mapWidth / 2)) / (mapWidth / 360)
 

Pero la Y es incorrecta,

 lat = (Math.Exp(-(Y - (mapHeight / 2)) / mapWidth * (2 * Math.PI)) - Math.Tan((Math.PI / 4)) * 2) / (Math.PI / 180)
 

3voto

David K Puntos 19172

Tiene tantos paréntesis en su latitud fórmula que es difícil ver de qué va con qué.

Deje $\phi = \mathrm{LatY} \times \frac\pi{180},$ es decir, si LatY es la latitud, en grados, a continuación, $\phi$ es la latitud en radianes. Deje $h$ ser mapHeight y deje $w$ ser mapWidth. Entonces la fórmula para $y$ se convierte esta en la notación matemática: $$ y = \frac h2 - \frac{w \ln\left(\tan\left(\frac\pi4 + \frac\phi2\right)\right) }{2 \pi} $$

Esto es similar a la fórmula utilizada en http://mathworld.wolfram.com/MercatorProjection.html excepto para la escala y la traducción de factores (la que desea para el ajuste de la salida en la pantalla).

La resolución de la ecuación de $\phi$ (en radianes), $$ \phi = 2 \arctan\left(\exp\left(\frac{2\pi}{w} \left(\frac h2 - y \right) \right)\right) - \frac\pi2. $$ Multiplicar por $\frac{180}{\pi}$ para obtener la respuesta en grados.

De nuevo, es duro para asegurarse de que debido a la profusión de paréntesis, pero el intento de fórmula parece ser equivalente a la ecuación matemática

$$ \mathrm{lat} = \frac{\exp\left(-\frac{\left(Y - \frac h2 \right)}{w} \times 2 \pi \right) - \tan\left(\frac\pi4\right) \times 2}{\pi / 180}, $$

que es claramente muy diferente. El hecho de que $\tan\left(\frac\pi4\right)$ (que es igual a $1$) se produce en no debería ser una bandera roja que indica que algo se hizo en el orden equivocado.

1voto

Mukul Puntos 149

No se puede detectar el problema con la ecuación final pero la ingeniería inversa funciona con la ecuación y =. Haciendo eso terminas con lo siguiente:

 lat = ((Math.arctan(Math.exp((((mapHeight / 2) -y) / mapWidth) * (2 * Math.PI))) - (Math.PI / 4))*2)/(Math.PI/180)
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X