Determinar un geopunto de otro, una distancia y un ángulo polar

Estoy trabajando en una aplicación de Android que utiliza Geopuntos y quiero determinar un geopunto de otro geopunto, una distancia (en cualquier formato) y un ángulo polar. Por ejemplo, quiero obtener coordenadas de un lugar 100 metros en el norte-noreste (22,5 degres) de mi ubicación obtenido por el GPS en mi teléfono.

El único método que he encontrado es Location.distanceBetween(...) .

Echa un vistazo a las fórmulas de gran círculo: http://en.wikipedia.org/wiki/Great-circle_distance

Esto debería darle algunas pistas sobre cómo calcular las distancias.

Para un punto en una distancia dada y el rumbo, ver http://williams.best.vwh.net/avform.htm#LL Esas fórmulas se ven bastante complicadas, pero son fáciles de implementar;)

Implementación para Android. Este código es ideal para las pruebas de unidades en su aplicación:

 public double radiansFromDegrees(double degrees) { return degrees * (Math.PI/180.0); } public double degreesFromRadians(double radians) { return radians * (180.0/Math.PI); } public Location locationFromLocation(Location fromLocation, double distance, double bearingDegrees) { double distanceKm = distance / 1000.0; double distanceRadians = distanceKm / 6371.0; //6,371 = Earth's radius in km double bearingRadians = this.radiansFromDegrees(bearingDegrees); double fromLatRadians = this.radiansFromDegrees(fromLocation.getLatitude()); double fromLonRadians = this.radiansFromDegrees(fromLocation.getLongitude()); double toLatRadians = Math.asin( Math.sin(fromLatRadians) * Math.cos(distanceRadians) + Math.cos(fromLatRadians) * Math.sin(distanceRadians) * Math.cos(bearingRadians) ); double toLonRadians = fromLonRadians + Math.atan2(Math.sin(bearingRadians) * Math.sin(distanceRadians) * Math.cos(fromLatRadians), Math.cos(distanceRadians) - Math.sin(fromLatRadians) * Math.sin(toLatRadians)); // adjust toLonRadians to be in the range -180 to +180... toLonRadians = ((toLonRadians + 3*Math.PI) % (2*Math.PI) ) - Math.PI; Location result = new Location(LocationManager.GPS_PROVIDER); result.setLatitude(this.degreesFromRadians(toLatRadians)); result.setLongitude(this.degreesFromRadians(toLonRadians)); return result; } 
  • Obtener la ubicación de Android a través de wifi no funciona
  • ¿Cómo detectar cuando el usuario activa / desactiva el estado del GPS?
  • Obtener el número de satélites de reparación de gps?
  • Cómo calcular la velocidad de movimiento del usuario en android
  • Cómo obtener el nombre de satélite o el número cuando estamos recibiendo la ubicación a través de GPS en Android?
  • MSecurityInputMethodService es nulo en logcat
  • No se puede resolver el símbolo ACCESS_FINE_LOCATION
  • Utilizar Android para detectar otros dispositivos que ejecutan mi aplicación cerca
  • Ejecutar Gps como servicio de fondo y enviar coordenadas al servidor web (PHP)
  • Mi móvil no se mueve, pero gps lat largo valores aún están cambiando
  • Error de tiempo de ejecución: java.lang.IllegalArgumentException: provider = gps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.