ARTICLE DETAIL

资讯详情

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

江苏五级行政区划SHP数据:省市县乡村边界矢量图层的处理与避坑指南

江苏五级行政区划SHP数据:省市县乡村边界矢量图层的处理与避坑指南 简介2025年江苏省五级行政区划SHP矢量数据覆盖省、市、县、乡镇街道与社区村界五个层级面向GIS、城乡规划、测绘及基层治理从业者提供可直接加载的边界底图适用于专题制图、空间统计、村界级人口与资源分析等场景。资源压缩包共37个文件以5套shp矢量为核心配套dbf属性表、prj投影定义、cpg编码文件以及shx、sbn/sbx空间索引与xml元数据便于ArcGIS、QGIS等平台快速识别与读取整体28.13MB按省、市、县、乡镇、行政村分层存放可按需单独调用。已有380人学习浏览其价值在于省级至村级边界口径统一五级联动SHP可帮助用户省去多源拼接、坐标系核对和字段整理时间直接获得完整区划框架对课程设计、科研制图、专题图制作及业务系统开发都有直接参考价值。1. 江苏五级行政区划SHP数据省界到村界一套数据打通五级归属做 GIS 项目最怕的不是没数据而是数据东拼西凑省界从一个网站里找乡镇边界从另一个包里拆村界干脆没有坐标系还不统一图层一叠上去边界全部错位。这份 2025 江苏省五级行政区划 SHP 数据把省、市、县、乡镇、村五级边界整理成一套完整的矢量数据SHP 格式直接进 ArcGIS、QGIS、GeoServer 都能打开省市县乡镇村逐级套合属性表里带统一行政编码。做区划统计、专题制图、小流域分析底图、规划项目前期踏勘的工程师先用它把底图底座打稳比临时四处找数据划算得多。2. 读懂五级数据的结构12位国标编码与属性表字段排查2.1 行政编码生成规则用编码前缀做上下级关联拿到这套 SHP第一件事不是直接画图而是先搞懂每个面图层的属性表。五个图层分别对应省、市、县、乡镇、村每条记录都带一个行政编码。中国现行行政区划代码采用 12 位数字前 6 位是省市县中间 3 位是乡镇街道最后 3 位是村社区。理解这个编码结构后面做筛选、连接、拆分都顺了。# 以 320102030012 为例拆解每个层级的编码段 code 320102030012 print(省级:, code[0:2]) # 32 江苏 print(市级:, code[0:4]) # 3201 南京市 print(县级:, code[0:6]) # 320102 玄武区 print(乡镇级:, code[0:9]) # 320102030 某街道 print(村级:, code[0:12]) # 完整唯一编码代码逻辑是 Python 字符串切片按位取前段。实际工作中这个切分规则有两个常见用途一是给村级数据补乡镇字段、县字段直接用code[0:9]多次赋值就能生成层级归属列二是在做行政归属核对时用编码前 6 位去关联县级图层的 PAC 字段一致性检查比名称匹配靠谱得多。参数说明这套 SHP 里省图层记录数很少市图层对应全省地级市县级图层包含区、县、县级市乡镇图层包含镇、乡、街道村级图层数量最多记录包含村和社区。操作时注意编码位数不能混用县级编码是 6 位乡镇是 9 位村是 12 位用str.zfill(12)补零后再匹配避免把 6 位编码直接拼到 12 位字段上。2.2 属性表字段解读PAC、NAME、SHAPE_Leng 分别怎么用打开村级图层属性表常见字段有 OBJECTID、PAC、NAME、SHAPE_Leng、SHAPE_Area。PAC 就是行政区划编码和前面说的 12 位编码是同一套东西NAME 是名称注意村级图层的 NAME 可能带“村委会”“居委会”后缀做统计连接前要先统一格式SHAPE_Leng 和 SHAPE_Area 是 ArcGIS 自动计算的周长和面积单位取决于数据本身的投影坐标系。字段名类型含义使用注意OBJECTID整型要素唯一编号仅作内部索引别用它关联业务数据PAC文本/长整型12位行政编码关联统计表的主键需保持文本格式NAME文本行政名称村级可能带“村委会”后缀先清洗SHAPE_Leng双精度边界周长单位由坐标系决定别直接当米用SHAPE_Area双精度面面积投影坐标系下单位是平方米经纬度下不是字段使用上有个经常翻车的点PAC 在导出成 DBF 后可能丢前导零。如果某条编码是320102030001转成 Excel 再导回来很容易变成3201020301位数变了匹配直接失败。我一般习惯在 ArcGIS 里用字段计算器!PAC!.zfill(12)重新补位或者在 Python 里做一次str(pac).zfill(12)保证关联前编码长度统一。2.3 五级归属关系自检用空间选择验证边界套合数据整理完后要做一次真实性校验检查村级面是否真的落在对应乡镇面内乡镇面是否落在县面内。肉眼抽查靠不住上万条记录必须用工具验证。在 ArcGIS 里可以做两步检查第一步用“按位置选择”Select by Location把村级图层作为目标图层乡镇图层作为源图层选择规则设为“目标图层要素与源图层要素相交”然后比较选中的要素数量和村级总记录数。正常情况两者应该完全一致如果有村级要素没被选中说明该村的编码归属与实际位置不一致。-- 属性表里做编码前缀一致性检查统计每个乡镇下挂的村级数量 SELECT PAC AS town_code, COUNT(*) AS village_count FROM village_layer GROUP BY PAC HAVING LENGTH(PAC) 9这段 SQL 在 ArcGIS 的“按属性选择”里不支持得放到数据库或 GeoPandas 里跑但逻辑是通用的按 9 位乡镇编码分组统计每个乡镇下的村数量。如果某个乡镇下出现数量为 0 的异常记录或者村编码前 9 位在乡镇图层里找不到对应 PAC就要检查数据源是不是混入了邻近区域的边界。我一般在采购数据后先跑一遍这个分组统计记录每个乡镇的村数量再和统计年鉴核对差太多就说明数据版本有问题。3. 把数据用起来坐标系校对、按县提取与 SHP 转 KML 实战3.1 坐标系检查CGCS2000 与 WGS84 的判别与统一省、市、县、乡镇、村五个图层虽然来自同一套原始整理但导入软件后第一件事仍然是查坐标系。打开图层属性里的“源”选项卡看坐标系字符串。常见有两种GCS_China_Geographic_Coordinate_System_2000或CGCS2000_3_Degree_GK_CM_117E前者是地理坐标系后者是投影坐标系。如果是 WGS84边界数值和 CGCS2000 相差极小但涉及面积计算时不能直接混用。import geopandas as gpd village gpd.read_file(village.shp) print(原始坐标系:, village.crs) if village.crs is None: print(警告坐标系缺失需人工指定) elif village.crs.to_epsg() not in (4490, 4547, 4548, 4549): print(建议统一到 CGCS2000)这段代码用 GeoPandas 读取面图层后打印 EPSG 编号。4490 是 CGCS2000 地理坐标系4547 到 4549 是江苏常用的 CGCS2000 3 度分带投影。如果返回的 EPSG 是 4326WGS84不是不能用但做面积统计时建议投影到对应分带。参数说明江苏横跨 3 度带的 120 度和 121 度分带区省级尺度的分析用 4549CM 121E或 4547CM 117E看区域位置全省尺度的制图直接保留 CGCS2000 地理坐标系即可。做面积计算时用to_crs(EPSG:4549)转投影SHAPE_Area 字段会随投影变化重新计算。3.2 按区县提取子集属性筛选优先于空间裁剪做项目时经常只需要某个县或某几个乡镇的数据不要直接在原始图层上做裁剪Clip裁剪会产生大量狭长碎面边界处容易生成拓扑错误。正确的做法是用属性筛选把目标区县要素先选出来再导出为新图层。在 ArcGIS 里的操作路径是打开属性表 → 按属性选择 → 输入 SQL 表达式 → 右键图层 → 数据 → 导出要素。SQL 表达式写法如下PAC LIKE 320102% OR PAC LIKE 320105%这段表达式的含义是选择 PAC 编码前 6 位为 320102 和 320105 的所有要素。注意 PAC 字段如果存储为数值型LIKE 可能失效需要写成CAST(PAC AS TEXT) LIKE 320102%或者先用字段计算器补零再筛选。导出参数设置上我一般勾选“仅导出所选要素”坐标系选择“图层的坐标系”不要勾选“使用与图层相同的数据框坐标系”避免数据框是 Web 墨卡托时把边界重新投影成米制单位。筛选结果包含的属性字段会全部保留如果只留 NAME 和 PAC可以在导出前删掉多余字段减小文件体积。3.3 SHP 转 KML分级别导出与压缩参数设置ArcGIS 里自带“图层转 KML”工具但直接转换经常踩坑一是 KML 默认输出在 WGS84 地理坐标系原数据如果是投影坐标系会自动转换二是矢量面转 KML 后的边界点密度过高文件体积膨胀。我一般这样设置参数。工具参数推荐值说明图层范围全部要素按需选择按县导出时先筛选输出图片大小1024控制默认视图大小的显示精度输出 KML 坐标系WGS84不用改KML 标准就是地理坐标系要素属性设置NAME 字段把名称列作为 KML 标签显示转换完成后用 QGIS 打开 KML 检查一遍重点看折点数量。如果边界折点过多可以在转换前对图层做“简化面”处理。简化容差设置多少要看你用途省级尺度出图用 0.001 度乡镇级精细制图用 0.0001 度。容差设太大边界会失真设太小 KML 还是大没有万能值我做跨省项目时习惯先导出三个不同容差的版本对比文件大小和边界精度。4. 落地到业务专题出图、属性连接与流域分析底图准备4.1 村级面做专题图五级数据最常用的出图组合五级数据里村级面精度最高适合做人口密度、土地利用统计、公共服务设施覆盖率这类专题图。以村为单位做专题图时要注意村级面数量大直接全图渲染符号会导致出图卡顿要按乡镇分幅出图。在 ArcGIS 里实现分幅出图的常规做法用乡镇图层做数据驱动页面把乡镇名称字段设为页面名称然后每个页面只显示当前乡镇范围内的村。符号系统选择“分级色彩”分类字段用你要展示的统计指标分类方法用自然间断点类别数设 5 类色带选单色渐变比多色渐变更专业。出图前还要处理一个问题村级面之间存在大量小碎面面积特别小的村会在图面显示成一个点色块视觉上扎眼。我的习惯是在布局视图里把最小显示面积过滤掉或单独把碎面设成浅灰色这样图面信息层级更干净避免读者误读。4.2 属性连接外部统计表JOIN 的四个关键坑拿到村级 SHP 后最常做的是把 Excel 统计表人口、产值、耕地面积连到属性表上再按村出图。连接方式在 ArcGIS 里是右键图层 → 连接和关联 → 连接关联字段选村级 PAC外部表字段选统计表的行政区划编码列。第一个坑是字段类型不一致。Excel 里的编码列经常被识别成数值型SHP 属性表里的 PAC 是文本型连接后大量记录匹配不上。解决方法是先把 Excel 的编码列格式化为文本再导入 ArcGIS或者在 Excel 里用TEXT(A2, 000000000000)强制补成 12 位文本。第二个坑是外部表有重复记录。同一个村编码出现两行连接后属性表记录数会比原来多专题图数值直接翻倍。连接前先对统计表做去重保留每个村最新一条。第三个坑是编码长度不一致。统计表里的编码可能只到 9 位乡镇级连到村级面上必然失败。要么都截成 9 位做乡镇级统计要么补齐 12 位这取决于你分析单元是村还是乡镇。第四个坑是连接后数值字段类型被自动转换。ArcGIS 连接后某些数字字段会被识别成双精度四舍五入造成精度丢失做统计汇总前最好新建字段用字段计算器把值复制一遍。4.3 小流域分析底图行政边界和流域边界不能互相替代用 ArcSWAT 做小流域分析时经常有人问能不能直接用行政边界当流域边界答案是不能。行政边界是人为划定的管理界线流域边界是由地形分水岭决定的水文单元两者在山区几乎不可能重合。五级行政区划 SHP 在这类项目里的定位是辅助数据不是地形分水岭的来源。正确的准备流程是先下载 DEM 数据在 ArcGIS 里做填洼、流向计算、汇流累积再用 ArcSWAT 的流域勾画工具生成子流域边界子流域生成后把行政区划 SHP 叠加进来用空间连接统计每个子流域覆盖了哪些乡镇和村给每个子流域挂上行政编码字段方便后续把统计年鉴数据匹配到子流域上。这里有一个常见误区有人把县界图层直接转成栅格参与水文分析这会把行政边界当成地形阻挡生成的水系走向完全错误。行政区划数据只用于后处理统计和出图标注永远不要进入水文计算的输入数据链。我在做塔里木河流域类似项目时也是先跑通 DEM 提取流程再用行政边界做结果汇总这套流程的顺序不能反过来。5. 避坑排查偏移、乱码、拓扑错误与图层卡顿的五个现场5.1 五级图层相互错位坐标系叠加顺序错误现象把省界和村界同时拖进 ArcMap边界线没有套合偏移量在几百米到几公里不等。原因两个图层坐标系不一致一个带了 CGCS2000 投影信息另一个坐标系未定义ArcMap 默认按数据框坐标系显示未定义坐标系的图层被强制套到错误投影上。解决右键错位图层 → 属性 → 源 → 查看坐标系字符串。如果显示 Unknown先用“定义投影”工具手动指定为 CGCS2000 地理坐标系如果显示的是 WGS84而其他图层是 CGCS2000直接定义投影或者用“投影”工具转换到 CGCS2000。定义投影前先备份定义错了再改回来比从零重来麻烦得多。5.2 属性表字段中文乱码DBF 编码不兼容现象打开村级图层属性表NAME 字段显示成“”或者“æ±äº¬”这类乱码。原因SHP 文件的 dBASE 属性表编码和 ArcGIS 当前环境代码页不匹配。早期数据多用 GBK 编码保存中文而 ArcMap 默认按 UTF-8 读取或者反过来就会乱码。解决在 ArcMap 的图层属性 → 源里查看“代码页”改成 GBK 或者 UTF-8 后刷新。如果改代码页无效用 QGIS 打开QGIS 对编码识别更宽松右键图层 → 设置图层编码 → 选择 UTF-8 或 GBK再导出为新 SHP导出的文件就会固定编码。注意导出后原数据文件名不要带中文历史经验是纯英文路径加纯英文文件名乱码概率低很多。5.3 面积统计值明显不对投影坐标系没选对现象村级面 SHAPE_Area 字段算出来的面积和统计年鉴对比差出几倍或者同一块地在不同分带下面积不一致。原因原始数据是地理坐标系度SHAPE_Area 的单位是平方度而不是平方米直接读取数值当然不对。解决用“投影”工具把村级图层转到 CGCS2000 3 度高斯投影江苏区域常用 EPSG 4549再新建字段计算面积。计算面积时用字段计算器的!shape.geodesicArea!比!shape.area!更准确尤其在边界跨分带时。计算后抽查三五个村的面积与政府公开数据核对误差在 0.5% 以内就说明坐标系选对了。5.4 图层卡顿严重村级面数量太大渲染压力大现象把村级图层全图缩放时软件卡顿明显局部缩放稍好但放大到单个镇时操作仍不流畅。原因村级面记录数上万属性字段又多全图渲染要计算所有折点加上符号系统如果用了透明度或渐变填充GPU 和 CPU 都吃不消。解决大盘里只保留省、市、县三个图层做浏览底图乡镇和村图层关闭显示做村级分析时按乡镇筛选出子集再打开。另外删除不必要的属性字段保留 PAC、NAME 就够了字段越少要素读取越快。如果还卡把村级面做“融合”处理按乡镇字段融合成乡镇面视觉上一样但要素量骤减。5.5 CAD 底图转 SHP 后与区划边界不套合图纸坐标系混乱现象把 DWG 底图导入 ArcGIS 后地块线位和村界套不在一起平移、缩放、旋转都对不上。原因DWG 文件通常没有定义 GIS 坐标系CAD 里画图用的是毫米或米制平面坐标而 SHP 数据在 CGCS2000 下两者不在同一参考框架。解决先看 DWG 里是否有控制点坐标如果有两个以上已知点用 ArcGIS 的空间校正工具做仿射变换如果没有控制点直接在 CAD 里把图纸转到正确的坐标位置再转出 SHP。转出来后叠加村界检查偏差超过图上 2 米就要重做校正不要用手拖的方式去对齐那样会产生肉眼看不出的扭曲。6. 进阶技巧GeoPandas 按乡镇批量拆分村级 SHP 并导出 GeoJSON村级图层做完整县分析可以一次搞定但做“一村一图”或者分乡镇下发数据时需要按乡镇把村级数据拆成多个独立文件。手工逐个属性筛选导出工作量巨大用 GeoPandas 脚本批量处理是最有效的方式。import geopandas as gpd village gpd.read_file(village.shp, encodingutf-8) # 确保乡镇编码统一为9位文本 village[town_code] village[PAC].astype(str).str.zfill(12).str[0:9] village[town_name] village[NAME].astype(str) for town, group in village.groupby(town_code): gdf group[[PAC, NAME, geometry]].copy() out_path foutput/{town}.geojson gdf.to_file(out_path, driverGeoJSON, encodingutf-8) print(f已导出: {out_path}, 共 {len(gdf)} 个村)代码逻辑是先读取村级面把 PAC 统一为 12 位文本再切片取前 9 位作为乡镇编码按乡镇分组后每组写出一个 GeoJSON 文件。每条输出都带乡镇编码前缀文件名就是 9 位编码不会重名。参数说明encodingutf-8必须显式指定否则 Windows 环境读取中文属性表经常报乱码driverGeoJSON也可以换成ESRI Shapefile但 GeoJSON 体积更小Web 前端加载方便后续转 3D Tiles 也顺手。如果你的数据是经纬度坐标系而下游系统要米制坐标在循环里加一行gdf gdf.to_crs(EPSG:4549)再导出。批量拆分后还有一个验证习惯每个乡镇 GeoJSON 的文件大小差异如果特别大比如某个镇只有几条记录大概率是源数据里该镇的村级面缺失要回到原始数据检查归属。从那以后我每次给甲方交付拆分后的村界数据都会额外生成一张乡镇村级数量对照表同时打印出拆分前后总记录数是否一致两边核对不上绝不交数据。这套土办法救了我很多次希望帮到你。本文还有配套的精品资源点击获取
返回列表