據(jù)處理:從獲取到修復(fù)的全流程指南)
簡介2022年廈門建筑輪廓GIS數(shù)據(jù)是一份以Shapefile格式組織的空間數(shù)據(jù)集面向城市規(guī)劃、房地產(chǎn)開發(fā)、環(huán)境研究、災(zāi)害應(yīng)急與房產(chǎn)市場分析等領(lǐng)域的專業(yè)人士及研究者精確記錄了廈門市建筑物的邊界、高度、用途、面積等地理與屬性特征為城鄉(xiāng)規(guī)劃和建設(shè)項目評估提供基礎(chǔ)底圖數(shù)據(jù)。壓縮包共6個文件約21MB其中.shp描述建筑幾何輪廓.dbf記錄對應(yīng)屬性信息.prj定義坐標(biāo)投影.shx用于空間索引.cpg與.xml分別標(biāo)明字符編碼和元數(shù)據(jù)各文件協(xié)同確保數(shù)據(jù)在ArcGIS、QGIS等平臺中準(zhǔn)確加載與配準(zhǔn)。已有211人學(xué)習(xí)下載。借助這份數(shù)據(jù)用戶可開展建筑密度與高度分析、用地效率評估、日照風(fēng)向模擬、災(zāi)害影響范圍定位、房產(chǎn)存量透視等場景化應(yīng)用為空間決策提供量化依據(jù)同時需注意合規(guī)使用與數(shù)據(jù)安全。1. 為什么2022年廈門建筑輪廓GIS數(shù)據(jù)值得單獨講在 GIS 日常工作中建筑輪廓是出鏡率最高的矢量數(shù)據(jù)之一。2022 年廈門建筑輪廓 GIS 數(shù)據(jù)指的是以廈門市域為范圍、以 2022 年前后遙感影像或測繪成果為參考提取的建筑物頂面投影多邊形常見交付格式是 Shapefile、GeoJSON 和 FileGDB。它值得單獨講因為廈門老城區(qū)街巷密集、建筑貼邊島外新區(qū)又是大底盤地塊加上山地與填海區(qū)交錯數(shù)據(jù)處理時尖銳角、邊界不齊、重疊多邊形這類問題會比普通城市多出一大截。把這份數(shù)據(jù)完整處理一遍等于把坐標(biāo)系轉(zhuǎn)換、幾何修復(fù)、面積平差、拓?fù)淝謇硭募氯烤毜绞?。適合誰適合做城市規(guī)劃分析、建筑面積統(tǒng)計、三維建模底圖或遙感變化檢測的從業(yè)者也適合想拿真實數(shù)據(jù)練一遍建筑輪廓清洗流程的朋友。這篇文章不講“哪里有免費下載”而是把從數(shù)據(jù)獲取到最終導(dǎo)出的每一步命令、參數(shù)和現(xiàn)場翻車點攤開講。2. 獲取廈門建筑輪廓數(shù)據(jù)來源、格式與坐標(biāo)系核驗2.1 從 OSM 快照中提取廈門建筑ogr2ogr 過濾與裁剪拿到廈門建筑輪廓數(shù)據(jù)最常見的一條路是從 OpenStreetMap 的公開區(qū)域快照文件里提取。OSM 把建筑面保存為multipolygons層每個要素帶building*標(biāo)簽廈門的數(shù)據(jù)包含在中國區(qū)域快照內(nèi)所以只要下載全國 pbf 文件再用 GDAL 的ogr2ogr按屬性和地理范圍過濾一次就能得到建筑輪廓圖層。# 從中國 OSM PBF 快照里篩選建筑多邊形并按廈門大致范圍裁剪 ogr2ogr -f GeoJSON xiamen_buildings.geojson china-latest.osm.pbf \ -sql SELECT * FROM multipolygons WHERE building IS NOT NULL \ -clipdst 117.88 24.38 118.45 24.63 \ -lco RFC7946YES這段命令的邏輯-sql部分從multipolygons層挑出所有building屬性不為空的多邊形這一步把道路、水域、地塊邊界全部過濾掉-clipdst按經(jīng)度 117.88 到 118.45、緯度 24.38 到 24.63 的范圍裁剪把數(shù)據(jù)限制在廈門市域附近。注意 OSM 的邊界并不精確等于行政邊界裁剪后還需要與廈門市行政區(qū)劃面做一次空間相交才能得到嚴(yán)格意義上的廈門范圍。參數(shù)-lco RFC7946YES強制輸出 GeoJSON 2016 標(biāo)準(zhǔn)坐標(biāo)順序經(jīng)度在前這個細(xì)節(jié)能省掉后面數(shù)據(jù)對不齊的一堆麻煩。整個ogr2ogr是單線程命令行工具幾百 MB 的 pbf 文件運行時間大概幾分鐘比在桌面 GIS 里全量加載再篩選穩(wěn)定得多。2.2 新建 shp 文件與公共服務(wù)平臺的取舍如果不想用 OSM另一個常見做法是自己基于影像描繪建筑輪廓。在 QGIS 里新建一個 Shapefile圖層菜單 → 創(chuàng)建圖層 → 新建 Shapefile 圖層要素類型選“面”坐標(biāo)系選 WGS84 或 CGCS2000然后加載天地圖影像底圖手動描繪。這正好回答“gis 怎么新建 shp 文件”這個高頻問題但對 2022 年廈門建筑輪廓來說全手動描繪工作量巨大只適合做局部修正不適合從頭做全量。公共服務(wù)平臺方面天地圖提供影像和矢量瓦片服務(wù)加載方式是在 QGIS 的 XYZ Tiles 里新增一個連接填入天地圖服務(wù)地址。水經(jīng)注這類桌面工具常用于下載離線影像和瓦片下載后作為底圖在 GIS 中疊加使用。需要留意的是不同來源的影像拍攝時間不統(tǒng)一廈門島內(nèi)和翔安的影像可能是不同月份甚至不同年份的如果混用多期影像描繪輪廓會存在系統(tǒng)性錯位。專業(yè)做法是在元數(shù)據(jù)里記錄每塊區(qū)域使用的影像拍攝時間至少要記錄參考年份。數(shù)據(jù)成果說明里寫一句“以 2022 年 XX 影像為參考提取”既是職業(yè)習(xí)慣也是后續(xù)出現(xiàn)面積爭議時唯一的后悔藥。2.3 坐標(biāo)系是第一個坑WGS84、GCJ-02 與 CGCS2000拿到廈門建筑輪廓數(shù)據(jù)后第一步不是畫圖而是確認(rèn)坐標(biāo)系。國內(nèi) GIS 數(shù)據(jù)常見三類坐標(biāo)系WGS84 是 GPS 原數(shù)據(jù)坐標(biāo)系GCJ-02 是國內(nèi)電子地圖底圖普遍使用的偏移坐標(biāo)系CGCS2000 是國家大地坐標(biāo)系。三者之間互有偏移在廈門地區(qū)WGS84 和 GCJ-02 的差值通常有四五百米絕對不能混用。在 QGIS 里檢查坐標(biāo)系圖層右鍵 → 圖層屬性 → 源如果顯示 EPSG:4326 說明是 WGS84顯示 EPSG:4490 說明是 CGCS2000。麻煩的是很多第三方工具導(dǎo)出的數(shù)據(jù)雖然標(biāo)稱 EPSG:4326實際已經(jīng)做過 GCJ-02 偏移。判斷方法很直接把建筑輪廓疊加到天地圖影像底圖上如果整批建筑整體偏離影像半個街區(qū)數(shù)據(jù)大概率被加密偏移了。解決辦法是用天地圖底圖上的固定地物點做整體平移或仿射校正具體操作在第 4 章展開。另外提醒一句在 QGIS 中加載天地圖瓦片時如果底圖空白或紅叉先檢查服務(wù)地址格式和 token這個坑排在所有坐標(biāo)系問題之前因為底圖加載不出來后面所有目視檢查都做不了。3. 建筑輪廓幾何清洗從原始數(shù)據(jù)到可計算的矢量3.1 無效幾何檢查自相交、重復(fù)頂點與拓?fù)溴e誤從 OSM 提取的廈門建筑輪廓幾何質(zhì)量并不均勻尤其是老城區(qū)密集建筑區(qū)經(jīng)常出現(xiàn)自相交多邊形、重復(fù)頂點和相鄰多邊形共用邊不一致。QGIS 的“矢量幾何檢查”插件可以批量輸出這些問題列表ArcGIS Pro 則對應(yīng)“檢查幾何”工具。自相交的典型形態(tài)是建筑多邊形在某處像打了個結(jié)面積計算結(jié)果會是負(fù)數(shù)直接污染后續(xù)的建筑面積統(tǒng)計。# QGIS Python 控制臺批量檢查并修復(fù)無效幾何 from qgis.core import QgsVectorLayer layer QgsVectorLayer(xiamen_buildings.shp, buildings, ogr) print(初始要素數(shù):, layer.featureCount()) bad_features [] for feat in layer.getFeatures(): geom feat.geometry() if not geom.isGeosValid(): bad_features.append(feat.id()) fixed geom.makeValid() feat.setGeometry(fixed) layer.updateFeature(feat) print(修復(fù)的要素數(shù):, len(bad_features)) layer.commitChanges()這段代碼遍歷建筑圖層的每個要素用isGeosValid()做 GEOS 庫級拓?fù)溆行耘袛酂o效幾何通過makeValid()修復(fù)后寫回圖層。修復(fù)策略包括拆分自相交區(qū)域、刪除重復(fù)頂點、消除零面積碎片。如果修復(fù)數(shù)量超過總要素數(shù)的 5%說明原始數(shù)據(jù)質(zhì)量不可靠要回到數(shù)據(jù)源重新核查。還有一點容易被忽略執(zhí)行修復(fù)后必須再次運行一遍檢查因為某些幾何問題需要兩次迭代才能徹底修復(fù)這在處理廈門島內(nèi)超密建筑群時是血淚經(jīng)驗。3.2 尖銳角與狹長多邊形的識別和修復(fù)“GIS 中存在尖銳角怎么處理”是建筑輪廓數(shù)據(jù)里逃不開的問題。廈門老城區(qū)的建筑輪廓常見鋸齒狀邊緣相鄰兩條邊夾角小于 10 度的情況很普遍。尖銳角的成因有兩個一是手繪輪廓時打點過密二是影像分辨率不足導(dǎo)致邊緣鋸齒化。尖銳角不會在面積統(tǒng)計里翻車但會把三維建模的貼圖算法逼瘋也會讓拓?fù)浜喕襟E產(chǎn)生異常結(jié)果。識別尖銳角的方式是用角度閾值掃描所有相鄰邊夾角QGIS 拓?fù)錂z查面板可以高亮標(biāo)記。修復(fù)策略上要注意對一般尖銳角刪除多余頂點而不是粗暴切角對寬度過窄的狹長多邊形先做一次小半徑緩沖分析把寬度小于閾值的碎片部分溶解掉。具體操作可以在 PostGIS 里用 SQL 直接篩出問題要素-- 查詢面積過小或邊界過于細(xì)長的建筑要素 SELECT id, ST_Area(geom) AS area_m2, ST_Perimeter(geom) AS perimeter_m FROM xiamen_buildings WHERE ST_Area(geom) 20 OR ST_Perimeter(geom) / ST_Area(geom) 1.5;這個查詢的前提是geom列已存儲在投影坐標(biāo)系中單位是米。正常建筑多邊形的周長面積比在 0.1 到 0.5 之間比值大于 1.5 的基本可以判定為狹長變形。查詢結(jié)果只是候選清單最終采用何種修復(fù)策略要人工判斷有些狹長多邊形是真實的連排建筑刪除會造成數(shù)據(jù)缺失只有確認(rèn)是噪聲或重復(fù)邊界才用緩沖溶解處理。修復(fù)時記錄操作日志便于回溯。3.3 面積計算與平差字段計算的重點參數(shù)面積計算是建筑輪廓數(shù)據(jù)的基礎(chǔ)操作但廈門建筑數(shù)據(jù)的面積統(tǒng)計與規(guī)劃口徑的差異經(jīng)常讓人措手不及。遙感影像解譯出的輪廓面積通常大于測繪成果因為影像把屋頂附屬設(shè)施也包含進去了。計算面積之前必須確認(rèn)投影坐標(biāo)系。廈門適合用 CGCS2000 三度分帶高斯-克呂格投影中央經(jīng)線 117 度或 120 度對應(yīng) EPSG:4547 或 EPSG:4548。用 Web Mercator 做小范圍面積統(tǒng)計雖然方便但會引入 5% 到 15% 的面積誤差精度敏感場景不能用。QGIS 字段計算器里常見寫法是$area它按圖層當(dāng)前坐標(biāo)系計算面積。如果圖層還是經(jīng)緯度坐標(biāo)$area返回的結(jié)果單位不是平方米結(jié)果會完全不可用。正確流程是先把圖層重投影到投影坐標(biāo)系新建字段 double 類型用$area填充然后設(shè)置顯示精度最后在字段元數(shù)據(jù)里加上單位說明。面積平差工具的原理是把控制總量按各建筑面積的權(quán)重分?jǐn)偛铑~適用于地塊總面積已知、建筑輪廓總面積偏小的場景。手動做平差時先算差值再按比例分配到每個建筑最后驗證加和與總量一致。4. 數(shù)據(jù)對不齊的根因與對齊方案4.1 對不齊的三種典型場景“GIS 數(shù)據(jù)對不齊”在廈門建筑輪廓數(shù)據(jù)處理中反復(fù)出現(xiàn)我歸納為三種典型場景。第一種是坐標(biāo)系不一致建筑矢量是 WGS84底圖是 GCJ-02整體偏移一致偏移量在一個城市范圍內(nèi)基本恒定。第二種是投影帶選錯建筑輪廓用中央經(jīng)線 117 度的三度分帶底圖瓦片用 Web Mercator 拼接跨區(qū)域聯(lián)動分析時數(shù)據(jù)各偏各的這種錯誤在廈門這種東西跨度不大的城市里不明顯但一旦把數(shù)據(jù)擴展到福建省范圍問題立刻暴露。第三種是手繪過程中的縮放比例不統(tǒng)一操作者時而 1:500 描邊時而 1:2000 描邊導(dǎo)致同一街道兩側(cè)建筑的相對位置發(fā)生偏差。第三種最麻煩沒有自動工具能完整修復(fù)只能靠控制點校正或局部重繪。4.2 對齊實操檢查、捕捉與手動調(diào)整對齊第一步是疊加底圖檢查。在 QGIS 中先把建筑輪廓圖層放在最上層設(shè)置 50% 透明度底下加載天地圖影像底圖放大到 1:500 逐個區(qū)域目視檢查。如果整體偏移一致可以用“矢量變換”里的“平移”工具輸入統(tǒng)一偏移量一次搞定。如果局部偏移不一致就需要編輯模式配合頂點編輯器逐個處理。在 ArcGIS Pro 里有一個更省力氣的技巧啟用編輯功能在捕捉設(shè)置里只勾選“頂點捕捉”容差設(shè)為 10 像素然后拖動建筑要素使邊線與影像邊緣貼合。QGIS 的操作路徑類似項目設(shè)置 → 捕捉 → 開啟“頂點捕捉”關(guān)閉“中點捕捉”和“交點捕捉”避免頂點被吸到錯誤位置。對廈門老城區(qū)那種建筑互相擠壓的區(qū)域如果整批建筑都偏移同一個方向且大小一致用控制點做仿射變換是最快路徑選 4 到 6 個建筑角點作為控制點均勻覆蓋研究區(qū)范圍用“地理配準(zhǔn)”工具做一次仿射糾正??刂泣c越分散糾正效果越好如果控制點集中在局部離控制點遠的區(qū)域殘余誤差會很大這個只能靠經(jīng)驗控制沒有捷徑。5. 避坑處理廈門建筑輪廓數(shù)據(jù)的 5 個常見翻車點5.1 面積統(tǒng)計結(jié)果與規(guī)劃數(shù)據(jù)差十萬八千里現(xiàn)象同一批建筑輪廓數(shù)據(jù)在 QGIS 里算出的總面積比規(guī)劃局公開數(shù)據(jù)少一大截。原因一是投影坐標(biāo)系選了 Web Mercator面積被放大或縮小二是 GIS 里的面積是屋頂投影面積不是建筑樓層面積之和多層建筑的真實建筑面積需要乘以層數(shù)。解決先確認(rèn)投影坐標(biāo)系為 CGCS2000 三度分帶再給屬性表增加“樓層數(shù)”字段用“屋頂面積乘以樓層數(shù)”得到估算建筑總面積最后與規(guī)劃數(shù)據(jù)對比。沒有樓層數(shù)字段就不要對外宣稱自己在做建筑面積統(tǒng)計這是專業(yè)底線。5.2 文件傳給別人后坐標(biāo)系丟失建筑跑到海里現(xiàn)象通過微信或郵件發(fā)送 shp 給同事對方打開后建筑要素全部偏移或者直接消失在海域里。原因Shapefile 三件套缺失。只發(fā)了.shp主文件沒有dbf、shx、prj對方打開時空坐標(biāo)系信息丟失軟件默認(rèn)按 WGS84 經(jīng)緯度解釋投影坐標(biāo)廈門建筑自然跑到海里。解決養(yǎng)成壓縮整個文件夾再發(fā)送的習(xí)慣更穩(wěn)妥的是直接轉(zhuǎn)成 GeoPackage 或 GeoJSON單文件攜帶坐標(biāo)系信息再發(fā)給對方。這個坑的翻車率在從業(yè)者中也居高不下因為很多人只記得三件套忘了prj也是其中一件。5.3 捕捉不生效手動對齊時頂點亂跑現(xiàn)象在編輯模式下拖動建筑頂點頂點不停跳動無法對準(zhǔn)影像底圖的建筑邊緣。原因自動捕捉被開啟但未設(shè)置正確的捕捉容差或者捕捉模式里同時勾選了頂點、中點、交點頂點被吸到了底圖上的道路交叉點。解決在 QGIS 項目設(shè)置中關(guān)閉除“頂點捕捉”之外的所有捕捉方式容差設(shè)置為 10 像素到 15 像素之間并放大到 1:500 再操作。ArcGIS Pro 用戶注意把“捕捉提示”也打開否則你根本看不到當(dāng)前捕捉到了哪個對象完全是盲操作。5.4 生成三維模型時建筑面出現(xiàn)破洞現(xiàn)象把建筑輪廓拉伸成三維體塊后屋頂面出現(xiàn)破洞或扭曲面片。原因二維顯示下自相交或公共邊重復(fù)的幾何問題在三維拉伸后拓?fù)淙毕荼环糯?。解決在導(dǎo)出三維模型前用“修復(fù)幾何”工具批量處理一次。如果仍有殘留問題對建筑多邊形執(zhí)行 0.01 米的正緩沖用緩沖后的面導(dǎo)出。這個技巧本質(zhì)上是通過微小平移重建拓?fù)潢P(guān)系不會對面積統(tǒng)計產(chǎn)生可感知的影響但能解決三維渲染時的破面問題。5.5 天地圖底圖在 GIS Pro 和 QGIS 里加載不出來現(xiàn)象在 GIS Pro 或 QGIS 中加載天地圖影像 XYZ 服務(wù)顯示空白或紅叉。原因天地圖瓦片服務(wù)地址需要附加 token 參數(shù)或者服務(wù)地址的格式與軟件內(nèi)置的加載模板不匹配。解決先在一個瀏覽器新標(biāo)簽頁里直接訪問瓦片服務(wù)地址確認(rèn)返回的是圖片然后把帶 token 的完整地址粘貼到 GIS 軟件里。QGIS 中還要確認(rèn)“XYZ Tiles”的 URL 模板使用{x}/{y}/{z}占位符而不是其他格式。加載不出來的問題有時是網(wǎng)絡(luò)緩存造成的清除軟件緩存后重試一次玄學(xué)但有效。建議在項目開始前就完成底圖加載測試不要等到畫了半個城區(qū)才發(fā)現(xiàn)底圖是空的。6. 從輪廓到?jīng)Q策建筑面積、覆蓋率與成果導(dǎo)出6.1 一鍵計算建筑覆蓋率建筑輪廓數(shù)據(jù)最直接的應(yīng)用是計算建筑覆蓋率。在 QGIS 里先把建筑矢量面柵格化柵格菜單 → 轉(zhuǎn)換 → 柵格化像元大小 2 米值設(shè)為 1背景值 0得到一個 2 米分辨率的二值柵格。然后用“聚合”工具重采樣到 200 米分辨率聚合方式選“平均值”結(jié)果柵格里每一個像元的值就是從 0 到 1 的建筑覆蓋率。再把結(jié)果用“柵格計算器”乘以 100得到百分比。這里有一個容易犯的錯直接把二值柵格用“重采樣”做最近鄰賦值輸出就不是 0 就是 1完全失去覆蓋率意義。必須用聚合過程的平均值計算這是這個功能的核心。對廈門島內(nèi)這樣建筑密度差異極大的城市200 米格網(wǎng)基本能區(qū)分老城區(qū)高密度區(qū)與環(huán)島路沿線的低密度區(qū)做城市規(guī)劃密度分析足夠支撐決策。6.2 數(shù)據(jù)保存與分享shp、GeoJSON 與 gpkg 的選擇回答“GIS 文件怎么保存發(fā)送給別人”這個問題如果對端是 GIS 專業(yè)人員優(yōu)先給 GeoPackage一個.gpkg文件包含完整數(shù)據(jù)和坐標(biāo)系信息不再有 shp 三件套丟失的問題。如果數(shù)據(jù)要嵌入 Web 應(yīng)用或提交到開源項目中導(dǎo)出 GeoJSON 更合適字段名保留英文中文屬性值注意不要亂碼。ArcGIS Pro 用戶右鍵圖層 → 數(shù)據(jù) → 導(dǎo)出要素格式選擇 GeoPackage并把“壓縮為 zip”勾上這樣發(fā)到郵箱或網(wǎng)盤都方便。如果對方完全不使用 GIS 軟件同時導(dǎo)出一份 PDF 地圖和 CSV 屬性表這是工程交付中最受歡迎的做法比讓對方裝軟件看數(shù)據(jù)更省事。我個人的習(xí)慣是每次處理廈門建筑輪廓數(shù)據(jù)都會把參考影像的年份寫進文件名比如xiamen_buildings_2022_repair0925.geojson。這個習(xí)慣來自一次教訓(xùn)有一年處理廈門某片區(qū)的建筑數(shù)據(jù)時文件里混入了不同年份的影像底圖提取結(jié)果面積統(tǒng)計和現(xiàn)場核查完全對不上返工花了一整周。從那以后文件名后綴必帶影像年份和最后修改日期。建筑輪廓數(shù)據(jù)的時間屬性不在屬性表里而在你的記錄習(xí)慣里希望幫到你。本文還有配套的精品資源點擊獲取