如何制作在QGis中使用多边形的热图或Choropleth图?


12

我一直在使用QGIS的Heatmap插件,我想知道是否可以使用类似的使用多边形和点的插件/工具制作热图?

我想以类似于热图插件对点的方式获得数据密度的表示。

下图是我期望的结果的粗略草图:

在此处输入图片说明


3
您是否考虑过为多边形生成质心,并根据这些质心生成热图?
andytilia 2012年

1
有关数据的更多详细信息将有所帮助。多边形代表什么,它们如何分布?您可以张贴样本图片吗?
andytilia 2012年

@andytilia:质心不能准确表示多边形的覆盖范围。多边形代表1200平方米区域内的资源使用情况。一些多边形很小,代表一个很好的浆果斑,而另一些则很大,覆盖了北美驯鹿和驼鹿的栖息地。我一直在考虑对一个六边形网格进行装箱,然后对重叠进行计数……但是我几乎是个菜鸟,所以我找不到关于该主题的好教程。
NWT亚当

1
看到QGIS热图插件qgis.spatialthoughts.com/2012/07/...
RKM

数值是否对您有意义?或者您只是在寻找漂亮/清晰的外观?
Underdark

Answers:


5

也许您可以在多边形中生成一组随机点,是否有一个QGIS工具?如果多边形重叠,则在此区域中它们的密度较高。然后使用热图作为要点。您将需要进行几轮寻找最佳点数,因为结果取决于此。

如果您的数据显示某些栖息地的分布,无论如何都是模糊的,则这可能最接近现实世界的情况,在该情况下,一个点大约反映了一个标本。


1
+1好主意。我唯一要添加的就是使用点数据和六边形多边形在位置连接,消除所有不匹配的特征,然后在其中生成点,这样您的单个点就不会被其他点淹没。
RomaH 2012年

这似乎给出了最好的结果。感谢所有提供解决方案的人。我只给一个人赏金,感觉有点不好,因为似乎有很多好的解决方案!
NWT亚当

6

如果我正确理解了您的问题,我之前已经做过类似的事情;只是要记得我做了什么。

如果您的多边形重叠且不属于同一图层,则此方法将起作用。如果它们在同一层上并且有可能,请将它们移动到单独的层,如果不这样做,则目标层将只继承其中一个值。

使用的关键过程是在“ 向量”>“数据管理”菜单下的“ 按位置联接属性”。在这里,将六角形字段指定为目标层,将连接层指定为多边形之一。命名您的结果图层,然后勾选“ 保留所有记录 ”单选按钮。

生成的层应该是六边形层的副本,其中所有单元格都与多边形层相交。现在进行交互时,将最后得到的图层用作目标图层并加入下一个多边形图层。使用产生的激光层并加入下一层,直到加入所有层。

您的最后一层应该继承了先前各层的所有属性字段,并且其中大部分可能都为NULL。

这是我们必须使用shapefile的某些功能的地方,因此,如果您尚未将图层另存为shapefile,请立即执行。并从QGIS中的工作区中删除该层。

在OpenOffice Calc中打开shapefile的* .dbf文件,请勿使用Excel。它将破坏文件并且它毫无用处,这是很难学的。并且不要对数据重新排序,它也非常明确地指向文件中的行顺序。检查以确保NULL现在为零(如果不是),请仔细替换。

现在,将shapefile插入QGIS并打开“ 属性表”。现在它应该显示零而不是NULL。使用字段计算器,并将在您的工作中获得的字段汇总到新列中。

现在,您有了一个求和字段,该字段应准确显示与目标字段重叠的所有要素集合的值。您可以使用“符号系统”功能根据求和字段的值为多边形着色,以绘制精美的Choropleth图。

如果要清除文件中所有未使用的字段。只需在Calc中再次打开dbf文件,然后随意删除不需要的列即可。就个人而言,我建议像我经常这样做那样学习学会适应shapefile。


不幸的是,我在同一层中有数百个多边形重叠。您能看到解决此问题的方法而不必将它们分成几百层吗?
NWT亚当

1
您可以使用PostGIS创建一个多边形叠加层(如果使用的话),该叠加层可以分解重叠的多边形。gis.stackexchange.com/questions/83/… 也许拥有更好SQL-fu的人可以在这里为我们提供帮助,以及如何使生成的polys继承其值,我不太擅长此事。
罗马

