移至主內容
首頁
SLAT Blogs

主導覽

  • 首頁
使用者帳號選單
  • 登入

導航連結

  1. 首頁
  2. 部落格
  3. 肥貓的異想世界

用Python/QGIS篩選地理資料的簡短示範

By 肥貓, 7 二月, 2026
geopandas in Python Spyder runtime, notice size differences between several procedures

我們可以用很多第三方程式去擷取OpenStreetMap的圖資,但是地理範圍較大的資料容量也很大。若直接匯入QGIS不僅浪費資源也影響程式穩定度,宜在Python用命令列做預處理。

用極端點的例子,我想製作中國的高速公路網圖,可以在人道救援資料集找到擷取OSM中國所有道路的資料集,你再從中篩選出高速公路資料集即可。說來容易,但是檔案抓下來就1.8GB,直接匯入QGIS是不會當掉,但是快七百萬個Features是要等到天荒地老?

若用Python先做預處理,把資料篩選到約56萬筆再匯入QGIS,事情顯然就簡單得多。拜AI之賜,Google很快就能給你基礎的語法下去修。

基本操作和Pandas非常像,我要知道中國的高速公路在OpenStreetMap是"Highway"的哪個Attribute

我就隨機找一條高速公路,然後知道它應該叫做motorway

我可以再用unique()功能,先挑出各種關鍵字(以及知道有motorway_link,技術上應該是高速公路的聯絡線,有點像我國的國道3甲)

這樣您再用pandas的篩選功能,就能把屬於高速公路和聯絡線的圖資挑出來。以後就不用再讀那麼大的檔案了。

這些語法也可以在我的Github上找到。

import geopandas as gpd
#import pandas as pd
gdf = gpd.read_file("/home/fattabby/下載/hotosm_chn_roads_lines_shp/hotosm_chn_roads_lines_shp.shp")

#make an example
#yygs=gdf[gdf["name"]=="甬莞高速"] #我要知道中國的高速在公路等級(英文)是哪種類別
#road_ext=set(gdf["highway"].unique()) #motorway, motorway_link
motorways = gdf[(gdf['highway'] == 'motorway') | (gdf['highway'] == 'motorway_link')]

motorways.to_file("/home/fattabby/下載/motorways.shp")

如此便省事多了

不過這作法也並非毫無缺點,例如當我再進一步篩選出瀋海高速的路型時,卻可發現沿海許多路段出現空缺的情形。仔細看了一下資料,有可能是編輯者在OpenStreetMap的命名方式不統一,造成很多資料不是被誤殺,就是根本沒標注成是高速公路的一部分。這還是得用domain knowledge拆解每個個案,才知道該怎麼處理。

Blog tags
QGIS
Python
  • 肥貓的異想世界

部落格列表

管理日誌
LibreOffice 正體中文文件
肥貓的異想世界
軟體自由運動部落格
馬哥的大小事
My Libre World
社會派宅爸

最新文章

用Python/QGIS篩選地理資料的簡短示範
我的 2025 回顧
LibreOffice x GSoC 2025 成果報告
LO Conf 2025 精彩回顧:奧地利軍隊的開源轉型之路
試用Python製作一支簡單的爬蟲程式
試用Python製作一支簡單的考試程式
Interview with Sandy Corzeta, Admin of Indonesia's Fediverse Instance 'misskey.id'
簡單處理在Ubuntu終端機啟動Miniconda的問題
在LibreOffice Calc利用Vlookup做精準搜尋
現在就加入 LibreOffice 團隊當全職開發者,處理 RTL/CTL/CJK 等事宜!
[JS 筆記] 可選串連、條件三元、falsy、some與includes
用QGIS + OpenStreetMap + Python 處理線形地理資料
Powered by Drupal