跳至內容
AI Agent
QGIS
教學

如何在 QGIS 中下載 OpenStreetMap 資料

Published

肯亞 Kisumu 市中心一分為二:左側是 OpenStreetMap 底圖,右側是以資料形式載入的同一批街道,建築物依佔地面積著色,並有主要道路。
肯亞 Kisumu 市中心。左側是 OpenStreetMap 底圖:一張圖片。右側是同一個地方,但換成可以選取、量測和儲存的資料:4,572 棟建築物和 128 條主要道路路段。

要把 OpenStreetMap 資料載入 QGIS,安裝 QuickOSM plugin,開啟 Vector > QuickOSM > QuickOSM…,在 Quick query 分頁輸入如 building 的鍵,選擇 Canvas Extent,然後按 Run query。若要整個國家,從 Geofabrik 下載 .osm.pbf 檔,再拖進 QGIS 即可。

要選哪一種,取決於兩件事:區域有多大,以及你是否已經知道所需資料的 OpenStreetMap 標籤。我於 2026 年 9 月 23 日在 QGIS 3.44.7 中,針對肯亞 Kisumu 市中心實測了下列每一種方法,並逐一計時。

重點速答

你的區域方法在 Kisumu 的實測
城鎮,或你目前開啟的視圖,而且你知道標籤方法 1:QuickOSM6.3 km² 範圍內的 4,560 棟建築物,耗時 5 秒
你不知道標籤,或想一次完成樣式與儲存方法 2:QGIS 中的 AI Agent建築物、主要道路、樣式與 GeoPackage,耗時 3 分 41 秒
一個區域或整個國家方法 3:Geofabrik 切檔下載肯亞(334 MB)耗時 57 秒,裁出 Kisumu 耗時 6 分 28 秒
你想先在地圖上測試的查詢方法 4:Overpass Turbo,匯出 GeoJSON幾秒鐘內在畫面上顯示 417 棟建築物

我的預設是:城鎮規模以內一律用 QuickOSM,一旦區域大到行政區規模就改用 Geofabrik。我會避開的做法是把國家規模的查詢送給 Overpass,接下來幾節會說明原因。

開始之前

OpenStreetMap 把所有東西都儲存為標籤,也就是一組鍵與值的配對:building=yeshighway=primaryamenity=school。每一種下載方法都會要求你提供一個鍵、一個值,或兩者,所以先到 OSM wiki 的 Map features 頁面查一下標籤會很有幫助。單獨一個鍵(building)會回傳它的所有值。

使用 QuickOSM 2.5.3(plugin 儲存庫上的目前版本,2026 年 9 月 23 日查閱)需要 QGIS 3.34 或更新版本,以及網際網路連線。走 Geofabrik 這條路,每個國家要準備幾百 MB 的磁碟空間。

網路上常見的錯誤觀念

「QGIS 中的 OpenStreetMap layer 就是資料。」 其實不是。Browser 面板中 XYZ Tiles 底下的 OpenStreetMap 項目,是一組從資料繪製出來的圖片。你無法在上面選取建築物、讀取它的屬性,也無法量測。

圖磚使用政策用一句話說明了這點:「OpenStreetMap (OSM) 資料對所有人免費使用,但我們的 tile 伺服器不是。」它也禁止大量下載 tiles,所以把底圖存到磁碟也不是繞過它的辦法。

「顯示 Access blocked 表示 OpenStreetMap 封鎖了你。」 「Access blocked」訊息是印在地圖圖磚上,而不是印在資料上。OSM wiki 關於被封鎖圖磚的頁面列出了最常見的一種:「403r. Access blocked. Referer is required by tile usage policy of OpenStreetMap's volunteer-run servers」。

這代表顯示底圖的應用程式沒有送出 Referer 或 User-Agent header。這與下面的資料服務無關,它們是以其他方式失敗的。

「Overpass 可以給我整個國家。」 Overpass API wiki要求公開使用者每天低於 10,000 次查詢、1 GB 用量,並建議需要大範圍的人改用 Geofabrik 上的區域 dump。我請 QuickOSM 查詢肯亞所有建築物的測試,大約 32 秒後就因逾時而失敗,這在方法 4 會說明。

