21.3. 创建输出

图 21.62 shows an example print layout including all the types of layout items described in the previous section.

../../../_images/print_composer_complete.png

图 21.62 添加了地图视图、图例、图像、比例尺、坐标、文本和HTML框架的打印布局

Layout 菜单或工具栏中,您可以将打印版面输出为不同的文件格式,并且可以修改分辨率(打印质量)和纸张大小:

  • 这个 文件打印 Print 图标允许您将版面打印到连接的打印机或PostScript文件,具体取决于安装的打印机驱动程序。

  • 这个 保存映射为图像 Export as image 图标导出打印布局图像格式,如 PNGBMPTIFJPG ,和其他许多人..。

  • 这个 保存为SVG Export as SVG 图标将打印布局另存为 SVG (可缩放矢量图形)。

  • 这个 另存为PDF Export as PDF 图标将定义的打印布局直接保存为 PDF (便携文档格式)文件。

21.3.1. 导出设置

无论何时导出打印版面,QGIS都需要检查一系列导出设置,以便生成最合适的输出。这些配置是:

此外,多个预定义的检查将自动应用于布局。目前,这些检查包括测试比例尺是否正确链接到地图项目,以及地图总览项目是否正确链接到地图。如果检查失败,则会显示一条漂亮的警告,告知您该问题。

21.3.2. 导出为图像

要将版面导出为图像,请执行以下操作:

  1. 单击 保存映射为图像 Export as image 图标

  2. 选择图像格式、文件夹和文件名(例如 myill.png )以使用。如果布局包含多个页面,则每个页面都将被导出到一个文件中,该文件具有给定的文件名,并附加页码(例如 myill_2.png )。

  3. 在下一个 (Image Export Options )对话框:

    • 您可以覆盖打印布局 Export resolution 和导出的页面尺寸(如中设置的 Layout 面板)。

    • 图像呈现也可以使用 Enable antialiasing 选择。

    • 如果要将布局导出为 georeferenced image (例如,要与其他项目共享),请查看 未选中 Generate world file 选项和一个 ESRI World File 与导出的图像同名,但扩展名不同 (.tfw 对于TIFF, .pnw 对于巴新来说, jgw 对于JPEG,...)将在导出时创建。默认情况下,也可以在 layout panel

      备注

      对于多页输出,只有包含 reference map 将获得一个坐标文件(假设 Generate world file 选项已选中)。

    • 通过检查 复选框 Crop to content 选项时,布局输出的图像将包括包含所有项目(地图、图例、比例尺、形状、标签、图像...)的最小区域。作文的每一页:

      • 如果合成只包含一个页面,则会调整输出大小以包括合成上的所有内容。然后可以根据项目的位置(页面上、页面上方、页面下方、页面左侧或页面右侧)将页面缩小或扩展到所有项目。

      • 如果是多页布局,将调整每个页面的大小以在其区域中包括项目(所有页面的左侧和右侧,加上第一页的顶部和最后一页的底部)。每个调整大小的页面都会导出到单独的文件中。

      这个 Crop to content 对话框还允许您在裁剪后的边界周围添加边距。

../../../_images/image_export_options.png

图 21.63 图像导出选项,输出大小调整为项目范围

小技巧

Use image formats that support transparency when items extend beyond the paper extent

布局项目可以放置在图纸范围之外。使用导出时 Crop to content 选项时,生成的图像可能会超出纸张范围。由于纸张范围外的背景将是透明的,因此对于不支持透明度的图像格式(例如 BMPJPG )透明背景将呈现为全黑,从而破坏图像。使用兼容透明度的格式(例如 TIFFPNG )在这种情况下。

备注

当格式支持时(例如 PNG )和底层Qt库,则导出的图像可以包括 project metadata (作者、标题、日期、描述...)

21.3.3. 导出为SVG

要将版面导出为SVG,请执行以下操作:

  1. 单击 保存为SVG Export as SVG 图标

  2. 填写路径和文件名(在多页合成的情况下用作所有文件的基本名称,如用于图像导出)

  3. 在下一个 SVG Export Options 对话框中,您可以覆盖布局默认设置 export settings 或配置新的服务器:

    • 未选中 Export map layers as SVG groups :导出的项目在其名称与QGIS中的层名称匹配的层中进行分组,从而更容易理解文档的内容。

    • 未选中 Always export as vectors :某些渲染选项需要栅格化项目以获得更好的渲染效果。选中此选项可将对象保留为矢量,但存在输出文件的外观可能与打印布局预览不匹配的风险(有关更多详细信息,请参见 导出设置 )。

    • 复选框 Export RDF metadata 文件的标题、作者、日期、描述……

    • 复选框 Simplify geometries to reduce output file size :这避免了导出所有几何体顶点,这可能会导致导出文件大小异常复杂且可能无法在其他应用程序中加载。在导出布局时将简化几何,以便移除在导出分辨率下没有明显差异的任何冗余折点(例如,如果导出分辨率为 300 dpi ,小于的顶点 1/600 inch 分离将被移除)。

    • 设置 Text export :控制是否将文本标签导出为正确的文本对象 (Always export texts as text objects )或仅作为路径 (Always export texts as paths )。如果将它们导出为文本对象,则可以在外部应用程序(如Inkscape)中将其作为普通文本进行编辑。但副作用是渲染质量降低,并且当某些文本设置(如缓冲区)到位时,渲染会出现问题。这就是建议导出为路径的原因。

    • 应用 复选框 Crop to content option

    • 未选中 Disable tiled raster layer exports :导出文件时,QGIS使用内置的栅格层平铺渲染来节省内存。有时,这可能会在生成的文件的栅格中产生可见的“接缝”。选中此选项将修复该问题,但代价是在导出过程中使用更高的内存。

