Pytrack 函数整理

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

radius也可以是一个和points维度一样的list,表示不同点的半径不一样

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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值