利用地圖出版設計的圖輯工具自動創造地圖

警告

本教學已有新的版本,請前往 Automating Map Creation with Print Layout Atlas (QGIS3)

如果你的所屬單位有出版紙本或線上地圖的話,你或許會常常需要使用同一個範本製作許多地圖,這些地圖通常個別代表不同的行政區或是不同的特定區域。如果你需要時常更新這些地圖的話,手動弄起來會花費許多時間,甚至可能會成為超級麻煩事。不過,QGIS 有個稱為 輿圖 的工具,可以讓你設計地圖範本並且使用它來製作出版許多不同地區的地圖。如果你對「地圖出版設計(Print Composer)」不熟悉,請先閱讀 製作地圖 中的教學。

內容說明

本教學將示範如何為夏威夷州的每個縣製作濕地地圖。

你還會學到這些

  • 使用 反轉多邊形 樣式設定多邊形外側的區域樣式

  • 規則 樣式設定中使用表達式,讓輿圖工具只顯示現在選擇的圖徵

  • 在地圖出版設計中使用表達式建立動態標記

取得資料

本章中我們使用的是夏威夷州 Office of Planning提供的 GIS 資料圖層

下載隸屬於生物與生態類別的濕地圖層

下載隸屬於文化與人口統計類別的 2010 郡縣邊界 圖層

為了方便起見,你也可以直接用下面的連結下載這兩份資料集:

HI_Wetlands.shp.zip

county10.shp.zip

資料來源 [HAWAII]

操作流程

  1. 打開 QGIS,選擇 圖層 ‣ 加入圖層 ‣ 加入向量圖層

../_images/1174.png
  1. 選擇 HI_Wetlands.shp.zip 並按下 確定

../_images/2142.png
  1. 選擇 HI_Wetlands_Poly 圖層並點選 確定

../_images/380.png
  1. 你會看到很多多邊形出現,代表夏威夷州全部的溼地範圍。由於我們要分別製作夏威夷每個縣的溼地地圖,因此還需要一個郡縣邊界的圖層才行。選擇 圖層 ‣ 加入圖層 ‣ 加入向量圖層,然後點選 county10.shp.zip,按下 開啟

../_images/450.png
  1. 選擇 專案 ‣ 建立地圖出版設計

../_images/544.png
  1. 設計標題保持空白,按下 確定

../_images/643.png
  1. 選擇 圖層 ‣ 加入地圖

../_images/743.png
  1. 在地圖版面上拖曳一塊你想插入地圖的區域。

../_images/842.png
  1. 切換到 項目屬性 分頁然後向下捲動,勾選 由輿圖控制 的方框,此選項用來告訴電腦本地圖的範圍是由輿圖工具所控制。(譯按:如果這時方框是無法選取的狀態,請先完成後續幾個步驟,再回來勾選。)

../_images/943.png
  1. 切換到 輿圖設計 分頁,勾選 產生輿圖 方框,覆蓋圖層 選擇 county10,如此一來電腦就會為每個在 county10 內的多邊形圖徵創造各自的地圖。你也可以勾選 隱藏覆蓋範圍圖層,這樣一來「覆蓋圖層」內的圖徵就不會顯示在地圖上。

../_images/1050.png
  1. 雖然已經完成了輿圖設定,但這時地圖影像還不會有任何改變。選擇 輿圖 ‣ 預覽輿圖

../_images/1175.png
  1. 按下去之後地圖會刷新成為其中一張地圖看起來的樣子,注意在右側最底部有個訊息,告訴你現在所使用的多邊形圖徵編號。

../_images/1253.png
  1. 你也可以預覽由其他多邊形建立的地圖,請選擇 輿圖 –> 下一個圖徵

../_images/1351.png
  1. 如此一來地圖就會刷新為下一個圖徵覆蓋的範圍。

../_images/1447.png
  1. 來加點標記吧!選擇 圖層 ‣ 加入標記

../_images/1541.png
  1. 在標記的 項目屬性 分頁中,選擇 插入表示式…

../_images/1639.png
  1. 在此功能中,標記文字可以使用覆蓋圖層的屬性。我們要使用 concat 函數來把兩段字串合併,而要合併的字串分別為 County ofcounty10 圖層中的 NAME10 屬性值。加入以下的表達式後,按下 確定