../../../_images/svg_export_options.png

图 21.64 SVG导出选项

备注

目前,SVG的输出非常基本。这不是QGIS的问题,而是底层Qt库的问题。这一点有望在未来的版本中得到解决。

21.3.4. 导出为PDF

要将版面导出为PDF,请执行以下操作:

  1. 单击 另存为PDF Export as PDF 图标

  2. 填写路径和文件名:与图像和SVG导出不同,版面中的所有页面都导出为单个PDF文件。

  3. 在下一个 PDF Export Options 对话框中,您可以覆盖布局默认设置 export settings 或配置新的服务器:

    • 未选中 Always export as vectors :某些渲染选项需要栅格化项目以获得更好的渲染效果。选中此选项可将对象保留为矢量,但存在输出文件的外观可能与打印布局预览不匹配的风险(有关更多详细信息,请参见 导出设置 )。

    • 复选框 Append georeference information :仅在以下情况下可用 reference map ,从那里获取信息,在第一页上。

    • 复选框 Export RDF metadata 文件的标题、作者、日期、描述……

    • 设置 Text export :控制是否将文本标签导出为正确的文本对象 (Always export texts as text objects )或仅作为路径 (Always export texts as paths )。如果将它们导出为文本对象,则可以在外部应用程序(如Inkscape)中将其作为普通文本进行编辑。但副作用是渲染质量降低,并且当某些文本设置(如缓冲区)到位时,渲染会出现问题。这就是建议导出为路径的原因。

    • 控制PDF Image compression 使用:

      • Lossy (JPEG) ,这是默认的压缩模式

      • Lossless ,它在大多数情况下创建更大的文件,但更适合于打印输出或外部应用程序的后期制作(需要Qt 5.13或更高版本)。

    • 未选中 Create Geospatial PDF (GeoPDF) :生成地理参考PDF文件。

    • 未选中 Disable tiled raster layer exports :导出文件时,QGIS使用基于平铺的渲染来节省内存。有时,这可能会在生成的文件的栅格中产生可见的“接缝”。选中此选项将修复该问题,但代价是在导出过程中使用更高的内存。

    • 复选框 Simplify geometries to reduce output file size :通过移除在导出分辨率下没有明显差异的折点(例如,如果导出分辨率为 300 dpi ,小于的顶点 1/600 inch 分离将被移除)。这可以减少导出文件的大小和复杂性(非常大的文件可能无法在其他应用程序中加载)。

../../../_images/pdf_export_options.png

图 21.65 PDF导出选项

备注

支持GeoPDF导出,并提供多个GeoPDF特定选项:

  • Format (GeoPDF格式-有一些GeoPDF变体),

  • Include multiple map themes (指定要包括的地图主题),

  • Include vector feature information (选择这些层并将它们分组到逻辑PDF组中)。

备注

将打印版面导出为支持地理配准的格式(例如 PDFTIFF )默认情况下创建地理参考输出。

21.3.5. 生成地图集

Atlas功能允许您以自动方式创建地图册。Atlas使用表或矢量图层的要素 (Coverage layer )为每个要素创建输出( atlas feature )表/层中。最常见的用法是将地图项目缩放到当前的地图集要素。其他使用案例包括:

  • 地图项,对于另一个层,仅显示与地图集要素共享相同属性或位于其几何图形内的要素。

  • 在迭代要素时替换其文本的标注或HTML项

  • 显示关联的属性的表项 parent or children 当前地图集功能的功能...

对于每个要素,将根据其导出设置处理所有页面和项目的输出。

小技巧

Use variables for more flexibility

QGIS提供了大量的功能和 variables ,包括与atlas相关的,您可以用来操作布局项目,但也可以根据atlas状态来操作层的符号系统。将这些功能结合在一起可以为您提供极大的灵活性,并帮助您轻松生成高级地图。

