4.2. 课: 创建动态打印布局

既然您已经学会了如何创建基本的地图布局,我们更进一步,创建一个地图布局,它可以动态地适应我们的地图范围和页面属性,例如当您更改页面大小时。此外,创建日期也将动态调整。

4.2.1. moderate 跟我做: 创建动态地图画布

  1. 加载 ESRI Shapefile 格式数据集 protected_areas.shp, places.shp, rivers.shpwater.shp 到地图画布,并调整其属性以适合自己的要求。

  2. After everything is rendered and symbolized to your liking, click the newLayout New Print Layout icon in the Project toolbar or choose Project ► newLayout New Print Layout. You will be prompted to choose a title for the new print layout.

  3. 我们想创建一幅地图布局,由标题和南非斯韦伦丹附近地区的地图组成。布局的边距应为 7.5 mm,标题的高度应为 36 mm。

  4. 在画布中创建一个名为 main map 的地图项,然后转到 布局 面板,向下滚动到 变量 区段,找到 布局 部分。在此,我们设置一些变量,您可以在整个动态打印布局中使用。第一个变量将定义边距。按 symbologyAdd 按钮并输入名称 sw_layout_margin 。将该值设置为 7.5 。再次按 symbologyAdd 按钮,并输入名称 sw_layout_height_header 。将该值设置为 36

  5. 现在,您可以通过变量自动创建地图画布的位置和大小。确保已选中地图项,转到 项属性 面板,向下滚动至并打开 位置和大小 区段。在 X 右侧单击 dataDefineExpressionOn 数据定义重写 ,并从 变量 条目中选择 @sw_layout_margin

  6. Y 右侧单击 dataDefineExpressionOn 数据定义重写 ,选择 编辑... ,然后输入公式

    to_real(@sw_layout_margin) + to_real(@sw_layout_height_header)
    
  7. 可以使用 宽度高度 变量来创建地图项的大小。单击 宽度 右侧的 dataDefineExpressionOn 数据定义重写 ,然后选择 编辑 ... ,再一次填写以下公式

    @layout_pagewidth - @sw_layout_margin * 2
    

    单击 高度 右侧的 dataDefineExpressionOn 数据定义重写 ,然后选择 编辑 ... ,输入如下公式

    @layout_pageheight -  @sw_layout_height_header -  @sw_layout_margin * 2
    
  8. 我们还要创建一个包含主画布地图范围坐标的网格。再次转到 项属性 并选择 网格 区段。通过单击 symbologyAdd 按钮插入网格。单击 修改网格... ,并根据您在QGIS主画布中选择的地图比例设置 X, Y偏移量间隔网格类型 十字 非常适合我们的目标。

4.2.2. moderate 跟我做: 创建动态标题

  1. 使用 addBasicShape 添加形状 按钮插入一个包含标题的矩形。在 面板输入名称 header

  2. 再次转到 项属性 ,打开 位置和大小 区段。使用 dataDefineExpressionOn 数据定义重写 ,为 XY 选择 sw_layout_margin 变量。 宽度 应由以下表达式定义

    @layout_pagewidth - @sw_layout_margin * 2
    

    和使用 sw_layout_height_header 变量设置 高度

  3. 我们将插入一条水平线和两条垂直线,使用 addNodesShape 添加结点项 将标题分成不同的部分。创建一条水平线和两条垂直线,并将它们命名为 Horizontal line, Vertical line 1 Vertical line 2

    1. 对于水平线:

      1. X 设置为变量 sw_layout_margin

      2. Y 的表达式设置为

        @sw_layout_margin + 8
        
      3. 宽度 的表达式设置为

        @layout_pagewidth -  @sw_layout_margin * 3 - 53.5
        
    2. 对于第一条垂直线:

      1. X 的表达式设置为

        @layout_pagewidth - @sw_layout_margin * 2 - 53.5
        
      2. Y 设置为变量 sw_layout_margin

      3. 高度必须与我们创建的标题相同,因此将 高度 设置为变量 sw_layout_height_header

    3. 第二条垂直线位于第一条垂直线的左侧。

      1. X 的表达式设置为

        @layout_pagewidth - @sw_layout_margin * 2 - 83.5
        
      2. Y 设置为变量 sw_layout_margin

      3. 高度应与其他垂直线相同,因此将 高度 设置为变量 sw_layout_height_header

    下图显示了动态布局的结构,我们将用一些元素填充由线创建的区域。

