python实现物体定位

2023-11-11

    前段时间利用实验室的器材写了一个小小的项目,简单的整理了一下(并不完善),现在分享一下。实验的内容是:使用卫星定位信息接收器,接收物体的位置信息(包括经度纬度等等),然后解析这些数据,然后根据经度纬度等信息通关百度地图API获取物体的具体位置信息,实现对物体的定位!

    我使用的开发语言重要是python,主要的有:serial串口通信,MySQLdb库,urllib2库,httplib库等等。下面就开始简单的说说实验中的问题。

1.首先使用的串口通信接收卫星接收器传出来的信息,我使用串口助手看了一下接收到的信息的样式,大概如下:


上图就是实验过程中的数据部分,我主要提取出来的是时间,海拔,经度,维度等信息。可以看出这些数据并不是单独成行的所以我需要将他们一个一个的提取出来(这并不是很难),然后利用经度纬度信息,使用百度地图API提供的地址解析服务获取物体的具体位置的描述,我使用的是一个HTTP服务,返回的是一个json的格式的位置信息,我事先测试库一下,返回的json格式的位置信息大概如下所示:


然后我从中获取具体位置描述信息,然后将它保存到数据库中。另外在试验中我使用了两张表,一张记录从从串口提取出来的信息,一张保存解析后的位置信息,而这两张表有相同的一项,就是时间,表的内容后面我会以图片的形式放出来。下面就附上我的代码,然后给出实验的结果。

# coding:utf8
'''
Created on 2016年6月14日
@author: zou
'''
import serial
import MySQLdb
import urllib2
import urllib
import httplib
import json
import time

ser = serial.Serial('COM4',9600)
######################################################
def recv(serial):
    data=''
    while True:
        tmp = serial.read(1)
        if tmp == '\n':
            break
        else:
            data += tmp

    return data
######################################################
def GetInfo(Str):
    info = []
    tmp = Str[7:]
    strs=''
    for ch in tmp:
        if ch == '\n':
            return
        else:
            if ch == ',':
                info.append(strs)
                strs = ''
            else:
                strs = strs+ch
                      
    return info    
######################################################
		
def getYear(data):
    retdata = ''
    ret = ''
    tail = data
    #print tail
    tail = tail[::-1]
    #print tail
    count = 0
    for ch in tail:
        if count == 3:  #616022
            if ch == ',':
                break
            else:
                ret += ch				
        elif ch == ',':
            count=count+1
    
    #print ret
    retdata+=ret[1]
    retdata+=ret[0]
    retdata+=ret[3]
    retdata+=ret[2]
    retdata+=ret[5]
    retdata+=ret[4]
    #print retdata
    return retdata	
######################################################
def rightNum(strs,flag):
    ret=''
    if cmp(flag,'t')==0:
        #times      024335.00
        ret=strs[0:2]
        ret+=':'
        ret+=strs[2:4]
        ret+=':'
        ret+=strs[4:6]
    elif cmp(flag,'l')==0:#latitude   3422.99947N
        if int(strs[0:3]) < 180:
            ret=strs[0:3]
            ret+='.'
            ret+=strs[3:5]
            ret+=strs[6:10]
        else:
            ret=strs[0:2]
            ret+='.'
            ret+=strs[2:4]
            ret+=strs[5:9]
    elif cmp(flag,'L')==0:#longitude  10858.95306E
        if int(strs[0:3]) < 180:
            ret=strs[0:3]
            ret+='.'
            ret+=strs[3:5]
            ret+=strs[6:10]
        else:
            ret=strs[0:2]
            ret+='.'
            ret+=strs[2:4]
            ret+=strs[5:9]  
    else:
        return None

    return ret         
#########################################################
def Getlocation(db,ti,la,lo):
    #发送http请求获取具体位置信息
    #import urllib
    url = 'http://api.map.baidu.com/geocoder/v2/'
    ak = 'ak=1aZ2PQG7OXlk9E41QPvB9WjEgq5WO8Do'
    #back='&callback=renderReverse&location='
    back='&location='
    location='34.992654,108.589507'
    output = '&output=json&pois=0'
    url = url + '?' + ak + back + location + output

    temp = urllib2.urlopen(url)
    hjson = json.loads(temp.read())
    locate = hjson["result"]["formatted_address"] #省,市,县
    #print locate
    mapinfo = hjson["result"]["sematic_description"]  #详细描述
    #print mapinfo
    #插入数据库
    cur = db.cursor()
    sql="set names utf8"
    cur.execute(sql)
    info=[]
    info.append(ti.encode('utf8'))
    info.append(locate.encode('utf8'))
    info.append(mapinfo.encode('utf8'))

    for val in info:
        print val

    sql = "insert into mapinfo values(%s,%s,%s)"
    try:
        cur.execute(sql,info)
    except:
        print 'Insert mapinfo failed'
	

