Intereting Posts
API отпечатков пальцев Android и частные / открытые ключи Создание флажка с тремя состояниями на android Как я могу заставить кордону InAppBrowser предоставить пользователю возможность закрыть браузер при использовании Android-устройства? Сделать EditText расти по мере его заполнения Глядя на стену (GridView?), Которая выходит за пределы экрана, и пользователь может коснуться ее, чтобы переместить ее Как создать уведомление с NotificationCompat.Builder? Как правильно спроектировать / настроить Android-навигатор Внедрить безопасность на уровне подписки на услуги Android с более чем одной разрешенной подписью OnCreate не вызвал активность Как я могу adb установить apk на несколько подключенных устройств? Когда вызывается метод getView () ListView? Как отправить приложение .apk Glass для вашего клиента? Android-приложение Wi-Fi-устройство – подключение к AP Navigator.geolocation.getCurrentPosition не работает на android google chrome Android-студия logcat не работает

Добавление расстояния до координаты GPS

Я пытаюсь создать некоторые точки на случайных расстояниях от неподвижной точки с помощью GPS.

Как добавить расстояние в метрах к координате GPS? Я посмотрел на UTM на GPS-преобразование, но есть ли более простой способ достичь этого?

На всякий случай я работаю на платформе Android.

Приветствия, fgs

Solutions Collecting From Web of "Добавление расстояния до координаты GPS"

  • P0 (lat0, lon0): начальное положение (единица измерения: градусы )
  • Dx, dy: случайные смещения от вашего исходного положения в метрах

Вы можете использовать приближение для вычисления положения рандомизированной позиции:

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

Это довольно точно, если смещение случайного расстояния ниже 10-100 км

Редактирование: конечно, в Java Math.cos () ожидает, что радианы используют Math.cos(Math.PI/180.0*lat0) если lat0 находится в градусах, как предполагалось выше.

Чтобы взять квадрат, я использую это:

  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; } 

Это возвращает массив с 4 координатами, с ними вы можете сделать квадрат с исходной точкой в ​​центре.

Подробный план приведен на http://www.movable-type.co.uk/scripts/latlong.html .

Если вам где-то нужно перевести долготу / широту в координаты UTM (те, что используются в GPS), вы можете посмотреть на http://www.uwgb.edu/dutchs/UsefulData/UTMFormulas.htm

Если вы хотите отправиться на восток или север, запад или на юг, вы можете использовать это:

 @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; } 

Этот код разбивает линию между двумя координатами в n сегментах. Заменить расчет дельты на фиксированное расстояние

  @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); } }