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定位应用案例相关推荐

  1. 开发板测试手册——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 ...

  2. Delphi APP 開發入門(五)GPS 定位功能

    Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3 ...

  3. 【错误记录】BLE 蓝牙搜索失效 ( 关闭了 GPS 定位导致的问题 | 蓝牙串口工具推荐 )

    文章目录 一.报错信息 二.解决方案 三.蓝牙串口工具推荐 一.报错信息 在手机上使用 BLE 蓝牙搜索功能 , 搜索不到蓝牙设备 ; 这种状态下可以根据蓝牙地址连接蓝牙设备 , 但是无法搜索到该设备 ...

  4. 【转】GPS定位原理

    一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离 ...

  5. 【小项目关键技术六】控制北斗 GPS 定位 / UWB 室内定位

    文章目录 UWB 定位 GPS 定位 UWB 定位 产品链接:维特智能UWB室内定位传感器模块平面坐标二维厘米级通讯距离测量 产品资料地址:(打开网站搜索型号获取资料) 模块实物如下: 指令 功能 0 ...

  6. Android之应用APN、WIFI、GPS定位小例子

    转自一个网上项目,由于是例子打包下载,出处不详.例子中自我写入注释. Activity类: package com.maxtech.common; import com.maxtech.common. ...

  7. 怎么让车辆gps定位失效_如何更有效地检测车辆gps定位器?

    GPS定位器可以帮助我们管理我们心爱的汽车,在任何时候定位和查询车辆的位置,并跟踪车辆防盗,一些汽车公司和公共交通企业也可以管理和调度车队,管理数据,并根据GPS定位器分析数据,实现智能和现代交通. ...

  8. ionic cordova 引用百度地图以及利用手机GPS定位

    首先引入百度地图 在html文件里面加入 <head> <script type="text/javascript" src="http://api.m ...

  9. HTML5缓存和GPS定位

    HTML5缓存 我们在访问网站的时候,会从网站服务器中下载很多数据,其中包括css文件.图片文件.js文件.音频文件等等,有时候一个页面这种零零散散的文件就要下载上百个,可以打开浏览器的开发者工具,点 ...

最新文章

  1. 人工智能与人类智能的竞赛:人机对抗智能技术全梳理
  2. Python sort
  3. 真执着 卡巴斯基和Palo Alto找到了BlackEnergy和ExPetr的相似代码
  4. php常用操作字符串函数,php字符串几个常用的操作函数
  5. 科大星云诗社动态20210218
  6. Vue010_ 过滤器
  7. python getattr和getattribute_python中__getattr__和__getattribute__区别
  8. php如何进行错误处理,php如何自定义错误处理
  9. 【Log历练手册】Spring事务管理不能提交异常
  10. VC的function类说明 -- 继续
  11. 绝大多数人努力程度之低,根本轮不上拼天赋
  12. 比较PAFF和MBAFF
  13. 使用vue-print-nb打印element table时表格打印不全的问题
  14. CXF报错及解决方案
  15. (非常重要).Net Core应用框架Util介绍(学习Util)
  16. 时空大数据与智慧城市
  17. 用c语言编写一个完整的实现单链表,如何用c语言实现两个单链表的归并
  18. 在一个js文件中引入另一个js文件
  19. 基于MATLAB的Kmeans聚类算法的仿真与分析
  20. python实现系统公网和私网流量监控

热门文章

  1. 湖南科技大学计算机学院刘红杨,湖南科技大学计算机科学与工程学院王晓亮教授指导本科生团队在机器翻译算法的准确性上取得新进展...
  2. 编码转换以及乱码恢复
  3. 外卖订餐APP开发和解决方案
  4. BotFramework-WebChat 实现点击标签发送消息
  5. android读写位图,android - 从矢量绘图获取位图
  6. Python tkinter -- 第14章 列表框(Listbox)属性
  7. AP微积分应该怎么学?
  8. 快速刷通PWN——序
  9. FPGA 视频拼接器的架构
  10. 搜索插件实现热搜词,历史查询功能