GPS координаты, добавляющие метры с неверным результатом наклона

#java #gps

#java #gps

Вопрос:

У меня есть эта функция, когда я хочу добавить расстояние в метрах (x и y) под заданным углом к существующим координатам (широта / долгота):

  * Calculates a new GPS coordinate from given coordinates and a given movement distances in meters
 *
 * @param lat0  the latitude to move from
 * @param long0 the longitude to move from
 * @param dx    the distance to move on the x axis in meters. Use positive values to move to the east(right) and negative values to move to the west(left)
 * @param dy    the distance to move on the y axis in meters. Use positive values to move to the north (up) and negative values to move to the south(down)
 * @return a new double array containing the target coordinates: [latitude, longitude]
 */
public double[] calculateCoordinatesAfterMove(double lat0, double long0, double dx, double dy) {
    double lat = lat0   (180 / Math.PI) * (dy / 6378137);
    double lon = long0   (180 / Math.PI) * (dx / 6378137) / Math.cos(Math.PI / 180.0 * lat0);
    return new double[]{lat, lon};
}

public double[] calculateCoodinatesAfterMove(Waypoint w, double dx, double dy, double angle) {
    return calculateCoordinatesAfterMove(w, dx * Math.cos(angle * Math.PI / 180), dy * Math.sin(angle * Math.PI / 180));
}

public double[] calculateCoordinatesAfterMove(double lat0, double long0, double dx, double dy, double angle) {
    return calculateCoordinatesAfterMove(lat0, long0, dx * Math.cos(angle * Math.PI / 180), dy * Math.sin(angle * Math.PI / 180));
}
  

У меня также есть функция, которая вычисляет азимут между двумя координатами, и я проверил, что эта функция верна.

Проблема в том, что приведенная выше функция не создает путевые точки с указанным углом.
Вот пример вызова, в котором я указываю угол 64:

 double[] resultMove = coordinateCalculator.calculateCoordinatesAfterMove(48.993268432102354, 8.395133104531464, 10, 5, 64);
        System.out.println(resultMove[0]   ", "   resultMove[1]);
        System.out.println("Calculated angle: "   coordinateCalculator.calculateAngleBetweenWaypoints(
                48.993268432102354, 8.395133104531464, resultMove[0], resultMove[1]
        ));
  

который дает мне вычисленную путевую точку:

 48.993308802123806, 8.395193120821242
  

и вычисленный угол между этим и начальной точкой равен 44,2 ххх градусам, который является правильным (проверил это здесь:https://www.movable-type.co.uk/scripts/latlong.html )

Широты и долготы всегда передаются, как показано в примере, который должен быть в радианах. Поправьте меня, если такое представление является градусом 🙂

Может ли кто-нибудь помочь мне, почему моя функция не возвращает путевую точку под нужным углом?

Комментарии:

1. попробуйте это в градусах… если это работает, это градусы..

2. Не могли бы вы это объяснить? Что мне нужно изменить в моем коде, чтобы использовать degree?

3. Вы не путаете локсодромы и ортодромы , не так ли?

4. @HighPerformanceMark никогда не слышал об этом:

5. Что ж, зайдите в ‘net и найдите разницу, это может иметь отношение к вашей проблеме. Если нет, вы выучили два новых странных слова.