#########################################################
#mysql , 经度,维度
db = MySQLdb.connect('localhost','root','',"zou",3306,'utf8')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS Location")
cursor.execute("DROP TABLE IF EXISTS mapinfo")

sql="""CREATE TABLE Location(
        Time CHAR(20),
        Latitude CHAR(15),
        Longitude CHAR(15),
        Altitude CHAR(10))"""
cursor.execute(sql)
sql = """CREATE TABLE mapinfo(
        time CHAR(20),
        local CHAR(100),
        info CHAR(100))"""
cursor.execute(sql)

'''
#mysql , 位置描述信息
#database = MySQLdb.connect('localhost','root','',"zou",3306)
#curkey = database.cursor()
#curkey.execute("DROP TABLE IF EXISTS mapinfo")

msql = """CREATE TABLE mapinfo(
        time CHAR(20),
        local CHAR(100),
        info CHAR(100))"""
curkey.execute(msql)
'''

##################################################################
Locat = []  ####
#提取20项数据
count=0
while count<10:
    Info=[]
    year=''
    #如果输出为 $GPGGA 开头,则这一行表示的是位置信息
    for val in range(0,8):
        data = recv(ser)
        tmp = data[0:6] #截取前6个字符
        if cmp(tmp,'$GPRMC') == 0:
            #print data
            tmpyear = data[50:]
            year = getYear(tmpyear)
            #print year
        elif cmp(tmp,'$GPGGA') == 0:  #条件满足的话就截取
            #print data
            Info = GetInfo(data)

    if Info == []:
        break
    value=[]
    ti = year
    ti += '-'
    t = rightNum(Info[0],'t')
    ti += t
    #print ti
    value.append(ti)
    la = rightNum(Info[1],'l')
    value.append(la)
    lo = rightNum(Info[3],'L')
    value.append(lo)
    al = Info[8]
    value.append(al)
    #print value

    sql = "insert into Location values (%s,%s,%s,%s)"

    try:
        cursor.execute(sql,value)
        Getlocation(db,ti,la,lo)
        db.commit()
    except:
        print 'insert error'

    count=count+1
    #print count

	
db.close()
############################################################
                        
#关闭端口
ser.close()
实验的结果如下:


相应的两张表的内容如下:

