For the complete documentation index, see llms.txt. This page is also available as Markdown.
Annexe G : Exemple de code source ouvert et de calcul
Démo Google Earth Engine et accès au code ISBM sur le GitHub de Savimbo
Le code open-source pour les calculs de crédit de biodiversité est disponible pour le public sur le Savimbo GitHub.
Nous avons l’intention de rendre ce code plus facile à utiliser et disponible pour les projets des Peuples Autochtones et des communautés locales, avec une interface qui peut attribuer automatiquement des crédits depuis, et vers, une base de données Airtable gratuite après le début de la certification de biodiversité en 2024. Airtable gratuit inscription est disponible maintenant. Les projets des Peuples Autochtones peuvent maintenant s’inscrire sur la liste d’attente sur cette interface et obtenir des modèles de base de données Airtable en envoyant un e-mail à ops@savimbo.com
Des calculs de démonstration sont aussi disponibles sur Google Earth Engine a promis de fournir des comptes gratuits aux groupes autochtones impliqués dans le changement climatique. Non commercial inscription est disponible.
Figure 11. Exemple de code Google Earth Engine
Figure 11. Exemple de code Google Earth Engine
Exemple de code, code en révision externe. Peut être consulté dans Google Earth Engine à ce lien. Ou dans Savimbo GitHub à ce lien. Contact ops at savimbo.com si vous voulez être réviseur du code.
// Charger le polygone plot18
var plot18_data = require("users/drea/map:plot18_data");
var plot18 = plot18_data.polygon;
// Calculer la superficie de la parcelle en hectares
var plotArea = plot18.area();
var plotAreaHectares = plotArea.divide(10000);
// Charger les points jaguar
var points_jaguar_data = require("users/drea/map:points_jaguar_data");
var puntos = points_jaguar_data.points;
var radios = [];
var sumMultipliedArea = ee.Number(0);
// Définir une collection de caractéristiques pour stocker les polygones d’intersection
var intersectionPolygons = ee.FeatureCollection([]);
// Définir la fonction 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));
};
// Calculer les radios et les buffers pour chaque point
for (var i = 0; i < puntos.length; i++) {
var point = puntos[i].geometry;
var date = puntos[i].date;
// Calculer la date de début en soustrayant 30 jours
var startDate = ee.Date(date).advance(-30, 'day');
// Calculer la date de fin en ajoutant 30 jours
var endDate = ee.Date(date).advance(30, 'day');
// Créer une caractéristique avec la géométrie du point et la date comme propriétés
var feature = ee.Feature(point, { date: date });
var pointBuffer = feature.buffer(800);
radios.push(pointBuffer);
// Calculer l’intersection avec plot18
var intersection = pointBuffer.intersection(plot18);
// Calculer la superficie en hectares
var area = intersection.area().divide(10000);
// Obtenir le mois et l’année de la date
var month = ee.Date(date).get('month');
var year = ee.Date(date).get('year');
// Générer une étiquette pour le mois et l’année
var monthYearLabel = ee.String(month).cat('-').cat(year).cat(' Hectarias N°');
// Calculer l’intersection avec plot18 pour le point courant
var intersectionPlot18 = pointBuffer.intersection(plot18);
// Calculer la superficie en hectares pour l’intersection avec plot18
var intersectionArea = intersectionPlot18.area().divide(10000);
var multipliedArea = intersectionArea.multiply(60);
// Ajouter multipliedArea à la somme
sumMultipliedArea = sumMultipliedArea.add(multipliedArea);
// Définir la plage de dates du jaguar
var jaguarRange = endDate.difference(startDate, 'day');
// Attribuer la valeur intersectionArea à chaque jour de la plage du jaguar
var assignedArea = ee.FeatureCollection(ee.List.sequence(0, jaguarRange.subtract(1)).map(assignedAreaFunction));
// Afficher les résultats pour chaque point
print('Jaguar :', i + 1);
print('Date de capture de l’image :', date);
print('Date de début :', startDate.format('YYYY-MM-dd'));
print('Date de fin :', endDate.format('YYYY-MM-dd'));
print('Superficie totale d’intersection par jour en hectares :', intersectionArea);
print('Superficie d’intersection multipliée * 60 :', multipliedArea);
print('Superficie attribuée par jour :', assignedArea);
print('----------------------');
// Ajouter le buffer du point courant à la carte en bleu
Map.addLayer(pointBuffer, { color: 'blue' }, 'Radio ' + (i + 1));
// Ajouter la géométrie d’intersection à intersectionPolygons
intersectionPolygons = intersectionPolygons.merge(intersection);
}
// Faire des unions de polygones pour éviter les doublons
var unionPolygons = intersectionPolygons.union();
// Calculer la superficie totale des intersections sans doublons
var totalIntersectionArea = unionPolygons.geometry().area().divide(10000);
// Afficher les résultats
print('Superficie totale d’intersection en hectares :', totalIntersectionArea);
print('Superficie de plot18 en hectares :', plotAreaHectares);
print('Somme des superficies d’intersection multipliées en hectares * 60 jours :', sumMultipliedArea);
// Ajouter la couche plot18 à la carte
Map.addLayer(plot18, { color: 'gold' }, "plot18");
Map.centerObject(plot18);