在QGIS中自动生成具有不同样式的地图图像?[关闭]


9

我在QGIS中有一个简单的地图,仅包含1个图层,其中包含10多个要素。现在,我需要(以编程方式)生成同一区域的大约200张不同的JPEG地图图像。每个地图应具有完全相同的地图范围和所有可见的特征。但是,要素在每个生成的地图中应具有不同的颜色集。详细地说,我有一个CSV文件,其中包含每个功能的分类颜色(每个图像1行,每个功能1列和颜色),如下所示:

"A","B","C","D","E","F" (header line, 6 columns in this file)
"#000000","#FF0000","#00FF00","#0000FF","#0000FF","#808080"
"#000000","#FF0000","#FF0000","#00FF00","#00FF00","#808080"
"#FF0000","#FF0000","#000000","#800080","#FFFFFF","#FFFF00"
...

我当前的计划是使用Perl或类似的东西,基于此CSV文件创建200个不同的QML文件。然后我打算编写一个Python脚本来

  1. 遍历QML文件
  2. 一次打开每个QML文件,然后从中应用图层样式
  3. 打开地图编辑器并保存栅格图像文件
  4. 关闭地图编辑器并跳至下一个QML文件

我现在要求有关以下方面的任何投入:

  • 可以在QGIS + Python中完成吗?
  • 有什么更好的方法可以实现我的目标?
  • 关于任何现有源代码或插件的提示以实现此目标?

Answers:


21

在QGIS中无需任何python编程就可以做到这一点,但是您将需要QGIS 2.6的最新开发快照,因为它依赖于自2.4版本发布以来添加的功能。这是所需的步骤:

  • 根据需要设置地图图层(忽略具有动态颜色填充的要素的着色)

  • 创建一个新的打印作曲家。将地图项添加到合成中,并根据需要设置其范围。

  • 导入包含所需地图输出要素颜色的CSV文件

  • 在打印作曲家中,将导入的CSV图层设置为“地图集覆盖层”(寻找“地图集生成”标签)。(如果现在导出地图集,您应该获得200张完全相同的地图的副本...)

在此处输入图片说明

  • 接下来,您需要设置功能,以便使用CSV文件中列出的颜色为它们设置样式。这是通过图层的样式标签底部的“数据定义的属性”按钮完成的:

在此处输入图片说明

  • 您需要勾选“颜色”属性,然后单击“ E”按钮以打开表达式编辑器。

  • 表达式将如下所示:

    attribute(  $atlasfeature , 'A' )
    

在此处输入图片说明

  • 基本上,此表达式将从当前图集功能检索存储在“ A”列中的值。由于在您的情况下,该值将是一种颜色(例如,#FF0000),因此将使用该颜色来设置功能的样式。(此表达式是依赖QGIS> 2.4的部分-在发布2.4之后添加了“属性”功能)。

  • 以类似方式设置其他功能的样式,但根据需要使用“ B”,“ C”,“ D”等列

  • 返回打印作曲家,您可以启用图集预览(“图集”菜单->“预览图集”),并使用工具栏上的箭头逐步浏览CSV文件中的行。如果一切正常,请使用“地图集”菜单中的选项导出地图集...完成!无需编程!

输出示例:

在此处输入图片说明 在此处输入图片说明

等等

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.