To enable the generation of an atlas and access atlas parameters, refer to the Atlas panel. This panel contains the following (see 图 21.66):

../../../_images/atlas_properties.png

图 21.66 地图集面板

  • 复选框 Generate an atlas 启用或禁用地图集生成。

  • Configuration

    • A Coverage layer 选择字符串 combo box that allows you to choose the table or vector layer containing the features to iterate over.

    • 可选的 复选框 Hidden coverage layer 如果选中该选项,将在生成期间隐藏覆盖层(但不隐藏其他层)。

    • 可选的 Page name 用于指定功能页名称的组合框(S)。您可以选择Coverage图层的一个字段或设置 expression 。如果此选项为空,则QGIS将根据应用于该层的过滤器和/或排序顺序使用内部ID。

    • 可选的 复选框 Filter with 文本区域,用于指定用于从Coverage图层过滤要素的表达式。如果表达式不为空,则仅计算结果为的要素 True 将被处理。

    • 可选的 复选框 Sort by 这允许您使用Coverage Layer的字段或表达式对Coverage Layer的要素(和输出)进行排序。排序顺序(升序或降序)由两种状态设置 Sort direction 显示向上或向下箭头的按钮。

  • Output -可在此处配置地图集的输出:

    • 一个 Output filename expression 用于为每个地图集要素生成文件名的文本框。它是基于表达式的。仅对渲染到多个文件有意义。

    • A 复选框 Single file export when possible 这允许您强制生成单个文件,如果所选输出格式可行的话 (PDF 例如)。如果选中此字段,则 Output filename expression 该字段没有意义。

    • 一个 Image export format 下拉列表,以选择使用 保存映射为图像 Export atlas as Images... 纽扣。

21.3.5.1. 按图集绘制控制图

Atlas最常见的用法是与地图项一起使用,当迭代遍历Coverage层时,缩放到当前的atlas要素。此行为在 Controlled by atlas 地图项的组属性。看见 由atlas控制 对于不同的设置,您可以应用于地图项目。

21.3.5.2. 使用表达式自定义标签

为了使标签适应地图集迭代经过的要素,您可以包括表达式。确保将表达式部分(包括函数、字段或变量)放在 [%%] (见 标签项 以了解更多详细信息)。

例如,对于包含字段的城市图层 CITY_NAMEZIPCODE ,您可以插入以下内容:

The area of [% concat( upper(CITY_NAME), ',', ZIPCODE, ' is ',
format_number($area/1000000, 2) ) %] km2

或者,另一种组合:

The area of [% upper(CITY_NAME)%],[%ZIPCODE%] is
[%format_number($area/1000000,2) %] km2

这些信息 [% concat( upper(CITY_NAME), ',', ZIPCODE, ' is ',  format_number($area/1000000, 2) ) %] 是在标签内使用的表达式。这两个表达式都会在生成的地图集中产生以下类型的标签:

The area of PARIS,75001 is 1.94 km2

21.3.5.3. 使用地图集浏览数据定义的覆盖按钮

有几个地方可以使用 数据定义 Data defined override 按钮覆盖选定的设置。这对于地图集的生成特别有用。看见 数据定义的覆盖设置 以获取有关此小部件的更多详细信息。

对于以下示例, Regions 使用QGIS示例数据集的图层并将其选择为 Coverage layer 对于阿特拉斯一代来说。我们假设它是包含一个地图项和一个标签项的单个页面布局。

当区域范围的高度(南北)大于其宽度(东西)时,应使用 Portrait 而不是 Landscape 以优化用纸为导向。使用一个 数据定义 Data Defined Override 按钮可以动态设置纸张方向。

在页面上右击并选择 Page Properties 打开面板。我们希望使用取决于区域几何体的表达式来动态设置方向,因此按 数据定义 字段的按键 Orientation ,选择 Edit... 要打开 Expression string builder 对话框中,然后输入以下表达式:

CASE WHEN bounds_width(@atlas_geometry) > bounds_height(@atlas_geometry)
THEN 'Landscape' ELSE 'Portrait' END

现在如果你 preview the atlas ,纸张会自动定位,但物品放置可能并不理想。对于每个区域,您还需要重新定位布局项目的位置。对于地图项,您可以使用 数据定义 智能交通系统的按钮 Width 属性使用以下表达式将其设置为动态:

@layout_pagewidth - 20

同样,使用 数据定义 按钮中的 Height 属性以提供以下表达式来约束映射项大小:

@layout_pageheight - 20

要确保地图项在页面中居中,请设置其 Reference point 添加到左上角的单选按钮,然后输入 10 对于ITS XY 各就各位。

让我们在页面中央的地图上方添加一个标题。选择标签项并将水平对齐设置为 单选按钮打开 Center 。接下来,将标签移动到正确的位置,选择中间的按钮 Reference point ,并为字段提供以下表达式 X

@layout_pagewidth / 2

