C语言计算GPS坐标方位角和仰角 - 代码示例
#include <stdio.h> #include <math.h>
#define PI 3.1415926
// 计算两个点之间的距离 double distance(double lat1, double lon1, double alt1, double lat2, double lon2, double alt2) { double dlat = (lat2 - lat1) * PI / 180.0; double dlon = (lon2 - lon1) * PI / 180.0; double dalt = alt2 - alt1; double a = sin(dlat / 2) * sin(dlat / 2) + cos(lat1 * PI / 180.0) * cos(lat2 * PI / 180.0) * sin(dlon / 2) * sin(dlon / 2); double c = 2 * atan2(sqrt(a), sqrt(1 - a)); double d = 6371 * c * 1000; // 6371为地球半径,单位为千米,将距离转换为米 double h = sqrt(d * d + dalt * dalt); return h; }
// 计算方位角 double azimuth(double lat1, double lon1, double alt1, double lat2, double lon2, double alt2) { double dlat = (lat2 - lat1) * PI / 180.0; double dlon = (lon2 - lon1) * PI / 180.0; double y = sin(dlon) * cos(lat2 * PI / 180.0); double x = cos(lat1 * PI / 180.0) * sin(lat2 * PI / 180.0) - sin(lat1 * PI / 180.0) * cos(lat2 * PI / 180.0) * cos(dlon); double brng = atan2(y, x) * 180.0 / PI; return brng >= 0 ? brng : brng + 360; // 将方位角转换为0~360度之间的值 }
// 计算仰角 double elevation(double lat1, double lon1, double alt1, double lat2, double lon2, double alt2) { double dlat = (lat2 - lat1) * PI / 180.0; double dlon = (lon2 - lon1) * PI / 180.0; double h = distance(lat1, lon1, alt1, lat2, lon2, alt2); double elv = asin((alt2 - alt1) / h) * 180.0 / PI; return elv; }
int main() { double lat1 = 30.123456, lon1 = 104.123456, alt1 = 420; double lat2 = 20.123456, lon2 = 50.123456, alt2 = 100000; double dist = distance(lat1, lon1, alt1, lat2, lon2, alt2); double azim = azimuth(lat1, lon1, alt1, lat2, lon2, alt2); double elev = elevation(lat1, lon1, alt1, lat2, lon2, alt2); printf('两点之间的距离为:%.2lf米 ', dist); printf('两点之间的方位角为:%.2lf度 ', azim); printf('两点之间的仰角为:%.2lf度 ', elev); return 0; }
原文地址: https://www.cveoy.top/t/topic/owBp 著作权归作者所有。请勿转载和采集!