就是想显示出来接收器当前的位置,后端是一个树莓派,使用串口和EC20通讯获取GPS数据。
复制代码
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<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} </style> <script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=【API_KEY】"></script> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <title>地图展示</title> </head> <body> <div id="allmap"></div> </body> </html> <script type="text/javascript"> // 百度地图API功能-Init var map = new BMapGL.Map("allmap"); $.getJSON('http://192.168.1.106:8888/gps', function(data){ var point = new BMapGL.Point(data.longi, data.lati); map.centerAndZoom(point, 15); }); function refresh_gps(){ $.getJSON('http://192.168.1.106:8888/gps', function(data){ console.log(data); var json = data; // 创建小车图标 var pt = new BMapGL.Point(json.longi, json.lati); var myIcon = new BMapGL.Icon("car.png", new BMapGL.Size(40, 20)); var marker = new BMapGL.Marker(pt, {icon: myIcon}); // 创建标注 map.addOverlay(marker); // 将标注添加到地图中 }) var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象 httpRequest.open('POST', '', true); //第二步:打开连接/***发送json格式文件必须设置请求头 ;如下 - */ httpRequest.setRequestHeader("Content-type","application/json");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头) //var obj = { gps: 1 }; //httpRequest.send(JSON.stringify(obj));//发送请求 将json写入send中 httpRequest.send(); httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中 if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功 } }; } setInterval(refresh_gps, 1000); </script>
再放一个标志图在IIS目录下
这里有个问题,EC20直接出来的坐标并不是百度地图的坐标,两个的体系标准不一样。需要在使用百度地图的API去进行坐标转换。随便写了一个小程序,使用python使用串口通讯,获取GPS信息。同时也是一个简易的com terminal
复制代码
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
95from flask import request, Flask, jsonify, Response app = Flask(__name__) app.config['JSON_AS_ASCII'] = False @app.route('/gps', methods=['GET']) def post_Data(): global lati, longi recognize_info = {"lati": lati, "longi": longi} headers = {'Access-Control-Allow-Origin': '*'} return jsonify(recognize_info), 200, headers # -*- coding:utf-8 -*- import serial import time import threading import sys import re import requests import json SERIAL_COMMAND = "/dev/ttyUSB2" SERIAL_GPSDATA = "/dev/ttyUSB1" ser_cmd = serial.Serial(SERIAL_COMMAND, 115200) ser_gps = serial.Serial(SERIAL_GPSDATA, 115200) ser_cmd.flushInput() ser_gps.flushInput() def main_recv_cmd(): while True: count = ser_cmd.inWaiting() # 位置4 if count != 0: recv = ser_cmd.read(count) # 位置5 print(recv) ser_cmd.flushInput() time.sleep(0.1) # 位置8 def main_recv_gps(): while True: count = ser_gps.inWaiting() # 位置4 if count != 0: recv = ser_gps.read(count) # 位置5 result = re.findall(r"$GPGGA,.*rn", recv.decode('ascii')) # only show GPGGA if len(result) != 0: result = result[0] result = result.split(',') if len(result[2]) != 0: global lati, longi _lati = int(result[2][:2]) + float(result[2][2:]) / 60 _longi = int(result[4][:3]) + float(result[4][3:]) / 60 _lati = _lati if "N" in result[3] else _lati * -1 _longi = _longi if "E" in result[5] else _longi * -1 print("[Raw] - 纬度:%s , 经度:%s , 可用卫星数:%s" % (_lati, _longi, result[7])) try: r = requests.get(url="http://api.map.baidu.com/geoconv/v1/?coords=%s,%s&from=1&to=5&ak=【API_KEY】" % (_longi, _lati)) xy = json.loads(r.content.decode('utf-8'))["result"][0] print("[Baidu] - 纬度:%s , 经度:%s" % (xy["y"], xy["x"])) lati, longi = xy["y"], xy["x"] except: print("Convert to Baidu Coordination failed! Check the Internet connection!") pass else: print("正在搜星定位,三分钟内无法定位请检查天线...") else: print("Something went odd.") ser_gps.flushInput() time.sleep(0.1) # 位置8 def main_send(): while True: command = input() command = command.encode('ascii') + b'rn' ser_cmd.write(command) if __name__ == '__main__': th1 = threading.Thread(target=main_recv_cmd) th1.start() th3 = threading.Thread(target=main_recv_gps) th3.start() th2 = threading.Thread(target=main_send) th2.start() lati, longi = 0, 0 app.run(debug=False, host='0.0.0.0', port=8888) th1.join() th2.join() th3.join() print("Terminated!")
结果图:
如果不更换坐标系,会偏差一公里左右。
最后
以上就是内向康乃馨最近收集整理的关于EC20 GPS模块 百度地图的全部内容,更多相关EC20内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复