制作热区图 (QGIS3)

热图是用于密集点数据的最佳可视化工具之一。热图是一种插值技术,可用于确定输入要素的密度。热图最常用于可视化犯罪数据,交通事故,房屋密度等。QGIS具有可用于设置点层样式的热图渲染器以及可用于处理 热图(内核密度估计) 的处理算法从点图层创建栅格。

内容说明

我们将使用英国萨里市的犯罪地点数据集,并创建一个热图,以可视化高犯罪率地区。

你还会学到这些

  • 使用虚拟字段和条件表达式

取得资料

data.police.uk 以简单的CSV格式提供了街道一级的犯罪,结果,停止和搜索数据。下载 Surrey Police 的数据,并解压缩下载的档案以提取CSV文件。

为了方便起见,你也可以直接用下面的连结下载数据集:

2019-02-surrey-street.csv

资料来源 [POLICEUK]

操作流程

  1. 我们将首先从OpenStreetMap加载底图图层,然后导入CSV数据。单击 Open Data Source Manager 按钮。

../../_images/128.png
  1. 在左侧面板中选择 Browser 标签,然后在 XYZ Tiles 下找到 OpenStreetMap 图层。右键单击并选择 Add Selected Layer(s) to Canvas 以在QGIS中添加该图层。

../../_images/220.png
  1. 切换到 Delimited Text 标签。在这里,我们将导入CSV格式文本文件中的犯罪数据。单击文件名旁边的 按钮,然后浏览至 File name 并且下载 2019-02-surrey-street.csv 文件。要在 Geometry Definition 部分的 X fieldY field 中自动填充 经度纬度 列。几何标签CRS应该保留默认的 EPSG:4326-WGS 84 定义。确保数据在 Sample data 面板中看起来正确,然后单击 Add ,然后单击 Close

../../_images/317.png
  1. 您将看到2层,在QGIS图层面板中加载的 OpenStreetMap2019-02-surrey-street。右键单击 2019-02-surrey-street 图层,然后选择 Zoom to Layer

../../_images/48.png
  1. 您将看到犯罪事件点图层叠加在OpenStreetMap底图上。缩放和平移以浏览数据。数据非常密集,很难了解犯罪高度集中的地方。这是热图可视化将派上用场的地方。选择 2019-02-surrey-street 图层,然后单击 Open the Layer Styling panel 面板按钮。

../../_images/58.png
  1. 在下拉框菜单中选择 Heatmap 作为渲染器。Layer Styling panel 面板是交互式的,您可以立即在画布上看到更改的效果。现在,该图层将以默认的灰度彩色渐变显示。

../../_images/68.png
  1. 热图通常是使用黄色到红色或白色到红色的颜色渐变的渲染器,其中较高的点集中会导致更多的 热量。单击颜色渐变下拉菜单并选择 红色

../../_images/78.png
  1. 接下来,您需要选择一个 Radius。此参数确定该点将对其产生影响的每个点周围的圆形邻域。此值将在很大程度上取决于输入数据的类型。对于我们的数据,我们假设犯罪事件会在距该地点最高5公里的地方产生影响。请注意,当前项目的CRS在右下角设置为 EPSG:3857。此CRS的单位为米,因此我们应将半径指定为 5000 米。此菜单中隐藏的另一个参数是内核形状。此功能确定点的影响应如何在给定半径上扩展。 Heatmap渲染器使用 Quartic 函数进行此计算。当使用本教程后面介绍的其他热图创建方法时,可以指定其他类型的内核,例如 TriangularUniformTriweightEpanechnikov 。有关选择正确的半径和核形状的详细说明和指南,请参见 这个帖子

../../_images/88.png
  1. 热图可视化已准备就绪。我们可以在底部的 Layer Rendering 部分中调整热图的 Opacity。将不透明度设置为 60%,以便可以看到底图以及热图。

