简介:全国第二次土壤普查——土壤类型数据集,面向地理信息系统(GIS)、土壤学、农业与土地规划领域的研究者及从业者,尤其适合需要空间底图的高校师生、科研机构与规划部门,系统呈现我国土壤类型空间分布信息,可用于农业区划、环境评估、土地利用及生态保护。压缩包共269个文件,大小25.33MB,以shp、dbf、shx等GIS矢量数据为核心,辅以prj投影信息、doc、txt说明文档(含土壤分类体系)及gson等辅助格式,便于在主流GIS工具中加载、转换与查阅属性。数据同时提供全国与分省矢量图层,如新疆、西藏、内蒙古等均单独划分,涵盖土壤类型、面积、位置等属性,可精确查询并与其他地理数据叠加,开展空间统计和土壤与环境关系分析。目前已有3169人学习下载,对于农业科研、土地规划、教学示范和区域对比均具有较高实用价值。
1. 全国第二次土壤普查数据集:一份三十年前画下的土壤底图
做土壤相关项目,最绕不开的一份老底图就是全国第二次土壤普查土壤类型数据集。它来自上世纪八十年代前后统一部署的一次大规模土壤调查,以县为基本单位野外勾绘,最终汇总成一套覆盖全国的土壤类型多边形图层。到今天,很多地区能拿到的土壤空间数据仍然只有这一套是全域覆盖、跨县统一的。它能解答具体问题:某个图斑是什么土类,属于哪个亚类,面积大约多少亩,和地形母质有什么对应关系,也是农业区划、耕地质量评价、环境风险评估里跑不掉的本底数据。它适合做区域尺度上的趋势分析和历史对比,不适合当精确界址或地块确权依据。下面从数据结构讲到实际分析,最后把高频率翻车点一次说清。
2. 先看懂数据本身:分类体系、图层结构与常见字段
这一章解决一个问题:拿到压缩包之后,别急着拖进GIS。先弄明白你手上的这套数据是怎么分类的、由哪些文件组成、坐标系是什么,否则后面每一步都可能白做。
2.1 发生学分类层级的五个粒度:土类到变种
全国第二次土壤普查用的是发生学分类体系,自上而下分成土类、亚类、土属、土种、变种五级。和现在流行的土壤系统分类不同,发生学分类强调成土过程与地理景观,所以图斑边界往往和地貌、母质、植被界线高度重合。土类是最稳定的统计单元,例如红壤、黄壤、棕壤、褐土、黑土、黑钙土、潮土、水稻土等,二普最终确认的土类数量在几十个左右;亚类是在土类内部按照水热条件、剖面构造再切分,比如棕壤里的酸性棕壤、潮棕壤;土属更强调母质和水分来源,直接对应到野外填图时能识别的单元;土种是基层单元,农民和农技员常说的小地名土名往往对应土种;变种只在县级详查里保留,省级汇总数据里很少见。
拿到数据集后第一件事就是确认属性表里到底填到哪一级。有些副本只保留了土类和亚类,有些县把土种也填完整了。如果你的研究目标是作物适宜性评价,土种缺失几乎没法做;如果只是做生态区划,土类足够。不要想当然默认所有图斑都有土种。我通常先跑一个统计看每一级的空值数量,空值超过三成就要考虑降级使用。这里还有个关键差异:正在开展的三普采用土壤系统分类,以诊断层和诊断特性为基础,分类结果和二普图斑并不是一一对应。如果你要做二普与三普的衔接对比,必须先建立土类、亚类到系统分类参比表的对应关系,不能直接用图层属性去连接,否则面积统计会差得离谱。
2.2 Shapefile 与属性表:拿到手先清点哪些文件
二普数据数字化年代早,流传最广的格式就是分县或分省的Shapefile。一个完整的Shapefile绝不只是一个.shp文件。常见文件及作用见下表:
| 文件/扩展名 | 作用 | 缺失后果 |
|---|---|---|
| .shp | 几何坐标 | 数据打不开 |
| .shx | 几何索引 | 部分软件打不开或报错 |
| .dbf | 属性表 | 有图斑但看不到土类面积 |
| .prj | 坐标系描述 | 打开后坐标未知,无法叠加 |
| .cpg | 编码说明 | dbf中文容易乱码 |
很多网上下到的副本只传了.shp和.dbf,缺.shx或.prj。.shx缺失时QGIS会尝试重建,但ArcGIS直接报错;.prj缺失最麻烦,后面必须手动指定坐标系,而指定错了所有空间分析都会错位。
属性表字段一般包括:省代码、县代码、图斑编号、土类、亚类、土属、土种、面积、周长。面积字段单位不统一,有的用亩,有的用公顷,还有的用平方公里。我见过最乱的一份数据,同县不同乡镇图斑的面积字段竟然有两种单位,如果不先分组检查单位直接汇总,结果连数量级都是错的。所以拿到手先看面积字段的范围,正常土壤图斑面积在小数点后两位到上万亩之间,突然出现几十万的值,基本就是单位混了或者字段被拼错。另一个容易忽略的是图斑数量,省级数据的图斑数通常有几十万甚至上百万,如果你拿到一份只有几千行的“省级数据”,那多半是经过严重抽稀或只保留了县级汇总结果。
2.3 坐标系统一:从北京54、西安80到CGCS2000
二普数据数字化时各省使用的底图来源不同,坐标系非常乱。常见的有北京54地理坐标、北京54投影坐标、西安80投影坐标、WGS84地理坐标,近些年也有人转成了CGCS2000。同一个省级数据集,如果是从不同县的数据库拼出来的,常常出现一半西安80一半北京54的情况。这两个系统参考椭球不同,同名点平面偏差在几十米到一百多米,直接合并会在县界处产生明显错位。
拿到数据后先检查每个图层的坐标系,QGIS里双击图层看“信息”,ArcGIS里看“源”,或者用Python打印gdf.crs。发现不一致,先统一到一个地理坐标系,再决定要不要转投影。全国尺度制图,用CGCS2000地理坐标即可;省域、县域做面积统计或叠加分析,我建议转到CGCS2000投影坐标系。投影分带怎么选是个玄学,但记住一条:按当地中央经线选3度带,比用默认的6度带要稳,因为3度带在县域尺度上变形更小。
| 来源坐标系 | 典型识别特征 | 推荐目标 |
|---|---|---|
| 北京54 | 椭球为Krasovsky,图幅接边常有几十米偏移 | CGCS2000 3度带投影 |
| 西安80 | 椭球为IAG75,中央经线附近精度尚可 | CGCS2000 3度带投影 |
| WGS84 | 无投影,经纬度值约东经73-135 | 直接用或再转投影 |
| CGCS2000 | 近年转出的副本,属性较新 | 无需转地理坐标 |
常见做法是先转成CGCS2000地理坐标,再根据数据范围计算中央经线,做一次投影。不要直接在原坐标上算面积,尤其别用地理坐标的度来算。有一个被很多人忽略的细节:Shapefile里的.prj文件可能写的是“Beijing 1954”但实际坐标是西安80的值,这种错标只能靠叠加已知参考边界的偏移方向来反推,不能轻信文件自带的信息。
2.4 编码与字段清理:GBK乱码和拼音字段名怎么处理
dbf文件里的中文字段大多是GBK或GB2312编码。现代GIS默认按UTF-8读取,所以打开后土类字段满屏乱码。解决办法是显式指定编码,QGIS打开矢量图层时选文件编码为GBK或GB2312,Python里用encoding='GBK'读取。更保险的做法是先转出UTF-8编码的GeoPackage,后续所有工作都基于GeoPackage做,省得每次都要处理编码。
字段名也常遇到拼音缩写,比如TL表示土类,YT表示亚图斑,XZ表示行政代码,不同县命名没有标准。遇到这种情况,必须找到原始数据说明或图例,做一个字段映射表。个别副本里还有全角空格、全角括号,直接导致“水稻土”和“水稻土 ”被统计成两个类别。清理代码不复杂,关键是先做频数统计,把异类值全列出来再逐个归并。这一步看似琐碎,实际上决定后续所有统计的可信度。我见过有人没清理就直接出图,图例里二十多个土类,实际有五个是同一土类的带空格变体。清洗时先用去空格、替换全角括号,再按名称聚合,聚合结果里低于一定频次的名称逐个检查,最后建立标准名称字典。
3. 用 Python 把土壤图读进来:几何修复与坐标转换
这一章开始动手。我默认你装了Python和geopandas,如果没有,先用conda装一个环境。下面脚本是读取二普Shapefile并检查坐标系的最小可用集。
3.1 读取Shapefile并检查坐标系:最小可用的geopandas脚本
import geopandas as gpd # 读取二普土壤类型矢量,dbf编码按GBK处理 gdf = gpd.read_file('soil_second_survey.shp', encoding='GBK') # 先看坐标系、要素数量、字段列表 print("CRS:", gdf.crs) print("Shape:", gdf.shape) print("Columns:", gdf.columns.tolist()) # 如果属性表出现中文乱码,说明编码不是GBK,换成GB2312再读 # gdf = gpd.read_file('soil_second_survey.shp', encoding='GB2312')这段代码做的事情很简单:读文件、看坐标系、看行列数、看字段名。其中encoding参数是关键,二普dbf最常见的是GBK,但少数早期文件用GB2312,遇到乱码时两个编码都试一遍;实在不行用pyshp读原始字节再手动解码。还有一点,有些副本的crs字段是空的,打印出来是None,这时不要继续做分析,先补上坐标系。
补充查看图斑范围和字段值频数:
# 查看整体范围 print(gdf.total_bounds) # (minx, miny, maxx, maxy) # 检查土类字段的类别和空值 print(gdf['土类'].value_counts(dropna=False))total_bounds返回经纬度或投影坐标的四个边界值。如果minx是负值,且范围不在中国境内,大概率是坐标系被指定错了或者数据本身就有偏移。value_counts则是检查土类字段是否干净,重点看有没有空值、空格变体和异常类名。这一步能提前发现5.1里说的同物异名问题,而不是等统计图出来才发现图例炸了。
3.2 拓扑修复:重叠图斑、缝隙和自相交的处理
历史数据数字化时靠人工描边,拓扑问题是重灾区。常见三类:图斑之间有细小缝隙、相邻图斑边界重叠、单个图斑自相交。缝隙会让面积汇总漏掉一部分区域;重叠会导致同一块地算两次;自相交会让缓冲区分析和叠加分析直接报错。处理前先做一次有效性检查:
# 找出所有无效几何 invalid = gdf[~gdf.geometry.is_valid] print("无效图斑数量:", len(invalid)) # 直接修复 gdf['geometry'] = gdf.geometry.make_valid()make_valid是shapely提供的方法,geopandas 0.10以上可以直接调用。修复自相交时,一个坏几何会被拆成多个部分,原来的图斑属性会复制到每个部分上,面积也会变化。所以修复后必须重新计算面积,不能继续用dbf里写的旧面积字段。如果你在旧版本geopandas上没有make_valid,可以用shapely.validation.make_valid逐个处理,效果一样。
缝隙和重叠的处理要区分用途。如果你只需要按土类做区域统计,最简单的做法是按土类或亚类字段聚合,把所有破碎小图斑融合成大块,缝隙和重叠会被大块吞掉:
# 先修复,再按土类和亚类融合 gdf_clean = gdf.geometry.make_valid() gdf_dissolved = gdf_clean.dissolve(by=['土类', '亚类']) # 重置面积字段 gdf_dissolved['area_ha'] = gdf_dissolved.geometry.area / 10000聚合之后,图斑数量从几万降到几百,后续叠加、出图都快很多。代价是丢失土属、土种信息。如果研究的核心字段是土种,就不能聚合,必须逐图斑修缝隙,常见做法是用QGIS的“消除缝隙”工具配合拓扑规则,这属于更重的工程,执行前先确认有必要。修复前后各保存一份副本,否则一旦修复结果不理想,你只能重新去解压原始压缩包。
3.3 坐标转换:从Krasovsky_1940地理坐标转CGCS2000投影
二普数据很多是用北京54或西安80椭球,转到CGCS2000需要选择转换方法。简单转换用pyproj内置的转换参数即可,不需要自己配七参数,但要注意转换后可能有几米到十几米的残余偏差,区域分析够用,地块级确权不够。如果你在一个小范围内有公共点坐标,可以自己计算七参数做高精度转换,这里不展开。
用动态中央经线定义投影坐标系最实用,不用记几十个EPSG编号:
from pyproj import CRS # 这里以某区域中央经线为117度举例,换成你数据的实际位置 lon0 = 117 crs_cgcs2000 = CRS.from_proj4( f"+proj=tmerc +lat_0=0 +lon_0={lon0} +k=1 " "+x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" ) # 先转CGCS2000地理坐标,再转投影 gdf_cgcs = gdf.to_crs('EPSG:4490') gdf_proj = gdf_cgcs.to_crs(crs_cgcs2000) # 检查转换后的范围 print(gdf_proj.total_bounds)参数含义:lon0是中央经线,k是尺度因子,x_0加500000是假东移,让坐标编号不出现负值。3度带中央经线一般是3的整数倍,选离数据范围中心最近的那条。如果你做全国汇总,不要用tmerc,用Albers等积投影:
crs_albers = CRS.from_proj4( "+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 " "+x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs" ) gdf_national = gdf_cgcs.to_crs(crs_albers)Albers是中国地图常用等积投影,面积统计误差小。要记住:转换不是越快越好,先确认原数据是地理坐标还是投影坐标,盲目to_crs只会把坐标从一道迷宫带到另一道迷宫。转换完成后,用QGIS加载一版在线影像或已知边界做目视检查,看道路、河流和县界是否对齐,这一步是坐标转换的验收标准。
4. 让土壤数据真正参与分析:裁切、叠加与面积统计
数据修干净之后,进入真正业务分析。这一章讲三个最高频的操作:行政区裁切、采样点或土地利用叠加、面积统计。
4.1 按行政区裁切时要注意跨图斑
拿到全省土壤图,往往只想要某县或某流域的范围。最直接的操作是用gpd.clip裁切。这里有一个非常容易翻车的点:裁切会沿边界把多边形切断,但你dbf里的旧面积字段并不会自动更新。裁切后每个边界图斑的面积是局部面积,不是原始图斑面积,直接用原字段做统计,结果会大于实际。
import geopandas as gpd soil = gpd.read_file('soil_second_survey.shp', encoding='GBK') bound = gpd.read_file('target_region.shp', encoding='GBK') # 统一坐标系 soil = soil.to_crs('EPSG:4490') bound = bound.to_crs('EPSG:4490') # 裁切 clipped = gpd.clip(soil, bound) # 重新计算面积:先转投影坐标系 clipped_proj = clipped.to_crs(crs_cgcs2000) # crs_cgcs2000见上一章 clipped_proj['area_ha'] = clipped_proj.geometry.area / 10000 # 按土类汇总 stats = clipped_proj.groupby('土类')['area_ha'].sum().sort_values(ascending=False) print(stats)这段代码的逻辑:先统一到CGCS2000地理坐标,再做空间裁切;裁切后立即转投影并重算面积字段。如果不重算,边界图斑会带着完整面积参与汇总,统计结果可能偏大很多。建议把重算后的面积单独存一列,保留原始面积字段作对比,不要直接覆盖。另外,裁切前检查bound是否包含缝隙或空洞,否则某个县中间被掏空,裁出来也缺一块。还要注意裁切后要素量可能急剧减少,如果发现某些土类在图斑数上少得反常,先怀疑是边界文件坐标系没统一,而不是土壤类型真的消失。
4.2 与土地利用、土壤采样点叠加分析
土壤类型图和土地利用图是两个底图,叠加起来能分析“哪些土类上种了什么”。更常见的是把野外采样点的土壤属性打点到二普图斑上,判断样点落在什么土类范围里。空间连接用sjoin:
# 读取采样点 points = gpd.read_file('field_points.shp', encoding='GBK') points = points.to_crs('EPSG:4490') clipped_proj = clipped_proj.to_crs('EPSG:4490') # 点落在哪个图斑内 joined = gpd.sjoin(points, clipped_proj, how='left', predicate='within') # 统计每个土类匹配到的样点数 print(joined.groupby('土类').size())这里predicate用within不用intersects,因为点落在图斑边界上时within会算不中,而intersects会把点匹配到多个相邻图斑造成重复。如果你确实想要边界上的点,可以先用buffer扩一个极小的半径,但那样会引入误差。匹配完成之后,手动抽查几十个点,看土类与野外记录是否一致。二普图斑是几十年前的边界,近几年有土地整治的地块,点落在图斑外属于正常现象,不要当成bug。比较稳妥的流程是先做一次sjoin,把没有匹配上的点单独输出,叠加高分辨率影像看是落在水体、建设用地还是新垦地,再决定是否调整容差。
4.3 面积统计到底用投影面积还是椭球面积
面积统计是二普数据使用里最容易被攻击的地方。地理坐标下直接算geometry.area得到的是度的平方,完全不可用;投影坐标系下算的是平面面积,在县级尺度足够;但要和官方面积对比,平面面积和椭球面积会有差距,尤其在高纬度或大范围时。
常见做法是分尺度区别:县域统计用3度带投影面积;省域统计用Albers等积投影面积;全国汇总统一用Albers。如果想核对二普历史报告里的面积,不要直接用现代计算的面积去比,当年图斑面积是人工求积仪或早期数字化软件算的,偏差可能达到几个百分点。我的习惯是同时保留三个面积:原dbf面积、投影平面面积、椭球面积。对比时把差异比例算出来,落在合理范围就说明数据质量没问题;差异过大,多半是坐标系单位或面积字段单位出了问题。
# 用Albers投影算面积,适合省级以上 gdf_albers = clipped_proj.to_crs(crs_albers) area_ha = gdf_albers.geometry.area / 10000 # 将新面积写回,注意与旧面积字段对比 clipped_proj['area_albers_ha'] = area_ha print((clipped_proj['area_albers_ha'] - clipped_proj['area_ha']).abs().describe())这段代码把Albers面积和3度带平面面积放在一列里对比。差值分布通常在小数级别,如果出现大面积系统性偏差,先检查clipped_proj在to_crs前坐标系是不是真的统一了。面积统计没有银弹,但保留过程和中间结果就是最好的排错工具。还有一种情况:原始dbf里的面积字段单位是亩,而我们重算的是公顷,对比时差了个15倍,这不是数据错,是单位没换算,一定要先统一单位再对比。
5. 全国第二次土壤普查数据集避坑指南:五个高频翻车点
无论数据从哪个渠道来,下面五个坑我基本每次都会遇到,列成现象、原因、解决三段,给后来者省点时间。
5.1 翻车点一:土类名称同一地两种写法
现象:统计土类数量时发现“棕壤”和“棕色森林土”同时出现,面积还都不小;或者“水稻土”和“水稻土(淹育型)”被分成两类。更夸张的时候,同一个县的图斑里,“红壤”和“红壤 ”只差一个空格,像两个不同土类一样出现在图例里。
原因:二普制图时不同县域图例表述不一致,属性表录入时也没做字典约束,同一个土壤类型在不同图斑里写法不同。早期数字化录入是人工敲键盘,繁体字、异体字、空格都混了进来。
解决:拿到数据后先对土类、亚类字段做value_counts,把频率低于某个阈值的名称逐个拉出来人工判断。建立标准名称对照表,将别名统一到标准名称,再重新聚合。不要直接在Excel里替换,因为“水稻土”和“水稻土(淹育型)”不是简单包含关系,需要先拆出亚类再合并。我的建议是保留一个“原始名称”字段,再新建“标准土类”字段,这样出图和出数都用标准字段,原始字段留着溯源。
5.2 翻车点二:边界精度不足,不能当边界测绘用
现象:把二普土壤图和一比一万地形图叠起来,发现土壤图斑边界和山脊线、道路、沟渠对不上,偏移几十米很常见。拿精度要求高的遥感影像来套合,会出现部分图斑跨到道路另一侧的问题。
原因:二普调查比例尺以1:5万为主,部分边远地区甚至更低,数字化过程又经过纸质图扫描、纠正、转绘多道工序,位置精度本来达不到大比例尺标准。
解决:使用前明确边界精度定位,只用于区域面积、分布格局分析,不要用于地类界址纠纷或工程勘界。如果确实需要高精度边界,以实地调查或更高精度遥感影像为准重新勾绘。这个坑栽过的项目大多是因为前期没看数据文件元数据,拿着图斑边界去和现状影像做像素级叠加。建议在项目报告里专门写一段数据精度说明,描述来源比例尺和预期误差,避免后续合作方把二普边界当测绘成果用。
5.3 翻车点三:土种命名县域不一致,合并需先建对照表
现象:相邻县的土种名一模一样,图斑却是两种不同的土壤;同一个县内部土种写法还能带方言字或生僻字。直接按土种字段groupby汇总,出来的类别数会远远超出实际土种数量。
原因:土种是基层命名,没有统一的写入标准,而且二普结束后各地汇编、整饰的方式不同。
解决:做跨县土种统计前,先找省级二普成果里的土种归属表或土种名录,把各县土种对应到省统一土种。没有名录时,用土属、母质、质地等辅助字段共同判断,不能只看名称字符串。这一步没有捷径,但可以边合并边记录映射关系,形成自己项目里的对照字典。实际操作时,先用土属字段粗筛,再对土种字段做字符串相似度分组,相似度高的放到同一个候选组里人工确认,而不是全量靠眼睛看。
5.4 翻车点四:数据来源不清的副本慎用
现象:从不同渠道收集到两份“全国二普土壤图”,文件大小不同,属性字段数量不同,土类数量也不同,不知道信哪份。有的副本甚至打开后出现大片图斑消失或坐标飞到境外。
原因:二普成果最初没有统一发布数字化全局文件,很多副本是各单位自行数字化或从纸质图扫描配准而来,经过多次格式转换和字段删改,每次转换都可能丢信息。
解决:优先选择带元数据或数据说明文档的副本,核对图斑总数、覆盖范围、坐标系、是否有prj文件。如果一份数据连坐标系统信息都没有,即便能打开也只能做展示,不能做定量统计。建议把来源渠道、获取日期、文件哈希记录下来,放在数据目录里,将来报告写数据来源时用得上。我给自己定的规矩是:没有来源说明的数据不参与面积统计,只能用来画示意图。
5.5 翻车点五:把二普面积直接和新调查面积对比
现象:用二普数据统计某县水稻土面积,和农业统计年鉴或新调查数据对比,差出百分之二三十,被质疑数据不可用。更常见的是把二普图斑面积加合后,和该县国土总面积对不上,差值大到无法解释。
原因:二普面积是当年的制图口径和测算方法,叠加标准、田间道路、居民点扣除规则都和现在不一样,更别说这期间土地本身也发生了大量变化。再加上坐标系转换、投影算法差异,面积差几个百分点是正常的。
解决:对比前先明确历史数据口径,不直接做数值对比。正确的用法是把二普作为空间分布底图,分析土类转移和格局变化,而不是用它的面积作为当前资源量。如果要当前面积,以当年卫星影像或三普结果为准。把二普面积当本底值,再把变化部分量出来,才是稳妥做法。具体操作时,把二普面积和统计年鉴面积放在同一个图表里,单独标出统计口径差异,而不是把两列数据直接相减说成“减少量”。
6. 进阶:把二普数据变成可维护的版本化底图
二普数据不是一次性用完就丢的资源,很多项目会长期引用它。我的建议是拿到后立刻做三件事:建唯一ID、转GeoPackage、写版本记录。
先为每个图斑加唯一ID,不能用dbf里原有的图斑编号,因为不同县编号会重复。可以用要素序号加省级代码拼一个字符串,便于将来关联外业调查和变更记录。GeoPackage是比Shapefile好得多的封装格式,一个文件里能同时放多个图层、空间索引和样式,还能存坐标系的正式定义。把清洗、修复、转好坐标系的数据导成GeoPackage后,后续的裁切、叠加、制图都稳定很多,不会再被编码和坐标系问题反复折磨。
具体操作:用QGIS或Python读一遍原始数据,把元数据、字段字典、坐标系转换记录写进一个说明文档,和GeoPackage放在同一个目录。将来任何人打开数据,第一眼看到的就是可追溯的说明。我自己的习惯是每次基于二普数据做输出,都会复制出一个带日期的版本,绝不在原始文件上直接改,避免某次误存把清洗好的成果覆盖掉。
这个项目方向值不值得投入?我的答案是有条件就值得。二普数据是当前能找到的覆盖最全、分类统一的土壤本底图,虽然精度和时效有限,但它在农业区划、土壤适宜性评价、环境背景值估算里的权重仍然很高。把它维护成干净的版本化底图,等于给后续所有项目留了一棵可持续浇水的树。血泪经验是:早期我偷懒直接在原始Shapefile上开改,两周后被一个拓扑修复搞崩了,所有边界错位,只能回去重新下原始数据,从此学会先备份再动手。希望这份记录能帮你少走这段弯路,祝你的二普数据项目一次跑通。
本文还有配套的精品资源,点击获取