当前位置:网站首页>GPS original coordinates to Baidu map coordinates (pure C code)
GPS original coordinates to Baidu map coordinates (pure C code)
2022-07-05 14:45:00 【Hua Weiyun】
One 、 Introduction to the environment
GPS Module model : Zhongke microelectronics GPS modular
GPS Output raw data frame :
$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F$GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D$GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37$BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A$GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B$GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C$GPGSV,3,3,10,31,50,287,36,32,66,018,*7F$BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62$GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D$GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14$GNZDA,114955.000,06,11,2017,00,00*47$GPTXT,01,01,01,ANTENNA OK*35Two 、 Demand is introduced
obtain GPS After the original coordinate data , Want to use Baidu map API The interface directly displays the actual positioning .
The international longitude and latitude coordinate standard is WGS-84, At least the National Survey Bureau must be used in China GCJ- 02, Encrypt the location for the first time .
Baidu coordinates on this basis , the BD-09 Secondary encryption measures , More protection of personal privacy .
The coordinate system of Baidu's external interface is not GPS Collected true classics latitude , It needs to be converted through the coordinate conversion interface .
3、 ... and 、C The language code
The following code is in QtCreator Written in , Code can be ported to any support C Compile and run in the environment of language .
#include <QCoreApplication>#include <QString>#include <QDebug>extern C;{#include <math.h>;}class GPS_Data{public: double lat; // latitude double lng; // longitude QString GPS_Data;};class GPS_Data gps_data;void GPS_ReadUasrtData();#define M_PI 3.14159265358979324double a = 6378245.0;double ee = 0.00669342162296594323;double x_pi = M_PI * 3000.0 / 180.0;double wgs2gcj_lat(double x, double y){ double ret1 = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x)); ret1 += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0; ret1 += (20.0 * sin(y * M_PI) + 40.0 * sin(y / 3.0 * M_PI)) * 2.0 / 3.0; ret1 += (160.0 * sin(y / 12.0 * M_PI) + 320 * sin(y * M_PI / 30.0)) * 2.0 / 3.0; return ret1;}double wgs2gcj_lng(double x, double y){ double ret2 = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x)); ret2 += (20.0 *sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0; ret2 += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0; ret2 += (150.0 *sin(x / 12.0 * M_PI) + 300.0 * sin(x / 30.0 * M_PI)) * 2.0 / 3.0; return ret2;}void wgs2gcj(double *lat,double *lng){ double dLat = wgs2gcj_lat(*lng - 105.0, *lat - 35.0); double dLon = wgs2gcj_lng(*lng - 105.0, *lat - 35.0); double radLat = *lat / 180.0 * M_PI; double magic = sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI); dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI); *lat = *lat + dLat; *lng = *lng + dLon;}void gcj2bd(double *lat,double *lng){ double x = *lng, y = *lat; double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi); double theta = atan2(y, x) + 0.000003 * cos(x * x_pi); *lng = z * cos(theta) + 0.0065; *lat = z * sin(theta) + 0.006;}int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); GPS_ReadUasrtData(); // obtain GPS The original coordinates double lat=gps_data.lat; double lng=gps_data.lng; // Coordinate transformation wgs2gcj(&lat,&lng); gcj2bd(&lat,&lng); // Get the coordinates of Baidu map , It can be displayed directly on Baidu map qDebug()<<" latitude : "<<QString("%1").arg(lat,0,'g',13); qDebug()<<" longitude : "<<QString("%1").arg(lng,0,'g',13); return a.exec();}void GPS_ReadUasrtData(){ /*GPS Original data frame */ gps_data.GPS_Data="$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F" "$GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D" "$GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37" "$BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A" " $GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B" "$GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C" "$GPGSV,3,3,10,31,50,287,36,32,66,018,*7F" "$BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62" "$GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D" "$GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14" "$GNZDA,114955.000,06,11,2017,00,00*47" "$GPTXT,01,01,01,ANTENNA OK*35"; /* analysis GPS Module data */ //QString lat; // latitude //QString lng; // longitude if(gps_data.GPS_Data.size()>200) { int index=gps_data.GPS_Data.indexOf("$GNGGA"); if(index>=0) { QString text=gps_data.GPS_Data.mid(index); if(text.size()>60) { QString lat=text.section(',',2,2); QString lng=text.section(',',4,4); if(lat.isEmpty()==false && lng.isEmpty()==false) { unsigned int int_data; double s_Longitude,s_latitude; // Convert latitude s_latitude=lat.toDouble(); s_latitude=s_latitude/100; int_data=s_latitude;// Get the latitude integer part s_latitude=s_latitude-int_data;// Get the decimal part of latitude s_latitude=(s_latitude)*100; gps_data.lat=int_data+(s_latitude/60.0); // Get the converted value // Convert longitude s_Longitude=lng.toDouble(); s_Longitude=s_Longitude/100; int_data=s_Longitude;// Get the longitude integer part s_Longitude=s_Longitude-int_data; // Get the longitude fraction s_Longitude=s_Longitude*100; //gai guo le gps_data.lng=int_data+(s_Longitude/60.0); } } } gps_data.GPS_Data.clear(); }}边栏推荐
- 通过npm 或者 yarn安装依赖时 报错 出现乱码解决方式
- easyOCR 字符识别
- LeetCode_ 2 (add two numbers)
- Thymeleaf th:classappend属性追加 th:styleappend样式追加 th:data-自定义属性
- Topology可视化绘图引擎
- Isn't it right to put money into the external market? How can we ensure safety?
- Google eventbus usage details
- Thymeleaf 常用函数
- 浅谈Dataset和Dataloader在加载数据时如何调用到__getitem__()函数
- PMP考试20天能通过吗?
猜你喜欢

有一个强大又好看的,赛过Typora,阿里开发的语雀编辑器

Thymeleaf 模板的创建与使用

Two Bi development, more than 3000 reports? How to do it?

【数组和进阶指针经典笔试题12道】这些题,满足你对数组和指针的所有幻想,come on !

729. 我的日程安排表 I :「模拟」&「线段树(动态开点)」&「分块 + 位运算(分桶)」

基于TI DRV10970驱动直流无刷电机

Microframe technology won the "cloud tripod Award" at the global Cloud Computing Conference!

乌卡时代下,企业供应链管理体系的应对策略

FR练习题目---综合题

如何将电脑复制的内容粘贴进MobaXterm?如何复制粘贴
随机推荐
做自媒體視頻二次剪輯,怎樣剪輯不算侵權
超级哇塞的快排,你值得学会!
Thymeleaf th:classappend属性追加 th:styleappend样式追加 th:data-自定义属性
开挖财上的证券账户可以吗?安全吗?
启牛学堂班主任给的证券账户安全吗?能开户吗?
PyTorch二分类时BCELoss,CrossEntropyLoss,Sigmoid等的选择和使用
计算中间件 Apache Linkis参数解读
Intelligent supply chain collaboration system solution for daily chemical products industry: digital intelligent SCM supply chain, which is the "acceleration" of enterprise transformation
【招聘岗位】基础设施软件开发人员
What about SSL certificate errors? Solutions to common SSL certificate errors in browsers
MongDB学习笔记
[detailed explanation of Huawei machine test] character statistics and rearrangement
PostgreSQL 13 installation
Opengauss database source code analysis series articles -- detailed explanation of dense equivalent query technology (Part 2)
[learning notes] stage test 1
Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
Principle and performance analysis of lepton lossless compression
NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读
Fonctions communes de thymeleaf
GPS原始坐标转百度地图坐标(纯C代码)