У меня есть такой алгоритм, который показывает мне сумму расстояния всех Waypoints вместе взятых с помощью Geographic Libs.
double sum = 0.0;
const Geodesic& geod = Geodesic::WGS84();
for (int i = 1; i < MapView->waypointData.size(); i++){
double s12;
geod.Inverse(MapView->waypointData[i-1].lat, MapView->waypointData[i-1].lng, MapView->waypointData[i].lat, MapView->waypointData[i].lng, s12);
sum += s12;
}
Также я могу узнать позицию, где находится мой дрон с помощью double latitude_wgs84_radians, double longitude_wgs84_radians.
Хотелось бы посчитать расстояние, которое пролетел дрон, от точки к точки складывая это также в сумму. Не могу сообразить как это сделать.
По теореме великих кругов:
https://en.wikipedia.org/wiki/Great-circle_distance
https://ru.wikipedia.org/wiki/%D0%9E%D1%80%D1%82%D0%BE%D0%B4%D1%80%D0%BE%D0%BC%D0%B8%D1%8F
Кусочек кода:
total+=(double)6371.01*2.0*M_PI/360.0*acos(
sin((double)prev_lat/180.0*M_PI)*sin((double)lat/180.0*M_PI)
+cos((double)prev_lat/180.0*M_PI)*cos((double)lat/180.0*M_PI)
*cos((double)prev_lon/180.0*M_PI-(double)lon/180.0*M_PI)
)*180.0/M_PI;
Где координаты - это lat/lon и prev_lat/prev_lon, т.е. текущая и предыдущая точка. Просто в цикле проходимся по всем вейпоинтам и суммируем. Результат примерный, погрешность в 0.5%
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости