资讯动态

陕西各级公路SHP文件处理全攻略:从QGIS加载到MapGIS转换

发布时间:2026/10/13 9:03:09 来源:尧图企业网站定制
简介《陕西各级公路shp文件》是一份面向GIS学习者、交通规划与城市规划从业者的矢量数据包完整覆盖陕西省高速公路、一二级公路和三级公路的分级路网并附带各地级市行政区划边界适用于ArcGIS、QGIS等常用平台直接加载与空间分析。资源共35个文件由5套标准Shapefile组件构成包含几何数据、属性表、索引、投影文件、空间索引及元数据文件结构完整且压缩包仅2.14MB读取与传递都很便捷各图层均含投影和元数据便于坐标统一与来源追溯。目前已有631人学习浏览。基于这些数据使用者可迅速进行公路等级筛选、里程统计、缓冲区分析、连通性评价也可将道路与行政区划叠加开展交通规划、选址评估、灾害应急路径设计等工作为陕西省域尺度的研究与项目落地提供可靠的空间底图。1. 陕西各级公路shp文件到底是什么先别急着下载先看数据长什么样你可能在项目里遇到过这种情况领导说“把陕西的高速、国道、省道、县道按等级画出来标到图上”你打开ArcGIS却发现手里只有一张天地图底图连一条正经的路网矢量线都没有。这时候“陕西各级公路shp文件”就成了刚需——一份覆盖陕西全省、按照公路行政等级或技术等级分层的线状矢量数据。它解决的不是“有没有路”的问题而是“路的分类能不能进属性表、能不能按等级出图”的问题。这份数据对做路网规划、物流选址、交通流量分析、专题制图的人最有用。shp文件本身是ESRI Shapefile格式几何图形以线要素为主属性字段里通常带着道路编号、路线名称、等级分类、里程、行政区划等信息。拿到手之后能做分级渲染、按等级拆层、做拓扑检查甚至做网络分析前提是你知道怎么把它加载进GIS、怎么处理那些隐藏在字段和坐标系里的坑。2. 拿到陕西公路shp后第一步用QGIS做一次别开生面的体检2.1 加载shp的两种方式和文件编码那点事打开QGIS后把陕西公路shp拖进画布是最快的方式但这里有个前提你拖进去的必须是一整套完整文件而不是单独的某个后缀。一个标准shp文件由至少三个文件组成.shp几何信息、.shx索引、.dbf属性表。如果还有.prj那是坐标系信息有.cpg说明编码格式。只拿一个.shp文件喂给GIS软件是会直接报错的。我一般用“层”菜单下的“添加矢量图层”来加载。弹出的对话框里文件来源选“文件”编码选择界面会给你下拉选项。陕西地区的路网数据很多是从国家公开地图或地方测绘部门拿过来的属性里的中文注释经常是GBK或者GB2312编码。如果QGIS默认用了UTF-8加载属性表里的中文会变成一堆乱码这个在后面的避坑章节里我展开说。参数设置上加载时不需要额外指定几何类型QGIS会自动识别线要素。但如果发现有部分图层加载后什么都不显示第一件事不是怀疑数据坏了而是检查是否是坐标参考系的问题。陕西用的投影一般是CGCS2000或者Xian 1980前者是地理坐标系后者有些数据源里标注为投影坐标。在页面底部的坐标显示区域能看到当前CRS没有.prj文件的shp会被默认设置成EPSG:4326也就是WGS84经纬度。这种情况下全省路网会和底图错位几个公里级。解决方式很简单右键图层图层属性里手动指派正确的CRS。2.2 属性表里藏着分级字段怎么立刻看出全省路网骨架加载完成后别急着做符号化先打开属性表。右键图层选择“打开属性表”你会看到一行行道路要素对应的记录。陕西各级公路的shp文件里通常会有类似“公路等级”“道路等级”“grade”“road_class”这样的字段。每个字段的取值差异很大有的用代码表示比如1代表高速、2代表国道、3代表省道有的直接存中文“高速公路”“国道”“省道”“县道”。拿到一张混在一起的路网表第一步是用字段统计功能确认等级字段里到底有哪些值。在QGIS里可以选中等级字段点属性表工具栏上的“字段筛选”或直接点漏斗图标选“全部唯一值”。这样你能在一屏之内看到这个shp文件把公路分成了几个等级。常见的有5到6类高速公路、国道、省道、县道、乡道有的还会带上专用公路。接下来做一件事按等级字段分组统计要素数量和总里程。用QGIS的“处理”菜单找“按字段分组统计”工具或直接用字段计算器对里程字段做汇总。统计结果能帮你判断这份shp是完整路网还是只有骨架。比如卫星地图上能看到大量的村道而shp里只有高速国道和省道那说明它的取数规则是“只保留骨干路网”。这直接影响你在项目里能不能拿它做乡镇一级的分析。这个体检步骤非常关键原因是省道以上级别的路网通常数据质量较高而县道和乡道这一层的断裂、缺段、属性缺漏会明显变多。搞明白数据覆盖到什么等级比急着做渲染重要得多。2.3 用“按表达式选择”把高速和国道的数量迅速确认出来想更精确地了解每条等级的体量可以在QGIS里打开“选择”菜单下的“按表达式选择要素”。假设等级字段名叫“grade”且值是中文表达式就写grade 高速公路执行后下方状态栏会显示“选择了N个要素”。再用同样的办法查省道、县道。如果你不想反复操作可以写一条组合表达式grade IN (高速公路, 国道, 省道)这条表达式的意思是选中三类的全部要素适合快速筛查数据中是否包含所有级别的高速和国省道。这里的逻辑说明QGIS的表达式语法和ArcGIS的Select By Attributes并不完全一致字符串必须用单引号字段名用双引号。写错引号类型表达式会报语法错误。参数上需要注意如果等级字段是数字代码而不是中文就用数字直接比较比如“grade” 1。如果用代码型数据去匹配中文会把要素数统计成0。遇到这种情况先做一次字段内容目检再写表达式。这个动作虽然简单但能省掉后面整理图层时的大量返工。3. 按公路等级切分全省路网从混合线层到分级线层3.1 质检之后用“按属性导出”拆出各等级shp拿到已确认字段结构的路网后下一步就是拆层。做项目时一张全要素路网图层通常不能满足出图要求。高速要用红色粗线压在最上层国道用橙色中线省道用蓝色细线如果全部混在一起符号化的时候只能按等级做分类不利于单独调整线型。拆层的标准姿势是选中某一等级的全部要素右键图层选“导出”为“所选要素另存为”。这里我以QGIS为例从“处理”菜单找“按属性提取”更可控。工具对话框如下输入图层陕西公路shp 提取依据表达式 表达式grade 高速公路 输出文件G:/shanxi/roads/高速.shp执行后你会得到一个独立的高速公路线图层。逻辑说明这个工具本质上是遍历所有要素把满足表达式的要素写入新shp属性结构保持不变。参数说明输出格式保持ESRI Shapefile即可CRS最好在“几何CRS”里选回原数据坐标不要随意转为Web墨卡托。因为后续你可能要做拓扑处理或里程计算保留原始坐标系最安全。如果你打算直接用矢量数据叠加在线底图上面出图也可以顺手把坐标系转为EPSG:3857但前提是你已经确认整个项目都用这个坐标系。按同样方法把国道、省道、县道各导出一份命名最好带上等级前缀和日期比如“国道_2024版.shp”。因为我见过太多人导出后分不清哪个是旧的哪个是新的最后把过期路网混进了汇报图。3.2 拆层后的字段裁剪删掉你用不到的列拆分后的shp会完整保留原属性表的所有字段。有时候原数据里有“规划属性”“管理单位编号”“登记日期”等二三十个字段但你的项目只需要路线编码和名称。多余的字段会让文件体积变大也会让后续做拼接或转MapGIS时增加属性映射的麻烦。可以用“处理”工具箱里的“要素重投影”旁边的“字段管理”或“属性表筛选”来做字段裁剪。在QGIS里也可以打开“处理”菜单找“按表达式提取”旁边的高级工具直接拖出“保留字段”工具勾选需要保留的字段列表保留字段 [OBJECTID, road_name, grade, length_km]这个参数说明是字段名必须和原shp完全一致包括大小写。裁剪后生成的新图层只含指定的列。我一般会保留四个字段几何对象的自增ID、路线名称、等级、长度。如果你的工作流里要做路网融合或拓扑处理最好把起终点节点编号、路宽字段也保留下来因为这些在后续网络分析里可能是关键属性。裁剪字段还有一个隐藏好处降低后续在MapGIS里导入时字段类型映射出错的概率。属性字段越少需要手工匹配的项越少出错的概率就越小。3.3 合并层必须把拆分后再合成总图的口径理顺拆层和合并听起来是对立操作但实际工作中经常两个都要做。比如你手头有按地市切分的陕西公路数据西安市的公路shp、宝鸡市的公路shp、渭南市的公路shp……这些文件要拼成全省一张网时就要用合并工具。在QGIS里用“处理”菜单找“合并矢量图层”把所有分片的shp选进去点击执行。这里有个关键参数合并后是否保留输入图层的字段。如果各分片字段结构一致直接选“串接所有字段即可但注意每个分片的属性表可能有重复值合并后会多出来自不同文件但同样代码的重复记录。如果你要做汇总统计先合并再按等级分组聚合会好很多。合并的坑常在坐标系上。如果你的西安和宝鸡数据一个来自WGS84一个来自Xian 1980合并时QGIS不会自动重投影结果就是你得到一条在秦岭附近断掉的高速。解决办法是合并之前先把每个分片用“重投影图层”工具统一到同一CRS。操作顺序是先重投影后合并别反过来。4. shp转MapGIS线文件完整流程、参数设置与属性匹配4.1 为什么要转MapGIS以及两条可行的技术路线国内很多地信单位尤其是自然资源、公路勘察设计系统的日常作业平台还停留在MapGIS。MapGIS线文件的后缀是.WL跟ArcGIS/QGIS的.shp不互通。如果你拿到的陕西各级公路shp文件要交到这些单位手里就得转成MapGIS能打开的线文件。常见做法有两种。第一种是直接用MapGIS的“文件转换”功能在“输入”里选Shapefile格式然后导入为线文件。这条路最直接但坑也最多常见问题是属性字段丢失、线型变成默认样式、图层名字乱码。第二种是在QGIS或ArcGIS里把shp导出为DXF或DWG格式再通过MapGIS的DXF接口转成.WL转完再做属性补充。这条路能保住更多几何信息但属性几乎全丢适合只关心几何形态的用户。我一般推荐直接走MapGIS自带转换因为后续可以补字段。但转换之前必须先处理两个前置问题坐标系一致性和属性字段类型。陕西公路shp如果坐标是WGS84MapGIS工程默认坐标可能是各地的地方独立坐标系转进去后路网会偏移到离谱的位置。前置做法是先把shp转成Xian 1980或CGCS2000的投影坐标再执行导入。4.2 转换前准备把属性字段统一成MapGIS能读的类型MapGIS对属性字段类型的容忍度比ArcGIS低很多。在shp里字段类型可以是双精度浮点、整型、字符串而MapGIS的线文件属性表对字段长度和类型有严格限制尤其对中文字段长度。I通常在QGIS里提前统一字段类型。选中自己图层打开属性表用“字段计算器”把字段转换。比如“length_km”字段原来是双精度浮点MapGIS导入后可能出现长度溢出或显示科学计数法。转换方法是用字段计算器新建一个整型字段“length_m”表达式为round(“length_km” * 1000, 0)。同理路线名称字段要检查长度是否够用如果shp里写的是“G210国道包头至西安段”而字段长度只有20个字符后面文字会被截断。在MapGIS导入之前先在QGIS的字段管理里把该字段长度调成50确保内容完整。参数设置的细节MapGIS里新建线文件再设置导入参数时勾选“使用源文件坐标系”并在“结果坐标系”里选和你工程图一致的坐标系。如果是MapGIS 6.7那种老版本导入之前还需要在系统库中选择对应的线型库否则导入后线型会变成默认的单线并且无法自动匹配到属性里的等级字段。常见做法是导入完成后在MapGIS里重新定义线型用在QGIS中保存的等级值手动映射。4.3 在QGIS中执行导出转换做好几何与属性的双备份如果你不想让MapGIS直接读shp可以在QGIS里先做一次中转这招适合属性数据比较复杂、不能丢失的场景。在QGIS中把准备转手的数据“另存为”DXF格式然后在MapGIS里“输入”DXF文件将其转为线文件。这个流程能保证几何不错位但属性和图层名基本上都保不住。所以我会另存一份CSV属性表作为备份转完在MapGIS里用关联字段把属性挂回去。具体字段对应关系可以用表格表示原始shp字段MapGIS线文件字段类型说明road_name路线名称字符串(50)手工挂接grade等级字符串(20)用于后续符号化length_km里程双精度注意精度和单位OBJECTIDID整型用来关联备份CSV这样处理下来MapGIS里得到的线文件不但几何完整属性也不丢。经验是转完之后立刻打开属性表抽查三条路线的名称不要等用到时才发现中文乱码。如果出现乱码回QGIS把.cpg文件里标明的编码改成GBK重新导出DXF再转一次。5. 陕西公路shp使用避坑指南乱码、断线、坐标漂移、字段长度都在这5.1 属性表中文乱码问题通常不在shp本身在编码声明现象用QGIS加载陕西公路shp几何显示正常但属性表里的中文全部显示成“淇℃伅”或者问号。原因shp的.dbf文件里中文是用GBK编码存储的而QGIS默认尝试用UTF-8读取。如果数据里没有.cpg文件编码检测就会猜错。解决在“添加矢量图层”对话框右侧把编码手动改为GBK或GB18030再加载。如果你已经加载进去了最简单的办法是直接从图层列表里移除再重新加载一次选择正确的编码。注意只用QGIS的“更改编码”工具并不能修复已读入的乱码必须重新加载数据。5.2 路网断头和跨级道路接不上别急着甩锅数据现象高速在某个位置突然中断和相邻的国道平行但没有任何连通省道在县市交界处出现错位两条记录之间有一小段空白。原因各级公路数据往往来源不同。高速来自高速路网测绘数据国道、省道来自基础地理数据二者精度不同、节点不匹配接缝处就会断。还有一个原因是shp文件里的路网经过化简删除了小角度拐点导致端点坐标对不上。解决如果只是用来做宏观制图断头可以接受但要学会在出图说明里写清楚数据来源。如果你要做网络分析或里程测量就必须做拓扑修复。QGIS里用“处理”菜单的“修复几何”工具可以补一些简单的空隙但它并不能自动连接两个断开的端点。更可靠的做法是找到断头位置手工编辑节点或者使用“捕捉”工具把端点捕捉到最近的线段上。批量操作时可以用v.clean工具参数选择“snap”模式输入阈值设为10到50米超过这个距离的断头不会被动。这个阈值要看数据的坐标系投影坐标用米经纬度坐标用度不要混。5.3 坐标偏移叠加底图后路网跑到县界外面去了现象把陕西公路shp拖进QGIS配上在线卫星底图发现公路全部漂移和底图上的实际道路位置差了几百米。原因shp本身是Xian 1980或Beijing 1954坐标而在线底图是WGS84 Web墨卡托。两者之间的椭球体、投影方式都不一样直接叠图当然会偏。解决在图层属性里重新指定CRS把原始坐标系填正确。如果shp自带.prj文件先用“重投影图层”转到EPSG:3857再叠加。注意不要用“在图层属性里改显示坐标系”的方法那只是临时把坐标显示成3857几何坐标没变偏移还在。重投影之后再做一次可视化比对以某条高速的互通立交位置为参照点确认能对上。5.4 属性字段长度不够导出后路线名称被截断现象属性表里明明写着“G65包茂高速陕西段”导出成shp或者转进MapGIS后变成了“G65包茂高速”。原因源数据的dbf字段长度限制了字符串写入。原始字段长度是25写不下全称或者不同数据源拼接时字段结构不统一合并时短字段截断了长字段。解决在QGIS属性表里检查字段定义打开“字段管理”看字符长度。合并多个shp之前先用“保留字段”或“字段管理”把具体字段长度统一调大到最长的值比如50或100。执行合并后再检查一遍属性表中有没有出现星号或乱码。这个步骤很短但能避免让上级部门误读路名。5.5 拆分图层后总量对不上筛选表达式写错导致人为丢失现象把陕西公路shp拆成高速、国道、省道三个层后三层要素数量之和小于原始总要素数。原因等级字段中除了这三种之外还有县道、乡道、村级公路和“未知”记录。你只选中三类导出其他要素自然不在这三个文件里。还有一种情况是等级字段里存在空格例如“高速公路 ”比“高速公路”多了一个空格筛选时没匹配到。解决先用“全部唯一值检查等级字段确定所有取值。如果发现带空格的值先用字段计算器替换掉。表达式为replace(“grade”, ‘ ‘, ”),重点看前后是否有空格。处理完再做拆分导出后数字加和能对上。6. 把分级路网做成能交付的图快速符号化与出图前的验证习惯6.1 按等级符号化的推荐参数拆分后的各等级线层用QGIS图层属性的“符号化”做分类渲染。选择一个单线符号,然后点击“分类”按钮值选“等级”字段。QGIS会根据全文和中英文的名字自动生成图例项但线型、颜色、宽度需要你手工调。我常用的参数表如下等级颜色线宽线型备注高速公路红色1.8实线若重叠可加白边国道橙色1.2实线省道蓝色0.8实线县道绿色0.5虚线乡道灰色0.3点划线可以关闭显示设置完后点“应用”检查高速和国道是否有互相遮挡。因为高速和国道在空间上有共用路段比如某些大桥既是高速又是国道所以原始数据里会有两条重叠的线渲染时顶层会压住下层。这是正常现象。如果你不想让高速和国道重叠显示可以在样式里给高速加一个白色描边宽度调到2.6制造出“外边距”的效果图面更清楚。6.2 用字段计算器给路线加标签给高速和国道标注路线编号需要用到标签功能。在图层面板双击“高速”层“标签”选项卡里选择“单个标签”值选“road_name”。设置字体大小8号加粗颜色黑色并勾选“仅在图上不重叠时显示”来防止文字挤成一团。如果数据里有单独的路线编号字段比如“G65”“G210”值就用编号字段。如果没有完整编号可以用字段计算器拼出一个带前缀的字符串。表达式如下G || route_number || || road_name这段表达式的意思是前部固定一个G字符中间连接路线编号字段空一格再接路线名称。注意在QGIS中字符串连接符号是||不是Excel里的。如果route_number本身包含“G”字符表达式中的前缀G会导致重复标签这种情况下直接用“route_number”字段本身就好。导出图片时用“工程”菜单的“导出为图片”或“打印布局”。打印布局里最需要设置的是比例尺参数而不是地图分辨率。选择“根据地图范围”或者“根据画布尺寸”都行。出图比例尺选1500000适合展示全省路网态势。如果要展示局部城区细节比例尺调到150000同时把路网图层中乡道取消勾选避免密集得看不清。6.3 交付前最后一次验证把每一条高速都从起点到终点走一遍我见过太多人在最后交付时才发现sipline把某段高速的字段等级写成了“公路等级”而不是“等级”导致整张分类图全部变成一种颜色。所以最后一道工序我会在QGIS里全程目检一遍高等级路网。翻开“高速”的图层属性打开“特征显示”下的“显示所有要素”框选全陕西省放大到县级视线沿着G65包茂高速、G70福银高速、G30连霍高速的轴线逐个审视。检查是否有突然中断、变细、颜色被其他图层覆盖的地方。如果发现断线右键进入编辑状态使用“线要素切割合并”或“节点编辑”手工拼接。这一步做完把图层属性里的“CEPSG:5329”“EPSG:4528”这类坐标编号记录到交付说明文档里因为你转出去的shp如果别人用别的GIS打开至少要能看懂坐标系规范。这一点要养成习惯写进项目备注。这个习惯帮我避免过太多次返工。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