../../_images/98.png
  1. 对于许多类型的分析,仅考虑点密度就足够了。但是有时候,您可能希望对每个点赋予不同的重要性。暴力行为比抢劫对犯罪现场的热图影响更大。同样,有时一个点可能代表一个位置上的多个观测值,因此需要在分析中加以考虑。为此,您可以提供一个可选的数字 重量 字段,该字段为每个点指定一个值。让我们添加一个权重字段并将其用于改善热图。右键单击 2019-02-surrey-street 图层,然后选择 Open Attribute Table

../../_images/108.png
  1. 您将在输入数据中看到一个描述犯罪类型的文本字段,称为 犯罪类型。我们可以使用它们对不同类型的犯罪进行分类,并为较暴力的犯罪赋予更高的权重。

../../_images/1111.png
  1. 点击 Open field calculator

../../_images/129.png
  1. 现在我们将输入使用 犯罪类型 的公式并确定重量值。QGIS有一种方便的方法可以使用 Virtual Fields 添加此类计算字段。虚拟字段保存在QGIS项目中,并且不会修改源数据。它也是动态计算的,可以像其他任何属性值一样在QGIS中的任何位置使用。输入 weight 作为 Output field name 并将 Output field type 设置为 整数(整数)。在 Expression editor 中输入以下表达式。在这里,我们使用 CASE 语句根据不同的条件分配不同的值。点击 OK

CASE
WHEN "Crime type" LIKE 'Violence%' THEN 10
WHEN "Crime type" LIKE 'Criminal%' THEN 5
ELSE 1
END
../../_images/138.png
  1. 将为每个具有适当权重值的特征添加一个新属性。

../../_images/147.png
  1. 返回 Layer Styling 面板中,单击 Weight points by 的下拉菜单,然后选择新添加的 重量 字段。

../../_images/157.png
  1. 您将看到热图渲染更改,以说明weight参数。关闭 Layer Styling 面板。

../../_images/166.png
  1. 如果您需要将热图可视化保存为永久栅格图层,或者想使用高级选项(例如不同的内核或动态半径)自定义热图,则可以使用Processing Toolbox中的 Heatmap(内核密度估计)。现在,我们将使用此算法。转到 Processing ‣ Toolbox

../../_images/177.png
  1. 在创建热图之前,我们需要将源数据重新投影到投影的CRS。由于距离在热图的计算中起着重要作用,因此使用地理CRS是不正确的。搜索并找到 Vector general ‣ Reproject layer 算法。

../../_images/186.png
  1. Reproject layer 对话框中,为 Target CRS 单击 Select CRS 按钮。搜索并选择 EPSG:27700 OSGB 1936 / British National Grid CRS。预计的CRS是英国数据的不错选择。点击 Run

../../_images/196.png
  1. 一个名为 Reprojected 的新层将被添加到 Layers 面板中。取消选中旧的 2019-02-surrey-street 图层旁边的框以将其隐藏。

../../_images/205.png
  1. 搜索并找到 Interpolation ‣ Heatmap (Kernel Density Estimation) 算法。

../../_images/2110.png
  1. Heatmap (Kernel Density Estimation) 对话框中,我们将使用与之前相同的参数。选择 Radius5000 米,并选择 Weight from field 作为 重量。将 Pixel size XPixel size Y 设置为 50 米。将 Kernel shape 设置为默认值 Quartic。点击 Run

../../_images/225.png

注解

Radius from field 参数允许您为每个点指定动态搜索半径。这可以与 Weight from field 一起使用,以对每个点的影响如何分布进行精细的粒度控制。

  1. 处理完成后,将加载名为 OUTPUT 的新栅格图层。默认的可视化效果很丑陋,因为它使用了 单波段灰色 渲染器。单击 Open the Layer Styling panel 按钮。

../../_images/233.png
  1. 将渲染更改为 单波段为彩色,然后选择 红色 色带。现在,该层看起来像我们之前创建的热图可视化。

../../_images/244.png

注解

注意 Layers 面板中的 OUTPUT 层有图例,但 2019-02-surrey-street 层没有图例。使用通过热图渲染器创建的热图图层的常见问题是缺少图例。假设您要在打印布局中使用热图并添加图例。使用热图处理算法方法创建的栅格热图使这成为可能。