物种分布模型
- 1. 数据点准备
- 1.1 数据加载
- 1.2 去除指定距离内的重复点
- 1.3 定义研究区范围
- 1.4 选择预测因子
- 1.5 伪不存在点生成
1. 数据点准备
1.1 数据加载
首先需要将CSV文件导入到GEE平台中,同样也可以导入shp格式文件。
// 1.Loading and cleaning your species data *********************************************************************
var Data = ee.FeatureCollection("projects/ee-**********736/assets/Tree_sample").aside(print) // 导入本地上传的站点信息.map(function(fea){return ee.Feature(ee.Geometry.Point([fea.get('Longitude'),fea.get('Latitude')]))//设置经纬度.copyProperties(fea) // 拷贝原有属性信息}).aside(print)
1.2 去除指定距离内的重复点
物种分布建模的一个重要步骤是限制地理采样偏差对模型输出的潜在影响,这种影响是由于多个附近观测结果导致的数据聚集。在选定的空间分辨率下,将位置数据细化为每像素随机选择的一个事件记录。所以需要将相隔在一定距离之内的点删除,如去掉在10km以内的重复点:
// Define spatial resolution to work with (m)
var GrainSize = 10000; // e.g. 10 kmMap.addLayer(Data.style({color:'red',pointSize:4}),{},'randomPoints')function RemoveDuplicates(data){// 生成一个随机栅格图像,使用随机值填充,然后重新投影到经纬度坐标系(EPSG:4326)var randomraster = ee.Image.random().reproject('EPSG:4326', null, GrainSize);// 从随机栅格图像中获取样本点的值,样本点来自于输入数据集(data)// scale为: 缩放因子,控制样本点的间隔var randpointvals = randomraster.sampleRegions({collection:ee.FeatureCollection(data), scale: 10, geometries: true});// 返回去重后的样本点,通过 'random' 字段进行去重return randpointvals.distinct('random');
}var Data = RemoveDuplicates(Data);
Map.addLayer(Data.style({color:'blue',pointSize:4}),{},'randomPoints')print(ee.FeatureCollection('projects/ee-**********736/assets/Tree_sample').size())
print(Data.size())
1.3 定义研究区范围
// 2.Define your area of interest for modeling *********************************************************************
// Load region boundary from data catalog if working at a larger scale
var AOI = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017').filter(ee.Filter.eq('country_co', 'CH'));// Add AOI to the map
Map.addLayer(AOI, {}, 'AOI');
Map.centerObject(AOI, 3);
1.4 选择预测因子
在Google Earth Engine中实现sdm的主要优点之一是可以利用大量可用的数据集作为预测变量。这不仅包括Hijmans等人(2005)的生物气候变量,还包括高程数据及其衍生物(坡度、坡向、山坡等)、各种植被指数、人类改造指数、夜间灯光图像、水体、小时气候数据、土地覆盖分类、道路或其他基础设施,甚至卫星数据的原始像素值。根据感兴趣的领域,某些区域具有更高的数据可用性。
选择预测变量是研究人员需要依赖于研究物种的现有知识的一个步骤,例如可能影响其分布的变量等。
要查找空间数据集,可以使用搜索栏。点击产品名称即可获得与每个空间数据集相关的所有信息。导入数据集所需的代码如下图所示。
// 3.Selecting predictor variables *********************************************************************
// Example of code to import the SRTM Digital Elevation Data 30m
var Elev = ee.Image("USGS/SRTMGL1_003");
注意:GEE中的 ee.Algorithms.Terrain() 函数可以从高程数据集计算坡度、坡向和山阴。
1.5 伪不存在点生成
当使用仅存在数据时,重要的是定义创建伪不存在点的区域。这里展示如何实现三种不同的方法。在这三种情况中,我们首先创建了在场数据位置的掩码,以避免在与在场相同的像素上随机生成伪不存在点。
//4.Generate random pseudo-absences across the entire study area *********************************************************************
// Make an image out of the presence locations. The pixels where we have presence locations will be removed from the area to generate pseudo-absences.
// This will prevent having presence and pseudo-absences in the same pixel.
var mask = Data.reduceToImage({properties: ['random'],reducer: ee.Reducer.first()
}).reproject('EPSG:4326', null, ee.Number(GrainSize)).mask().neq(1).selfMask();var AreaForPA = mask.clip(AOI);
在距离出现地点一定距离内生成伪缺失点,以将伪缺失点限制在物种可能到达的区域,并通过创建具有类似采样偏差的伪缺失点来考虑出现记录的潜在地理或环境采样偏差。buffer() 函数用于确定可用于生成伪缺失的区域,假定这些区域与记录具有相同的采样偏差,并代表动物可以散布的区域。
buffer() 函数有两个参数,一个是缓冲区的距离(以米为单位),另一个是近似缓冲区圆时可容忍的最大误差。最大误差越大,计算效率越高。