Pytrack 函数整理

news2024/11/26 2:21:31

1 distance

1.1 add_edge_lengths

pytrack.graph.distance.add_edge_lengths(G, precision=3)

将每条边的长度加到图里面去

1.1.1 主要参数

G路网图
precision每一条边长度,保持几位小数

1.2 enlarge_bbox

pytrack.graph.distance.enlarge_bbox(north, south, west, east, dist)

以north、south、west、east为边界,各向外扩张dist,构成一个边界box

north边界框的最北纬度
south边界框的最南纬度
west边界框的最西经度
east边界框的最东经度
dist以米为单位的距离,表示边界框要扩展多少
from pytrack.graph import graph, distance
distance.enlarge_bbox(1.345391, 1.33671, 103.700013, 103.678652, 500)

'''
(1.3498876016774644,
 1.3322133983225357,
 103.69551516635698,
 103.68314983364301)
'''

1.3 get_bearing

pytrack.graph.distance.get_bearing(lat1, lon1, lat2, lon2)

计算两个点(lat1,lon1)到(lat2,lon2)之间的运行方位(正北为0正南为180)向东多少度就是正多少;向西多少度就是负多少

from pytrack.graph import graph, distance
distance.get_bearing(1.336710,103.700013,1.336710,103.800013)
#向东
#89.9988336059857

distance.get_bearing(1.336710,103.900013,1.336710,103.800013)
#向西
#-89.9988336059857

distance.get_bearing(1.336710,103.900013,1.326710,103.900013)
#向南
#180

distance.get_bearing(1.336710,103.900013,1.346710,103.900013)
#向北
#0

1.4 haversine_dist

pytrack.graph.distance.haversine_dist(lat1, lon1, lat2, lon2, earth_radius=6371009)

计算两个点(lat1,lon1)到(lat2,lon2)之间的距离

earth_radius是地球半径

distance.haversine_dist(1.336710,103.900013,1.336710,103.800013)
#11116.482398841283 
#单位是米

1.5 interpolate_graph

在图中间隔一定距离插入一些点

pytrack.graph.distance.interpolate_graph(G, dist=1)

dist表示差补后每个点和下一个点之间的距离

north, south, west, east=1.345391, 1.33671, 103.700013, 103.678652
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')
map=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
map.add_graph(G,plot_nodes=True)
map

 

G1=distance.interpolate_graph(G,dist=5)
map=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
map.add_graph(G1,plot_nodes=True)
map

 2 Graph

2.1 graph_from_bbox

pytrack.graph.graph.graph_from_bbox(north, south, west, east, 
                                    simplify=True, 
                                    network_type='drive', 
                                    buffer_dist=0)

在一个bounding box内创建一个graph

north, south, west, eastbounding box的北、南、西、东 四端
simplify 是否简化图
network_typeOSM路网图的类型
buffer_dist类似于enlarge_bbox里面的dist,bounding box扩大的距离(以米为单位)

3 Matching

3.1 candidate

表示候选元素的类

classpytrack.matching.candidate.Candidate(
    node_id, 
    edge_osmid, 
    obs, 
    great_dist, 
    coord)
node_idOSM 点的id
edge_osmidOSM 边的id
obs实际的GPS坐标(观测点的坐标)
great_dist观测点和候选点之间的距离
coord候选点坐标

3.2 get_candidates

获得HMM map-matching 的候选点

pytrack.matching.candidate.get_candidates(
    G, 
    points, 
    interp_dist=1, 
    closest=True, 
    radius=10)
G路网图
points实际的GPS点(观测点)
interp_dist1.5 interpolate_graph的dist,dist越小,越精准,但是需要的时间越长
closest如果为真,那么每一条边中只有距离观测点最近的点会被考虑
radius搜寻半径

 3.2.0 返回结果

返回一个interpolate过的图(即1.5 interpolate_graph的结果图)

 以及一个字典,表示各个candidate

 

