ARTICLE DETAIL

资讯详情

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

中国铁路网矢量shp数据获取与处理实战:从坐标系到缓冲区分析

中国铁路网矢量shp数据获取与处理实战:从坐标系到缓冲区分析 做了这些年GIS数据处理最让我头疼的需求之一就是中国铁路网矢量shp数据。几乎每隔一阵子就有同事、客户或群里的人问有没有现成的铁路网shp能直接下载有没有免费又靠谱的说实话市面上很多所谓免费资源要么是几年前的过期数据要么是东拼西凑、坐标错乱、字段混乱的残次品。拿这种东西做项目轻则返工重画重则影响分析结论。这篇文章我把中国铁路网矢量数据从获取、处理到真实项目应用的全过程讲透全文基于我自己实际做过的项目经验没有付费购买任何所谓内部数据渠道都是公开合法能复现的。1. 为什么中国铁路网矢量数据这么抢手先搞清楚一份shp里装的是什么1.1 一份铁路网shp到底包含哪些信息很多朋友第一次接触shp以为跟Excel一样双击打开就是一个表格。实际上shp全称叫Shapefile是一种矢量数据格式它天生不是一个单独的文件而是由多个配套文件组成的。最核心的是三个文件.shp存几何形状.shx存索引.dbf存属性表。只要少了其中一个数据就废了。另外还可能附带.prj坐标系文件、.cpg编码文件等这些是锦上添花没有的话数据也能用但坐标系容易错。在中国铁路网这份shp数据里一条铁路线在几何上通常是一个Polyline线要素或由多个线段组成的MultiPolyline。属性表里的常见字段包括线路名称比如京广高铁、陇海铁路、线路类型高速铁路、普速铁路、城际铁路、货运专线、运营状态运营中、在建、规划中、所属路局、复线或单线等。你可以把shp想象成一个三维的Excel每一行是一条铁路每一列是一个属性而几何信息则记录了这条铁路在地球上的真实走向。我从实际项目里拿这份数据来做什么常见的是做国土空间规划里的交通图层叠加、物流园选址评估、铁路沿线噪声或生态影响缓冲区分析。还有一种特别典型的用法是配合人口栅格数据计算铁路沿线1公里范围内覆盖了多少常住人口这种分析如果没有一份坐标准确的矢量铁路线根本做不起来。1.2 千万别忽略坐标系这里藏着最大的坑坐标系是shp数据的第一道关卡我见过太多人在这一步翻车。中国境内做数据最常见的是三种坐标系WGS84是GPS设备和OSM数据的默认坐标CGCS2000是国家大地坐标系国内测绘成果标准GCJ02是常见互联网地图的加密坐标。一份铁路网shp拿在手里第一件事就是看它的.prj文件里写的是什么。如果是WGS84经纬度单位可以直接拿去和OSM底图套如果是CGCS2000通常还要配套一个投影坐标系比如高斯-克吕格投影单位是米这时就不能直接叠加到经纬度底图上。之前有同行拿了一份精修版铁路网全国shp坐标单位是米硬是塞进WGS84的工程里结果所有线路全部挤在地图左下角一个点附近查了半天才发现是投影没定义清楚。另外要提醒的是如果数据本身是GCJ02加密坐标但你的工程底图是WGS84叠加后会偏移几十到几百米。铁路线这种长条形要素偏移了后续缓冲区分析基本全废。所以拿到数据第一步用在线地图对照几条熟悉的高铁线路走向偏差超过百米就要立刻怀疑坐标系不统一。2. 免费且靠谱的数据获取途径别再到处求人发内部包2.1 先用OpenStreetMap和Geofabrik全球最稳定的免费源真正免费又持续更新的铁路网矢量数据首选OpenStreetMapOSM。虽然这是众包编辑的地图数据但中国铁路网这部分经过多年修正主线、高铁、普速基本都全尤其是国家干线完整性相当高。实际下载操作很简单访问Geofabrik的下载站在Asia分类下找到China条目下载china-latest-free.shp.zip。解压后会看到几十个shp文件其中铁路相关的通常是gis_osm_railways_free_1.shp旧版命名或新版输出里的gis_osm_transport_a_free_1.shp。直接拖进QGIS就能用。这个渠道的优势是更新快、免费、无需注册。缺点是属性表里的字段是英文的比如fclass字段会区分railway、subway、light_rail等类型需要自己稍微翻译处理一下。需要注意的是OSM里中国高铁线会标为railway但支线、专用线可能不完整做全国尺度分析够用做县级精细项目需要补充校验。2.2 国家基础地理信息中心权威底图数据如果项目对数据权威性要求高比如要报审、要走正式流程那还是得用国家基础地理信息中心发布的基础地理数据。他们提供1:100万公众版基础地理信息数据里面包含铁路要素层坐标系是CGCS2000或WGS84权威性拉满。不过天下没有零成本的饭这个渠道需要注册账号部分数据要在线申请审核不是扫码就下。好处是拿到手的数据非常规范字段结构完整、拓扑关系清楚、没有OSM那种同一股道被画成两半的情况。对我个人而言凡是涉及政府规划、环评、可研的项目我宁可多花两天走申请流程也要用这套正规数据打底。纯个人学习或技术验证用OSM就够了。2.3 其他可能用到的来源科研机构与开放数据平台除了上面两个主力渠道国内不少高校和科研机构也公开过一些历史版本的铁路网矢量数据。比如部分数据科学竞赛平台会放出带线路等级、通车时间等关键信息的铁路线shp这种数据用于研究和练手非常有价值。但使用前一定要看数据说明里有没有时间戳有些公开资源停更在2016年甚至更早京张高铁、成贵高铁这种近年开通的线路完全没有做现状分析会出大问题。更实用的组合思路拿甘普基础地理信息里的铁路层做骨架再用OSM最新数据补充近年新开通线路最后用铁总公开的线路开通新闻做属性校验。这个流程虽然费点事但产出的铁路网矢量数据质量和时效性都远超那些打包卖钱的二手数据。2.4 数据使用边界版权与引用规范一定要清楚这里要特别提醒一句即便数据是免费下载的不等于可以随意转卖。OSM的数据遵循ODbL开放数据库许可协议要求使用者在分发时保留署名并相同方式共享国家基础地理信息中心的数据也有明确使用协议部分用途需要审查。我见过有人把OSM下载的铁路数据简单改个字段名就当自产数据卖这种在法律上有风险在行业里也很败口碑。正确做法是项目内部做分析可以随便用但公开发布成果时要在图件说明里注明数据来源比如铁路线基于OpenStreetMap贡献者数据或要素来源国家基础地理信息中心公众版数据。这一行字不丢人反而能让成果经得起追问。3. 数据到手后的第一道工序在GIS软件中正确打开与预处理3.1 QGIS快速上手从拖拽shp到看懂要素我个人的习惯是用QGIS免费开源、跨平台、插件生态强不需要操心盗版授权问题。拿到解压后的shp最快的方式是直接从文件管理器里把.shp文件拖进QGIS窗口。如果没有反应就点菜单栏的图层 添加图层 添加矢量图层选择文件即可。打开之后建议立刻做三件事第一右键图层打开属性表扫一眼字段和要素数量第二打开图层面板的属性查看坐标系第三把底图换成在线卫星图或OSM标准底图目视检查铁路走向是否贴合真实地形。我遇到过一个数据包属性表里写着全国铁路网打开一看只有两千多个要素而正常全国铁路线要素少说有几万个这就是切片导出时的疏漏不检查直接用后面统计一定对不上。3.2 ArcGIS与ArcGIS Pro的操作要点如果单位用的是ArcGIS流程也差不多。ArcMap里可以点击工具栏的加号加载shpArcGIS Pro里直接通过添加数据按钮或把shp拖进目录视图。ArcGIS有个老毛病对UTF-8编码的dbf支持不好中文属性很容易乱码而OSM下载的shp属性表多为UTF-8这时ArcMap打开属性表可能看到乱码。解决办法是优先用ArcGIS Pro它对编码兼容性好很多。如果只能ArcMap可以先用QGIS对dbf做一次编码转换另存一份GBK或系统默认编码的shp再拿到ArcMap里用。这一招在我实际工作中屡试不爽省了很多乱码带来的烦躁。3.3 投影设置决定后续分析成败的十分钟打开数据后务必在图层属性里确认坐标参考系。OSM铁路数据的原生坐标系是EPSG:4326WGS84可以直接用但如果你要计算线路长度经纬度坐标是算不准确的必须转到投影坐标系下才能算。国内常用的投影方案是CGCS2000 / Gauss-Kruger zone或者UTM 50N不同经度范围选不同分带。全国尺度的分析直接投影成Albers等积投影面积和长度误差相对均衡。这里有个极易踩的坑很多人以为在ArcGIS或QGIS里右键设置CRS就等于做了投影其实那只是重新标注坐标系并没有改变数据本身。正确的做法是用矢量通用工具 重投影图层QGIS或Project Define Projection后继续ProjectArcGIS这样带坐标转换的计算工具才能真正把数据从经纬度变成米制投影。不做这一步后续测量长度结果差十万八千里。4. 实际项目中最常用的六个处理环节从裁剪到拓扑检查4.1 按省界或研究区裁剪千万别用目测裁剪铁路网是全国数据做项目通常只需要某个区域。很多新手直接用选择要素工具画个框就删这种粗暴剪裁对分析无所谓但做成果图时很容易把跨省铁路上半截断在半路看起来非常业余。规范操作是准备一份精确的省界线或研究区边界shp然后用QGIS的裁剪工具矢量菜单 地理处理工具 裁剪。输入图层是铁路网叠加图层是边界点击运行即可。等叠加图层会沿边界把铁路线截断保留边界内部的要素。注意裁剪后的线要素属性表仍保留原始字段区域外的要素被裁掉但横穿研究区的线路会被切成两段如果后续做网络分析要先用按位置合并或者修复几何处理。实际项目中我往往会做两层先全国范围不裁另存一份再用研究区边界裁剪一份。因为很多分析会涉及研究区外围铁路对内部的辐射影响甲方经常会问我们这块地方周边铁路网络是否支撑物流配送这时外围的铁路数据就派上用场了。4.2 属性表清洗筛出你需要的高铁或普速线OSM铁路数据里fclass字段可能包含railway、subway、tram等直接用全要素做专题图会显得混乱。真实项目中我通常会在属性表里新建一个线路类型文本字段用字段计算器把中文类型赋进去然后按类型分类符号化。例如表达式可以写成CASE WHEN fclass railway AND name LIKE %高铁% THEN 高速铁路 WHEN fclass railway THEN 普速铁路 WHEN fclass subway THEN 地铁 ELSE 其他 END这样生成的图例清晰汇报时领导也能一眼看明白。操作里有个小经验筛选线路名称时先注意数据里中文名是否带线字比如京广高速铁路和京广线是两条不同的要素前者代表高铁走廊后者代表老京广普速线别把它们合并到同一个分类里。4.3 shp转KML/KMZ手机上也能离线看图项目现场踏勘时把铁路网数据导到手机离线地图里是最实用的一招。QGIS里右键图层选择导出 保存要素为格式选Keyhole Markup Language [KML]确定即可。导出前务必确认坐标系是WGS84否则KML打开后位置会偏移。ArcGIS用户可以用图层转KML工具它会在图例里自动生成图标样式。导出后把KML文件放到手机的地图应用里配合离线卫星图看现场非常舒服。我出去跑外业时手机里就常驻一份重点区域的铁路网KML开着定位地图往现场一站铁轨走向和我们的分析图层对应得上方便得很。4.4 DWG转shp从CAD图纸里抢救铁路线不少单位提供的铁路线源数据是CAD的DWG文件尤其是铁路设计院出来的图纸。DWG转shp我踩过不少坑。首先要明确一点CAD里一条铁路线可能是一个复杂多段线PLINE也可能分解成了多条独立线段直接转shp后拓扑关系会很乱。我的建议先在CAD里把所有铁路线要素归到同一个图层用炸开命令把多段线打散成单线然后清理重复线另存为DXF格式DXF兼容性比DWG好。QGIS里通过工程 导入图层 从DXF导入导入后选中需要的线层右键另存为shp即可。导入前注意设置正确的坐标系CAD图纸通常没有投影信息要根据图纸上的坐标来判断是CGCS2000还是地方坐标系。这一步马虎不得图纸坐标判断错了转出来的shp基本没法用。4.5 Excel点转shp把车站点表变成空间数据除了铁路线车站坐标也是高频需求。手上的Excel表格如果包含经度、纬度两列例如站点名称、经度、纬度、所属线路QGIS里点击图层 添加图层 添加分隔文本图层文件格式选CSV指定X字段为经度、Y字段为纬度几何类型选点坐标系先选EPSG:4326。导入后右键导出为shp再用按位置连接属性把站点点和铁路线关联起来可以快速算出每个站点落在哪条铁路上。ArcGIS用户则用添加XY数据但注意ArcMap中X对应经度、Y对应纬度千万别填反。我见过有同事把经度和纬度写反所有点全落到海里这种错误靠目测就能立刻发现但总有人忽略。4.6 拓扑检查与修复给数据体检铁路网数据最影响后续分析的问题是拓扑错误比如断线、悬挂点、重复线段。如果一份数据有大量断头做路径分析时线路根本连不起来做缓冲区时边界也会出现奇怪的毛刺。QGIS里可以安装Topology Checker插件规则选不能有悬挂点dangles运行后红色标记会标出所有断头位置。逐条排查修复很耗时间但值得做。常见的修复方法用编辑工具里的节点工具把断头的端点拖拽到相邻线上或者用捕捉功能自动吸附。ArcGIS用户则要借助Geodatabase的拓扑规则把shp导入要素数据集后创建拓扑再按规则修复。以我的经验OSM下载的全国铁路数据拓扑质量还算可以但经过周边路网数据合并后拓扑问题就多了。每次做完整合底图我至少会花一个小时跑拓扑检查才能放心拿去做分析。5. 实操中的典型问题与排查技巧把踩过的坑全摆出来5.1 坐标系错乱的经典症状最典型的现象是数据加载后跑到非洲或海里去了或者全部挤在地图左下角。这通常意味着坐标系定义与真实坐标单位不匹配。排查思路是先看属性表里是否有坐标数值字段比如X、Y列如果是6位或7位数字大概率是米制投影如果是两位小数大概率是度。另一种症状是铁路线和底图对不上偏差几十米到几百米这是GCJ02与WGS84偏差造成的。处理办法是先确认数据原始坐标系用QGIS的矢量通用 重投影图层转成WGS84如果偏差依旧存在再考虑做加密坐标纠偏。不过纠偏工作很容易引入更大的误差我的建议是能不用就不做直接用原始坐标系匹配底图数据。5.2 线段断裂和拓扑连接问题当你看属性表里一条京沪高铁实际被拆成七八段要素时不要急着合并先想清楚这些段之间是否真的断开。如果是相邻的小间隔可以用修复几何工具里的合并线段功能如果间隔较大可能是原始数据采集时断开的。需要先把两端用捕捉工具和编辑工具手动接上再合并要素。合并多段线还有一个常见需求把同一属性的多条线段合并成一条MultiLineString。QGIS里用矢量 数据处理工具 合并要素按字段属性分组比如按线路名称分组就能把碎片化的线归并为一条完整线路。5.3 属性乱码思路清楚了十分钟解决中文属性乱码在ArcMap里最常见原因基本是dbf文件使用UTF-8编码而ArcMap默认识别为GBK。在QGIS里打开shp时会弹出一个编码选择框下拉选UTF-8就能正常显示。如果QGIS没有自动识别也可以在图层属性 数据源 编码方式那里手动指定。ArcGIS Pro的兼容性比ArcMap好但仍可能遇到乱码这时可以先用QGIS把shp另存为GBK编码再用ArcGIS打开。如果dbf里的字段名也乱比如出现ÐÕÃû之类的就要用Notepad打开dbf文件的二进制区域排查或者直接用QGIS重命名字段后另存。5.4 shp加载失败的常见原因速查shp加载失败的坑大多是基本功问题值得放在排查列表里只拷贝了.shp文件没带.shx和.dbf软件报文件损坏文件路径中包含中文或空格某些老版本软件解析失败解压时压缩包损坏或文件截断shp超过2GB限制老工具打不开。解决方法很简单确认三个核心文件都在同一目录路径尽量用英文超过2GB就转成GeoPackage格式再继续处理。下面这张表是我常用的排查清单分享出来能帮人省时间。症状可能原因快速排查方法数据加载到地图外坐标系定义或投影错误查看.prj重投影后再加载属性表中文乱码编码不匹配QGIS中切换编码为UTF-8或GBK铁路线显示不连续拓扑断裂或捕捉不成功打开Topology Checker检查悬挂点数据只有点没有线误选了节点数据查看属性表fclass字段确认几何类型合并后要素数量不对属性分组字段选错按线路名称字段重新分组合并6. 进阶技巧让铁路网数据发挥更大的分析价值6.1 缓冲区与矢量场一张图看懂铁路的辐射能力铁路数据最实用的进阶玩法是用缓冲区分析表达铁路的辐射范围。QGIS里用矢量 地理处理工具 缓冲区设置半径比如1000米根据项目尺度调整生成的Polygon就是铁路沿线辐射带。把这些面叠加到土地利用或人口格网上可以统计出哪个市、哪个区被铁路辐射覆盖的面积最大。我做过一个物流园选址项目就是用铁路网缓冲区和产业园区数据做叠加半天就筛选出三个潜力地块。注意缓冲区半径的选择要讲道理城市拥堵路段取500米城际出行节点取2公里没有绝对标准要跟项目需求结合。有人提到矢量场这个热词放在GIS语境里通常指用矢量字段表达方向与强度。铁路网数据里可以让线要素的线宽映射到线路等级或日开行对数这样出图时高速铁路一眼就能被识别出来比单纯用一种颜色的线强得多。6.2 用表达式快速实现标注与筛选QGIS的表达式是真正拉开效率差距的功能。比如我想在图上标注线路名称运营状态写到表达式栏name || || status || 这样画布上的每个标注都显示成京广高速铁路运营中不用提前拼接字段。配合基于规则的样式还能按不同状态显示不同颜色运营中实线、在建虚线、规划中细点线。这套表达式的玩法在ArcGIS里类似Arcade或者Python都能实现但QGIS的表达式对话框更直观适合新手快速上手。6.3 多源数据合并与网格切分把零碎数据拼成一张网如果坐标处理过程没问题却下载了分省或分块的铁路数据就需要合并。QGIS里用矢量 数据处理工具 合并矢量图层把多个shp统一到同一个坐标系后合并再按线路名称字段做一次融合得到一张干净的全国铁路网。反过来如果你要把一个大区域的铁路数据按规则网格切分用生成网格工具创建渔网格再执行裁剪操作就能得到按网格分块的铁路图方便按瓦片出图或分批导出。这个流程对应到渔网分割这个关键词我每次做全国尺度的分幅出图都会用到。6.4 把铁路网数据做成3D展示如果项目汇报需要三维立体效果QGIS中把铁路线shp的每个折点提取出来叠加DEM高程数据用线要素转3D功能可以让铁路线沿地形起伏显示。配合生成的三维模型导入到Blender或Cesium等工具中表现力直接上一个档次。shp转3DTiles的流程也可以走通先在QGIS里把线要素转成GeoJSON再用cesiumlab等工具切片成3DTilesWeb端加载非常流畅。这种展示最大的意义在于能让外行人一眼看懂铁路与地形的关系。7. 写在最后我的几条真实建议最后再把实操中沉淀下来的体会分享给你。第一别迷信一键下载全国数据这类懒人包数据印在硬盘里的时间是固定的大部分二手包停留在几年前新开的线路全都没有。与其到处求人发资源不如花半小时把OSM和国家平台这两条正规渠道跑通。第二拿到数据后别急着出图先花十分钟检查坐标系和拓扑这两步能挡掉八成后期返工。第三属性表和编码规范一定要在一开始就整理好等图都做完了再改字段名你会在标注和统计环节哭出来。铁路网矢量shp这类数据本质是给分析提供底座的。很多人花大把时间下载、转换真正做分析的时间反而被压缩了。如果你按照我上面这套流程走一遍前面多花半天后面至少省两天。这份数据资源的核心价值不在文件本身而在你拿到之后能快速把它变成决策依据。希望这篇经验总结对你有用。
返回列表