树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点

完整项目为《基于机器视觉的行人和路面缺陷检测及其边缘设备部署

完整功能视频演示地址:本科最后的课设:“车载系统的辅助系统——基于机器视觉的行人和路面缺陷检测”完结撒花*罒▽罒*_哔哩哔哩_bilibili

该博客介绍的功能为:

1:树莓派通过gps+天线读取经纬度坐标(检测出路面缺陷的位置)

2:将经纬度坐标上传至服务器

3:调用高德地图api,读取服务器的经纬度,并在地图上标点。

该博客参考了以下博客和资料:

[1] (74条消息) 树莓派(四):GPS连接并读取_树莓派gps_哦吼吼231的博客-CSDN博客 

[2] (74条消息) NMEA经纬度换算_nmea坐标_牧童宇希的博客-CSDN博客

[3] (71条消息) 【高德地图API】Web地图开发系列(一)_生命是有光的的博客-CSDN博客

[4] (74条消息) 十三、JavaScript ajax请求_js ajax请求_HJHO的博客-CSDN博客

[5] (74条消息) HTML读取json文件(传递给变量)_璇焱如柳的博客-CSDN博客

[6] JS API 安全密钥使用-基础-进阶教程-地图 JS API 2.0 | 高德地图API

一、 树莓派通过gps+天线读取经纬度坐标

    我们将GPS 模块的串口输出用USB-TTL 进行了转换,因此我们直接在USB 口上读取GPS 模块传入的数据即可。

    还需要注意的是GPS 模块读取到的值并非经纬度,而是包含了经纬度信息的字符串。我们的GPS 读入的信息GNRMC_line 的格式为

        ["b'$GNRMC" , '当天UTC 时间','A表示数据有效','纬度','N- 北','精度',  'E- 东', '对地速度,单位为节', '对地真航向,单位为度', '日期(dd  为日,mm 为月,yy 为年)', '', '', "A*75\\r\\n'" ]

比如:

        [“b'$GNRMC”,'132558.000','A','3412.93903','N','11708.08969','E','0.00', '0.00', '081221', '', '', "A*75\\r\\n'" ]

    所以我们需要在数据流中找到以”b\’$GNRMC” 开头的数据,并且在该字符串数组的第五个元素和第七个元素。纬度前2 字符表示度,后面的字符表示分,需要转化为小数形式;经度前3 字符表示度,后面的字符表示分,需要转化为小数形式。

        具体代码如下:(完整功能可以复制的代码会附在整个模块讲解结束的地方,这里只是一部分)

        其中,我们打开串口,存放到ser 中,/dev/ttyUSB0 是端口名,9600 是波特率。while  True 表示一直不断检测,readline 为读取整行。我们读取以GNRMC 开头的字符串数组,然后以“,” 逗号作为分隔符把不同的数据分隔开,最后通过计算得到xxxx 分正确格式的经纬度,最后打印出来。

        如图为测试图片

图:GPS模块经纬度读取测试

二、 将经纬度坐标上传至服务器

        我们在自己的服务器上开了上传、读取和删除的接口。该部分用到上传接口。我们向接口发送了POST 请求,并将经纬度作为JSON 格式的数据发送到了该URL

    其中POST 请求是HTTP 中向服务器提交数据的请求方式。与GET 请求不同,POST 请求将数据作为请求体request body)发 送到服务器,而不是放在URL 的查询参数中。因此,POST 请求通常用于提交一些敏感数据或者比较大的数据,例如表单数据、文件上传等。

    具体代码如下:(requrl='http://124.221.239.172:8080/location'请更换为你自己开的服务器端口,该端口已经关闭不可使用)

        我们创建一个名为`rqs_headers` 的字典,这个字典将被用作请求的头部headers) 参数,告诉服务器发送的数据是JSON 格式的。Requrl 为服务器接口的URL地址。最后我们把经纬度通过json.dumps 命令转化为json 格式通过POST 指令发到服务器。如果服务器收到了,会返回响应结果,完成本次通信协议。

        第一第二节完整代码如下:

