41_使用UBER MOVEMENT进行旅行时间分析 (QGIS3)
原文链接: https://www.qgistutorials.com/en/docs/3/travel_time_analysis.html
使用 Uber Movement 进行旅行时间分析 (QGIS3)¶
警告
Uber Movement 数据已停止服务 [查看公告]。您仍然可以使用本教程提供的存档数据并学习在 QGIS 中进行旅行时间分析的技术。
Uber Movement 分享了全球许多城市的匿名汇总旅行时间数据。Uber Movement 的 旅行时间 产品是一个衡量城市内区域间旅行的公开数据集。这些时间基于实际的 Uber 行程,是城市拥堵和交通模式的准确反映。这是一个从数百万次实际出租车行程中汇总而来的大型公开数据集。本教程展示了在 QGIS 中使用此类汇总交通数据集进行旅行时间分析的技术。
任务概述¶
我们将使用印度班加罗尔市的汇总交通数据集,来查找从城市内任意地点到某个选定位置的旅行时间。我们还将为 30 分钟旅行时间阈值创建一张 等时线图。
您将学到的其他技能¶
- 在 QGIS 中加载 GeoJSON 文件
获取数据¶
我们将下载印度班加罗尔市的旅行时间数据集。
- 访问 Uber Movement 网站,点击 城市(Cities)。
- 搜索
Banglore。
- 点击 下载数据(Download data)。
- 在
下载数据(Download data)弹窗中,切换到 地理边界(GEO BOUNDARIES)。它将包含班加罗尔区的 GeoJSON 文件。接受许可信息,然后点击BANGLORE_WARDS.JSON进行下载。
- 然后切换到 全部数据(ALL DATA)。此数据从 2016 年到 2020 年可用,每年分为 4 个季度。我们将下载
2019 年第 3 季度的数据。选中它并点击每日各小时旅行时间(仅限工作日)(Travel Times by Hour of Day (Weekdays Only))。该文件将包含 2019 年 7 月至 9 月班加罗尔工作日 Uber 出行的所有匿名信息。
为方便起见,您可以从以下链接下载数据。
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv
数据来源: [UBER]
操作步骤¶
- 在 浏览器(Browser) 面板中找到
bangalore_wards.json文件并将其拖到画布上。接下来,我们将从 OpenStreetMap 加载一个底图图层。我们将使用 QuickMapServices 插件访问底图。安装后,转到 Web(网络) ‣ QuickMapServices ‣ OSM ‣ OSM 标准(OSM Standard)。一个来自 OpenStreetMap 的底图切片图层将被添加到项目中。接下来,点击 打开数据源管理器(Open Data Source Manager) 按钮。
- 切换到 分隔文本(Delimited Text) 选项卡。浏览到
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv文件并选中它。由于此 CSV 文件仅为表格数据,请选择 无几何图形(仅属性表)(No geometry (attribute only table)) 选项,然后点击 添加(Add)。
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate图层将被添加到 图层(Layers) 面板中。此图层包含城市不同区域之间匿名和汇总的行程位置数据。表中的每一行都包含以下列:源区域(sourceid)、目标区域(dstid)、一天中的小时(hod)以及在该小时从这些区域之间的所有行程汇总的平均旅行时间(mean_travel_time)。您可以在 Movement:旅行时间计算方法论(PDF) 中了解更多关于此数据集的信息。在继续之前,让我们检查一下该图层中有多少条数据记录。右键单击bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate图层并选择 显示要素计数(Show Feature Count)。表格的总行数将显示在其旁边。这是一个相当大的表,但我们的分析不需要所有数据行。现在我们将确定我们的目标位置,并过滤此表中与该位置相关的数据记录。
- 我们想计算从特定位置出发,在 30 分钟内可到达的所有区域。使用 OSM 标准底图,您可以找到感兴趣的位置。然后选中
bangalore_wards图层,使用 识别(Identify) 工具并点击该位置。结果将显示包含该位置的区域的属性。出于本教程的目的,我们假设我们的目标位置位于 JP Nagar 区内,其 MOVEMENT_ID 为 193。
- 我们可以过滤旅行时间记录,只保留那些将此区作为目的地的记录。我们还可以将分析限制在早上 9 点到 10 点的通勤高峰时段。右键单击
bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate图层并选择 过滤(Filter)。
- 输入以下过滤表达式并点击 确定(OK)。
bash "dstid" = 193 AND "hod" = 9
- 回到 QGIS 主窗口,您会看到过滤后的表中的记录数现在仅为 197 条。由于城市总共有 198 个区,我们拥有 1 个目的地区和 197 个源区之间的旅行时间记录。使用 属性(Attributes) 工具栏中的 打开属性表(Open Attribute Table) 按钮,打开两个图层的属性表。
- 现在我们在
bangalore_wards图层中拥有了各区的几何形状,在bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate图层中拥有了表格信息。我们可以使用一个共同的属性将属性信息连接到几何形状。这里的bangalore_wards图层中的MOVEMENT_ID列和bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate中的sourceid列是唯一的区标识符,可以进行连接。此操作称为 表连接(Table Join)。
- 在连接这两个图层之前,我们必须确保两列中的值完全匹配。虽然它们看起来相同,但它们的类型不同。由于 GeoJSON 格式无法指定属性类型,所有值都被假定为 字符串(String) 类型 - 即文本。但是当我们导入 CSV 到 QGIS 时,默认情况下,QGIS 会根据值尝试确定列的类型并分配适当的字段类型。对于 CSV 文件,列
sourceid的数据类型被分配为 整数(Integer)。因此,我们还需要将 GeoJSON 中的列转换为 整数(Integer) 类型。转到 处理(Processing) ‣ 工具箱(Toolbox) ‣ 矢量表(Vector Table) ‣ 字段计算器(Field Calculator) 算法。双击启动它。
- 选择
bangalore_wards作为 输入图层(Input Layer)。将 字段名称(Field Name) 命名为joinfield,并将 结果字段类型(Result field type) 选择为Integer。输入MOVEMENT_ID作为 表达式(Expression)。点击 计算后(Calculated) 旁边的 … 按钮,然后选择 保存到文件…(Save to File…),接着将输出文件名输入为bangalore_wards_fixed.gpkg。点击 运行(Run)。关闭字段计算器。
- 一个新图层
bangalore_wards_fixed将被添加到 图层(Layers) 面板。现在我们准备好执行连接了。转到 处理(Processing) ‣ 工具箱(Toolbox) ‣ 矢量通用(Vector General) ‣ 按字段值连接属性(Join attributes by field value)。双击启动它。
- 选择
bangalore_wards_fixed作为 输入图层(Input layer),选择joinfield作为 表字段(Table field)。选择bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate作为 输入图层 2(Input layer 2),选择sourceid作为 表字段 2(Table field 2)。将 已连接图层(Joined layer) 命名为uber_travel_times.gpkg并点击 运行(Run)。
- 一个新图层
uber_travel_times将被添加到 图层(Layers) 面板。让我们为其设置样式以可视化连接结果。点击 打开图层样式面板(Open the Layer Styling Panel)。选择 分级(Graduated) 渲染器,并将mean_travel_time作为 值(Value)。选择一个色带并点击 分类(Classify)。您将看到地图显示离目的地越远,旅行时间越长。
- 但我们的目标是分析和提取旅行时间在 30 分钟内的区域,因此我们需要进行更多处理。将样式切换回 单一符号(Single symbol) 渲染器。右键单击
uber_travel_times图层并选择 过滤(Filter)。
- 输入以下表达式,以选择所有平均旅行时间在 1800 秒(30 分钟)内的区域。我们还需要包含我们的目的地区域,其旅行时间为 0。
bash "mean_travel_time" <= 1800 OR "MOVEMENT_ID" = 193
- 该图层现在将显示构成感兴趣区域的多边形群。我们现在将它们全部合并为一个单一的多边形。转到 处理(Processing) ‣ 工具箱(Toolbox) ‣ 矢量几何(Vector Geometry) ‣ 融合(Dissolve)。双击启动它。
- 选择
uber_travel_times作为 输入图层(Input layer)。将 融合后的图层(Dissolved layer) 命名为30min_isochrone.gpkg。点击 运行(Run)。
- 一个新图层
30min_isochrone将被添加到 图层(Layers) 面板,显示我们的分析结果。
如果您想提供反馈或分享您对本教程的体验,请在下方评论。(需要 GitHub 账户)






















