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