如何简单计算从一点到另一点的旅行时间? (无剧情)

2024-03-09

我花了很多时间阅读和测试OSMnx 的示例笔记本 https://github.com/gboeing/osmnx-examples但我无法找到一种方法来简单地计算从给定点(GPS 坐标)到另一个点的旅行时间。 我想估计,对于列表中的每个点,到达特定点(有时 100 公里外)需要多长时间。我不需要生成图表/地图/绘图,因为我只需要每次旅行的持续时间(并且我认为 OSMnx 地图在城市规模上渲染得更好)。

我非常绝望,因为我找不到一种简单的方法来跨不同的 Python 库执行此操作...如果在国家范围地图内对 +-10k 点进行计算对 OSMnx 要求太多,本地存储的 pbf 文件可以吗该国对另一种解决方案有帮助吗?


当您想要对大型研究区域(例如整个地区或整个国家)进行建模时,存在固有的权衡:1) 模型精度 vs 2) 区域大小 vs 3) 内存/速度。您需要权衡这三者之一。

首先,您可以对较粗粒度的网络进行建模,例如仅对该地区/国家/地区的主要道路进行建模,而不是对数百万条细粒度的住宅街道和路径进行建模。对于第二个,您可以研究较小的区域。对于第三种,您可以配置一台具有大量内存的计算机,然后让脚本运行一段时间以完成该过程。您权衡什么将取决于您自己的分析需求。

在下面的示例代码中,我选择权衡#1:我通过高速公路和主干道对该地区(西米德兰兹)进行了建模。考虑到不同的分析目标,您可能会权衡其他事情。创建模型后,我随机sample https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils_geo.sample_points1000 个出发点和目的地经纬度点,将它们捕捉到最近的节点 https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.distance.nearest_nodes并求解图中的最短路径 https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.distance.shortest_path by 旅行时间 https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.speed.add_edge_travel_times(占speed https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.speed.add_edge_speeds限制)与多处理。

import osmnx as ox

# get boundaries of West Midlands region by its OSM ID
gdf = ox.geocode_to_gdf('R151283', by_osmid=True)
polygon = gdf.iloc[0]['geometry']

# get network of motorways and trunk roads, with speed and travel time
cf = '["highway"~"motorway|motorway_link|trunk|trunk_link"]'
G = ox.graph_from_polygon(polygon, network_type='drive', custom_filter=cf)
G = ox.add_edge_speeds(G)
G = ox.add_edge_travel_times(G)

# randomly sample lat-lng points across the graph
origin_points = ox.utils_geo.sample_points(ox.get_undirected(G), 1000)
origin_nodes = ox.nearest_nodes(G, origin_points.x, origin_points.y)
dest_points = ox.utils_geo.sample_points(ox.get_undirected(G), 1000)
dest_nodes = ox.nearest_nodes(G, dest_points.x, dest_points.y)

%%time
# solve 1000 shortest paths between origins and destinations
# minimizing travel time, using all available CPUs
paths = ox.shortest_path(G, origin_nodes, dest_nodes, weight='travel_time', cpus=None)
# elapsed time: 9.8 seconds

为了更快地建模,您可以从 .osm XML 加载网络数据file https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.graph.graph_from_xml而不必多次调用 Overpass API。默认情况下,OSMnx 将您的查询区域划分为 50km x 50km 的块,然后每次对每个块查询 Overpass,以免超出服务器的每次查询内存限制。你可以配置 https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils.config this max_query_area_size参数以及服务器内存分配(如果您更喜欢使用 OSMnx 的 API 查询函数而不是其来自文件的功能)。

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

如何简单计算从一点到另一点的旅行时间? (无剧情) 的相关文章