concat('County of ', "NAME10")
  1. 調整成你喜歡的字體大小。

../_images/1833.png
  1. 加入另一個標記,然後在 主要屬性 下輸入 Wetlands Map。由於沒有使用表達式,此文字在所有的地圖中都會相同。

../_images/1926.png
  1. 選擇 輿圖 ‣ 最後一個圖徵,然後確認地圖標記有照我們所想的運作。目前濕地地圖上的多邊形也延伸到了海中,看起來不怎麼美觀,所以接著我們就要來改變樣式,隱藏郡縣邊界外側的多邊形圖徵。

../_images/2023.png
  1. 切換到 QGIS 主視窗,在 county10 圖層上按右鍵選擇 屬性

../_images/2143.png
  1. 樣式 分頁中,選擇 反轉多邊形 的呈現方法,這個特殊的樣式設定的是多邊形的「外部」區域。選擇白色做為填充色彩,然後按下 確定

../_images/2224.png
  1. 回到地圖設計的視窗,如果我們要讓反轉多邊形的設定出現的話,就得先取消勾選在 輿圖設計 分頁下的 隱藏覆蓋範圍圖層 才行。套用新樣式後的地圖由於多邊形外圍區域已經隱藏起來,看起來乾淨許多。

../_images/2321.png
  1. 不過目前還有一個問題,你可以看到在位在覆蓋圖層內部,但是屬於其他圖徵的區域仍然可以看見,這是因為輿圖工具並不會自動把其他圖徵也隱藏起來。此設計在某些狀況下很有用,但卻不是我們想要的、每個地圖只呈現單一個多邊形圖徵內的資訊。為了修正此問題,我們要回到 QGIS 主視窗,然後在 county10 圖層上按右鍵,選擇 屬性

../_images/2421.png
  1. 樣式 分頁中,有個 子繪圖 下拉選單,選擇 規則 的呈現方法。在下方 規則 的欄位上點兩下。

../_images/2520.png
  1. 點選 過濾條件 右側的 鈕。

../_images/2617.png
  1. 表達式字串建構器 中,展開 Atlas 的群組(譯按:或是 Variables 的群組),然後找到 $atlasfeatureidatlas_featureid,此函數會傳回目前輿圖工具選擇的圖徵。我們要做的是建立一個表達式,讓它只選擇輿圖工具選擇的圖徵,因此請輸入以下表達式:

$id = $atlasfeatureid
../_images/2717.png
  1. 回到地圖設計的視窗,在地圖項目的 項目屬性 分頁中點選 :guilabel:` 更新預覽` 後,就可以看到改變,現在每張地圖都只會顯示位於本郡縣邊界內的資料了。

../_images/2818.png
  1. 我們再來加入另一個新的標記,用來標示現在的日期。選擇 圖層 ‣ 加入標記 然後選擇地圖上的任一區域,完成後按下 插入表示式 鈕。

../_images/2916.png
  1. 展開 日期與時間 的群組,找到 now 這個函數,它用來表示現在的系統時間。另外我們要使用 todate()``這個函數,用來把 ``now 的函數值轉換成日期字串。請輸入以下表示式:

concat('Created on: ', todate($now))
../_images/3014.png
  1. 再加入另外一個標記,引用資料來源。你也可以順道加入其他的地圖元素,例如指北針等等,請參考 製作地圖 一章的說明。

../_images/3117.png
  1. 當你完成地圖版面後,選擇 輿圖 ‣ 匯出輿圖為影像

../_images/3214.png
  1. 選擇電腦中的某資料夾,然後按下 選擇 鈕。

../_images/3312.png
  1. 輿圖工具會自動地使用我們剛剛建立的範本,為覆蓋圖層中的每個圖徵創造各自的地圖。處理完成後,在資料夾中就能找到這些地圖。

../_images/3410.png
  1. 這裡放上完成版地圖以供參考。

../_images/35_1.jpg ../_images/35_2.jpg ../_images/35_3.jpg ../_images/35_4.jpg ../_images/35_5.jpg

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)