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(...)
.
- Android Geofencing error API con GPS?
- Android- misma ubicación GPS repetir sin actualizar
- ¿Cómo utilizar mejor los datos GPS?
- Android getLatitude () devuelve latitud geodésica o geocéntrica?
- ¿Cómo actualizar la ubicación del GPS con frecuencia?
- ¿Qué es GPS, AGPS, LBS en android?
- ¿Cómo puedo comprobar si el teléfono tiene un dispositivo GPS o no?
- Agregar distancia a una coordenada GPS
- ¿Se puede ampliar el tamaño de la superposición con el mapa de google en android?
- ¿Cuándo necesito android.hardware.location.gps y android.hardware.location.network?
- Android: recibe notificación cuando el usuario ingresa en una ubicación específica
- Problema al utilizar GPS_PROVIDER para la ubicación
- ¿Es Fused Location Provider buena opción?
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; }
- ¿Hay alguna forma de implementar la búsqueda de texto completo (FTS) en SQlite de la plataforma Android?
- Android – ¿Dónde almacenar contenido descargado, almacenamiento interno o externo?