
简介该压缩包提供长江经济带最新版行政区划矢量数据覆盖11个省市并细分至各地级市与各区县面向GIS开发人员、城市规划者及区域经济研究者便于开展空间统计分析、制图与政策分析。包内共22个文件、大小约20.59MB核心为三套shp文件分别对应省级、地级市、区县边界同时配有dbf属性表、prj坐标参考、shx索引及sbn/sbx空间索引等辅助文件可直接在ArcGIS或QGIS中加载使用。目前已有705人学习下载。除了基础行政边界资源还附带了便于快速预览的jpg示意图并保留编码与坐标信息对于需要精细到县级尺度的经济、人口与产业空间分析尤为实用可帮助研究者减少数据预处理时间聚焦长江经济带协同发展、生态环境评价与城镇化格局等课题。1. 长江经济带区县shp数据一套需要自己动手整理的空间底图长江经济带覆盖上海、江苏、浙江、安徽、江西、湖北、湖南、重庆、四川、贵州、云南11个省市牵扯到几百个区县。网上流传的“长江经济带各区各县shp文件.rar”压缩包通常包含省、市、县三级边界文件后缀横跨.shp、.dbf、.prj、.sbn等七八种。很多人下载后直接拖进ArcMap结果报“无法打开要素类”或者属性表显示乱码原因不是数据坏了而是对shapefile的文件构成和坐标系缺乏概念。对搞GIS和数据分析的人来说这套数据是研究城市群协同、人口密度、产业转移的基础底图但用之前必须把文件结构、投影参数和字段编码理清楚。2. 拆开shapefile从.shp到.xml每个文件到底在干什么2.1 主文件与索引文件.shp、.shx、.dbf的关系shapefile并不是一个单文件格式而是一组配套文件的总称。压缩包里看到的“长江经济带各区县.shp”只是几何信息所在的主文件它记录的是点、线、面的几何坐标也就是行政区划边界图形本身而“长江经济带各区县.shx”是几何位置索引相当于书的目录GIS软件靠它快速定位某条记录在.shp中的偏移量“长江经济带各区县.dbf”是dBASE格式的属性表每一行对应一个几何要素字段里可以存区县名称、行政区划代码、面积、人口等非空间属性。三者缺一不可否则数据打开后要么显示不了图形要么属性表为空。如果把三个文件单独拆开常见问题有这几种只有.shp没有.shx部分软件会自动重建索引但ArcMap里容易报错。.dbf被Excel打开后重新保存导致字段名被截断或编码改变中文变成乱码。后缀大小写不一致Windows下没问题Linux或macOS下可能识别失败。所以拿到压缩包后第一步不是急着做可视化而是先检查这三个主文件是否齐全、大小不为0再用GIS软件做一次“打开测试”。2.2 旁车文件.prj、.sbn/.sbx、.shp.xml分别负责什么除了主文件压缩包里还有一批容易被忽略的配套文件。以“长江经济带各地级市”为例文件名后缀包含.prj、.sbn、.sbx、.shp.xml。这些文件不是必须的但对工作流有实际影响。扩展名作用是否建议保留.prj记录坐标系与投影参数WKT格式必须保留缺失会导致“未知的空间参考”.sbn / .sbx空间索引由ArcGIS生成辅助加速查询可丢弃丢失后软件会重建.shp.xmlArcGIS元数据记录数据来源、更新时间等可保留方便追溯数据档案.shx几何索引必须保留.dbf属性表必须保留这里特别提一下.prj文件。如果.prj丢失GIS软件会把数据当成未知坐标系后续做面积计算、叠加分析时可能出现严重偏差。反之如果.prj内容和实际坐标值不匹配比如数据是经纬度坐标却写成了墨卡托投影那么整个图层会被放到错误的位置上。压缩包里各级目录的.prj文件通常保存为WGS84经纬度或CGCS2000需要打开后通过“图层属性-源”里确认。2.3 用GeoPandas快速读取这套长江经济带数据在开始分析前我喜欢先用Python的GeoPandas做一次冒烟测试确认几何和属性都能正常加载。假设把压缩包解压到了Y:/Changjiang/目录可以这样写import geopandas as gpd # 读取地级市边界注意只需要传入.shp主文件名 cities gpd.read_file(Y:/Changjiang/长江经济带各地级市.shp) # 打印数据规模、字段信息和坐标系 print(cities.shape) print(cities.columns.tolist()) print(cities.crs) # 查看前两行行政代码和名称字段 print(cities[[省, 市, 行政区划码]].head(2))这段代码的关键点有两个gpd.read_file()会自动发现同名的.shx、.dbf、.prj所以只传.shp路径就够了不需要逐个加载配套文件。.crs输出的是坐标参考系对象。如果打印结果是None说明.prj缺失后续需要人工指定坐标系。实际处理时我会顺手检查一下几何的有效性cities.is_valid.sum()统计有多少折返或自相交的边界。长江经济带这类经过多次拼接的行政区划数据经常有两三个图形的小瑕疵不影响整体分析但做拓扑检查时会报错。3. 打开后先统一坐标系从经纬度到适合面积计算的分带投影3.1 为什么要统一坐标系长江经济带跨了6个分带长江经济带从东经97度延伸到122度横跨6个6度分带。如果直接用WGS84经纬度算面积结果是一堆度没法转成平方公里如果直接使用某个高斯-克吕格投影比如中央经线在117度的3度带那么西部的四川、云南就会产生明显的长度变形。因此做跨省分析时我一般会选Albers等积投影或兰伯特等角圆锥投影。前者适合面积统计比如计算各省市农田占比后者适合方向敏感的制图但面积会略变。不同投影的适用场景差异很大下面这张表可以帮助快速选型投影方式适用场景变形特征WGS84经纬度数据存储、Web地图无投影面积不能用度推算Albers等积圆锥省级面积统计、区县面积对比面积准确形状略有变形Lambert等角圆锥制图出图、航空线路方向准确面积变形UTM 6度带工程测量、小范围分析分带使用跨带需拼接这套数据里的行政区边界如果自带WGS84地理坐标系那转换起来很简单如果压缩包里有专门的分带投影文件反而要注意不能直接混合使用。统一坐标系的本质是让所有图层处在一个共同的数学参考面上否则叠加时差几公里到几十公里都很正常。3.2 用GeoPandas一次性重投影到Albers等积投影常见做法是使用CGCS2000或WGS84下的Albers等积投影。以长江经济带整体范围为例可以把中央经线设置在105°E两条标准纬线分别设为25°N和47°N。Python脚本如下import geopandas as gpd # 读取区县级数据先统一为WGS84经纬度 gdf gpd.read_file(Y:/Changjiang/长江经济带各区县.shp) gdf gdf.to_crs(EPSG:4326) # 定义Albers等积投影参数中央经线105E标准纬线25N和47N albers_crs projaea lat_125 lat_247 lat_00 lon_0105 x_00 y_00 datumWGS84 unitsm no_defs # 执行重投影并计算每个区县面积单位平方公里 gdf_albers gdf.to_crs(albers_crs) gdf_albers[面积_km2] gdf_albers.geometry.area / 1e6 # 汇总每个省的面积验证数值合理性 print(gdf_albers.groupby(省)[面积_km2].sum().sort_values(ascendingFalse))这段代码里projaea表示Albers等积投影lat_1和lat_2是标准纬线lon_0105是中央经线。gdf.to_crs(albers_crs)会把经纬度坐标转换为以米为单位的平面坐标这时再调.area得到的面积才是平方米。除以1e6转成平方公里后你会发现云南、四川的面积排名比较靠前基本符合常识。如果只需要做省级对比直接用“长江经济带各省市.shp”即可不需要处理县级数据但县级数据容量大、字段多容易把制图软件拖慢。因此我一般会先按区域筛选只保留项目涉及的省份或城市。例如只保留四川省的区县sichuan gdf[gdf[省] 四川省] # 写回新的shp文件 sichuan.to_file(Y:/Changjiang/sichuan_counties.shp, encodingutf-8)写回时指定encodingutf-8这样后续交接给同事时不会出现中文乱码。这也是一个很多初学者的坑读的时候用GBK写的时候最好转成UTF-8统一团队协作标准。3.3 属性表字段编码读dbf文件遇到中文乱码怎么办长江经济带区县数据的.dbf文件通常存放区县名称和行政区划代码。大部分情况下是用GBK或GB18030编码保存的但GeoPandas默认按UTF-8去读于是中文名称变成乱码。解决办法是在read_file时显式指定编码。import geopandas as gpd # 用gbk编码读取dbf属性表解决中文乱码 gdf gpd.read_file( Y:/Changjiang/长江经济带各区县.shp, encodinggbk ) # 如果gbk报错则尝试gb18030或cp936 print(gdf[区县名].head())参数说明encoding参数控制的是属性表.dbf的字符集而不是.shp几何文件的编码。几何文件本身是二进制不涉及字符编码。如果字段名也乱码可以在读取后做一次暴力重命名gdf.columns [str(col).encode(latin1).decode(gbk, errorsignore) for col in gdf.columns]但这种做法只适合.dbf中字段名也用了本地编码的场景。4. 把Excel经纬度转成shpArcMap与Python两种落地方案4.1 准备一份规范的Excel坐标表做区域分析时经常遇到手头只有一份带有经纬度的Excel表格比如企业点位、采样点、事故地点需要把它叠加到长江经济带区县边界上。第一步是确认Excel表至少有四列唯一标识如点编号、经度X、纬度Y、属性描述。其中经纬度必须是十进制度数不能是度分秒否则映射后会跑到非洲或海里。检查方法在Excel里把经度列选中看范围是否在73°E到136°E之间纬度列是否在3°N到54°N之间。如果出现大于180的数说明可能是度分秒混合格式或坐标已投影需要先转换成十进制度。转换公式为十进制度 度 分/60 秒/3600并在Excel里做一列计算好。4.2 方案一ArcMap的Display XY DataArcMap用户打开ArcMap后在菜单“文件”-“添加数据”-“添加XY数据”中指定工作表、X字段经度和Y字段纬度再来选择地理坐标系通常为WGS84。点击确定后图层会自动生成一个临时的Event事件层。这个图层还不是真正独立的shp文件需要右键图层选择“数据”-“导出数据”选择“导出到磁盘”格式选“Shapefile”并指定输出路径。这样导出的shp文件才会包含几何和属性。这里容易踩两个坑导出前如果Excel表中有空经纬度ArcMap会跳过或报错最好先在Excel里筛选掉空值。导出的shp没有定义投影。如果原始经纬度是WGS84必须在导出时勾选“相同字段”或手动指定坐标系。4.3 方案二Python读Excel并写成shpPython方案更适合批量处理多张表或者要在不安装ArcGIS的机器上运行。核心是pandas负责读写Excelgeopandas负责构造几何对象代码很少import pandas as pd import geopandas as gpd from shapely.geometry import Point # 读取Excel坐标表 df pd.read_excel(Y:/points.xlsx, engineopenpyxl) # 剔除经纬度缺失的行 df df.dropna(subset[经度, 纬度]) # 构造点几何 geometry [Point(x, y) for x, y in zip(df[经度], df[纬度])] # 转换为GeoDataFrame并指定坐标系为WGS84 points_gdf gpd.GeoDataFrame(df, geometrygeometry, crsEPSG:4326) # 写到shp文件编码设为utf-8 points_gdf.to_file(Y:/points_from_excel.shp, encodingutf-8)这段代码中Point(longitude, latitude)的参数顺序是先经度后纬度很多人习惯写成“纬度, 经度”导致点位偏到海上。crsEPSG:4326是给这个新生成的shp打上WGS84坐标系的标签后面才能直接和区县边界叠加。to_file如果不指定encoding默认输出encoding会因版本不同而变化显式指定成utf-8可以避免在别的软件里打开乱码。4.4 与区县边界做叠加分析生成点shp后通常还要做一次空间连接统计每个区县内有多少个点。用geopandas一行就能完成points_in_county gpd.sjoin(points_gdf, gdf_county, howleft, predicatewithin) # 统计每个区县的点数量 count_by_county points_in_county.groupby(区县代码).size().reset_index(name数量)sjoin默认使用两个数据集的属性框进行空间相交这里指定predicatewithin表示点必须完全落在区县边界内。如果点刚好在边界上用intersects会更保险。统计结果可以合并回区县属性表再做分级设色图。5. RAR解压乱码与shp完整性上线前的最后一道保险5.1 用7-Zip命令行解压并保持中文文件名正常从网站下载的shp文件压缩包文件名经常是“长江经济带各区各县shp文件.rar”。直接右键解压后在Windows下通常没问题但如果你用macOS或Linux内置的解压工具可能无法正确识别GBK编码的文件名解压出来一堆乱码目录。常见做法是用7-Zip安装在Windows上然后执行7z x 长江经济带各区各县shp文件.rar -oY:/Changjiang -aoa7z x是解压并保留目录结构-o指定输出目录-aoa表示覆盖已存在的文件。如果文件名仍然乱码可以尝试在7-Zip的“选项”里切换编码或者在Linux下使用unrar加上-p密码参数如果有加密然后手动重命名目录。需要提醒的是不要使用所谓“rar密码移除”工具一是这类工具常捆绑恶意软件二是对强加密的RAR5格式基本无效。5.2 用Python脚本检查shp文件完整性解压后不要急着写分析代码。先跑一个快速检查脚本列出所有.shp文件并验证每个文件都能被pyshp读取import shapefile import glob # 匹配所有区县shp文件 for shp_path in glob.glob(Y:/Changjiang/**/*.shp, recursiveTrue): try: sf shapefile.Reader(shp_path, encodinggbk) num len(sf) shape_type sf.shapeType print(f{shp_path}: {num} features, shapeType{shape_type}) except Exception as e: print(fFAIL {shp_path}: {e})这段脚本用pyshp也叫shapefile检查两个核心问题一是文件是否能被正常解析二是要素数量是否为0。如果输出某个文件0 features说明.shp和.shx可能不匹配或文件本身损坏。此时不要试图修复直接从原始压缩包重新解压对应文件更快。5.3 手工验证在QGIS里跑一次“检查有效性”最后一步在QGIS中加载区县shp选择“处理工具箱”-“矢量几何”-“检查有效性”。如果存在无效几何会生成错误图层能直观看到自相交或闭合线的位置。对于边界数据少量无效几何可以先用“修复几何”工具修复修复后记得重投影一次再入库。这套流程走完长江经济带底图才算真正可用后续无论是做热力图、栅格统计还是路网叠加都能少折腾几个小时。本文还有配套的精品资源点击获取