FMM 笔记:st-matching(colab上执行)【官方案例解读】

在colab上运行,所以如何在colab上安装fmm,可见FMM 笔记:在colab上执行FMM-CSDN博客

st-matching见论文笔记:Map-Matching for low-sampling-rate GPS trajectories(ST-matching)-CSDN博客

0 导入库

from fmm import Network,NetworkGraph,STMATCH,STMATCHConfig

1 加载数据(边的shp文件)

import geopandas as gpd
shp_path = "../data/edges.shp"
gdf = gpd.read_file(shp_path)
gdf

2  提取路网信息

network = Network("../data/edges.shp")
#通过Network类加载路网数据(edges.shp)print("Nodes {} edges {}".format(network.get_node_count(),network.get_edge_count()))
#Nodes 17 edges 30graph = NetworkGraph(network)
#使用NetworkGraph类基于这个网络创建一个图形(Graph)对象

3  创建ST-matching模型

model = STMATCH(network,graph)
#传入之前创建的网络和图形对象

3.1 定义st-matching模型的配置

k = 4
#candidate 数量
gps_error = 0.5
#gps定位误差
radius = 0.4
#搜索半径
vmax = 30
#速度上限
factor = 1.5
stmatch_config = STMATCHConfig(k, radius, gps_error, vmax, factor)

4 单条数据的地图匹配

4.0 输入数据

输入数据是wkt格式的数据

地理笔记:WKT,WKB,GeoJSON-CSDN博客

wkt ='LINESTRING(0.200812146892656 2.14088983050848,1.44262005649717 2.14879943502825,3.06408898305084 2.16066384180791,3.06408898305084 2.7103813559322,3.70872175141242 2.97930790960452,4.11606638418078 2.62337570621469)'

4.1 进行地图匹配

result = model.match_wkt(wkt,stmatch_config)
print("Matched path: ", list(result.cpath))
#Matched path:  [8, 11, 13, 18, 20, 24]
'''
这个输出显示的是整个轨迹匹配后形成的路径上的边的序列。
它代表了轨迹匹配算法认为GPS轨迹所经过的路网中的边的集合。
如果轨迹沿着某些边连续移动,这些边会在Matched path中按顺序出现。但重要的是,Matched path中不会重复相同的边,即使实际的GPS轨迹在同一条边上有多个点。
它更侧重于表示轨迹的整体路线,而不是每个点的具体匹配情况。
'''

cpath 联想为continuous path ,即“连续路径”

print("Matched edge for each point: ", list(result.opath))
#Matched edge for each point:  [8, 11, 18, 18, 20, 24]
'''
这个输出则提供了轨迹中每个单独点匹配到的边的详细信息。
即使多个连续的点匹配到了同一条边,这里也会为每个点重复显示那条边的ID
'''

opath, 联想为Original Path,即“原始路径”

print("Matched edge index ",list(result.indices))
#Matched edge index  [0, 1, 3, 3, 4, 5]
'''
这是匹配到的边的索引列表,表示每个匹配点在匹配路径中的位置
(和Matched edge for each point 表示的是一个意思)例如,如果输出是[0, 1, 3, 3, 4, 5],这意味着第一个点匹配到了cpath中第一个边(索引0),
第二个点匹配到了第二个边(索引1),接下来两个点都匹配到了第四个边(索引3),依此类推
'''
print("Matched geometry: ",result.mgeom.export_wkt())
#Matched geometry:  LINESTRING(0.20081215 2,1 2,2 2,3 2,3 3,4 3,4 2.6233757)
'''
匹配得到的路径的几何形状,以WKT(Well-Known Text)格式表示
'''print("Matched point ", result.pgeom.export_wkt())
#Matched point  LINESTRING(0.20081215 2,1.4426201 2,3 2.1606638,3 2.7103814,3.7087218 3,4 2.6233757)
'''
表示的是输入的GPS轨迹上的点如何被匹配到了道路网络上
'''

 mgeom——matched geometry

pgeom——projected geometry

5 带timestamp的数据的地图匹配

from fmm import Trajectory,wkt2linestring

5.1  获得轨迹 & 轨迹的timestamp

5.1.1 轨迹wkt转化成LineString

还是之前的那条轨迹的wkt,先转换为Linestring

line = wkt2linestring(wkt)
line
#<fmm.LineString; proxy of <Swig Object of type 'FMM::CORE::LineString *' at 0x7f9f5fe0fa50> >

5.1.2 为轨迹每一个点添加时刻

