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

这篇具有很好参考价值的文章主要介绍了树莓派通过天线+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 字符表示度,后面的字符表示分,需要转化为小数形式。

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

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

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

        如图为测试图片

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

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

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

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

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

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

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

        我们创建一个名为`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 = line
    if 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:])/60
        print("纬度:  " + 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",//请求方式为get
		dataType: "json", //返回数据格式为json
		async: false,
		success: function(data) {
            position_list=$.parseJSON(JSON.stringify(data));  // 将string转换成可操作的object
			console.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>

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

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

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

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

         效果如下图:

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点,各种大作业,python,单片机,html,java,物联网

 文章来源地址https://www.toymoban.com/news/detail-621396.html

到了这里,关于树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ThingsBoard教程(三九):规则节点解析 根据经纬度过滤数据 GPS geofencing filter

    这篇文章 介绍 GPS geofencing filter 节点, 根据经纬度来过滤通过规则链的数据。 通过基于GPS的地理围栏过滤传入的消息。从传入消息中提取纬度和经度参数,并根据配置的范围进行检查。 配置: 纬度键名称 (Latitude key name)- 包含位置纬度的消息字段的名称; 经度键名称( Long

    2024年02月03日
    浏览(52)
  • Unity解决:GIS(GPS的经纬度坐标)定位系统坐标转unity坐标(世界坐标)

    目录 一、前言 二、功能实现 三、测试 四、备注  如果要实现该效果的demo,请联系作者 最近项目中用到了第三方的定位系统,有的是使用GPS定位、有的是使用UWB定位。第三方的定位系统把他们的定位信息通过网络发送给Unity,在Unity内实时显示人/设备的移动。因为第三方可

    2024年02月11日
    浏览(115)
  • uniapp 微信小程序获取当前位置定位不准确问题 uniapp 微信小程序获取当前位置的坐标(经纬度),通过坐标去获取当前具体地址

    点击获取定位-位置授权-显示地址信息 1 2、 3、 以下3处(!!!必需)必须满足 manifest.json(!!!必需)

    2024年02月08日
    浏览(65)
  • GPS学习(一):在ROS2中将GPS经纬度数据转换为机器人ENU坐标系,在RVIZ中显示坐标轨迹

    本文记录在Ubuntu22.04-Humbel中使用NMEA协议GPS模块的过程,使用国产ROS开发板鲁班猫(LubanCat )进行调试。 在淘宝找了款性价比较高的轮趣科技GPS北斗双模定位模块作为入门学习使用,支持GNSS系统(北斗、GPS、GLONASS、日本的QZSS以及卫星增强系统SBAS),定位精度在2.5m左右,属于民用

    2024年02月03日
    浏览(67)
  • 使用腾讯地图获取地址经纬度

    1、在终端执行 2.在main.js引入  或则直接在需要页面引入 3、写方法 具体的参考腾讯开发文档https://lbs.qq.com/service/webService/webServiceGuide/webServiceGeocoder

    2024年02月09日
    浏览(37)
  • 高德地图根据经纬度获取地址信息

    主要是使用高德里面 地理编码与逆地理编码 的 getAddress 这个方法, 根据逆向地理编码:将地理坐标(经纬度)转换成地址描述信息,对应为AMap.Geocoder的getAddress方法。 具体使用的代码为 最后看效果 这是传的经纬度与解析出来的地理位置 如果需要正向解析将地理位置变成经

    2024年02月11日
    浏览(50)
  • uniapp 在app中获取经纬度

    在uniapp中app端,uni.getLocation获取经纬度会有大概1-2公里的偏差,在实际项目中,有的需求对经纬度的准确度要求比较严格,研究了很多种方式,最终发现使用高德地图api的微信小程序的插件获取的准确性是最准的,偏差最小的。 1.先去高德地图获取key,注意,这里是要获取微

    2024年02月15日
    浏览(46)
  • 【前端】【H5 API】地理定位(获取经纬度)

    地理定位在日常生活中应用比较广泛,例如,互联网打车、在线地图等。在HTML 5的规范中,增加了获取用户地理位置信息的接口Geolocation,开发者可以通过经纬度来获取用户的地理位置信息,Geolocation接口的特点如下。 Geolocation接口封装了获取位置信息的技术细节。 开发者不

    2023年04月08日
    浏览(35)
  • vue+cesium 获取鼠标浮动的经纬度

    是在地图中展示鼠标的经纬度 html 属性 css cesium鼠标移动的方法在初始化cesium之后调用这个方法

    2024年02月12日
    浏览(32)
  • QT调用百度地图并返回点击地的经纬度

    最近需要使用百度地图,并返回某个点的经纬度值。网上基本都是根据经纬度定位,而没有获取经纬度的。自己用QT简单实现了下。 这块耗时最久。因为之前QT默认的MinGW 64bit无法编译,需要安装MSVC2017(注意:安装Visual Studio 2017,最开始安装2022也不行)。安装过程,自行百度。

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包