资讯动态

长江经济带区县SHP批量处理:从RAR解压到坐标转换实战指南

发布时间:2026/9/11 16:40:27 来源:尧图企业网站定制
简介这份压缩包提供长江经济带覆盖各省、地级市与区县三级行政边界的shp矢量数据面向GIS开发、城乡规划及区域经济研究人群可用于地图可视化、空间统计、缓冲区分析等场景。包内共22个文件以shp主文件为核心配套dbf属性表、shx几何索引、prj坐标参考、sbn/sbx空间索引及xml元数据等辅助类型另附一张预览图可在ArcGIS、QGIS等软件中直接加载整体大小约20.59MB。文件命名清晰不同行政层级分别存放便于快速定位。目前已有705人学习下载。数据细化到区县级属性表通常附带人口、经济等基础字段可支撑专题制图与区域对比。借助这些现成底图研究者能更高效地开展长江经济带产业布局、交通网络、生态环境等空间分析也为政策评估与项目选址提供了可靠的数据基础。1. 长江经济带各区县shp文件.rar解压之前先算清三笔账同事扔过来一个“长江经济带各区各县shp文件.rar”刚解压就懵了十几个乃至几十个散落的文件夹每个文件夹里都躺着四五个同名不同后缀的文件坐标一加载对不上属性表打开全是问号。这个场景对常年处理行政区划数据的工程师来说几乎成了日常。标题看起来直白背后却是GIS数据交付里最典型也最折腾人的形态区县粒度切分、RAR整体压缩、缺少配套说明。但麻烦往往不是数据本身而是坐标系、属性编码、字段结构、几何边界这四类细节。下面按一条能直接走通的路径展开把这份RAR盘清楚、做体检、合并成可用的长江经济带区县图层再把属性连接、shp转txt、坐标转换和拓扑检查这些高频操作一次讲透。老手可以直接跳去第3章的合并策略和第5章的交付检查新手建议从第2章的解压开始一步步跟。2. 解压RAR与SHP体检动手前先弄懂文件结构与坐标系拿到压缩包的第一反应是解压但解压前和刚解压完各有一件事要先确认。确认这个RAR是单层压缩还是多层嵌套数据池里流出的包外层是一个RAR解开后里面往往又是几十个按地市命名的子文件夹子文件夹里再装各县SHP。要不要全解到底取决于你最终用哪一级粒度只做全流域整体出图可以按地市合并甚至直接在ArcMap里全部加载后另存要挂区县统计口径的数据就得解到县这一层并且保证每个县的.shp、.dbf、.prj几个配套文件齐全。2.1 RAR解压的踩坑点路径长度、中文乱码与分卷Windows上解压这类行政区划SHP包第一个坑是路径过长。区县文件夹经常是“长江经济带\安徽\安庆市\望江县2020区划.shp”这种长中文路径再解压到“C:\Users\张三\Desktop\项目1\中间数据”这种桌面路径下总长度轻松超过260个字符部分版本WinRAR或Windows自带解压直接报“文件名太长”。常规做法是先建D:\gisdata这种短ASCII根目录再解压进去路径问题基本消失。第二个坑是中文文件名在部分解压工具下乱码这个多发生在Linux服务器上通过命令行解压RAR的场景。7-Zip的7z命令不支持RAR文件名编码转换因为RAR内部并没有编码标记最稳的方式是在Windows上用WinRAR解一遍确认文件名正常后整体拷到服务器。真出现乱码就不要靠猜找源头重新要一份干净包猜乱码文件名是拿大量时间换不确定性不划算。分卷压缩不常见但历史数据池里流传过。看到.part1.rar这类后缀时把全部分卷放在同一目录从.part1开始解压。缺任何一个分卷都会报“缺少卷”分卷文件校验是强制的不要试图用其他目录里的同名文件补位。提示偶尔有人搜“rar password cracker”想破解加密的SHP包。行政区划数据一般不会设置密码遇到密码错误先检查下载的包是否完整、文件名大小写是否对得上。确认加密又确实需要这份数据正确路径是联系数据提供方拿密码暴力破解既不合适也不具备效率。2.2 SHP由多个文件组成扩展名各司其职解压完之后看到后缀各异的文件不要按扩展名随手删。SHP至少由三个文件组成发布方还会额外带几个辅助文件下表把每个扩展名的职责和缺失后果列清楚。扩展名作用缺失后果.shp要素几何本体点线面坐标全在这里缺了就没法用.shx几何索引记录每个形状的存储偏移量缺了多数软件拒绝打开.dbf属性表字段名和记录值全在这里缺了只剩图形没有属性.prj坐标系描述WKT格式的文本缺失时软件无法自动识别坐标系.cpg属性表编码声明如UTF-8、GBK缺失时中文属性极易乱码.sbn/.sbx空间索引编辑时自动生成删除不影响读取软件会重建一个完整可用的SHP.shp、.shx、.dbf三件缺一不可.prj和.cpg影响坐标系识别与中文显示拷贝给别人时也必须一起带。拿到压缩包后先把全部文件解到同一目录然后按主文件名分组核对确认每套SHP是否齐了这五个同名不同缀的文件。缺.prj的SHP基本等于半残品加载后坐标系全靠猜做面积量算和坐标转换时最容易出鬼缺.cpg则属性表中文打开必是乱码。2.3 用GDAL批量体检各区县SHP不用打开ArcMap或QGIS命令行里用GDAL就能快速确认每个区县SHP的几何类型、要素数量、范围、坐标系和属性字段。这个动作适合拿到包之后的第一件事一次性掌握全局而且为后面第3章的合并和第4章的坐标转换提前暴露问题。# 遍历数据根目录下所有shp输出关键描述行 for f in /d/gisdata/changjiang/*/*.shp; do ogrinfo -so $f | grep -E Layer name|Geometry|Feature Count|Extent|PROJCRS|GEOGCRS done逻辑说明循环遍历长江经济带目录下每个子文件夹里的shp文件ogrinfo -so表示只输出概要不逐条展开要素grep把图层名、几何类型、要素个数、范围框和坐标系这几行关键信息过滤到终端。一次执行就能看出这批数据是Polygon还是MultiPolygon、坐标系是CGCS2000还是WGS84以及整个流域是否落在合理的经纬度区间内。参数说明-sosummary only不加的话会把每条要素的属性都打印出来几十个县直接刷屏几千行Feature Count一个县的SHP正常是1个面要素如果这里显示几百上千说明文件里装的其实是乡镇或村级边界粒度比标题写的细PROJCRS投影坐标系带单位说明数据已经做过投影变换GEOGCRS地理坐标系经纬度两类混在一起合并时会产生明显错位如果本机还没装GDALWindows下可以用OSGeo4W安装包装完打开OSGeo4W Shell运行命令或者用conda装conda install -c conda-forge gdal。GDAL装好之后第3、4、5章的批量处理全部可以复用。3. 把各区县SHP合并成一张长江经济带区县图层体检过了数据整齐接下来是多数人的核心需求把散落在几十个文件夹里的区县边界合并成一张长江经济带区县面图层。这里有一个非常容易被混淆的选项合并Merge和融合Dissolve。Merge是把多个要素类拼到一个新输出每行要素及其属性原样保留Dissolve是按照某个字段把几何形状融合内部边界被打通。搜“shp只保留外边界线”的人要的是后者。3.1 合并之前先分清Merge与Dissolve很多人的业务场景其实是两种不同的目标。做区县经济统计每个县必须是独立图斑属性里保留自己的名称和代码这是Merge干的事。画一张长江经济带整体轮廓图不需要内部县界只要一条干净的外包络线这是Dissolve干的事。两者顺序不能反先Merge成一张带全部县的图层再按需要的字段Dissolve掉内部边界得到长江经济带或各省的外轮廓。Merge完成的输出属性表里每一行代表一个县字段来自多个输入缺字段自动填空。Dissolve通常按“省份”或“地市”字段融合字段值相同的要素边界打通输出要素数量等于字段取值个数。如果全部要素不选任何字段直接Dissolve就得到整个长江经济带的一个外轮廓面后续做裁剪掩膜非常实用。3.2 用ogrmerge.py批量合并的命令与参数GDAL自带一个python脚本ogrmerge.py比手动写循环加ogr2ogr -append省事支持目录递归匹配适合几十个县文件的批量操作。# 递归合并所有子目录下的shp为一个图层保留源文件路径字段 ogrmerge.py -f GeoJSON -single \ -o /d/gisdata/changjiang_merged.geojson \ /d/gisdata/changjiang -lco RFC7946NO \ -src_layer_field_name source_name逻辑说明-f GeoJSON指定输出格式为GeoJSON而不是Shapefile原因是合并几十个县的属性字段千奇百怪GeoJSON对长字段名和中文内容保留得比dbf干净而且单文件输出后续转其他格式方便。-single让所有输入文件输出到同一个图层-src_layer_field_name source_name在输出属性表里增加一个source_name字段记录每个要素来自哪个原始文件排查数据来源时可以直接按这个字段过滤。参数说明-single不加这个参数输出GeoJSON会变成多图层结构很多下游工具加载时只认第一个图层要素会缺漏-o输出路径所在目录要存在GDAL不会自动创建多级目录-lco RFC7946NO让输出坐标顺序保持为X,Y兼容ArcMap等老软件-src_layer_field_name自动附加源文件名字段建议设成短英文属性表列宽可控如果坚持输出Shapefile把-f改成ESRI Shapefile输出路径扩展名写成.shp但dbf格式对字段长度有10字符上限中文长字段名会被截断这是格式本身的约束不是GDAL的缺陷。所以前面优先选GeoJSON绕开这条限制。3.3 ArcToolbox里的Merge操作与常见误用只装了ArcMap、不想碰命令行的场景ArcToolbox里的Merge工具也能完成。位置在ArcToolbox Data Management Tools General Merge。输入要素逐个添加或通过添加文件夹一次性选入输出位置填目标geodatabase或文件夹字段映射保持默认即可默认策略是取第一个输入源的同名字段。与ogrmerge相比ArcToolbox的Merge不会自动记录每个要素来自哪个文件也没有目录递归几十个县的shp要一个人工添加。超过10个输入的批量任务建议直接用命令行跑GDAL省时且结果可重复审计。Merge只是要素拼接不处理几何相交Union会对相交区域做拓扑分解代价是要素数量暴增。区县SHP如果来源数据本身存在县与县边界重叠Merge之后重叠部分依然存在Union则会切成碎片两个工具解决的问题完全不一样。注意做面积汇总之前务必先确认相邻县之间没有重叠和缝隙。长江经济带涉及几十个县的接边投影切换和制图综合很容易造成1米量级的接边误差这种误差在肉眼看图时发现不了但会在面积统计时变成可察觉的偏差。4. 统一坐标系、shp转txt与属性连接让区县数据真正可用合并只是几何层面的拼接。真正让长江经济带区县SHP变成可分析资产要过三关坐标系统一、坐标文本导出、外部统计属性挂接。4.1 坐标系统一CGCS2000与WGS84混装的处理不同来源的区县SHP坐标系不统一是常态。有的沿用CGCS2000高斯克吕格投影有的经过一次格式转换变成了WGS84经纬度还有的从公开地图服务导出时直接变成了Web墨卡托。如果只是当底图看不量算面积距离差异勉强能接受一旦做面积统计、缓冲区或叠加分析坐标系不统一的结果就是各算各的。最稳妥的做法是先全部统一到一个基准地理坐标系再做后续操作。# 批量把区县SHP转成CGCS2000地理坐标系并指定UTF-8编码 for f in /d/gisdata/changjiang/*/*.shp; do out$(echo $f | sed s|changjiang|changjiang_zh|; s|\.shp$|_4490.shp|) ogr2ogr -overwrite -t_srs EPSG:4490 $out $f -lco ENCODINGUTF-8 done逻辑说明循环遍历每个区县shp用ogr2ogr做投影转换输出到另一个目录同时强制把属性表写成UTF-8编码。-t_srs EPSG:4490指定目标坐标系为CGCS2000地理坐标系源坐标系不管是什么输出统一到这里。-lco ENCODINGUTF-8在创建输出dbf时声明字符编码避免中文属性再次变成乱码。跑完后用第2.3节的ogrinfo命令抽查几个文件确认输出均为4490再进入后续合并或分析。参数说明-overwrite输出文件已存在时直接覆盖避免重复执行报错-t_srs EPSG:4490CGCS2000地理坐标系全国范围不涉及跨带问题要做面积量算的话按所在经度带换成EPSG:4521等投影坐标系-lco ENCODINGUTF-8有些数据集属性是GBK这一步会读源文件自带编码并转写为目标编码不必手动指定源编码长江经济带东西跨度大涉及多个投影分带跨带县界接边处的图形在转投影后容易出现微小变形。只看形态用4490做精确面积统计建议按县逐个用其所在分带的高斯克吕格投影统计完再汇总结果而不是让所有县共用同一个投影带号。4.2 shp转txt把区县边界坐标导出成文本把SHP边界导出成txt是很多业务系统的真实需求例如做动态地图的原生路径数据、三维可视化平台用的轮廓点集或者直接交换给不支持矢量格式的后端程序。本质是读取几何对象把外环坐标按顺序序列化输出。from osgeo import ogr import json ds ogr.Open(rD:\gisdata\changjiang_merged.shp) lyr ds.GetLayer(0) with open(rD:\gisdata\changjiang_bounds.txt, w, encodingutf-8) as fp: for feat in lyr: row feat.items() name row.get(NAME) or row.get(name) or 未知 geom feat.geometry() if geom is None: continue if geom.GetGeometryName() MULTIPOLYGON: for i in range(geom.GetGeometryCount()): part geom.GetGeometryRef(i) fp.write(f{name}|{json.dumps(part.GetPoints())}\n) else: fp.write(f{name}|{json.dumps(geom.GetPoints())}\n) del ds逻辑说明用Python的GDAL绑定打开合并好的SHP逐要素读取几何对象。先用GetGeometryName()判断是Polygon还是MultiPolygon。MultiPolygon说明这个县的政区包含飞地或江心洲如果不遍历子多边形输出就会漏掉部分边界。输出文本每行是“县名|坐标JSON数组”的结构坐标JSON数组是一组[x, y]对后续其他程序用json.loads就能还原整条边界。参数说明feat.items()把整行属性转成字典并取值比硬编码字段名更稳因为每个来源的SHP字段名都不一样GetGeometryRef(i)取第i个子面坐标序号从0开始json.dumps(part.GetPoints())把坐标列表序列化成JSON文本默认只有XY原始几何带高程时要改用GetPoint(i)逐个取z值导出的txt可以对接任意下游。做三维瓦片、渔网分割、道路线性参考的坐标预处理走的都是同样的提取逻辑区别只在输出格式。这里的脚本稍作改动把json.dumps换成WKT文本或二进制数组就能适配更多系统。4.3 用区县编码连接统计数据合并好的SHP属性表里通常有行政区划代码字段外部Excel统计表也按区县编号建了口径两者的连接就非常干净。代码是唯一稳定键同名县在不同年份可能叫法不同同名的概率远大于同名代码因此优先用代码做JOIN县名只做展示。-- 在PostGIS中按行政区划代码连接统计表 SELECT a.name, a.geom, b.gdp, b.population FROM changjiang_shp a JOIN county_stats b ON a.adcode b.county_code WHERE b.year 2023;逻辑说明adcode是SHP里的行政区划代码字段county_code是统计表里同含义的字段两边编码规则一致时直接等值连接。WHERE b.year 2023按年份过滤同一张表有多年的数据时不加这个条件会产生重复行。不走数据库的场景ArcMap里用右键图层 Joins and Relates Join字段选行政区划代码另一张表选统计表连接类型选“Keep all records”保留SHP全部要素。字段名建议类型说明adcode字符串TEXT县级行政区划代码不要用整数前导0会丢name字符串区县官方名称统一口径province字符串所在省级单位用于后续分类汇总year整数数据年份边界跨年更新时必须带行政区划代码存成字符串而不是整数是很多统计分析翻车的根源。像“110101”这种以0开头的代码存成整型后前导0消失JOIN匹配立刻失败或错到其他县。建表一开始就定义成TEXT类型后面省掉大量排查时间。外部统计表如果只有经纬度坐标没有区县归属要先把Excel导入ArcMap生成临时点要素再做空间连接方法是用Add Data XY Data选择经纬度字段生成图层然后右键图层执行Spatial Join目标图层选长江经济带区县面把每个点所属县的代码和名称写入点图层属性。这样生成shp文件的速度快且不用手写代码适合一次性临时分析。5. 拓扑检查、修复与干净RAR再交付合并、连接、转换都完成以后还有一个容易跳过但直接影响交付质量的环节拓扑检查。区县SHP合并后常见三类几何问题相邻县边界不重合出现细缝、边界重叠覆盖、以及多部件几何被拆成孤立记录。细缝和重叠会造成面积统计偏差多部件则可能是长江里的江心洲这类合理情况要区分对待。5.1 用Python检查无效几何from osgeo import ogr ds ogr.Open(rD:\gisdata\changjiang_merged.shp) lyr ds.GetLayer(0) bad [feat.GetFID() for feat in lyr if feat.geometry() is None or not feat.geometry().IsValid()] print(f无效几何FID列表{bad})逻辑说明遍历所有要素调用IsValid()返回False的要素记录FID后再逐个定位。修补方式有两种返回原各区县SHP重新合并跳过被破坏的个别县或在ArcMap的拓扑编辑工具中手动修正边界。跨省县界出现小于1米的接边缝隙属于投影切换和制图综合的正常产物不需要手动修后续面积分析时用1米缓冲吞掉缝隙即可。5.2 重新打包RAR并核验完整性数据整理完成准备交付或归档用低压缩率快速重打包RAR。SHP几何结构紧凑高压缩率收益微乎其微反而拖慢解压速度。# 整目录打包不保留源路径层级 rar a -m1 -ep -idq /d/gisdata/changjiang_final.rar /d/gisdata/changjiang_final/逻辑说明-m1是最低压缩级别速度快-ep在压缩时不记录源路径层级别人解压出来直接平铺在目标目录不会套出多层文件夹。交付前用ogrinfo把关键字段核一遍确认四件事要素数量等于县级单位数量、属性中文正常、坐标系为约定的EPSG:4490、source_name字段内容完整。这四步做完压缩包才算真正可以发出去对方拿到手解压加载直接出图不用再为坐标系偏移或属性乱码回头找你。本文还有配套的精品资源点击获取

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

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

免费获取报价