tipos tierra mapa longitud latitud google geograficas ejemplos definicion coordenadas buscar math geometry coordinates latitude-longitude

math - tierra - Coordenadas 3D en una esfera a Latitud y Longitud



latitud y longitud google maps (7)

Después de trabajar para obtener una solución directa para colocar objetos en una esfera usando lat / lng, se me ocurrió una clase simple para que pudieras hacerlo usando three.js.

var earth = new THREE.GeoSpatialMap(geometry, material); earth.setTexturesEdgeLongitude(-180.806168); for (i = 0; i < continentData.length; i += step) { var lat = continentData[i]; var lng = continentData[i + 1]; var light = new THREE.PointLight(0x0099ff); var plant = new org.good.ecology.Plant(); plant.scale.x = plant.scale.y = plant.scale.z = Math.random() * 3; console.log("Adding symbol at: " + lat + " : " + lng); earth.addGeoSymbol( new THREE.GeoSpatialMap.GeoSymbol(plant, { phi: lat, lambda: lng }) ); plant.lookAt(earth.position); }

https://github.com/scottbyrns/Three.js-Geospatial-Mapping

Tengo la siguiente información:

Existe una esfera con origen (0,0,0) y radio R. Después de hacer una intersección de esfera de rayos, sé un punto (XYZ) en el espacio 3D que está en la esfera (la posición exacta en el espacio tridimensional donde la línea perfora el casco de la esfera).

Para mi programa, me gustaría calcular la Latitud y la Longitud del punto XYZ en la esfera, pero no puedo pensar (o Google) en una manera de hacerlo fácilmente.

En resumen, la función que estoy tratando de escribir es esta:

public static LatLon FromVector3(Vector3 position, float sphereRadius) { return Latitude and Longitude }

¿Alguien sabe cómo hacer esto? Como referencia, este archivo Wiki SVG podría ser útil:

Actualizar:

Gracias por todas las respuestas útiles, así que al final fui con este código:

public static LatLon FromVector3(Vector3 position, float sphereRadius) { float lat = (float)Math.Acos(position.Y / sphereRadius); //theta float lon = (float)Math.Atan(position.X / position.Z); //phi return new LatLon(lat, lon); }

Ahora tengo que pensar en cuál respuesta me ayudó más a aceptar: P.


Editar - al volver a leer su pregunta, mi respuesta no es necesariamente aplicable, pero la dejaré para referencia.

Depende de qué tan preciso sea el propósito para el que va a usar el resultado. No hay un solo sistema de latitud y lentitud, por ejemplo, WGS84 (USA GPS) o ETRS89 (European GPS) difieren ligeramente y divergen a medida que el océano Atlántico se ensancha.

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guide5.html

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guide6.html

Finalmente, esto debería abordar su pregunta directamente.

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guideb.html

o

http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/convertingcoordinates3D.pdf


Este es el trabajo posterior al sobre pero:

Lat = arctan(z/(sqrt(x^2+y^2))) Long = arccos(sqrt(x^2+y^2)/x)


Esto ayudó a usar Javascript / THREE.js:

var lat = 90 - (Math.acos(y / RADIUS_SPHERE)) * 180 / Math.PI; var lon = ((270 + (Math.atan2(x , z)) * 180 / Math.PI) % 360) -180;


Supongo que no debería ser difícil encontrar las coordenadas esféricas polares de x, y, z (sistema de coordenadas 3d).

  1. r siempre es constante si está en la superficie.

  2. (90 - θ ) su latitud (negativo significa que está en la parte inferior) medida desde la parte superior .

  3. φ es tu longitud. (pero no estoy seguro del sistema de longitud)

También verifique este diagrama de wikipedia .


lat=atan2(z,sqrt(x*x+y*y)) lng=atan2(y,x)

Usar fórmulas con atan2() es más conveniente. No tiene que sumar / restar pi / 2 o preocuparse por los problemas de signo en diferentes cuadrantes o división por cero.

lat será> 0 en el hemisferio norte
lat será <0 en el hemisferio sur
lng será> 0 en el hemisferio oriental
lng será <0 en el hemisferio occidental


r=sqrt(x^2+y^2+z^2) phi = arccos(sqrt(x^2+y^2)/r)*sign(y) lambda = arccos(x/sqrt(x^2+y^2)) latitude = 180/pi * phi longitude = 180/pi * lambda

es posible que tenga que juguetear con los signos un poco