import serial
import time
import json
import requests
ser = serial.Serial("/dev/ttyUSB0",9600) #9600是GPS的波特率
while True:line = str(str(ser.readline()))# #打印所有串口数据# print(line)GNRMC_line = line# GNGLL_line = line# GNGLL_line = lineif GNRMC_line.startswith("b\'$GNRMC"):print(GNRMC_line)GNRMC_line = str(GNRMC_line).split(',')  # 将line以“,”为分隔符#GNRMC_line格式为:["b'$GNRMC", '132558.000',    'A',    '3412.93903',  'N',  '11708.08969',  'E',      '0.00',            '0.00',             '081221',                '', '', "A*75\\r\\n'"]#GNRMC_line格式为:["b'$GNRMC", '当天UTC时间', 'A表示数据有效', '纬度',    'N-北', '精度',        'E-东', '对地速度,单位为节', '对地真航向,单位为度', '日期(dd 为日,mm为月,yy为年)', '', '', "A*75\\r\\n'"]print(GNRMC_line)  #查看数据类型# 时间转化省略(需要把UTC转化为北京时间)# Lat ddmm.mmmm 纬度,前2字符表示度,后面的字符表示分,需要转化为小数形式latitude = float(GNRMC_line[3][:2]) + float(GNRMC_line[3][2:])/60# Lon dddmm.mmmm 经度,前3字符表示度,后面的字符表示分,需要转化为小数形式longitude = float(GNRMC_line[5][:3]) + float(GNRMC_line[5][3:])/60print("纬度:  " + GNRMC_line[4] + " " + str(latitude))print("经度:  " + GNRMC_line[6] + " " + str(longitude))# time.sleep(1)rqs_headers={'content-Type':'application/json'}requrl='请更换为你自己的服务器地址'new_data={"longitude":longitude,"latitude":latitude}test_data = json.dumps(new_data)response = requests.post(url=requrl,headers=rqs_headers,data=test_data)

 三、调用高德地图api,读取服务器的经纬度,并在地图上标点

        上面两节是要在树莓派自带的python编译器中运行的python代码。下面是用VScode写的html代码。

        代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="请改成你自己的高德api密钥"></script><style type="text/css">html {height: 100%}body {height: 100%;margin: 0px;padding: 0px}#container {height: 100%}.amap-icon img,.amap-marker-content img{width: 25px;height: 34px;}.marker {position: absolute;top: -20px;right: -118px;color: #fff;padding: 4px 10px;box-shadow: 1px 1px 1px rgba(10, 10, 10, .2);white-space: nowrap;font-size: 12px;font-family: "";background-color: #25A5F7;border-radius: 3px;}</style>
