longitude long latitude lat google from address function geometry geospatial

function - long - Lat/Lon+Distancia+rumbo-> Lat/Lon



google maps api coordinates format (1)

Entonces: tengo la siguiente función, adaptada de una fórmula que se encuentra en línea, que toma dos coordenadas lat / lon y encuentra la distancia entre ellas en millas (a lo largo de una Tierra esférica):

public static double distance (double lat1, double lon1, double lat2, double lon2) { double theta = toRadians(lon1-lon2); lat1 = toRadians(lat1); lon1 = toRadians(lon1); lat2 = toRadians(lat2); lon2 = toRadians(lon2); double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta); dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000; return dist; }

Por lo que puedo decir, esto funciona bien.

Lo que necesito es una segunda función que, utilizando exactamente el mismo modelo de la geometría de la Tierra, tome un solo par latitud / longitud [A], un rumbo y una distancia, y emite un nuevo par latitud / longitud [B] tal que si comenzaste en el punto [A] y recorrieras la distancia dada en el rumbo dado, terminarías en el punto [B].

Aquí es donde el hecho de que mis habilidades de geometría me han dejado completamente entra en juego :)

¡Cualquier ayuda sería muy apreciada!

Gracias, -Dan


Obtengo la mayoría de esos tipos de fórmulas de The Aviation Formulary

La fórmula que da es:

Lat / lon dado radial y distancia Un punto {lat, lon} es una distancia d out en el radial tc desde el punto 1 si:

lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) IF (cos(lat)=0) lon=lon1 // endpoint a pole ELSE lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi ENDIF

Este algoritmo está limitado a distancias tales que dlon <pi / 2, es decir, aquellas que se extienden alrededor de menos de un cuarto de la circunferencia de la tierra en longitud. Un algoritmo completamente general, pero más complicado es necesario si se permiten mayores distancias:

lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat)) lon=mod( lon1-dlon +pi,2*pi )-pi

Tenga en cuenta que está usando "tc" para representar el rumbo verdadero (en radianes en sentido horario desde el norte) y las distancias que da están en radianes de arco a lo largo de la superficie de la tierra. Esto se explica (junto con las fórmulas para convertir hacia adelante y hacia atrás a partir de millas náuticas) en la primera sección del Formulario. Además, consulte las "Notas de implementación" y "Ejemplos trabajados" en esa página.