对于所有其他布局项目,您可以以类似的方式设置位置,以便它们在纵向和横向都能正确定位。您还可以进行更多调整,例如使用要素属性自定义标题(请参阅 使用表达式自定义标签 示例)、更改图像、根据页面方向调整图例列数的大小...

此处提供的信息是有关数据定义覆盖选项的优秀博客(英语和葡萄牙语)的更新 Multiple_format_map_series_using_QGIS_2.6

使用数据定义的覆盖按钮的另一个例子是使用动态图片。对于以下示例,我们使用包含名为的BLOB字段的地理包图层 logo 使用字段类型BINARY(请参见 创建新的GeoPackage图层 )。对于每个要素,都定义了不同的图片,以便地图集可以迭代,如中所述 预览和生成地图集 。您所需要做的就是在打印版面中添加一张图片并转到其 Item properties 在地图集的上下文中。在那里,您可以在中找到数据定义覆盖按钮 Image source 部分的 Main Properties

../../../_images/picture_image_source.png

在下面的窗口中选择 Edit 这样就可以 Expression String Builder 打开。从 Fields and values 部分,您可以找到在Geopackage层中定义的BLOB字段。双击该字段名 logo 并点击 OK

../../../_images/expression_blob_picture_atlas.png

如果您将Geopackage图层选择为 Coverage layer (有关详细说明,请参阅 预览和生成地图集 )。

这些只是你如何在atlas中使用一些高级设置的两个例子。

21.3.5.4. 预览和生成地图集

../../../_images/atlas_preview.png

图 21.67 地图集预览工具栏

一旦配置了地图集设置和布局项目(地图、表格、图像...)链接到它,您可以通过选择创建所有页面的预览 Atlas ► Preview Atlas 或单击 阿特拉斯 Preview Atlas 偶像。然后,您可以使用箭头浏览所有功能:

  • 地图集第一 First feature

  • 地图集上一页 Previous feature

  • 图集下一页 Next feature

  • 地图集最后一页 Last feature

您还可以使用组合框来选择和预览特定功能。组合框根据地图集中设置的表达式显示地图集要素名称 Page name 选择。

对于简单的构图,可以用不同的方式生成地图集(请参见 创建输出 有关更多信息-只需使用 Atlas 菜单或工具栏,而不是 Layout 菜单。

这意味着您可以使用直接打印您的作品 Atlas ► Print Atlas 。您也可以使用创建PDF Atlas ► Export Atlas as PDF... :系统将要求您提供一个目录来保存所有生成的PDF文件,除非 复选框 Single file export when possible 已被选中。在这种情况下,系统将提示您提供文件名。

使用 Atlas ► Export Atlas as Images...Atlas ► Export Atlas as SVG... 工具,系统还会提示您选择一个文件夹。每个地图集要素合成的每一页都将导出为在中设置的图像文件格式 Atlas Panel或SVG。

备注

对于多页输出,地图集的行为类似于布局,因为只有包含 一般设置 将获得一个坐标文件(用于每个要素输出)。

小技巧

Print a specific atlas feature

如果您只想打印或导出地图集的一个要素的合成,只需启动预览,在下拉列表中选择所需要素,然后单击 Layout ► Print (或 Export... 任何受支持的文件格式)。

21.3.5.5. 使用项目定义的关系创建图集

对于具有HTML和Java脚本知识的用户,可以操作GeoJSON对象并使用QGIS项目中的项目定义的关系。这种方法与使用直接插入到HTML中的表达式的不同之处在于,它为您提供了一个完整的、非结构化的GeoJSON功能。这意味着您可以使用在GeoJSON要素表示上操作的现有Javascrip库和函数。

以下代码包括定义的关系中的所有相关子特征。使用Java脚本 setFeature 函数它允许您制作灵活的HTML,以您喜欢的任何格式(列表、表格等)表示关系。在代码示例中,我们创建了相关子功能的动态项目符号列表。

// Declare the two HTML div elements we will use for the parent feature id
// and information about the children
<div id="parent"></div>
<div id="my_children"></div>

<script type="text/javascript">
   function setFeature(feature)
   {
     // Show the parent feature's identifier (using its "ID" field)
     document.getElementById('parent').innerHTML = feature.properties.ID;
     //clear the existing relation contents
     document.getElementById('my_children').innerHTML = '';
     feature.properties.my_relation.forEach(function(child_feature) {
     // for each related child feature, create a list element
     // with the feature's name (using its "NAME" field)
       var node = document.createElement("li");
       node.appendChild(document.createTextNode(child_feature.NAME));
       document.getElementById('my_children').appendChild(node);
     });
   }
</script>

在地图集创建过程中,将在包含父要素的覆盖层上进行迭代。在每个页面上,您将看到相关的子功能的项目符号列表,紧跟在父功能的标识符后。