到这里这个实验的内容说完了,大家若是有什么问题的话欢迎给我留言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现物体定位 的相关文章

  • 如何在 django 表单中设置自定义 HTML 属性?

    我有一个 Django 表单 它是页面的一部分 假设我有一个字段 search input forms CharField u Search word required False 我只能通过模板访问它 form search input
  • 如何消除 matplotlib 轴的相对偏移

    当我尝试对具有足够大数字的范围进行绘图时 我得到一个所有刻度都有相对偏移的轴 例如 plot 1000 1001 1002 1 2 3 我在横坐标轴上得到这些刻度 0 0 0 5 1 0 1 5 2 0 1e3 问题是如何删除 1e3并得到
  • 类型错误:无法连接“str”和“instance”对象(python urllib)

    写一个python程序 我在使用时遇到了这个错误urllib urlopen功能 Traceback most recent call last File ChurchScraper py line 58 in
  • 如何让MagicMock返回多个值

    我想模拟一个图书馆 matplotlib对于它的价值 并且遇到一个问题 当调用模拟并期望返回元组时 它会失败 有一个更好的方法吗 Python 3 7 2 default Jan 13 2019 12 50 15 Clang 10 0 0
  • seaborn 未在定义的子图中绘制

    我正在尝试用这段代码并排绘制两个图表 fig ax1 ax2 plt subplots 1 2 sns displot x X train Age hue y train ax ax1 sns displot x X train Fare
  • 如何读取 sql 查询到 pandas dataframe / python / django

    我在下面使用这个views py获取应用程序 from django db import connection def test request cursor connection cursor sql SELECT x n from ta
  • 如何将文本文件中的十六进制行转换为数组(Python)?

    我有一个文本文件 每行包含一个十六进制明文 我的文件如下所示 7a8e5dc390781eab8df2c090bf4bebca dbac0fba55d3d4fc177161bfe24dc7fb 82e5a7a021197f6fbe94a86
  • 中断QThread睡眠

    我想知道如何暂停 QThread 然后在收到信号时恢复 我已阅读并知道我可以做这样的事情 def run self self ready False while not self ready self sleep 1 QtCore Slot
  • 您能否从函数、args 和 kwargs 确定变量将如何分配?

    我有一些样板逻辑 我想包装几个具有相同可选关键字的函数 现在看起来像下面的代码 但是 这仅处理 opt key 作为关键字传递的情况 而不是按位置传递 解决这个问题的一种方法是了解如何解决参数分配 是否有一些元函数接受函数 args 和 k
  • 如何使用 Python Flask-Security 使用 bcrypt 加密密码?

    我正在尝试使用 Flask Security 文档中的标准基本示例 并使其正常工作 除了密码以明文形式存储之外 我知道这一行 user datastore create user email email protected cdn cgi
  • VS Code Pylance 不突出显示变量和模块

    我正在使用带有 Python 和 Pylance 扩展的 VS Code 我遇到的问题是 Pylance 扩展没有对模块和数据框等内容进行语法突出显示 我希望顶部的模块为绿色 df 变量为蓝色 我正在使用默认的深色 颜色主题 这是我的 VS
  • 自动递增和最后插入 ID

    我在用着AUTO INCREMENT我想获取插入行的 ID 以便我可以使用更新另一个表ID作为两个表之间的公共字段 我明白LAST INSERT ID会排在最后ID 然而 我担心的是 数据库被许多用户同时访问 因此 可能有另一个进程访问该表
  • 使用 pyinstaller 制作的可执行文件出现运行时错误

    所以我使用 Pygame 制作了一个游戏 现在我想用它制作一个可执行文件 首选独立可执行文件 所以我用它来制作可执行文件 pyinstaller onefile main py 编译顺利 但运行时出现错误 这是错误 Traceback mo
  • 带参数的 Python 列表过滤

    python中有没有一种方法可以在列表上调用过滤器 其中过滤函数在调用期间绑定了许多参数 例如有没有办法做这样的事情 gt gt def foo a b c return a lt b and b lt c gt gt myList 1 2
  • Django 1.6:如何在视图中访问静态文件

    我已经尝试过解决方案here https stackoverflow com questions 11721818 django get the static files url in view这对我不起作用 我正在为 Python 创建一
  • Python 中的“finally”总是执行吗?

    对于Python中任何可能的try finally块 是否保证finally块总是会被执行吗 例如 假设我在except block try 1 0 except ZeroDivisionError return finally print
  • 关于mysql建表的几个问题

    CREATE TABLE favorite food person id SMALLINT UNSIGNED food VARCHAR 20 CONSTRAINT pk favorite food PRIMARY KEY person id
  • 使用 PyCharm 分析 Django

    即使在开发环境中 我的应用程序也相当慢 所以我想找出是什么导致它变慢 以便我可以尝试修复它 我了解调试工具栏 根据它的报告 数据库查询和下载的源都不是问题 所以它一定是业务逻辑 但是 我无法使用 Django 服务器运行 PyCharm 分
  • 带有 graphviz_layout 的水平树

    在Python中 使用networkx 我可以用以下方法绘制垂直树 g nx balanced tree 2 4 pos nx graphviz layout g prog dot nx draw g pos labels b all no
  • 媒体文件上的 404 - Django

    昨晚我将项目上传到 pythonanywhere com 我想在那里测试我的项目生产设置 在我允许的模型之一中用户上传JPG 团队徽标 上传过程运行良好 文件位于我的 MEDIA ROOT 中 问题是 当我尝试在模板中访问它 以将其显示在页

