ARTICLE DETAIL

资讯详情

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

GIS矢量数据坐标系校正与数据预处理:从Shapefile到ArcSWAT的完整实践

GIS矢量数据坐标系校正与数据预处理:从Shapefile到ArcSWAT的完整实践 简介全国矢量数据图大全是一份面向GIS从业者、城市规划与交通分析人员的全国地理信息数据集整合2005年铁路、路网及河流等矢量要素可用于历史路网复盘、空间查询与专题制图。资源包为RAR格式共161个文件、约11.25MB以SHP、SHX、DBF、PRJ等矢量文件为主辅以SBN/SBX空间索引、XML元数据、ADF栅格数据及MXD工程文档兼容ArcGIS等主流GIS平台便于直接加载、管理与二次分析。已有2567人学习下载适合需要全国尺度路网数据做项目研究、教学演示或区域对比的读者。包内道路数据覆盖高速公路、国道、省道及乡道等级铁路数据包含线路位置、类型与车站信息河流等自然要素辅助空间分析同时提供Lambert投影相关配置可减少大范围制图坐标偏差直接支撑制图、连通性分析和规划决策。1. 全国矢量数据图一套2005年的路网铁路水系底图到底能干什么做GIS项目最烦的不是算法是开局发现缺底图。临时要用全国路网、铁路和主要河流翻遍硬盘只有几个城市的数据几块拼起来还接不上光找数据就能耗掉一个上午。这套全国矢量数据图就是把2005年全国铁路数据、2005年全国路网矢量数据、河流水系等常用要素整理成 Shapefile 格式拖进 ArcGIS 就能直接当底图和分析输入。它解决的是“拿到一个题目却没基础数据”的窘境特别适合做宏观交通规划、区域综合分析、SWAT 流域建模前期准备的从业者。数据年份偏老但作为历史底图、空间分析基底和教学数据集完全够用适合先下载下来再按实际需求切片处理。2. 资源包自检三步图层清单、坐标系、属性字段很多人的习惯是拿到压缩包先解压、再直接往 ArcMap 里拖拖完发现图层是空的或位置不对又回头查反而更慢。我的习惯是花五分钟做一次自检文件全不全、坐标系认不认、字段能不能查。这三项确认了后面所有操作都是在确定的地基上做的踩坑概率少一半。2.1 图层与文件格式先认清 Shapefile 三件套一个 Shapefile 不单指一个.shp文件而是一个由多个文件组成的要素类。最小组合是.shp几何、.shx几何索引、.dbf属性表这三个文件缺一个都无法正常打开。带投影信息的还会多一个.prj带编码信息的可能还有.cpgArcMap 生成空间索引时还可能产生.sbn和.sbx。在资源包里看到一堆同名不同后缀的文件不是重复是同一个图层拆开的配套文件。# 解压后的典型目录结构 01_rail/ 2005_national_rail.shp 2005_national_rail.shx 2005_national_rail.dbf 2005_national_rail.prj 02_roads/ 2005_national_road.shp 2005_national_road.shx 2005_national_road.dbf 03_rivers/.shp存的是几何坐标它决定要素长什么样.dbf存的是属性字段它决定你能查到“这个要素叫什么、属于什么等级”.prj决定坐标系。用 ArcCatalog 打开这组文件时软件会自动把配套文件全部加载。如果发现某一组里缺.shx通常的表现是图层能建连接但不出图缺.dbf则能显示图形但打不开属性表。遇到这种情况别硬修直接重新解压一份原始文件比重建文件更省时间。解压时也建议把所有数据放进同一个英文目录避免后续工具在中文路径下解析失败。2.2 坐标系核对ArcCatalog 里两分钟看明白下一步看坐标系。打开 ArcCatalog在“文件夹连接”面板里定位到数据目录右键图层文件选择“属性”切到“XY 坐标系”标签页。如果数据带.prj这里会直接显示坐标系全称。2005 年全国路网、铁路这类数据常见两种一种是地理坐标系名称类似GCS_Xian_1980或GCS_WGS_1984另一种是投影坐标系名称里会带Gauss_Kruger、Albers等字眼还可能包含中央经线或分带号。属性页显示的名称类型单位来源习惯GCS_WGS_1984地理坐标系度GPS 数据、互联网地图导出GCS_Xian_1980地理坐标系度国内测绘成果、2000 年前后数据GCS_Beijing_1954地理坐标系度早期军标、地质数据CGCS2000_3_Degree_GK_CM_117E投影坐标系米国家测绘新基准如果没有.prj属性页会显示“未知”或“未定义”就像给了张没有比例尺的图纸看着能画但没法对位置。还有一个快速判断办法在“预览”标签页看图层范围坐标数值在一百二十几、三十几这种量级基本是经纬度地理坐标系坐标数值变成几百上千万量级基本是投影坐标系。这套 2005 年数据如果出现多层叠加对不上八成就是坐标系名称没提前核对。2.3 属性字段检查这份路网能做什么查询最后打开属性表看字段。图层上右键选择“打开属性表”不要急着翻行数据先把列头扫一遍。全国路网一般带道路等级、名称或编号字段铁路数据一般有线路名称、单双线标识部分还带运行状态河流数据则区分河流、湖泊、沟渠。字段类型分为文本型和数值型后面做 SQL 查询时文本值要加单引号数值不加这一条的出错率非常高。提示2005 年的数据里字段名可能是拼音缩写例如 DLBM、DLMC、XLMC。建议先选中几个要素对照地图判断含义确认后再做筛选避免把“道路类型”当成“道路等级”用。字段检查的核心作用是确认这套数据能支撑什么分析如果路网带“等级”字段就能筛出高速和国道如果铁路带“线路名称”字段就能按线路名分组渲染如果河流字段里有左右岸信息还能做流向辅助判断。字段越规范做样式和统计分析越省事。自检完这三项再往下进入正式的坐标校正流程。3. 在 ArcGIS 中校正坐标系备份、定义投影、投影转换2005 年这批数据最常见的坑是没有.prj或者坐标系是老的西安80基准。直接拖进地图文档和手头的 CGCS2000 边界叠在一起可能只偏差几十米也可能偏出几公里。坐标校正的完整顺序是先备份原始文件再用“定义投影”补全坐标信息最后用“投影”工具转到目标坐标系。顺序搞反就会出现“定义完投影图形位置变了”的误会。3.1 先备份原始文件路径保持全英文先把整个解压目录复制到项目工作目录并确认路径里没有中文和空格。虽然新版 ArcGIS 对中文路径宽容了不少但很多第三方工具和 Python 脚本仍然会在中文路径上翻车。数据量大的时候我还会顺手把原始的.prj和.dbf单独复制一份作为存档后面改坏了能随时回头。mkdir D:\gis_data\origin mkdir D:\gis_data\output xcopy D:\downloads\全国矢量数据图\* D:\gis_data\origin\ /E /I上面这段是标准的 Windows 命令/E代表复制所有子目录/I自动创建目标目录。复制完成后在 ArcCatalog 里刷新目录树确认所有 Shapefile 都能正常预览再开始下一步。这一步看起来多余但实际操作里“改坏原文件后没法找回”的情况太多了备份就是后悔药。3.2 定义投影Define Projection 到底改了什么如果属性页里坐标系显示“未知”需要先手动指定。工具路径是 ArcToolbox → 数据管理工具 → 投影和变换 → 定义投影。这个工具有个关键概念它只修改元数据不移动几何坐标。也就是说它告诉 ArcGIS“这份数据用的是哪个坐标系”但不会把经纬度变成米也不会把西安80变成 CGCS2000。# 在 ArcGIS Python 窗口中运行 import arcpy arcpy.env.workspace rD:\gis_data\origin arcpy.env.overwriteOutput True # 为 2005 年铁路数据定义西安80地理坐标系 arcpy.DefineProjection_management( in_dataset2005_national_rail.shp, coor_systemGCS_Xian_1980 )注意coor_system参数必须写完整的坐标系名称常见写法是GCS_Xian_1980、GCS_WGS_1984、CGCS2000。定义完成后再打开图层属性就能看到坐标系信息了。如果数据原本是投影坐标系却定义了地理坐标系后续转换会得到错误的坐标范围所以这一步必须结合第 2.2 节的判断来填不能靠猜。3.3 投影转换用 Project 把矢量转到目标坐标系坐标信息补齐后用“投影”工具做实际转换。工具路径是 ArcToolbox → 数据管理工具 → 投影和变换 → 要素 → 投影。这个工具的参数比较多关键是三个输入要素、输出坐标系、地理坐标系变换。# 将西安80地理坐标转为CGCS2000投影坐标 arcpy.Project_management( in_dataset2005_national_rail.shp, out_datasetrD:\gis_data\output\rail_cgcs2000.shp, out_coor_systemCGCS2000_3_Degree_GK_CM_117E, transformXian_1980_To_WGS_1984_2 )out_coor_system可以写完整名称也可以写 EPSG 代码。以全国范围为分析对象时更常用的做法是转成 Albers 等积投影减少面积变形只做局部区域时用高斯三度带投影更合适。transform参数是不同基准面之间的转换方法不同地区有不同推荐参数没有统一答案。如果转换后图层和目标底图仍然错位多尝试几种变换方法观察哪个误差最小。目标情况推荐输出坐标系说明省级或全国面积统计Albers 等积投影面积变形小城市级叠加测绘图层CGCS2000 三度带分带与最新成果一致Web 地图发布GCS_WGS_1984 / EPSG:4326兼容 OpenLayers、GeoServer转换完成后把输出图层拖进地图文档再叠一个已知坐标系的参考图层肉眼确认线状要素是否贴合。这一步是坐标校正成功与否的唯一验证标准。4. 从全国数据里抽出局部Clip 裁剪、按属性提取与 SWAT 准备全国矢量数据范围大、要素多实际分析往往只需要一个市、一个流域或者一个缓冲区。这时候有两个常用手段按空间范围裁剪、按属性条件提取。很多人把这两个混着用导致导出的数据不是多了就是少了。我处理 2005 年路网数据的习惯是先按属性筛出需要的类别再做空间裁剪最后检查要素数量。4.1 空间范围裁剪Clip 工具和三个参数细节用行政区边界或自建面要素裁剪路网工具路径是 ArcToolbox → 分析工具 → 提取分析 → 剪裁。输入要素是路网裁剪要素必须是面。如果手头只有线边界先做一次“缓冲区”缓冲距离设 0 米把闭合线转成面再执行裁剪。# 剪裁全国路网到研究区范围 arcpy.Clip_analysis( in_featuresrD:\gis_data\origin\2005_national_road.shp, clip_featuresrD:\gis_data\output\研究区面.shp, out_feature_classrD:\gis_data\output\研究区路网.shp )裁剪时最容易忽略的是环境变量中的输出坐标系。ArcGIS 默认输出坐标系与输入一致如果研究区边界是 CGCS2000而路网是西安80裁剪结果会继承输入坐标系后续叠加又乱。所以执行前在“环境”里把输出坐标系同步设为与裁剪要素一致或者干脆在裁剪结束后立刻做一次投影转换。裁剪完成后检查输出要素的字段结构是否保留完整有时输出结果会丢掉个别字段多半是输入要素字段类型兼容问题。4.2 按属性提取Select by Attributes 之后再导出如果只需要高速公路和国道不用全量裁剪。打开路网图层属性表选择“按属性选择”在 SQL 查询对话框里输入条件。注意文本值必须加单引号数值类型不加字段名如果是拼音缩写先用第 2.3 节的方法确认含义。SELECT * FROM 2005_national_road WHERE 道路等级 高速 OR 道路等级 国道执行后图形上会高亮选中要素但图层本身没有变化。下一步在图层上右键选择“数据” → “导出数据”导出对话框中“导出”选项要选“所选要素”保存路径写英文目录。这里有个非常常见的翻车点导出后打开一看还是全部要素就是“导出”选项仍停留在“所有要素”。 导出完成后可以在属性表底部查看记录数对比原表筛选前后的数量确认筛选条件真的生效了。4.3 为 ArcSWAT 小流域分析准备矢量数据ArcSWAT 做小流域分析需要用到的矢量数据最常见的是河流水系、流域边界和道路网。2005 年这套数据里的河流矢量可以在 SWAT 建模时用于 DEM 河网“烧录”也就是把矢量河道嵌入 DEM防止水文分析把河道错误地识别为山脊。路网数据则可以用于生成 HRU 的道路缓冲带辅助判断不透水面积和径流路径铁路数据参与水文计算的场景较少更多是作为背景底图。具体做法先把全国河流裁剪到研究区范围再在 ArcSWAT 数据准备阶段选择该河流矢量作为 DEM 的“河流输入”。这里强调两点一是河流矢量的坐标系必须和 DEM 完全一致统一到同一投影坐标系后再操作二是河流数据如果跨出研究区边界要先在矢量端处理干净否则 SWAT 生成河网时容易出现回流或断头。道路数据的处理同理导入前确保字段结构清晰能区分路面类型和宽度属性才能在后续的参数表里被正确读取。5. 避坑与排查坐标系错位、字段乱码、空输出的现场记录数据资源拿回来不是万无一失。整理一份实际踩过的坑记录按“现象 → 原因 → 解决”写清楚遇到同类问题可以直接对照处理。5.1 路网和行政边界叠不上偏差几百米现象把 2005 年路网和手头的省级行政区边界拖进同一个地图文档路网整体偏移有的地方偏出几百米甚至更远缩放后线条和边界完全不在一个位置上。原因两个图层用了不同坐标基准。常见的是路网坐标信息缺失ArcMap 默认按 WGS84 处理而行政区边界是 CGCS2000 或西安80基准面差异导致整体平移。另一个原因是原始数据本身就是投影坐标却被定义了地理坐标几何位置按度为单位显示地图比例明显异常。解决先打开两侧图层的属性页把坐标系名称抄出来对比。对缺失坐标系的那一侧执行“定义投影”按第 2.2 节判断结果填基准再对需要统一的一侧执行“投影”选择正确的转换方法。处理完重新添加图层用“按位置选择”工具抽查几条路网是否落在行政区范围内。5.2 属性表打开后中文字段乱码现象属性表正常打开但字段值是“”或乱码尤其在用筛选语句按线路名查找时什么都不匹配完全没法用。原因2005 年前后的矢量数据属性表大多使用 GBK 或 GB2312 编码而当前 ArcGIS 环境默认读取 UTF-8编码不匹配导致乱码。.dbf文件没有附带.cpg文件时最常见。解决先看原文件是否带有.cpg文件有的话用记事本打开确认编码。没有的话把.dbf用支持编码转换的工具另存为 UTF-8 格式的 CSV再通过 ArcGIS 的“添加 XY 数据”或“连接表”方式重新关联。如果数据要批量使用更稳妥的办法是把这组图层导入个人地理数据库Personal Geodatabase导入时可以设置字符集能绕开大部分乱码问题。处理完记得用属性表里的“排序”功能抽查几条中文记录是否恢复正常。5.3 Clip 结果为空工具提示完成但输出没有要素现象执行裁剪后工具提示正常完成但输出图层打开后是空的属性表记录数为 0。原因输入要素和裁剪要素的坐标系不一致两个图层在视图上看似重叠实际空间位置没有相交。最常见的是路网是投影坐标裁剪要素是经纬度坐标ArcGIS 的剪裁工具需要同一空间参考才能真正判断相交关系。解决裁剪前用“投影”把两个图层的坐标系统一再执行一次 Clip。也可以在裁剪之前先用“按位置选择”功能输入图层选路网选择“与裁剪要素相交”统计一下相交要素数量如果统计结果为 0先解决坐标统一问题再做裁剪。输出坐标系在环境参数里也要同步设置避免输出结果坐标对不上。5.4 全国数据缩放到城市级线条糊成一片现象路网全量加载后缩放到省级比例尺还能看出走向缩放到市级范围时线条密集堆叠屏幕上一团黑分不清主路和支路。原因这是显示层面的问题。全国路网要素量大城市区域道路密度高全部按同一符号宽度渲染必然挤在一起。跟数据本身质量无直接关系但会直接影响判断和出图效果。解决在图层属性 → 显示 → 比例范围里设置最大和最小缩放比例比如只在比例尺大于 1:10 万时显示乡道级别避免小比例尺下信息过载。同时按道路等级做分符号渲染高速主路用粗线条支路用细线条颜色拉开层次。做完这两步再缩放到城市范围就不会糊成一片出图也干净很多。6. 进阶用法把 2005 年矢量数据发布到 GeoServer 的矢量数据服务选择本地分析做完如果想发布成 Web 服务给前端调用就涉及 GeoServer 里“矢量数据服务”怎么选的问题。实际上 GeoServer 支持多种矢量数据源最难的不是操作而是选哪种方式发布。6.1 Shapefile 数据源还是 PostGIS看使用场景GeoServer 新建数据存储时常见两个选项一个是目录中的 Shapefile一个是 PostGIS。如果只是做演示、做原型或者要素量几百万以内选 Shapefile 直接指向磁盘文件夹就行零依赖启动快。如果数据要多人协作更新、频繁修改属性、或作为跨部门共享图层推荐先导入 PostGIS再在 GeoServer 里连接 PostGIS 空间数据库发布。2005 年这套路网数据如果只是放上去给前端查看用 Shapefile 数据源足够如果后续要做要素编辑或增量更新走 PostGIS 路径更稳定。场景推荐数据源理由单机演示、样式调试Shapefile 数据源配置简单直接指向磁盘多人访问、频繁属性查询PostGIS支持 SQL 过滤、事务处理图层数量多、经常切换样式GeoPackage单文件管理避免碎片文件6.2 发布时的坐标系和样式设置发布 Shapefile 到 GeoServer 时数据存储配置界面里要填工作区和“URL”为文件路径。接下去发布图层本身在“数据”选项卡中查看原生边界框GeoServer 会从文件自动计算关键是“声明 SRS”项必须手动指定为 EPSG:4326 或实际数据坐标系否则前端叠加底图时会错位。坐标系这一步和前面第 3 章的处理逻辑一致数据源坐标系没补全发布完照样偏移。样式方面可以用 SLD 对道路等级做分类渲染Web 前端显示时就能区分高速、国道和省道。发布完成后通过 WMS 预览检查路网位置是否与在线底图吻合是最有效的验收方式。从那以后凡是从这套 2005 年数据里导出的任一 Shapefile我都会强制把坐标系说明和字段字典一起归档作为发布和共享的配套文件省去反复排查的时间希望帮到你。本文还有配套的精品资源点击获取
返回列表