3.2.1 radius

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)
 
maps=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
maps.add_graph(G,plot_nodes=True)
maps.draw_candidates(candidates, 30)
maps

 

from pytrack.matching import candidate, mpmatching_utils, mpmatching
 
# Extract candidates
G_interp, candidates = candidate.get_candidates(G, points, 
                                                interp_dist=5, 
                                                closest=True, 
                                                radius=100)
 
maps=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
maps.add_graph(G,plot_nodes=True)
maps.draw_candidates(candidates, 100)
maps

3.2.2  closest

from pytrack.matching import candidate, mpmatching_utils, mpmatching
 
# Extract candidates
G_interp, candidates = candidate.get_candidates(G, points, 
                                                interp_dist=5, 
                                                closest=False, 
                                                radius=100)
 
maps=visualization.Map(location=(np.mean(latitude),np.mean(longitude)))
maps.add_graph(G,plot_nodes=True)
maps.draw_candidates(candidates, 100)
maps

 3.3 cleaning

3.3.1 park_filter

通过消除在给定时间内保留在特定区域的那些点来消除停车行为。

pytrack.matching.cleaning.park_filter(traj, th_dist=50, th_time=30)
import numpy as np
import pandas as pd
from pytrack.matching import cleaning
df=pd.DataFrame([{'datetime':'2023-04-21 16:46:19:583000','lat':1.336710,'lon':103.700013},
                {'datetime':'2023-04-21 16:46:36:570000','lat':1.338919,'lon':103.699627},
                {'datetime':'2023-04-21 16:46:52:647000','lat':1.340078,'lon':103.696387},
                {'datetime':'2023-04-21 16:47:37:568000','lat':1.340736,'lon':103.693565},
                {'datetime':'2023-04-21 16:47:49:639000','lat':1.341959,'lon':103.693457},
                {'datetime':'2023-04-21 17:12:37:573000','lat':1.341959,'lon':103.693457},
                {'datetime':'2023-04-21 17:12:51:592000','lat':1.341959,'lon':103.693457},
                {'datetime':'2023-04-21 17:13:05:572000','lat':1.341959,'lon':103.693457},
                {'datetime':'2023-04-21 17:13:20:592000','lat':1.339492,'lon':103.682728},
                {'datetime':'2023-04-21 17:13:36:590000','lat':1.339985,'lon':103.678652}])

df['datetime']=df.datetime.apply(datetime.fromisoformat)
cleaning.park_filter(df)

停车行为只保留第一次到达的记录(停下来的record将不会记录) 

3.4 map matching

论文笔记:Hidden Markov Map MatchingThrough Noise and Sparseness_UQI-LIUWJ的博客-CSDN博客

 3.4.1 viterbi_search

pytrack.matching.mpmatching.viterbi_search(
    G, 
    trellis, 
    start='start', 
    target='target', 
    beta=3, 
    sigma=4.07)

进行维特比算法,已完成HMM 地图匹配

G路网图
trellis生成的trellis图(后面会说)
start开始点
target种植点
beita

 

输出概率中的β

sigma

转移概率中的σ 

返回两个内容 joint_prob:各个点形成的轨迹的联合概率

predecessor 每个点的前继节点

 3.5 mpmatching_utils

3.5.1 create_matched_path

最匹配的GPS点组成的路径

pytrack.matching.mpmatching_utils.create_matched_path(G, trellis, predecessor)

G是get_candidates之后的G

trellis就是创建的trellis图

predecessor是viterbi算法得到的前继节点

返回两个列表:

组成path的点id集合

组成path的点的坐标集合

3.5.2 create_path

除了只返回create_match_path的第一个列表,其他的都是一样的

3.5.3 create——trellis

创建trellis图

pytrack.matching.mpmatching_utils.create_path(G, trellis, predecessor)


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

 

 

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

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

相关文章

僵尸进程的避免 守护进程的创建 线程的创建,阻塞,数据传递 5.15