随机推荐

  • ctf—web合集

    0x00 前言 本篇主要是针对不同的做题方法和思路将wp进行分类 从而更方便大家进行索引 CTF 加解密合集 CTF Web合集 网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 PHP 1 变量空间绕过 ctf
  • 【Linux】进程信号“疑问?坤叫算信号吗?“

    鸡叫当然也算信号啦 文章目录 前言 一 认识信号量 二 信号的产生 1 调用系统函数向进程发信号 2 由软件条件产生信号 3 硬件异常产生信号 总结 前言 信号在我们生活中很常见 下面我们举一举生活中信号的例子 你在网上买了很多件商品 再等
  • 第14课:生活中的策略模式——怎么来不重要,人到就行

    用程序来模拟生活 从剧情中思考策略模式 策略模式 策略模式的模型抽象 类图 模型说明 设计要点 优缺点 实战应用 应用场景 故事剧情 Tony 在北京漂泊了三年 在这期间有很多的美好 也有很多心酸 有很多期待 也有很多失落 可终究还是要离开
  • 使用Docker-compose部署SpringBoot项目

    目录 一 概述 二 安装 三 构建目录结构 四 控制服务的启动顺序 五 编写配置文件 六 启动Docker compose 一 概述 Docker Compose是 docker 提供的一个命令行工具 用来定义和运行由多个容器组成的应用 使
  • Kalman滤波器从原理到实现

    Kalman滤波器的历史渊源 We are like dwarfs on the shoulders of giants by whose grace we see farther than they Our study of the wo
  • 用741运算放大器搭建RC正弦振荡器:文氏电桥振荡电路

    实验目的 了解正弦振荡器的工作原理 加强仿真multisim软件的运用水平 加强对电路的理解 搭建电路的动手能力 了解个元器件之间的配合 实验电路原理图 左侧为仿真电路 右侧为振荡波形 电路原理及其分析 I RC正弦波振荡电路又称文氏电桥振
  • linux性能分析工具专题-perf(事件采样,全面性能分析)

    文章目录 概述 perf概念 perf的工具集合介绍 perf的事件介绍 perf list参看 常用perf性能查看工具使用 perf stat 运行一个命令并且统计过程事件 perf top 输出系统某个事件热度函数或者指令排序 per
  • ArcGIS Pro python 获取一百多幅栅格的平均值

    目标 我需要计算流域内的平均等效水柱高 等效水柱高的格网已经创建好 如下 每个月一个这样的栅格格网 现在有近两百个格网需要求平均等效水柱高 要求 按照时间顺序求取每一个格网的平均等效水柱高 并生成时间序列表单 如下 看到arcpro上显示栅
  • 有空就看看的leetcode1——两数之和(c++版)

    有空就看看的leetcode1 两数之和 c 版 学习前言 两数之和题目 几个需要用到的函数 解法 1 遍历法 2 哈希表法 学习前言 有点紧张 决定看看leetcode 两数之和题目 给定一个整数数组 nums 和一个目标值 target
  • 多线程进阶(上)

    目录 一 常见的锁策略 二 CAS 三 synchronized的优化 一 常见的锁策略 1 乐观锁和悲观锁 乐观锁 从名字上来看就可以看出来 这个很乐观 这个会预期锁冲突的概率很低 就会认为锁即将要被解除了 不需要等待很久 因此上 乐观锁
  • postgresql数据库linux centos7 安装

    简介 百度百科 PostgreSQL是一种特性非常齐全的自由软件的对象 关系型数据库管理系统 ORDBMS 是以加州大学计算机系开发的POSTGRES 4 2版本为基础的对象关系型数据库管理系统 POSTGRES的许多领先概念只是在比较迟的
  • Flink RocketMQ Connector实现

    Flink内置了很多Connector 可以满足大部分场景 但是还是有一些场景无法满足 比如RocketMQ 需要消费RocketMQ的消息 需要自定时Source 一 自定义FlinkRocketMQConsumer 参考FlinkKaf
  • 使用Nginx反向代理Vue项目时,报Invalid Host header错误解决办法

    在vue config js中 修改配置 disableHostCheck true module exports devServer open true host batman com port 27202 https false dis
  • 数据结构之KMP算法

    一 首先求next值 例如 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2 next数组的求解方法是 第一位的next值为0 第二位的next值为1 后面求解每一位的next值时 根据前一位进行比较 首先
  • 一文让你明了P NP NPC 问题

    这或许是众多OIer最大的误区之一 你会经常看到网上出现 这怎么做 这不是NP问题吗 这个只有搜了 这已经被证明是NP问题了 之类的话 你要知道 大多数人此时所说的NP问题其实都是指的NPC问题 他们没有搞清楚NP问题和NPC问题的概念 N
  • 第14.2节 HTML知识简介

    一 HTML语言 HTML 指的是超文本标记语言 Hyper Text Markup Language 它不是一种编程语言 而是一种使用一套标记标签 markup tag 来标记元素作用的标记语言 标记语言使用标记标签来描述网页的内容 标记
  • 如何在linux中打印程序堆栈信息

    如何在linux中打印程序堆栈信息 用于调试 有时候在写完代码之后需要自己手动测试功能 在linux环境中往往需要gdb调试打断点查看堆栈 往往公司的服务器一般是多人同时使用的 往往性能不是太强 gdb调试的时候载入的时候Reading s
  • Java 中 try-catch,throw和throws的使用

    Java 中的异常有很多 这种异常机制 可以帮助处理程序中未知的错误 关于异常的处理有try catch 程序块 throw throws 以下分别对这三种进行介绍 一 try catch try catch用来捕获代码段的异常并做出处理
  • SQL语句知识大全

    目录导航 一 SQL简介 1 什么是数据库 2 数据库分类 3 SQL 是什么 4 SQL 能做什么 5 RDBMS 二 基础语法 1 创建数据库 2 删除数据库 3 创建表 4 删除新表 5 增加一个列 6 添加主键 7 创建索引 8 创
  • python实现物体定位

    前段时间利用实验室的器材写了一个小小的项目 简单的整理了一下 并不完善 现在分享一下 实验的内容是 使用卫星定位信息接收器 接收物体的位置信息 包括经度纬度等等 然后解析这些数据 然后根据经度纬度等信息通关百度地图API获取物体的具体位置信