traj_id = 1
timestamps = []
for i in range(line.get_num_points()):timestamps.append(i)
traj = Trajectory(traj_id,line,timestamps)
traj
#<fmm.Trajectory; proxy of <Swig Object of type 'FMM::CORE::Trajectory *' at 0x7f9f98e0fa80> >

5.2 进行匹配

可以说前面虽然设置了stmatch的vmax,但是那个限制其实是用不上的

result = model.match_traj(traj,stmatch_config)
print("Matched path: ", list(result.cpath))
print("Matched edge for each point: ", list(result.opath))
print("Matched edge index ",list(result.indices))
print("Matched geometry: ",result.mgeom.export_wkt())
'''
Matched path:  [8, 11, 13, 18, 20, 24]
Matched edge for each point:  [8, 11, 18, 18, 20, 24]
Matched edge index  [0, 1, 3, 3, 4, 5]
Matched geometry:  LINESTRING(0.20081215 2,1 2,2 2,3 2,3 3,4 3,4 2.6233757)
'''

6 将一个文件中的轨迹分别进行匹配,并输出到另一个文件中

from fmm import GPSConfig,ResultConfig

6.1 输入文件设置

输入文件长这样:

gpd.read_file("../data/trips.csv")

# Define input data configuration
input_config = GPSConfig()
input_config.file = "../data/trips.csv"
input_config.id = "id"print(input_config.to_string())
'''
[40]
0 秒
print(input_config.to_string())
gps file : ../data/trips.csv
id column : id
geom column : geom
timestamp column : timestamp
x column : x
y column : y
GPS point : false
'''

6.2 输出文件信息

result_config = ResultConfig()
result_config.file = "../data/mr.txt"
result_config.output_config.write_opath = True
#结果文件将包含匹配的路径信息(每个单独点匹配到的边的信息)
print(result_config.to_string())
'''
Result file : ../data/mr.txt
Output fields: opath cpath mgeom 
'''

6.3 路网匹配

status = model.match_gps_file(input_config, result_config, stmatch_config)print(status)
'''
Status: success
Time takes 0.003 seconds
Total points 17 matched 17
Map match speed 5666.67 points/s 
'''

6.4  查看匹配结果

import pandas as pd
pd.read_csv("../data/mr.txt",delimiter=';')

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

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

相关文章

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

formality:set_constant应用

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: formality:形式验证流程 scan mode func的功能检查需要把scan mode设置成0。

Block UI——tree(2)编辑树列表

目录 一、概述 二、学习资料 三、学习案例——编辑树列表 3.1 UI界面分析 3.2编辑树列表方法一 3.3编辑树列表方法二 3.4编辑树列表方法二&#xff08;解决以上问题&#xff09; 三、总结 首先要感谢NX二次开发者无私奉献以及默默无闻的帮助和支持&#xff0c;在这里我推…

解决show-overflow-tooltip跨行生效的问题

当内容出现特殊字符&#xff08;空格换行&#xff09;会占据几行的空间后再显示... 解决&#xff1a; 1、自定义组件tooltip.vue <template><div><el-tooltip :disabled"isShowTooltip" class"tooltip" placement"top"><…

Vmware宿主机与虚拟机网络联通配置

Vmware宿主机与虚拟机网络联通配置 1. 查看宿主机配置 2. 网卡是否启动 更改适配器选项&#xff1a; 网卡全部启用 3. 查看虚拟机IP 虚拟机IP需要与宿主机VMnet8保持网段一致&#xff0c;不一致则进行修改

QQ防红跳转短网址生成网站完整源码

使用此源码可以生成QQ自动跳转到浏览器的短链接&#xff0c;无视QQ报毒&#xff0c;任意网址均可生成。 全新界面&#xff0c;网站背景图采用Bing随机壁纸 支持生成多种短链接 兼容电脑和手机页面 生成网址记录功能&#xff0c;域名黑名单功能 网站后台可管理数据 安装说明&am…

Linux 不同架构、不同系统的问题

文章目录 一、麒麟V10&#xff08;kylin&#xff09;操作系统中&#xff0c;sudo执行程序后&#xff0c;其环境变量依然为用户家目录。&#xff08;1&#xff09;背景&#xff08;2&#xff09;原因&#xff08;3&#xff09;解决办法 二、统信&#xff08;UOS&#xff09;操作…

Datawhale-Sora技术原理分享

目录 Sora能力边界探索 Sora模型训练流程 Sora关键技术拆解 物理引擎的数据进行训练 个人思考与总结 参考 https://datawhaler.feishu.cn/file/KntHbV3QGoEPruxEql2c9lrsnOb

Unity Shader - sahder变体剔除

