用)
簡介洱海SHP文件是一套面向GIS操作與空間分析的底圖矢量數(shù)據(jù)適用于需要制作洱海地圖、統(tǒng)計(jì)水域面積、開展緩沖區(qū)分析或環(huán)境規(guī)劃研究的技術(shù)人員。壓縮包共31個(gè)文件整體約8.86MB除3個(gè)SHP主文件外還有配套的DBF屬性表、PRJ投影文件、SBN/SBX空間索引以及XML元數(shù)據(jù)并包含部分DEM柵格相關(guān)的ADF和Log記錄能夠支撐ArcGIS、QGIS等主流地理信息軟件的數(shù)據(jù)導(dǎo)入、圖層管理與空間查詢。已有231人學(xué)習(xí)下載。借助這套數(shù)據(jù)使用者可以快速獲得湖泊邊界、岸線等基礎(chǔ)地理要素用于科研制圖、城鄉(xiāng)規(guī)劃和生態(tài)保護(hù)分析。同時(shí)通過SHP多文件組成機(jī)制也能直觀理解矢量數(shù)據(jù)在幾何、屬性、索引和投影上的組織方式省去自行采集與配準(zhǔn)底圖的時(shí)間適合GIS初學(xué)者入門也為專業(yè)人員提供可靠的數(shù)據(jù)底圖。 做GIS這行手里沒幾份像樣的底圖很多活根本沒法開工。今天拿“洱海SHP文件”當(dāng)例子聊聊底圖怎么選、怎么處理、怎么用。為什么單挑洱海來說因?yàn)檫@份數(shù)據(jù)有特點(diǎn)湖體邊界完整、環(huán)湖有鄉(xiāng)鎮(zhèn)和村莊面、周圍還掛著水系和道路大小也合適——拿去練裁剪、練拓?fù)洹⒕毘鰣D都不至于因?yàn)閿?shù)據(jù)太大跑不動也不會因?yàn)橐靥賹W(xué)不到東西。最關(guān)鍵的是洱海是典型的高原湖泊邊界形狀不規(guī)則用來演示GIS里各種矢量操作比拿正方形地塊當(dāng)案例要真實(shí)得多。這篇文章適合誰剛接觸ArcGIS/QGIS、需要一份能反復(fù)折騰的面狀底圖練手的新人或者是正在做洱海相關(guān)規(guī)劃、環(huán)湖調(diào)查、生態(tài)監(jiān)測項(xiàng)目的從業(yè)者。我會把拿到SHP之后最常用的操作場景、最容易踩的坑、最煩人的報(bào)錯全都盤一遍照著做基本能少走一半彎路。1. 拿到洱海SHP后先別急著畫圖——底圖檢查是關(guān)鍵1.1 SHP文件不是“一張圖”而是一組文件很多新手第一次接觸SHP會下意識以為它就是一個(gè)文件。實(shí)際上SHP是一組配套文件的集合缺一個(gè)都可能出問題。最基礎(chǔ)的一家人是.shp幾何信息、.shx幾何索引、.dbf屬性表、.prj坐標(biāo)系信息。有的還會帶上.cpg字符編碼和.sbn/.sbx空間索引。這里我想重點(diǎn)提醒一下.prj文件。你拿到的洱海SHP如果缺了.prjArcGIS或者QGIS打開后要么提示“未知的空間參考”要么干脆默認(rèn)給你套一個(gè)WGS84。這種情況在ArcMap里看起來圖還能顯示但一旦你做面積計(jì)算、疊加分析、投影轉(zhuǎn)換結(jié)果就會偏得離譜。我遇到過一份洱海邊界數(shù)據(jù).prj丟了以后直接被識別成WGS84實(shí)際數(shù)據(jù)卻是CGCS2000 3度分帶的結(jié)果在ArcMap里和天地圖底圖對不上湖體整體偏移了大概兩百米。所以拿到SHP第一件事右鍵查看圖層屬性確認(rèn)坐標(biāo)系對不對再談后續(xù)操作。1.2 洱海作為底圖的典型應(yīng)用場景洱海SHP作為底圖能干的事其實(shí)很多。最常見的是這么幾類空間范圍控制用湖體邊界作為掩膜裁剪影像、提取流域范圍、限定分析區(qū)域。比如做洱海水質(zhì)反演要先按湖體邊界把遙感影像裁出來再算葉綠素濃度。制圖出圖洱海周邊有多個(gè)鄉(xiāng)鎮(zhèn)、村莊底圖疊加行政區(qū)、道路、水系后可以做成環(huán)湖巡測路線圖、污染源分布圖等。三維可視化把洱海邊界SHP轉(zhuǎn)成3DTiles在Cesium或圖新地球里加載配合DEM做三維場景適合做匯報(bào)演示。批處理練習(xí)SHP邊界自帶不規(guī)則形狀用來做“按要素批量裁剪影像”“數(shù)據(jù)驅(qū)動頁面分幅出圖”這類操作比用規(guī)則矩形練手真實(shí)得多。所以這份底圖的價(jià)值不在于“多一份數(shù)據(jù)”而在于它覆蓋了矢量數(shù)據(jù)從預(yù)處理到出圖的完整鏈路。下面我就按實(shí)際工作流的順序講講每一步怎么處理最省事。2. 底圖預(yù)處理坐標(biāo)系、字段、拓?fù)湟淮闻R2.1 坐標(biāo)系確認(rèn)與轉(zhuǎn)換別等出圖才發(fā)現(xiàn)偏了洱海SHP坐標(biāo)系常見的有WGS84和CGCS2000兩種細(xì)分還可能遇到UTM 47N帶或者高斯-克呂格3度帶。拿到數(shù)據(jù)后先通過ArcMap或QGIS查看原始坐標(biāo)系。如果你需要疊加在線底圖比如天地圖、影像圖建議統(tǒng)一轉(zhuǎn)成WGS84 Web MercatorEPSG:3857或者WGS84EPSG:4326如果你要做面積、距離的量算建議轉(zhuǎn)成CGCS2000的投影坐標(biāo)系。我之前做過一次洱海周邊面源污染分析拿到的底圖是CGCS2000 / 3-degree Gauss-Kruger zone 35也就是EPSG:4532之類的。當(dāng)時(shí)圖省事直接用WGS84的坐標(biāo)系算面積算出來的湖面面積比真實(shí)值小了將近0.3%看著不多但算入湖污染負(fù)荷時(shí)就差出不少。正確做法是在ArcToolbox里用【數(shù)據(jù)管理工具 - 投影和變換 - 要素 - 投影Project】做一次顯式轉(zhuǎn)換而不是直接右鍵圖層設(shè)置坐標(biāo)系。還要注意一點(diǎn)用【定義投影Define Projection】和【投影Project】是兩碼事。前者只是給數(shù)據(jù)“貼標(biāo)簽”不改變坐標(biāo)值后者才是真正把坐標(biāo)從一套系統(tǒng)換算到另一套系統(tǒng)。很多新手把定義投影當(dāng)成轉(zhuǎn)換用結(jié)果圖還是歪的。2.2 字段補(bǔ)全與編號順排洱海SHP如果包含多個(gè)面要素比如按湖區(qū)劃分的子區(qū)域、環(huán)湖鄉(xiāng)鎮(zhèn)在出圖或統(tǒng)計(jì)分析前最好先給屬性表補(bǔ)一個(gè)有序編號。這個(gè)操作在GIS里叫“編號順排”別看簡單做不好也麻煩。我常用的方法是在屬性表里新建一個(gè)長整型字段命名為FID_NO然后右鍵字段打開字段計(jì)算器選Python解析器輸入# 在字段計(jì)算器中使用Python def autoIncrement(): # 全局計(jì)數(shù)器變量從1開始 global rec rec 0 if rec not in globals() else rec rec 1 return rec # 調(diào)用 autoIncrement()這段代碼的原理是在Python腳本內(nèi)部維護(hù)一個(gè)全局計(jì)數(shù)器每處理一條記錄就加1給每條要素分配一個(gè)唯一序號。不過有個(gè)坑字段計(jì)算器在ArcMap里如果先選中了部分要素再計(jì)算計(jì)數(shù)器會只對選中要素生效導(dǎo)致序號重復(fù)。所以算之前務(wù)必清空選擇集。順帶說一句如果你想按特定空間順序編號比如從北到南給環(huán)湖鄉(xiāng)鎮(zhèn)編號那得先按Y坐標(biāo)排序再計(jì)算。操作方法是先用【Sort】工具按SHAPEY降序排列生成新數(shù)據(jù)再跑上面的自動編號腳本。2.3 拓?fù)湫迯?fù)與尖銳角處理矢量數(shù)據(jù)質(zhì)量的生命線洱海這種天然湖泊邊界經(jīng)常會有兩類問題一是面要素之間有微小重疊或縫隙二是邊界折點(diǎn)出現(xiàn)尖銳角。這兩類問題不解決做拓?fù)浞治?、面積統(tǒng)計(jì)、疊加裁剪時(shí)都會冒出莫名其妙的錯誤。先講拓?fù)?。如果洱海SHP里同一個(gè)圖層有多個(gè)相鄰面要素建拓?fù)鋾r(shí)我一般會設(shè)三條規(guī)則不能重疊Must Not Overlap相鄰面不能有重疊區(qū)域。不能有縫隙Must Not Have Gaps所有面拼起來必須鋪滿整個(gè)范圍。邊界不能自相交Must Not Self-Intersect單個(gè)面內(nèi)部不能有交叉。在ArcGIS里創(chuàng)建拓?fù)涞穆窂绞恰続rcToolbox - 數(shù)據(jù)管理工具 - 拓?fù)?- 創(chuàng)建拓?fù)洹俊=ㄍ暌院笥谩就負(fù)?- 拓?fù)渚庉嫻ぞ?- 修復(fù)拓?fù)溴e誤工具】去修。修的時(shí)候有一點(diǎn)容易忽略如果重疊面積很小小于容差或面積閾值直接合并到相鄰面就行不用太較真但如果重疊面積明顯說明原始數(shù)據(jù)本身有問題建議回到源頭檢查。再講尖銳角。尖銳角沒有一個(gè)絕對統(tǒng)一的“標(biāo)準(zhǔn)角度”行業(yè)內(nèi)一般把小于10度、甚至15度以內(nèi)的內(nèi)角視為尖銳角。洱海湖岸曲折自然形成很多銳角是正常的但如果邊界在數(shù)據(jù)處理時(shí)產(chǎn)生了異常的、鋸齒狀的尖角會影響后續(xù)簡化、緩沖、三維建模的效果。查尖銳角比較實(shí)用的方法是用【要素折點(diǎn)轉(zhuǎn)點(diǎn)Feature Vertices To Points】把邊界折點(diǎn)轉(zhuǎn)成點(diǎn)然后添加X、Y坐標(biāo)字段再用字段計(jì)算器算出每個(gè)折點(diǎn)的內(nèi)角大小。內(nèi)角計(jì)算的Python表達(dá)式比較長我一般習(xí)慣寫成工具腳本# 計(jì)算相鄰三個(gè)折點(diǎn)構(gòu)成的內(nèi)角度 import math # 假設(shè)有字段 X_pre, Y_pre, X_next, Y_next, X_cur, Y_cur dx1 !X_pre! - !X_cur! dy1 !Y_pre! - !Y_cur! dx2 !X_next! - !X_cur! dy2 !Y_next! - !Y_cur! # 點(diǎn)積 dot dx1*dx2 dy1*dy2 # 模長 len1 math.hypot(dx1, dy1) len2 math.hypot(dx2, dy2) cos_angle dot / (len1 * len2) angle_deg math.degrees(math.acos(max(-1.0, min(1.0, cos_angle)))) # 內(nèi)角若大于180度則取360減這里是針對外角還是內(nèi)角需按拓?fù)浞较蚨▽?shí)測下來關(guān)鍵不在于這個(gè)角度算得多精確而在于你要先建立一個(gè)“什么角需要處理”的判斷標(biāo)準(zhǔn)。我個(gè)人的經(jīng)驗(yàn)是小于10度的角如果出現(xiàn)在原本應(yīng)該平滑的湖岸線上大概率是數(shù)據(jù)噪聲小于5度的角幾乎肯定是錯誤折點(diǎn)直接通過【簡化線Simplify Line】或手動編輯把多余折點(diǎn)刪掉即可。另外推薦一個(gè)判斷矢量面質(zhì)量的常用指標(biāo)——狹長比Compactness公式是4π×面積÷周長2。這個(gè)值越接近1面越接近圓低于0.2基本可以認(rèn)定這個(gè)面過于狹長不適合做緩沖區(qū)分析。洱海整體狹長比大概在0.2到0.3之間這是湖泊地物本身的特征不是數(shù)據(jù)錯誤處理時(shí)不需要強(qiáng)行改。3. 一個(gè)底圖的下游應(yīng)用從裁剪影像到批量出圖3.1 按洱海邊界批量裁剪影像別再用“手動逐張裁”做遙感相關(guān)項(xiàng)目時(shí)最常見的需求是把多景影像按洱海邊界批量裁剪出來。手動一景一景裁不僅耗時(shí)而且很容易在設(shè)置輸出范圍、像元大小時(shí)出錯。正確的姿勢是借用ArcGIS的模型構(gòu)建器ModelBuilder或者批處理。我這里說一個(gè)最簡單可行的批處理方案在ArcToolbox里找到【數(shù)據(jù)管理工具 - 柵格 - 柵格處理 - 裁剪Clip】。輸入柵格選擇你要裁剪的影像輸出范圍選擇“洱海SHP”圖層勾選“使用要素裁剪Use Input Features for Clipping Geometry”。右鍵工具選擇“批處理”把需要裁剪的10景、20景影像一次性填進(jìn)去點(diǎn)擊確定。如果你有幾十上百景影像批處理也不太夠用那就上模型構(gòu)建器把【裁剪】工具拖進(jìn)畫布輸入柵格設(shè)為“參數(shù)”循環(huán)用【迭代柵格數(shù)據(jù)Iterate Rasters】逐個(gè)喂給裁剪工具。這樣構(gòu)建出來的模型放哪個(gè)電腦上都能跑配合ArcGIS自帶的Python環(huán)境還不是美滋滋。這里有幾個(gè)細(xì)節(jié)會影響裁剪結(jié)果必須注意像元大小默認(rèn)會讀取輸入影像的像元大小但如果你同時(shí)輸入多個(gè)不同分辨率的影像建議在環(huán)境設(shè)置里顯式指定像元大小避免輸出結(jié)果分辨率不一致。NoData值裁剪后如果影像四周出現(xiàn)黑邊多半是NoData值沒設(shè)置好。在環(huán)境 - 柵格分析 - NoData值里填上合適值或者用【復(fù)制柵格】工具先統(tǒng)一NoData。輸出坐標(biāo)裁剪結(jié)果的坐標(biāo)系默認(rèn)跟隨輸入柵格如果你希望結(jié)果和洱海SHP坐標(biāo)系一致在環(huán)境中設(shè)置“輸出坐標(biāo)系”為SHP文件的坐標(biāo)系。3.2 KML轉(zhuǎn)SHP、SHP轉(zhuǎn)TXT數(shù)據(jù)交換的萬能路徑做規(guī)劃或者和外部團(tuán)隊(duì)協(xié)作時(shí)KML/KMZ、TXT、Excel、GeoJSON這些格式來回倒騰是常態(tài)。熱搜詞里同時(shí)出現(xiàn)了“kml轉(zhuǎn)shp”“geojson轉(zhuǎn)換成shp文件格式工具”“shp轉(zhuǎn)txt插件國土報(bào)備”可見這是高頻需求。先說KML轉(zhuǎn)SHP。在ArcGIS Pro里最簡單直接用【轉(zhuǎn)換工具 - 從KML - KML轉(zhuǎn)圖層KML To Layer】。轉(zhuǎn)換結(jié)果是一個(gè)圖層組里面包含了面、線、點(diǎn)三類要素轉(zhuǎn)完以后右鍵圖層數(shù)據(jù) - 導(dǎo)出要素選SHP格式即可。QGIS用戶更簡單直接把KML文件拖進(jìn)圖層窗口再右鍵導(dǎo)出為SHP就行。再講SHP轉(zhuǎn)TXT。這個(gè)需求大多來自國土報(bào)備系統(tǒng)——很多地方要求上報(bào)地塊時(shí)提供坐標(biāo)串文本格式一般是地塊編號, 點(diǎn)序號, X, Y或者多邊形邊界坐標(biāo)串。手動復(fù)制坐標(biāo)肯定不現(xiàn)實(shí)推薦兩種方式方式一用ArcGIS的【添加XY坐標(biāo)Add XY Coordinates】給要素折點(diǎn)添加坐標(biāo)字段再通過屬性表導(dǎo)出為dBase表最后在Excel里加工成TXT。方式二寫個(gè)Python腳本用arcpy.da.SearchCursor遍歷要素幾何把每個(gè)環(huán)的坐標(biāo)點(diǎn)按固定格式寫進(jìn)文本文件。核心代碼大概長這樣import arcpy fc rE:\data\erhai.shp out_txt rE:\data\erhai_coords.txt with open(out_txt, w) as f: with arcpy.da.SearchCursor(fc, [FID, SHAPE]) as cursor: for fid, shape in cursor: for part in shape: for pnt in part: f.write(f{fid},{pnt.X:.3f},{pnt.Y:.3f}\n)這段代碼的核心邏輯是遍歷每個(gè)面要素的每個(gè)環(huán)Part再遍歷環(huán)上的每個(gè)點(diǎn)按FID, X, Y的格式逐行輸出。SHAPE是ArcPy的幾何對象令牌for part in shape之所以要循環(huán)是因?yàn)橐粋€(gè)多部件面里可能有多個(gè)環(huán)直接取第一個(gè)環(huán)會把島嶼邊界漏掉。3.3 數(shù)據(jù)驅(qū)動頁面批量出圖環(huán)湖專題圖一站式生成洱海環(huán)湖范圍大一張圖放不下所有細(xì)節(jié)所以經(jīng)常要做“分幅出圖”。ArcGIS的【數(shù)據(jù)驅(qū)動頁面Data Driven Pages】就是為這個(gè)場景設(shè)計(jì)的。原理很簡單找一個(gè)索引圖層讓每一頁圖自動定位到索引要素的范圍內(nèi)。我在做洱海環(huán)湖巡查圖時(shí)索引圖層用的是1公里×1公里的格網(wǎng)。操作步驟用【數(shù)據(jù)管理工具 - 采樣 - 創(chuàng)建漁網(wǎng)Create Fishnet】生成覆蓋洱海范圍的格網(wǎng)注意設(shè)置“創(chuàng)建漁網(wǎng)”時(shí)把幾何類型選為POLYGON并勾選“創(chuàng)建標(biāo)注點(diǎn)”。在布局視圖里右鍵頁面 - 頁面設(shè)置 - 啟用數(shù)據(jù)驅(qū)動頁面索引圖層選這個(gè)格網(wǎng)。名稱字段選格網(wǎng)編號字段排序字段也選編號這樣出圖順序就是按行列來的。設(shè)置好比例尺、指北針、圖例后點(diǎn)擊導(dǎo)出PDF就能一鍵生成幾十頁分幅圖。實(shí)測下來數(shù)據(jù)驅(qū)動頁面最大的坑在于“要素范圍”和“輸出比例尺”的匹配如果格網(wǎng)太小單頁顯示內(nèi)容太碎如果格網(wǎng)太大又看不清細(xì)節(jié)。我一般建議先輸出幾種格網(wǎng)尺寸的PDF對比一下再定最終方案。3.4 SHP轉(zhuǎn)3DTiles把洱海底圖搬進(jìn)三維場景“shp轉(zhuǎn)3dtiles”這個(gè)需求最近咨詢的人特別多。SHP本質(zhì)是矢量3DTiles是三維瓦片兩者不是直接互轉(zhuǎn)的關(guān)系中間必須經(jīng)過“二維轉(zhuǎn)三維”這一步。思路是把洱海面轉(zhuǎn)成帶高度的三維模型或者直接把邊界線做拉伸Extrude生成體塊再切片成3DTiles。我現(xiàn)在常用的流程是在ArcGIS Pro里給洱海SHP添加一個(gè)高度字段比如湖面海拔約1970米。用【圖層屬性 - 拉伸 - 拉伸類型基高 - 字段高程字段】把面拉伸成立體塊。導(dǎo)出為GLB格式ArcGIS Pro支持直接導(dǎo)出3D瓦片。再用CesiumLab或圖新地球LocaSpace Viewer把GLB或原始SHP轉(zhuǎn)成3DTiles加載到Cesium中。如果你不想折騰ArcGIS Pro直接用圖新地球加載SHP也可以一鍵白模生成然后導(dǎo)出3DTiles。不過這種方式可調(diào)參數(shù)少適合快速看效果不適合做精細(xì)控制。測試時(shí)留意一下洱海湖面是平整水面不是建筑在三維場景里做“拉伸”后視覺上會變成一個(gè)凸起的圓柱體如果只是做湖泊邊界展示直接把SHP作為貼地線劃在DEM上更符合實(shí)際。4. 用洱海底圖時(shí)我踩過的坑和排查清單4.1 核密度分析報(bào)錯010024執(zhí)行(KernelDensity)失敗這個(gè)報(bào)錯我見過太多次了關(guān)鍵詞是“轉(zhuǎn)換時(shí)出錯”。網(wǎng)上五花八門的解釋都有但根據(jù)我的排查經(jīng)驗(yàn)90%的情況出在環(huán)境和輸出路徑上。常見原因有輸出路徑包含中文或者空格ArcGIS的核密度工具在某些版本里對中文路徑支持不好。環(huán)境設(shè)置里的“臨時(shí)工作空間”指向了一個(gè)不存在的目錄。輸入的要素類有Z值或M值導(dǎo)致轉(zhuǎn)換時(shí)坐標(biāo)系丟失。處理范圍設(shè)置過大加上像元大小太小計(jì)算量爆炸工具直接中斷。排查方法很簡單先在環(huán)境設(shè)置里把“當(dāng)前工作空間”和“臨時(shí)工作空間”都設(shè)成純英文路徑的文件夾比如E:\gis_temp再重新跑一次。如果還報(bào)錯把輸出像元大小從默認(rèn)值改大一些比如從30米改成100米跑通后再逐步調(diào)小。這個(gè)方法我實(shí)測下來對于大多數(shù)“核密度突然失敗”的問題都能解決。4.2 ArcMap添加底圖后地圖沒顯示熱搜詞里有“arcmap添加底圖 底圖沒出現(xiàn)”這個(gè)問題也很經(jīng)典。ArcMap里的“底圖”來自在線服務(wù)如果沒顯示原因基本有三個(gè)網(wǎng)絡(luò)問題在線底圖服務(wù)比如ArcGIS Online或天地圖在你當(dāng)前網(wǎng)絡(luò)環(huán)境下無法訪問。坐標(biāo)系問題底圖默認(rèn)是Web Mercator如果數(shù)據(jù)框坐標(biāo)系被設(shè)置成了別的投影底圖可能會被投影得特別小或者顯示到視圖外。緩存問題底圖加載過一次后ArcMap會緩存切片緩存損壞會導(dǎo)致不顯示。我的處理順序是先調(diào)出“目錄”面板展開“GIS服務(wù)器”試著預(yù)覽一下底圖服務(wù)能不能連通如果能連通再在圖層屬性里把“緩存”改成“每次從服務(wù)器請求重新加載”。最后再檢查數(shù)據(jù)框坐標(biāo)系右鍵圖層 - 屬性 - 坐標(biāo)系改成WGS84 Web Mercator刷新一下。90%的底圖不顯示問題都能靠這三步解決。4.3 License服務(wù)啟動失敗ArcGIS Desktop或者ArcGIS Pro的許可證服務(wù)啟動不了日常開發(fā)里也常遇到。這個(gè)問題分兩層一是License Manager許可管理器本身沒啟動二是軟件和許可服務(wù)器之間通信不上。先看系統(tǒng)服務(wù)里“ArcGIS License Manager”的狀態(tài)如果在“已停止”狀態(tài)右鍵啟動。如果啟動失敗多半是端口占用或服務(wù)依賴問題。ArcGIS許可服務(wù)默認(rèn)端口是27000如果被占用可以在License Manager Administrator里改端口并在客戶端軟件里重新指向新端口。還有一類情況是安裝了新版本ArcGIS后舊版許可服務(wù)沒卸載干凈導(dǎo)致服務(wù)啟動時(shí)讀到了損壞的許可文件。我的處理方式是先備份ARCGIS\License10.x\arcgis\licman\下的許可文件再停用服務(wù)刪除service.txt里多余內(nèi)容重新啟動。這個(gè)過程不復(fù)雜但每一步都要仔細(xì)尤其是別把許可文件刪了才想起忘了備份。4.4 同一圖層兩個(gè)面要素重疊怎么快速找出來很多人在做矢量數(shù)據(jù)整理時(shí)會遇到“同一圖層兩個(gè)面要素重疊”的情況特別是從不同來源拼湊出來的洱海邊界數(shù)據(jù)接邊處特別容易重。ArcGIS里快速查找重疊面的方式是用【分析工具 - 疊加分析 - 相交Intersect】把圖層自己和自己相交然后篩選出面積大于0的記錄這些記錄就是重疊區(qū)域。如果只是臨時(shí)檢查還可以用工具欄上的“選擇 - 按位置選擇”源圖層選自己目標(biāo)圖層也選自己方法選“與源圖層要素相交”這樣能選中所有互相重疊的要素再人工檢查。不過這個(gè)方法對大數(shù)據(jù)量會卡建議先對圖層做一次融合Dissolve再查重疊效率高很多。4.5 屬性表里怎么篩出相同字段項(xiàng)想快速看看洱海SHP屬性表里某一列有沒有重復(fù)值不用寫SQL用【屬性表 - 字段右鍵 - 統(tǒng)計(jì)】就能看唯一值個(gè)數(shù)。如果想篩選出所有重復(fù)項(xiàng)可以把字段按“升序”或“降序”排序人工掃一眼相鄰行是否有相同的更嚴(yán)謹(jǐn)?shù)淖龇ㄊ怯谩鞍磳傩赃x擇”SQL語句寫字段名 IN (SELECT 字段名 FROM 圖層 GROUP BY 字段名 HAVING COUNT(*) 1)這條SQL的核心邏輯是先按字段分組統(tǒng)計(jì)每個(gè)值出現(xiàn)的次數(shù)只保留出現(xiàn)次數(shù)大于1的值再把這些值對應(yīng)的所有記錄都選出來。不過要注意ArcMap的查詢引擎對子查詢支持有限這條語句在ArcGIS Pro里可以穩(wěn)定運(yùn)行在ArcMap 10.x里偶爾會報(bào)錯不行就用Excel處理屬性表更快。最后分享一個(gè)我的操作習(xí)慣做了這么多年GIS我最深的體會是底圖數(shù)據(jù)本身并不復(fù)雜真正拉開效率差距的是拿到數(shù)據(jù)后有沒有一套固定的“檢查—預(yù)處理—應(yīng)用”流程。我現(xiàn)在拿到任何SHP底圖第一件事永遠(yuǎn)是查坐標(biāo)系、查字段結(jié)構(gòu)、查拓?fù)溴e誤這三步做完再談其他。洱海SHP作為練習(xí)數(shù)據(jù)恰恰能把這三步都練到位坐標(biāo)系要確認(rèn)、字段要補(bǔ)全、拓?fù)湟迯?fù)后面再做裁剪影像、數(shù)據(jù)驅(qū)動出圖、KML轉(zhuǎn)換基本上就是順手的事。另外還建議你把常用的模型構(gòu)建器模板和Python腳本存成一個(gè)專屬工具箱下次再遇到同類項(xiàng)目直接拖進(jìn)來跑就行。工具鏈?zhǔn)炀毩隧?xiàng)目就不容易翻車。本文還有配套的精品資源點(diǎn)擊獲取