python 笔记:PyTrack(将GPS数据和OpenStreetMap数据进行整合)【官网例子解读】

news2024/11/23 23:31:08

论文笔记:PyTrack: A Map-Matching-Based Python Toolbox for Vehicle Trajectory Reconstruction_UQI-LIUWJ的博客-CSDN博客4

0 包的安装

官网的两种方式我都试过,装是能装成功,但是python import PyTrack包的时候还是显示找不到Pytrack

# conda
conda install pytrack 

# or PyPI
pip install PyTrack-lib

于是使用这种安装方式,成功了:

pip 另一种安装方法:python setup.py install_python setup.py bdist_wheel did not run successful_UQI-LIUWJ的博客-CSDN博客

1 GPS数据导入

import numpy as np
import pandas as pd

df=pd.DataFrame([{'datetime':'23-04-21 16:46:19:583000','lat':43.759650,'lon':11.291561},
                {'datetime':'23-04-21 16:46:36:570000','lat':43.759645,'lon':11.291544},
                {'datetime':'23-04-21 16:46:52:647000','lat':43.759671,'lon':11.291162},
                {'datetime':'23-04-21 16:47:37:568000','lat':43.759677,'lon':11.291148},
                {'datetime':'23-04-21 16:47:49:639000','lat':43.759691,'lon':11.290932},
                {'datetime':'23-04-21 17:12:37:573000','lat':43.779596,'lon':11.254733},
                {'datetime':'23-04-21 17:12:51:592000','lat':43.779583,'lon':11.254295},
                {'datetime':'23-04-21 17:13:05:572000','lat':43.779206,'lon':11.253978},
                {'datetime':'23-04-21 17:13:20:592000','lat':43.779205,'lon':11.253974},
                {'datetime':'23-04-21 17:13:36:590000','lat':43.778464,'lon':11.253364}])
df

 2 GPS数据处理

latitude = df["lat"].to_list()
longitude = df["lon"].to_list()

points = [(lat, lon) for lat, lon in zip(latitude, longitude)]
points
'''
[(43.75965, 11.291561),
 (43.759645, 11.291544),
 (43.759671, 11.291162),
 (43.759677, 11.291148),
 (43.759691, 11.290932),
 (43.779596, 11.254733),
 (43.779583, 11.254295),
 (43.779206, 11.253978),
 (43.779205, 11.253974),
 (43.778464, 11.253364)]
'''

north, east = np.max(np.array(points),axis=0)
south, west = np.min(np.array(points),axis=0)
north,south,east,west
#(43.779596, 43.759645, 11.291561, 11.253364)

3 获得路网Graph

from pytrack.graph import graph, distance
from pytrack.analytics import visualization

bbox=distance.enlarge_bbox(north, south, west, east, 500)
G = graph.graph_from_bbox(*distance.enlarge_bbox(north, south, west, east, 500), simplify=True, network_type='drive')
#Downloaded 1,767.31kB

3.1 显示提取的图

map=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
map.add_graph(G,plot_nodes=True)
map

 4  提取候选点

  • get_candidates方法返回两个输出
    • graph的插值版本G_interp
    • 候选点的字典candidates
  • 下面0,1 ,7,8都是一个candidate;2,3,4,5,6是4个;9是3个
from pytrack.matching import candidate, mpmatching_utils, mpmatching

# Extract candidates
G_interp, candidates = candidate.get_candidates(G, points, interp_dist=5, closest=True, radius=30)

