您的位置:首页 > 其它

GPS数据转换为OneNet需要的数据

2016-09-24 20:46 162 查看

GPS的数据格式是DDMM.MMMMMM

获取到的GPS帧数据比如是:$GNRMC,112317.000,A,3438.1633,N,11224.4992,E,0.19,186.95,240916,,,A*7D

说明

经度112°24.4992′

纬度34°38.1633′

OneNet支持的GPS数据经测试是DD.DDDDD,因此需要转换

经度为 112+24.4992/60 = 112.40832

纬度为 34+38.1633/60 = 34.636055

上传到GPS的数据流为

{"datastreams":[{"id":"location","datapoints":[{"value":{"lon":112.40832,"lat":34.636055}}]}]}

OneNet的GPS坐标是经过百度地图纠偏过的,所以这部分转换交给平台,直接上传上面的数据即可

用Arduino测试下转换计算过程:

char lon_str[] = "11224.4992";
char lat_str[] = "3438.1633";

double longitudeToOnenetFormat()
{
double lon_temp = 0;
long lon_Onenet = 0;
int dd_int = 0;
long mm_int = 0;
double lon_Onenet_double = 0;

lon_temp = atof(lon_str);
lon_Onenet =lon_temp*100000;  //转换为整数

dd_int = lon_Onenet/10000000; //取出dd

mm_int = lon_Onenet%10000000;  //取出MM部分

lon_Onenet_double = dd_int + (double)mm_int/60/100000;//换算为Onenet格式
return  lon_Onenet_double;
}

double latitudeToOnenetFormat()
{
double lat_temp = 0;
long lat_Onenet = 0;
int dd_int = 0;
long mm_int = 0;

double lat_Onenet_double = 0;

lat_temp = atof(lat_str);
lat_Onenet =lat_temp*100000;  //转换为整数

dd_int = lat_Onenet/10000000; //取出dd

mm_int = lat_Onenet%10000000;  //取出MM部分

lat_Onenet_double = dd_int + (double)mm_int/60/100000;//换算为Onenet格式
return  lat_Onenet_double;
}

void setup() {
// put your setup code here, to run once:

Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Serial.println(longitudeToOnenetFormat(),5);
Serial.println(latitudeToOnenetFormat(),5);
}

void loop(){

}

串口计算后输出内容

用到double类型,略微有偏差,这个偏差经过计算大概在地图上能差别1米内

112.40832
34.63605
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