../../../_images/dynamic_layout_structure.png

4.2.3. moderate 跟我做: 为动态标题创建标注

  1. QGIS工程的标题可以自动包含在内。标题在 工程属性 中设置。使用 label 添加标注 按钮插入标注,并输入名称 project title (variable) 。在 项属性 面板的 主要属性 中,输入以下表达式:

    [%@project_title%]
    

    设置标注的位置。

    1. 对于 X ,使用以下表达式

      @sw_layout_margin + 3
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 0.25
      
    3. 对于 宽度 ,使用以下表达式

      @layout_pagewidth - @sw_layout_margin *2 - 90
      
    4. 输入 11.25 作为 高度

    外观 将字号设置为 16 点。

  2. 第二个标注将包含您创建的地图描述。同样,插入一个标注并将其命名为 map description 。在 主要属性 输入文本 map description 。在 主要属性 中,我们还将包括

    printed on: [%format_date(now(),'dd.MM.yyyy')%]
    

    这里我们使用了两个 日期和时间 函数 (nowformat_date)。

    设置标注的位置。

    1. 对于 X ,使用以下表达式

      @sw_layout_margin + 3
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 11.5
      
  3. 第三个标注将包含有关您团队的信息。首先,我们将在 项属性变量 菜单中创建一些变量。转到 布局 菜单,单击 symbologyAdd 按钮,输入名称 o_department, o_name , o_adress and o_postcode 。在第二行输入有关团队的信息。我们将在 主要属性 区段使用这些变量。

    主要属性 中输入

    [% @o_name %]
    [% @o_department %]
    [% @o_adress %]
    [% @o_postcode %]
    

    设置标注的位置。

    1. 对于 X ,使用以下表达式

      @layout_pagewidth - @sw_layout_margin - 49.5
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 15.5
      
    3. 对于 宽度 ,使用 49.00

    4. 对于 高度 ,使用以下表达式

      @sw_layout_height_header - 15.5
      
../../../_images/dynamic_layout_organisation.png

4.2.4. moderate 跟我做: 向动态标题添加图片

  1. 使用 addImage 添加图片 按钮将图片放置在标注 organisation information 上方。输入 organisation logo 的名称后,定义标识的位置和大小:

    1. 对于 X ,使用以下表达式

      @layout_pagewidth - @sw_layout_margin - 49.5
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 3.5
      
    3. 对于 宽度 ,使用 39.292

    4. 对于 高度 ,使用 9.583

    如果想包含团队的标识,您必须将标识保存在主目录,并在 主要属性 ► 图像源 输入路径。

  2. 我们的布局仍然需要指北针,这将使用 northArrow 添加指北针 插入,在此使用默认设置的指北针。定义位置:

    1. 对于 X ,使用以下表达式

      @layout_pagewidth - @sw_layout_margin * 2 - 78
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 9
      
    3. 对于 宽度 ,使用 21.027

    4. 对于 高度 ,使用 21.157

4.2.5. moderate 跟我做: 创建动态标题的比例尺

  1. 要在标题中插入比例尺,请单击 scaleBar 添加比例尺 并将其放置在指北针上方的矩形中。在 主要属性 下的 地图 中选择 main map(Map 1) 。这意味着比例会根据您在QGIS主画布中选择的范围自动更改。选择 样式 数字 。这意味着我们插入了一个没有比例尺的简单比例尺。比例尺仍然需要一个位置和大小。

    1. 对于 X ,使用以下表达式

      @layout_pagewidth - @sw_layout_margin * 2 - 78
      
    2. 对于 Y ,使用以下表达式

      @sw_layout_margin + 1
      
    3. 对于 宽度 ,使用 25

    4. 对于 高度 ,使用 8

    5. 参照点 放在中心。

祝贺!您已经创建了第一个动态地图布局。检查一下布局,看看是否一切都是您想要的样子!更改 页面属性 时,动态地图布局会自动做出反应。例如,如果将页面大小从 DIN A4 更改为 DIN A3,请单击 refresh 刷新视图 按钮,页面制图将自动进行调整。

../../../_images/dynamic_layout.png

4.2.6. What's Next?

在下一页,您需要完成一份作业。这将允许您能够练习到目前为止所学到的技术。