> 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/pt-br/apendices/apendice-g-exemplo-de-codigo-e-calculo-de-codigo-aberto.md).

# Apêndice G: Exemplo de código e cálculo de código aberto

O código aberto para cálculos de crédito de biodiversidade está disponível ao público no [GitHub da Savimbo](https://github.com/savimbo).&#x20;

Temos a intenção de tornar este código mais fácil de usar e disponível para projetos de Povos Indígenas e comunidades locais, com uma interface que pode gerar crédito automático de e para um banco de dados Airtable gratuito, depois que começarmos a certificação de biodiversidade em 2024. Airtable gratuito [cadastre-se ](https://airtable.com/invite/r/fxsn6mcE)já está disponível. Projetos de Povos Indígenas podem se cadastrar na lista de espera nesta interface agora e obter modelos de banco de dados Airtable enviando um e-mail para <ops@savimbo.com>

Cálculos de demonstração também estão disponíveis no  Google Earth Engine prometeu fornecer contas gratuitas a grupos indígenas envolvidos em mudança climática. Não comercial [cadastre-se](https://earthengine.google.com/noncommercial/) está disponível.&#x20;

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

Exemplo de código, código sob revisão externa. Pode ser acessado pelo Google Earth Engine neste [link.](https://code.earthengine.google.com/e914e4bf1b4fd252f4ad90318ca2371e) Ou no GitHub da Savimbo neste [link.](https://github.com/savimbo) Contato ***ops em savimbo.co**m* se você quiser ser revisor de código.&#x20;

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

// Calcular a área do plot em hectares
var plotArea = plot18.area();
var plotAreaHectares = plotArea.divide(10000);

// Carregar pontos de onça
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 uma coleção de feições para armazenar os polígonos de interseção
var intersectionPolygons = ee.FeatureCollection([]);

// Definir a função 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 e buffers para cada ponto
for (var i = 0; i < puntos.length; i++) {
  var point = puntos[i].geometry;
  var date = puntos[i].date;

  // Calcular a data de início subtraindo 30 dias
  var startDate = ee.Date(date).advance(-30, 'day');
  
  // Calcular a data de fim adicionando 30 dias
  var endDate = ee.Date(date).advance(30, 'day');
  
  // Criar uma feição com a geometria do ponto e a data como propriedades
  var feature = ee.Feature(point, { date: date });
  
  var pointBuffer = feature.buffer(800);
  radios.push(pointBuffer);
  
  // Calcular a interseção com plot18
  var intersection = pointBuffer.intersection(plot18);
  
  // Calcular a área em hectares
  var area = intersection.area().divide(10000);
  
  // Obter o mês e o ano da data
  var month = ee.Date(date).get('month');
  var year = ee.Date(date).get('year');
  
  // Gerar um rótulo para o mês e o ano
  var monthYearLabel = ee.String(month).cat('-').cat(year).cat(' Hectares Nº');
  
  // Calcular a interseção com plot18 para o ponto atual
  var intersectionPlot18 = pointBuffer.intersection(plot18);
  
  // Calcular a área em hectares para a interseção com plot18
  var intersectionArea = intersectionPlot18.area().divide(10000);
  var multipliedArea = intersectionArea.multiply(60);
  
  // Adicionar multipliedArea à soma
  sumMultipliedArea = sumMultipliedArea.add(multipliedArea);
  
  // Definir o intervalo de datas da onça
  var jaguarRange = endDate.difference(startDate, 'day');
  
 // Atribuir o valor de intersectionArea para cada dia do intervalo da onça
  var assignedArea = ee.FeatureCollection(ee.List.sequence(0, jaguarRange.subtract(1)).map(assignedAreaFunction));
  
  // Imprimir os resultados para cada ponto
  print('Onça:', i + 1);
  print('Data de captura da imagem:', date);
  print('Data de início:', startDate.format('YYYY-MM-dd'));
  print('Data de fim:', endDate.format('YYYY-MM-dd'));
  print('Área total de interseção por dia em hectares:', intersectionArea);
  print('Área de interseção multiplicada * 60:', multipliedArea);
  print('Área atribuída por dia:', assignedArea);
  print('----------------------');
  
  // Adicionar o buffer do ponto atual ao mapa na cor azul
  Map.addLayer(pointBuffer, { color: 'blue' }, 'Raio ' + (i + 1));
  
  // Adicionar a geometria de interseção a intersectionPolygons
  intersectionPolygons = intersectionPolygons.merge(intersection);
}

// Fazer a união dos polígonos para evitar duplicatas
var unionPolygons = intersectionPolygons.union();

// Calcular a área total das interseções sem duplicatas
var totalIntersectionArea = unionPolygons.geometry().area().divide(10000);

// Mostrar os resultados
print('Área total de interseção em hectares:', totalIntersectionArea);
print('Área do plot18 em hectares:', plotAreaHectares);
print('Soma da área de interseção multiplicada por 60 dias em hectares:', sumMultipliedArea);

// Adicionar a camada plot18 ao 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/pt-br/apendices/apendice-g-exemplo-de-codigo-e-calculo-de-codigo-aberto.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.
