У меня есть эта функция, где я хочу добавить расстояние в метрах (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,2XXX градусов, который является правильным (проверил здесь: https://www.movable -type.co.uk / scripts / latlong.html )
Широты и долготы всегда передаются, как показано в примере, который должен быть радиан. Поправьте меня, если это представление степени:)
Может ли кто-нибудь помочь мне, почему моя функция не возвращает путевую точку под нужным углом?