父子进程相关知识&#xff1a; 1.子进程结束时&#xff0c;系统 会立即自动刷新行缓存 2.手动结束进程&#xff1a; exit() exit(int status)&#xff1a;结束当前调用的进程&#xff0c;自动刷新缓存 标准库函数 头文件&#xff1a;#include <stdlib.h> _exit() …

压缩技术与常见linux解压/压缩命令总结

文章目录 1 RAR1.1 参数介绍1.2 压缩/解压1.3 分卷压缩/解压 2 7-Zip2.1 常用参数2.2 使用2.3 分卷压缩/解压 3 解压/压缩命令 总结 1 RAR RAR是一种专利文件格式&#xff0c;用于数据的压缩打包。 提供了强力压缩、分卷、加密和自解压模块 官方网址&#xff1a;https://www…

公有云——阿里云ECS服务器(IaaS)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.了解云服务器的基础概念 1.云服务器的基础概念&#xff08;云服务器选择…

用IDEA写的第一个JavaWeb项目(保姆级)

任何事情只有0次和无数次&#xff0c;项目新建了第一个就有第二个 从第一次的略显青涩到后面的轻车熟路&#xff0c;区别就是第一次 ——Lungcen 在IDEA中新建一个web项目&#xff0c;有好几种方法。本人用的方法是通过maven构建工具来构建java项目的框架。对于web服务器的选择…

日志—加索引优化select

今天工作中遇到一个小问题&#xff0c;一个搜索接口&#xff0c;要加一个2个字段用于搜索 分析&#xff1a;这两个字段要在子表中去查询&#xff0c;查看原来mapper中的接口&#xff0c;已经连了N个子表&#xff0c;sql速度在10秒左右。 加上了新的子表&#xff0c;然后去试了…

悼念浩哥(左耳朵耗子),一个纯粹的技术人

上周末听闻浩哥的事了&#xff0c;期初还不信。在网上搜索消息&#xff0c;看来是真的。他才四十多岁&#xff0c;觉得非常可惜。很早就关注过浩哥&#xff0c;他是一位正直纯粹和爱分享的技术大牛。无论是技术分享还是人生感悟&#xff0c;或者是成长相关&#xff0c;都让我学…

展会直击 | 昂视精彩亮相CIBF2023深圳国际电池展

5月16日&#xff0c;CIBF2023深圳国际电池展在深圳国际会展中心&#xff08;宝安新馆&#xff09;正式开幕&#xff0c;昂视携2D视觉产品、3D视觉产品、锂电行业智能检测方案亮相9号馆T101-2展位&#xff0c;会场氛围火热&#xff0c;昂视展位人声鼎沸。 方案演示&#xff0c;助…

K8s进阶1——搭建K8s高可用集群

文章目录 一、资源清单二、系统初始化2.1 所有服务器配置2.2 master节点配置 三、nginxkeepalived3.1 主备机器上进行3.2 配置主节点3.3 配置备节点3.4 启动服务 四、部署etcd集群4.1 资源清单4.2 生成Etcd证书4.3 部署Etcd集群 五、安装Docker/kubeadm/kubelet5.1 安装docker5…

【数据库复习】第六章 关系数据理论 1

关系模式的设计 按照一定的原则从数量众多而又相互关联的数据中&#xff0c;构造出一组既能较好地反映现实世界&#xff0c;而又有良好的操作性能的关系模式 ●冗余度高 ●修改困难 ●插入问题 ●删除问题 ★产生问题的原因 属性间约束关系&#xff08;即数据间的依赖关系…

【C++从0到王者】第五站:类和对象(中)const和取地址运算符重载

文章目录 一、const修饰this指针二、取地址运算符重载以及const取地址运算符重载 一、const修饰this指针 我们继续使用之前实现的日期类&#xff0c;当我们写出如下代码的时候&#xff0c;我们可以观察到编译器报错了 这其实因为权限的放大&#xff0c;如下图所示&#xff0c;…

