Convertir latitud y longitud para apuntar en el espacio 3D
Necesito convertir los valores de latitud y longitud a un punto en el espacio tridimensional. He estado intentando esto durante aproximadamente 2 horas, pero no obtengo los resultados correctos.
losEquirectangular las coordenadas provienen deopenflights.org. He probado varias combinaciones decos ypecado, pero el resultado nunca se parecía a nuestra amada tierra.
A continuación, puede ver el resultado de aplicar la conversión.Wikipedia sugiere. Creo que uno puede adivinar a partir del contexto quéc4d.Vector
es.
<code>def llarToWorld(latit, longit, altid, rad): x = math.sin(longit) * math.cos(latit) z = math.sin(longit) * math.sin(latit) y = math.cos(longit) v = c4d.Vector(x, y, z) v = v * altid + v * rad return v </code>
Rojo: X, Verde: Y, Azul: Z
De hecho, se puede identificar América del Norte y del Sur, especialmente las tierras alrededor del Golfo de México. Sin embargo, parece un poco aplastado y un poco en el lugar equivocado ..
Como el resultado parece algo rotado, creo que intenté intercambiar latitud y longitud. Pero ese resultado es algo incómodo.
<code>def llarToWorld(latit, longit, altid, rad): temp = latit latit = longit longit = temp x = math.sin(longit) * math.cos(latit) z = math.sin(longit) * math.sin(latit) y = math.cos(longit) v = c4d.Vector(x, y, z) v = v * altid + v * rad return v </code>
Así es como se ve el resultado sin convertir los valores.
<code>def llarToWorld(latit, longit, altid, rad): return c4d.Vector(math.degrees(latit), math.degrees(longit), altid) </code>
Pregunta: ¿Cómo puedo convertir la longitud y la latitud correctamente?
SoluciónGracias a TreyA, encontréesta página en mathworks.com. El código que hace su trabajo es el siguiente:
<code>def llarToWorld(lat, lon, alt, rad): # see: http://www.mathworks.de/help/toolbox/aeroblks/llatoecefposition.html f = 0 # flattening ls = atan((1 - f)**2 * tan(lat)) # lambda x = rad * cos(ls) * cos(lon) + alt * cos(lat) * cos(lon) y = rad * cos(ls) * sin(lon) + alt * cos(lat) * sin(lon) z = rad * sin(ls) + alt * sin(lat) return c4d.Vector(x, y, z) </code>
En realidad, cambiéy
yz
Porque la tierra fue rotada entonces, sin embargo, ¡funciona! Ese es el resultado: