简介:一份河北省2024年县级行政区划标准地理数据包,面向地理信息分析、区域规划、科研教学及地图展示等场景,可解决县级边界矢量数据获取与标准制图样式搭建问题。压缩包共13个文件,约8.65MB,涵盖SHP矢量文件(含行政区名称、代码、面积属性)、TIF高分辨率影像背景,以及MXD制图工程文件(预设区划线、图例、比例尺等元素),支持在ArcGIS中直接加载并自由调整样式。目前已有353人学习下载。使用者无需从零配置制图要素,打开MXD即可快速生成符合规范的地图;SHP精度清晰,适合做县域空间统计、区域对比或专题图输出;TIF影像可辅助呈现真实地形地貌,提升展示效果。整体数据组织简洁,对地理学者、规划人员和教师均较为友好。
1. 河北省2024年县级地图:shape、mxd、tif 三件套到底能干什么
做国土、规划、林草或者应急项目的朋友,多半遇到过这个场景:领导要一张河北省2024年县级地图,你翻遍共享盘找到一份 shp,打开一看县界是有了,但没配色、没注记、坐标系还是十几年前的 Beijing 1954;旁边的 mxd 工程更是双击就红一片——后来你才明白,mxd 里根本不存数据,只存路径和样式,路径一断就全部失效。这份河北县级三件套不一样的地方在于:shape 文件、mxd 工程、Tif 图片放在一起,等于把「数据本体 + 制图工程 + 栅格底图」一次配齐,省掉了大量从零开始的符号化时间。它适合两类人:一类是拿到数据要尽快出图的制图岗,另一类是要做县域空间分析、统计和成果汇报的研究人员。
2. 先拆压缩包:三类文件的定位,与坐标系识别的三个入口
2.1 三类文件的分工:shp 是本体,mxd 是工程,tif 是底图
很多第一次拿到这种数据包的同事会有一个误判:以为 mxd 是「最终成果图」,打开就能看。实际上 mxd 只是一个 ArcMap 工程文档,它记录的是图层顺序、符号样式、标注规则、页面设置和数据源路径,几何数据全部存放在配套的 shape 文件里。你把 mxd 单独拷走,换个目录打开,大概率是满屏红色感叹号。
shape 文件是这份数据的主角,它用点、线、面三种基本结构表达县级行政区边界,属性表里存着县名、行政区划代码、面积等字段,可以参与空间连接、相交分析、字段统计。Tif 图片则扮演栅格底图的角色,一般是一张带地理参考的影像或渲染图,适合用来做目视参照:拿到 shp 后叠到 tif 上,能直观检查边界有没有偏移、行政单元有没有漏掉。
使用逻辑简单说就是:shp 用来分析,mxd 用来制图,tif 用来核对。如果你只做数据分析,把 shp 拿出来就够了;如果要给领导交一张好看的大图,那 mxd 里的符号化配置才是真正省时间的东西;如果你怀疑数据精度,就用 tif 做底图去叠合检查。
2.2 坐标系识别的三个入口:prj 文件、数据框属性、gdalinfo
坐标系是这份数据包最容易翻车的点,我建议拆包后第一件事不是打开 ArcMap,而是先把坐标系查清楚。第一个入口是 shp 文件包里的 .prj 文件,它是文本格式,用记事本打开就能看到坐标系定义。河北地区县级数据常见的坐标系有这么几类:CGCS2000 地理坐标系、CGCS2000 高斯三度带投影(中央经线一般是 114E 或 117E)、Albers 等积圆锥投影,以及老的 Xian80。记事本里看到GEOGCS["China Geodetic Coordinate System 2000",说明它是 CGCS2000 地理坐标;看到PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 39",说明已经是投影坐标了。
第二个入口是 mxd 工程的数据框属性,ArcMap 里右键左侧数据框,进入属性 → 坐标系选项卡,能看到整个工程预设的坐标环境。第三个入口是 tif 图片,用 QGIS 加载后在图层属性 → 信息里能看到像素尺寸和坐标范围,或者直接在命令行敲一句gdalinfo看它的 GeoTransform 参数。三个入口必须对齐:如果 shp 是 CGCS2000 高斯投影,mxd 数据框是 Web Mercator,tif 是地理坐标,那三者叠加时一定会出现偏移,处理顺序下文会展开讲。
2.3 文件命名规则与县级代码的对应关系
压缩包里的文件一般会按县区命名,例如130102_长安区.shp这种模式。这里的一段数字是县级行政区划代码,前两位代表省级(河北是 13),中间两位代表地级市,后两位代表县区,比如石家庄的县区代码就是1301xx开头。这类代码在 2024 年的数据里要特别注意:最近几年很多县改成了区,代码会跟着变,如果你的业务系统里还存着旧代码,join 的时候会出现匹配不上的问题。
| 文件组 | 扩展名 | 内容 | 主要用途 |
|---|---|---|---|
| 矢量数据 | .shp / .shx / .dbf / .prj / .cpg | 几何边界、属性表、坐标系定义 | 空间分析、边界提取、格式转换 |
| 工程文档 | .mxd | 图层顺序、样式、标注、页面设置 | 直接出图、制图模板复用 |
| 栅格底图 | .tif / .tfw | 带地理参考的影像或渲染图 | 背景参照、目视核对、成果展示 |
文件名里的年份标识也是排查线索。2024 年的县级边界和 2014 年相比,县界本身变化不大,但行政区划调整会影响属性表里的代码和名称,分析的时候最怕新旧数据混用。建议拿到手先把属性表里的县名和代码完整过一遍,结合 2.1 节的核对流程,确认这个包里的数据覆盖范围是京津冀周边还是全河北 11 个地级市。
3. shape 文件实战:把县界变成能参与分析的图层
3.1 属性表检查与字段处理
打开 shp 后先看属性表,不要急着做图。双击图层打开属性表,检查字段结构:县级数据至少要有县名(字符串)、区划代码(数字或文本)、面积字段(浮点型)。有几个常见坑会在这一步暴露:面积字段的单位到底是平方米还是平方千米,很多数据包直接写AREA但不标注单位;区划代码有的存成文本、有的存成数字,join 之前要统一字段类型;还有的包把代码存成了 double,导致130102变成130102.0,后面做关联时就乱了。
我一般会在 QGIS 里用字段计算器重新规整一遍。比如已知面积单位是平方米,想新增一个平方千米字段,表达式写"AREA" / 1000000,输出字段类型选浮点,精度留两位。这一步花不了两分钟,但能省掉后面统计汇总时的一大堆麻烦,特别是做人均密度、地均产值这类比值分析时,单位错了就是灾难。
# 在 QGIS Python 控制台里检查字段名和类型 layer = iface.addVectorLayer("/path/to/hebei_county2024.shp", "hebei", "ogr") fields = layer.fields() for field in fields: print(field.name(), field.typeName())这段代码的作用是把 shp 加载到当前工程并列出全部字段名和类型。如果你看到的AREA是Real类型,说明是浮点数;XZQDM是String还是Integer,直接决定你要不要做类型转换。确认完字段,再去处理候选字段,保留真正用得上的。
3.2 几何质量验证:多部件、裂隙与悬挂节点
县级边界数据最容易出的几何问题不是缺角,而是多部件要素和细碎缝隙。多部件的意思是:逻辑上是一个县,但几何上被拆成了好几块独立的多边形,比如石家庄主城区几个区县交错的地带,或者一些飞地。做统计的时候,这类要素会被重复计算面积,汇总结果虚高。
检查办法有两条路。ArcMap 里用「检查几何」工具,QGIS 里用Vector geometry → Check validity,跑一遍就能标出无效几何,再用Fix geometries修复。跑完检查还要用Multipart to singleparts把多部件拆成单部件,这一步之后每个要素才是干净的单面。我在做过一次县级的土地利用转移矩阵分析,因为没做这一步,某些县的面积被算了三遍,结果汇报前才发现,返工了两天。
# QGIS Python 控制台:多部件转单部件并修复无效几何 import processing result = processing.run("native:multiparttosingleparts", { "INPUT": layer, "OUTPUT": "memory:singleparts" }) single_layer = result["OUTPUT"] # 再做一次有效性检查 valid = processing.run("native:checkvalidity", { "INPUT": single_layer, "METHOD": 2, # 1=拓扑规则检查, 2=几何引擎检查 "IGNORE_INVALID": False }) print("无效要素数量:", len(valid["INVALID"]))参数说明:METHOD选 2 用的是 GEOS 几何引擎,比简单的拓扑规则更严格,能查出自相交和悬挂节点;IGNORE_INVALID保持 False,让流程在遇到严重错误时能停下来而不是带病输出。修复出来的结果如果还有零碎小面,用native:dissolve按县代码合并回去。
3.3 三种导出姿势:shp 重编码、GeoJSON、SVG
很多人不知道同一种数据在不同场景下要导成不同格式。继续在 ArcMap 或 QGIS 里做编辑分析,保持原 shp 就行,但要注意 .cpg 文件里字符集对不对,中文属性乱码多半就是 .cpg 缺失或写错了UTF-8。要做 Web 可视化或交给后端做空间查询,导出 GeoJSON 最通用;要放进报告或 PPT,导出 SVG 矢量图更清晰。
# QGIS Python 控制台:重投影并导出 GeoJSON(转 Web Mercator) params = { "INPUT": single_layer, "TARGET_CRS": "EPSG:3857", "OUTPUT": "/path/to/hebei_county_web.geojson" } res = processing.run("native:reprojectlayer", params) print("输出:", res["OUTPUT"])这段代码是高频操作:把原始 shp 从 CGCS2000 投影重投影到 Web Mercator,输出为 GeoJSON,直接丢给 Leaflet 或 GeoServer 使用。TARGET_CRS是目标坐标系,EPSG:3857 是 Web 地图通用坐标;如果你只做本地桌面分析,保持原投影即可,不需要转这一手。
命令行场景用 ogr2ogr 更快。下面这条命令完成同样的事,适合写进批处理脚本:
ogr2ogr -t_srs EPSG:3857 -f GeoJSON hebei_web.geojson hebei_county.shp-t_srs指定目标坐标系,-f指定输出格式为 GeoJSON。这里有个细节:原始 shp 如果没带 .prj,需要在命令里补-s_srs EPSG:4490(CGCS2000 地理坐标),否则 ogr 会默认按 WGS84 处理,结果就是整体偏移一条街。
4. mxd 工程文件:打开、换数据源、导出制式大图
4.1 mxd 的工作原理与 ArcGIS Pro 的兼容性
mxd 的后缀全称是 Map Document,本质上是一个 XML 结构的工程文件。它记录的是:哪些图层参与显示、图层的绘制顺序、每个图层的符号样式、标注字段、图幅大小,以及最重要的——每个图层的数据源绝对路径。ArcMap 打开 mxd 时按路径去读 shp 和 tif,路径不存在就显示红色感叹号。这是 mxd 设计上最让人头疼的一点:工程文件不打包数据,移动目录就失效。
如果你用的是 ArcGIS Pro,不用慌,Pro 可以直接打开 mxd,导入时会自动把 mxd 里的图层和数据框迁移到 Pro 工程里。打开后建议另存为.aprx,这样后续在 Pro 里编辑和出图都更顺手。但要注意,mxd 里配好的符号库如果引用了本地样式文件(.style),迁移到 Pro 后可能出现样式丢失,这是常见的小问题,重新套一遍图层样式就好。
4.2 数据源重设的两种做法:GUI 和 arcpy 批处理
拿到这份资源后,如果你发现 mxd 打开是红的,数据源路径失效了,不要重新加载 shp 再配一遍样式,那样会把你宝贵的时间全部吃掉。正确的做法是右键图层 → 属性 → 源 → 设置数据源(Set Data Source),指到本机上的新 shp 路径。如果只是目录整体移动了,ArcMap 还有一个隐藏技巧:直接改 mxd 文件里的路径前缀——但这样做容易出错,我一般还是走 GUI,逐层设一遍,顺便检查每个图层是否正确。
要批量处理多个 mxd,就得用 arcpy 写脚本了。下面的代码可以遍历工程里的所有图层,找出数据源失效的,统一重设到新目录。
import arcpy mxd_path = r"D:\data\hebei2024.mxd" new_dir = r"D:\gis\hebei\shp" mxd = arcpy.mapping.MapDocument(mxd_path) for lyr in arcpy.mapping.ListLayers(mxd): if lyr.isBroken: # 从原路径提取文件名,拼接新路径 old_path = lyr.dataSource name = old_path.split("\\")[-1] lyr.replaceDataSource(new_dir, "SHAPEFILE", name, False) print("已重设:", lyr.name) mxd.save()说明一下几个参数:dataSource是图层当前指向的完整路径;replaceDataSource的四个参数分别是新目录、数据格式(SHAPEFILE 或 RASTER)、文件名(不带扩展名)、是否校验字段映射。False表示不强制匹配字段,直接替换,适合同名 shp 的场景。如果 tif 也失效了,同样可以用这个函数处理,把第二个参数改成RASTER即可。
4.3 从 mxd 导出制式大图的关键参数
数据源修好之后,这份 mxd 最值钱的地方就出来了:图例、指北针、比例尺、标题栏都是配好的,你直接切换布局视图看一眼,微调一下就能出图。导出时主要看三个参数:分辨率、范围、背景。
分辨率一般选 300 dpi,打印出来够清晰;如果只是屏幕演示,150 dpi 就够,文件体积能小一半。导出范围选「布局」或「数据框」,不要选「全图」,后者会把画布外的空余区域也导出来。格式上,打印选 PDF 或 EPS,汇报插文档用 JPG 更省事。如果生成的图四周有一圈白边,在导出设置里把背景色设为无颜色即可。
5. 避坑与排查:坐标错位、区域空白、tif 黑边,五条高发问题
5.1 县界整体偏移上百米:坐标系不一致的下场
现象:把河北县级 shp 叠加到在线天地图或 Web 底图上,边界整体偏移几十米到上百米,隔着屏幕都能看出不对,但县与县的相对位置是准的。
原因:shp 是 CGCS2000 高斯投影,底图是 Web Mercator(EPSG:3857),两者椭球体虽然接近,但投影方式完全不同,直接叠不可避免有偏差。还有一种隐蔽情况:shp 的 .prj 丢失,软件默认按 WGS84 读取,CGCS2000 和 WGS84 在河北区域的差值大约在一百多米。
解决:先补全源坐标系,用 ogr2ogr 或 QGIS 的Assign Projection给 shp 指定正确的源坐标(CGCS2000 高斯三度带,中央经线按 114E 或 117E 选),然后重投影到 EPSG:3857 再叠加底图。记住一个原则:源坐标靠猜是不行的,缺失就先用gdalinfo -proj4去读,读不出来就得靠附近地物的分布特征来判断投影带。
5.2 市辖区拼不出完整地市:行政区代码脏值导致聚合失败
现象:做地级市汇总时,把石家庄市下属的县区按地市代码 dissolve,结果某些市辖区面积明显偏小,甚至出现空洞。
原因:属性表里的区划代码存在脏值。常见的有两类:一类是代码后几位补零方式不统一,有的存130100,有的存1301;另一类是代码被 concat 成了字符串,前导零被吃掉,变成130102没问题,但130112这种带字母的就没法匹配。
解决:先统一字段类型。在 QGIS 里用字段计算器补前缀:lpad("XZQDM", 6, '0'),把代码补齐到 6 位文本,再做 dissolve。如果还有个别县区匹配不上,打开属性表按名称手工确认,重点看那些代码里带-、空格的脏值。补完再做一次面积校验,用已知的省内总面积数值比对,误差超过 1% 就要回头查代码。
5.3 tif 图片打开一片黑:nodata 背景没有分离
现象:把 tif 直接拖进 ArcMap 或 QGIS,看到的是一张大部分区域漆黑、只有西北角有内容的图。
原因:tif 的背景区域是有像素值的,不是真正的透明,通常像素值为 0 或 255,软件默认把它当正常数据显示成黑色。这类 tif 一般是把矢量边界直接栅格化得到的,四周留白没有抠成透明。
解决:QGIS 里双击图层 → 透明度 → 将背景值设置为无效,把第 1 波段的 0 值设为透明;ArcMap 里在图层属性 → 符号系统 → 显示背景值 → 选择无颜色。处理底图类 tif 时,我建议顺手用 GDAL 重写一份,把背景直接压成 nodata:
gdal_translate -a_nodata 0 -ot Byte -co COMPRESS=LZW hebei_2024_raw.tif hebei_2024_transparent.tif-a_nodata 0把 0 值指定为无效像素,-co COMPRESS=LZW压缩体积,输出文件比原始 tif 小很多,加载性能也更好。改完之后再叠加到地图上,边界以外的区域就是干净的。
5.4 mxd 数据源红色感叹号:绝对路径失效
现象:mxd 在自己电脑上打开一切正常,拷给同事后,图层前全部出现红色感叹号,图幅内容全空。
原因:mxd 里的数据源路径是绝对路径,例如D:\data\hebei\shp\130102.shp,换了机器或换了目录就找不到了。这是 mxd 的通病,也是很多人误以为 mxd 本身包含了数据。
解决:按 4.2 节的方式逐层重设数据源,或者用 arcpy 批量 replaceDataSource。这里有个值得养成的习惯:交付 mxd 时把 shp(或 gpkg)放进同一目录结构,用相对路径组织工程,这样别人拿到手打开不至于全红。ArcGIS Pro 工程的 .aprx 同样存在这个问题,但 Pro 里修数据源更快:右键图层 → 属性 → 源 → 全局路径替换。
5.5 面积字段与地图显示面积对不上:单位与椭球面积的双重坑
现象:属性表里某个县的面积字段是 1500,按平方千米理解很合理,但用 GIS 的字段统计一算,几何面积却是 1580,两者差距明显。
原因:面积字段是当年在某种投影下计算的,可能用了 Albers 等积投影;而你现在看到的几何面积是在当前数据框坐标系(比如 Web Mercator)下实时计算的。Web Mercator 的变形特性决定了高纬地区面积被放大,河北地处北纬 40 度左右,放大效应已经不容忽视了。
解决:需要精确面积时,先把 shp 投影到 Albers 等积投影(CGCS2000 / Albers,双标准纬线取 25N 和 47N),再计算几何面积。不要用属性表里的历史字段直接做统计,除非确认它是在等积投影下计算的。做报告时我会在导出图层里新增一个字段,用area($geometry)在等积投影下算一遍,这样数字才经得起复核。
6. 进阶三招:坐标变换、底图叠加与 GeoPackage 整合
如果前面几步都走通了,这份数据在你手上就活起来了。我再分享三个自己常用的进阶操作。
第一,把整包数据统一到一个坐标环境下操作。日常 Web 可视化用 Web Mercator,做面积统计用 Albers,出纸质大图用高斯三度带。别嫌麻烦,每一份输出对应一个坐标系的习惯,能替你挡掉大量后期问题。一行命令完成 shp 到 GeoPackage 的转换:
ogr2ogr -t_srs EPSG:3857 -f GPKG hebei_web.gpkg hebei_county.shp第二,用 tif 当底图排一份速览小图。把 tif 拖进 QGIS 放在最下层,设置半透明 50%,再叠加 shp 并按县名标注,几步就能生成一张能放进 PPT 的示意图。这个流程的核心价值不是出图效率,而是它能验证数据:如果 tif 和 shp 的边界严丝合缝,说明坐标基准一致;如果存在偏移,就是前文 5.1 节的坐标系问题,早发现早处理。
第三,把 shp 和 tif 整合进同一个 GeoPackage。一个 .gpkg 文件里既放矢量也放栅格,交付给别人只是拷一个文件,再也不用担心漏了 .shx、.dbf、.prj 里的某一个。QGIS 里右键图层 → 导出 → 另存为 GeoPackage 即可,坐标投影可以自己选。从那以后,我每次拿到这类数据包都会强制走一遍「坐标系三重奏」检查:prj 文件读一遍、mxd 数据框属性看一遍、tif 的 gdalinfo 扫一遍,全部都对齐了才谈出图和统计——这个习惯救了我很多次,希望帮到你。
本文还有配套的精品资源,点击获取