方法 1:QuickOSM,適用於城鎮或目前的視圖

QuickOSM 把你的查詢送到 Overpass 伺服器,並把結果載入為 layers。當區域符合你的畫面範圍時,這是最快的方法。

安裝 QuickOSM

Plugins > Manage and Install Plugins,搜尋 QuickOSM,按 Install Plugin。第一次開啟時,它會顯示提醒:OSM 資料採用 ODbL 授權,並要求標註「© OpenStreetMap contributors」。

縮放到你的區域

在畫布上框出城鎮或鄰里範圍。我縮放到 Kisumu 市中心,大約 3 公里乘 2 公里。

填寫 Quick query 分頁

Vector > QuickOSM > QuickOSM…,然後選 Quick query。在鍵輸入 building,值留空(會顯示「Query on all values」),並把範圍設為 Canvas Extent。其他範圍選項有 In(一個地名)、AroundLayer ExtentNot Spatial

執行查詢

Run query。Kisumu 在 5 秒內回傳兩個 layers:4,560 個含 58 個屬性質的建築多邊形,以及 3 棟以點表示的建築物。
QuickOSM 的 Quick query 分頁:鍵為 building、值為空、已選取 Canvas Extent,並展開顯示 25 秒逾時與「儲存到暫存檔」的 Advanced 區段。
開啟 Advanced 的 Quick query 分頁。注意最下方:25 秒逾時和「儲存到暫存檔」是預設值。

Advanced 區段比看起來更重要。逾時預設為 25 秒,對城鎮綽綽有餘,對區域則不夠。Directory 欄位預設為「儲存到暫存檔」,所以 layers 會存放在記憶體中,在 Layers 面板上標有暫存 layer 圖示,如果你沒儲存就關閉 QGIS,它們就會消失。

QGIS 中,4,560 棟 OpenStreetMap 建築物以紅色顯示在 Kisumu 市中心的 OpenStreetMap 底圖上,Layers 面板中有兩個名為 building 且帶有暫存 layer 圖示的 layers。
疊在底圖上的 QuickOSM 結果。兩個「building」layers 名稱右側帶有暫存圖示:目前還沒有任何東西寫到磁碟。

若要保留它們,在 layer 上按右鍵,選 Make Permanent…,然後選擇一個 GeoPackage 路徑。Kisumu 的建築物產生了 1.5 MB 的檔案。你也可以在執行前於 Advanced 中設定目錄,QuickOSM 會直接寫出 GeoPackage(預設)、GeoJSON、Shapefile 或 KML。

QGIS 的 layer 右鍵選單含有 Make Permanent,旁邊是設為 GeoPackage、layer 名稱為 buildings 的 Save Scratch Layer 對話框。
Make Permanent 會開啟 Save Scratch Layer 對話框,預設為 GeoPackage。QuickOSM 也會在同一個選單加入「Reload the query in a new file」。

我沒料到這裡的標籤這麼簡略。Kisumu 的 4,560 棟建築物中有 4,453 棟(98%)只有 building=yes。依「建築物類型」來套用樣式,只會得到一種顏色和 107 個例外。標籤的詳細程度只取決於當地製圖人員做了多少,所以在承諾要做出依類型區分的圖之前,先檢查值的數量統計。

**適用時機:**區域是城鎮或更小,而且你知道想要的鍵。

**不適用時機:**區域是整個地區或國家,或查詢需要以 Quick query 表單無法提供的方式組合多個標籤。

方法 2:在 QGIS 中用一句話交給 AI Agent

我們自己就打造了其中一種工具:AI Agent,它是 QGIS 中的一個聊天面板,會在你開啟的專案裡執行各步驟。這一節要講的就是我們自家的工具。

這適合不知道標籤、或想要一次完成整個流程(抓取、裁切、套用樣式、儲存)的讀者。在新專案中縮放到 Kisumu 的同一視圖後,我輸入了:

從 OpenStreetMap 載入肯亞 Kisumu 市中心的建築物和主要道路,依佔地面積為建築物上色,並把兩個 layers 都儲存到一個 GeoPackage。

