十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

中国水系及流域矢量数据整理与入库实操全流程

中国水系及流域矢量数据整理与入库实操全流程 简介中国水系及流域矢量数据SHP格式源自2019年OpenStreetMap开源项目面向GIS研究人员、水利规划与环境管理从业者可支撑流域划分、水资源评估、洪水风险分析与灾害预警等空间应用场景。包体共24个文件以shp矢量文件为核心配套dbf属性表、prj投影坐标系、sbn/sbx空间索引、cpg字符编码及xml元数据压缩包约134.36MB可在ArcGIS、QGIS等桌面GIS软件中直接打开和处理。数据内容涵盖长江、黄河、珠江、淮河等主要河流及其支流的中心线与矢量面提供河流名称、流域边界、流域面积、平均流量、流经省市等属性信息可进行空间查询、叠加分析、缓冲区分析及专题制图基于流域边界还能分析不同流域的水资源分布、降雨量分布和洪水风险。已有693人学习下载适合需要获取可编辑中国水系底图、开展水文地理研究或制作水资源专题地图的读者使用。1. 中国水系及流域矢量数据从取数到建库的完整实操记录做GIS这两年我处理过不少“一张图”项目可要说哪个数据最让人又爱又恨中国水系及流域的矢量数据绝对排前三。为什么因为水系这东西表面看着简单——不就是线嘛可一旦涉及全国范围、全流域尺度坐标系、拓扑关系、数据来源、精度统一每一环都能把人逼疯。这篇博文我就从自己实际做过的“中国水系及流域矢量数据整理与入库”项目出发把整个流程拆开讲清楚包括矢量数据的基础认知、数据从哪来、怎么从图片资料里获取并配准到ArcMap里、怎么处理和修复常见问题以及后续能做什么分析。无论你是刚接触GIS的本科生还是需要做水资源管理、规划评估的从业者这套流程都能直接参考。先说项目的核心结论一套能用于全国尺度分析与展示的“中国水系及流域矢量数据”最终落地的形式是两个要素集——线状河网图层和面状流域边界图层统一采用CGCS2000坐标系属性表包含国家编码、名称、干流/支流级别、流域分级等字段再配套一个简单的样式文件。完成这套数据后续做河网密度计算、流域提取、缓冲区分析都能直接基于它跑。1.1 核心需求解析为什么“有数据”不等于“能用”项目一开始需求方给的需求只有一句话“我们要一套全国水系及流域的矢量数据最好是shp格式。”这话听着简单真做起来全是坑。范围尺度全国尺度的水系数据不是某一个省或者某一条河。数据体量大概在小几十万条线要素的量级必须考虑加载效率和符号化性能。矢量类型水系是线状要素河流、渠道流域是面状要素分水岭围合形成的汇水区域。两类要素必须分层存储不能混在一个文件里。数据精度用于宏观展示和中尺度分析1:25万~1:100万不需要精确到每一段溪流但主干水系、一级支流、二级支流和重要湖泊水库不能缺。坐标系所有图层必须统一坐标系且空间位置能对得上。这一点很多人前期不在意后期合并图层时才发现河流和流域边界根本套不上偏差几十公里那时候返工成本极高。如果你也在做类似的数据整理我建议第一件事不是找数据而是先明确用途和比例尺。用于全国大屏展示的数据和用于县市级淹没分析的数据对精度的要求完全是两码事。先定精度再选数据源才不至于做了一半发现数据白整理了。1.2 方案选型公开数据源人工拓扑检查双轨并行中国的公共地理信息目前已经开放了不少可用的底图服务但能直接下载、无版权争议、且满足水系流域完整度需求的矢量数据源我实测下来就两个方向国家地理信息公共服务平台的公开数据提供了全国范围的基础地理数据包含水系要素但需要申请并审核矢量数据一般是分级分幅下载。全球公开数据集如OpenStreetMap的水系数据、HydroSHEDS的流域边界数据OSM在中国区的水系数据完整度在东部人口密集区域相当不错但在西部和无人区明显缺失HydroSHEDS是全球公认的流域划分数据提供12级流域边界做全国流域划分直接可用。我最终的方案是OSM水系矢量做底版HydroSHEDS流域边界做面再用国家公开的江河湖泊名录做属性校核。这样既解决了“线从哪来”的问题也解决了“流域面怎么划”的问题。这里补充说明一下这套思路的取舍逻辑数据源优势劣势适用场景OSM水系获取方便全球覆盖持续更新西部数据缺失严重拓扑错误多快速建底图需要自己修拓扑HydroSHEDS流域边界权威分级明确只提供流域面不提供河网线流域统计、汇水区分析国家公开基础地理数据精度较高要素完整申请流程繁琐部分数据涉密正式工程项目、政府项目遥感影像解译现势性最强可控性高工作量大需要人工经验小范围精细矢量化如果你是做毕业设计或者个人学习OSMHydroSHEDS的组合已经足够如果是正规工程项目建议走国家公开数据的申请渠道虽然慢但数据规范、属性齐全后期验收不会被挑毛病。2. 矢量数据的基础认知坐标系与格式选型说实话“矢量数据”这四个字看着简单但我在实际带人的时候发现好几个人干了几个月居然搞不清WGS84和CGCS2000在中国区域到底差多少更别提动态投影和地理坐标系之间的区别了。这一节我把自己常年踩坑的经验写清楚。2.1 坐标系选错一步错步步错中国区域的GIS项目最容易翻车的就是坐标系。常见的三类坐标系WGS84EPSG:4326GPS原生坐标系全球通用很多在线地图和开源数据的默认坐标系。CGCS2000EPSG:4490/4491等中国国家大地坐标系2008年起正式启用国内所有官方测绘成果都要求使用它。Krasovsky_1940北京54、IAG_1975西安80老坐标系很多存量数据还是这个。在实际项目里OSM下载的数据是WGS84的HydroSHEDS也是WGS84的而国内官方数据是CGCS2000的。表面上两者在中国区域的差异只有几十厘米到一米多但如果你把WGS84的数据硬套上CGCS2000的投影参数去算面积和长度误差会随着区域纬度变化且不可忽略。我的处理习惯是所有数据统一转成CGCS2000地理坐标系EPSG:4490并在此基础上定义Albers等积圆锥投影EPSG:102025或自定义中央经线用于面积计算和平面显示。这样做的好处是等积投影能保证面积量算的准确性而地理坐标系则保留了原始数据的球面坐标信息两者可以随时互转。2.2 格式选型shp还是GeoPackage做水系数据格式选型也值得说两句。以前老GIS人习惯用Shapefile格式这个格式虽然兼容性最好但它的字段名长度限制10字节、单文件2GB上限、以及一个要素类拆成多个文件shp/shx/dbf/prj等的“强迫症行为”在现代工作流里真是越来越难忍。如果你要用ArcMap或者ArcGIS Pro我建议项目中途用GeoPackage格式存储工作数据最后交付时再导出为shp。GeoPackage是单文件、无字段名长度限制、支持空间索引、性能明显优于shp而且ArcGIS 10.4.1以上版本直接支持GeoPackage读写。为什么最后还要导出shp因为需求方或者合作方可能还在用老软件shp是最大公约数但你自己干活的时候没必要被它束缚。2.3 字段设计让数据能被分析很多人建矢量数据只关心几何画得像不像完全不管属性表。等要统计各流域面积的时候傻眼了因为每个流域多边形根本没有属性关联。我做水系数据时字段设计有一条铁律属性字段决定了这个数据的上限。我给河网图层设计的字段至少包括NAME河流名称HYC河流分级干流/一级支流/二级支流等长度河流长度单位km由几何计算生成CODE对应国家基础地理信息中心发布的河流编码给流域图层设计的字段包括BASIN_NAME流域名称如长江流域、黄河流域BASIN_LEVEL流域级别一级流域/二级流域/三级流域AREA面积单位km²UP_CODE上级流域编码有了这些字段你才能后续做分类出图、按行政区统计、按流域汇总等操作。没有属性的矢量数据只是一堆线条有了结构的属性表它才变成可分析的资产。3. 从图片获取矢量数据照片配准与手工矢量化实操这一节是很多人私信问得最多的“我手上有一张流域规划图的扫描件/截图怎么把它变成ArcMap里的矢量数据”这个问题恰好踩中了热搜词“图片获取矢量数据”。先说清楚原理图片本身是栅格数据像素矩阵要把图片中的河流、边界线变成矢量数据点线面坐标集合核心思路就四个字——配准矢量化。常规流程如下在ArcMap中加载图片jpg/png/tif均可。使用“地理配准Georeferencing”工具在图片上找到至少4个已知坐标的控制点比如图上某个城市的坐标、某个湖泊的经纬度。通过控制点建立图片坐标到真实地理坐标的转换关系一阶多项式/二阶多项式。配准完成后新建一个线图层或面图层进入编辑状态参考图片手工绘制要素。3.1 地理配准的实操要点以ArcMap 10.8为例操作路径是加载图片 → 右键图层 → 选择“地理配准”工具条 → 添加控制点。关键点来了控制点选取尽量选河流拐弯处、城市中心、道路交叉口这些特征明显且不易变形的位置分布要均匀覆盖整张图不要全部集中在角落。至少4个点如果图片变形较大比如扫描件有折痕、照片是斜拍的要用二阶多项式变换需要6个以上控制点。精度检查添加控制点的过程中每次添加都会显示残差RMS误差一般控制在1个像素以内。如果个别点残差巨大直接删掉重新选。配准结果保存配准关系保存在ArcMap文档中或者可以右键栅格图层导出为带世界文件的tif.tfwx这样下次加载这个图片时它自动就带坐标系了。有一个很重要的注意点照片类的图片非扫描件要慎用手工配准。因为照片拍摄存在透视变形中心区域和边缘区域的变形程度不一致哪怕你用二阶多项式也很难完全纠正。如果原图本身精度一般强行配准矢量化出来的数据精度不可控只能用于示意和大概位置的参考千万不能用于需要精确量算的场景。3.2 手工矢量化提效技巧配准好了接下来就是体力活——把图片上的河流中心线、流域边界线一根根描出来。手工矢量化看着简单但想做到“又快又准”有几个技巧河流矢量化用“流线法”沿着河流的几何中心线描绘不要在一条河上反复分段。如果某条河中途有分叉就按实际河道分成多条线要素属性表里河流编码一致但从几何上是独立的线。开启“捕捉Snapping”ArcMap编辑环境里把捕捉工具条的“端点”“顶点”“边”全部开启这样相邻两条段的连接处不会出现“看起来连着、放大后断开”的经典问题。线要素的“打断相交线”工具画完一批河网后用“高级编辑”工具条下的“打断相交线Planarize Lines”将交汇处统一打断成节点这样后续做网络分析的时候才能正确识别河流的交汇关系。3.3 竣工图线状矢量数据能不能后补进ArcMap再回答一个实操性很强的热词问题“竣工图线状矢量数据可以后补进arcmap里面吗”答案是可以而且这就是GIS日常工作的一部分。竣工图一般以CAD格式dwg/dxf交付里面包含了竣工后的管线、道路、水系边线等线状要素。把这些线状要素补录进ArcMap的现有数据库标准流程是CAD数据导入在ArcMap中可以直接添加dwg数据ArcGIS会把dwg中的线Polyline、注记Annotation、点Point分别读取为独立图层。坐标系定义大部分CAD图纸是“没带坐标系”的或者使用无投影的独立坐标。导入ArcMap后先用“定义投影”工具给这个CAD数据明确坐标系再用“投影”工具转换到你的目标坐标系。这里要注意CAD图纸的单位毫米/米和坐标系一定要先确认我在实际项目中遇到过把毫米当成米导入结果全部数据缩小了1000倍的惨案。拓扑检查新补录的线和现有要素之间可能存在重叠、空隙、悬挂点。在ArcMap里用“拓扑”工具检查或者更简单地用“相交Intersect”工具找出重叠部分“缓冲Buffer擦除Erase”找出空隙。这个流程是几乎每个做管线、水利、交通项目的人都会遇到的不要怕熟练了十分钟能完成一套数据的合并入库。4. 实操过程全国水系与流域数据的处理全流程说完了基础原理和单项操作这一节我完整串一遍项目实操流程。这套流程不是我拍脑袋想的而是我真的用这套逻辑处理过全国尺度的水系数据中间踩了不少坑这里把最能复用的部分整理出来。4.1 数据预处理从OSM提取水系从OSM获取水系数据最常见的方式是从Geofabrik下载中国区域的pbf格式原始数据然后用工具提取水系。我用的是osmium-tool和PostGISosm2pgsql但如果你不想搞数据库也有一个更轻量的路径从Geofabrik下载china-latest.osm.pbf约几百MB。用osmium tags-filter过滤出水系相关的要素osmium tags-filter china-latest.osm.pbf \ w/naturalwater \ w/waterwayriver \ w/waterwaystream \ w/waterwaycanal \ -o water_chn.osm.pbf在ArcMap中用“OSM Editor”插件或者直接用ArcGIS Pro的“OSM数据加载”工具将pbf转为要素类。投影转换到CGCS2000地理坐标系字段整理。这一步完成后你手上就有了一张全国范围的河网线数据。但真实情况是它非常乱——河流在流域边界处不连续、干流与支流拓扑错误多、部分区域数据缺失。所以直接用还不行。4.2 河流断线修复三种修法OSM河网数据在全国尺度上最大的问题是断线。明明是一条河因为不同人分头编辑数据里被拆成了几十段段与段之间没有公共节点或者节点之间还有一个细微的缝隙。这时要做的是把断裂的线段连接成完整的河流方法一交互式处理。在ArcMap中开启编辑用“合并Merge”工具把同一条河的多个线段合并为一个要素然后用“节点捕捉”把首尾相连。适合河流数量少的局部区域。方法二脚本批量修复。如果你会Python写一个arcpy脚本遍历线要素类按属性字段中的“河流编码”分组然后按距离阈值做“融合Dissolve”再对融合后的多部件要素按“拆分多部件要素Multipart To Singlepart”拆开。批量处理效率很高几千条断裂的线几下就能修完。方法三使用“修复几何Repair Geometry”工具。这个工具用来修复几何错误自相交、空几何、退化几何但不能修复“断线”。所以它是修线前的必要前置步骤而不是修线本身。4.3 流域边界提取与处理流域边界我用的是HydroSHEDS数据它提供12个级别的流域划分中国境内可以提取出全部一级到六级流域。处理步骤从HydroSHEDS官网下载Asia区域的流域边界矢量数据格式是shp。用“按位置选择Select By Location”将中国国界范围内的流域多边形选出来。用“融合Dissolve”按BASIN_LEVEL字段将同级别流域合并成大面。用“裁剪Clip”按中国国界裁掉国界外的部分。属性表补上中文名称使用国家发布的“中国流域分区代码”把BASIN_ID关联成可读的流域名称。这一步用ArcMap的“连接Join”绑定数据表即可。值得提醒的是流域边界是严格的分水岭边界不会和行政区边界重合。你如果拿着省界去裁剪流域得到的是“省内流域范围”而不是一个完整的流域——这两者在分析含义上差很多做统计的时候一定要分清楚。我做数据时保留了“全流域”和“国内部分”两个字段方便后续两种统计口径都支持。4.4 拓扑检查与质量验证数据合到一起之后一定不要跳过拓扑检查这一步。ArcMap的拓扑检查在“ArcToolbox → 数据管理工具 → 拓扑”里如果只是快速检查不建立拓扑数据库也可以直接在ArcMap的“几何检查”里做。我一般检查这几项检查项目工具合格标准线要素是否存在悬挂点拓扑规则“不能有悬挂点”允许少量短悬挂50m长悬挂必须处理面要素之间是否存在空隙拓扑规则“不能有间隙”流域面之间不能有空白区域面要素之间是否重叠拓扑规则“不能有重叠”同级流域面之间零重叠线要素是否自相交修复几何工具零自相交除了几何拓扑还要做属性逻辑检查比如每条河流要有名称、每个流域要有面积字段、面积应该大于0等等。做完这一步一套能用的全国水系及流域矢量数据就算正式建成了。把河网线、流域面、湖泊水库点三个图层打包配上定义好的符号样式表河流按级别设置线宽流域按级别铺不同颜色一个能够直接放进大屏展示或者生态分析项目里的数据底座就出来了。5. 常见问题与排查技巧实录做这类数据整理我敢说每个人都会遇到下面这几个经典问题。这里把现象、原因和解决办法列全你遇到的时候直接对照排查。5.1 矢量数据与底图对不上偏移几公里这是最让人崩溃的问题。排查顺序先查两个图层的“坐标系”是否一致。右键图层属性 → 源 → 查看“地理坐标系”那一行。如果一个是WGS84一个是CGCS2000在中国区域偏差可能只有几十厘米到几米这个偏差一般肉眼能看出来但不大如果一个是WGS84一个是Web MercatorEPSG:3857那偏差是公里级的因为Web Mercator根本不是地理坐标系它是有投影的平面坐标直接叠在一起肯定错位。如果坐标系一致但还是偏移检查是否用了动态投影。ArcMap的“数据框属性”里如果开了动态投影两个坐标系的图层会实时投影对齐但性能差且可能出现显示偏移。我建议把底图和你的工程数据统一到同一个坐标系后再叠加。如果都做了还对不上可能是数据本身有质量问题。用“缩放至图层”看看这个要素类的范围和它的属性里的坐标范围是否合理。5.2 河流线相交处出现“假交叉”“假交叉”指的是一条河的线在空间上穿过另一条河的线但实际上两条河并不相交比如一条是地上河一条是地下暗河或者一条高架水渠从河上跨过。这种问题在做网络分析寻找上下游关系时会导致完全错误的结果。处理方法是在属性表里增加一个字段标记河流的类型地表河/地下河/人工渠道然后对“地表河”这一子集做拓扑处理不要无脑把所有线都在交点处打断。5.3 流域面积算出来比官方数据大流域面积统计偏大主要原因是边界数据与真实分水岭有偏差。HydroSHEDS的分辨率是15弧秒约500m在等高线密集的山区500米分辨率的DEM提取的分水岭位置会有位移导致面积偏大或偏小。如果在项目中需要高精度的流域面积唯一的正道是用更精细的DEM数据ALOS 12.5m或30m分辨率自己提取流域边界。ArcMap的水文分析工具箱里提供了完整的“填洼 → 流向 → 流量 → 分水岭”流程只是计算量大、步骤多需要单独写一篇博文来展开这里先提一嘴方向。5.4 批量出图时水系符号显示不美观用按属性制图功能按照HYC字段河流等级设置不同线宽和颜色比如一级河流长江、黄河等线宽2.5pt颜色深蓝二级支流线宽1.5pt颜色中蓝三级及以下支流线宽0.8pt颜色浅蓝这里有个小技巧在ArcMap中设置透明度35%的白色“光晕Halo”当河流穿过背景色变化较大的地图时河流符号不会糊成一团。这个方法非常适合做挂图、大屏展示。5.5 大数据量shp文件加载卡顿全国水系面数据如果合并成单一shp文件体量可能超过2GBArcMap加载一次要几十秒缩放平移更是卡到怀疑人生。解决办法按区域分块存储比如每个省级行政区一个要素类用File Geodatabase管理需要出图或者分析时按“按位置选择”动态提取。使用ArcGIS Pro替代ArcMapArcGIS Pro的64位架构对大数据的处理速度明显更快还能利用GPU加速渲染。建立空间索引ArcGIS会自动为GDB里的数据建立空间索引但shp文件不会自动建需要手动在目录里右键数据 → 属性 → 索引 → 添加空间索引。6. 从数据到应用水系矢量数据的三种典型扩展最后聊一聊数据建好之后的扩展应用这三个方向是我在实际项目里验证过最有价值的也是后续可以继续深化的方向。河网密度计算利用线密度分析Line Density工具以单位面积内的河流长度作为指标可以快速识别一个区域的“水网密集程度”。结合地形和人口数据能判断一个地区的洪涝风险等级。我在一个流域规划项目中用这套数据跑出的河网密度分布图直接成了报告的核心附图。河流缓冲区分析对河网做多级缓冲区比如主干流100米、支流50米叠加土地利用数据可以计算不同人类活动耕地、建设用地对河道的侵占程度。这是“河湖管理范围划定”项目最常用的方法。缓冲区半径的选取依据用途来定生态保护一般用30~100米规划管理一般用200~500米不是越大越好。流域汇水区统计把流域面数据与降水数据栅格做“分区统计Zonal Statistics”可以快速算出每个流域的年均降水量。如果再叠加人口、GDP数据的空间化图层还能算出“单位流域面积的经济产出”这类有趣又有用的指标。写到这中国水系及流域矢量数据的从无到有、从图片到能用的矢量图层、从单一数据到分析底座的整个闭环已经梳理完了。在GIS这行干了这么多年我的一个体会是矢量数据的价值不在于那几根线条有多标准而在于你拿到之后能不能快速把它变成决策的依据。希望这篇记录能帮你在处理水系数据时少走几步弯路如果你在实操中遇到连接节点、坐标系转换或者拓扑修复上的具体细节问题也欢迎带着具体报错来聊。本文还有配套的精品资源点击获取
返回列表