海南省市县乡村五级行政区划SHP数据全解析
发布时间:2026/10/3 10:15:06 锦皓数字建站

简介海南省五级行政区划SHP矢量数据面向GIS开发者、城乡规划与空间分析研究人员涵盖省、市、县、乡镇街道、社区村界完整层级可支撑宏观规划到基层精细化管理的地图制作与空间分析。压缩包共38个文件以SHP、SHX、DBF、PRJ等Shapefile标准组件为主分别记录几何图形、要素索引、属性表与坐标投影整体约61.51MB。已有457人学习下载数据可直接加载至ArcGIS、QGIS等常用GIS软件使用。借助该数据可进行土地利用识别、区域发展对比、城乡扩张监测与环境变化评估村界数据还可用于农业、林业及农村社区服务为精细化管理和科学决策提供基础底图支持。1. 一份能落到村级的海南省SHP数据做规划、跑模型、出图都不再四处找边界做GIS项目的人都知道最耗时间的不是分析而是找数据。尤其是海南省这类跨市县、需要细化到乡镇和村界的工作网上下到的SHP常常只到县级省界市界凑合能看一放到乡镇就抓瞎。我前阵子做海南某个流域的小流域划分时也差一点卡在村界数据上——手头只有全省边界和几个大市界研究范围却要精确到村一级。这份2025年版海南省五级行政区划SHP数据正好把省、市地级市、县区、乡镇、村委会五级边界全部打包打开就能直接用。适合做国土规划、林业调查、水利模型、交通选线的工程师和学者尤其是需要把上级行政边界和下级村落边界叠在一起做空间分析的朋友。它能让你省去从零拼接的日子直接把精力放到分析本身。2. SHP数据的内核五级边界、字段组织和坐标系选型拿到这份数据包第一眼看到的是多个独立的SHP文件而不是一个把所有级别都揉在一起的图层。这种按级别拆分的方式是行政区划数据的常见做法好处是每级数据体积小、属性简单、加载快也方便单独更新。常见的层级是省界为一个SHP地级市界另一个SHP县区界、乡镇界、村界各一个。海南省级别上稍微特殊一点省直辖县级市比较多但数据包里已经按“省—市/县—区—乡镇—村”五级整理清楚不会混淆。2.1 五级SHP文件清单与字段含义先看文件构成。典型的数据包会包含如下文件文件名可能略有差异但结构一致文件名层级常见的几何类型主要字段hainan_province.shp省界PolygonPAC, NAMEhainan_city.shp地级市/自治县界PolygonPAC, CITY_NAME, PROVINCE_NAMEhainan_district.shp县/区界PolygonPAC, DISTRICT_NAME, CITY_NAMEhainan_town.shp乡镇/街道界PolygonPAC, TOWN_NAME, DISTRICT_NAMEhainan_village.shp村委会/居委会界PolygonPAC, VILLAGE_NAME, TOWN_NAME这里的PAC是行政区划代码很多GIS从业者习惯叫它“国标码”。不同版本的字段名可能不同有的是ADCODE、ZONE_CODE但含义一致。PAC字段非常关键因为做属性连接、按地名筛选时靠它比靠汉字稳定得多。比如你要把别的统计表人口、GDP、土地利用连接到这个村界图层直接用PAC做外键就行不会因为“二村村”这种重名而搞错。除了SHP本身数据包一般还包含.dbf属性表文件、.shx索引文件、.prj投影文件。.prj容易被忽略但它决定了坐标系统是否正确。如果打开图层时发现图形跑到赤道或海洋里极可能就是.prj缺失或错乱。这份2025版数据一般默认采用CGCS2000国家2000大地坐标系经纬度单位是度适合直接用于全国范围内的分析。如果你需要和北京54、西安80的老资料做叠加后面会在投影章节细说。2.2 为什么要选SHP而不是GeoJSON或Shapefile的替代品SHP虽然老但这正是它的优势所在。ArcGIS、QGIS、ArcSWAT、MapGIS等几乎所有桌面GIS和模型工具都原生支持SHP不需要额外做格式转换。像GeoJSON、KML虽然方便和互联网地图交互但在资深GIS软件里的兼容性参差不齐有时修改一个属性字段就报错。SHP在多年迭代后已经成为事实上的交换标准哪怕现在有File Geodatabase、GeoPackage这些更现代的后继者SHP依然是通用性最高的。另一个选择SHP的理由是它对硬件要求低。五级行政区划数据如果全部加载到一个图层里属性表可能有数千条记录叠加渲染时会卡顿。拆成多级文件后你可以按需加载做全省宏观分析只加载省界和市界做村庄级项目才加载村界这样性能会好很多。如果你习惯用Python可以用geopandas快速读取SHP它的底层就是fiona shapely处理这个标准格式非常顺手。我一般会在拿到数据后先跑一段快速检查脚本确认字段名和坐标范围是否合理import geopandas as gpd # 读取村界数据 village gpd.read_file(hainan_village.shp) # 打印坐标范围经纬度 print(village.total_bounds) # 输出示例[108.6, 18.1, 111.3, 20.1]符合海南的经纬度区间 # 查看字段信息 print(village.columns.tolist()) # 示例[PAC, VILLAGE_NAME, TOWN_NAME, geometry] # 快速检查要素数量 print(len(village))这里total_bounds返回(minx, miny, maxx, maxy)可以帮你判断坐标是否正确落在海南岛及周边海域大致经度108-111纬度18-20。如果坐标范围变成几百万的米制坐标说明数据可能已经是投影坐标需要进一步查看.prj。字段列表则能帮你确认后续用哪个字段做筛选和连接。这一步看似简单却是整个数据预处理中最容易翻车的环节——很多人不清洗就直接导入模型结果模型跑出来的成果连边界都画不对。3. 拿到SHP后的第一步坐标核查、投影转换和属性清理数据只是个半成品。从下载到真正能用中间还有一道“开箱”流程。很多新手以为解压就能用结果在ArcGIS里打开发现图形错位或者属性表乱码。下面按我的经验给出一套完整处理流程你照着走基本不会再栽在数据本身。3.1 先检查坐标系CGCS2000与ArcGIS的默认显示海南的数据一般用CGCS2000地理坐标系也就是常说的“经纬度坐标”。但在ArcGIS或QGIS里打开时如果工程文件默认用WGS84两者因为椭球参数差异就会落到微小偏移——这个偏移在高精度区域匹配时非常致命。海南省在WGS84和CGCS2000之间平面偏移通常在几十米级别具体取决于所在纬度所以如果你做的是几十米甚至米级精度的现场落地必须确认坐标系一致。在ArcGIS里右键图层查看Properties在Source选项卡能看到坐标系字符串。最好是像GCS_China_Geodetic_Coordinate_System_2000这样的名称。如果你需要与GPS采集的WGS84数据叠加稳妥的做法是不要直接在图层上改投影而是用Project工具输出一个新的图层而不是Data Management里的Define Projection它是用来修复缺失投影的不是用来做真实转换的。我用Python做转换的习惯是这样# 使用pyproj或geopandas转换坐标 import geopandas as gpd village gpd.read_file(hainan_village.shp, encodingutf-8) # 读取后如果坐标系为空先设置正确的坐标系 if village.crs is None: village village.set_crs(EPSG:4490) # CGCS2000 地理坐标系 # 如果需要转成WGS84经纬度 village_wgs84 village.to_crs(EPSG:4326) # 如果需要转成海南区域常用的投影坐标例如UTM 49N village_utm village.to_crs(EPSG:32649) # WGS84 UTM zone 49N这里EPSG:4490对应CGCS2000地理坐标系EPSG:4326对应WGS84经纬度。注意从CGCS2000转到UTM中间会经过一个变换不同软件采用的格网参数可能略有差异但大多数情况下不影响常规项目。如果你的数据叠加后存在几十厘米以上的偏移那就需要检查转换方法是否采用了带控制点的本地格网。这个精度级别在国土勘界里会用到日常规划项目里一般不需要。3.2 属性表清理乱码、空值和编码问题SHP的dbf属性表是老格式它只支持有限的字符编码。早期数据很多用GBK或者GB2312存中文而新版软件默认用UTF-8读取。结果就是打开属性表看到的不是“海口市”而是“????”或“娴峰彛”。解决这个问题要看数据包里有没有.cpg文件——它专门声明dbf编码。如果没有就需要手动指定编码读取。QGIS里可以在图层属性→数据源→编码里改ArcGIS则可以在ArcToolbox里用“转换表编码”的专用工具或者直接在Python里强制指定# 强制以GBK编码读取SHP属性表 village gpd.read_file(hainan_village.shp, encodinggbk) # 如果仍然乱码就逐一尝试常见编码 for enc in [utf-8, gbk, gb18030, big5]: try: df_test gpd.read_file(hainan_village.shp, encodingenc) print(f编码 {enc} 可用样例{df_test[VILLAGE_NAME].iloc[0]}) break except Exception as e: print(f{enc} 失败: {e})常见的规律是如果解压后有.cpg文件里面内容可能是UTF-8或GBK。如果没有就用Python挨个试找到一个名字不乱码的编码后续所有操作都强制指定这个编码。还有一点SHP字段名长度限制为10个字符简体汉字一个字符占用2字节所以有时字段名会被截断。这份数据一般已经把字段名改成拼音缩写或英文就是为了规避这个问题。清洗时还要注意空值。某些村界因为合并、撤销VILLAGE_NAME可能是空字符串。在执行连接、统计之前最好先处理空值# 删除或填充空值 village[VILLAGE_NAME] village[VILLAGE_NAME].fillna(未知村)避免在做Maplex标注或空间连接时这些空值导致图斑被遗漏。4. 实战操作从筛选县域到导出KML、DWG转SHP和ArcSWAT预处理四个高频需求在GIS群里几乎天天有人问怎么把某个县单独筛出来、怎么转KML给外业人员用平板查看、怎么把CAD的地块转成SHP、怎么给ArcSWAT做小流域分析预处理。下面逐个给出操作路径。4.1 按PAC或名称筛选出目标市县乡镇你是做海南某市的项目就只需要这个市的县界和村界。用SQL语句筛选最直接。在QGIS里打开属性表选择“按表达式选择”写CITY_NAME LIKE %海口%在ArcGIS里用Select By Attributes写法类似。用Python则可以这样筛选并导出新文件import geopandas as gpd # 读取全量市界数据 city gpd.read_file(hainan_city.shp, encodingutf-8) # 注意五级数据里行政区划代码前四位代表区县前六位代表乡镇/村 # 比如海口市龙华区一个村PAC可能是 460106002001 haikou_center_city city[city[PAC].astype(str).str.startswith(4601)] # 再读取村界筛选出海口全市的村 village gpd.read_file(hainan_village.shp, encodingutf-8) village[CITY_CODE] village[PAC].astype(str).str[:4] haikou_village village[village[CITY_CODE] 4601] # 导出为单独的SHP haikou_village.to_file(output_haikou_village.shp, encodingutf-8, driverESRI Shapefile)这里用PAC前四位数筛选的好处是避免同名地区干扰。比如“海口市”和“海口县”这种模糊匹配在下游分析中会变成灾难。注意不同版本的PAC位数可能不同一般省级是两位地市级是四位县区级是六位乡镇级是九位村级是十二位。如果你看到的数据把PAC存成了数字型就会丢失前面的零需要先补零village[PAC].astype(str).str.zfill(12)。4.2 SHP转KML外业查验怎么让手机直接打开外业同事通常不带ArcGIS拿着手机或平板就要看边界。最常见做法是把SHP转成KML导入奥维地图或Google Earth。ArcGIS直接用Layer To KML工具QGIS右键另存为KML也行。但你要注意KML只支持WGS84坐标系如果原数据是CGCS2000必须先转成4326import geopandas as gpd import simplekml # 读取并转换到WGS84 village gpd.read_file(hainan_village.shp, encodinggbk) village village.to_crs(EPSG:4326) # 转为KML用simplekml实现 kml simplekml.Kml() for _, row in village.iterrows(): if row.geometry.geom_type Polygon: coords list(row.geometry.exterior.coords) poly kml.newpolygon(namerow[VILLAGE_NAME]) poly.outerboundaryis.coords coords kml.save(hainan_village.kml)注意KML转出时复杂多边形有内环岛屿、飞地、空洞上面的简化代码只转了外环。工程中如果发现某些村委会包含多个不相连岛礁建议用QGIS“另存为”来转它会正确处理内外环。另外转出的KML不要包含过多节点否则手机会卡。一次转一个乡镇就够了。4.3 DWG转SHPCAD规划边界怎么和行政区划套合热搜词里“dwg转shp”频率很高。CAD里做规划地块边界是线段的集合转到SHP后往往不闭合、无属性甚至有多线叠加。我处理这类数据先清理CAD要素再用投影、检查、构建面的流程一步都不能省。如果你拿到的是海南某个村CAD规划图坐标系大概率是任意平面坐标或西安80需要先找到控制点做配准然后再转。ArcGIS里可以先添加CAD数据用Feature To Polygon工具生成面要素QGIS则可以先“导入矢量图层”进入后选择线图层再用Processing Toolbox里的“多边形化Polygonize”生成面。更可控的做法是使用ogr2ogr命令# 将CAD的DWG先转成DXF再通过ogr2ogr转SHP ogr2ogr -f ESRI Shapefile output.shp input.dxf -dialect sqlite -sql SELECT GEOMETRY, LayerName, EntityHandle FROM input这里sqlite方言允许你在转换时筛选CAD图层层名比如只转换“村界”图层。需要注意的是DWG转出来的线没有拓扑直接多边形化后会有大量零碎多边形后续需要按面积过滤并把碎面合并。4.4 ArcSWAT做小流域分析需要什么矢量数据ArcSWAT是很多水利同行跑流域模型的常用工具。做小流域分析时需要流域边界、河网、土地利用和土壤类型。这次的五级行政区划SHP在这里主要用途是作为出口的一个控制边界——比如你在白沙县坪岭附近做一个小流域就需要把白沙县甚至周边县的乡镇界、村界提取出来作为子流域汇水区的行政背景。ArcSWAT并不会直接使用村界作为水文单元的输入但你需要它来做确定研究区覆盖了哪些村导出CSV清单。用村界去裁剪DEM和土地利用栅格提高模型处理速度。在建模完成后按行政村统计径流或面源污染结果。具体做法是在ArcGIS中把村界与ArcSWAT输出的子流域图层做空间连接再按村界聚合。有一个易错点ArcSWAT默认投影是UTM投影如WGS84 UTM 49N而行政区划数据通常是地理坐标经纬度做空间连接前必须把两者转成同一投影。我在项目里会先把村界转换成EPSG:32649再与SWAT的subbasin.shp相交。# 将村界转成UTM 49N再投影连接 subbasin gpd.read_file(subbasin.shp, crsEPSG:32649) village gpd.read_file(hainan_village.shp, encodinggbk, crsEPSG:4490) village_utm village.to_crs(EPSG:32649) # 空间连接每个子流域对应哪些村 joined gpd.overlay(subbasin, village_utm, howintersection, keep_geom_typeFalse)这样得到的每个相交面都带有子流域编号SUB_ID和村名VILLAGE_NAME。后续给每个相交面按面积加权汇总污染物负荷就能得到每个村的统计量。如果不做投影转换就硬算相交结果多半是空图层原因就在于两个图层虽然显示上重合但底层坐标参考不一致导致空间关系判断失败。5. 避坑指南从shapechk修复到省界线文件差异我踩过的SHP数据坑做SHP数据最怕的不是分析难是数据本身暗病。我整理了五条高频踩坑记录每一条都对应着可复验的检查方法。5.1 现象SHP文件打开时报“无法读取或不受支持”文件可能已损坏原因下载过程中断或存储介质损坏导致SHP文件头或索引丢失。这种损坏不是软件能自动修复的必须借助修复工具。热门工具里有个shapechk专门检查SHP文件完整性并尽力重建索引。命令行里这样跑# 检查并修复 hainan_village.shp shapechk hainan_village.shp -r hainan_village_repair.shp解决shapechk的-r参数会生成一个修复副本。修复后注意检查字段和要素数量是否和原始一致。这个工具对.shx文件丢失特别有效如果是.dbf损坏它也能尝试重建空表但属性内容可能损失所以先备份原始文件是必须的。5.2 现象属性表中文全部乱码无法识别村名原因SHP的dbf编码与你的软件默认读取编码不一致。海南数据常见两种编码GBK和UTF-8。如果乱码就换编码读取。ArcGIS里可以给图层设置“连接”后强制指定编码更省事的办法是在QGIS里右键图层→数据源→编码改成GB18030。解决用Python试出正确编码后把数据另存为UTF-8编码的新SHP。以后每个环节都用这个新副本不要再碰原始文件。我长期的经验是尽量把数据统一转成UTF-8方便后续和PostGIS等数据库交互。5.3 现象省界、市界、县界叠在一起时出现细缝地图放大后漏底原因不同层级的数据来自不同部门边界在制图综合时做了简化相邻面的共享边在几何上没有完全重合。这种缝隙会直接影响拓扑分析和制图拼接。解决用QGIS的“消除缝隙”插件如Topology Checker加Fix gaps或者用gpd.overlay做Union后清除空隙。更稳妥的做法是直接使用数据包中“省界线文件”的说明——通常我们会看到省界有两种文件省1和省2。省1一般是省级数字线划图标准提取省2通常是基础地理信息中心发布的标准边界两者在精度和节点数量上不同。做中比例尺分析用省1就够做高精度乡镇级分析建议用省2因为省2的界线更精细节点更密。如果只是做统计图就用省1它文件小、加载快。5.4 现象图层在ArcGIS里正常但转到Python或Geopandas后发现坐标范围变成极小值或无穷大原因.prj文件存在问题比如文本编码错误或坐标系统名称被写成ArcGIS的自定义字符串。Python读取时无法解析就会给crs赋值None而几何数据本身还是正确的。若你直接to_crs()就会出错。解决先用gpd.read_file读打印total_bounds和crs。如果crs是None则根据数据元信息手动设置gdf.crs EPSG:4490。设置后再做转换。不要用set_crs去修改真实坐标它只是声明坐标系不会改变数值。5.5 现象从GeoJSON转回SHP后属性表丢失或者图形变成MultiPolygon无法写入原因GeoJSON本身支持属性和几何类型比SHP丰富转SHP时如果存在空几何或混合几何类型底层驱动会报错。另外GeoJSON的字段名可以很长超过10字符会被截断容易引起字段名冲突。解决转换前先统一几何类型把所有GeometryCollection拆解成Polygon或MultiPolygon。同时检查属性字段名确保不超过10字符用英文缩写不要带空格。比如把“VILLAGE_NAME”改成“VLG_NAME”也不是不行但个人建议保留既有字段名因为这份数据已经用缩写字段名了。如果你是从网站用json转shp的在线工具转换也要小心字段名被自动截断转完一定检查。6. 进阶把村界数据做成渔网、切片、发布成3DTiles以及用省界线做质量核验数据最终要能出成果、上平台。适合深入玩的几个方向是渔网分割、地理切片、3DTiles发布、以及利用省界线检查数据拓扑。下面挑两个常用场景给出参数表和一个可跑通的脚本。6.1 用村界生成规则渔网并做面积汇总渔网分割在空间抽样、网格统计、三维模型重建中很常见。QGIS的Create Grid工具或者ArcGIS的Create Fishnet都能直接生成规则格网。但注意渔网的范围需要和村界范围对齐否则会有边缘零碎。参数建议参数项建议值网格间距0.05度约5公里根据需要的空间分辨率调整网格类型Polygon便于空间连接对齐范围使用村界数据的图层范围先执行“按图层范围”结果坐标系与原数据一致暂不要改变投影生成渔网后把渔网与村界相交每个格网内统计涉及多少个村可输出一个热力分布。6.2 把SHP转成3DTiles从矢量发光到图形平台对于做智慧城市项目的人把行政区划SHP发布为3DTiles是一件很常见的事。可以先在ArcGIS Pro中用Data Origin工具将SHP转换为Scene Layer PackageSLPK再上传到或本地发布。也可以用Cesium平台自行处理。如果能接受一个简单的矢量化切片流程可以用Cesium ion配合3D Tiles工具或者用pg2tiles这类开源方案。参数上需要关注几何简化阈值如0.001度、属性压缩格式Draco、纹理图集大小一般2048。转换完成后用Cesium加载可以看到村界边界在三维地面上做贴地显示非常直观。不过要注意坐标系推荐使用EPSG:4978地心坐标系这通常需要先转成EPSG:4979再生成切片。6.3 用省界线文件做拓扑质量核验这是很多老工程师的隐藏技巧。当你拿到一份新SHP数据时不要只看地图缩放要用省界线作为“控制线”做检查。具体做法把省界SHP和县界的省界线一侧做线叠置分析提取距离大于一定阈值如50米的区段逐段排查。凡是报告都指向某处争议地块说明该处行政边界很可能存在问题。我从那以后每次处理五级数据都强制跑一遍这套流程先检查坐标范围再试编码再检查拓扑缝隙最后用省界线做一次硬校验。这几个动作下来项目的底层数据质量就稳了后续分析再出现奇怪的结果我就敢直接怀疑是分析逻辑而不是数据本身。希望这些整理好的步骤和坑能让你在海南项目上少走几步冤枉路也希望这份五级村界SHP数据真正帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。