它花了 3 分 41 秒、39 個動作。它對 Kisumu 進行地理編碼,在 6.2 km² 的視圖範圍內向 OpenStreetMap 查詢建築物,以及標記為 motorway 到 tertiary 的道路,把兩者都裁切到該視圖,並在 UTM zone 36S 中計算出 area_m2 欄位,讓面積以實際平方公尺呈現。接著套用五級分級樣式,並把兩個 layers 寫入專案旁的 Kisumu central OSM.gpkg,寫檔前先詢問了一次。

QGIS 中,Kisumu 市中心的建築物依佔地面積從黃色到深紅色著色,主要道路為藍色,Layers 面板顯示五個面積等級,AI Agent 面板列出已儲存的 1.5 MB GeoPackage。
面板旁顯示結果:4,572 棟建築物分成五個面積等級,最大達 17,026 m²、128 條主要道路路段,以及它儲存的 1.5 MB GeoPackage。

這些 layers 是 GeoPackage 中普通的 QGIS layers,所以會像 QuickOSM 的結果一樣,繼續用在你專案的其餘部分。如果只要單一視圖中的單一標籤,QuickOSM 的 5 秒勝出。AI Agent 會花幾分鐘,因為它還要裁切、加上面積欄位、套用樣式並儲存。

在 QGIS 免費試用 AI Agent

第二則訊息展示了其他方法都無法一次做到的事。我請它載入同一視圖的 Overture Maps 建築物,並計算 OpenStreetMap 沒有的那些。它在 2 分 41 秒內載入了 7,318 棟 Overture 建築物,並依 ID 比對:4,572 棟來自 OpenStreetMap、2,367 棟來自 Google Open Buildings、379 棟來自 Microsoft 的機器學習足跡。

也就是說,純粹從 OSM 下載 Kisumu 市中心會漏掉 2,746 棟建築物,佔總數的 38%。

QGIS 中,Kisumu 市中心的 Overture 建築物依來源著色:黃色是 OpenStreetMap、紫色是 Google Open Buildings、青色是 Microsoft ML Buildings,AI Agent 的回覆指出有 2,746 棟建築物不在 OpenStreetMap 中。
同一視圖上的 Overture,依來源著色。紫色(Google)和青色(Microsoft)就是 OpenStreetMap 目前還沒有的建築物。

**適用時機:**區域是城鎮或你目前開啟的視圖,而且你要的不只是載入資料,還想套用樣式、裁切或比較。

**不適用時機:**你需要一個地區或國家。它適用的規模是城鎮,大範圍的請求更容易逾時,那邊用 Geofabrik 切檔更快。

方法 3:Geofabrik 切檔,適用於區域或國家

Geofabrik 按洲、國家,以及部分國家按區域,發布免費的 OpenStreetMap 切檔。完全不需要查詢:你下載的是一個已經包含所有物件的檔案。

選擇區域

瀏覽到你的國家。2026 年 9 月 23 日的肯亞頁面提供 kenya-latest.osm.pbf(334 MB)、kenya-latest-free.shp.zip(939 MB)和 kenya-latest-free.gpkg.zip(965 MB)。.pbf 在這裡以 57 秒下載完成。

把 .pbf 拖進 QGIS

QGIS 會開啟「Select Items to Add」對話框,內含五個 layers:pointslinesmultilinestringsmultipolygonsother_relations。建築物、土地利用和大部分面狀資料都在 multipolygons 裡。

篩選出你需要的資料

在 layer 上按右鍵,選 Filter…,然後輸入 "building" IS NOT NULLbuildingamenitylanduse 這類常見鍵都有自己的欄位。其他一切都放在 other_tags 裡。

裁出你的區域並儲存

整個國家畫起來很慢。用下面的指令把你要的區域裁一次,然後改用那個檔案工作。
針對 kenya-latest.osm.pbf 的 QGIS Select Items to Add 對話框,列出 lines、multilinestrings、multipolygons、other_relations 和 points,其中 multipolygons 已選取。
Geofabrik .pbf 內部的五個 layers。要建築物就選 multipolygons。

