简介:汉江流域空间分布与地形特征数据包,完整汇集流域矢量边界、高程渲染图与可编辑制图工程,主要面向地理、水文、生态方向的科研人员、高校师生及规划制图者,既可用于论文插图、课堂专题实验,也能作为SWAT、HEC-HMS等水文模拟的前期底图。包含18个文件,以可编辑mxd、shp系列矢量组件、tif栅格成图为核心,另附全国省级行政区划矢量,方便裁剪任意省份范围;整体压缩包185.84MB。已有396人学习浏览。数据覆盖湖北、陕西、河南、四川、重庆等省市,北起秦岭南坡、南抵大巴山北麓,总面积约15.9万平方公里;北部以秦岭山区为主、地势陡峻,中南部多河谷盆地与低山丘陵,地形分级颜色和等高线可直观反映梯级变化,为水土流失、生态脆弱区识别提供依据。使用时可直接打开mxd微调配色与标注,也可引用标准成图TIF,还能借助省级界做省域裁剪,节省数据预处理时间。
1. 先弄懂这套汉江流域数据包:mxd、shape、TIF三件套到底值在哪
做流域项目的人经常收到这种压缩包:标题写着“汉江流域空间分布及地形特征-可编辑mxd文件+标准shape文件+标准成图TIF”。很多人的第一反应是双击mxd看能不能打开,打开能看到图就扔一边,等到要自己出图、改范围、换符号时才发现问题:mxd红了、shape缺投影、TIF拉伸全黑。这个包真正值钱的不是那几张图,而是“可编辑”这三个字——它意味着图层逻辑还活着,符号化还留着,你能接着改,而不是拿到一张死图重画一遍。这篇就按一线干活的顺序,把mxd、shape、TIF拆开讲清楚:各自管什么、怎么配合、怎么用汉江流域的边界去裁剪DEM并算出地形特征,再把最容易翻车的坑提前指出来。
2. 拆开数据包看门道:mxd、shape、TIF各管什么、怎么搭着用
2.1 mxd文件:它不存数据,却决定整套图的骨架
拿到包先别急着双击打开。mxd不是数据容器,它是ArcMap的工程文档,存的是图层顺序、符号化规则、标注样式、布局元素,还有一条条指向实际数据文件的路径。你看到的“汉江流域图”,其实是mxd把shape和TIF按顺序叠在画布上的结果。数据本身动了、改名了、挪位置了,mxd都会显示红色感叹号,因为它在磁盘上找不到东西。
“可编辑mxd文件”这个描述有讲究。不可编辑的mxd多半是别人导出时把图层合并、把文字转曲线,结构已经打碎;而可编辑mxd保留着原始的图层树,你可以右键任意图层改符号、换配色、加注记,甚至把某个子流域从绿色改成黄色,改动几秒钟生效。这才是工程文件该有的样子。
我拿到mxd之后习惯先看一眼“文档属性”里的“数据源选项”。如果没勾选“存储相对路径名”,这个包拷贝到别的机器、别的目录就会全红。标题里特意写“可编辑”,通常意味着作者保存时已经做了相对路径处理,但你不能赌,后面避坑章节我会细说怎么救。
提示:mxd本身不携带任何地形信息,它只是一个“指挥者”。判断一个mxd值不值钱,不看文件大小,看它背后随包附带的shape和TIF是否齐全。
2.2 shapefile:汉江流域空间分布的矢量骨架
shapefile是ArcGIS最经典的矢量格式,但很多人不知道它是一组文件的集合:.shp存几何形状、.shx存位置索引、.dbf存属性表格、.prj存投影坐标定义。拷数据时只拷一个.shp,后面属性表、坐标系全丢。标准shape文件包里,至少应该包含流域边界、河网、子流域分区这类核心要素,属性表里通常带面积、周长、编码这样的量算字段。
汉江流域的空间分布,靠的就是这些面状和线状要素:从陕西宁强县源头开始,蜿蜒穿过秦巴山区,经汉中、安康进入湖北,在丹江口以下转向东南,最后在武汉汇入长江。如果你拿到的shape里有子流域分区,做地形特征统计会非常方便——把坡度、高程按子流域做分区统计,就能得到一套“上游陡、下游平”的量化结论。shape文件的空间分布信息,是mxd画布上最基础的骨架。
打开shape文件先看三件事:第一,有没有.prj文件;第二,.dbf属性表中文是否乱码;第三,几何范围是否落在汉江流域的真实经纬度区间内。这三个检查不用花一分钟,能帮你挡掉后面大半的麻烦。
2.3 TIF成图:栅格底图,把地形特征一次性摆到台面上
TIF这个词在数据包里有两层意思,很多人混着用。一层是DEM原始数据,一般是16位无符号整型,像元值代表高程,打开后黑漆漆一片,需要做拉伸才能正常显示;另一层是“标准成图”,通常是8位RGB三波段,已经渲染好山体阴影、高程分层设色,直接能放进汇报材料。
标题写的是“标准成图TIF”,那大概率是后者——分辨率、配色、注记都是出版社级别的成图,用来和mxd、shape对照。它的价值在于视觉标定:你要判断矢量边界有没有偏移,把shp叠在TIF上看一眼河谷走向就清楚了。但成图TIF也有坑:它如果只带颜色不带高程值,你就没法用它算坡度,算地形特征必须换真正的DEM数据源。
三类文件的关系可以用一张表格说清:
| 文件类型 | 实质内容 | 关键附属物 | 最容易出的问题 |
|---|---|---|---|
| mxd | 布局、符号化、数据源路径 | 引用的shp/tif必须存在 | 路径失效,图层全红 |
| shapefile | 矢量几何 + 属性 | .dbf、.prj、.shx | 缺prj、中文乱码 |
| TIF成图 | 栅格像元(RGB或高程) | 投影信息写在.tif头或.tfw | 拉伸异常、范围套不上 |
三者凑齐,才算一份能直接开工的汉江流域工程。缺任何一样,工作流都会断一截。
3. 在ArcMap里把三件套跑通:查投影、理图层、出成图的顺序
3.1 先查投影:空间分布错位九成是坐标系的锅
不要一上来就把mxd拖进ArcMap。先做一次“投影体检”,查的是三个对象:数据框坐标系、shape文件自身投影、TIF栅格的投影。右键任意图层打开“属性→源”,能看到空间参考。汉江流域横跨陕西和湖北,常用的投影坐标系是CGCS2000 / 3度分带,中央经线选111°E或114°E;老数据包里也有Beijing 1954或Xi'an 1980,用起来问题也不大,但必须和TIF保持一致。
常见错误是数据框坐标系明明是WGS84地理坐标系,shp却是CGCS2000投影坐标系。在ArcMap单工程里,动态投影会骗过你的眼睛,图上看起来是叠在一起的,一旦导出或换工程就错位。正确做法是先确认所有数据源“源”里写的名字,然后把数据框坐标系设成最终出图的目标坐标系,再用“投影”工具把shp真正转过去,而不是只改显示效果。
TIF的投影信息藏在文件头里,右键属性能看到像元大小和空间参考。如果TIF不带投影信息,ArcMap会默认按WGS84读,这种TIF和shp叠上去差几百米很正常,别慌,先用“定义投影”工具补上再谈别的。这个步骤虽然枯燥,却能避免后期所有对不上的问题。
3.2 图层顺序与符号化:让mxd保持可编辑,还更耐看
投影统一后,开始整理图层顺序。我一般把TIF成图放最底层,用作地形底图;第二层放流域边界,用醒目的深色实线;第三层放子流域分区,用半透明填充;河网放最上层,用蓝色细线;注记层放到最顶层,不要和几何图层混在一起。这个顺序符合读图习惯:先看地形,再看边界,再看水系。
符号化的关键是分级。汉江流域从秦巴山区到江汉平原,高程跨度大,直接用单色填充看不出地貌变化。右键图层→属性→符号系统→分级色彩,分级数量设5类,色带选从深绿到棕黄的连续色。分类方法用“自然间断点”比较适合地形数据,因为它会把高程值差异明显的断点自动找出来,上游山地、中游丘陵、下游平原一眼就能分开。
透明度也是一个实用参数。TIF底图不一定要100%不透明,把图层的透明度设为30%左右,再叠加子流域色块,既能看到地形起伏,又能看清流域内部的行政区或水文分区边界。这样处理之后,mxd的画面就既保留了“可编辑”的属性,又比默认打开的原始效果更专业。
3.3 布局出图:把mxd做成标准成图TIF
mxd编辑完,工作还没完——出图。如果只是临时看看,直接导出JPG也够用;但要做“标准成图”,必须加完整的地图要素:比例尺、指北针、图例、坐标网格。切换到布局视图,插入这些元素,比例尺单位选千米,指北针选简单样式,图例只保留需要显示的图层,别让图例比地图还大。
导出设置有几个要紧的参数。文件菜单→导出地图,格式选TIFF,分辨率至少300dpi,压缩方式选LZW——LZW是无损压缩,成图放大检查时不会出现马赛克块。勾选“将背景透明”要看场合:汇报图一般不要透明,直接白底最干净;要做叠加底图时才用透明背景。
导出之后检查一眼成果:图上河流和等高线必须压在边界内部,图例范围不能盖住汉江中下游的关键拐弯处。如果地名标注和边界线重叠,回到布局里调整注记位置再导一次。成图TIF的意义就在这:下一次做汇报、做评审,直接拿这张图,不用再开ArcMap现场调。
4. 汉江流域地形特征算出来:DEM裁剪与坡度坡向的关键参数
4.1 面图层裁剪DEM:Clip 与 Extract by Mask 到底差在哪
做汉江流域地形特征分析,第一步是把大范围DEM裁到流域边界内。很多人在ArcMap里找不到正确的工具,或者裁出来的图四周全是黑块。这里涉及两个经常被混用的操作:数据管理工具箱里的“裁剪”(Clip),和Spatial Analyst工具箱里的“按掩膜提取”(Extract by Mask,中文版里也常被叫做掩码提取)。
两者的本质区别在于“裁剪范围”的算法。Clip工具更偏向“开窗口”:你给它一个面图层,它可以按这个面的外接矩形来裁,也可以让用户勾选“使用输入要素作为裁剪几何”来真正按面的形状裁。在ArcMap 10.x里,如果只填了裁剪要素、没勾选那个几何选项,出来的结果会是矩形,边缘多大一圈NoData;按掩膜提取则不同,它严格按面图层的几何形状提取,面边界之外统统变成NoData,输出范围与面边界严丝合缝。
所以做流域地形统计,建议直接用按掩膜提取。ArcPy写法很简洁:
import arcpy from arcpy.sa import ExtractByMask arcpy.env.workspace = r"E:\hanjiang" arcpy.env.overwriteOutput = True dem = r"E:\hanjiang\srtm_tif\dem_merge.tif" mask = r"E:\hanjiang\shape\hanjiang_boundary.shp" out_ras = r"E:\hanjiang\analysis\hanjiang_dem_clip.tif" extracted = ExtractByMask(dem, mask) extracted.save(out_ras)这段代码逻辑很直白:读取DEM和流域边界面,按面形状提取栅格,输出保存到analysis目录。参数上需要注意两点,一是DEM可以是分幅拼接后的结果,但拼接时各幅影像的投影必须一致;二是按掩膜提取出的栅格范围和边界完全一致,如果后续还要做坡度、坡向,这个裁剪结果是唯一正式的输入,不要再拿原始DEM去算。
Clip工具也有它的用武之地:当你想保留流域外围一定缓冲区的DEM作为制图背景时,Clip更合适。做法是先把边界用“缓冲区”工具往外扩一个范围,再用Clip按这个外扩面做矩形裁剪,出来的底图既有流域地形,又有周边参照。
| 对比项 | Clip(数据管理) | Extract by Mask(Spatial Analyst) |
|---|---|---|
| 输出范围 | 可选矩形或要素几何 | 严格等于面要素几何 |
| 面外像元 | 默认保留NoData | 直接裁掉 |
| 适用场景 | 整块底图、带缓冲区 | 流域精确统计分析 |
| ArcMap界面区别 | 需勾选使用输入要素作为裁剪几何 | 输入掩膜即可 |
4.2 坡度、坡向与起伏度:参数设不对,结果没法用
拿到裁剪后的DEM,开始计算地形特征。坡度是第一个必算的指标,ArcToolbox里位置是“Spatial Analyst→表面分析→坡度”。汉江流域的地形特征很明显:上游汉中、安康一带是秦巴山区,山高谷深;中游丹江口到襄阳是丘陵;下游江汉平原一马平川。坡度图会把这个梯度变化直观地铺在眼前。
坡度工具最关键的参数是Z因子。如果DEM是地理坐标系(单位是度),水平方向的单位是度,而高程单位是米,量纲不一致,Z因子不设成111320,算出来的坡度会被严重畸变;如果DEM已经转成投影坐标系(如CGCS2000 3度带,单位为米),Z因子保持1即可。这个参数是无数人翻车的地方,因为ArcMap默认值是1,地理坐标系的DEM直接算坡度,结果可以离谱到普遍90度。
坡向工具的参数相对简单,输出是0到360度的坡面朝向,平地常显示为-1。汉江流域河谷的展布方向和坡向统计放在一起,能分析出阴阳坡的水热差异,这对植被覆盖、水土流失研究都有用。起伏度则用“邻域统计”来做,3×3窗口取高程范围值,能识别微小切割;要表现整个流域的地形破碎度,建议用5×5窗口,避免噪声过大。
4.3 从地形特征回看汉江流域的空间分布规律
算完坡度、坡向、起伏度,怎么把栅格数据变成“空间分布规律”的结论?办法是分区统计。以子流域shape为区,统计区内平均坡度、平均高程、最大起伏度,然后把统计结果连回属性表,用分级色彩显示,就能形成流域地貌的空间分布序列。
操作在ArcToolbox里是“Spatial Analyst→区域分析→以表格显示分区统计”。关键参数有三个:区要素选子流域shape;区字段选子流域编码字段,必须保证唯一;统计类型选MEAN、MAX、RANGE这几个常用值。输出的dbf表格用JOIN连接回shape属性表,再按平均坡度做符号化。结果通常非常清晰:上游子流域平均坡度普遍大于20度,中游在10度左右,下游江汉平原的坡度量级已经趋近于零。这样就把“汉江流域地形特征”从主观印象变成了一张带数值、带色彩、可核查的专题图。
5. 避坑清单:mxd、shape、TIF最容易翻车的五个场景
5.1 mxd打开后图层全红
现象:mxd能打开,但图层面板里所有图层前面都是红色感叹号,画布空白。原因是mxd记录的是绝对路径,数据包换过目录后路径失效。解决分两步:先确认shape和TIF确实在包里,然后打开“文件→文档属性→数据源选项”,勾选“存储相对路径名”,保存关闭后再重开。如果只想快速修当前工程,右键红感叹号图层→数据→修复数据源,逐个指到新路径。我的习惯是拿到包第一时间把整个目录放到固定工作盘,再做一次相对路径保存,后面怎么挪都不怕。
5.2 shapefile中文字段乱码
现象:属性表打开,原本应该是“流域名称”的字段变成“???”或乱码。原因是.dbf文件的内部编码与ArcMap当前读取编码不一致,老版本ArcMap默认按ANSI读,而很多数据是用UTF-8生成的。解决最快的方式是把shape导入文件地理数据库(File GDB),右键shape→数据→导出,目标选GDB要素类,ArcMap在GDB中统一按Unicode处理,乱码消失。如果手头数据很多不想导,用Python的pyshp读取时也可以显式指定encoding='utf-8',但ArcMap界面里没有这个开关。避免这个坑最好从源头做:自己创建shapefile时,在创建工具里勾选“支持UTF-8”。
5.3 TIF成图全黑或全白
现象:把TIF拖进ArcMap,画布一片黑,调透明度也没用。原因分两类:一类是16位DEM数据默认拉伸方式不合适;另一类是带Alpha通道的成图TIF,ArcMap把透明通道也当波段显示。解决先在图层属性→符号系统→拉伸里看“类型”,选“最值”或“百分比截断”,通常就能正常显示;如果还黑,检查“波段”选择,RGB成图应该选波段1、2、3,而不是单独显示波段4。最后一个高发情况是TIF附带的世界文件.tfw存在但坐标信息有误,这个后面衔接错位一起说。
5.4 裁剪DEM范围大一圈,边缘全是NoData
现象:用面图层裁剪DEM,输出栅格的范围明显比汉江流域边界大,四周填充着空值黑块。原因几乎都是Clip工具没勾选“使用输入要素作为裁剪几何”,系统默认按外接矩形裁剪。这个工具界面比较隐蔽,不细看菜单很容易漏。解决方法是改用“按掩膜提取”(Extract by Mask),或者回到Clip工具把几何选项勾上。剪完之后检查一下输出栅格的“范围”属性,应该和边界shape的范围完全一致,这才是节约存储空间的正解。
5.5 矢量与TIF错位,边界线浮在半空
现象:流域边界和水系叠在TIF地形上,错开几百米甚至更远,河谷对不上。原因基本是shape缺.prj文件,被ArcMap当成WGS84来动态投影,而TIF是CGCS2000投影坐标系;也可能是TIF的世界文件有误。解决先给shp补投影:用“定义投影”工具写入正确坐标系,再检查数据框坐标系与TIF是否一致。补完后如果还错,用“投影”工具把shp转到TIF的坐标系,重新检查。经验是:所有错位问题都先从坐标系统一入手,不要试图手动平移图层——矢量数据手动一移,面积和拓扑就全毁了。
6. 进阶:用ArcPy给数据包做个快速体检,再动手出图
数据包拿到手,与其在ArcMap界面里一个个点,不如用ArcPy跑一遍体检脚本,把文件的路径、范围、坐标系一次摸清。下面这段脚本针对ArcMap 10.x环境,目的就两个:找出mxd里失效的数据源,对比shp和TIF的范围是否重叠。
import arcpy, os mxd_path = r"E:\hanjiang\hanjiang.mxd" dem_tif = r"E:\hanjiang\hanjiang_dem.tif" boundary_shp = r"E:\hanjiang\hanjiang_boundary.shp" mxd = arcpy.mapping.MapDocument(mxd_path) for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports("DATASOURCE"): src = lyr.dataSource if os.path.exists(os.path.join(lyr.workspacePath, src)): print("OK ", lyr.name) else: print("MISS", lyr.name, src) ext1 = arcpy.Describe(boundary_shp).extent ext2 = arcpy.Describe(dem_tif).extent print("边界范围:", ext1.XMin, ext1.YMin, ext1.XMax, ext1.YMax) print("TIF范围:", ext2.XMin, ext2.YMin, ext2.XMax, ext2.YMax)这里的关键参数是arcpy.mapping的ListLayers方法和Describe的extent属性。ListLayers把mxd里的所有图层列出来,supports("DATASOURCE")判断该图层是否带数据源路径,再用os.path.exists检查文件是否真的在磁盘上。extent对比则是看边界和TIF框是否处于同一地理尺度,如果两者XMin差出几万米,说明有一个文件坐标系或者范围错了,这时候别急着做后面的分析,先回头修数据。
我自己养成的习惯是:每个流域项目开工前都跑一次这个脚本,输出保存成txt放在工程目录里,作为数据验收记录。别看这个动作简单,它救过我很多次——有一回就是脚本测出TIF和shp中心点偏移了差不多两公里,查下来是TIF的世界文件被重命名过,ArcMap读取时自动用了错误的投影对齐。要是没跑这一步,后面所有叠加分析都得推倒重来。拿到汉江流域这套mxd、shape、TIF,先花三分钟体检,再动手出图裁DEM,顺序对了,路就顺了。希望帮到你。
本文还有配套的精品资源,点击获取