Para empezar, creo que tienes tu latitude y longitude invertidos. La longitud mide X y la latitud mide Y.
La latitud es fácil de convertir en una distancia norte-sur. Sabemos que 360 grados es un círculo completo alrededor de la tierra a través de los polos, y that distance is 40008000 meters. Siempre y cuando no necesite dar cuenta de los errores debido a que la tierra no es perfectamente esférica, la fórmula es deltaLatitude * 40008000/360
.
La parte difícil es convertir la longitud en X, como sospechabas. Dado que depende de la latitud que necesita para decidir qué latitud va a utilizar, puede elegir la latitud de su origen, la latitud de su destino o algún punto arbitrario en el medio. La circunferencia en el ecuador (latitud 0) es 40075160 metros. La circunferencia de un círculo en una latitud dada será proporcional al coseno, por lo que la fórmula será deltaLongitude * 40075160 * cos(latitude)/360
.
Editar: Tu comentario indica que tienes problemas con la fórmula de longitud; es posible que haya usado grados en lugar de radianes en la llamada al cos
, ese es un error común de novato. Para asegurarse de que no haya ambigüedad, aquí está el código de trabajo en Python.
def asRadians(degrees):
return degrees * pi/180
def getXYpos(relativeNullPoint, p):
""" Calculates X and Y distances in meters.
"""
deltaLatitude = p.latitude - relativeNullPoint.latitude
deltaLongitude = p.longitude - relativeNullPoint.longitude
latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude))
resultX = deltaLongitude * latitudeCircumference/360
resultY = deltaLatitude * 40008000/360
return resultX, resultY
Elegí utilizar la latitud relativaNullPoint para el cálculo X. Esto tiene la ventaja de que si convierte varios puntos con la misma longitud, tendrán la misma X; las líneas norte-sur serán verticales.
Editar de nuevo: Debería haber señalado que esta es una fórmula muy simple y debe conocer sus limitaciones. Obviamente, la tierra no es plana, por lo que cualquier intento de asignarla a coordenadas XY implicará algunos compromisos. La fórmula I derivada anteriormente funciona mejor cuando el área que está convirtiendo es lo suficientemente pequeña como para considerarse plana, y donde se puede ignorar la ligera curvatura y el no paralelismo de las líneas norte-sur. Hay toda una ciencia para mapear proyecciones; si quiere ver algunas posibilidades, un buen lugar para comenzar sería Wikipedia. Esta proyección específica se conoce como the Equirectangular projection, con algunas escalas añadidas.
bien, probé esto, y el cálculo de la latitud es muy exacto :) pero los valores de longitud-metro son siempre el factor 1.3 a grande para la prueba de latitud. Creo que no es una buena idea simplemente dividir por este factor porque probablemente difiera para diferentes latitudes, tal vez la circunferencia de la tierra tiene que calcularse en relación con la latitud actual. –
@Sponge, verifique la actualización. –
muchas gracias! funciona genial :) –