> 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/es/apendices/apendice-g-muestra-de-codigo-y-calculo-de-codigo-abierto.md).

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

El código de fuente abierta para cálculos de créditos de biodiversidad está disponible al público en el [GitHub de Savimbo](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 IP y LC con una interfaz que pueda autoasignar créditos desde, y hacia, una base de datos Airtable gratuita después de que comencemos la certificación de biodiversidad en 2024. Airtable gratuita [regístrate ](https://airtable.com/invite/r/fxsn6mcE)está disponible ahora. Los proyectos de IP pueden registrarse en la lista de espera en esta interfaz ahora y obtener plantillas de bases de datos 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. No comercial [regístrate](https://earthengine.google.com/noncommercial/) está disponible.&#x20;

**Figura 11. Ejemplo 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>. Ejemplo de código de Google Earth Engine</p></figcaption></figure>

Ejemplo 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 el GitHub de Savimbo en este [enlace.](https://github.com/savimbo) Contacto ***ops en savimbo.co**m* si te gustaría ser revisor de código.&#x20;

```markup
// Cargar 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 los 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 para 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 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 las 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 la parcela 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
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/es/apendices/apendice-g-muestra-de-codigo-y-calculo-de-codigo-abierto.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.
