尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ArcGIS中长江流域shp数据:从坐标配准到水文分析

ArcGIS中长江流域shp数据:从坐标配准到水文分析 简介长江流域干流上游区间水系流域地形图以shp矢量数据为核心面向ArcGIS使用者、地理信息初学者及水文学相关科研人员解决流域水系底图获取、地形展示与快速出图的常见问题。RAR压缩包内含56个文件约33.72MB矢量部分包含River系列shp、shx、dbf、prj等完整组件可加载河流、湖区等要素栅格部分以adf、dat、nit文件记录dem90m地形高程信息另附mxd工程文档GIS小白可在ArcMap中链接各图层后一键出图。压缩包同时预生成了jpeg、PDF、EPS三种格式的成品地形图不方便操作GIS时可直接引用只是区域无法再调整。这套数据将上游干流区间的河流、湖区与90米分辨率地形栅格整合在一起可支撑区域地貌认知、水系分布梳理和教学PPT配图等场景。目前已有1666人学习下载数据由互联网公开资料加工整理适用于科研初判、教学演示与流域范围概览使用时需自行核对精度。1. 拿到长江流域干流上游区间水系流域地形图shp先别急着拖进ArcGIS“长江流域干流上游区间”是水利分区里的一个计算单元范围大致对应长江干流宜昌以上一段与其支流汇入区。这类项目交付的数据通常以shp格式矢量文件为主体常见图层有流域边界、水系河网、地形图分幅或高程点外加DEM栅格目录。第一次把整套shp拖进ArcGIS最常遇到的是图层位置对不上、属性表字段看不懂。这里把长江流域干流上游区间水系流域地形图shp在ArcGIS里的使用链路讲清楚文件结构、字段含义、坐标配准、矢量与栅格联动分析、输出前的自检与格式转换。适用对象是GIS工程师、水文水资源从业者以及刚接手流域数据的研究生。2. 先把shp文件拆开看长江流域数据常见的矢量文件结构与字段2.1 shp格式不是“一个文件”而是一组文件的组合许多从项目交付包里复制出来的长江流域水系流域shp看起来是一个文件但实际在目录里会出现多个同名不同后缀的文件。shapefile格式的矢量文件和栅格数据不一样矢量文件依赖一组伴随文件共同描述几何、索引和属性。在文件夹里展开目录后常见的文件后缀与对应作用如下表后缀名作用缺失时的情况.shp记录每个要素的几何坐标是主文件图层完全不可用.shx几何位置的索引文件打开变慢部分工具无法使用.dbf属性表保存各字段的值图形能显示属性全空.prj描述坐标系地理或投影ArcGIS按未知坐标系处理.cpg属性字符编码声明中文字段内容可能出现乱码.sbn/.sbx空间索引辅助文件会自动重建缺失不影响业务注意两个容易忽略的点。第一.prj决定坐标系能不能被正确识别缺失后果比很多人想得更严重重新加载后整个流域可能出现在赤道附近。第二.cpg缺失后属性表里原本的名字可能全部变成乱码这在水系名、流域名这类中文属性较多的数据里尤其常见。2.2 用Python快速读取shp的“身份信息”在把长江流域干流上游区间shp拖进ArcGIS之前先花一分钟用脚本读取元数据是值得的。用geopandas可以一次性拿到要素数量、几何类型、字段名、坐标系和空间范围这对于判断数据是否完整尤其有用。import geopandas as gpd gdf gpd.read_file(rD:\GIS\changjiang_upper\watershed.shp) print(要素数量:, len(gdf)) print(几何类型:, gdf.geom_type.unique()) print(字段列表:, gdf.columns.tolist()) print(坐标系:, gdf.crs) print(空间范围:, gdf.total_bounds) print(gdf.head())这段代码先读取shp到GeoDataFrame再逐项打印结构信息。几何类型中流域边界一般以Polygon为主河网以LineString为主如果出现集合类型GeometryCollection说明该shp在导出时混入了多种几何需要重新整理。crs输出为None时说明缺.prj文件total_bounds输出的四元数组隐含坐标系特征十分明显经纬度数据的数值通常在70到140之间投影坐标则是6到7位数的量级这个数值范围可以直接用来做粗略判断。提示环境里没有geopandas时可以用pyshp代替基础读取能力已经足够只是需要手动处理dbf的编码问题。2.3 属性表里常见字段到底是什么含义进入ArcGIS打开属性表后常见的几个字段并不都是业务字段直接修改或删除会影响后续工具。长江流域干流上游区间水系流域地形图里的字段命名风格比较固定常见的有HYDRO_CODE水文分区编码由数字和字母组成可用来区分干流段与支流水系。GRID_CODE格网编码常用于嵌套单元或与栅格网格关联。NAME流域名称或河流名称部分老数据为空。AREA与PERIMETER面积和周长不同来源的数据单位可能不同有的按平方米有的按平方千米。OBJECTID与FID系统行列号不受业务控制不能当作流域编码使用。在ArcGIS Pro中右键字段选Statistics可以看到最小最大值也可以查看唯一值数量。用这种方式判断HYDRO_CODE是否可以作为筛选条件比直接猜编码规律可靠。如果NAME字段整体为空再降级用GRID_CODE或CODE来做后续关联字段选错会导致整个分析基于错误的单元。2.4 数据预览与要素选取在ArcMap或ArcGIS Pro里把长江流域干流上游区间的shp拖到地图上后除了看图形还建议在属性表查询里先做一次要素筛选。以流域名称为例可以在Select By Attributes里写NAME LIKE %上游%如果NAME不可用就退回编码条件HYDRO_CODE LIKE A%筛选是缩小分析范围的第一步。每次把整个长江流域的shp参与运算比如在后面做栅格裁剪或图层叠加时数据量都会拖慢速度先把满足条件的目标要素用Export Features导出为一个独立shp后续分析的输入输出保持在单个小图层里整个流程会稳定不少。2.5 交付数据中常见的不规范之处长江流域相关shp交付数据并非都按规范导出最常见的几类问题值得提前防范。字段名被截断是旧版dBASE格式的固有限制字段名最长只能10个字符导出时系统会自动截断中文名更容易变成乱码。几何类型混杂例如同一个shp文件里既有线要素又有面要素ArcGIS加载时会提示几何错误。重叠要素与悬挂点特别是多个子流域拼合的边界线在拼接处容易出现细缝或重叠这在计算面积时会直接放大误差。处理方式上优先使用ArcGIS的Check Geometry做一次排查再用Repair Geometry进行修复。修复前备份原始文件因为Repair Geometry会改写几何一旦效果不理想还要回退。3. ArcGIS中坐标系配准先定坐标再做投影3.1 为什么图层会“飞”到海里长江流域干流上游区间水系流域地形图shp在ArcGIS里显示位置错误绝大多数情况不是数据坏掉了而是坐标系出了问题。坐标系决定一组坐标数值代表什么物理位置坐标系没定对画面自然错乱。在ArcGIS里定义投影和投影转换是两个容易混淆的功能定义投影是修改图层的坐标系声明不改坐标数值本身投影转换是真正执行坐标换算把数据从一个坐标系转到另一个坐标系。如果把一个投影坐标数据错误地执行了定义投影结果只是换了个坐标系标签实际坐标不变图层立刻飞到海里。在开始处理前先在Contents窗格中右键图层、进入Properties、切到Source选项卡查看当前坐标系描述。如果显示Unknown或空白说明shp缺少.prj文件如果显示的是地理坐标系但数值范围明显是米则说明定义投影和投影转换被用反了。3.2 用ArcToolbox查坐标系与常见坐标系对照长江流域干流上游区间这类国内水系数据常见的坐标系不会太复杂常见的就是以下几类坐标系名称坐标系类型坐标单位适用情况GCS_WGS_1984地理坐标系度互联网底图与通用交换GCS_China_Geographic_Coordinate_System_2000地理坐标系度国内基础地理数据通用CGCS2000_3_Degree_GK_CM_105E投影坐标系米高斯克吕格3度分带中央经线105度CGCS2000 / UTM zone 48N投影坐标系米跨流域、跨带项目中使用表中第三行在长江上游区域应用更合适。该区域山脉纵横经纬度跨度大选择中央经线105度的3度带可以覆盖大部分长江干流上游区域在这种坐标系下参与面积计算和栅格分析都符合常规工作流。3.3 坐标系操作的具体步骤处理缺失坐标系的第一步是定义投影。在ArcToolbox中打开Data Management Tools Projections and Transformations Define Projection输入长江流域干流上游区间的目标shp在Coordinate System里选择对应的地理坐标系。执行完成后到Source选项卡确认坐标系已经更新再确认图层显示位置回到正确区域。如果确认数据当前坐标是经纬度但项目需要投影坐标则继续执行Project工具把输出坐标系设置为CGCS2000 3 Degree GK CM 105E。对于批量操作用ArcPy脚本更好维护import arcpy arcpy.env.workspace rD:\GIS\changjiang_upper arcpy.env.overwriteOutput True source watershed.shp target watershed_gk.shp # WKID 4525 对应 CGCS2000 / 3-degree Gauss-Kruger CM 105E out_cs arcpy.SpatialReference(4525) arcpy.Project_management(source, target, out_cs) print(arcpy.Describe(target).spatialReference.name)Project_management是矢量坐标转换工具参数顺序分别为输入要素类、输出要素类、目标坐标系。SpatialReference可以传WKID数字也可以传坐标系名称字符串使用WKID更稳妥。输出坐标系应根据项目要求提前在文档里确认高斯克吕格分带选错后数据会整体偏移几十米到上百米这种问题在后续叠加时很难一眼发现。3.4 动态投影与转换误区ArcMap和ArcGIS Pro都启用了动态投影机制所有图层会被实时转换到数据框的坐标系下显示。这意味着即使各个shp源坐标系不同地图上也能叠在一起容易让人误以为数据坐标系已经统一。真正要用于计算的坐标系应在图层属性里确认而不是用肉眼判断地图是否重合。还有一类问题是地理坐标转换参数缺失。从CGCS2000转到WGS84在大多数区域误差在0.1米量级直接使用默认参数问题不大但如果是西安80或北京54历史数据转CGCS2000需要确认是否设置了恰当的地理转换Geographic Transformation否则转换结果会有一百到几百米的偏差。老数据里的转换参数往往在交付文档里注明找不到时至少要在分析结论中说明坐标系转换参数不确定。提示图层明明可以正常显示却总能在判读时发现边界偏移优先检查数据框坐标系和图层属性里的真实坐标系。4. 水系流域叠加与空间分析把shp用起来4.1 属性筛选与流域单元提取长江流域干流上游区间的流域边界shp通常包含多个子流域。为了把目标子流域提取出来可以在属性表查询里用SQL表达式做筛选。由于不同来源的数据采用的编码不一样第一次筛选先看字段统计值再写表达式。一般常见的写法是HYDRO_CODE LIKE A% AND AREA_KM2 500这个表达式把水文编码以A开头、面积大于500平方千米的子流域选出来。执行筛选后地图上高亮的就是符合条件的流域单元随后右键图层选择Export Features导出为新shp。导出前确认字段名不要使用中文字符ArcGIS在shp格式下会把长字段名截断后续再用属性表映射时会很麻烦。4.2 矢量水系与流域交叠的几何检查水系和流域边界是两个独立的shp图层判断它们之间的空间关系用Select By Location比肉眼缩放大图更高效。把“河流要素中与流域边界相交的部分”作为选择条件能快速判断两层数据是否在同一个坐标系下。如果选择结果为0说明两层数据坐标系不匹配或空间范围不重叠排除这个因素后再检查图层是否真的加载到了期望区域。正确加载的水系shp和流域shp一般会存在几千条以上的相交记录数量级明显不对时才需要怀疑数据本身。4.3 Clip裁剪和地形栅格数据配套处理流域地形图shp里通常带有一个或多个DEM栅格。做水文分析前先用流域边界shp把DEM裁剪到一致范围可以显著加快后续计算。矢量要素之间的裁剪用Clip_analysis栅格数据裁剪用Clip_management两者工具名不同参数含义也不同import arcpy arcpy.env.workspace rD:\GIS\changjiang_upper dem_in srtm_upper.tif dem_out dem_clip.tif mask watershed_upper.shp # 按矢量边界裁剪DEMNoData统一为255 arcpy.Clip_management(dem_in, #, dem_out, mask, 255, ClippingGeometry) river_in river_upper.shp river_out river_clip.shp arcpy.Clip_analysis(river_in, mask, river_out)Clip_management中矩形参数传“#”表示不直接用矩形范围裁剪掩膜参数mask控制裁剪范围ClippingGeometry是按要素几何边界而非外接矩形裁剪把栅格裁到流域面边界。NoData值255是为了掩盖DEM边缘可能出现的空白区域避免后续流向分析受无效值干扰。矢量裁剪arcpy.Clip_analysis输入要素和掩膜要素的顺序不能调换输出的shp属性表结构保持不变裁剪后要素数量明显减少多数情况下与掩膜外的要素被去掉。4.4 水文分析填洼、流向、汇流累积与河网提取从裁剪好的DEM中提取河网是常见需求ArcGIS水文分析模块的工具链如下工具输入输出关键参数FillDEM无洼地DEMZ limit 默认不限Flow Direction无洼地DEM流向栅格默认D8算法Flow Accumulation流向栅格汇流累积栅格输出类型选FLOATCon汇流累积栅格河网栅格阈值大于设定值取1在Raster Calculator里写条件表达式提取河网栅格Con(flowacc 500, 1)阈值500到1000在长江干流上游山区能生成比较合理的河网密度。阈值越小河网越密取值需结合流域面积调整常见做法是先用一个初始值生成结果再和原始水系shp做叠加对比调整阈值到视觉与统计都合理为止。生成的河网栅格再通过Raster to Polyline矢量化得到可以和原始河网叠加验证的线要素。4.5 与地形图shp配准的技巧水流方向结果和地形图shp做叠加时经常可以通过形状判断坐标系是否真的对齐。把经过投影转换的流域边界以半透明填充叠加在地形图上再叠加河网线图层观察河网与等高线的关系如果河网持续穿过山脊线说明高程数据与矢量数据坐标不一致。解决这个问题的常见做法是确保所有图层在同一个投影坐标系下参与分析只在地图显示阶段使用动态投影。4.6 渔网分割shp生成统计单元如果需要按网格统计上游区间内的水系密度或土地利用情况常见做法是先创建渔网再用网格分割shp。创建渔网时定义好像元大小比如2公里×2公里输出为面要素然后用Intersect工具让渔网与流域shp做叠加得到每个格网与流域的交集再在字段计算器里统计交集面积。这是典型的“渔网分割shp”应用场景常用于把流域按空间网格切成可统计的单元统计结果用Join Field关联到渔网图层从而渲染出空间分级图。5. 数据自检、shp转txt与出图流程5.1 拓扑检查与几何修复长江流域干流上游区间这类跨多个子流域的shp数据交付后偶尔会在相邻流域的边界处出现重叠或缝隙。ArcGIS拓扑检查的步骤是把shp导入文件地理数据库新建拓扑选择需要检查的面要素添加“不能重叠”规则验证后查看错误。轻量级场景下也可以直接使用Check Geometry和Repair Geometry两个工具其中Repair Geometry会重建几何解决面积出现负值的问题。不少数据在ArcGIS里计算面积得到负值通常不是坐标系问题而是多边形顶点顺序错乱修复后面积会恢复正常。5.2 shp转txt和shp转kml的快速做法流域边界与水系成果经常需要提交给其他平台或非GIS同事。常见的做法是shp转txt导出要素顶点坐标或shp转kml进入Web地图展示。批量shp转kml用ArcPy循环处理import arcpy arcpy.env.workspace rD:\GIS\changjiang_upper for shp in arcpy.ListFeatureClasses(*.shp): out_kml shp.replace(.shp, .kml) arcpy.LayerToKML_conversion(shp, out_kml, 1, false) print(已输出:, out_kml)LayerToKML第一个参数是输入要素或图层第二个是输出KML路径第三个参数是图层输出比例尺传“1”接近原始精度false表示不压缩成KMZ。这个脚本不局限于河网流域边界、地形图分幅shp同样适用。shp转txt则使用Feature Vertices To Points或Table To Text两条路径按需要导出的对象处理。5.3 性能优化与出图流程大型流域shp在ArcGIS中操作卡顿原因常常出在属性索引缺失和图层冗余。双击图层进入属性在Indexes标签页为HYDRO_CODE等常用筛选字段创建属性索引明显改善查询速度。出图时符号化类别控制在7类以内水系用单线蓝色流域面用半透明填充轮廓线避免过粗。最后在布局视图配置比例尺、指北针和图例导出PDF或300dpi TIFF。所有交付的图件都建议在ArcGIS中叠加在线底图做一次坐标对照测试坐标系配准无误后再归档。本文还有配套的精品资源点击获取
返回列表