【EC200U】GPS定位应用案例
EC200U GPS定位应用案例
- GPS定位案例代码
- 使用方法
之前写了测试了一下GPS功能,今天在群里弄到了全代码~。
GPS定位案例代码
功能包括:GPS定位,经纬度转换,WGS84转GCJ02(火星坐标系),火星坐标系(GCJ-02)转百度坐标系(BD-09)等功能。
import quecgnss
import utime
import ure
import mathfixFlag = 0
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626 # π
a = 6378245.0 # 长半轴
ee = 0.00669342162296594323 # 扁率
num=0class Gnssdata:def main(self):global numtry:if ret == 0:print('GNSS init ok.')else:print('GNSS init failed.')return -1print(quecgnss.get_state())data = quecgnss.read(4096)gnss_data = data[1].decode()# 正则对获取到的定位数据进行截取self.r = ure.search("GNGGA(.+?)M", gnss_data)self.r1 = ure.search("GNRMC(.+?)M", gnss_data)self.r2 = ure.search("GPGSV(.+?)M", gnss_data)self.r3 = ure.search("GNVTG(.+?)M", gnss_data)global fixFlagif self.r1:if self.r1.group(0).split(",")[2] == 'A': # 有效定位if num < 10:print('==============已获取到有效定位,正在过滤10次=================')print('第%d次过滤!'%num)num += 1else:fixFlag = 1print('############开始输出有效定位!#############')else:fixFlag = 0except:print("Exception:read gnss data error!!!!!!!!")raise# 获取GPS模块是否定位成功def isFix(self):global fixFlagreturn fixFlag# 获取GPS模块定位的经纬度信息def getLocation(self):if self.isFix() is 1:lat = float(self.r.group(0).split(",")[2])# // 100 + float(float(float(self.r.group(0).split(",")[2]) % 100) / 60) #lat_d = self.r.group(0).split(",")[3] #log = float(self.r.group(0).split(",")[4])# // 100 + float(float(float(self.r.group(0).split(",")[4]) % 100) / 60) #log_d = self.r.group(0).split(",")[5] #return lat, lat_d, log, log_delse:return None# 获取GPS模块授时的UTC时间def getUtcTime(self):return self.r.group(0).split(",")[1]# 获取GPS模块定位模式def getLocationMode(self):if self.r.group(0).split(",")[6] is '0':# print('定位不可用或者无效')return 0if self.r.group(0).split(",")[6] is '1':# print('定位有效,定位模式:GPS、SPS 模式')return 1if self.r.group(0).split(",")[6] is '2':# print('定位有效,定位模式: DGPS、DSPS 模式')return 2# 获取GPS模块定位使用卫星数量def getUsedSateCnt(self):return self.r.group(0).split(",")[7]# 获取GPS模块定位可见卫星数量def getViewedSateCnt(self):return self.r2.group(0).split(",")[3]# 获取GPS模块定位方位角 范围:0~359。以真北为参考平面。def getCourse(self):return self.r2.group(0).split(",")[6]# 获取GPS模块对地速度(单位:KM/h)def getSpeed(self):if self.r1.group(0).split(",")[7] == '':return Noneelse:return float(self.r1.group(0).split(",")[7]) * 1.852# 获取GPS模块定位大地高(单位:米)def getGeodeticHeight(self):return self.r.group(0).split(",")[9]# 纬度转换def _transformlat(self, lng, lat):ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + \0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lat * pi) + 40.0 *math.sin(lat / 3.0 * pi)) * 2.0 / 3.0ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *math.sin(lat * pi / 30.0)) * 2.0 / 3.0return ret# 经度转换def _transformlng(self, lng, lat):ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lng * pi) + 40.0 *math.sin(lng / 3.0 * pi)) * 2.0 / 3.0ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *math.sin(lng / 30.0 * pi)) * 2.0 / 3.0return retdef wgs84_to_gcj02(self, lng, lat):"""WGS84转GCJ02(火星坐标系):param lng:WGS84坐标系的经度:param lat:WGS84坐标系的纬度:return:"""dlat = gnss._transformlat(lng - 105.0, lat - 35.0)dlng = gnss._transformlng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)mglat = lat + dlatmglng = lng + dlngreturn [mglng, mglat]def gcj02_to_bd09(self, lng, lat):"""火星坐标系(GCJ-02)转百度坐标系(BD-09)谷歌、高德——>百度:param lng:火星坐标经度:param lat:火星坐标纬度:return:"""z = math.sqrt(lng * lng + lat * lat) + 0.00002 * math.sin(lat * x_pi)theta = math.atan2(lat, lng) + 0.000003 * math.cos(lng * x_pi)bd_lng = z * math.cos(theta) + 0.0065bd_lat = z * math.sin(theta) + 0.006return [bd_lng, bd_lat]def ddmmtodd(self, lng, lat):lng = str(lng / 100)lng = lng.split(".")[0] + "." + str(int((lng.split("."))[1]) / 100 * 100 / 60).replace(".", "")[:9]lat = str(lat / 100)lat = lat.split(".")[0] + "." + str(int((lat.split("."))[1]) / 100 * 100 / 60).replace(".", "")[:9]return [float(lng), float(lat)]if __name__ == '__main__':gnss = Gnssdata()ret = quecgnss.init()while True:gnss.main()print('获取GPS模块是否定位成功:{}(0表示失败,1表示成功)'.format(gnss.isFix()))if gnss.isFix() == 1:wgs_data = gnss.getLocation()print('获取GPS原始坐标(WGS-84)(ddmm.mmmm格式)的经度为:{},纬度信息:{}'.format(wgs_data[2], wgs_data[0]))ddmm_to_dd = gnss.ddmmtodd(wgs_data[2], wgs_data[0])dd_to_gcj02= gnss.wgs84_to_gcj02(ddmm_to_dd[0], ddmm_to_dd[1])gcj02_to_bd09 = gnss.gcj02_to_bd09(dd_to_gcj02[0], dd_to_gcj02[1])print('火星坐标系(高德地图)坐标为:\n经度:{}\n纬度:{}'.format(dd_to_gcj02[0],dd_to_gcj02[1]))print('最终百度地图的坐标为:\n经度:{}\n纬度:{}'.format(gcj02_to_bd09[0], gcj02_to_bd09[1]))print('获取GPS模块定位可见卫星数量:{}'.format(gnss.getViewedSateCnt()))print('获取GPS模块定位方位角范围在0和359之间,以真北为参考平面:{}'.format(gnss.getCourse()))print('获取GPS模块定位大地高:{}米'.format(gnss.getGeodeticHeight()))print('获取GPS模块对地速度:{}KM/h'.format(gnss.getSpeed()))utime.sleep(3)
使用方法
基础用法自行查看:EC200U GPS定位
将GPS天线模块接到开发板的GNSS上
GPS定位探头,带字部分朝下放到室外!
不按说明放,可能就↓
执行后,等待中
执行成功,过滤数据
执行成功返回经纬度~
【EC200U】GPS定位应用案例相关推荐
- 开发板测试手册——USB 4G 模块、GPS 定位功能操作步骤详解(3)
目录 4 USB 4G 模块测试 41 4.1 网络功能测试 42 4.2 短信功能测试 43 4.3 GPS 定位功能测试 44 4.4 通话功能测试 45 4.5 测试程序编译 46 5 USB ...
- Delphi APP 開發入門(五)GPS 定位功能
Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3 ...
- 【错误记录】BLE 蓝牙搜索失效 ( 关闭了 GPS 定位导致的问题 | 蓝牙串口工具推荐 )
文章目录 一.报错信息 二.解决方案 三.蓝牙串口工具推荐 一.报错信息 在手机上使用 BLE 蓝牙搜索功能 , 搜索不到蓝牙设备 ; 这种状态下可以根据蓝牙地址连接蓝牙设备 , 但是无法搜索到该设备 ...
- 【转】GPS定位原理
一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离 ...
- 【小项目关键技术六】控制北斗 GPS 定位 / UWB 室内定位
文章目录 UWB 定位 GPS 定位 UWB 定位 产品链接:维特智能UWB室内定位传感器模块平面坐标二维厘米级通讯距离测量 产品资料地址:(打开网站搜索型号获取资料) 模块实物如下: 指令 功能 0 ...
- Android之应用APN、WIFI、GPS定位小例子
转自一个网上项目,由于是例子打包下载,出处不详.例子中自我写入注释. Activity类: package com.maxtech.common; import com.maxtech.common. ...
- 怎么让车辆gps定位失效_如何更有效地检测车辆gps定位器?
GPS定位器可以帮助我们管理我们心爱的汽车,在任何时候定位和查询车辆的位置,并跟踪车辆防盗,一些汽车公司和公共交通企业也可以管理和调度车队,管理数据,并根据GPS定位器分析数据,实现智能和现代交通. ...
- ionic cordova 引用百度地图以及利用手机GPS定位
首先引入百度地图 在html文件里面加入 <head> <script type="text/javascript" src="http://api.m ...
- HTML5缓存和GPS定位
HTML5缓存 我们在访问网站的时候,会从网站服务器中下载很多数据,其中包括css文件.图片文件.js文件.音频文件等等,有时候一个页面这种零零散散的文件就要下载上百个,可以打开浏览器的开发者工具,点 ...
最新文章
- 人工智能与人类智能的竞赛:人机对抗智能技术全梳理
- Python sort
- 真执着 卡巴斯基和Palo Alto找到了BlackEnergy和ExPetr的相似代码
- php常用操作字符串函数,php字符串几个常用的操作函数
- 科大星云诗社动态20210218
- Vue010_ 过滤器
- python getattr和getattribute_python中__getattr__和__getattribute__区别
- php如何进行错误处理,php如何自定义错误处理
- 【Log历练手册】Spring事务管理不能提交异常
- VC的function类说明 -- 继续
- 绝大多数人努力程度之低,根本轮不上拼天赋
- 比较PAFF和MBAFF
- 使用vue-print-nb打印element table时表格打印不全的问题
- CXF报错及解决方案
- (非常重要).Net Core应用框架Util介绍(学习Util)
- 时空大数据与智慧城市
- 用c语言编写一个完整的实现单链表,如何用c语言实现两个单链表的归并
- 在一个js文件中引入另一个js文件
- 基于MATLAB的Kmeans聚类算法的仿真与分析
- python实现系统公网和私网流量监控