不要直接用國家檔案工作。QGIS 每次重繪或計算時,都會從頭到尾讀取 .osm.pbf,與縮放程度無關。第一次直接從肯亞檔案繪製 Kisumu 視圖時,我的筆電花了 19 分鐘(當時還有另一個工作同時讀取同一個檔案),第二次掃描計算該視圖的建築物數量則花了 2 分 42 秒。用 QGIS 隨附的 GDAL 工具 ogr2ogr 裁切一次:

ogr2ogr -f GPKG kisumu.gpkg kenya-latest.osm.pbf multipolygons -spat 34.745 -0.1114 34.772 -0.0926 -where "building IS NOT NULL"

這花了 6 分 28 秒,產生一個含 4,576 棟建築物的 1.3 MB GeoPackage,QGIS 處理它就像處理任何小型 layer 一樣。-spat 後面的四個數字依序是西、南、東、北的經緯度。

shapefile 和 GeoPackage 的壓縮檔比較容易開啟,每個主題一個 layer,但格式說明列出了免費版缺少的內容:其中包括建築高度和樓層數。.pbf 則保留所有標籤。

**適用時機:**區域是一個地區或國家,或者你會多次查詢同一個區域。

**不適用時機:**你只需要某個社區裡的一個標籤。為了 6 km² 下載 334 MB 是最慢的做法。

方法 4:Overpass Turbo,適用於想先查看的查詢

Overpass Turbo 是一個網頁,你在上面撰寫 Overpass 查詢、在目前的地圖視圖上執行,並在下載任何東西之前先查看結果。這裡就是建構 QuickOSM 表單無法表達之查詢的地方。

下面三行會查詢目前地圖視圖中的所有建築物:

[out:json][timeout:25];
way["building"]({{bbox}});
out geom;

撰寫查詢

把它貼到左側的編輯器,或用 Wizard 按鈕建立查詢。

在視圖上執行

把地圖縮放到你的區域,然後按 Run。在 Kisumu 市中心 zoom 17 的視圖上,它繪製了 417 棟建築物。

匯出為 GeoJSON

Export,然後選 GeoJSONdownload。同一個對話框也提供 GPX、KML 和原始 OSM 資料。把 .geojson 檔案拖進 QGIS。
Overpass Turbo:左側是三行建築物查詢,右側是 Kisumu 市中心,建築物輪廓以藍色標示。狀態列顯示 417 ways loaded。
左側是查詢,右側是結果。右下角的計數器顯示回傳的內容:417 條 ways、417 個多邊形。

逾時也是從這裡來的,因為 QuickOSM 和 Overpass Turbo 使用的是同一批伺服器。根據 Overpass QL 文件[timeout:] 設定預設為 180 秒,[maxsize:] 預設為 512 MB 伺服器記憶體。超出任何一項的查詢都會被中斷。QuickOSM 預設送出 25 秒。當我請它查詢肯亞所有建築物時,大約 32 秒後得到的回應是:

Overpass error: Query timed out in "area-query" at line 5 after 30 seconds.

公開伺服器也會限量配給請求。為了寫這篇文章,我用快速迴圈直接查詢伺服器來挑選城鎮:大約 20 秒內的第 5 個請求回傳 429 Too Many Requests,第 6 個回傳 504 Gateway Timeout。wiki 對 429 的建議是先暫停 30 秒再送出下一個請求。調高 [timeout:] 對幾乎夠快的查詢有幫助;但對國家範圍來說,那只會讓你等更久,然後得到同樣的結果。

**適用時機:**你在撰寫自訂查詢,想在載入之前先在地圖上確認結果。

**不適用時機:**區域很大,或者你會經常重複下載。請使用方法 3。

發布時記得標註 OpenStreetMap

OpenStreetMap 資料採用 Open Database License(ODbL)。版權頁面要求你在任何使用它的地方做兩件事:標註 OpenStreetMap,並清楚說明資料採用 ODbL 授權,一個連到 openstreetmap.org/copyright 的連結就能做到。標註規範接受「© OpenStreetMap contributors」,並希望標註放在地圖旁邊,或讀者會預期看到出處的地方。

地圖影像或 PDF 是成品,標註來源就夠了。如果你把 layer 當作資料分享出去(例如你校正過、內含建築物的 GeoPackage)它就仍然受 ODbL 規範。同一個頁面也寫道:「如果你修改或延伸我們的資料,就只能以相同的授權散布成果。」在 QGIS 的列印版面中,把含標註的文字框放在地圖角落,就能涵蓋第一種情況。

