资产监测设备如何根据GPS定位点计算角度

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了资产监测设备如何根据GPS定位点计算角度相关的知识,希望对你有一定的参考价值。

近期笔者在从事资产监测设备的开发过程中,有客户提到了关于设备的定位问题,如何根据GPS定位点计算角度。针对该问题,笔者希望包括该客户在内的更多人群在遇到相同问题时,能够通过以下解决方案中受益。因此笔者首先需要介绍资产监测设备,其次针对该问题作出详细的解释。

资产监测设备是基于物联网技术下,利用传感器、通信模组和网络进行信息传输,帮助用户对资产的位置与状态进行实时把握。例如,用户在安排运输公司对易碎品进行运输时,可通过资产监测设备对运输车辆的位置、运动轨迹以及实时状态进行把握。用户只需要登录远程可视化平台即可完成对货物的实时追踪。

对于资产监测设备中GPS定位点计算角度问题,笔者采取以下方式:

这里假定采集3个GPS定位点,根据GPS定位点和地球半径可以计算出两点的距离,再通过反余弦函数计算出角度。
这里是计算距离的实现方法:
//根据2个经纬度(单位:度)计算实际距离(单位:米)
float get_distance(float lat1, float lng1, float lat2, float lng2)
{
float radLat1 = radian(lat1);
float radLat2 = radian(lat2);
float a = radLat1 - radLat2;
float b = radian(lng1) - radian(lng2);
float dst = 2 * asin((sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2) )));
dst = dst * EARTH_RADIUS;
dst= Get_Round(dst * 10000) / 10000;
return dst;
}
通过反余弦计算出角度:
bool GetAngleFromGps(GPS *gps,INT16S *angle)
{
float a,b,c;
double ang=0;
a = get_distance((float)gps->gps[posLast].Latitude,(float)gps->gps[posLast].Longtitude,
(float)gps->gps[posFirst].Latitude,(float)gps->gps[posFirst].Longtitude);
b = get_distance((float)gps->gps[posLast].Latitude,(float)gps->gps[posLast].Longtitude,
(float)gps->gps[posCenter].Latitude,(float)gps->gps[posCenter].Longtitude);
c = get_distance((float)gps->gps[posCenter].Latitude,(float)gps->gps[posCenter].Longtitude,
(float)gps->gps[posFirst].Latitude,(float)gps->gps[posFirst].Longtitude);
ang = acos((pow(b,2) + pow(c,2) - pow(a,2))/(2bc));
*angle = 180 - (ang * 180 / PI);
return TRUE;
}


该问题有助于帮助客户更加深入了解资产监测设备的定位功能原理,在使用该设备过程中也能够更加客观的分析相关数据。希望以上内容也能够帮助到其他同类型产品开发人员。

以上是关于资产监测设备如何根据GPS定位点计算角度的主要内容,如果未能解决你的问题,请参考以下文章

资产监测设备中I2C接口为什么要设计成开漏输出?

资产监测设备中如何利用Sqrt和atan2函数计算定位角度

资产监测技术中关于GPS定位工具中的PDOP参数

资产监测设备中,外场测试一般需要定义哪些GPS测试场景

资产监测设备中,外场测试一般需要定义哪些GPS测试场景

Yunxion资产监测设备之GNSS NEMA语句解析之GSA