ML之VAR:基于上海最高气温数据集利用时间序列模型之VAR向量自回归模型/多变量自回归模型实现回归预测案例

ML之VAR&#xff1a;基于上海最高气温数据集利用时间序列模型之VAR向量自回归模型/多变量自回归模型实现回归预测案例 目录 基于上海最高气温数据集利用时间序列模型之VAR向量自回归模型/多变量自回归模型实现回归预测案例 # 1、定义数据集 # 2、数据集预处理 # 2.1、缺失值…

【Spring全家桶系列】Spring中的事务管理(基于注解完成实现)

⭐️前面的话⭐️ 本文已经收录到《Spring框架全家桶系列》专栏&#xff0c;本文将介绍Spring中的事务管理&#xff0c;事务的概念与作用&#xff0c;以及Spring事务的属性和传播机制。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f5…

怀念浩哥(左耳朵耗子),一个纯粹的技术人

上周末听闻浩哥的事了&#xff0c;期初还不信。在网上搜索消息&#xff0c;看来是真的。他才四十多岁&#xff0c;觉得非常可惜。很早就关注过浩哥&#xff0c;他是一位正直纯粹和爱分享的技术大牛。无论是技术分享还是人生感悟&#xff0c;或者是成长相关&#xff0c;都让我学…

Portainer: 带你领略强大且易用的容器管理平台

什么是Portainer? Portainer是一个强大的容器管理平台 Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。Portainer全球最受欢迎的容器管理平台,拥有超过100万用户和24,600颗GitHub星Portainer的定位及与周边生态的交互…

【Redis】聊一下持久化机制-AOF

前言 持久化其实在任何存储系统中&#xff0c;都是避不开的话题&#xff0c;比如数据库系统就有ACID进行数据、日志的持久化。将文件写入到内存、缓存、磁盘中。在比如消息队列Kafka也有消息的持久化机制&#xff0c;为防止数据的丢失也需要将数据持久化存储。目的其实就是为了…

javaweb系列- JavaScript事件

1.6 JavaScript事件 1.6.1 事件介绍 如下图所示的百度注册页面&#xff0c;当我们用户输入完内容&#xff0c;百度可以自动的提示我们用户名已经存在还是可以使用。那么百度是怎么知道我们用户名输入完了呢&#xff1f;这就需要用到JavaScript中的事件了。 什么是事件呢&…

【SpringBoot】整合第三方技术Junit. MybatisPlus druid

【SpringBoot】整合第三方技术 整合junit整合MyBatis整合Mybatis-plus使用阿里云创建工程 SpringBoot整合druid 整合junit 自己定义一个功能&#xff0c;测试功能接口 测试步骤注入你要测试的对象 提前声明为bean资源执行你要测试的方法 package com.ustc.sp7;import com.us…

MySQL—MVCC

文章目录 数据库并发的场景有三种MVCC概念读-写3个记录隐藏列字段undo log模拟MVCC Read ViewRC与RR的本质区别RCRR 数据库并发的场景有三种 读-读: 不存在任何问题&#xff0c;也不需要并发控制 读-写∶有线程安全问题&#xff0c;可能会造成事务隔离性问题&#xff0c;可能遇…

阿里云GPU服务器租用费用包年包月、一个小时和学生价格

阿里云GPU服务器租用价格表包括包年包月、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折&#xff0c;阿里云百科分享阿里云GPU服务器租用价格表、GPU一个小时…

chatgpt赋能Python-aidlearning安装python

安装Python的必要性和意义 Python是一种非常流行的编程语言&#xff0c;它的易学易用&#xff0c;高效实用&#xff0c;使得很多人选择使用Python进行编程。对于AI学习&#xff0c;Python更是至关重要&#xff0c;因为很多AI框架和算法都需要使用Python进行编写和实现。因此&a…