我是靠谱客的博主 糊涂大地,这篇文章主要介绍【EC200U】GPS定位应用案例GPS定位案例代码使用方法,现在分享给大家,希望可以做个参考。

EC200U GPS定位应用案例

  • GPS定位案例代码
  • 使用方法

之前写了测试了一下GPS功能,今天在群里弄到了全代码~。


在这里插入图片描述

GPS定位案例代码

功能包括:GPS定位,经纬度转换,WGS84转GCJ02(火星坐标系),火星坐标系(GCJ-02)转百度坐标系(BD-09)等功能。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
import quecgnss import utime import ure import math fixFlag = 0 x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 长半轴 ee = 0.00669342162296594323 # 扁率 num=0 class Gnssdata: def main(self): global num try: if ret == 0: print('GNSS init ok.') else: print('GNSS init failed.') return -1 print(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 fixFlag if self.r1: if self.r1.group(0).split(",")[2] == 'A': # 有效定位 if num < 10: print('==============已获取到有效定位,正在过滤10次=================') print('第%d次过滤!'%num) num += 1 else: fixFlag = 1 print('############开始输出有效定位!#############') else: fixFlag = 0 except: print("Exception:read gnss data error!!!!!!!!") raise # 获取GPS模块是否定位成功 def isFix(self): global fixFlag return 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_d else: 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 0 if self.r.group(0).split(",")[6] is '1': # print('定位有效,定位模式:GPS、SPS 模式') return 1 if 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 None else: 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.0 ret += (20.0 * math.sin(lat * pi) + 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0 ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0 return 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.0 ret += (20.0 * math.sin(lng * pi) + 40.0 * math.sin(lng / 3.0 * pi)) * 2.0 / 3.0 ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 * math.sin(lng / 30.0 * pi)) * 2.0 / 3.0 return ret def 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 * pi magic = math.sin(radlat) magic = 1 - ee * magic * magic sqrtmagic = 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 + dlat mglng = lng + dlng return [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.0065 bd_lat = z * math.sin(theta) + 0.006 return [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定位应用案例GPS定位案例代码使用方法的全部内容,更多相关【EC200U】GPS定位应用案例GPS定位案例代码使用方法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部