21.4. 创建报告

本部分将帮助您在QGIS中设置报告。

21.4.1. 那是什么?

根据定义,地理信息系统报告是一种包含以叙事方式组织的信息的文档,其中包括地图、文本、图形、表格等。报告可以是临时的、定期的或根据需要编制的。报告可以指特定的时期、事件、事件、主题或地点。

在QGIS中,一个 Report 是对 Layouts

报表允许用户以简单、快速和结构化的方式输出他们的地理信息系统项目。

可以使用以下命令创建报告 Project ► New Report 或在 Project ► Layout Manager

备注

QGIS报告中的地图与打印布局和地图集中的地图的行为方式相同。我们将集中讨论QGIS报告的具体内容。有关地图处理的详细信息,请参阅 print layoutsatlases

21.4.2. 开始

Layout Manager 对话框可通过以下方式创建报告 New from template 通过选择下拉选项 Empty Report 并击中了 Create... 纽扣。

在本例中,我们使用了来自 Natural Earth dataset (1:10米)。

../../../_images/project-1.png

使用 Project ► New Report 命令,我们将创建一个空白报告。最初,没有什么可查看的-显示的对话框看起来与打印布局设计器非常相似,只是 Report Organizer 左侧的面板:

../../../_images/report-2.png

21.4.3. 布局报告工作区

QGIS报告可以由多个嵌套节组成。在新的空白报表中,我们最初只有主报表部分。此报表节的唯一选项是 Include report headerInclude report footer 。如果启用这些选项,报表中将包括页眉作为第一页(S)(如果需要,报表的各个部分可以分成多页),页脚将构成最后一页(S)。启用标头 (Include report header ),并按下 Edit 按钮旁边的:

../../../_images/report_header.png

结果发生了几件事。首先,编辑铅笔显示在旁边 ReportReport Organizer ,指示当前正在设计器中编辑报表节。我们还会看到一个新页面,其中包含一个小 Report Header 头衔。页面上有 landscape 默认方向,但可以通过在页面上单击鼠标右键并选择 Page properties 。这将调出 Item properties 选项卡,用于页面和页面 SizeWidthHeight ,并且可以指定更多。

在QGIS报告中,报告的每个组件都由单独的布局组成。它们可以使用与标准打印布局相同的工具来创建和修改,因此您可以使用标签、图片、地图、表格等的任何所需组合。让我们向报表页眉添加一些项目来演示:

../../../_images/header.png

我们还将为报表创建一个简单的页脚,方法是检查 Include report footer 选项和击球 Edit

../../../_images/footer.png

在继续之前,让我们导出这份报告,看看我们得到了什么。从中完成导出 Report 菜单-在本例中,我们选择 Export Report as PDF... 要将整个报表呈现为PDF文件,请执行以下操作。以下是一个不太令人印象深刻的结果--一个由页眉和页脚组成的两页PDF:

../../../_images/headerfooter.png

让我们让事情变得更有趣。通过击打 符号系统添加 Add Section 按钮中的 Report Organizer ,我们可以选择新的部分来添加到我们的报告中。

../../../_images/add_section.png

有两个选项: Static Layout SectionField Group Section

这个 Add Static Layout Section 是单一的、静态的车身布局。这可用于在报表中途嵌入静态布局。

这个 Field Group Section 为层的每个要素重复其主体布局。要素按选定的分组要素排序(具有升序/降序排序选项)。如果字段组部分有子部分(例如,具有不同字段的另一个字段组部分),则仅迭代组要素具有唯一值的要素。这允许嵌套报告。

现在,我们将添加一个 Field Group Section 到我们的报告中。在其最基本的级别上,您可以想到一个 Field Group Section 等同于一个 print atlas :选择要迭代的图层,报告将为找到的每个要素插入一个部分。选择新的 Field Group Section 显示了许多新的相关设置:

../../../_images/field_group.png

在本例中,我们设置了字段组,以便迭代来自 Admin Level 1 层,使用 adm1name 菲尔德。提供了包括页眉和页脚的相同选项,以及包括 body 为这一节。我们将执行此操作,并编辑正文:

../../../_images/edit_group_body.png

我们的身体现在由一张地图和一张显示州名称的标签组成。要包括州名称,我们选择了 Add Item ► Add Label 和定义文本的数据 Main Properties 在.的帮助下 Insert or Edit an Expression...

结果是下面的表达式 (name 中的属性的名称。 Admin Level 1 包含州名称的层)::

[% "name" %]

地图设置为遵循当前报表要素(通过选中启用 Controlled by Report -就像地图集中的地图项目在以下情况下会跟随当前的地图要素一样 Controlled by Atlas 已选中):

../../../_images/controlledbyreport.png

如果我们现在继续导出我们的报告,我们会得到这样的结果:

../../../_images/report1.png

图 21.68 报告页眉、每个州的一页和报告页脚。

所以或多或少是一本地图集,但有页眉和页脚页面。

