> For the complete documentation index, see [llms.txt](https://sexytrees.savimbo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sexytrees.savimbo.com/methodology/fr/annexes/annexe-g-exemple-de-code-open-source-et-de-calcul.md).

# Annexe G : exemple de code open source et de calcul

Le code open source pour les calculs de crédit de biodiversité est disponible au public sur [Savimbo GitHub](https://github.com/savimbo).&#x20;

Nous voulons rendre ce code plus facile à utiliser et le rendre disponible aux projets des Peuples Autochtones et des communautés locales, avec une interface qui peut créditer automatiquement depuis, et vers, une base de données Airtable gratuite après le début de notre certification de biodiversité en 2024. Airtable gratuit [inscription ](https://airtable.com/invite/r/fxsn6mcE)est disponible maintenant. Les projets des Peuples Autochtones peuvent maintenant s'inscrire sur cette interface pour la liste d'attente et obtenir des modèles de base de données Airtable en envoyant un courriel à <ops@savimbo.com>

Des calculs de démonstration sont aussi disponibles sur  Google Earth Engine s'est engagé à fournir des comptes gratuits aux groupes autochtones impliqués dans le changement climatique. Non commercial [inscription](https://earthengine.google.com/noncommercial/) est disponible.&#x20;

**Figure 11. Exemple de code Google Earth Engine**&#x20;

<figure><img src="https://lh6.googleusercontent.com/rVQ0Wv_v9_eXa7qOghqAvJhwResowct17qRiUSD-lO_eatzZqyiNhfpKmprKNcRWdVXXkv2FuYyAetkdA1BzOcf6d7EWeGqmRpKVVMGmk89gLOQd8i1K-Ia4A7ixXu0Xo2XSlovBPF8KPN24COHu6a4" alt=""><figcaption><p><em><strong>Figure 11</strong></em>. Exemple de code Google Earth Engine</p></figcaption></figure>

Exemple de code, code sous révision externe. Peut être accessible sur Google Earth Engine à ce [lien.](https://code.earthengine.google.com/e914e4bf1b4fd252f4ad90318ca2371e) Ou sur le GitHub de Savimbo à ce [lien.](https://github.com/savimbo) Contact ***ops à savimbo.co**m* si vous voulez relire le code.&#x20;

```markup
// Charger le polygone plot18
var plot18_data = require("users/drea/map:plot18_data");
var plot18 = plot18_data.polygon;

// Calculer la surface de la parcelle en hectares
var plotArea = plot18.area();
var plotAreaHectares = plotArea.divide(10000);

// Charger les points du 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 d'entités 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 rayons et les tampons 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 entité 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 surface 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(' Hectares N°');
  
  // Calculer l'intersection avec plot18 pour le point actuel
  var intersectionPlot18 = pointBuffer.intersection(plot18);
  
  // Calculer la surface 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('Surface totale d'intersection par jour en hectares :', intersectionArea);
  print('Surface d'intersection multipliée * 60 :', multipliedArea);
  print('Surface attribuée par jour :', assignedArea);
  print('----------------------');
  
  // Ajouter au plan la zone tampon actuelle en bleu
  Map.addLayer(pointBuffer, { color: 'blue' }, 'Rayon ' + (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 surface totale des intersections sans doublons
var totalIntersectionArea = unionPolygons.geometry().area().divide(10000);

// Afficher les résultats
print('Surface totale d'intersection en hectares :', totalIntersectionArea);
print('Surface de plot18 en hectares :', plotAreaHectares);
print('Somme de la surface d'intersection multipliée en hectares * 60 jours :', sumMultipliedArea);

// Ajouter la couche plot18 à la carte
Map.addLayer(plot18, { color: 'gold' }, "plot18");
Map.centerObject(plot18);

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sexytrees.savimbo.com/methodology/fr/annexes/annexe-g-exemple-de-code-open-source-et-de-calcul.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
