高程標(biāo)準(zhǔn)地圖底圖模板:SHP/TIF/MXD一體化GIS出圖指南)
簡(jiǎn)介面向地理研究、教育教學(xué)與區(qū)域規(guī)劃等場(chǎng)景這份中國(guó)高程標(biāo)準(zhǔn)地圖數(shù)據(jù)集整合了全國(guó)高分辨率高程TIF、全球矢量SHP、全國(guó)多級(jí)行政區(qū)劃SHP、南海諸島SHP及標(biāo)準(zhǔn)成圖MXD模板可滿足從精細(xì)化地形分析到跨區(qū)域?qū)Ρ取⒛虾n}制圖的完整需求。壓縮包內(nèi)含71個(gè)文件主要涵蓋TIF高程?hào)鸥?、SHP矢量要素、MXD工程模板以及配套的PRJ投影、DBF屬性表等輔助文件合計(jì)約190.68MB結(jié)構(gòu)清晰便于直接調(diào)用。目前已有744人學(xué)習(xí)瀏覽適用于需要快速構(gòu)建中國(guó)高程專題圖或進(jìn)行地理空間分析的GIS使用者。借助預(yù)設(shè)的圖例、比例尺和方向指示用戶可基于MXD模板直接生成規(guī)范地圖同時(shí)結(jié)合全球行政邊界與九段線數(shù)據(jù)為國(guó)際對(duì)比和南海區(qū)域展示提供可靠底圖是一套兼顧數(shù)據(jù)完整性與制圖效率的實(shí)用地理資源。1. “中國(guó)高程標(biāo)準(zhǔn)地圖”不是給你下載是給你少踩一遍底圖的坑很多人第一次做GIS項(xiàng)目不是倒在模型精度上而是倒在最基礎(chǔ)的“底圖不統(tǒng)一”上省界SHP下載下來(lái)投影五花八門(mén)高程TIF只當(dāng)普通影像在看南海諸島在圖上幾乎永遠(yuǎn)是空缺最后要交圖時(shí)才發(fā)現(xiàn)版式還得從頭排。所謂“中國(guó)高程標(biāo)準(zhǔn)地圖”這套數(shù)據(jù)是把全球SHP、全國(guó)行政區(qū)劃SHP、南海諸島SHP、全國(guó)高程TIF和標(biāo)準(zhǔn)出圖MXD打包成一套可直接開(kāi)工的底圖模板。它解決的是坐標(biāo)系不統(tǒng)一、要素不完整、出圖樣式?jīng)]有基準(zhǔn)這三個(gè)最耽擱事的點(diǎn)。拿到手以后你只需要往工程里加業(yè)務(wù)圖層不必從頭為了底圖消耗工期。適合剛?cè)腴T(mén)ArcGIS的從業(yè)者也適合每個(gè)項(xiàng)目都要重復(fù)配置底圖的老手。2. 先拆包SHP、TIF、MXD各自是什么為什么要湊成一套標(biāo)題里列出的幾種格式不是隨意堆在一起。SHP管邊界矢量TIF管地表形態(tài)MXD管成圖樣式三者各司其職缺一個(gè)后面的出圖流程就會(huì)多出不少手工作業(yè)。先弄清楚每個(gè)文件的本質(zhì)再談怎么用。2.1 SHP不是“一個(gè)文件”從dwg轉(zhuǎn)shp到shp轉(zhuǎn)txt都要知道的事SHP的全稱是Shapefile1998年由ESRI公開(kāi)的矢量數(shù)據(jù)交換格式。它最大的特點(diǎn)是“多文件組成”而不是單文件最少包含三個(gè).shp保存幾何坐標(biāo).shx保存幾何索引.dbf保存屬性表。工程里經(jīng)常出現(xiàn)只拷貝了.shp換臺(tái)電腦打開(kāi)后圖斑全部消失的情況就是因?yàn)?shx和.dbf沒(méi)有一起拷貝。比這三個(gè)文件更重要的是.prj和.cpg.prj寫(xiě)坐標(biāo)系.cpg寫(xiě)字符編碼。缺少.prj時(shí)ArcMap會(huì)把它當(dāng)未知坐標(biāo)系加載當(dāng)前數(shù)據(jù)框如果是WGS84它就會(huì)被拉到經(jīng)緯度零點(diǎn)附近和行政邊界完全錯(cuò)開(kāi)。所以拿到任何SHP數(shù)據(jù)第一件事是看同一目錄里有沒(méi)有完整的.shp、.shx、.dbf、.prj四個(gè)文件這是最基本的數(shù)據(jù)體檢。再說(shuō)一個(gè)實(shí)操中非常高頻的轉(zhuǎn)換需求dwg轉(zhuǎn)shp。很多規(guī)劃、地籍和交通設(shè)計(jì)的原始資料還在CAD里而GIS項(xiàng)目要求把DWG要素導(dǎo)入到SHP中才能做空間分析。我用過(guò)ArcMap快速導(dǎo)入和FME兩種路線翻車(chē)點(diǎn)大體相同。第一CAD里的多段線轉(zhuǎn)成SHP后往往不閉合后續(xù)算面積時(shí)要么用“面轉(zhuǎn)線”結(jié)果相加要么直接算不出準(zhǔn)確面積口徑全亂。第二CAD屬性基本帶不過(guò)來(lái)實(shí)體在轉(zhuǎn)出前最好先在CAD里按圖層分好或給每個(gè)實(shí)體附加擴(kuò)展屬性否則到SHP里只剩幾何。想省事可以在CAD里先使用PEDIT把所有多段線批量閉合再把圖層按用途命名好然后一次性導(dǎo)入ArcMap。這套中國(guó)高程數(shù)據(jù)最常被拿來(lái)配合作業(yè)的場(chǎng)景之一就是和CAD原始圖疊合檢查地類變化。反向的shp轉(zhuǎn)txt也經(jīng)常遇到主要是給外部系統(tǒng)做數(shù)據(jù)交換。常見(jiàn)做法是用ogr2ogr導(dǎo)出CSV或者用Python的Fiona遍歷Feature把幾何轉(zhuǎn)成GeoJSON或WKT寫(xiě)到文本。注意Shapefile的字段名中文通常會(huì)被截?cái)鄬?dǎo)出前建議先在屬性表里把中文字段名改成英文別名。2.2 高程TIF不是圖片里面的像素值是海拔而不是顏色全國(guó)高程TIF本質(zhì)上是一個(gè)柵格DEM。表面上看后綴是.tif但它和平時(shí)處理的照片完全是兩類數(shù)據(jù)。照片記錄每個(gè)像素的RGB顏色而DEM記錄每個(gè)像素的地理位置和高度。ArcMap中打開(kāi)一個(gè)正確的DEM內(nèi)容列表里顯示的拉伸類型通常是“標(biāo)準(zhǔn)差”或“最小-最大值”而不是RGB復(fù)合。加載時(shí)如果發(fā)現(xiàn)它自動(dòng)按RGB顯示了或者看上去像一張灰白圖像十有八九是軟件沒(méi)識(shí)別出它是單波段浮點(diǎn)數(shù)據(jù)需要手動(dòng)去“符號(hào)系統(tǒng)”里改成拉伸渲染。判斷一個(gè)TIF是不是DEM可以在圖層屬性 → 源標(biāo)簽里看波段數(shù)和像素類型。DEM通常是單波段16位整型或32位浮點(diǎn)影像底圖通常是3個(gè)或4個(gè)波段8位無(wú)符號(hào)整型。全國(guó)性DEM常見(jiàn)的來(lái)源是SRTM、ASTER GDEM以及國(guó)內(nèi)測(cè)繪部門(mén)發(fā)布的30米或90米高程數(shù)據(jù)。分辨率決定了后面坡度、坡向的計(jì)算精度30米和90米在山區(qū)地形的細(xì)節(jié)差異明顯用的時(shí)候要根據(jù)項(xiàng)目需求選不要盲目追求高分辨率因?yàn)榇鎯?chǔ)和計(jì)算開(kāi)銷會(huì)翻幾倍。我處理省域范圍時(shí)一般用30米全國(guó)范圍或大流域分析用90米就夠。把全國(guó)范圍的90米數(shù)據(jù)硬換成30米柵格數(shù)量會(huì)讓后續(xù)任何操作都變得極其漫長(zhǎng)這是花錢(qián)買(mǎi)罪受。2.3 MXD是“成圖”的關(guān)鍵圖層關(guān)系和版面都是提前排好的MXD是ArcMap的工程文檔后綴.mxd。它本身不存數(shù)據(jù)只存圖層引用、符號(hào)化配置、數(shù)據(jù)框坐標(biāo)系、頁(yè)面布局和比例尺圖例。這套中國(guó)高程標(biāo)準(zhǔn)地圖里帶一個(gè)標(biāo)準(zhǔn)成圖MXD等于把制圖規(guī)范的常規(guī)動(dòng)作先跑了一遍行政區(qū)劃用什么邊界線寬、公里網(wǎng)怎么顯示、南海諸島的小圖框放在哪個(gè)位置、標(biāo)題欄和比例尺擺在哪都已經(jīng)落在版面上。你打開(kāi)MXD后的第一感覺(jué)應(yīng)該是“所見(jiàn)即所得”所有底圖要素加載完、符號(hào)化完可以直接往上加業(yè)務(wù)圖層調(diào)整順序就能出圖。但要注意MXD是ArcMap時(shí)代的工程格式ArcGIS Pro主推的是.aprx兩者不能直接相互打開(kāi)。如果你用的是ArcGIS Pro可以用工具箱里的“導(dǎo)入ArcMap文檔”工具或者干脆忽略MXD按它的版面布局手動(dòng)建一次APRX。從這套數(shù)據(jù)的角度說(shuō)MXD更大的價(jià)值在于提供布局參考它告訴你一張規(guī)范的中國(guó)地圖應(yīng)該包含哪些圖層、南海諸島小圖框在哪個(gè)位置、指北針和圖例默認(rèn)放在哪。即使你換了軟件照著這個(gè)版式把圖層組合出來(lái)出的圖紙也不會(huì)太走樣。3. 把四個(gè)核心數(shù)據(jù)放進(jìn)ArcMap加載順序、符號(hào)化和模板整理數(shù)據(jù)打包得再整齊也得在軟件里正確加載才能用。這里按我實(shí)際項(xiàng)目經(jīng)驗(yàn)給出最穩(wěn)妥的一遍操作。3.1 先加載全國(guó)行政SHP再疊加業(yè)務(wù)圖層南海諸島要單獨(dú)開(kāi)數(shù)據(jù)框加載順序不是隨手拖拽它決定圖層繪制優(yōu)先級(jí)和默認(rèn)范圍。我一般先加載“全國(guó)行政SHP”作為底圖讓數(shù)據(jù)框自動(dòng)縮放到全國(guó)范圍再疊加載“全球SHP”作為外圍參考最后裁入業(yè)務(wù)圖層。這樣打開(kāi)工程時(shí)默認(rèn)視野就是全國(guó)不會(huì)出現(xiàn)只顯示一個(gè)角落的情況。全國(guó)行政SHP通常按省、市、縣三級(jí)分圖層如果只要縣域邊界可以直接雙擊圖層打開(kāi)符號(hào)系統(tǒng) → 類別 → 唯一值把省名或縣名作為值展示快速切換行政級(jí)別??h域行政區(qū)劃邊界SHP是熱搜里很常見(jiàn)的詞實(shí)際上就是同一套數(shù)據(jù)的縣界圖層很多項(xiàng)目用它做抽樣、分級(jí)統(tǒng)計(jì)或生態(tài)區(qū)劃。南海諸島SHP在全中國(guó)范圍出圖時(shí)永遠(yuǎn)是小圖框里的獨(dú)立數(shù)據(jù)框也就是ArcMap里的“系列小圖框”。不要把它和大圖數(shù)據(jù)放在同一個(gè)數(shù)據(jù)框里否則出圖時(shí)南海諸島會(huì)出現(xiàn)在大陸旁邊或者被擠到圖幅外。正確做法是在布局視圖里安排一個(gè)專門(mén)的數(shù)據(jù)框把南海諸島SHP放進(jìn)去設(shè)好比例尺和投影再放到底圖的右下方或預(yù)留位置。類似的還要單獨(dú)檢查圖中其他敏感島嶼要素是否與行政SHP邊界對(duì)應(yīng)避免縮放時(shí)出現(xiàn)缺口。3.2 高程TIF的符號(hào)化分級(jí)數(shù)和色帶直接決定圖的觀感DEM加載進(jìn)來(lái)通常默認(rèn)是灰色漸變沒(méi)法直接用。要調(diào)成看得慣的地形效果右鍵圖層 → 屬性 → 符號(hào)系統(tǒng) → 分類選“分類”渲染分類數(shù)我一般設(shè)在6到8類之間。分類方法優(yōu)先選“自然間斷點(diǎn)分級(jí)”或“相等間隔”。自然間斷點(diǎn)更適合山區(qū)多、高程差異明顯的地形如果只是做一個(gè)全國(guó)范圍的示意底圖用相等間隔更平滑。色帶方面從低海拔到高海拔可以用從深綠到淺綠、黃、棕、白或者經(jīng)典的高程從藍(lán)到綠到棕到白。參數(shù)上要留意“類別數(shù)”和“顏色帶”之間的對(duì)應(yīng)關(guān)系類別太少會(huì)丟失地形層次太多地圖上會(huì)顯得斑駁。另一個(gè)常用的設(shè)置是“拉伸”對(duì)32位浮點(diǎn)DEM用標(biāo)準(zhǔn)差拉伸可以自動(dòng)避開(kāi)NoData和極值帶來(lái)的突兀色塊。全國(guó)高程TIF往往覆蓋范圍很大開(kāi)了柵格符號(hào)化后會(huì)卡頓。解決方式是先把“高質(zhì)量”模式關(guān)掉或者生成概覽視圖金字塔。在圖層屬性 → 高級(jí) → 構(gòu)建金字塔里可以設(shè)置重采樣方式一般選“雙線性”或“三次卷積”以保證顯示平滑。數(shù)據(jù)量太大時(shí)還可以用定義查詢按經(jīng)緯度范圍只顯示當(dāng)前視野但定義查詢對(duì)柵格不直接生效所以更常用的是構(gòu)建金字塔和概覽讓ArcMap自己抽稀顯示。3.3 把MXD當(dāng)成模板圖層組、命名和出圖樣式只做好一次標(biāo)準(zhǔn)MXD文件里通常會(huì)創(chuàng)建圖層組把“邊界”“高程”“注記”分開(kāi)管理。拿到手的MXD如果已按組排好我建議不要真接往里塞原始數(shù)據(jù)先復(fù)制出一個(gè)工作版本只改數(shù)據(jù)源路徑保留圖層組結(jié)構(gòu)。打開(kāi)MXD后如果底圖層顯示感嘆號(hào)說(shuō)明數(shù)據(jù)源路徑斷了右鍵圖層 → 數(shù)據(jù) → 設(shè)置數(shù)據(jù)源指向?qū)嶋H存放SHP或TIF的目錄即可。這里有個(gè)很容易被忽略的點(diǎn)MXD記錄的是絕對(duì)路徑換目錄后稍有不慎就是一連串感嘆號(hào)。我每次更換項(xiàng)目目錄都會(huì)用“數(shù)據(jù)驅(qū)動(dòng)頁(yè)面”重新定位一遍數(shù)據(jù)源或者干脆用Python腳本批量改圖層連接避免手工點(diǎn)十幾次。圖層命名也要遵循可讀性。我習(xí)慣的命名格式是“類型_區(qū)域_分辨率_日期”例如“SHP_全國(guó)_縣級(jí)_20240101”和“DEM_全國(guó)_30m_20240101”。這樣做的好處是兩個(gè)月之后再打開(kāi)工程不用逐個(gè)點(diǎn)圖層屬性就能知道數(shù)據(jù)口徑和時(shí)效。出圖樣式方面行政邊界線寬默認(rèn)用0.4磅到0.6磅縣級(jí)邊界比省級(jí)邊界細(xì)一檔公里網(wǎng)用“格網(wǎng)”功能生成間隔按比例尺設(shè)置比如1:100萬(wàn)時(shí)用1度格網(wǎng)。這套東西在MXD里都定義好你就不用再對(duì)著白紙去調(diào)參考線。4. 用面圖層裁剪DEM掩膜提取與柵格裁剪兩種做法的取舍高程TIF是全國(guó)范圍但實(shí)際項(xiàng)目幾乎都是拿到某個(gè)縣或某個(gè)流域去分析。這就一定要“用面圖層裁剪DEM”。ArcMap里主要有兩個(gè)工具按掩膜提取Extract by Mask和柵格裁剪Clip Raster。工具名稱相近得到的結(jié)果表面也類似但底層行為差別很大。4.1 按掩膜提取邊界精確但注意NoData的擴(kuò)展按掩膜提取在工具箱里的路徑是Spatial Analyst工具 → 提取分析 → 按掩膜提取。輸入柵格選全國(guó)DEM輸入掩膜數(shù)據(jù)選行政邊界面圖層輸出路徑自己寫(xiě)一個(gè)合理的柵格存儲(chǔ)位置。它的工作原理是以面實(shí)體的邊界為裁剪范圍將范圍以外的像元直接置為NoData范圍內(nèi)的像元保留原值。因此輸出的柵格范圍就是面的形狀。我平時(shí)給它加一個(gè)環(huán)境設(shè)置在“環(huán)境”選項(xiàng)卡里把“掩膜”設(shè)置為面圖層并勾選“將NoData指定為背景值”。這個(gè)勾選項(xiàng)會(huì)影響后續(xù)分析——如果你裁剪完直接做坡度或等高線NoData區(qū)域會(huì)擴(kuò)展到面邊界向外半個(gè)像元導(dǎo)致邊緣產(chǎn)生一圈無(wú)效值。更好的做法是裁剪后先重分類把NoData重分類為0或其他固定值再做表面分析。實(shí)際項(xiàng)目里很多初學(xué)者不知道這兩步差異裁完的DEM邊界看起來(lái)鋸齒狀很重然后以為是數(shù)據(jù)問(wèn)題其實(shí)是NoData在渲染時(shí)被顯示成了背景色。一個(gè)可以復(fù)用的批量操作是在ArcMap里寫(xiě)一小段Python腳本對(duì)多個(gè)面文件循環(huán)執(zhí)行掩膜提取。腳本中用arcpy.env.snapRaster把輸出對(duì)齊到原始DEM的像元網(wǎng)格避免不同面文件裁剪結(jié)果之間出現(xiàn)半個(gè)像元的偏移。代碼如下import arcpy from arcpy.sa import ExtractByMask arcpy.env.workspace rD:\gis_data arcpy.env.snapRaster rD:\gis_data\dem_30m.tif # 對(duì)齊到DEM格網(wǎng) arcpy.env.extent rD:\gis_data\dem_30m.tif arcpy.env.mask rD:\gis_data\city_500m.shp out_dir rD:\delivery fields [county, name] # 按縣域面裁剪DEM with arcpy.da.SearchCursor(rD:\data\county.shp, fields) as cursor: for row in cursor: county row[0] where_clause f{fields[0]} {county} arcpy.Select_analysis(rD:\data\county.shp, fmemory\\{county}, where_clause) out_raster f{out_dir}\\dem_{county}.tif ExtractByMask(rD:\data\dem_30m.tif, fmemory\\{county}, out_raster) print(f完成: {county})這里的核心參數(shù)有三個(gè)env.snapRaster強(qiáng)制輸出柵格像元對(duì)齊到全球DEM的網(wǎng)格env.extent限制分析范圍避免內(nèi)存溢出env.mask則給所有后續(xù)空間分析統(tǒng)一套上一層裁剪。county字段名在實(shí)際數(shù)據(jù)里一般是“縣區(qū)”或“NAME”用之前先在ArcMap屬性表看一眼避免字段名不匹配報(bào)錯(cuò)。4.2 柵格裁剪矩形裁剪的“所見(jiàn)即所得”配合作業(yè)更高效柵格裁剪工具的路徑是數(shù)據(jù)管理工具 → 柵格 → 柵格處理 → 裁剪。它的默認(rèn)行為是對(duì)矩形范圍進(jìn)行裁剪并不按面的形狀收縮。使用時(shí)有三個(gè)參數(shù)很關(guān)鍵輸入柵格、輸出范圍、以及“使用輸入要素作為裁剪幾何”復(fù)選框。如果只是快速取一個(gè)矩形范圍的DEM比如編一個(gè)城市建成區(qū)周邊矩形高程圖直接指定輸出范圍即可工具會(huì)用一個(gè)矩形框去切。如果想用面圖層形狀裁剪必須勾選“使用輸入要素作為裁剪幾何”并且把面的要素類選入否則即便選了面圖層輸出還是會(huì)保持那個(gè)面的最小外接矩形。另外還有一個(gè)容易誤導(dǎo)人的選項(xiàng)“保持裁剪范圍外部的NoData”默認(rèn)勾選時(shí)矩形邊框外的區(qū)域會(huì)保留原DEM數(shù)據(jù)柵格邊緣就不會(huì)出現(xiàn)黑洞但如果你是想做“保留邊界內(nèi)部數(shù)據(jù)”的分析就要取消勾選讓框外數(shù)據(jù)全部被刪除。這兩種行為差異和4.1里的NoData擴(kuò)展是同一個(gè)底層邏輯很多人習(xí)慣性保留NoData導(dǎo)致后面統(tǒng)計(jì)面積時(shí)多出來(lái)一大圈無(wú)效像元。柵格裁剪的批量處理比4.1更高效因?yàn)樗挥弥饌€(gè)選面只要在批處理對(duì)話框里把多個(gè)面文件輸入進(jìn)去即可。但缺點(diǎn)是和掩膜提取相比柵格裁剪生成的NoData邊界不夠精確在山區(qū)縣界交界處容易出現(xiàn)拉絲效應(yīng)。所以我實(shí)際項(xiàng)目里的判斷標(biāo)準(zhǔn)是如果裁完只做底圖顯示或報(bào)告配圖用柵格裁剪就夠了如果裁完還要做坡度、坡向、匯水面積計(jì)算那就老老實(shí)實(shí)使用按掩膜提取。4.3 到底怎么選一個(gè)“按需求挑工具”的決策規(guī)則很多搜索“arcmap中依靠面圖層裁剪dem柵格tif文件”的人最后都卡在“用哪個(gè)工具”上面。我總結(jié)過(guò)一套實(shí)際可用的判斷規(guī)則如果是做展示底圖目標(biāo)是把DEM裁成某個(gè)行政區(qū)顯示用柵格裁剪并把“使用輸入要素作為裁剪幾何”勾上速度最快文件也小。只考慮一個(gè)輸出不考慮后面分析。如果要做定量分析比如計(jì)算各縣平均海拔、坡度分級(jí)面積、日照時(shí)數(shù)那就用按掩膜提取。它可以保證輸出柵格像元對(duì)齊、邊界完整還能通過(guò)環(huán)境設(shè)置把NoData一起帶入后續(xù)工具分析結(jié)果一致性好。如果是對(duì)幾十個(gè)縣域批量處理比如把全國(guó)DEM切到各縣我建議優(yōu)先用掩膜提取寫(xiě)循環(huán)腳本而不是逐一手工框選因?yàn)槭止た蜻x容易讓不同縣的文件之間出現(xiàn)重疊邊界而腳本里設(shè)置snapRaster能保證每個(gè)縣文件的像元網(wǎng)格完全對(duì)齊后續(xù)做數(shù)據(jù)合并時(shí)不用再糾正。5. 這套數(shù)據(jù)最容易翻車(chē)的5個(gè)坑坐標(biāo)系、編碼、性能和成圖細(xì)節(jié)數(shù)據(jù)包本身可能整理好了但到具體項(xiàng)目里仍然可能翻車(chē)。這5條是我實(shí)際遇到過(guò)、如果能提前知道就不用折騰的事情。5.1 坑一全國(guó)SHP和高程TIF坐標(biāo)系不是一個(gè)體系拿到數(shù)據(jù)包先不要急著拖進(jìn)ArcMap。打開(kāi)圖層的屬性 → 源 → 空間參考把SHP和TIF各自的坐標(biāo)系記下來(lái)。很多自帶“全球SHP”的包用的是WGS_1984地理坐標(biāo)系國(guó)內(nèi)測(cè)繪部門(mén)發(fā)布的行政SHP可能使用CGCS2000或Krasovsky_1940_Albers高程TIF則可能是GCS_WGS_1984也可能是UTM投影。三者混在一個(gè)工程里只要數(shù)據(jù)框坐標(biāo)系統(tǒng)一平移一兩百公里是常有的事。解決辦法是在數(shù)據(jù)框?qū)傩岳锇炎鴺?biāo)系統(tǒng)一設(shè)置為你項(xiàng)目需要的那個(gè)比如全國(guó)項(xiàng)目常用“CGCS2000_3_Degree_Gauss_Zone_26”再勾選數(shù)據(jù)框?qū)傩岳锏摹霸趫D層上執(zhí)行坐標(biāo)變換”讓ArcMap在渲染時(shí)自動(dòng)做投影轉(zhuǎn)換。如果是要做面積量算盡量統(tǒng)一到Albers等積投影如果只要出圖用地理坐標(biāo)系也無(wú)妨。還有一個(gè)容易被忽略的環(huán)節(jié)當(dāng)SHP的.prj缺失時(shí)系統(tǒng)會(huì)把它當(dāng)作未知坐標(biāo)此時(shí)應(yīng)該在ArcMap里用“定義投影”工具先指派坐標(biāo)而不是在數(shù)據(jù)框?qū)傩岳飶?qiáng)行改坐標(biāo)系。5.2 坑二屬性表中文字段亂碼打開(kāi)省界SHP的屬性表發(fā)現(xiàn)字段名和值全是亂碼屬于很典型的編碼問(wèn)題。SHP的.dbf屬性文件本身沒(méi)有聲明編碼標(biāo)準(zhǔn).cpg文件才保存編碼標(biāo)識(shí)。如果.cpg寫(xiě)的是UTF-8而ArcMap默認(rèn)按GBK讀取或者反過(guò)來(lái)就會(huì)亂碼。解決方法有三種。第一種用記事本或Notepad打開(kāi).cpg文件手動(dòng)把編碼改成“UTF-8”保存后重新加載圖層。第二種在ArcMap的工具 → 選項(xiàng) → 常規(guī)里設(shè)置“對(duì)于Shapefile使用系統(tǒng)本地語(yǔ)言環(huán)境”讓軟件按GBK讀取中文。第三種用GDAL把SHP統(tǒng)一轉(zhuǎn)成UTF-8編碼命令是ogr2ogr -lco ENCODINGUTF-8 output.shp input.shp參數(shù)里的-lco是“創(chuàng)建選項(xiàng)”的意思ENCODINGUTF-8告訴GDAL在輸出時(shí)把屬性編碼寫(xiě)成UTF-8。這樣做的好處是不僅解決ArcMap的顯示問(wèn)題也能兼容QGIS等軟件。不過(guò)我強(qiáng)烈建議在拿到數(shù)據(jù)包的當(dāng)天就把所有SHP統(tǒng)一轉(zhuǎn)成UTF-8編碼因?yàn)?dbf的編碼問(wèn)題會(huì)在日后做字段連接操作時(shí)擴(kuò)大成影響幾何和面積量的大問(wèn)題那時(shí)候再來(lái)改會(huì)比現(xiàn)在麻煩得多。5.3 坑三全國(guó)SHP和高程TIF加載后ArcMap卡死全國(guó)范圍SHP動(dòng)輒幾十萬(wàn)面要素高程TIF哪怕90米分辨率也有幾百萬(wàn)像元加載后出現(xiàn)“正在等待后臺(tái)處理”是常態(tài)。解決方向有三個(gè)一是右鍵圖層 → 屬性 → “顯示”里把“比例依賴符號(hào)”關(guān)閉只保留“變量”與“簡(jiǎn)化顯示”勾選二是在要用的圖層上添加“定義查詢”按省或區(qū)域過(guò)濾數(shù)據(jù)只顯示需要的部分避免全圖參與渲染三是對(duì)于柵格構(gòu)建金字塔和概覽視圖。ArcMap第一次加載時(shí)會(huì)彈窗提示構(gòu)建金字塔選擇“是”。如果沒(méi)有在數(shù)據(jù)管理工具 → 柵格 → 金字塔中手工創(chuàng)建。懶一點(diǎn)也可以用等大的面做“漁網(wǎng)分割”把一次加載全國(guó)變成只加載幾個(gè)漁網(wǎng)單元格但終究不如定義查詢省心。實(shí)際項(xiàng)目的血淚經(jīng)驗(yàn)是不要直接雙擊打開(kāi)全國(guó)SHP也別用“數(shù)據(jù)加載工具”把整個(gè)全國(guó)幅面一次拖進(jìn)來(lái)。把全國(guó)SHP當(dāng)作基礎(chǔ)參照?qǐng)D層符號(hào)系統(tǒng)里只顯示省界和主要水系區(qū)縣級(jí)邊界需要再看時(shí)只加定義查詢顯示當(dāng)前視野范圍內(nèi)的縣。另外一個(gè)容易忽略的性能殺手是導(dǎo)出PDF時(shí)的印刷分辨率默認(rèn)300 DPI已經(jīng)夠用非要選600 DPI時(shí)ArcMap會(huì)把所有圖層按矢量重繪DEM顯示時(shí)間可能長(zhǎng)達(dá)十幾分鐘。這些都算不上數(shù)據(jù)包的問(wèn)題卻是使用這套底圖時(shí)最現(xiàn)實(shí)的耗時(shí)點(diǎn)。5.4 坑四南海諸島小圖框的比例尺和插花出圖時(shí)南海諸島要有一個(gè)獨(dú)立數(shù)據(jù)框并且與主圖比例尺協(xié)調(diào)。常見(jiàn)的問(wèn)題包括主圖用1:1000萬(wàn)小圖框也用1:1000萬(wàn)但因?yàn)榉秶》糯蠛罂床坏疥P(guān)鍵要素或者小圖框用了不同的坐標(biāo)系導(dǎo)致等比例尺下南海諸島的形狀與主圖不一致。我的建議是在主圖和南海諸島數(shù)據(jù)框里分別設(shè)置相同的地圖投影比如都用“Asia_North_Albers_Equal_Area_Conic”小圖框的比例尺可以再放大到主圖的3到5倍比如主圖1:1000萬(wàn)時(shí)小圖框用1:3000萬(wàn)。這樣既不顯得突兀又保持了形狀的連貫性。另外在布局視圖里小圖框外沿建議加一個(gè)細(xì)黑邊框放圖例注明“南海諸島”四個(gè)字。這是地圖制圖規(guī)范的基本要求也是很多審圖員特別留意的地方。5.5 坑五SHP導(dǎo)出WKT時(shí)“斷線”和“丟失”有熱搜詞提到“shp格式矢量數(shù)據(jù)導(dǎo)出為wkt”這種導(dǎo)出在給外部系統(tǒng)對(duì)接或做數(shù)據(jù)入庫(kù)時(shí)經(jīng)常用。常見(jiàn)翻車(chē)點(diǎn)是ArcMap里用“導(dǎo)出數(shù)據(jù)”選成“僅要素”而不是“帶坐標(biāo)系”結(jié)果WKT字符串里只有坐標(biāo)沒(méi)有空間參考或者SHP里的線要素被顯示優(yōu)化后看起來(lái)平滑一導(dǎo)出就發(fā)現(xiàn)被拆成無(wú)數(shù)條短線。用ArcGIS工具箱中的“要素轉(zhuǎn)JSON”可以完整保留幾何與坐標(biāo)參考把JSON轉(zhuǎn)成文本也可靠。Python里的寫(xiě)法from osgeo import ogr ds ogr.Open(rD:\data\county.shp) layer ds.GetLayer(0) with open(rD:\data\county.wkt, w) as f: for feat in layer: geom feat.GetGeometryRef().ExportToWkt() f.write(geom \n)參數(shù)上需要注意ogr.Open的第一個(gè)參數(shù)是數(shù)據(jù)源路徑第二參數(shù)0表示只讀ExportToWkt輸出的是WKT字符串默認(rèn)丟棄坐標(biāo)系信息所以如果對(duì)方要求帶投影需要沿用.shp的.prj文件再做后處理。還有如果線要素是MultiLineString導(dǎo)出的WKT會(huì)帶括號(hào)接收方如果不支持Multi幾何要在導(dǎo)出前先執(zhí)行“多部分轉(zhuǎn)單部分”。這一步雖小但對(duì)對(duì)接進(jìn)度的影響真的很大。6. 再往前走一步用這套底圖提取等高線或者把SHP轉(zhuǎn)成3D Tiles底圖只是基礎(chǔ)。把DEM和SHP聯(lián)動(dòng)起來(lái)做二次產(chǎn)品才是這套數(shù)據(jù)的更大價(jià)值所在。6.1 從DEM提取等高線ArcToolbox → 3D分析工具 → 柵格表面 → 等高線是最直接的路線。參數(shù)上最關(guān)鍵的是等高線間距山地地形用50米或100米間距平原地形用5米或10米間距全國(guó)范圍用500米間距才不會(huì)讓線條糊成一片。還有一個(gè)“等高線范圍”參數(shù)可以只對(duì)某個(gè)高程區(qū)間提取。生成后如果線條太碎可以在符號(hào)系統(tǒng)中用排除表達(dá)式把長(zhǎng)度小于某個(gè)閾值的線刪除只保留主要山脊和山谷的輪廓這一步本質(zhì)上就是“arcgis從dem提分文件提取shp”的常規(guī)解法。用GDAL在命令行里也能做關(guān)鍵參數(shù)是-a指定高程字段-i指定間距gdal_contour -a elev -i 100 dem_30m.tif contour_100m.shp6.2 SHP轉(zhuǎn)3D Tiles要做三維可視化常見(jiàn)做法是先把SHP轉(zhuǎn)成GeoJSON再通過(guò)CesiumLab或ArcGIS Pro的3D Tiles工具轉(zhuǎn)換。流程不復(fù)雜但要注意在轉(zhuǎn)之前統(tǒng)一SHP坐標(biāo)系因?yàn)?D Tiles的全球紋理底圖通?;赪GS84或CGCS2000如果原始SHP是Web墨卡托投影疊加時(shí)會(huì)整片偏移。轉(zhuǎn)出后我用Cesium的預(yù)覽頁(yè)面快速檢查兩個(gè)數(shù)據(jù)行政邊界的底部是否貼地DEM的高程是否“浮”在半空。如果貼地不對(duì)最可能是SHP字段缺少高度信息需要先做屬性連接把DEM的高程屬性掛到SHP上。轉(zhuǎn)GeoJSON的命令可以這樣寫(xiě)ogr2ogr -f GeoJSON county.shp county.geojson6.3 我的一點(diǎn)工作習(xí)慣每次拿到這類標(biāo)準(zhǔn)化底圖我現(xiàn)在習(xí)慣的第一步不再是把所有圖層拖進(jìn)來(lái)。先在QGIS里快速巡檢一遍用圖層信息把每個(gè)文件的坐標(biāo)系、要素個(gè)數(shù)和面積范圍過(guò)一遍再用ArcMap打開(kāi)MXD做正式出圖。這樣既能在軟件之間互檢也能提前判斷哪個(gè)文件需要做編碼或投影修復(fù)。我吃過(guò)的最痛的一次虧是用舊MXD直接出圖沒(méi)有檢查數(shù)據(jù)源路徑結(jié)果輸出PDF以后才發(fā)現(xiàn)省界是上一個(gè)項(xiàng)目的殘留數(shù)百?gòu)垐D紙全部重導(dǎo)。從那以后我總會(huì)給MXD的數(shù)據(jù)源設(shè)置“相對(duì)路徑”而不是“絕對(duì)路徑”項(xiàng)目從一臺(tái)電腦挪到另一臺(tái)時(shí)打開(kāi)工程再也不會(huì)出現(xiàn)斷鏈。希望這點(diǎn)經(jīng)驗(yàn)也能幫到你。本文還有配套的精品資源點(diǎn)擊獲取