让我们通过在我们的国家组中添加一个小节来使事情变得更有趣。为此,我们首先选择 Admin Level 1 管理器中的外业组,然后按下 符号系统添加 Add Field 按钮并添加新的 Field Group Section

../../../_images/subsection.png

在循环访问 Field Group Section ,则会对要素进行过滤以匹配其父组的定义字段 (adm1name 在这种情况下)。在这里,我们添加的小节将遍历一个 Populated Places 层,包括遇到的每个位置的正文部分。这里的神奇之处在于 Populated Places 层具有与父层中的定义字段同名的属性, adm1name ,用它所在的州来标记每个地方(如果幸运的话,您的数据应该已经是这样的结构了--如果不是这样的话,请运行 Join Attributes by Location 处理算法并创建您自己的字段)。当我们导出此报告时,QGIS将从 Admin Level 1 层,然后循环访问所有 Populated Places 与之匹配的 adm1name 价值。以下是我们得到的信息:

../../../_images/report3.png

在这里,我们为填充地点组创建了一个基本实体,包括地点地图和一些地点属性的表。因此,我们的报表现在是一个报表页眉,是第一个州的页面,然后是该州内每个填充位置的页面,然后是其他州及其填充位置的页面,最后是报告页脚。如果我们要为Popular Places组添加一个标题,它将被包括在列出每个州的Popular Places之前,如下图所示。

同样,在包含每个州的最终位置之后,将插入已填充位置组的页脚。

除了嵌套的子节,报表中的子节也可以连续包括。如果我们将第二个小节添加到 Admin Level 1 groupAirports ,然后(如果 Airports 层具有一个属性 adm1name 可以将其链接到父组)我们的报告将首先列出每个州的所有人口聚居地,然后列出该州内的所有机场,然后再继续下一个州。

../../../_images/report_consec.png

这里的关键一点是我们的 Airports group 是的一个子节 Admin Level 1 group -不是 Populated Places group

在这种情况下,我们的报告将是这样的结构(请注意,还包括了状态标志-以这种方式添加功能特定图片的步骤如下所述):

../../../_images/report_all_img.png

21.4.3.1. 在报告中包含图片

图片在报表中非常有用,QGIS允许在报表的静态和动态部分都显示图片。添加图片的方式与标准打印布局相同,对于静态报表部件(以及动态部件中的静态图片),没有更多的内容。

但是,如果需要针对报表功能量身定做的插图,则层必须具有可用于定义要包括的图片的属性。

QGIS依赖于报表中图像的绝对文件名。

对于动态图片,您可以像往常一样首先将图片添加到组的正文部分。在 Item properties 在图片中,设置 Image Source 使用 数据定义 Data defined override 按钮,然后选择包含图像绝对路径的属性或 Edit... (输入生成绝对图像路径的表达式)。

下面是一个示例表达式,它使用字符串连接来指定图片的绝对路径,并使用项目文件所在的目录 @project_path )和属性 (adm1name ),从中生成文件名(在本例中,通过将 adm1name 属性设置为大写,并在后面追加‘_flag.png’)::

concat(@project_folder, '/naturalearth/pictures/' ,
       upper("adm1name"), '_flag.png')

这意味着图片位于 naturalearth/pictures 项目文件目录的子目录。

../../../_images/report_dynamic_picture.png

21.4.3.2. 高亮显示地图中的当前报表要素

在上面的报告中,报告要素在地图中使用突出显示(州)和圆圈(有人口的地方)进行了强调。要强调地图中的报表要素(除了将它们放置在地图的中心),您必须通过比较以下各项来定义样式 @id 以及 @atlas_featureid ,至于地图集。

例如,如果要为报表功能使用比其他功能更粗的线条/边框,可以使用数据定义线条宽度:

if($id=@atlas_featureid, 2.0, 0.1)

报告要素将获得2个单位宽的多边形轮廓,而所有其他要素将获得0.1个单位宽的线。还可以用数据定义颜色(报告功能的非透明深洋红色,其他功能的半透明浅灰色):

if($id=@atlas_featureid, '#FF880088', '#88CCCCCC')

21.4.3.3. 更多1级组

将嵌套的和连续的节与节页眉和页脚结合在一起,可以提供极大的灵活性。例如,在下面的报告中,我们添加了另一个字段组,作为:Guilabel`Ports`层的主报告的子项。现在,在列出各州及其居住地和机场之后,我们将获得该地区所有港口的摘要列表:

../../../_images/report_flex.png

这会导致我们报告的最后部分导出为:

../../../_images/ports.png

21.4.4. 导出设置

当您导出报告时 (Report ► Export Report as Images... / SVG... / PDF... ),系统将要求您输入文件名,然后您将有机会调整导出设置以获得最合适的输出。

如您所见,QGIS中的报表非常强大和灵活!

备注

目前的信息改编自北路的一个博客, Exploring Reports in QGIS 3.0 - the Ultimate Guide!