ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

全国铁路SHP数据使用手册:从解压、坐标系检查到KML/3DTiles转换

全国铁路SHP数据使用手册:从解压、坐标系检查到KML/3DTiles转换 简介聚焦中国铁路网络的空间矢量数据包包含国铁线路与2016年高铁站点的几何信息和属性记录面向GIS数据处理、城市规划、交通网络分析等场景也适合地理信息专业学生作为练习数据。包内共12个文件以shp/shx/dbf/prj等为主要类型其中shp为矢量图形dbf存储线路和站点属性prj定义坐标系统sbn/sbx作为空间索引提高访问效率辅助文件与锁文件不影响主数据使用。整体压缩包仅11.37MB方便下载与快速加载。该数据目前已有2757人学习适合用于计算铁路总长度、分析高铁站分布、结合人口与经济数据开展区域发展研究。无论是绘制铁路专题图、统计路网密度还是评估站点影响范围都能直接调用这套标准矢量底图在ArcGIS、QGIS中快速完成空间分析与可视化任务并支持专题图输出。 前两天一位做城市规划的朋友给我发消息“我下载了一个接近60MB的zip包文件名是‘全国铁路SHP数据.zip’里面应该就是全国的铁路线数据可我一打开就报错是不是数据坏了”这个问题我一年里能被问十来次。SHP数据本身不复杂但很多人卡在了第一步不知道压缩包里是什么结构、哪些文件不能动、坐标系怎么看、更不知道拿到手之后怎么转成KML、TXT或者3DTiles。这篇文章就围绕这份常见的“全国铁路SHP数据.zip”写成一份实操向的使用手册适合GIS从业者、规划分析人员和准备拿路网数据做可视化或项目演示的朋友尽量把打开、体检、转换和避坑的完整链路讲清楚。1. 一份“全国铁路SHP数据”压缩包里到底装着什么1.1 SHP不是“一个文件”而是一个全家桶先说一个最容易误解的点SHP全称是ShapefileESRI在90年代推出的矢量数据格式但它从来不是一个文件而是一组配套文件的集合。你可以把它理解成一个“家庭套装的文件夹”大家共用同一个主文件名靠后缀区分职责。.shp图形坐标铁路线就是里面一串串的坐标点连出来的.shx形状索引用来快速定位图形缺失会影响读取速度.dbf属性表存的是线路名称、等级、所属路局这些非空间信息.prj坐标系描述非常重要缺失会导致软件无法判断数据在地球上的位置.cpg字符编码声明读中文属性字段时靠它识别是GBK还是UTF-8.sbn、.sbx、.ain、.aih空间索引非必需丢了也不影响使用很多人打开SHP发现“只有线、没有名字”十有八九是.dbf文件没在一起“打不开”大概率是.shp文件本身损坏。所以拿到zip之后第一件事不是急着拖进ArcGIS而是先把这组文件看全。打包成zip下发正是为了保证这组文件不会单独丢失一个。1.2 全国铁路数据的内容预判与数据量估算“全国铁路SHP数据”这个文件名本身没有统一标准但根据常见数据源这类包里面一般包含三类东西铁路线要素Polyline主数据一条条线段代表铁路线路站点要素Point很多数据包会把车站单独存一个点文件路局或路网分区面Polygon少数数据集会附带几何类型解决了下一步看属性字段。不同来源的字段设计差异极大但核心字段一般跑不掉下面这几个。字段名常见取值示例说明NAME / 线路名称京沪高铁、陇海线线路显示名称CLASS / TYPE客运专线、普速铁路、在建技术等级是后续筛选的核心所属路局 / BUREAU上海局、北京局管理归属状态 / STATUS运营、在建、规划时效判断里程 / LENGTH1318公里数可能是属性自带或计算得到电气化 / ELECTRIFIED是、否专题图常用关于数据量全国铁路营业里程大约在16万公里左右这个数字是公开信息。如果按平均每公里2到4个坐标点的节点密度估算一组全国线路数据的顶点数量大约在30万到60万个.shp文件本体通常几MB到几十MB再加上属性、坐标系和索引文件打包成zip达到60MB完全正常。所以看到这个体积不需要惊讶。坐标系则通常在这四种里出现WGS84、CGCS2000、北京54、西安80。存储单位又分成经纬度度和投影坐标米两种。这一块必须确认清楚不然就会遇到第2节里“铁路线跑到海里去”的经典翻车。2. 从ZIP到地图打开这份数据前的三件准备工作2.1 正确解压别破坏“全家桶”的文件关系我见过太多人直接双击zip在压缩包预览窗口里把某个文件单独拖拽出来结果只把一个.shp拖出来其余文件留在了压缩包里打开自然各种报错。正确做法是右键选择“解压到当前文件夹”或“解压到指定目录”让所有文件以完整形态落盘。解压之后做三件事核对文件完整性.shp、.shx、.dbf、.prj四个核心文件必须在同一目录下主文件名一致检查路径存放目录不要带特殊字符路径别太深——Windows的路径长度限制在GIS软件里经常触发“系统找不到指定的路径”这种玄学报错顺手看下有没有README.txt或metadata.xml很多正规数据集会在这里写明坐标系、数据时间和来源解压过程中如果提示“CRC校验失败”说明文件在下载或传输阶段就损坏了这不是解压软件的问题重新下载才是正解。2.2 快速体检用QGIS、ArcGIS、Python三种方式打开数据打开方式按你的工作环境选一个即可。免费方案首选QGIS打开软件后图层 - 添加图层 - 添加矢量图层选中解压目录里的.shp文件即可。QGIS会自动读取.prj和.cpg但如果出现中文属性乱码手动点击“编码”选项尝试换成GBK或UTF-8。ArcGIS操作差别不大ArcMap或ArcGIS Pro里通过目录面板添加数据。问题在于如果数据文件缺少.prj软件会显示“未知坐标系”这时候千万不要直接做分析。你必须在数据属性里手动“定义坐标系”而不是“投影变换”这个区别很重要后面会展开说。如果你要批量处理或者做自动化推荐用Python的geopandas。一个最小的体检脚本长这样import geopandas as gpd gdf gpd.read_file(铁路/全国铁路.shp, encodingutf-8) print(gdf.head()) # 前5行属性 print(gdf.crs) # 坐标系 print(gdf.geom_type.unique()) # 几何类型 print(len(gdf)) # 要素数量打开后不管用哪种方式第一眼必须确认五件事几何类型是线、要素总条数、坐标系名称、属性字段列表、空间范围是否在中国范围内。把这五项记下来相当于给数据做了一次基础体检。2.3 坐标系问题为什么你的铁路线会“跑到海里”这是个高频问题。原理不复杂坐标系分地理坐标系经纬度单位是度和投影坐标系平面坐标单位是米。如果数据本身的坐标是CGCS2000高斯投影坐标值可能是“X约40万Y约430万”这种米制数值软件却把它当成经纬度度来渲染图形就会直接飞出合理范围。“铁路线跑到海里”就是这么来的。判断方法很简单看.prj内容或者看坐标数值范围。坐标系信息缺失时借助数值范围做经验判断坐标特征大概率情况X在73~135Y在3~53WGS84或CGCS2000经纬度可直接展示X是6位数Y是7位数且没有带号CGCS2000/WGS84 3度带高斯投影X是8位数且前两位是带号3度带或6度带投影坐标值含带号X很大如几十万到几百万Y也很大需要确认投影带不能直接当经纬度用处理流程是先“定义坐标系”告诉软件这份数据真实的空间参考再按需求进行“投影转换”。两个操作不能颠倒也不能省略。用一个生活里的类比定义坐标系是给图纸标明“这图的比例尺和单位”投影转换是把这个图纸转成另一种单位格式不标明就缩放结果自然全乱。3. 数据到手先别急着用质量体检与字段清理3.1 先回答三个问题覆盖范围、精度、时效性很多人在第一步打开成功后就开始画图出图忽略了“这份数据能不能支撑我的分析”这个问题。我的习惯是先问三件事覆盖范围取名“全国铁路”不代表覆盖完整。拿到数据后先和公开的铁路运行图或卫星影像底图对比看看主要干线是否齐全。很多免费数据其实只包含国家干线市郊铁路、专用线和部分城际会缺失。精度SHP数据是从什么比例尺的底图数字化出来的决定了它的边界精度。1:100万的全国基础地理数据适合宏观展示但不适合做工程级里程计算。判断方法是用几条已知线路和影像叠加看中心线偏移程度。时效性铁路是动态网络每年都有新线开通、既有线改线。数据里如果带“OPEN_TIME”或“STATUS”字段最好不带就只能靠属性中的“运营/在建/规划”状态粗略判断。拿到没有版本文本说明的数据一律按“某个时间节点的快照”对待。3.2 属性表才是灵魂如何筛选“高铁/客专”线路属性表里最有价值的动作是“分类筛选”。比如你要画一张“全国高铁网示意图”多数情况下需要把客运专线、设计时速250km/h以上的线路单独挑出来而不是把所有铁路线一股脑画上。QGIS表达式筛选栏里可以直接写CLASS 高铁 OR CLASS 客运专线geopandas则这样写high_speed gdf[gdf[CLASS].isin([高铁, 客运专线, 客专])]这里有个坑不同数据源对“高铁”的命名五花八门。有的叫“高速铁路”有的叫“客运专线”有的干脆用“200km/h以上”这种描述。所以别急着写死条件先对CLASS字段做一次频数统计看看所有取值长什么样再决定筛选规则。筛选结果建议“另存新文件”不要在原文件上直接删除。我通常会把原始数据保留一份在副本上干活这样即使后续发现筛选条件写错了也不用重新解压。3.3 数据预处理坐标转换、投影、裁切的常用套路空间分析里最容易错的一步是投影选择。全国铁路网的线要素长度计算、缓冲分析如果直接在经纬度坐标系下做距离和面积都会受到纬度变形影响。稳妥的做法是先把数据投影到适合全国范围的Albers等积投影或Lambert等角投影再做分析。注意投影转换会改变坐标值不会改变几何拓扑关系所以不影响线路连接关系。如果只需要某个区域的铁路网用裁剪工具按行政区边界做裁切。QGIS里“裁剪矢量”工具ArcGIS里的Clipgeopandas也行import geopandas as gpd rail gpd.read_file(全国铁路.shp) boundary gpd.read_file(省界.shp, encodingutf-8) result gpd.clip(rail, boundary)预处理阶段的另一个常见问题是线路破断——一条高速公路或铁路在跨桥、进隧道的地方会被切成好几段。做网络分析时这些断点可能引起误判。如果不需要精细化处理可以按线路名称加等级字段做合并。4. 高频场景实操SHP转KML、转TXT、转3DTiles的实测流程4.1 SHP转KML一条ogr2ogr命令解决“全国铁路KML”是我见过最频繁的转换需求。用到的是GDAL自带的ogr2ogr命令QGIS安装目录里就带着这套工具在操作系统终端里配置好环境变量也能直接用。最基础的转换命令是ogr2ogr -f KML 全国铁路.kml 全国铁路.shp前提是源数据已经是WGS84经纬度坐标系。如果数据是CGCS2000投影坐标命令行里需要加一步指定输出坐标系ogr2ogr -f KML -t_srs EPSG:4326 全国铁路.kml 全国铁路.shpEPSG:4326就是WGS84经纬度的标准编码大多数在线地图和三维地球工具都认它。转换完成后在Google Earth或其他支持KML的工具里打开先看线路是否落在正确位置再看属性有没有带过去。KML输出对属性字段的支持有些限制如果原始字段很多建议先清理掉不需要的列再转。4.2 SHP转TXT/CSV属性导出与带坐标的文本化“shp转txt”这个需求通常有两种意思一是只导出属性表用于Excel统计分析二是导出每条线/每个点的坐标文本用于CAD或其他程序处理。分清楚需求再去操作。只导出属性表时QGIS里选中图层右键“导出”-“另存要素为”-格式选CSV注意勾选“仅保存所选要素”如果你只要筛选结果。Python更直接import geopandas as gpd gdf gpd.read_file(全国铁路.shp, encodingutf-8) gdf[wkt] gdf.geometry.to_wkt() # 把几何转成WKT文本 gdf.to_csv(全国铁路_wkt.csv, indexFalse, encodingutf-8-sig)编码这里有个细节如果文件要交给Windows环境的Excel打开建议用encodingutf-8-sig或者GBK如果只要在编程环境或在线工具里用UTF-8就好。编码选错的结果就是“打开CSV一片乱码”大写加粗的常见错误。导出坐标文本还是推荐WKT格式因为WKT是GIS领域通用的文本表达方式后续再转回SHP也容易比那种“把X和Y硬拆成两列”的文本更不容易丢信息。4.3 SHP转3DTiles从二维线到三维可视化的思路“shp转3dtiles”是个热搜词但我要先把丑话说在前面3D Tiles主要面向三维模型和倾斜摄影切片二维线要素没有一个“一键转换”的官方工具。从SHP到3DTiles关键不是格式转换而是先把二维线变成三维几何。比较可行的流程是SHP线要素赋予高度信息添加一个高度字段比如所有线统一10米或按实际海拔赋值用FME、Blender或Python脚本把带高度的线转成三维几何比如把线变成管状体变成有一定半径的“管道”再通过Cesium ion、py3dtiles等工具发布成3D Tiles如果只是做轨道走向的初步三维展示真没必要执着于3DTiles。把SHP转成GeoJSON或者KML直接拉到CesiumJS、Mapbox里渲染就够了。SDK跑通之后再去研究3DTiles切片否则很容易在格式转换上耗掉大量时间。5. 我在处理这类数据时踩过的几个坑5.1 ZIP损坏与EOCD错误先别急着重新下载热搜词里有一长串和“zip损坏”相关的词比如“failed to copy spatial iop zip”“could not find eocd”还有“导入资源包失败caused by: invalid zip archive”。这类问题本质是一回事文件没有完整下载或压缩包结构不完整。解压软件找不到文件末尾的End of Central Directory RecordEOCD记录就报“could not find eocd”。排查思路按顺序来确认下载文件体积是否和资源页面标注一致用7-Zip自带的“测试压缩包”功能检查完整性如果只是索引记录出问题7-Zip的“修复压缩文件”功能有概率救回来救不回来就换一个下载节点重新下载。顺带提一句如果是某些软件安装时提示zip相关错误比如SolidWorks安装报“failed to copy spatial iop zip”排查方法和上面一模一样——先检查安装包体积和哈希别急着换电脑重装。5.2 文件名乱码、属性乱码编码问题的标准解法中文在GIS数据里永远是个话题。解压时文件名乱码多半是压缩包在Windows中文环境用GBK编码创建的而解压工具按UTF-8解析了。可以先用Bandizip或7-Zip换编码解压解压后乱码的文件名用批量改名工具处理。属性字段乱码则是.dbf文件编码问题。原始数据源可能是GBK编码QGIS默认识别.cpg按UTF-8来读就会显示乱码。解决方法是在QGIS添加矢量图层时手动把编码从UTF-8改成GBK重新加载。用geopandas读取时read_file里指定encodinggbk即可。5.3 线路破断与重复全国数据最常见的拓扑问题全国范围内的路网数据绝大多数是“拼接”出来的不是从一张底图整体绘制的。所以不同省份的接边处同一条铁路线可能被切成两条记录属性还可能不一致——一边叫“京沪高铁”另一边叫“京沪铁路”筛选统计时极其痛苦。我常用的排查技巧是按线路名称分组统计每组线段数量。用QGIS的“按属性统计”或者geopandas的groupby都能快速完成。seg_counts gdf.groupby(NAME).size().sort_values(ascendingFalse) print(seg_counts.head(20))如果一个名字对应几十条线段说明这条线路被切得很碎后续做网络分析或里程汇总时需要注意。需要合并时按“线路名等级”两个字段同时dissolve避免把不同等级的线路段错误拼在一起。5.4 下载来源鱼龙混杂如何判断这份数据靠不靠谱“全国铁路SHP数据.zip”这种命名方式本身就是一个通用资源包的名字没有任何版本和来源说明。所以拿到手的第一步不是用而是“验明正身”。我会做两件事先看有没有元数据文件例如README或XML元数据里面会写数据生产时间、坐标系、基础数据版本。再看几条已知线路的走向比如抽一条京广高铁出来的实际线路形状和在线路网地图比对。如果偏差不大说明数据精度可用如果线路走向明显异常比如穿过大片山地却不沿谷地走这数据大概率是简化过或者精度很差的版本只适合画示意图。做工程级分析时这类来路不明的数据最多只能作为参考底图不能直接作为成果依据。宁可花时间找正规渠道的权威数据也别贪方便用一份弄不清来源的包硬扛。说回我自己的习惯。任何下载来的SHP数据第一次都“只读不改”先看文件结构、坐标系和属性表再决定下一步怎么处理。很多人一上来就急着出图等发现坐标系错了或者属性字段不对前面的分析全部白做。给数据做一次“体检”花不了十分钟但能省下后面一整天的返工时间。“全国铁路SHP数据.zip”这种资源包本质上就是一个沉睡的宝藏库把它的内容结构、坐标系、属性规律摸透比你多下载十个数据包都有用。如果后续要做动态展示建议在SHP基础上转一份GeoJSON留着前端用要出传统专题图SHP加QGIS的组合已经足够。你的项目到了哪一步再回头选这条路就行。本文还有配套的精品资源点击获取
返回列表