附录G:开源代码与计算样本
Google Earth Engine演示及Savimbo GitHub上的ISBM代码访问
最后更新于
这有帮助吗?
这有帮助吗?
// 加载 plot18 多边形
var plot18_data = require("users/drea/map:plot18_data");
var plot18 = plot18_data.polygon;
// 以公顷为单位计算样地面积
var plotArea = plot18.area();
var plotAreaHectares = plotArea.divide(10000);
// 加载美洲豹点位
var points_jaguar_data = require("users/drea/map:points_jaguar_data");
var puntos = points_jaguar_data.points;
var radios = [];
var sumMultipliedArea = ee.Number(0);
// 定义用于存储交集多边形的要素集合
var intersectionPolygons = ee.FeatureCollection([]);
// 定义 assignedArea 函数
var assignedAreaFunction = function(offset) {
var day = startDate.advance(offset, 'day');
var dayString = day.format('YYYY-MM-dd');
var feature = ee.Feature(null, { date: dayString, intersectionArea: intersectionArea });
return feature.set('date_area', ee.String(dayString).cat(' - ').cat(intersectionArea));
};
// 计算每个点的半径和缓冲区
for (var i = 0; i < puntos.length; i++) {
var point = puntos[i].geometry;
var date = puntos[i].date;
// 通过减去 30 天计算开始日期
var startDate = ee.Date(date).advance(-30, 'day');
// 通过增加 30 天计算结束日期
var endDate = ee.Date(date).advance(30, 'day');
// 创建一个以点几何和日期为属性的要素
var feature = ee.Feature(point, { date: date });
var pointBuffer = feature.buffer(800);
radios.push(pointBuffer);
// 计算与 plot18 的交集
var intersection = pointBuffer.intersection(plot18);
// 计算面积,以公顷为单位
var area = intersection.area().divide(10000);
// 获取日期的月份和年份
var month = ee.Date(date).get('month');
var year = ee.Date(date).get('year');
// 生成月份和年份标签
var monthYearLabel = ee.String(month).cat('-').cat(year).cat(' 公顷 N°');
// 计算当前点与 plot18 的交集
var intersectionPlot18 = pointBuffer.intersection(plot18);
// 计算与 plot18 交集的面积,以公顷为单位
var intersectionArea = intersectionPlot18.area().divide(10000);
var multipliedArea = intersectionArea.multiply(60);
// 将 multipliedArea 加到总和中
sumMultipliedArea = sumMultipliedArea.add(multipliedArea);
// 定义美洲豹活动范围的日期区间
var jaguarRange = endDate.difference(startDate, 'day');
// 将 intersectionArea 值分配给美洲豹范围内的每一天
var assignedArea = ee.FeatureCollection(ee.List.sequence(0, jaguarRange.subtract(1)).map(assignedAreaFunction));
// 打印每个点的结果
print('美洲豹:', i + 1);
print('图像获取日期:', date);
print('开始日期:', startDate.format('YYYY-MM-dd'));
print('结束日期:', endDate.format('YYYY-MM-dd'));
print('每日总交集面积(公顷):', intersectionArea);
print('交集面积 × 60:', multipliedArea);
print('每日分配面积:', assignedArea);
print('----------------------');
// 以蓝色将当前点缓冲区添加到地图
Map.addLayer(pointBuffer, { color: 'blue' }, '半径 ' + (i + 1));
// 将交集几何添加到 intersectionPolygons
intersectionPolygons = intersectionPolygons.merge(intersection);
}
// 执行多边形并集以避免重复
var unionPolygons = intersectionPolygons.union();
// 计算去重后的交集总面积
var totalIntersectionArea = unionPolygons.geometry().area().divide(10000);
// 显示结果
print('总交集面积(公顷):', totalIntersectionArea);
print('plot18 面积(公顷):', plotAreaHectares);
print('交集面积乘以 60 天的总和(公顷):', sumMultipliedArea);
// 将 plot18 图层添加到地图
Map.addLayer(plot18, { color: 'gold' }, "plot18");
Map.centerObject(plot18);