如何在 QGIS 中下載 OpenStreetMap 資料
Published

要把 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:QuickOSM | 6.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=yes、highway=primary、amenity=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(一個地名)、Around、Layer Extent 和 Not Spatial。執行查詢
按Run query。Kisumu 在 5 秒內回傳兩個 layers:4,560 個含 58 個屬性質的建築多邊形,以及 3 棟以點表示的建築物。
Advanced 區段比看起來更重要。逾時預設為 25 秒,對城鎮綽綽有餘,對區域則不夠。Directory 欄位預設為「儲存到暫存檔」,所以 layers 會存放在記憶體中,在 Layers 面板上標有暫存 layer 圖示,如果你沒儲存就關閉 QGIS,它們就會消失。

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

我沒料到這裡的標籤這麼簡略。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,寫檔前先詢問了一次。

這些 layers 是 GeoPackage 中普通的 QGIS layers,所以會像 QuickOSM 的結果一樣,繼續用在你專案的其餘部分。如果只要單一視圖中的單一標籤,QuickOSM 的 5 秒勝出。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%。

**適用時機:**區域是城鎮或你目前開啟的視圖,而且你要的不只是載入資料,還想套用樣式、裁切或比較。
**不適用時機:**你需要一個地區或國家。它適用的規模是城鎮,大範圍的請求更容易逾時,那邊用 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:points、lines、multilinestrings、multipolygons 和 other_relations。建築物、土地利用和大部分面狀資料都在 multipolygons 裡。篩選出你需要的資料
在 layer 上按右鍵,選Filter…,然後輸入 "building" IS NOT NULL。building、amenity、landuse 這類常見鍵都有自己的欄位。其他一切都放在 other_tags 裡。裁出你的區域並儲存
整個國家畫起來很慢。用下面的指令把你要的區域裁一次,然後改用那個檔案工作。
不要直接用國家檔案工作。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,然後選 GeoJSON、download。同一個對話框也提供 GPX、KML 和原始 OSM 資料。把 .geojson 檔案拖進 QGIS。
逾時也是從這裡來的,因為 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。
,安裝 QuickOSM plugin,開啟 

