简介:本资源为2021年中国自然保护区空间与属性一体化数据集,面向生态环境研究者、GIS分析人员、政策制定者及高校地理/生态专业师生,用于支撑保护区分布格局分析、保护成效评估与空间规划决策。压缩包共7个文件,含shp矢量图层(含shx、prj、dbf、xml配套文件)支持GIS可视化与空间分析,xlsx表格提供结构化属性信息(名称、级别、面积、主要保护对象等),便于统计与交叉验证;整体体积仅6.04MB,轻量易用。已有8119人学习下载,体现其在科研与实务中的广泛认可度。用户可直接加载shp至ArcGIS/QGIS开展空间叠加、缓冲区分析或制图,结合xlsx完成分级统计、保护对象聚类及区域对比研究,数据字段完整、坐标系规范(WGS84),开箱即用,显著降低基础数据获取与预处理成本。 最近在整理生态空间分析相关的项目素材,翻到一个旧压缩包《2021年中国自然保护区数据.zip》,顺手把它重新处理了一遍。这包数据其实挺典型的:看起来就是一个普通的Shapefile压缩包,但真正用起来,坐标系、字段口径、面积统计、可视化这些环节,每一步都能踩出点东西来。这篇就当作一次完整的数据复盘,从解压开始,到统计分析、出图、避坑,把一套可复用的流程写出来。
在开始之前先说明一下这包数据是什么。它主要包含中国范围内各类自然保护区的空间位置、名称、类型、级别和面积等信息,适用于生态保护研究、空间规划、环境影响评价、自然地理教学等场景。适合的人群包括GIS初学者、生态学研究生、环境咨询从业者,以及那些想用公开数据做空间分析但不想从底层开始砌数据的开发者。如果你手里也有一份类似命名的保护区数据,或者准备做全国尺度的生态空间分析,这篇应该能帮你省不少时间。
1. 拿到压缩包后的“第一眼”检查
1.1 解压后先别急着拖进GIS,先看清文件家族
我拿到的是一个zip压缩包,大小大概几十MB到几百MB不等,具体看精度和属性表内容。解压之后,通常能看到不止一个文件,而是同一名字的一组文件,例如:
China_Nature_Reserve_2021.shpChina_Nature_Reserve_2021.dbfChina_Nature_Reserve_2021.shxChina_Nature_Reserve_2021.prjChina_Nature_Reserve_2021.cpgChina_Nature_Reserve_2021.sbn / sbx / qix(可选)
很多人只把.shp拖进软件,结果发现图层显示不出来,或者属性表是空的,原因就是这些配套文件没放齐全。Shapefile不是一个单一文件,而是一组文件的集合。.shp存几何坐标,.dbf存属性字段,.shx是几何位置索引,.prj是坐标系描述,.cpg负责告诉软件属性字段用什么字符编码。如果.prj缺失,软件会默认用一个未知坐标系,面积、距离计算全部可能出现偏差;如果.cpg缺失,属性表里的中文大概率乱码。
所以拿到数据的第一件事,不是打开地图,而是检查这组文件是否完整。如果缺少.prj,可以通过属性表里的经纬度范围推测坐标系,但这个方法误差很大,最稳妥的是找数据来源重新下载。如果缺少.cpg,打开属性表乱码时,可以手动指定编码,常见的中文编码是 UTF-8 和 GBK,后面我会详细说操作。
1.2 属性字段怎么读:名称、类型、级别和面积口径
把这包数据加载进QGIS或ArcGIS之后,属性表通常是这样的字段结构:
NAME:保护区名称,比如“某某国家级自然保护区”TYPE:保护区类型,比如森林生态、湿地、荒漠、野生动物等LEVEL:级别,常见的是国家级、省级、县级等AREA:面积字段,有的单位是公顷,有的是平方千米,也有的是亩,这里必须看元数据说明ESTABLISH_YEAR:建立年份,有的数据有,有的没有LOCATION:所在省份或行政区
这里最需要注意的是“面积口径”。生产者在使用的时候,可能是直接用经纬度坐标在WGS84椭球面上算的,也可能是先投影到平面再算的,这会导致同一个保护区的面积数值千差万别。我在处理的过程中发现,有些矢量面本身就存在边界重叠或缝隙,如果直接把面积字段拿来求和,结果会和重新计算面积的结果差出好几个百分点。这背后不是数据造假,而是统计口径和几何精度不同。
所以一个基本判断是:如果你只是想做一个示意图,属性表里的面积字段够用;但如果是要出统计年报、写分析报告,最好还是自己用投影坐标重新算一次面积。后面我会给出计算方法。
另外,我注意到这份数据里“自然保护区”和“自然保护地”是两个概念。自然保护地是更大的伞,包括自然保护区、自然公园、风景名胜区等。如果你下载的数据文件名是“自然保护区”,那么里面大概率不会有自然公园。做分析之前,先搞清楚数据范围,别用“自然保护区”的数据去推“自然保护地”的结论,这是新手最容易犯的一类口径错误。
2. 工具准备与数据打开:免费方案也能干重活
2.1 为什么我推荐QGIS而不是直接上ArcGIS
如果你只是偶尔处理一次空间数据,QGIS完全够用,而且是免费的,不需要破解,也不需要考虑授权问题。QGIS对Shapefile的支持很成熟,加载速度快,配色系统也比ArcGIS默认的民族风配色舒服一些。很多做生态分析的朋友一开始用ArcGIS,后来切到QGIS,主要理由是工作流更轻、插件生态丰富,而且跨平台,Windows和Mac都能跑。
打开数据的步骤很简单:
- 打开QGIS,在菜单栏选择“图层”→“添加图层”→“添加矢量图层”
- 数据源类型选择“文件”,点击“…”按钮,找到刚才解压的
.shp文件 - 编码类型如果出现乱码,手动选 UTF-8 或 GBK
- 点击“添加”,图层就会出现在地图画布上
如果加载后属性表中文正常,说明.cpg文件生效了。如果中文变成“锟斤拷”或者“涓夋.鏉”,就是编码识别失败,右键图层→“属性”→数据源,重新选择字符编码即可。
2.2 用GeoPandas读取数据,适合批量处理
如果要做批量统计、多个图层叠加分析,我习惯用Python的GeoPandas库。它的DataFrame结构对做过Pandas的人来说非常友好,处理几千个面要素毫无压力。安装方式是常规的pip install geopandas,不过建议用conda装,因为GeoPandas依赖较多,conda能自动解决底层库版本问题。
读取数据的代码很简单:
import geopandas as gpd gdf = gpd.read_file('China_Nature_Reserve_2021.shp', encoding='utf-8') print(gdf.head()) print(gdf.crs)这里有一个细节:encoding参数很重要。如果数据是GBK编码,而你读取时用了默认的UTF-8,属性字段里的中文就会乱码。如果你不确定编码,可以先用文本编辑器打开.dbf文件的前几百个字节,或者直接用Python尝试常见的几种编码,直到输出正常为止。
读取后,先打印gdf.crs看坐标系信息。如果显示的是EPSG:4326,说明是WGS84经纬度坐标;如果是EPSG:4490,就是CGCS2000经纬度坐标;如果是EPSG:4547之类的数字,那就是高斯-克吕格投影坐标。这决定了后面面积计算怎么处理。
2.3 坐标系基础:为什么不能直接在WGS84下算面积
很多人拿到地理数据,直接就用ArcGIS的“计算几何”算面积,结果发现面积比真实值大了不少,或者不同区域的面积失真程度不一样。原因很简单:WGS84是经纬度坐标系,它的单位是度,不是米。把一个以度为单位的几何图形直接用来算面积,软件必须强行把度“当作”米来处理,或者在后台做了一次并不适合该区域的球面计算,结果自然很不稳定。
正确的思路是:先把数据投影到一个合适的平面坐标系,再计算面积。对于全国范围的保护区数据,我推荐使用Albers等积投影(Albers Conical Equal Area),因为它能保证面积不因纬度变化而失真,适合全国尺度的面积统计。如果你只是分析某一个省份的数据,使用该省份的UTM投影带或者高斯-克吕格投影带更合适。
投影转换在QGIS里可以用“矢量几何”→“投影”工具批量处理,在GeoPandas里也很简单:
albers = '+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 +datum=WGS84 +units=m +no_defs' gdf_albers = gdf.to_crs(albers) gdf_albers['area_m2'] = gdf_albers.geometry.area这样算出来的area_m2就是平方米,再除以10000就是公顷,除以1000000就是平方千米。
3. 数据分析实战:从“有一堆面”到“能写进报告里”
3.1 按保护区类型和级别做统计
拿到属性表之后,最常见的需求是统计不同类型、不同级别的保护区数量和面积。这个操作在GeoPandas里非常直接:
type_stats = gdf_albers.groupby('TYPE').agg( count=('NAME', 'count'), total_area_ha=('area_m2', lambda x: x.sum() / 10000) ).reset_index() print(type_stats)输出会显示每种类型有多少个保护区、总面积多大。比如森林生态类可能数量最多,湿地类可能数量少但平均面积大,荒漠类则单个保护区面积大但总数稀少。这类统计结果可以直接放进报告的表格里。
这里有一个容易被忽视的细节:count()统计的是要素数量,不是保护区数量。如果一个保护区被拆分成多个不相邻的面要素,比如有些河流型保护区包含多个江段,那么实际保护区数量会小于面要素数量。如果要做精确的“数量”统计,需要检查是否有NAME相同或ID相同的多个要素,必要时按NAME去重后再数。
我在实际处理中发现,这份数据里确实存在同名多个要素的情况,尤其是在以河流、湿地为保护对象的类型里。这是因为保护区的边界由多个不相邻的多边形构成,Shapefile里一个要素只能记录一个外环,所以拆成了多条记录。这种数据形态是合理的,但如果忽略这一点,直接数行数,容易多算。
3.2 计算各省份的保护区覆盖率
覆盖率 = 保护区面积 / 省级行政区面积,这个指标经常被用来评估区域生态保护水平。操作流程大概分三步:
第一步,准备一份省级行政区划矢量边界数据。网上有很多公开的省界数据,选择一个数据精度适中的即可,不用太细,重点是边界与这份保护区数据能大致吻合。
第二步,把省界数据加载进来,同样投影到Albers等积投影坐标系。然后用空间连接把保护区要素归属到每个省:
provinces = gpd.read_file('province.shp', encoding='utf-8') provinces = provinces.to_crs(albers) # 空间连接:每个保护区面落在哪个省 joined = gpd.sjoin(gdf_albers, provinces, how='left', predicate='intersects')第三步,按省分组求和,得到每个省的保护区面积,再除以该省总面积:
province_protected = joined.groupby('NAME').apply( lambda x: x.geometry.area.sum(), include_groups=False ) province_total = provinces.set_index('NAME').geometry.area coverage = province_protected / province_total * 100有一点要注意:如果一个保护区跨越多个省份,sjoin可能会让它出现在多个省份的统计里,导致面积被重复计算。这种跨省保护区在现实中不少见。稳妥的做法是先把保护区面按省界进行切分,再分别计算各省内的面积,或者根据保护区的主要所在省份进行归属。具体怎么选,取决于你的分析目的。如果是评估“各省实际管辖范围内的保护地占比”,那切分更合理;如果是统计“每个省有多少保护区资源”,那归类到主要省份也可以接受。
3.3 功能分区分析:核心区、缓冲区、实验区的空间含义
许多保护区数据里还附带功能分区字段,比如核心区、缓冲区和实验区。核心区原则上禁止人为活动,缓冲区限制活动,实验区可以进行科普教育和有限度的科研活动。如果你拿到的是2021年的数据,大概率会看到这三个类别的面要素。
在分析时,我习惯把每个分区的面积占比列出来,再结合土地利用数据看核心区里是否还有耕地或建设用地。具体操作用叠加分析即可:把功能分区图层与土地利用图层做交集,然后统计不同地类在各分区的面积。
如果发现核心区内存在大面积的耕地或居民点,不必急着下结论,先确认两套数据的年份是否一致。保护区边界在历史上可能调整过,土地利用数据也可能有错。把年份对应上,再判断人地矛盾是否真实存在。
3.4 空间热点:哪些地方保护区扎堆
全国保护区分布不是均匀的,往往集中在西南山地、东北林区、青藏高原边缘等区域。简单做一次核密度分析,就能直观看到分布热点。
在QGIS里,可以用“分析工具”→“核密度分析”来实现。加载保护区面的质心点,半径根据你关注的尺度设定,全国范围我用100公里或150公里比较合适,省级范围30到50公里就行。输出栅格用渐变色渲染,热点区域会非常明显。
在Python里也可以实现核密度估计,用scipy.stats.gaussian_kde或 PySAL 库,但QGIS的交互体验更好,适合快速出图。核密度分析的意义不只是视觉,它会帮你发现那些“哪哪都有保护区”的区域,以及“完全没有保护覆盖”的空白区。后者往往才是需要关注的地方。
3.5 缓冲区分析:评估人为活动对保护区的潜在影响
保护区不是孤岛,周边的基础设施建设、农业开垦都可能对保护对象产生影响。常用的一种分析方法是建立缓冲区,看看缓冲区内的土地利用构成。
比如我想评估道路对保护区的影响,可以先用道路数据给保护区向外缓冲5公里,然后叠加土地利用数据,统计缓冲区内的不透水面比例:
buffer = gdf_albers.to_crs(albers).geometry.buffer(5000)如果发现某个保护区缓冲区内的不透水面占比偏高,那说明该保护区可能面临较强的人为干扰压力。这个指标可以和保护区的级别做相关性分析,看看是不是国家级保护区的周边环境普遍比省级更好。实际操作中,一定要先统一坐标系,再做缓冲区分析,否则缓冲距离会在不同纬度上出现不同程度的位置偏移。
4. 可视化出图:让分析结果“看起来专业”
4.1 按保护类型分级设色
在QGIS里,右键图层→“属性”→符号化,选择“分类”,按TYPE字段设置颜色。颜色的选择上,我建议用色相差异明显的配色方案来区分类型,比如森林生态用绿色系,湿地用蓝色系,荒漠用橘黄色系,野生动物用紫色系。不建议用单一色阶表示分类数据,因为分类数据没有大小之分,用连续渐变色会误导看图的人。
图例名称可以改成中文,或者保留英文原文,取决于报告读者。如果只是自己分析,怎么方便怎么来;如果是要汇报,最好把TYPE字段重新映射成明确的人类可读名称,比如“forest”改成“森林生态型”。
4.2 标注优化:别让标签糊成一团
保护区名称通常比较长,尤其是一些“某某国家级自然保护区”,十几个字很常见。直接开标注会糊成一团,解决办法有几个:
- 标注表达式里加上换行符,比如每隔六个字符换行
- 字号调小,最小8号字左右
- 开启“避让”选项,重叠时自动隐藏部分标签
- 用“标注→点位移”或者“聚合适配”来错开空间位置
如果你只是要一张示意小图,其实可以不标名称,只标类型。把名称放到一个单独的图层里,设置“仅当缩放级别大于1:100万时显示”,这样既保留信息又不显得乱。
4.3 布局出图:输出前的“最后一公里”
出图之前需要开一个打印布局。QGIS左下角切换到“打印布局”,然后:
- 插入地图:框选一个区域,把地图画布放进来
- 插入图例:勾选需要显示的图层
- 插入比例尺:设置合适的长度,比如500公里
- 插入指北针:图上一般放在右上角或右下角
- 插入文本:标注数据来源和坐标系说明
这个过程很多人会忽略一个细节:图例里的图层名可能还是文件名,导出的图看起来像“China_Nature_Reserve_2021”,不专业。在打印布局里,图例项可以双击修改标题,改成“自然保护区分布”就可以了。
另外,如果你的分析里做了面积计算,图上又没有标注坐标投影信息,那报告阅读者很难判断面积数值是否可信。建议在图的角落里加一行小字:“面积统计基于Albers等积投影,坐标系WGS84”。
5. 常见问题与排查技巧实录
5.1 中文乱码问题
这是使用国内来源的矢量数据时最常见的坑。症状是属性表里出现乱码,最常见的是“涓夋.鏉”或“鐪佺骇”这类典型的UTF-8被GBK解码的样子。解决办法如下:
- QGIS:右键图层→属性→数据源→图层编码,改成“UTF-8”或“GBK”,看哪个能正常显示
- GeoPandas:
read_file(..., encoding='gbk')或encoding='utf-8' - ArcGIS:在ArcToolbox里添加“定义投影”或者“添加编码”工具,手动指定编码
经验之谈是,如果数据是2020年以前发布的,优先试GBK;如果是2022年以后发布的,优先试UTF-8。但这不是固定的,最好还是看数据来源说明。
5.2 面积计算结果异常偏大或偏小
面积异常一般有三个原因:
- 坐标系是WGS84,没有做投影转换,导致软件用“度”来算面积,结果严重失真
- 坐标系正确但用了Web墨卡托投影(EPSG:3857)来算面积,导致高纬度地区面积虚增,低纬地区反而偏小。这个投影适合网络地图显示,不适合做面积统计
- 原始面本身存在自相交或重复顶点,导致计算时面积被重复累加或部分抵消
解决方案是:先检查坐标系,再统一转换到Albers等积投影,最后用修复几何工具检查每个要素的几何有效性。QGIS的“矢量几何”→“修复几何”工具能自动修复大部分自相交问题。
我用这份2021年的数据实测过,在WGS84下直接用GeoPandas的area属性(返回的是以“度”为单位的伪面积),同一个保护区算出来的数值和Albers投影下相差几倍;转成Albers之后,结果和官方公布面积基本能对得上,误差在合理范围内。
5.3 属性字段名被截断
Shapefile格式有个古老限制:字段名不能超过10个字节,所以中文或超长字段名可能会被截断成ESTABLISH_、PROTECTED_之类的残缺名称。这不是数据损坏,而是格式本身的限制。
解决办法可以在读取后用rename字段名,或者在QGIS里新建一个字段并复制内容。如果数据转成GeoJSON或GeoPackage格式,这个限制就不存在了。所以如果要做复杂分析,我建议先把Shapefile转成GeoPackage:
gdf.to_file('reserve.gpkg', layer='reserve', driver='GPKG')GeoPackage是开放格式,字段名可以长,也支持空间索引和拓扑约束,处理效率比Shapefile好很多。2021年这包数据虽然原始格式是Shapefile,但转换后分析体验提升明显。
5.4 图层加载后显示“无效几何”
有些保护区面可能因为数字化精度不够,存在自相交或者重复点,导致加载后某些要素无法正确显示。排查方法是:用“矢量菜单→检查几何”工具跑一遍。出现红色报错的要素,可以用“修复几何”工具处理,生成一个新图层,再检查一遍属性表是否完整。
如果修复后要素数量发生变化,比如从1000个变成1000个,但几何形状不同,说明数据本身存在多重多边形和空洞。这种情况下,需要根据实际需求决定是保留还是合并。做面积统计时,我一般保留原始要素的数量,只修复几何,不做合并,避免边界失真。
5.5 空间叠加后出现大面积“NoData”
空间连接时,有些小面积要素由于没有与省份边界相交,导致归属字段为空。原因是这些要素可能刚好位于行政边界的缝隙,或者数据本身存在偏移。解决办法是:
- 先检查这些空要素的坐标,看看它们在哪个位置
- 如果坐标明显落在某个省边界上,可能是边界数据不精确,手工指定归属
- 如果空要素数量极少,可以直接在统计中剔除,但在报告里说明剔除数量和处理方式
5.6 前几版数据和2021年数据边界对不上
如果你手头还有2015年或2018年的保护区数据,进行对比分析时,会发现不少保护区边界存在调整,有的面积增加了,有的减少了,甚至有的被撤并。这不是数据错误,而是保护区进行了优化整合,这是生态保护工作中的常态。
做时间对比时,不要直接叠加看差异,最好先按名称关联,再用对称差工具提取变化区域,最后人工核对变化是否合理。如果某个保护区的边界整个变了,可能不是边界调整,而是数据版本之间用了不同的处理标准,这类情况一般需要在结果里单独说明。
6. 这包数据还能怎么用:扩展思路分享
6.1 结合物种分布数据做“保护覆盖评估”
一个很有价值的分析是:把保护区数据与物种分布记录叠加,看看有多少物种记录点落在保护区内。国内外的物种分布数据库里有大量公开的观测数据,这些数据通常包含物种名称、经纬度、观察时间和数据来源,以GBIF为例,接口可以直接批量下载。操作思路是:把物种点数据转换成GeoDataFrame,用空间连接判断每个观测点是否落在保护区内,然后统计有多少物种的观测点完全不在保护地内,这一类“保护缺口”往往是最有研究价值的发现。
不过要注意,观测点是存在调查偏差的,有些区域观测记录多只是因为去的人多,不代表生物多样性高。所以这类分析只能反映“已知物种记录的保护覆盖情况”,不能直接推导真实世界里的物种覆盖比例。做报告时,需要在方法部分写明这个局限性。
6.2 与人类足迹数据叠加,做“保护地压力评估”
人类足迹数据(Human Footprint Index)描述了道路、农田、夜间灯光、人口密度等多维人类活动强度。将保护区边界与人类足迹栅格叠加,可以统计保护区内的人类干扰水平。具体做法是先对保护区和人类足迹栅格分别处理,用zonal_statistics统计各保护区内的平均干扰值,再按干扰值排序,找出“名义上保护但实际压力很大”的区域。
我在处理2021年数据时发现,个别保护区内部的平均人类足迹值甚至高于周边区域,这与保护区的管理现状往往密切相关。这类结果虽然比较中性,但如果直接发布,容易引发争议。我的建议是,先别急着把完整排名发出来,先做小范围方法验证,再决定对外呈现形式。
6.3 做保护区网络的空间连通性分析
保护区的生态价值不只在于单个保护区的面积,更在于它们之间是否有生态廊道连接。把全部保护区面文件提取质心,用距离矩阵分析相邻保护区的空间分布,可以计算保护区间最近邻距离,判断哪些区域相邻过于稀疏。
如果在相邻保护区之间做最小成本路径分析,还需要准备阻力面数据,比如土地利用类型选做阻力值:建设用地阻力高,耕地中等,森林和水体低。这个分析比单纯的缓冲区分析复杂,但结果非常有价值,能够直接为生态廊道规划提供技术参考。不过全国尺度的廊道分析计算量很大,建议先选一个区域做试点,比如某一个大山系或流域,而不是一次性跑全国。
6.4 转成GeoJSON/PostGIS,用于Web可视化
如果你想把保护区数据发布成Web地图,比如用Leaflet或MapLibre显示,需要把Shapefile转换成GeoJSON或者PostGIS数据库。转换后需要注意一个问题:如果原始数据是CGCS2000或高斯-克吕格投影,Web地图通常要求WGS84经纬度坐标,否则图形位置会偏移。
用GeoPandas一条to_crs(epsg=4326)就能解决。转成GeoJSON后,文件可能会比较大,建议用__geo_interface__结合json.dump压缩输出,或者用tippecanoe生成矢量瓦片,这样前端加载速度快很多。
2021年的保护区数据在Web端展示时,还可以把属性表中包含的类型和级别做成筛选条件,允许用户按类型查看,比静态图片有更强的交互感。如果你已经有数据服务后端,PostGIS存储也是好选择,查询效率远高于直接读Shapefile。
6.5 与采样的“保护地管理成效”评估结合
生态学界现在越来越关注保护地管理成效,而不只是面积指标。管理成效评估常用方法之一是“管理有效性跟踪工具”(METT),它靠问卷打分来评估保护地管理和规划执行情况。空间数据可以补充后半段的客观指标,比如用NDVI时间序列评估保护区植被变化趋势,看植被是否好转,或者用夜间灯光数据看人类活动是否变化。
把保护区数据和管理成效评估结合,可以制作“保护地档案卡”,每个保护区一个页面,左边是基本信息,右边是空间统计指标,比如覆盖率、平均NDVI变化斜率、夜间灯光趋势。这类综合评估报告比单纯的空间统计更加切合政策和管理需求,对生态保护从业者来说非常有参考价值。当然,如果只是自己练手,也可以从某一个指标开始尝试,不用一上来就做全指标体系。
写在后面:关于处理这类数据的一些体会
我这次整理2021年保护区数据,前后花了不少时间,但最大的收获不是跑通了一条流程,而是摸清了数据里那些“模棱两可”的地方:同一个名字可能对应多个面要素,面积字段可能和实测差一截,投影坐标系不统一会导致统计结果失真,不同年份的边界又可能整体偏移。做空间分析,最怕的不是数据量大,而是数据语义不清晰。希望这篇内容能帮你在面对类似的数据包时,少走一些弯路,把更多精力花在提出好问题而不是和文件格式做斗争上。
本文还有配套的精品资源,点击获取