candidates
'''
{0: {'observation': (43.75965, 11.291561),
  'osmid': [135115743],
  'edge_osmid': [590848305],
  'candidates': [(43.75963763247117, 11.291543159878621)],
  'candidate_type': array([False]),
  'dists': [1.9859410359888336]},
 1: {'observation': (43.759645, 11.291544),
  'osmid': [135115743],
  'edge_osmid': [590848305],
  'candidates': [(43.75963763247117, 11.291543159878621)],
  'candidate_type': array([False]),
  'dists': [0.8220066596419578]},
 2: {'observation': (43.759671, 11.291162),
  'osmid': [1366820392, 831342769, 831342769, 245816382],
  'edge_osmid': [158183875, 160047415, 202760017, 590848305],
  'candidates': [(43.759700520685946, 11.290803894486569),
   (43.7596557, 11.290801),
   (43.7596557, 11.290801),
   (43.75964691271334, 11.29117208534078)],
  'candidate_type': array([False, False, False, False]),
  'dists': [28.94629461607051,
   29.041910651129065,
   29.041910651129065,
   2.798176615616366]},
 3: {'observation': (43.759677, 11.291148),
  'osmid': [1366820392, 831342769, 831342769, 245816382],
  'edge_osmid': [158183875, 160047415, 202760017, 590848305],
  'candidates': [(43.759700520685946, 11.290803894486569),
   (43.7596557, 11.290801),
   (43.7596557, 11.290801),
   (43.75964691271334, 11.29117208534078)],
  'candidate_type': array([False, False, False, False]),
  'dists': [27.7587065301145,
   27.968156168366924,
   27.968156168366924,
   3.864490374081274]},
 4: {'observation': (43.759691, 11.290932),
  'osmid': [1366820392, 831342769, 831342769, 1751266336],
  'edge_osmid': [158183875, 160047415, 202760017, 590848305],
  'candidates': [(43.759700520685946, 11.290803894486569),
   (43.7596557, 11.290801),
   (43.7596557, 11.290801),
   (43.75965309954146, 11.290924702315552)],
  'candidate_type': array([False, False, False, False]),
  'dists': [10.342517462643924,
   11.229036268613909,
   11.229036268613909,
   4.254901893095896]},
 5: {'observation': (43.779596, 11.254733),
  'osmid': [1082477038, 1196043488, 699408714, 1082477038],
  'edge_osmid': [23338921, 24695287, 24933636, 203924197],
  'candidates': [(43.7796997, 11.2544238),
   (43.77956558718794, 11.254738857110752),
   (43.779738600417716, 11.254457384444233),
   (43.7796997, 11.2544238)],
  'candidate_type': array([False, False, False, False]),
  'dists': [27.371092347460355,
   3.4142911971419823,
   27.222205203514605,
   27.371092347460355]},
 6: {'observation': (43.779583, 11.254295),
  'osmid': [1082477038, 1082477038, 1082477038, 432026454],
  'edge_osmid': [23338921, 24695287, 24933636, 203924197],
  'candidates': [(43.7796997, 11.2544238),
   (43.7796997, 11.2544238),
   (43.7796997, 11.2544238),
   (43.77958438083008, 11.254328000262998)],
  'candidate_type': array([False, False, False, False]),
  'dists': [16.59261899959034,
   16.59261899959034,
   16.59261899959034,
   2.6538256098028095]},
 7: {'observation': (43.779206, 11.253978),
  'osmid': [1531471656],
  'edge_osmid': [203924197],
  'candidates': [(43.77919997631304, 11.254008676575015)],
  'candidate_type': array([False]),
  'dists': [2.552298511854619]},
 8: {'observation': (43.779205, 11.253974),
  'osmid': [1531471656],
  'edge_osmid': [203924197],
  'candidates': [(43.77919997631304, 11.254008676575015)],
  'candidate_type': array([False]),
  'dists': [2.8394681876277263]},
 9: {'observation': (43.778464, 11.253364),
  'osmid': [568144517, 132324140, 132324140],
  'edge_osmid': [27317795, 491331618, 915510037],
  'candidates': [(43.77843868125, 11.25338133125),
   (43.7782499, 11.2532268),
   (43.7782499, 11.2532268)],
  'candidate_type': array([False, False, False]),
  'dists': [3.14040435143449, 26.231663705314208, 26.231663705314208]}}
'''

4.1 可视化candidate

maps.add_graph(G, plot_nodes=True)
maps.draw_candidates(candidates, 30)
maps

 

 5 创建Trellis图

根据上面的candidates创建相应的trellis

trellis = mpmatching_utils.create_trellis(candidates)

5.1 绘制Trellis图

trellis_draw = visualization.draw_trellis(trellis, figsize=(3, 7))
trellis_draw

每个点的candidate个数和前面candidates中每个点的candidate数目一致 

 6 进行地图匹配

# Perform the map-matching process
path_prob, predecessor = mpmatching.viterbi_search(G_interp, trellis, "start", "target")

6.1 绘制地图匹配图

# Plot map-matching results
maps.draw_path(G_interp, trellis, predecessor)
maps

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

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

相关文章

Altova MapForce 2023 Crack

Altova MapForce 2023 Crack 数据映射项目中的注释-除了支持对数据映射项目的单个连接进行注释外,现在还可以向源组件和目标组件添加注释,以帮助记录映射的作用和实现方式。 支持XML输出中的standalone“yes”声明-在独立文档声明中,值“yes”…

Chat-GLM 详细部署(GPU显存>=12GB)

建议配置: ( Windows OS 11 部署 )CPU-i7 13700F ~ 13700KF RAM: 16GB DDR4 GPU: RTX3080(12G) 安装 conda: 1. 下载安装 miniconda3 : https://docs.conda.io/en/latest/miniconda.html conda是一个包和环境管理工具,它不仅能管理包,还能隔…

Linux嵌入式学习之Ubuntu入门(四)Makefile

系列文章目录 一、Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装及文件结构 二、Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等 三、Linux嵌入式学习之Ubuntu入门(三)用户、用户组…

