# Apéndice G: Código de muestra de código abierto y cálculo

El código de código abierto para los cálculos de créditos de biodiversidad está disponible para el público en [Savimbo GitHub](https://github.com/savimbo).&#x20;

Tenemos la intención de hacer que este código sea más fácil de usar y esté disponible para proyectos de PI y CL con una interfaz que pueda acreditar automáticamente desde y hacia una base de datos gratuita de Airtable después de que comencemos la certificación de biodiversidad en 2024. Airtable gratis [registrarse ](https://airtable.com/invite/r/fxsn6mcE)está disponible ahora. Los proyectos de PI pueden registrarse ahora en la lista de espera de esta interfaz y obtener plantillas de base de datos de Airtable enviando un correo electrónico a <ops@savimbo.com>

También hay cálculos de demostración disponibles en Google Earth Engine se ha comprometido a proporcionar cuentas gratuitas a grupos indígenas involucrados en el cambio climático. Sin fines comerciales [registrarse](https://earthengine.google.com/noncommercial/) está disponible.&#x20;

**Figura 11. Muestra de código de Google Earth Engine**&#x20;

<figure><img src="https://lh6.googleusercontent.com/rVQ0Wv_v9_eXa7qOghqAvJhwResowct17qRiUSD-lO_eatzZqyiNhfpKmprKNcRWdVXXkv2FuYyAetkdA1BzOcf6d7EWeGqmRpKVVMGmk89gLOQd8i1K-Ia4A7ixXu0Xo2XSlovBPF8KPN24COHu6a4" alt=""><figcaption><p><em><strong>Figura 11</strong></em>. Muestra de código de Google Earth Engine</p></figcaption></figure>

Muestra de código, código bajo revisión externa. Se puede acceder a través de Google Earth Engine en este [enlace.](https://code.earthengine.google.com/e914e4bf1b4fd252f4ad90318ca2371e) O en Savimbo GitHub en este [enlace.](https://github.com/savimbo) Contacto ***ops en savimbo.co**m* si desea ser revisor de código.&#x20;

```markup
// Cargar el polígono plot18
var plot18_data = require("users/drea/map:plot18_data");
var plot18 = plot18_data.polygon;

// Calcular el área de la parcela en hectáreas
var plotArea = plot18.area();
var plotAreaHectares = plotArea.divide(10000);

// Cargar puntos de 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);

// Definir una colección de entidades para almacenar polígonos de intersección
var intersectionPolygons = ee.FeatureCollection([]);

// Definir la función 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));
};

// Calcular radios y buffers para cada punto
for (var i = 0; i < puntos.length; i++) {
  var point = puntos[i].geometry;
  var date = puntos[i].date;

  // Calcular la fecha de inicio restando 30 días
  var startDate = ee.Date(date).advance(-30, 'day');
  
  // Calcular la fecha de fin sumando 30 días
  var endDate = ee.Date(date).advance(30, 'day');
  
  // Crear una entidad con la geometría del punto y la fecha como propiedades
  var feature = ee.Feature(point, { date: date });
  
  var pointBuffer = feature.buffer(800);
  radios.push(pointBuffer);
  
  // Calcular la intersección con plot18
  var intersection = pointBuffer.intersection(plot18);
  
  // Calcular el área en hectáreas
  var area = intersection.area().divide(10000);
  
  // Obtener el mes y el año de la fecha
  var month = ee.Date(date).get('month');
  var year = ee.Date(date).get('year');
  
  // Generar una etiqueta para el mes y el año
  var monthYearLabel = ee.String(month).cat('-').cat(year).cat(' Hectáreas N°');
  
  // Calcular la intersección con plot18 para el punto actual
  var intersectionPlot18 = pointBuffer.intersection(plot18);
  
  // Calcular el área en hectáreas de la intersección con plot18
  var intersectionArea = intersectionPlot18.area().divide(10000);
  var multipliedArea = intersectionArea.multiply(60);
  
  // Añadir multipliedArea a la suma
  sumMultipliedArea = sumMultipliedArea.add(multipliedArea);
  
  // Definir el rango de fechas del jaguar
  var jaguarRange = endDate.difference(startDate, 'day');
  
 // Asignar el valor de intersectionArea a cada día del rango del jaguar
  var assignedArea = ee.FeatureCollection(ee.List.sequence(0, jaguarRange.subtract(1)).map(assignedAreaFunction));
  
  // Imprimir los resultados para cada punto
  print('Jaguar:', i + 1);
  print('Fecha de captura de la imagen:', date);
  print('Fecha de inicio:', startDate.format('YYYY-MM-dd'));
  print('Fecha de fin:', endDate.format('YYYY-MM-dd'));
  print('Área total de intersección por día en hectáreas:', intersectionArea);
  print('Área de intersección multiplicada * 60:', multipliedArea);
  print('Área asignada por día:', assignedArea);
  print('----------------------');
  
  // Añadir el buffer del punto actual al mapa en color azul
  Map.addLayer(pointBuffer, { color: 'blue' }, 'Radio ' + (i + 1));
  
  // Añadir la geometría de intersección a intersectionPolygons
  intersectionPolygons = intersectionPolygons.merge(intersection);
}

// Realizar uniones de polígonos para evitar duplicados
var unionPolygons = intersectionPolygons.union();

// Calcular el área total de intersecciones sin duplicados
var totalIntersectionArea = unionPolygons.geometry().area().divide(10000);

// Mostrar los resultados
print('Área total de intersección en hectáreas:', totalIntersectionArea);
print('Área de plot18 en hectáreas:', plotAreaHectares);
print('Suma del área de intersección multiplicada en hectáreas * 60 días:', sumMultipliedArea);

// Añadir la capa plot18 al mapa
Map.addLayer(plot18, { color: 'gold' }, "plot18");
Map.centerObject(plot18);

```


---

# Agent Instructions: 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:

```
GET https://sexytrees.savimbo.com/methodology/es/apendices/apendice-g-codigo-de-muestra-de-codigo-abierto-y-calculo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