</head><body><div id="container"></div><script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>   <!--  导入jQuery包--><script type="text/javascript">var map = new AMap.Map('container', {zoom: 11, //级别center: [116.397428, 39.90923], //中心点坐标viewMode: '3D' //使用3D视图});$.ajax({url: "请换为你的服务器端口",//json文件位置,文件名type: "GET",//请求方式为getdataType: "json", //返回数据格式为jsonasync: false,success: function(data) {position_list=$.parseJSON(JSON.stringify(data));  // 将string转换成可操作的objectconsole.log(position_list[0])for (var i=0;i<position_list.length;i++){marker = new AMap.Marker({icon: "\poi-marker-default.png",position: [position_list[i].longitude,position_list[i].latitude],offset: new AMap.Pixel(-13, -30)});marker.setMap(map);}}});	
//请求成功完成后要执行的方法  </script>
</body>
</html>

        以上的代码可以把服务器的里的经纬度数据遍历一遍并且显示在地图画布上。效果如下:

        我们还给每个Marker 对象添加一个事件监听器,以便监听点击操作。在使用者点击marker 后能够用infowindow 对象的open 方法将信息窗口显示在地图上,并将其链接到marker 的位置上。 

         效果如下图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/17799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初步了解c#编程语言--(1)

初识c#编程语言 一、见识c#语言编写的各类应用程序 关于用c#语言编写的各类应用程序有以下几种&#xff1a; 1.Console 在编写Console程序时&#xff0c;要注意创建项目时&#xff0c;是选择控制台应用程序&#xff08;Console Application&#xff09;&#xff0c;在这里…

正泰电力携手图扑:VR 变电站事故追忆反演

VR(Virtual Reality&#xff0c;虚拟现实)技术作为近年来快速发展的一项新技术&#xff0c;具有广泛的应用前景&#xff0c;支持融合人工智能、机器学习、大数据等技术&#xff0c;实现更加智能化、个性化的应用。在电力能源领域&#xff0c;VR 技术在高性能计算机和专有设备支…

qssh使用

到官网下载qssh的源码QSsh-botan-1&#xff0c;使用qtcreator打开后&#xff0c;直接编译&#xff0c;即可得到qssh的库 头文件将QSsh-botan-1\src\libs\ssh目录下的.h文件拷到include文件夹下&#xff0c;即为库头文件。 qssh有个问题&#xff0c;如果你将qssh的类放在子线程…

25.10 matlab里面的10中优化方法介绍—— 函数fmincon(matlab程序)

1.简述 关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中&#xff0c;为了便于我们理解&#xff0c;引导我们进入规划模型的一种情况。相比之下&#xff0c;非线性规划会更加贴近…

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

使用ansible playbook编写lnmp架构

使用ansible playbook编写lnmp架构 - name: nginx playgather_facts: falsehosts: lnmpremote_user: roottasks: - name: stop firewalldservice: namefirewalld statestopped- name: syslinuxcommand: /usr/sbin/setenforce 0ignore_errors: true- name: nginx.repocopy: src/…

DLA :pytorch添加算子

pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子(例如&#xff0c;您可能希望 使用您在论文中找到的新颖激活函数&#xff0c;或实现操作 您作为研究的一部分进行了开发。)&#xff0c;需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据&#…

Eureka 学习笔记4:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

gitlab配置webhook

一.前言 当需要做jenkins的自动化触发构建时&#xff0c;就需要配置gitlab的webhook功能&#xff0c;以下来展示以下如何配置gitlab的webhook&#xff0c;jenkins的配置就不在这里展示了&#xff0c;可以去看我devops文章的完整配置 二.配置 在新版本的gitlab中&#xff0c…

《TCP IP网络编程》第十四章

第 14 章 多播与广播 14.1 多播 多播&#xff08;Multicast&#xff09;方式的数据传输是基于 UDP 完成的。因此 &#xff0c;与 UDP 服务器端/客户端的实现方式非常接近。区别在于&#xff0c;UDP 数据传输以单一目标进行&#xff0c;而多播数据同时传递到加入&#xff08;注…

微服务体系<2> ribbon

1. 什么是负载均衡 比如说像这样 一个请求打在了nginx上 基于nginx进行负载分流 这就是负载均衡但是负载均衡分 服务端负载均衡和客户端负载均衡 客户端负载均衡 我user 从注册中心拉取服务 拉取order列表&#xff0c;然后发起getOne()调用 这就是客户端负载均衡 特点就是我…

小程序如何将商品添加到分类

​将商品添加到分类是非常重要的功能&#xff0c;可以让商家更方便地管理分类和商品。下面将具体介绍如何将产品添加到分类中。 步骤一&#xff1a;选中商品 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。找到需要添加的商品&#xff0c;然后选中它。…

Codeforces Round 889 (Div. 2)(视频讲解A——D)

文章目录 A Dalton the TeacherB Longest Divisors IntervalC2 Dual (hard Version)D Earn or Unlock Codeforces Round 889 (Div. 2)&#xff08;视频讲解A——D&#xff09; A Dalton the Teacher #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f us…

【Golang 接口自动化05】使用yml管理自动化用例

目录 YAML 基本语法 对象&#xff1a;键值对的集合(key:value) 数组&#xff1a;一组按顺序排列的值 字面量&#xff1a;单个的、不可再分的值&#xff08;数字、字符串、布尔值&#xff09; yml 格式的测试用例 定义yml文件 创建结构体 读取yml文件中的用例数据 调试…

基于 moleculer 微服务架构的智能低代码PaaS 平台源码 可视化开发

低代码开发平台源码 低代码管理系统PaaS 平台 无需代码或通过少量代码就可以快速生成应用程序的开发平台。 本套低代码管理后台可以支持多种企业应用场景&#xff0c;包括但不限于CRM、ERP、OA、BI、IoT、大数据等。无论是传统企业还是新兴企业&#xff0c;都可以使用管理后台…

Git下:Git命令使用-详细解读

今天给大家讲一讲 Git常用命令的使用说明&#xff0c;希望本篇文章对大家有所帮助。 一、Git 安装 Git 的详细安装教程&#xff1a;见上一篇文章《Git上&#xff1a;Git安装教程》&#xff1a; Git上&#xff1a;全网最全最详细的Git安装教程&#xff0c;建议收藏保存 二、…

windows11编译VideoProcessingFramework库

1、下载VideoProcessingFramework Release v2.0.0 NVIDIA/VideoProcessingFramework GitHub 2、下载FFMPEG Releases BtbN/FFmpeg-Builds GitHub 推荐 ffmpeg-n4.4-latest-win64-lgpl-shared-4.4 3、下载CMAKE Download | CMake 4、下载visual studio 2019 Visual …

98. Python基础教程:try...except...finally语句

【目录】 文章目录 1. try...except...finally语法介绍2. try...except...finally执行顺序3. 捕获特定类型的异常4. 捕获所有类型的异常5. 实操练习-打开txt文件并输出文件内容 【正文】 在今天的课程中&#xff0c;我们将学习Python中的异常处理语句try...except...finally。 …

如何使用fiddler进行抓包

首先需要下载fiddler&#xff0c;推荐使用bing搜索引擎搜索&#xff08;百度搜狗一般搜这种工具展示的前几个全都是广告&#xff09;&#xff0c;直接搜索fiddler&#xff0c;搜出来第一个fiddler官网 然后直接点击download下载 进入下载页面后&#xff0c;正确填写一个邮箱&a…

linux 动态库so相关操作

1. 查看库版本号 一般在文件名上有版本号&#xff0c;若文件名上没有版本号&#xff0c;使用如下命令查看&#xff1a; readelf -d libstdc.so 2. 查看库内函数 a) nm -d libstdc.so | grep 内容 b) objdump -tT libstdc.so | grep 内容 c) readelf -s libstdc.so | grep…