HWSD全球土壤数据下载、处理与提取完整指南
2026/9/15 20:51:07 网站建设 项目流程

做全球尺度的研究或者项目规划时,土壤数据永远是绕不开的基础底图。不管你是搞农业区划、生态模型、土地利用变化,还是做水资源评估,第一件事往往都是要搞清楚“这地方土壤到底是个什么情况”。但真到了动手这一步,很多人都会卡在同一个地方:HWSD全球土壤数据到底怎么下载?下载下来一堆栅格和MDB文件又怎么处理才能用?我自己当年第一次接触这套数据时也折腾了好几天,踩了不少坑。这篇就把我从下载到处理、再到提取研究区数据的完整流程和经验总结出来,希望对正在被这套数据折磨的朋友有帮助。

HWSD全称是Harmonized World Soil Database,也就是和谐世界土壤数据库,由FAO(联合国粮农组织)和IIASA(国际应用系统分析研究所)等机构联合开发。它把全球分成约23400多个土壤制图单元,每个单元里记录了大量土壤属性,比如有机碳含量、酸碱度、沙粒粉粒黏粒比例、阳离子交换量等,分辨率大约是1公里(30弧秒)。这个数据集在土壤学科和地学相关领域基本算是“标准配置”,因为它统一了全球各区域的土壤分类系统和属性标准,省去了自己东拼西凑的麻烦。

这篇内容适合谁看?我认为是所有需要全球或区域土壤属性数据做分析的研究人员、规划师和GIS爱好者。我会从数据下载讲到MDB数据库结构,再到ArcMap里的属性提取和栅格关联,最后列几个最容易出问题的坑。整个过程都是我实测过、能落地的方案,直接照着操作就行。

1. HWSD数据获取的完整链路

1.1 数据下载:官网注册与文件清单

HWSD数据本身是免费开放的,但下载前需要在FAO的官网(FAO Soils Portal)注册账号。这是一个很容易被忽略的环节,很多新手点开下载链接发现跳转到登录页,就以为网址失效了,其实只是没先注册而已。注册过程很简单,填个邮箱、设置密码、收一封激活邮件就完事,几分钟搞定。

下载页里通常会有几个压缩包,核心文件是这几个:

  • HWSD.mdb:Access数据库文件,所有土壤属性数据都在这里。
  • HWSD_RASTER:栅格文件,格式为TIF,每个像元值对应数据库里的土壤单元编号(MU_GLOBAL)。
  • HWSD_GLOBAL:配套文档,包括数据说明、分类标准对照表、属性字段字典。

拿到压缩包后第一件事不是解压了就往GIS里拖,而是先核对文件是否完整。我见过有人解压时漏了MDB文件,结果光有栅格没法关联属性,绕了一大圈才发现问题。建议解压后看一下文件大小,HWSD.mdb一般有几百MB,HWSD_RASTER的TIF也在百MB级别。如果大小明显偏小,大概率是下载中断,重新下载一次更稳妥。

1.2 数据格式初探:栅格加数据库的配合逻辑

HWSD最核心的设计思路是“栅格存编号、数据库存属性”,也就是说TIF文件里每一个像元存的不是直接可读的土壤类型名称,而是一个数字编号(MU_GLOBAL)。你需要通过这个编号去MDB数据库里查对应的土壤属性行,再把属性表关联回栅格,才算真正把土壤数据“激活”。

打个比方,这就像去大型图书馆找书:栅格文件是书架上的编号标签,告诉你每本书放在哪个位置,而MDB数据库是检索目录,记录了每本书的详细信息。没有编号标签你找不到书,没有检索目录你拿到了编号也不知道书里写了什么。这两者必须配对使用,缺一不可。

用QGIS或ArcGIS直接打开TIF时,你会看到一堆灰度值,有时候数值范围还挺大(从1到上百万都有可能),别惊慌,这不是数据损坏。这里的数值就是MU_GLOBAL。接下来的任务,就是通过数据库把“数值”翻译成“土壤属性”。

2. MDB数据库结构与属性字段解读

2.1 MDB里究竟有什么表

很多人拿到HWSD.mdb后,会直接用Excel打开,结果发现要么打开乱码,要么根本打不开。这里需要注意:MDB是Access数据库格式,不是普通表格格式,最好用Access或者支持MDB读取的工具来打开。如果你电脑里没有装Microsoft Access,也可以用开源工具,比如LibreOffice Base,或者用Python的pyodbc/pandas库来读取。

打开MDB后你会看到几个表,最关键的是一张叫HWSD_DATA(有些版本叫ISRIC_WISE或类似名称)的表,里面每一行就是一个土壤制图单元(Soil Mapping Unit),每一列就是一种土壤属性。不同版本的HWSD可能表名略有差异,但核心内容一致。

