方法一:R语言 (可直接提取并导出数据,快慢依电脑性能和网速而定...)
soil_world在R中的使用指南(可以直接调用SG的数据)
代码如下 ///感谢zihao师兄鼎力相助
install.packages("geodata")
library(geodata)
library(raster)
library(sp)
library(rgdal)
# Get soil grid layers (tif files)
gph <- soil_world(var="phh2o", depth=5, path=tempdir())
#Image visualization
plot(gph, ylim = c(-60,90), xlim = c(-180,180),
col = colorRampPalette(c("#3288BD","#66C2A5","#FEE08B","#D53E4F"))(250))
# create RasterLayer
ph <- raster(gph)
plot(ph)
# Get soil grid points
data = read.csv("point.csv")
coordinates(data) = c("longitude", "latitude")
phd <- extract(x = ph, y = data)
datapoint <-data.frame (data,phd)
write.csv(datapoint,"E:/Seoyeol/Paper/4ENG2/Data/ph.csv")#生成csv文件
ps:一些栅格数据的R语言处理方法,下面这个博客有介绍
方法二:通过GEE下载SG的tif影像,然后再用R提取
markdown/access_on_gee.md · master · ISRIC / SoilGrids / soilgrids.notebooks · GitLab (wur.nl)
该网页给出了每个土壤指标在GEE上的Asset
点击蓝色字体就会跳转至GEE页面,有对每一个影像波段的介绍。每一个波段对应一个土层深度。
此处以下载phh2o_0-5cm影像为例
下载的影像即为对应指标及深度的全球TIFF影像,然后再用R Studio进行提取即可,代码可参考方法三中的数据提取部分。
GEE完整代码如下,自取所需进行改动即可:
//加载数据集
var data = ee.Image("projects/soilgrids-isric/phh2o_mean");
//筛选数据
var data_selected = data
.select('phh2o_0-5cm_mean'); //选择波段
print("data_selected", data_selected);
Export.image.toDrive({
image: data_selected,
description: "phh2o_0-5cm_mean", //任务名
fileNamePrefix:"phh2o_0-5cm_mean", //文件命名
folder: "SoilGrid", //保存的文件夹
scale: 250, //分辨率
maxPixels: 1e13, //最大像元素,默认就好
crs: "EPSG:4326" //设置投影
});
由于影像过大,下载下来的是被裁剪过的,需要自行拼接。可参考:
Python中arcpy栅格创建与遥感影像多幅图像批量拼接(Mosaic) (baidu.com)
ps:代码语言为Python,由于用到了arcpy,需在ArcGIS自带的IDLE中运行
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 18 22:28:49 2022
@author: i
"""
import os
import arcpy
#路径设置
file_path="E:/GLDdata/SoilGrid/Original/PH/"
out_file_path="E:/GLDdata/SoilGrid/"
out_file_name="ph_0_5.tif"
#获取file_path路径下的栅格文件,并存储于file_name_list列表中
file_name_list=os.listdir(file_path)
#影像镶嵌
tif_file_path=file_path+file_name_list[0]
cell_size_x=arcpy.GetRasterProperties_management(tif_file_path,"CELLSIZEX")
cell_size=cell_size_x.getOutput(0)
value_type=arcpy.GetRasterProperties_management(tif_file_path,"VALUETYPE")
describe=arcpy.Describe(tif_file_path)
spatial_reference=describe.spatialReference
arcpy.CreateRasterDataset_management(out_file_path,out_file_name,cell_size,"16_BIT_SIGNED",
spatial_reference,"1")
out_file=out_file_path+out_file_name
#遍历循环,并通过arcpy.Mosaic_management()函数拼接
for file in file_name_list:
file_path_name=file_path+file
print(file_path_name)
arcpy.Mosaic_management([file_path_name],out_file)
拼接后的tif影像如下:
方法三:从网页端用传统方法下载(仅适用少量数据)
数据下载
- 下载网址 SoilGrids250m 2.0
- 点击左侧菜单栏的download,然后选SoilGrid
3.在Layer那边选择要下载的土壤属性
4.然后设置好depth、value
5.设置经纬度范围(该样点上下零点零几的波动)
(SG网页的下载范围仅限2°,所以会比较麻烦,超出范围就会报错)
6.都设置完后点Download就成功下载了一个tif影像
数据提取
1.存有所需数据点经纬度坐标的EXCEL表(title最好跟图中一样)并另存为csv文件
2.用R语言来提取从tif影像中的值
(代码参考自博客(3条消息) R语言提取降水和温度数据_Mrrunsen的博客-CSDN博客)
library(rgdal)
library(raster)
library(sp)
#导入经纬度数据
coords <-read.csv("D:/GLD_data/116_118.csv", header=TRUE,row.names = 1)
coordinates(coords)=c("lons","lats")
#导入tif数据
tav<-raster("D:/GLD_data/SoilGrid/N.tif")
#导出数据tavg可改为对应指标名
tavg <- extract(x = tav, y = coords)
dat<-data.frame(coords,tavg)
write.csv(dat,"D:/GLD_data/N.csv")
library(rgdal)
library(raster)
library(sp)
这几个包有缺失的话得先安装
具体可以看教程
R语言安装package的两种方法_360新知 (so.com)
存储路径有个AppData文件夹是在隐藏空间里
得勾选隐藏项目才会出现
3.代码运行成功后就会生成对应的csv文件,tavg列就是提取出来的数值。
方法四:用ArcGIS的Web服务直接调用
使用 Web 服务访问 SoilGrids 图层的说明
可用于QGIS 和 ArcGIS 等 GIS 软件下载特定区域数据,包含指示的链接(各个土壤特性的link)
///如果只有作图需求就Add WMS,要调用数据则要Add WCS。用WMS调用出来的就只是图而已,并无法提取土壤数据。WMS和WCS的区别下面这个连接有详细描述
(70条消息) WMS、WFS、WCS、WPS、WMTS、TMS、WMSC等常见地图服务的区别_自闭火柴的玩具熊的博客-CSDN博客_wms和tms的区别
调用出来的结果影响如下,是含有数据的栅格影像。
ps:但最终不知道是因为影像数据太大(17个G)还是电脑性能原因没有办法将影像以TIFF格式保存到本地。此外,定义投影工具没法改变影像投影。//如果有想法或解决方式欢迎滴滴TUT