文章目录 吐槽优化方案 - 目前最靠谱的方式shadercsharp 吐槽 我之所以单独写这边文章&#xff0c;是因为之前写的一篇&#xff1a; Unity Shader - Built-in管线下优化变体&#xff0c;编辑后&#xff0c;无法保存&#xff0c;一直提示&#xff1a;操作超时。 等了差不多 3…

BUUCTF crypto做题记录(10)新手向

一、[MRCTF2020]古典密码知多少 这题一看首先能想到猪圈密码&#xff0c;每种颜色都代表一种古典密码。鉴于都是用图形表示&#xff0c;其余两种与猪圈密码类似。BUUCTF-Crypto-猪圈密码及其变种银河密码跳舞的小人_猪圈密码对照表-CSDN博客 在这篇文章中介绍一些与猪圈密码类…

3D生成式AI模型与工具

当谈到技术炒作时&#xff0c;人工智能正在超越虚拟世界&#xff0c;吸引世界各地企业和消费者的注意力。 但人工智能可以进一步增强虚拟世界&#xff0c;至少在某种意义上&#xff1a;资产创造。 AI 有潜力扩大用于虚拟环境的 3D 资产的创建。 AI 3D生成使用人工智能生成3D模…

vscode连接服务器与FileZilla上传到服务器

https://www.cnblogs.com/qiuhlee/p/17729647.html&#xff08;这个是vscode连接服务器&#xff09; 主机&#xff1a;就是服务器的主机号 使用者名称&#xff1a;比如ALmax的用户名 密码&#xff1a;比如ALmax的密码

hcia datacom课程学习(1):通信基础

1.总体框架 上图为发送方通过互联网传递信息给接收方的过程。 家用路由器会直接集成上图中的四层&#xff08;vlan&#xff0c;DHCP&#xff0c;静态路由&#xff0c;NAT&#xff0c;PPPoE&#xff09;。 2.网络性能指标 &#xff08;1&#xff09;带宽 单位时间内传输的数…

计算机操作系统(慕课版)第二章学习笔记

第二章学习笔记 1.1 前趋图描述程序执行 前趋图&#xff1a;用于描述程序执行先后顺序 定义&#xff1a;一个有向无循环图&#xff0c;是一个二元组&#xff0c;由结点的集合和有向边组成。其中&#xff1a; 结点&#xff1a;表示一条语句、一个程序段或一个进程 有向边&#x…

Ps:索引颜色模式

Ps菜单&#xff1a;图像/模式/索引颜色 Image/Mode/Indexed Color 索引颜色 Indexed Color模式可生成最多 256 种颜色的 8 位图像文件。 这种颜色的限制使得索引颜色模式的图像文件相比于全彩图像&#xff08;如 RGB 颜色模式下的图像&#xff09;具有更小的文件大小&#xff0…

ConvNext学习

参考&#xff1a; [1] LIU Z, MAO H, WU C Y, et al. A ConvNet for the 2020s[C/OL]//2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), New Orleans, LA, USA. 2022. http://dx.doi.org/10.1109/cvpr52688.2022.01167. DOI:10.1109/cvpr52688.2…

更换个人开发环境后,pycharm连接服务器报错Authentication failed

原因&#xff1a;服务器中更换个人开发环境后&#xff0c;密码变了。 解决&#xff1a;在pycharm中修改服务器开发环境密码即可。 1 找到Tools-Depolyment-Configuration 2 点击SSH Configuration后的省略号 3 修改这里面的Password即可

Spring Web 参数验证常见错误

参数检验是我们在 Web 编程时经常使用的技术之一&#xff0c;它帮助我们完成请求的合法性校验&#xff0c;可以有效拦截无效请求&#xff0c;从而达到节省系统资源、保护系统的目的。 相比较其他 Spring 技术&#xff0c;Spring 提供的参数检验功能具有独立性强、使用难度不高…

C++17之折叠表达式

相关文章系列 深入理解可变参数(va_list、std::initializer_list和可变参数模版) 目录 1.介绍 2.应用 2.1.使用折叠表达式 2.2.支持的运算符 2.3.使用折叠处理类型 3.总结 1.介绍 折叠表达式是C17新引进的语法特性。使用折叠表达式可以简化对C11中引入的参数包的处理&…

StarRocks之监控管理(内含DashBoard模板)

先看下最终效果图 架构 Prometheus 是一个拥有多维度数据模型的、灵活的查询语句的时序数据库。它可以通过 Pull 或 Push 采集被监控系统的监控项,存入自身的时序数据库中。并且通过丰富的多维数据查询语言,满足用户的不同需求。 Grafana 是一个开源的 Metric 分析及可视化系…