21_创建热图 QGIS3
原文链接: https://www.qgistutorials.com/en/docs/3/creating_heatmaps.html
创建热图 (QGIS3)¶
热图是可视化密集点数据的最佳工具之一。热图是一种插值技术,有助于确定输入要素的密度。热图最常用于可视化犯罪数据、交通事故、房屋密度等。QGIS 有一个热图渲染器,可用于设置点图层的样式,还有一个 Processing 算法 Heatmap (Kernel Density Estimation),可用于从点图层创建栅格。
任务概述¶
我们将使用英国萨里郡的犯罪位置数据集,并创建一个热图来可视化犯罪高密度区域。
你将学到的其他技能¶
- 使用虚拟字段和条件表达式
获取数据¶
data.police.uk 提供街道级别的犯罪、结果以及拦截和搜查数据,格式为简单的 CSV。下载 萨里郡警察局 的数据,并解压缩下载的归档文件以提取 CSV 文件。
为方便起见,你也可以直接通过下面的链接下载数据集的副本:
数据来源 [POLICEUK]
操作步骤¶
- 我们首先从 OpenStreetMap 加载一个底图图层,然后导入 CSV 数据。在浏览器面板中,向下滚动并找到 XYZ Tiles 部分。
- 展开它,你会看到 OpenStreetMap 瓦片图层。将其拖放到主画布上。接下来,我们将加载 CSV 文件。点击“打开数据源管理器”按钮。
- 切换到“分隔文本”选项卡。在这里,我们将导入 CSV 格式文本文件中的犯罪数据。点击“文件名称”旁边的 … 按钮,浏览到下载的
2019-02-surrey-street.csv文件。“几何图形定义”部分中的 X 字段和 Y 字段会自动填充为Longitude和Latitude列。几何图形 CRS 应保留为默认的EPSG:4326 - WGS 84。确保“样本数据”面板中的数据看起来正确,然后点击添加,接着点击关闭。
- 你会看到 QGIS 图层面板中加载了 2 个图层 -
OpenStreetMap和2019-02-surrey-street。右键点击2019-02-surrey-street图层并选择“缩放到图层”。
- 你将看到犯罪事件点图层叠加在 OpenStreetMap 底图上。缩放和平移以探索数据。数据非常密集,很难看出哪里犯罪高度集中。这正是热图可视化派上用场的地方。选择
2019-02-surrey-street图层,然后点击“打开图层样式面板”按钮。
- 在下拉菜单中选择
Heatmap作为渲染器。图层样式面板是交互式的,你可以立即在画布上看到更改的效果。该图层现在将以默认的灰度色带显示。
- 热图通常使用黄色到红色或白色到红色的色带来渲染,其中点越密集,热度 就越高。点击“色带”下拉菜单,选择
Reds色带。
- 接下来,你需要选择一个半径。此参数决定了每个点周围其影响所及的圆形邻域。此值在很大程度上取决于你的输入数据类型。对于我们的数据,假设一个犯罪事件的影响范围可达其位置周围 5 公里。请注意,当前项目 CRS 在右下角设置为
EPSG: 3857。该 CRS 的单位是米,因此我们应将半径指定为5000米。此菜单中隐藏的另一个参数是核函数形状。这是一个确定一个点的影响如何在给定半径内分布的函数。热图渲染器使用Quartic函数进行计算。还有其他类型的核函数,如Triangular、Uniform、Triweight和Epanechnikov,这些可以在本教程稍后描述的使用其他热图创建方法时指定。关于如何选择正确的半径和核函数形状,请参阅 这篇文章 以获得很好的解释和指导。
- 热图可视化已经准备就绪。我们可以在底部的“图层渲染”部分调整热图的不透明度。将不透明度设置为
60 %,这样你就可以同时看到底图和热图。
- 对于许多类型的分析,只考虑点的密度就足够了。但有时,你可能希望为每个点赋予不同的重要性。一次更暴力的犯罪对输出热图的影响应该比一次抢劫更大。同样,有时一个点可能代表单个位置的多次观察,这需要在分析中加以考虑。为此,你可以提供一个可选的数值 权重 字段,为每个点指定一个值。让我们添加一个权重字段,并用它来改进热图。右键点击
2019-02-surrey-street图层,选择“打开属性表”。
- 你将看到输入数据中有一个名为
Crime type的文本字段,它描述了犯罪类型。我们可以用这些来区分不同类型的犯罪,并为更暴力的犯罪分配更高的权重。
- 点击“打开字段计算器”。
- 现在我们将输入一个公式,该公式使用
Crime type并确定权重值。QGIS 有一种方便的方法,可以使用 虚拟字段 添加此类计算字段。虚拟字段保存在 QGIS 项目中,不会修改源数据。它也是动态计算的,可以在 QGIS 中的任何地方像使用任何其他属性值一样使用。输入weight作为输出字段名称,并将输出字段类型设置为Whole number (integer)。在表达式编辑器中输入以下表达式。这里我们使用 CASE 语句根据不同的条件分配不同的值。点击确定。
bash CASE WHEN "Crime type" LIKE 'Violence%' THEN 10 WHEN "Crime type" LIKE 'Criminal%' THEN 5 ELSE 1 END
- 将为每个要素添加一个具有相应权重值的新属性。
- 回到图层样式面板,点击“权重依据”下拉菜单,选择新添加的
weight字段。
- 你将看到热图渲染发生变化,以考虑权重参数。关闭图层样式面板。
- 如果你需要将热图可视化保存为永久的栅格图层,或者想要使用不同的核函数或动态半径等高级选项自定义热图,你可以使用 Processing 工具箱中的 Heatmap (Kernel Density Estimation) 算法。我们现在将使用这个算法。转到处理 ‣ 工具箱。
- 在我们创建热图之前,需要将源数据重新投影到一个投影坐标系。由于距离在热图计算中起着重要作用,使用地理坐标系是不正确的。搜索并找到矢量通用 ‣ 重投影图层 算法。
- 在“重投影图层”对话框中,点击目标 CRS 旁边的选择 CRS 按钮。搜索并选择
EPSG:27700 OSGB 1936 / British National GridCRS。这个投影坐标系是英国数据的一个很好的选择。点击运行。
- 一个名为
Reprojected的新图层将被添加到图层面板。取消勾选旧的2019-02-surrey-street图层旁边的复选框以隐藏它。
- 搜索并找到插值 ‣ 热图 (核密度估计) 算法。
- 在“热图 (核密度估计)”对话框中,我们将使用与之前相同的参数。选择半径为
5000米,权重依据字段为weight。将 X 像素大小和 Y 像素大小设置为50米。将核函数形状保留为默认值Quartic。点击运行。
注意
“字段半径”参数允许你为每个点指定动态搜索半径。这可以与“字段权重”一起使用,以便更精细地控制每个点的影响如何传播。
- 处理完成后,将加载一个名为
OUTPUT的新栅格图层。默认的可视化效果很丑,因为它使用了Singleband gray渲染器。点击“打开图层样式面板”按钮。
- 将渲染器更改为
Singleband Pseudocolor并选择Reds色带。该图层现在看起来与我们之前创建的热图可视化相同。
注意
请注意,图层面板中的 OUTPUT 图层有一个图例,但 2019-02-surrey-street 图层没有。使用热图渲染器创建的热图图层的一个常见问题是缺乏图例。假设你想在打印布局中使用热图并添加一个图例。使用热图处理算法方法创建的栅格热图使得这成为可能。
如果你想提供反馈或分享你学习本教程的经验,请在下方评论。(需要 GitHub 账户)