重點提醒

  • 依區域選擇方法:城鎮或目前的視圖用 QuickOSM(Kisumu 的 4,560 棟建築物花了 5 秒)、想用一句訊息就完成裁切、套用樣式和儲存則用 AI Agent、區域或國家用 Geofabrik 的 .pbf、測試自訂查詢用 Overpass Turbo。
  • QGIS 中的 OpenStreetMap 底圖是從資料繪製出來的圖片,「Access blocked」是關於這些圖片的訊息,與資料本身無關。
  • QuickOSM 的結果在你不使用 Make Permanent… 或在 Advanced 設定目錄之前,都是暫存 layers。
  • Overpass 查詢在大範圍上會失敗:QuickOSM 的預設逾時是 25 秒、伺服器會用 429 限量配給請求,而國家範圍的資料該用 Geofabrik 切檔。
  • OpenStreetMap 的涵蓋範圍並不平均:在 Kisumu 市中心,Overpass 回傳 4,572 棟建築物,而加入 Google 和 Microsoft 足跡的 Overture 則有 7,318 棟。

常見問題

要怎麼取得我家城鎮的 OSM 建築物或道路?

在 QGIS 中縮放到城鎮,開啟 Vector > QuickOSM > QuickOSM…,鍵輸入 building(道路則用 highway),設定 Canvas Extent 並執行查詢。道路可以加一個值,例如 primary,或留空以取得所有道路等級,包含人行步道。用 Make Permanent… 儲存結果。

QuickOSM、Geofabrik 或 Overpass:該選哪一個?

知道標籤時,城鎮或更小的範圍用 QuickOSM。區域或國家,或你會重複使用該區域時,用 Geofabrik。想先在地圖上撰寫並測試查詢時,用 Overpass Turbo。QuickOSM 和 Overpass Turbo 使用同一批 Overpass 伺服器,所以共用相同的規模限制。

為什麼我的 Overpass 查詢會逾時或顯示 access blocked?

逾時表示查詢超過了它的 [timeout:](QuickOSM 是 25 秒,Overpass 預設 180 秒)或記憶體限制,所以縮小範圍,或改用 Geofabrik 切檔。429 Too Many Requests 表示你在短時間內送出太多請求,等 30 秒再試。「Access blocked」是印在底圖圖磚上,而不是印在 Overpass 資料上,來源是圖磚伺服器的 Referer 與 User-Agent 規則。

要怎麼儲存 QuickOSM 建立的暫存 layer?

在 Layers 面板中對 layer 按右鍵,選 Make Permanent…,選擇 GeoPackage 和檔案路徑。如果想跳過這個步驟,在執行查詢前於 QuickOSM 的 Advanced 區段設定 Directory,它就會直接把檔案寫出來。

發布地圖時,ODbL 授權有什麼要求?

在地圖旁邊標註 OpenStreetMap,例如「© OpenStreetMap contributors」,並清楚說明資料採用 ODbL 授權,通常用一個連到 openstreetmap.org/copyright 的連結。如果你分享的是資料本身,無論是否修改,都必須維持 ODbL 授權。

OSM 的建築物涵蓋範圍完整嗎?

並非所有地方都完整。Nature Communications 在 2023 年的一項研究估計,全球每個城市中心 OSM 建築物的平均完整度為 24%,歐洲和中亞為 71%,南亞為 9%。在 Kisumu 市中心,Overture 持有的建築物有 38% 不在 OSM 中。

在依賴這些數量之前,先與其他來源比較,或像在 QGIS 中偵測建築足跡那樣從影像中偵測遺漏的部分。什麼是建築足跡說明了這些資料集之間的差異。

資料載入之後,AI Agent 完整指南會說明一句訊息還能用它做些什麼。如果你的下一步是影像而非向量,在 QGIS 下載 Sentinel-2為掃描地圖進行地理校正是兩篇搭配的教學,而新增底圖涵蓋了本文起點的圖片 layer。

在 QGIS 免費試用 AI Agent