go语言切片做函数参数传递+append()函数扩容

go语言切片函数参数传递append()函数扩容 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 二叉树递归go代码: var ans [][]int func pathSum(root *TreeNode, targetSum int) ( [][…

Longitudinal Change Detection on Chest X-rays Using Geometric Correlation Maps

文章来源:[MICCAI2019] Keywords:Chest X-ray;Longitudinal analysis;Change detection;Geometric correlation 一、本文提出的问题以及解决方案 在胸部X-ray图像的诊断中,医生会考虑与先前检查相比病变的…

8.网络爬虫—正则表达式RE实战

8.网络爬虫—正则表达式RE实战正则表达式(Regular Expression)re.Ire.Are.Sre.Mre.Xre.Lre.U美某杰实战写入csv文件:前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Pyth…

MongoDB 聚合管道的文档操作($sort,$skip,$limit,$sample,$unwind)

目前为止,我们已经介绍了一部分聚合管道中的管道参数: $match:文档过滤 $group:文档分组,并介绍了分组中的常用操作:$addToSet,$avg,$sum,$min,$max等。 $add…

COCO数据集相关知识介绍

👨‍💻个人简介: 深度学习图像领域工作者 🎉总结链接: 链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括: &am…

SpringTx 源码解析 - @Transactional 声明式事务执行原理

一、Spring Transactional 声明式事务执行原理 Transactional 是 Spring 框架中用于声明事务的注解,可以标注在方法或类上。当标注在类上时,表示该类的所有public方法都将支持事务。当标注在方法上时,表示该方法将在一个事务内执行。 Trans…

BGP对等体建邻配置

BGP对等体大体分为EBGP对等体和IBGP对等体。而BGP对等体的建邻主要分为两种:1、使用物理接口建邻 2、使用环回借口建邻,针对不同的BGP对等体选用不同的建邻方式。 EBGP的建邻主要使用的是物理接口建邻 IBGP的建邻主要使用的是环回接口建邻 这两种建邻方…

VBA的面向接口编程

工作中有时候会用到VBA(Visual Basic for Applications),不是很多,也没有专门去学习VBA,用的时候遇到问题就上网去查资料,解决问题了就放下了。 今天被同事问到VBA中类的用法,我从来没有用过&am…

论文解读:基于 OpenMLDB 的流式特征计算优化

近期,数据库领域的顶级学术会议 ICDE 2023 在迪斯尼主题公园的故乡 - 美国的安纳海姆(Anaheim)举办。由 OpenMLDB 开源社区和新加坡科技设计大学(Singapore University of Technology and Design)联合完成的研究工作在…

Vue2-黑马(三)

目录: (1)vue2-axios (2)axios-发送请求 (3)vue2-axios-请求体格式 (4)vue2-axios-默认配置 (1)vue2-axios 已经配置了代理,可以…

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤: 在Linux中安装Git在Linux中安装maven编写shell脚本(拉取代码、编译、打包、启动)为用户授予执行shell脚本的权限执行shell脚本 执行过程:Linux服务器(编译、打包、启动&#x…

每天一道大厂SQL题【Day21】华泰证券真题实战(三)

每天一道大厂SQL题【Day21】华泰证券真题实战(三) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…

爱智EdgerOS之深入解析爱智云原生产品ECSM

一、云原生简介 近些年来,云原生逐渐被业界认可和接受,在国内,包括政府、金融、通信、能源在内的众多领域的大型机构和企业都实现了不同程度的云化,那么什么是云原生呢?云原生计算基金会提供了官方的定义:…

参考|雨水情测报和大坝安全监测系统建设方案

解决方案 小型雨水情测报和大坝安全监测系统解决方案,系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成,同时建立规范、统一的监测平台,集数据传输、信息共享、数据储存…

比较系统的学习 pandas (6)

pandas 数据类型转换 在开始数据分析前,有时需要为数据分配好合适的类型,这样才能 够高效地处理数据 # 对所有字段指定统一类型 data pd.DataFrame(data, dtypefloat32) # 对每个字段分别指定 data pd.read_excel(data.xlsx, dtype{name: string, sc…

CUDA和TensorRT入门

CUDA 官方教程:CUDA C Programming Guide (nvidia.com) 一、基础知识 首先看一下显卡、GPU、和CUDA的关系介绍: 显卡、GPU和CUDA简介_吴一奇的博客-CSDN博客 延迟:一条指令返回的时间间隔; 吞吐量:单位时间内处理…

libwebsockets交叉编译

libwebsockets官网:https://libwebsockets.org/ github:https://github.com/warmcat/libwebsockets 首先下载libwebsockets源码,源码既可以在其官网上下载,也可以到github上下载。这里以v4.1.6为例,https://github.co…