1
我也强烈建议另一个选择,那就是该是时候重新考虑您解决问题的确切方法了。您要映射什么数据?是否有理由假设值在整个多边形上是同质的?重叠的多边形会产生累积效果吗?除非您有充分的证据来建议这些事情,否则使用此地图进行任何形式的预测建模都可能会摇摇欲坠。仔细考虑一下,您可能会找到正确的解决方案,但是您可能会发现一种更好的建模或映射方法。
RomaH 2012年

1
感谢您的PostGIS建议。我会看一下,但是我只是开始了解如何使用PostGIS。至于重新评估这个问题……我明白了你的意思,但是我不确定我还能想象到我们要表达的内容。从文化的角度来看,我们的数据代表了社区长者和资源使用者将其视为富有成效或重要的所有领域。我们知道,值贴图在整个多边形中并不是均匀的,但是对于我们要用贴图表示的点来说,它足够接近。
NWT亚当

1
拒绝qgis中的任何手册-尤其是一旦开始处理// tons //的shapefile,您最终可能会处于令人沮丧的位置。无论是PostGIS插件还是GRASS插件,您都不会后悔使用SQL-fu(请参阅下面的我的答案:gis.stackexchange.com/a/42188/7689)。
egbutter 2012年

4

这是使用栅格的常规工作流程。我不知道要在QGIS中完成它的具体细节。

  1. 使用相交工具创建多边形重叠区域的新矢量层
  2. 将向量图层(包括重叠图层)转换为栅格
  3. 使用栅格算术(可能是加法)来合并栅格
  4. 结果应该是看起来像热图的栅格

Alpha / null值和/或图层透明度可让您将栅格覆盖在任何底图上。


完成此工作流程后,我剩下一个大的灰色块,覆盖了新栅格的范围。我如何使它看起来像一个热图?
NWT亚当

1
最终栅格中的像素是否分配了不同的值?一些想法:创建栅格时,可能必须指定更好的分辨率(更多像素)。栅格应具有相同的大小和分辨率;您可能需要拉伸或修改所得栅格的颜色图,以显示较大值的较亮颜色。

好的,我设置了颜色映射,但是我只得到了蓝色(值0)和红色值(2)这两种颜色,红色值覆盖了矢量原始图层和重叠图层的区域。我猜想,对图层进行栅格化时,每个图层的值为1,而不是每个多边形。然后,在添加栅格时,总值等于2。如何在多边形级别而不是图层级别上维护/添加值?
NWT亚当

更精细的分辨率栅格应该有所帮助

如何制作更高分辨率的栅格?
NWT亚当

4

如果适合您的要求,请尝试执行此操作,这不是针对数据集的计算解决方案,但是,如果您仅查找信息图表解决方案,则可以尝试执行此操作。

按位置连接属性,以六边形单元为目标,点数据为连接。选择保留所有功能。将具有继承值的单元格设置为期望的颜色,并将透明度设置为50%之类的值。

然后在带有圆形多边形的图层上将其符号系统设置为相同的颜色和透明度。将圆形多边形放在单元多边形的前面。随着值的增加,这将带来饱和度增加的错觉。

如果您愿意,也可以提取所有多边形的线并覆盖在顶部,这样子图层的轮廓就不会被其他图层所着色。

您将不得不使用颜色和透明度来寻找最佳解决方案。我发现相同的颜色看起来最好,但有实验性。


4

我建议您使用GRASS插件-QGIS的功能相当有限(为什么当GRASS之类的软件已经存在时,为什么要重新发明python?):

v.in.ogr.qgis

[根据您的多边形是否已经有一个值,可能需要下两行]

v.db.addcol 
v.db.update_const 

这是我们在多边形中叠加的部分,然后根据这些列制作栅格

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]

3

使用普通的QGIS可能会很棘手,您可能需要自定义脚本,或者使用诸如PostGIS或Spatialite之类的空间数据库。我将使用PostGIS创建规则的点网格或将其生成为CSV文本文件并将其导入。然后使用st_buffer在每个点周围绘制圆,或者使用ST_MakeEnvelope在矩形周围绘制圆,并计算每个缓冲区的所有重叠区域。然后,如果它表示“无数据”,则可能要删除所有0值。最后,您可以使用counter作为Weight字段为网格进行热图绘制。

您需要尝试不同的网格分辨率以找到最佳分辨率。从本质上讲,它与Kevin提出的栅格方法非常相似,只是停留在矢量世界中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.