
简介本资源为四川省达州市全域乡镇及街道级行政区划矢量数据包面向GIS开发者、城乡规划人员、地理信息专业师生及政务信息化从业者解决基层行政边界数据缺失、空间分析底图不全等实际问题。压缩包共11个文件含核心shp几何、dbf属性、prj坐标系、shx索引等Shapefile标准组件完整支持ArcGIS、QGIS等平台直接加载与空间叠加分析1.12MB轻量级设计兼顾精度与便携性。已有241人学习下载数据覆盖达州市全部县市区下辖乡镇街道属性字段清晰标注名称、代码等关键信息可直接用于人口热力图绘制、公共服务设施数字化选址、应急响应范围划定等典型应用场景。 做区划数据、画专题图的朋友应该都有过这种经历项目需要一份达州市乡镇街道级别的行政区划shp文件结果在网上翻来覆去找不到现成的要么是只有地市级轮廓颗粒度太粗要么是某个区县单独一份凑不齐全市偶尔找到一份坐标系不明、边界对不上、属性表里只有ID没有名字根本没法直接用。我最近为了做一套达州市乡镇级的人口密度专题图专门把全市各乡镇街道的行政区划矢量数据整理了一遍跑通了从数据检查、坐标统一、属性清洗到批量转换的整条流程。这篇博文就把这套数据的基本情况、使用要点和实操中踩过的坑一次性说清楚给正在被shp文件折磨的朋友一个可以直接照抄的参考。这份数据整理完成后覆盖了达州市通川区、达川区、万源市、宣汉县、大竹县、渠县、开江县等区县下辖的全部乡镇和街道以面要素形式存储每个乡镇有独立的属性记录。用途非常明确底图绘制、人口经济数据挂接、空间统计分析、地图服务切片发布、专题图制作都能直接用。适合的人包括自然资源和规划领域的从业者、基层政府做统计汇报的同志、做区域研究的同学以及接了大量GIS外包项目的制图员。接下来我不打算泛泛讲shp科普直接围绕这份乡镇街道数据展开把数据质量怎么检查、常用操作怎么做、哪些环节容易翻车讲透。1. 这份数据到底能干什么从一个真实需求说起1.1 一张可用的乡镇底图是半个项目的起点很多人以为行政区划shp就是“一张地图”拖进ArcGIS就能用其实远没那么简单。一份能真正支撑业务的乡镇级区划数据至少要能回答三个问题乡镇边界是否和实际管辖范围一致属性表里有没有能用来挂接业务数据的字段坐标系能不能叠加到已有的遥感影像或其他数据上我这次的需求是做一个达州市所有乡镇的人口密度分布图。人口数据来自统计年鉴包含乡镇名称、常住人口、面积、所属区县这些字段底图需要一个乡镇级面图层按乡镇名称关联后再以人口除以面积得到密度值最后分级配色。听起来很简单但实际动手就发现关联的乡镇名称两边写法有差异有的叫“东城街道”统计表里写“东城街道办事处”有的乡镇在数据里是飞地多边形图形上有好几块还有些乡镇边界因为早期数字化精度低和遥感影像叠加后肉眼可见地偏移。这些问题不解决图做出来自己都不敢信。所以这份乡镇级shp的第一个核心价值是把“全市一张底图”这个基础打好。在它的基础上不管做统计年鉴数据挂接、做基本农田保护区叠加、做教育医疗资源可达性分析还是出领导汇报用的挂图都会省掉大量反复处理底图的时间。没有底图分析无从谈起底图不准分析全是错的。1.2 正在找这类数据的人大概率在干这些事根据我平时接触的同行和后台留言找“达州市乡镇街道行政区划shp”的人需求大概集中在三类。第一类是专题图制作者。这类人最多常见于规划院、设计院、出版社或者做政务可视化的大屏项目。他们需要的是一张边界面清晰、属性里有标准名称、能直接套用配色的底图。不少人来问我的时候其实已经拿到了乡镇数据但属性表里只有ID和图斑编码没有中文名称或者名称是繁体、英文字段翻译不全导致标注没法做。这类需求对数据的要求就是“字段干净、名称标准”。第二类是空间分析用户。比如做区域经济研究的高校师生需要把统计年鉴的数据挂到乡镇面要素上做空间自相关、聚类分析或者做选址评价用乡镇边界作为基本评价单元。他们更关心属性表能否支持join操作、坐标系是否统一、各乡镇面积是否和年鉴一致。这类用户遇到最多的问题是“面积字段对不上”——shp里的面积是投影后的计算值和统计口径的行政区域面积有出入一算密度就偏差很大。第三类偏系统开发。做WebGIS平台的开发者需要把shp转成GeoJSON或矢量瓦片发布到地图服务上。他们对数据的几何质量要求高节点冗余、自相交、缝隙多都会影响切片效率和前端渲染效果。明确了自己的需求再回头去选数据就不容易被各种来路不明的数据源带偏。1.3 使用范围与合规底线说到数据来源和使用边界必须先提醒一句乡镇级行政区划数据属于基础地理信息公开渠道能拿到的通常是公开版本精度和使用范围都有限。不要拿着这些数据去做地籍调查、征地拆迁、勘测定界这类需要专业测绘资质的业务。加工使用时也要注意保留数据来源信息不传播所谓“精确界线成果”这是基本职业底线。我自己整理的这份数据定位始终是“满足专题图制图与常规空间分析”真涉及精确勘界请走正规测绘渠道。2. 拿到shp先别急着拖进软件按这三步检查底细2.1 坐标系WGS84和CGCS2000的差别比你想象的小又大坐标系是shp数据的“第一身份证”。拿到数据第一步右键查看属性找到“源”选项卡看坐标系统是什么。一份乡镇级shp最常见的两种情况一是GCS_WGS_1984也就是WGS84地理坐标系二是CGCS2000有些数据还会用高斯-克吕格投影带带号比如CGCS2000_3_Degree_GK_Zone_35或CGCS2000_3_Degree_GK_CM_105E。这里有个容易误会的地方很多人一听CGCS2000和WGS84不一样就慌。实际上在中国大陆范围内CGCS2000和WGS84的椭球参数极为接近同一个点在这两套坐标下的差异一般在几十厘米到亚米级对乡镇尺度制图来说基本可忽略。真正影响使用的是投影坐标系。如果没有投影数据单位是度ArcGIS里显示的是经纬度量算面积、长度必须先投影如果本身就是投影坐标系要确认投影带号是否和你现有数据一致。不同带号的数据叠加在一起图形会错开很远这个我在实际项目里碰到过一份乡镇数据用的是中央经线105度带另一份矢量是107度带直接叠加后边界偏了大概几公里排查半天才意识到是投影带号不一致。转换坐标系的实操路径ArcGIS里用Project工具QGIS里用导出-保存要素-选择CRS。投影建议选CGCS2000 3 Degree GK CM 105E或对应的UTM 48N达州市大概在北纬30到32度、东经106到108度之间用105度带或UTM 48N都合适。转完后自己检查一个乡镇节点的坐标验证是否落到达州市范围内。2.2 属性表除了Geometry还要看这些字段在不在一份能直接用的乡镇级shp属性表里至少要有这几类字段等级乡镇/街道名称字段NAME、所属区县字段COUNTY或SHENG、标准行政区划代码XZQH_CODE或PACH、面积字段AREA可选。以下是关键字段速查表字段用途常见字段名说明乡镇名称NAME、XZQMC、MC用于标注和join优先选标准的乡镇名称所属区县COUNTY、XJMC、SHI用于按区县分组、统计和dissolve行政代码XZQH_CODE、CODE、XZQH12位国标代码前6位是区县9-12位是乡镇/街道几何属性Shape_Area、AREA注意单位经纬度坐标下不是平方米需投影后重算乡镇名称字段的坑最多。比如达州市通川区下面既有“朝阳街道”也有“凤西街道”有些数据里写“朝阳街道办事处”“凤西街道办事处”字符串长度不一样关联时匹配不上。还有一类是乡镇撤并后老名字、新名字混在一起。宣汉县前几年部分乡镇合并合并前的老数据和新数据名字完全不同如果你手里的数据是合并前的老版本而统计年鉴用的是新名字join之后大量NULL值处理起来非常头疼。在属性表检查阶段我的习惯是先把所有乡镇名称列出来和官方发布的行政区划公告逐个核对一遍数量对不对、名字全不全、有没有重名的乡镇。达州这边有些乡镇在历史沿革上存在同名或相似名比如“天生镇”和“天宝乡”在早期的部分数据中容易混淆做空间挂接时千万别只按名称关联一定要加上区县条件做联合匹配。2.3 边界质量拓扑错误和缝隙这两个问题最隐蔽几何质量比很多人想象的更重要。乡镇级数据经过多次格式转换、裁剪、合并后容易出现三类拓扑问题自相交多边形、相邻面之间的缝隙、重叠区域。缝隙在ArcGIS里肉眼不容易发现因为边界线只有放大到一定程度才能看到。做过一次叠加统计就会发现两个相邻乡镇之间的缝隙成了“无主地”面积汇总时总是差那么一小片。修复办法是使用ArcGIS的拓扑工具集或者在生产环境里用Integrate工具做容差处理但Integrate会把边界吸附到一起去对精度要求敏感的数据要慎用容差设10米以内不要贪大。重叠比缝隙更麻烦常见于不同乡镇在河流、山脊线位置的边界绘制不一致。比如同一段河流上游乡镇的数据把河道包进来下游乡镇的数据把河道让出去叠加后两边都声称拥有这块水域。处理方式是在属性表里加一个“数据来源”字段保留原始来源信息然后用Union或Intersect做相交分析时在结果里把水域归属的判断规则写清楚比如按主流中心线或按面积重心归属。另有一个容易忽视的问题部分乡镇存在多部件图形即一个乡镇由多个不连接的面组成。这在山区很常见乡镇管辖范围跨越山体形成“飞地”式结构。统计面积时要留意ArcGIS的Shape_Area字段是否包含了全部部件的总面积还是只计算了主部件按属性表汇总时更不能用Shape_Area字段直接加必须先用Calculate Geometry重新计算一遍。3. 从shp出发的常用操作打开、转换、导出一次性跑通3.1 ArcGIS和QGIS打开shp最容易卡住的两个动作ArcGIS用户最常见的问题就是拖进去之后“找不到数据”。文件路径里有中文、图层名称里有特殊字符都可能造成显示异常。更隐蔽的问题是shp配套的.dbf、.shx、.prj文件缺失了ArcGIS只弹出“文件不被支持”或直接不识别。shp文件其实是一组文件的集合.shp存几何、.shx存索引、.dbf存属性表、.prj存坐标系。缺少.shx时有些软件还能打开但运行缓慢缺少.prj就没有坐标系信息软件会默认分配一个未知坐标系叠加时完全错位。打开前先确认目录里有完整的配套文件这也是我拿到shp后的第一反应。如果是从网上下载的zip压缩包解压后务必先核对一下文件数量和扩展名。QGIS用户的情况不一样。QGIS对shp的兼容性比ArcGIS更宽松但默认对dbf编码的识别可能出问题。国内数据大多用GBK编码存储属性QGIS默认UTF-8打开后中文名称全变乱码。解决办法是在QGIS中设置编码为GBK后再导入或者用“Save Features As”转存一份UTF-8编码的GeoJSON或gpkg备用。3.2 批量把多个shp转为CAD关键在带带号坐标和实体归类当很多人搜“批量把多个shp转为cad”往往是要把乡镇边界、宅基地、道路、水系等叠加到一张CAD底图里供设计人员使用。这里有两个关键点CAD不认经纬度坐标系必须先投影成平面坐标再导出二是不同要素类型要分层面转成CAD的封闭多段线线保持线点转成块或点实体。具体操作路径在ArcGIS中确保所有shp先执行Project统一到CGCS2000 3 Degree GK CM 105E并用有带号的坐标。使用“Export to CAD”工具批量加载多个shp按要素类型设置输出图层。导出为DXF或DWG注意“Ignore Paths”和“Seed File”的配置。Seed File可以指定CAD模板如果对线型、字高有要求提前在CAD里做好模板导出时选用这样一次就能得到接近成品的图纸。导出后在CAD里不要直接编辑坐标系CAD不像GIS有图层坐标信息所以出图比例、图幅在CAD里另外设置。QGIS里则用“MMQGIS”插件的“Export to DXF”功能或者直接用“DXF Export”工具同样要先设置好输出CRS。导出后的CAD图纸设计人员还会要求带属性的块或者带文字标注QGIS需要在字段映射里把乡镇名称作为标签字段导出这一点ArcGIS的Export to CAD不一定支持直接带文字我通常的做法是先导出一份带坐标的Excel让CAD里写脚本生成文字注记。3.3 shp转txt到底转的是什么什么时候用得着“shp转txt”这个需求听起来冷门但实际里很常见。它转的不是图形本身而是把shp的属性表或者坐标点串导出成纯文本。一种场景是给没有GIS软件的项目组用他们需要乡镇名称、面积、行政区划代码的清单直接Excel能打开一种场景是做勘测定界时测定界的转角坐标需要交给测绘软件用特定的txt格式导入。ArcGIS里操作打开属性表全选记录点击“表选项-导出”格式选文本文件字段分隔符建议用逗号或制表符。如果想把多边形边界坐标也导出来要用“Feature Vertices To Points”先提取节点再导出节点坐标或者用Python脚本遍历每个要素的几何对象把顶点坐标写出来。需要留意导出的txt文件编码默认会受到系统区域设置影响。在中文Windows下ArcGIS导出的文本文件通常是ANSI编码Linux下的程序读取容易乱码。稳妥起见导出后先用文本编辑器另存为UTF-8编码再交付。至于网络热搜里提到的“测定界shp转txt工具.tbx”它是一个ArcGIS工具箱作用是批量化地把勘测定界用的shp数据输出为符合测绘格式的txt坐标成果文件。如果没有现成工具箱完全可以用ArcPy脚本自己写一个遍历要素类读取面要素边界顶点坐标按指定的格式输出顶点序号从起始点开始首尾闭合。这个脚本并不复杂但涉及坐标精度、大地坐标还是平面坐标的选择要根据具体业务要求来。4. 实操排错乡镇级shp最常见的五个坑我一个个踩过4.1 导出shp时没有cpg文件中文属性全部变乱码这是热搜里最频繁的问题也是几乎每个GIS人都遇到过的坑。shp文件本身不存储属性编码信息.dbf文件里能不能正常显示中文取决于写数据时用的代码页code page。cpg文件就是用来记录代码页的。如果导出时有cpgArcGIS/QGIS就能按正确编码读取没有cpg软件通常按系统默认编码去猜Windows中文系统猜的是ANSIGBK如果文件其实是UTF-8编码就会显示乱码。我排查这个问题的步骤是先看导出的文件夹里有没有.cpg文件没有的话用记事本打开.dbf前的shp文件名后缀能直接看到包含乱码的字段内容吗不能因为dbf是二进制格式必须用GIS软件或专门的dbf查看器打开——这一步只是确认文件存在。再到ArcGIS里用“Add Data”添加如果乱码就在目录里把dbf用Excel或者Notepad打开检查内部存储的字符。修复办法有两个。一是在ArcPy环境中用编码参数重新写一份arcpy.FeatureClassToFeatureClass_conversion环境设置里指定“Output Encoding”为UTF-8。二是直接在QGIS中右键图层-Export-Save Features As并在“Options”里指定编码为UTF-8重新导出一次。两步都把cpg文件带上后续问题就消失了。别小看这个cpg实际项目交付时正是因为少了它接收方打开后乡镇名称全是“”一整个图组的成果被退回整改教训深刻。4.2 乡镇合并与数据更新边界和统计口径对不上是常态达州市近年的乡镇行政区划调整比较频繁不少乡镇经历了合并、拆分以及村社区级调整。这种调整对乡镇级shp的影响很大合并后的新乡镇边界由原乡镇边界拼接而成属性表里的新乡镇代码和名称可能与历史数据完全不同。如果手上的shp是2020年的而你要挂接2023年的统计年鉴数据必须仔细核对乡镇名单差异。我遇到过最典型的场景一个乡镇在2020年数据里叫“旧院镇”2023年已经并入“石塘镇”统计年鉴里没有“旧院镇”的任何数据。简单按名称join后旧院镇的记录全是空值面积也叠加不上。处理办法先获取最新的行政区划变更公告整理一份“新旧名称对照表”然后在GIS里用join或手动编辑字段更新名称再将合并乡镇的多边形用Dissolve合并为一个要素。这里有个细节要提醒合并不仅涉及图形拼接还要在属性表里更新行政区划代码代码的前六位是区县代码后三位是乡镇代码代码变了就一定要更新否则后续做任何编码关联都会出错。4.3 街道和乡镇字段混淆功能区、街道与乡镇并存时的归属问题达州市通川区、达川区有不少街道办事处还设有高新区、经开区这类功能区的管理机构。乡镇级shp的数据有的把高新区范围内的乡镇单独归类有的仍划归原行政区。做分析时如果不加区分会出现两种错误一是面积重复统计因为功能区边界和乡镇边界高度重叠二是功能区内的乡镇名称与所属区县对不上比如高新区数据里可能包含通川区的某个乡镇但你按区县汇总时这个乡镇却不在通川区名单里。处理这类问题的经验是数据里单独加一个“管理单元”字段区分“乡镇”“街道”“功能区”在统计口径上做到分析单元唯一。比如做全市人口密度图时如果统计年鉴已经按高新区、经开区单独出数据就按功能区边界来汇总如果年鉴按原行政区出数据就把功能区图斑按乡镇再切回原区县。两种口径不能混用否则图做得越精细结论越不可信。4.4 坐标位数不足导致边界锯齿一个被忽略的高频细节一份shp数据的坐标精度取决于数字化时的坐标小数位数。经纬度坐标系下保留6位小数精度大概0.1米保留5位小数精度大概1米如果只保留4位小数精度约11米。乡镇边界是沿山脊、河流走的自然曲线一旦坐标精度不够边界会呈明显锯齿状放大后甚至能看到多边形节点连成直角拐弯。检查方法很简单在ArcGIS里添加数据缩放到乡镇边界打开“编辑”选项卡查看节点的坐标显示精度或者在一个面要素上右键“编辑要素-开始编辑”看草图属性里坐标的小数位数。如果发现问题修复方式有两种一是用“Edit Vertices”工具重新整饰边界这是精细活二是用“Simplify Polygon”工具做简化但这会改动边界不能用于精度要求高的场景。我更推荐在数据源头修重新梳理原始数字化数据而不是在成品shp上硬修。4.5 join后出现大量NULL最常见的关联失败原因排序乡镇名称、行政代码字段不一致导致的join失败是我在社区里被问到最多的一类问题。原因排序大概是名称带后缀“镇”“乡”“街道”“办事处”差异、新旧名称差异、全角半角字符差异、前后有隐藏空格。隐藏空格最坑肉眼看不出来Excel看起来一样join就是匹配不上。排查步骤在Excel或属性表里用LEN()函数检查字段长度如果长度比可见字符多基本上就是有空格。用TRIM()函数清理前后空格ArcGIS字段计算器里可以用Python表达式!NAME!.strip()。统一乡镇名称后缀在数据里新建一个标准名称字段把“XX镇”和“XX镇人民政府”统一成“XX镇”。对依然匹配不上的记录人工核对建立一一映射表后手动更新。这套流程跑完一个区县的join成功率基本能到100%剩下的多半是数据来源本身缺失不硬补。5. 进阶玩法乡镇级区划数据用出花来5.1 从shp到三维场景shp转3dtiles的思路“shp转3dtiles”是近两年非常火的需求原因是Web三维GIS工具越来越普及大家想把乡镇边界做成三维立体行政区划图叠加到倾斜摄影或地形数据上。原理上shp面要素本身是二维的要变成三维体块得给每个面一个高度比如每个乡镇的GDP、人口或面积再按字段拉伸生成白模。市面上的转换工具例如CesiumLab这类可以把带高度的geojson或shp转为3dtiles。具体流程先把shp投影成Web Mercator或者直接用经纬度坐标。在GIS软件里给每个乡镇添加“BaseHeight”和“Height”字段分别表示底面高度和拉伸高度。导出为geojson格式确保字段被保留。在转换工具里指定列名作为高度属性输出3dtiles。拉伸生成的白模在宏观展示、智慧城市大屏上很出效果。不过要注意乡镇边界拉伸后的体块只适合区域宏观示意不构成精细三维城市模型如果叠加倾斜摄影需要把底高度对准地形否则房子飞在空中。5.2 渔网分割shp规则格网抽样和统计分析的利器“渔网分割shp”流行起来是因为很多分析场景需要在一个区域内做规则格网抽样。比如计算达州市各乡镇内某个POI的空间分布密度与其用乡镇边界做单元因为乡镇面积悬殊不如先按1kmx1km或5kmx5km生成规则渔网再用相交工具把乡镇属性匹配到渔网上。这样每个格网都有面积、所属乡镇、中心点坐标做空间统计时分析单元大小一致结果更公平。操作上用ArcGIS的“Create Fishnet”工具设置好范围可以取shp的总范围行数、列数按格子大小输再与乡镇shp做“Intersect”。注意渔网和乡镇边界相交后边缘格子会被裁剪成不规则多边形这时需要按格子ID重新聚合面积用格网原始面积计算才能保证统计口径一致。QGIS里则是“Research Tools-Create Grid”生成网格再用“Vector Geometry-Intersection”裁剪流程基本类似数据量大的话处理时间会明显增加建议先把乡镇shp按区县拆分后再分批处理。5.3 从乡镇轮廓到县域轮廓Dissolve的妙用很多人搜“云南省县域轮廓shp”背后其实是同一个需求——我只想要县域轮廓不想下载全省的县级数据。同样地有了达州市乡镇级shp想得到县域轮廓根本不用再去找县级数据直接按“区县名称”字段做Dissolve融合一个工具就搞定了。在ArcGIS里用“Dissolve”工具融合字段选“区县名称”或“COUNTY”输出要素类就是达州市下辖的各个区县边界。如果想提取县级行政中心点可以在乡镇面数据的基础上按“区县名称”做“Dissolve”后再用“Feature To Point”生成点。关键是对多部件要素的处理Dissolve后得到的图形一般不是标准单部件做标注时用“Multipart To Singlepart”拆开再取中心点避免标注落在多部件空隙处。这种“先乡镇、后县域”的做法最大的好处是保证数据一致性县域轮廓和乡镇边界严格嵌套不会出现县级界和乡镇界对不上的情况。否则不同来源的县级数据与乡镇数据拼在一起边界错位的清理工作极其痛苦。5.4 叠加分析与专题图的落地组合最后说一个能立刻上手的组合操作。假设你要出一张达州市各乡镇“人均公园绿地面积”专题图。流程是把各乡镇shp和公园绿地POI点数据叠加用“Spatial Join”把落在每个乡镇范围内的绿地面积/数量统计到乡镇属性表里再和人口数据join最后按人均指标做分级配色渲染。这个流程对数据要求就两个边界准确、属性字段干净。边界不准确POI归属就错字段不干净join就失败。所以前面所有数据检查、清洗工作最终都会在这样一个看似简单、实际易错的分析里体现价值。做专题图时配色方案选“Natural Breaks”或者“Quantile”都行但要注意乡镇之间的面积差异很大如果直接按总量渲染大乡镇容易掩盖小乡镇的真实水平最好用比率或密度做归一化。最后我的一个固定习惯建议你也养着整套流程走下来我的一个强烈建议是拿到任何一份行政区划shp第一时间做三件事——另存一份GeoJSON备份因为很多开源前端组件和在线可视化工具只吃GeoJSON对shp的直接支持很差用属性表导出一份乡镇名称清单压缩包放好随时可以和官方公告核对把坐标系信息写进一个txt说明文件和shp放在同一个文件夹里。这三件事做完这份数据后续无论被谁使用都能快速上手不用再重新经历一遍“坐标搞不清、名称对不上、乱码看不懂”的痛苦。做数据的人多留一步用数据的人就能少踩十个坑。后续如果要把这份达州市乡镇街道shp扩展到村社区级或者把属性表扩充到包含七普人口、GDP、耕地面积等更多字段处理逻辑都是一样的。数据本身不复杂复杂的是数据背后那些说不清道不明的“小问题”希望这篇已经把该说的坑都说了能帮你省下几个通宵。本文还有配套的精品资源点击获取