随机推荐

  • 如何将 Web 应用程序转换为桌面可执行文件?

    我使用 AngularJS jQuery Bootstrap 和 AJAX REST API 构建了 HTML 应用程序 是否可以为 Windows 操作系统创建可执行文件 安装程序 如果没有任何第三方软件 它应该看起来像本机应用程序 但只
  • WCF 与 Flash 教程

    我是 WCF 的初学者 我选择 WCF 而不是 Web 服务 因为我读过的所有文章和博客似乎都指出 ASMX 已经是旧闻了 我读过一些有关旧 Web 服务和 WCF 之间差异的内容 并且了解了总体思路 我也采取了MSDN WCF 教程 ht
  • Node.js / Express.js - 如何覆盖/拦截 res.render 函数?

    我正在使用 Connect Express js 构建 Node js 应用程序 并且我想拦截 res render view option 函数以运行一些代码 然后再将其转发到原始渲染函数 app get someUrl function
  • 如何更改所用纱线的版本?

    我使用Homebrew安装yarn 跑步yarn v显示我目前使用0 23 2 I ran brew upgrade yarn获取最新版本 即0 24 6 Homebrew成功升级后yarn I run yarn v又来了 不过版本还是0
  • MvvmCross 自定义事件绑定事件参数

    我使用 MvvmCross 在 EditText 上为 FocusChange 事件创建了自定义绑定 我可以绑定事件并触发 但我不知道如何传递事件参数 我的自定义绑定是这样的 using Android Views using Androi
  • 使用 python 在 CSV 文件中搜索字符串并写入结果

    usr bin python import csv import re string 1 OneTouch AT string 2 LinkRunner AT string 3 AirCheck searched OneTouch AT L
  • R 中的左移列

    我有一个这样的数据集 temp lt structure list col 1 c P9603 11040 80053 col 2 c 84484 80061 80061 A0428 85025 col 3 c V2632 82310 86
  • 谷歌电子表格公式中的多个嵌套 if 块

    我试图编写一个嵌套的 if 语句 如下伪代码 IF h4 1 CORRECT IF h4 2 CORRECT IF h4 3 CORRECT IF h4 4 CORRECT 但是 如果我写出代码并每次添加 if 语句 我会收到以下错误 IE
  • 使用 PHP 将时间添加 30 秒

    我怎样才能给这个时间加上30秒呢 time date m d Y h i s a time 我不知道该怎么做 因为它显示了很多不同的时间单位 而我只想添加 30 秒 time date m d Y h i s a time 30
  • 输入大数以避免 NumberFormatException

    我必须控制从1到9999999999的输入 代表学校的注册号 原始类型 long 只能容纳大约 2 000 000 000 我如何存储这个大小的数字 根据this http docs oracle com javase tutorial j
  • www.sandbox.itunes.apple.com 已关闭

    在此先感谢您的帮助 具体问题 由于在沙盒环境中测试应用内购买时出现错误 1001 无法连接到 iTunes 商店 知道是否重要吗 www sandbox itunes apple com下降了吗 如果没有 我怎么知道苹果的沙盒是否已关闭 背
  • 如何创建一个所有字段都是公共的公共结构,而无需为每个字段重复“pub”?

    如何在 Rust 中定义一个公共结构 其中所有字段都是公共的 而不必重复pub每个字段前面的修饰符 A pub struct宏将是理想的 pub struct Foo a i32 b f64 这相当于 pub struct Foo pub
  • 如何创建动画切换按钮?

    是的 我可以创建带有 2 张图片的 ToggleButton 开 关 但我想创建带有 3 5 张图片的 ToggleButton 例如 什么时候关闭 我单击 关闭图片 中图 图片上 它什么时候开启 我点击 图片上 中图 关闭图片 所以它就像
  • 带有 postgres 的游标,数据存储在哪里以及对数据库的调用次数

    您好 我正在使用 psycopg2 进行 postgres 访问 我试图了解 光标 存储返回的行的位置 是将其作为临时表存储在数据库中还是存储在客户端 游标 当您指定获取多行时 是否一次命中数据库一个查询 或者它是否命中数据库一次 获取第一
  • android - 无需root即可将字体安装到android平台

    我开发了一个新的应用程序 它是一种古老的埃及语言 科普特语 我需要在 Android 平台上安装特定的字体 使这种语言可读 我搜索是否找到应用程序执行相同的功能iFont 另外 当我访问字体文件夹时 我发现它允许安装字体 在线获取字体 那么
  • Javascript 数组分页

    我正在尝试编写一个 Javascript 函数 该函数需要array page size and page number作为参数并返回一个模仿分页结果的数组 paginate function array page size page nu
  • 我可以用64位jre运行使用32位jdk开发的java程序吗?应用程序使用32位非java系统库

    我正在 64 位 Windows 7 安装上使用 64 位 eclipse 开发一个 java 应用程序 我被迫使用 32 位 JDK 1 7 0 因为应用程序使用Jpcap http netresearch ics uci edu kfu
  • iPhone X如何处理View Controller inputAccessoryView?

    我有一个消息应用程序 它具有典型的 UI 设计 即全屏表格视图底部的文本字段 我将该文本字段设置为视图控制器的inputAccessoryView并打电话ViewController becomeFirstResponder 以使该字段显示
  • Javascript 文字处理器/编辑器(或 Google Docs 架构)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我认为像 Google 文档那样推出
  • 如何简单计算从一点到另一点的旅行时间? (无剧情)

    我花了很多时间阅读和测试OSMnx 的示例笔记本 https github com gboeing osmnx examples但我无法找到一种方法来简单地计算从给定点 GPS 坐标 到另一个点的旅行时间 我想估计 对于列表中的每个点 到达