2.2 核心字段分类说明

HWSD_DATA表里的字段可以分成几类。第一类是标识类字段,包括MU_GLOBAL(全球唯一土壤单元编号)、MU_SOURCE1和MU_SOURCE2(原始数据来源编号)、ISSOIL(是否为土壤的标记)。第二类是分类字段,包括SU_SYM90(FAO-90分类系统下的土壤符号)、SU_SYM85(旧版FAO-85系统)、TEX_CLASS(质地分类)等。第三类是属性字段,这就多了,比如T_OC(有机碳含量,单位是g/kg)、T_CLAY(黏粒含量,百分比)、T_SAND(沙粒含量)、T_PH_H2O(酸碱度)等,每个属性还有对应的顶层(Top)和底层(Sub)两套值,因为土壤剖面是分层的。

最新的HWSD v2.0还增加了T_BULK_DENSITY(容重)、T_ECE(电导率)、T_GYPSUM(石膏含量)等更多指标。用的时候先翻一下数据说明文档,确认字段单位和土层定义,以免把单位搞错导致后续计算出问题。这里有一个很容易踩的坑:土壤属性的单位在不同数据库版本里可能不一致,比如有机碳有的是g/kg,有的是%,有的是kg/m²,拿到数据后第一步就是核对单位,不然做出来的地图或者统计表会是灾难。

2.3 分类系统的理解要点

很多用户会纠结于SU_SYM90和TEX_CLASS等分类字段的代码含义,因为这些字段里存的是类似于“Ah”“ACu”“CMu”这样的字母组合,看起来像乱码。实际上这些是FAO-90土壤分类系统的简写代码。要读懂它们,你需要配套查阅分类系统对照表,文档HWSD_GLOBAL里通常附带一个叫“HWSD_Classification”的表格或PDF,里面列出了每个代码对应的完整分类名称。

如果你只是需要土壤属性数据(比如有机碳含量),其实不必死磕分类代码,直接取数值字段就行。但如果你的研究需要展示土壤类型分布图,就要花点时间去解读分类代码。我自己的习惯是,把需要展示的代码先转成完整名称,再做图例标注,否则出图时图例上全是“Ah”“CMu”,读者根本看不懂。

3. 把HWSD数据变成能用的研究底图

3.1 先从MDB里提取你需要的属性

拿到数据后,第一步往往是想把某个属性(比如表层有机碳T_OC)提取出来,和研究区行政边界叠加分析。这时候有两个常见思路:一个是在GIS里把栅格和MDB关联,直接把属性值赋到栅格上;另一个是先在数据库里查询筛选,把需要的记录导出成中间表,再关联。我个人推荐先做一次数据预览和清洗,再进GIS关联。

用Python读取MDB,代码思路如下:

import pandas as pd import pyodbc # 连接Access数据库 conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=你的路径\HWSD.mdb' conn = pyodbc.connect(conn_str) # 读取全部土壤属性数据 df = pd.read_sql('SELECT * FROM HWSD_DATA', conn) # 查看前几行,确认字段名和数值范围 print(df.head()) print(df[['MU_GLOBAL', 'SU_SYM90', 'T_OC', 'T_CLAY', 'T_PH_H2O']].describe())

如果电脑没装Access驱动,会报驱动不存在的错误。解决办法是去微软官网下载“Microsoft Access Database Engine”,安装时注意选择与Python位数一致的版本(64位或32位)。这是新手最容易卡住的地方,如果你用的是64位Python,就不要装32位驱动。

3.2 ArcMap里的关联操作思路

在你已经把MDB里的HWSD_DATA表读取出来后,下一步是导入ArcMap(或者ArcGIS Pro)。具体操作流程是:把HWSD_RASTER的TIF图层加载进地图文档,再把MDB里的HWSD_DATA表通过“Add Data”加进来。注意需要先连接数据库,或者在Catalog里直接把表拖入内容列表,这样表才能参与关联操作。

然后在栅格图层上右键,选择“Joins and Relates” -> “Join”,把“Join attributes from a table”选为“Join a table based on spatial or attribute data”,这里需要把栅格的Value字段和HWSD_DATA表的MU_GLOBAL字段做相等匹配。关联成功后,你点击栅格中任意一个像元,就能看到它对应的土壤属性信息了。

但这里有个非常关键的问题:栅格字段Value和表字段MU_GLOBAL的数据类型必须一致,否则关联会失败。TIF的Value通常被读成整型(Integer),如果数据库里MU_GLOBAL被识别成了双精度(Double),就算数值看起来一样也可能匹配不上。这时在表属性里把MU_GLOBAL字段类型改成Long Integer,或者右键Join后在“Advanced”里调整匹配条件,能解决大部分关联失效问题。

