tipos obtener longitud lector latitud google geograficas coordenadas buscar android gps

android - obtener - Añadiendo distancia a una coordenada GPS



tipos de coordenadas geograficas (5)

Estoy tratando de generar algunos puntos a distancias aleatorias de un punto fijo utilizando GPS.

¿Cómo puedo agregar la distancia en metros a una coordenada de GPS? He analizado la conversión de UTM a GPS, pero ¿existe un método más sencillo para lograrlo?

Estoy trabajando en la plataforma Android por si acaso.

Saludos, fgs


Si quieres ir al este o al norte o al oeste o al sur, puedes usar esto:

@SuppressLint("DefaultLocale") public static double go_mock_loc(double xx_lat,double xx_long,double xx_dinstance,String Direction) { // double xx_lat= 45.815005; // double xx_long= 15.978501; // int xx_dinstance=500; int equator_circumference=6371000; int polar_circumference=6356800; double m_per_deg_long = 360 / polar_circumference; double rad_lat=(xx_lat* (Math.PI) / 180); double m_per_deg_lat = 360 / ( Math.cos(rad_lat) * equator_circumference); double deg_diff_long = xx_dinstance * m_per_deg_long; double deg_diff_lat = xx_dinstance * m_per_deg_lat; double xx_north_lat = xx_lat + deg_diff_long; //double xx_north_long= xx_long; double xx_south_lat = xx_lat - deg_diff_long; //double xx_south_long= xx_long; //double xx_east_lat = xx_lat; double xx_east_long= xx_long + deg_diff_lat; //double xx_west_lat = xx_lat; double xx_west_long= xx_long - deg_diff_lat; if (Direction.toUpperCase().contains("NORTH")) { return xx_north_lat; } else if (Direction.toUpperCase().contains("SOUTH")) { return xx_south_lat; } else if (Direction.toUpperCase().contains("EAST")) { return xx_east_long; } else if (Direction.toUpperCase().contains("WEST")) { return xx_west_long; } else return 0; }


Este código divide la línea entre dos coordenadas en n segmentos. Reemplace el cálculo delta por su distancia fija

@Override public void split(Coordinates p1, Coordinates p2, int segments) { double φ1 = Math.toRadians(p1.getLat()); double λ1 = Math.toRadians(p1.getLon()); double φ2 = Math.toRadians(p2.getLat()); double λ2 = Math.toRadians(p2.getLon()); double xDelta = (φ2 - φ1) / segments; double yDelta = (λ2 - λ1) / segments; for (int i = 0; i < segments; i++){ double x = φ1 + i * xDelta; double y = λ1 + i * yDelta; double xc = Math.toDegrees(x); double yc = Math.toDegrees(y); System.out.println(xc+","+yc); } }


Para tomar un cuadrado estoy usando esto:

private double[] getBoundingBox(final double pLatitude, final double pLongitude, final int pDistanceInMeters) { final double[] boundingBox = new double[4]; final double latRadian = Math.toRadians(pLatitude); final double degLatKm = 110.574235; final double degLongKm = 110.572833 * Math.cos(latRadian); final double deltaLat = pDistanceInMeters / 1000.0 / degLatKm; final double deltaLong = pDistanceInMeters / 1000.0 / degLongKm; final double minLat = pLatitude - deltaLat; final double minLong = pLongitude - deltaLong; final double maxLat = pLatitude + deltaLat; final double maxLong = pLongitude + deltaLong; boundingBox[0] = minLat; boundingBox[1] = minLong; boundingBox[2] = maxLat; boundingBox[3] = maxLong; return boundingBox; }

Esto devuelve una matriz con 4 coordenadas, con ellas puedes hacer un cuadrado con tu punto original en el centro.



  • P0 (lat0, lon0): posición inicial (unidad: grados )
  • dx, dy: compensaciones aleatorias desde su posición inicial en metros

Puede usar una aproximación para calcular la posición de la posición aleatoria:

lat = lat0 + (180/pi)*(dy/6378137) lon = lon0 + (180/pi)*(dx/6378137)/cos(lat0)

Esto es bastante preciso siempre que el desplazamiento de la distancia aleatoria sea inferior a 10-100 km

Edición: por supuesto, en Java Math.cos () espera radianes, así que use Math.cos(Math.PI/180.0*lat0) si lat0 está en grados como se supone anteriormente.