ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

嘉陵江水系地形图shp文件在ArcGIS中的加载、坐标校验与避坑指南

嘉陵江水系地形图shp文件在ArcGIS中的加载、坐标校验与避坑指南 简介这份资源面向GIS初学者、地理科研人员及需要嘉陵江流域空间数据的学生提供长江流域嘉陵江水系的地形图与矢量文件可直接在ArcGIS中打开使用。压缩包共63个文件约52.77MB包含shp矢量文件湖区、河流等要素、dbf属性表、prj投影信息、shx索引以及adf、nit、dat等栅格地形数据另附mxd工程文件、jpg、pdf、eps成图结果兼顾数据与出图需求。已有1133人学习下载。对于不熟悉GIS操作的用户可直接使用出图文件夹中的jpeg、PDF、EPS图片省去制图流程熟悉ArcGIS的用户则能通过mxd文件链接图层一键生成流域地形图并自行调整区域范围。数据经收集整理加工适合学习科研场景便于快速获取嘉陵江水系地形与河流矢量底图开展空间分析与制图练习。1. 嘉陵江水系地形图 shp 文件从拿到数据到在 ArcGIS 里跑通的第一公里如果你手头正好有一份长江流域嘉陵江水系的地形图 shp 格式矢量文件却不确定它能不能直接进 ArcGIS、坐标系对不对、字段能不能用那这篇就是写给你的。嘉陵江是长江上游左岸最大支流横跨陕甘川渝四省市流域内山地丘陵占比极高地形图矢量数据在水文分析、坡度提取、淹没模拟、工程选线里都是底图级别的存在。这份资源的核心价值在于它把嘉陵江水系的地形要素以 shp 格式组织好省掉了你从零数字化或者从 dwg 转 shp 的那一大段折腾。适合做流域分析的水利从业者、做 GIS 二次开发比如 ArcGIS Engine 基于 C#的工程师以及需要长江中游 shp 数据做区域对比的研究人员。但 shp 不是万能容器它有一堆历史包袱下面从数据本身讲到实操再讲坑。2. 拆开 shp 文件包嘉陵江地形图里到底装了什么2.1 shp 不是单个文件而是一组同名文件很多人第一次拿到 shp 格式矢量文件看到文件夹里一堆同名不同后缀的文件就懵了。shp 只是几何体的主文件真正让 ArcGIS 能正确读取属性、坐标系和索引的是下面这组兄弟文件。缺任何一个轻则字段丢失重则直接打不开。后缀作用缺失后果.shp存储几何要素点/线/面无法打开.shx几何索引加速定位能打开但性能差部分操作报错.dbf属性表存字段和记录能打开但无属性只剩空壳几何.prj坐标系定义WKT 文本坐标未知叠加时错位.cpg字符编码声明汉字字段乱码或只显示 3 个汉字.sbn/.sbx空间索引不影响打开影响查询速度嘉陵江水系地形图这类数据常见做法是打包成 zip 分发解压后务必整个文件夹一起用不要只把 .shp 拖进 ArcGIS。我一般会先看一眼 .prj 里的内容确认是地理坐标系GCS还是投影坐标系PCS。地形图如果要做面积、长度量算必须是投影坐标系否则算出来的度没有物理意义。2.2 地形图矢量数据的图层组织逻辑嘉陵江流域地形图 shp 通常不会只有一个图层。按地形要素分常见的有等高线、高程点、水系线、水系面、流域边界、居民地等。等高线是线要素高程点可以是点要素流域边界是面要素。不同图层叠加时坐标系必须一致否则会出现“线跑到面外面”的经典翻车现场。判断图层组织是否合理看三个点一是等高线的高程字段是不是数值型不是文本二是水系线有没有上下游拓扑关系至少要有流向字段三是流域边界是不是闭合面。如果拿到的是 dwg 转 shp 来的数据还要特别检查尖锐角——dwg 里的圆弧转成 shp 后可能变成大量短直线段产生尖锐角影响后续裁剪和出图。ArcGIS 里有检查尖锐角的插件思路也可以自己用 Python 脚本算相邻线段夹角。2.3 坐标系与投影嘉陵江流域该用什么嘉陵江流域跨度大从北纬 29° 到 34° 左右经度 103° 到 109°。如果原始数据是 WGS84 地理坐标系EPSG:4326直接量算面积会得到平方度没有意义。常见做法是投影到 CGCS2000 高斯克吕格投影按 3 度带分带。嘉陵江主体落在 105°E 到 108°E 之间对应 3 度带的中央经线 105°E带号 35和 108°E带号 36。如果数据跨带要么统一到一个带要么用 Albers 等积投影做全流域分析。在 ArcGIS 里查看当前坐标系右键图层 → Properties → Source看 Spatial Reference。如果显示 Unknown说明 .prj 缺失或损坏。补救办法是用 Define Projection 工具手动指定但前提是你知道原始坐标系是什么。不知道的话只能靠比对已知地物来推断这是血泪经验。3. 把嘉陵江 shp 导入 ArcGIS从加载到坐标校验的完整操作3.1 加载数据与字段检查打开 ArcGIS Pro 或 ArcMap10.8 及以下版本注意 .NET Framework 3.5 SP1 依赖用 Add Data 把 shp 加进来。加载后第一件事不是画图而是打开属性表看字段。重点看高程字段、名称字段、编码字段的类型和值。# ArcPy 快速检查 shp 字段与坐标系 import arcpy shp_path rD:\jialing\terrain\jialing_contour.shp # 列出所有字段名称、类型、长度 fields arcpy.ListFields(shp_path) for f in fields: print(f.name, f.type, f.length) # 读取坐标系信息 desc arcpy.Describe(shp_path) print(坐标系:, desc.spatialReference.name) print(类型:, desc.spatialReference.type) # Geographic 或 Projected这段脚本的逻辑是ListFields 返回字段对象列表type 为 Double 的才是数值型高程String 的只能当文本用。Describe 拿到的 spatialReference.type 如果是 Geographic说明没投影后续面积量算要先投影。参数上shp_path 换成你自己的路径注意路径里不要有中文和空格ArcPy 对中文路径的支持时好时坏。3.2 坐标系校验与投影转换如果发现是地理坐标系用 Project 工具转投影。不要用 Define Projection那个只改标签不换坐标用错了数据就废了。# 将地理坐标系 shp 投影到 CGCS2000 3度带 import arcpy in_shp rD:\jialing\terrain\jialing_contour.shp out_shp rD:\jialing\terrain\jialing_contour_proj.shp # CGCS2000 3度带 中央经线108E 的 WKID 为 4545 左右按实际带号选 out_coord arcpy.SpatialReference(4545) arcpy.Project_management(in_shp, out_shp, out_coord) print(投影完成:, out_shp)Project_management 的第三个参数是目标坐标系可以用 WKID 或 .prj 文件。4545 对应 CGCS2000 / 3-degree Gauss-Kruger CM 108E嘉陵江中下游适用。如果数据在 105E 附近换成对应 WKID。转换后重新量算一条已知长度的河流和实际里程对比误差在合理范围才算通过。3.3 用嘉陵江 shp 做裁剪与提取拿到全流域地形图后通常只需要某个子区域。用 Clip 工具以县域行政区划边界 shp 或自定义面为裁剪框。# 用流域边界裁剪等高线 import arcpy clip_feature rD:\jialing\boundary\jialing_watershed.shp in_features rD:\jialing\terrain\jialing_contour_proj.shp out_features rD:\jialing\terrain\jialing_contour_clip.shp arcpy.Clip_analysis(in_features, clip_feature, out_features) print(裁剪完成)Clip_analysis 的第二个参数是裁剪边界输出只保留边界内的部分。注意裁剪框的坐标系必须和输入一致否则工具会报错或结果错位。如果裁剪后等高线出现断头检查裁剪框是不是有自相交或尖锐角用 Repair Geometry 修一下。4. 避坑与排查嘉陵江 shp 在 ArcGIS 里最容易翻车的五件事4.1 汉字字段只显示 3 个汉字现象属性表里名称字段显示不全比如“嘉陵江干流”只显示“嘉陵江”。原因shp 的 .dbf 默认用系统编码ArcGIS 对汉字字段宽度按字节算一个汉字占 2 字节字段宽度设小了就截断。解决在 Catalog 里右键 shp → Properties → Fields把文本字段长度改大比如 50或者用 .cpg 文件声明 UTF-8。改完重新加载。4.2 加载后坐标显示为 Unknown现象图层能打开但 Properties 里坐标系是 Unknown叠加在线地图时位置飘到国外。原因.prj 文件缺失或内容为空。解决如果知道原始坐标系用 Define Projection 指定不知道就用已知地物比对比如找一条已知坐标的桥梁或城市中心点反推坐标系。千万别随便选一个选错了后面全错。4.3 裁剪或相交时报“几何无效”现象Clip、Intersect 等工具报错提示 invalid geometry。原因dwg 转 shp 或手工数字化时产生自相交、尖锐角、重复点。解决用 Repair Geometry 工具批量修复勾选 Delete Features with Null Geometry。修复后再跑一次检查尖锐角的脚本确认没有残留。4.4 属性表里高程字段是文本型现象想用等高线做坡度分析发现高程字段是 String无法参与计算。原因数据生产时把高程当名称录入或者从 Excel 导入时格式没转。解决新建一个 Double 字段用 Field Calculator 把文本转数值。注意有些值带“米”字要先替换掉。# 文本高程转数值字段 import arcpy shp rD:\jialing\terrain\jialing_contour_proj.shp arcpy.AddField_management(shp, ELEV_NUM, DOUBLE) # 用 Python 表达式去掉非数字字符后转换 expr float(!ELEV!.replace(米,).strip()) if !ELEV! else None arcpy.CalculateField_management(shp, ELEV_NUM, expr, PYTHON3)CalculateField 的表达式里用了 replace 和 strip处理常见的单位后缀和空格。如果字段里有中文括号或其他符号按同样思路扩展。4.5 导出为 GeoJSON 或 WKT 后坐标变了现象把 shp 导出为 GeoJSON 或 WKT 文本再导入其他工具位置偏移。原因GeoJSON 规范要求 WGS84 经纬度而你的 shp 是投影坐标导出时没做逆投影。解决先 Project 回 GCS WGS84再导出。如果只是要 WKT 做记录用 Project 后的数据生成。5. 进阶用法用嘉陵江 shp 做流域分析与批量出图5.1 从 DEM 提取水系并与现有 shp 叠加验证如果你手头还有嘉陵江流域的 DEM可以用 ArcGIS 的水文分析工具提取水系再和这份地形图 shp 里的水系线叠加对比。常见做法是填洼 → 流向 → 流量累积 → 栅格河网 → 矢量化。提取出的河网和现有 shp 套合如果走向基本一致说明数据可信如果偏差大检查 DEM 分辨率和投影是否一致。# 从 DEM 提取河网并转为 shp import arcpy from arcpy.sa import * arcpy.CheckOutExtension(Spatial) dem rD:\jialing\dem\jialing_dem.tif out_flowdir rD:\jialing\hydro\flowdir.tif out_accum rD:\jialing\hydro\accum.tif out_stream rD:\jialing\hydro\stream.tif out_shp rD:\jialing\hydro\stream.shp # 填洼 dem_fill Fill(dem) # 流向 flowdir FlowDirection(dem_fill) flowdir.save(out_flowdir) # 流量累积 accum FlowAccumulation(flowdir) accum.save(out_accum) # 阈值提取河网阈值按流域面积调嘉陵江这种量级一般用 1000 以上 stream Con(accum 1000, 1) stream.save(out_stream) # 栅格河网转矢量 arcpy.RasterToPolyline_conversion(out_stream, out_shp, ZERO, 0, SIMPLIFY) print(河网提取完成)阈值 1000 是流量累积的像元数值越小河网越密。嘉陵江上游山区可以用 500 到 1000中下游丘陵用 1000 到 2000。提取后和地形图 shp 里的水系线对比重点看干流走向和支流汇入点。5.2 批量出图时插入动态表格做流域报告时经常要批量出图每张图带一个属性表。ArcGIS Pro 里可以用布局的动态表格功能把 shp 的属性表嵌到图面。如果用的是 ArcMap可以用 Data Driven Pages 配合 Excel 表格。注意汉字字段名在动态表格里可能只显示 3 个汉字提前把字段别名改成英文或短名。5.3 导出为 3D Tiles 或 WKT 的取舍有人问 shp 转 3dtiles 怎么做。地形图 shp 是二维矢量转 3D Tiles 需要先有高程或拉伸规则。常见做法是等高线加高程点生成 TIN再转 3D。如果只是要 WKT 做坐标记录用 Project 后的数据导出别直接导投影坐标。从那以后我每次拿到新的 shp 数据都强制走一遍看 .prj → 查字段类型 → 量算已知长度 → 修复几何 → 再开工。这套流程帮我省掉了无数次返工。希望帮到你。本文还有配套的精品资源点击获取
返回列表