3.3 省时省力的做法:直接转矢量再关联

如果只是查看几个点的土壤属性,用栅格关联就够了。但如果你要做区域统计(比如按省求平均有机碳含量),我的建议是完全跳过“栅格+属性表”的实时关联,改用“栅格转面(Raster to Polygon)+空间连接(Spatial Join)”的路线。原因有两点:一是栅格实时关联时,一旦对数据做重投影或裁剪,关联关系容易断;二是区域统计需要以面为单位计算面积加权均值,转成面矢量后可以用面积制表直接出结果。

具体操作是:用ArcToolbox中的“Raster to Polygon”把HWSD栅格转成面要素,注意选“Simplify”字段时一般选“NO_SIMPLIFY”,以保证每个栅格单元都保留下来,不会因为简化而丢失边界。转出来的每个面都有一个Gridcode值,对应MU_GLOBAL。接着用“Add Join”把这个面图层的Gridcode和HWSD_DATA表的MU_GLOBAL连接起来,所有土壤属性就都赋到面上了。

转矢量后会面临一个问题:全球面要素数量庞大,如果你的研究区只是一个小省份,直接在原始全球面上做裁剪会有点卡。先做好研究区边界(shapefile),用它做“Extract by Mask”裁剪栅格,再把裁剪后的栅格转面,数据量会小很多,操作流畅度提升明显。这个方法是我实际反复比较后最推荐的流程,速度快,而且不容易出错。

4. 常见问题排查与实用技巧

4.1 为什么我打开MDB文件是一片乱码

遇到过很多次,朋友发消息过来说“MDB文件打不开,全是乱码”。通常原因只有一个:用Excel或记事本直接打开了Access数据库文件。MDB是二进制数据库格式,必须用Access或者通过编程方式(Python、R)读取。如果你不想安装Access,推荐用Python的pyodbc方案,或者用QGIS的DB Manager直接连接。另外,如果用Access打开后提示“未识别的数据库格式”,有可能是文件在下载途中损坏,重新下载即可。

4.2 栅格像元值和数据库编号对不上怎么办

这种情况多半不是数据错误,而是坐标系或压缩方式导致读取异常。HWSD栅格默认的是WGS84经纬度坐标系,如果你在GIS里看到数据时发现值为NoData(即空值),居然是黑色一片,有可能是视图拉伸方式不对,把唯一的有效值范围压缩到了极窄的色带里。把符号化改成“Stretched”或者“Classified”就能看到了,不用怀疑数据本身有问题。

至于编号对不上,最常见的原因是数据库里的MU_GLOBAL是双精度,而栅格的Value是整型,导致JOIN时类型不匹配。在ArcMap里右键点击表,进入“Properties”检查字段类型,如果不一致就在表里新增一个整型字段,把MU_GLOBAL的值复制过去,再拿新字段做关联。这是我认为最值得记住的小技巧。

4.3 研究区面积统计结果偏差很大

有人在用HWSD做面积统计时,发现统计出来的面积和官方公布的国土面积相差很远。别急着想是数据错了,很可能是投影方式惹的祸。WGS84经纬度坐标系下,不同纬度上的像元实际面积不一样,直接用原始栅格做面积统计一定会产生偏差。建议先把研究区数据投影到适合当地的等积投影(比如Albers Equal Area),再做面积统计。如果你不确定用哪种投影,一般用GIS里自带的World Equidistant Cylindrical或者Albers等积投影都可以,关键是“等积”两个字。

4.4 如何批量提取点位的土壤属性值

实际项目中经常会有“野外采样点 + HWSD土壤属性对应”的需求,也就是给你一堆经纬度坐标点,想快速知道每个点对应的土壤属性是多少。这里最快的方案是直接用ArcGIS的“Extract Multi Values to Points”工具,它可以把多个栅格波段(你可以把不同的土壤属性做成多个栅格)一次性提取到点属性表中。缺点是你需要先把MDB数据库中每一列土壤属性转成独立的栅格图层。

转换步骤为:在ArcMap中把栅格转面后,给面图层添加你需要的几个属性字段(比如T_OC、T_CLAY、T_PH_H2O),然后在图层属性里导出成shapefile。再对每个字段分别做“Polygon to Raster”转换,设置像元大小与原始HWSD栅格保持一致。这样每个属性都变成了独立的栅格,就能直接用“Extract Multi Values to Points”批量提取了。

5. 从数据到决策:HWSD数据还能怎么用

