2012-01-24 10 views
9
var phi = (90-lat)*(Math.PI/180); 
var theta = (lng+180)*(Math.PI/180); 

marker_mesh.position.x = ((rad) * Math.sin(phi)*Math.cos(theta)); 
marker_mesh.position.z = ((rad) * Math.sin(phi)*Math.sin(theta)); 
marker_mesh.position.y = ((rad) * Math.cos(phi)); 

teniendo en cuenta lo anterior, mi marcador no se está traduciendo a la posición correcta en una esfera 3D ... ¿pensamientos?Latitud larga a X Y Posición Z en JS .. no funciona

Está relativamente cerca (en el mismo continente), pero tan cerca: \

se indican a continuación ... cabe prestando en al

lat: 41.7307619 largo: -71.276195

mi mundo tiene un boundRadius: 500px

el resultado actual de la func ción es

x: -119.7801015013779

y: 332.8157297895266

z: 353,3927238766871

enter image description here

Respuesta

16

Su fórmula difiere ligeramente de la geodésica a ECEF cálculo. Consulte las fórmulas matemáticas en Dr. Latitude and Longitude, GPS Conversion y Wikipedia Geodetic to/from ECEF coordinates. Esto proyecta la latitud, longitud a una esfera aplanada (es decir, la Tierra real no es perfectamente esférica).

var cosLat = Math.cos(lat * Math.PI/180.0); 
var sinLat = Math.sin(lat * Math.PI/180.0); 
var cosLon = Math.cos(lon * Math.PI/180.0); 
var sinLon = Math.sin(lon * Math.PI/180.0); 
var rad = 6378137.0; 
var f = 1.0/298.257224; 
var C = 1.0/Math.sqrt(cosLat * cosLat + (1 - f) * (1 - f) * sinLat * sinLat); 
var S = (1.0 - f) * (1.0 - f) * C; 
var h = 0.0; 
marker_mesh.position.x = (rad * C + h) * cosLat * cosLon; 
marker_mesh.position.y = (rad * C + h) * cosLat * sinLon; 
marker_mesh.position.z = (rad * S + h) * sinLat; 

En su escenario, porque parece que estás haciendo fuego para una esfera perfecta, que tendrá que poner f = 0.0 y r = 500,0 lugar. Esto causará que C y S se vuelvan 1.0, por lo tanto, la versión simplificada de la fórmula se reduce a:

var cosLat = Math.cos(lat * Math.PI/180.0); 
var sinLat = Math.sin(lat * Math.PI/180.0); 
var cosLon = Math.cos(lon * Math.PI/180.0); 
var sinLon = Math.sin(lon * Math.PI/180.0); 
var rad = 500.0; 
marker_mesh.position.x = rad * cosLat * cosLon; 
marker_mesh.position.y = rad * cosLat * sinLon; 
marker_mesh.position.z = rad * sinLat; 

N.B. No he validado la sintaxis de los ejemplos del código de Java.

+0

jesús dulce bebé que necesito para ser mejores en matemáticas para leer este – samccone

+0

de todos modos para ayudarme un poco? – samccone

+0

@samccone conforme a lo solicitado, proporcionó dos fragmentos de código Java para usted. El más simple en la parte inferior puede ser más de su agrado. –

Cuestiones relacionadas