Important

翻译是一项社区工作:ref:你可以加入<translation_guidelines>。此页面目前翻译进度为 90.36%。

4.2. Lesson: Creating a Dynamic Print Layout

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

4.2.1. ★★☆ Follow Along: Creating the dynamic map canvas

  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. ★★☆ Follow Along: Creating the dynamic header

  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. ★★☆ Follow Along: Creating labels for the dynamic header

  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. ★★☆ Follow Along: Adding pictures to the dynamic header

  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. ★★☆ Follow Along: Creating the scalebar of the dynamic header

  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. 参照点 放在中心。

Congratulations! You have created your first dynamic map layout. Take a look at the layout and check if everything looks the way you want it! The dynamic map layout reacts automatically when you change the Page Properties. For example, if you change the page size from DIN A4 to DIN A3, click the refresh Refresh view button and the page design is adapted.

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

4.2.6. 接下来是?

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