HWSD的内容量非常大,不只是土壤类型和有机碳。它包含了超过几十种土壤理化性质,从土壤深度、质地、石砾含量,到阳离子交换量、盐度、碱度等,几乎覆盖了全球土壤普查的主要指标。深入研究的话,你会发现它其实是一个巨大的“土壤属性字典”,适合各种交叉领域的建模任务。

我建议有条件的用户把HWSD数据先存成统一坐标、统一投影的本地数据库,并建立索引。之后不管是做随机森林模型、土壤侵蚀评估还是水文过程模拟,都能快速调取底图属性。比如做生态水文模型时,需要土壤的饱和导水率、田间持水量等参数,这些原始HWSD里不一定直接给出,但可以通过土壤质地和有机碳含量通过传递函数(PTF,Pedotransfer Function)估算出来。熟悉HWSD字段之后,做这类推导会非常顺手。

用Python等工具,想更进一步实现自动化的用户,还可以把HWSD的MDB转成SQLite数据库或者直接输出成CSV文件,方便和R、Python的生态学、农学包对接。这一步迁移数据格式其实很简单,核心就是读取MDB表,再用pandas写出CSV或者直接插入SQLite。做一次,后面所有项目都能复用。

5.1 实操:MDB转CSV快捷迁移

这里share一段我常用的迁移代码,稳妥高效:

import pandas as pd import pyodbc import sqlite3 # 读取MDB conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=HWSD.mdb' conn = pyodbc.connect(conn_str) df = pd.read_sql('SELECT * FROM HWSD_DATA', conn) # 写出CSV df.to_csv('HWSD_DATA.csv', index=False) # 或写入SQLite,便于后续持续查询 conn_sqlite = sqlite3.connect('hwsd.db') df.to_sql('hwsd_data', conn_sqlite, if_exists='replace', index=False)

需要注意的是,有些字段值包含缺失值,HWSD用“-99”或“NA”表示。写入数据库后如果后续要做数值统计,建议先统一处理这些缺失值,以免影响均值、标准差计算。

5.2 分类代码转换的快捷参考

很多人在出图时需要把FAO-90代码转换为中文或者完整英文名称。我这里提供一个常用的思路:把HWSD_GLOBAL里的“D_MU_GLOBAL”表和“D_SYMBOL”表导入GIS,再通过符号代码和SU_SYM90字段关联,就能生成带完整分类名称的图层。如果你嫌麻烦,也可以用字典方式在Python里映射。

classification_dict = { 'Ah': 'Terric Histosol', 'ACu': 'Cumulic Anthrosol', 'CMu': 'Eutric Cambisol', # 更多代码对照表请查阅HWSD文档 } df['soil_full_name'] = df['SU_SYM90'].map(classification_dict)

实际上,不同版本分类名称会有微调,最保险的办法是打开HWSD配套表格,把SU_SYM90和完整名称逐行复制下来,生成一张映射表。把映射表存成CSV,后面出图、统计都能复用,一劳永逸。

6. 我踩过的一些坑和最终建议

最后再分享几个我实际操作中总结的教训,希望对各位有参考价值。

第一,及时核对单位。我有一回做全球土壤有机碳储量估算,直接拿T_OC的数值去乘面积,结果单位搞错了,最后结果差了好几个数量级,重新检查才发现有机碳单位是g/kg而不是kg/m²。这个教训让我养成了拿到任何数据先看元数据的习惯。

第二,投影问题永远优先解决。任何涉及面积、距离的统计,一定要用等积投影或等距投影。WGS84经纬度坐标适合显示,不适合算面积。如果你在做跨区域对比,尤其要注意纬度差异导致的面积误差。

第三,备份原始下载文件。HWSD原始压缩包和解压后的MDB文件最好保留一份原始备份,不要直接在原文件上做修改。原因很简单,MDB文件很大,频繁读取容易损坏,一旦损坏就需要重新下载几百MB的数据,费时费力。

第四,善用版本更新。如果你所在的领域对土壤数据时效性要求比较高,建议定期关注FAO Soils Portal,看HWSD是否发布了新版本。HWSD v2.0相比v1.x在很多地区有显著改进,新增了更多土壤深度段的属性数据。我的经验是,能用新版就用新版,虽然字段名可能稍有变化,但数据质量提升是实实在在的。

总之,HWSD全球土壤数据是一个“下载容易、处理细节多”的数据集。只要理解了它的“栅格编号+数据库属性”的双层结构,掌握了关联和转换的方法,后续操作就会非常顺滑。希望这篇内容能帮你少走弯路。如果你在操作中遇到其他问题,欢迎在评论区讨论,大家一起交流解决方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询