EC20 GPS模块 百度地图
就是想显示出来接收器当前的位置,后端是一个树莓派,使用串口和EC20通讯获取GPS数据。
地图展示
再放一个标志图在IIS目录下
![]()
这里有个问题,EC20直接出来的坐标并不是百度地图的坐标,两个的体系标准不一样。需要在使用百度地图的API去进行坐标转换。随便写了一个小程序,使用python使用串口通讯,获取GPS信息。同时也是一个简易的com terminal
from flask import request, Flask, jsonify, Responseapp = Flask(__name__)
app.config['JSON_AS_ASCII'] = False@app.route('/gps', methods=['GET'])
def post_Data():global lati, longirecognize_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 jsonSERIAL_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() # 位置4if count != 0:recv = ser_cmd.read(count) # 位置5print(recv)ser_cmd.flushInput()time.sleep(0.1) # 位置8def main_recv_gps():while True:count = ser_gps.inWaiting() # 位置4if count != 0:recv = ser_gps.read(count) # 位置5result = re.findall(r"\$GPGGA,.*\r\n", recv.decode('ascii')) # only show GPGGAif 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 * -1print("[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!")passelse:print("正在搜星定位,三分钟内无法定位请检查天线...")else:print("Something went odd.")ser_gps.flushInput()time.sleep(0.1) # 位置8def main_send():while True:command = input()command = command.encode('ascii') + b'\r\n'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, 0app.run(debug=False, host='0.0.0.0', port=8888)th1.join()th2.join()th3.join()print("Terminated!")
结果图:


如果不更换坐标系,会偏差一公里左右。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
