Está en la página 1de 61

01 PROGRAMACIÓN EN JAVA SCRIPT

// VARIABLES
var Perro = "TOBY";

var Meses = 12;

var Numero = 10;

print(Perro); // Click en Run y ver la Consola

print(Numero); // Click en Run y ver la Consola

// para imprimir debemos usar print

print(Meses); //Comentario

var Java = 15; // Numerica

print(Java);

// Tipo string

var _abc = "hola";

var $perro = 'dalmata';

print(_abc);

print($perro);

// Integer y double

var mi_int = 9; // Integer (Int)

var mi_dbl = 9.47; // Double (Dbl)

// Boolean

var tuVariable = true;

var c41 = false;

print(tuVariable);

print(c41);

// Null, Undefined y NaN

var a = null;
var b;

var c = "perro"*4;

var d = "perro" + 4;

print(a);

print(b);

print(c);

print(d);
// LISTAS
// No pueden tener funciones

var AA = [1,2,"g"];

print(AA);

var abc = [true, 4 , "luna_azul", [1,2,"A"], 4, {d:4,h:2}];

print(abc[3][2]);

// Considerar 0 como 1era posición: 4 elemento, 3era posición


// OBJETOS EN JAVA SCRIPT
var ObjetoUno = {

numero: 1,

letra: "a"

};

print(ObjetoUno);

var ca = {

a: 1,

b: [1,2,3,4],

c: {

t: 1,

hola: "saludos"

} // fin de c

} //fin de ca

Print(ca)

print(ca);

// Otro ejemplo

var metodoUno = {

saludo: "Buenos días",

c: [1,2,3,10],

tr: function(a,b) {

print(a+b);

} //fin de tr

}; // fin de metodoUno

print(metodoUno);
// Para ver el resultado de tr: nombreObjeto.función(argumento)

metodo.tr(4,5);

// Objeto con 3 propiedades: string, lista y objeto

var ObjetoTres = {

    letra: "a" ,

lista: ["a", 8],

Objeto: {

t: "Pedro",

z: 9,

lista1: ["bb", "cc"],

} // fin de objeto: Objeto

}; // Fin de ObjetoTres

print(ObjetoTres);
//OPERADORES
// Operadores Aritméticos

print(9+5);

print(9-5);

print(9*5);

print(9/5);

print(9%5);

//////////////////////////////////////////////////////////////////

// Operadores Relacionales

print(9>5); //true

print(9<5); //false

//////////////////////////////////////////////////////////////////

// Operadores Igualdad

print(9===5); //false

print(5===5); //true

print(9!==7); //true

//////////////////////////////////////////////////////////////////

//Operadores de Incremento/Decremento:

var i = 1;

i = i + 3;

print(i);

var a = 1;

a*= 5;

print(a);

var ccc = 1;
ccc += 10;

print(ccc);

var dd = 4;

dd ++; // Se le suma 1

print(dd);

var ee = 10;

ee --; // Se le resta 1

print(ee);

//////////////////////////////////////////////////////////////////

//Operadores Lógicos

print(!true); // Operador negación

print(6===6 && 1===3); // Operador Y

print(9===9 && 9==="9");

print(4===4 && 10!==8);

print(6===6 || 1===3); // Operador O


// FUNCIONES
function saludar (nombre,edad){

print(" Hola, " + " soy " + nombre + " y "+ " tengo " + edad + " años");

}// fin de function

saludar("Orlando",37);

function saludo(nombre, edad) {

print("Hola, soy " + nombre + " y tengo " + edad + " años");

saludo("Gokú", 30);

// Función numérica

function fun(a) {

return 4 * a; //devuelve 4

var valor = fun(7);

print(valor); // Sale 28

// Función caracteres

function animal(){

print("perro");

animal();
//Crea una función que use tres números enteros como argumentos

//y que "imprima" la suma de los dos primeros argumentos

//multiplicado por el tercero

function OPERADOR(a,b,c) {

print((a+b)*c);

}// fin de function

OPERADOR(4,5,2);
// CONDICIONALES Y LOOPS
//////////////////////////////////////////////////////////////

// if else

var color ="Verde";

if (color === "azul") {

print("Es mi color favorito")} // fin de if

else {

print("Ese no es mi color. Prefiero el azul");

} // fin de else

// for

// Empieza en cero, aumenta en 1, hasta antes de 5

for (var n = 0; n < 5; n++) {

print(n);

} // fin de for

// Otro ejercicio de for

var numeros = [10, 20, 30,40];

for (var a = 0; a < numeros.length; a++) {

print(numeros[a]);

} // fin de for
02 SHAPES en GEE

//Tipos de datos en GEE


//Image: archivo raster

//ImageCollection: un stack o series temporales de imágenes

//Geometry: archivo vectorial SIN ATRIBUTO

//Feature: geometry con un atributo

//FeatureCollection: geometry con un grupo de atributos

//LSIB ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017"),

// Buscar LSIB---> copiar Collection snippet

var paises = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017");

// Añadir polígonos

Map.addLayer(paises); //Modificar en layer transparencia de las capas

//

Map.addLayer(paises, {color:"blue"} , "PAISES" );


// Areas Protegidas en GEE
// SELECCIÓN DE ECUADOR

// Base de datos global: paises

var paises = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017");

// ver en Search: LSIB, ver TABLE SCHEMA, nombre de países

// country_na

// https://en.wikipedia.org/wiki/List_of_FIPS_country_codes

// Seleccionar Ecuador. Ver Docs para escoger función

//var paises filtro columna bd objeto

var ecuador = paises.filter(ee.Filter.eq("country_na","Ecuador") );

//Centrar mapa en Ecuador

Map.centerObject(ecuador);

// Añadir polígono al mapa Nombre de Capa Ecuador

Map.addLayer(ecuador, {color:"red"}, "Ecuador");

// Areas protegidas wdpa polygon buscar y sacar snipped

var ap =ee.FeatureCollection("WCMC/WDPA/current/polygons");

var ap_ecuador=ap.filter(ee.Filter.bounds(ecuador.geometry() ) );

// Añadir poligonos de areas protegidas de Ecuador al Mapa

Map.addLayer(ap_ecuador, {color:"green"}, "AP ECUADOR" )


03 SHAPE y RASTER en GEE
// Buffer de Shape
// Map puede usar para iterar a los elementos de una colección

// por ejemplo: ImageCollection, FeatureCollection ó una Lista

//01 Cargar Polígono de Paraguay, usamos snippet de países: LSIB polygon

var paraguay = ee.FeatureCollection("USDOS/LSIB_SIMPLE/2017")

.filter(ee.Filter.eq("country_na", "Paraguay"));

// 02 Función para obtener buffer

//nombre (argumento)

function buff(f) {

return f.buffer(30000); //buffer está en metros

} // Fin de function

// 03 Aplicamos map a paraguay porque es un feature.collection

var buff_par = paraguay.map(buff);

//Centrar mapa: usando var paraguay

Map.centerObject(paraguay);

// Añadir buffer al mapa

// Función Buffer Nombre

Map.addLayer(buff_par, {color:"red"}, "Buffer" );

//Anadir Paraguay al mapa

Map.addLayer(paraguay, {color:"blue"}, "Paraguay" );


//Multifiltro
// Filtros para Argentina: Áreas Protegidas

// wdpa Polygons: Copiar snipped

// Table Schema buscar ISO 3: codigos de países, usar el de Argentina

// Buscar areas : GIS AREA, está en km2

// https://en.wikipedia.org/wiki/ISO_3166-3

//01 Creamos areas protegidas y filtramos a Argentina

var ap_arg = ee.FeatureCollection("WCMC/WDPA/current/polygons")

.filter(ee.Filter.eq("ISO3","ARG"));

//02 Filtramos areas protegidas con area mayor a 10000km2

// Filter.gt (greater than, mayor a )

var grandes = ap_arg.filter(ee.Filter.gt("GIS_AREA", 10000));

//var grandes

print("Cuantas areas son mayores a 10000km2", grandes.size() );

// 03 Filtrar texto: AREAS PROTEGIDAS EN ARGENTINA, EN CATEGORÍA 2

var np = ap_arg.filter(ee.Filter.inList("IUCN_CAT", ["II"]));

//var np

print("Cuántos áreas protegidas son parques nacionales (Cat. II) ", np.size() );

Map.centerObject(ap_arg );

// Añadir polígono al mapa Nombre de Capa Argentina

Map.addLayer(ap_arg , {color:"yellow"}, "Argentina_Ap");

Map.centerObject(grandes );

// Añadir polígono al mapa Nombre de Capa Argentina

Map.addLayer(grandes , {color:"red"}, "Argentina_grandes");

Map.centerObject(np);

// Añadir polígono al mapa Nombre de Capa Argentina

Map.addLayer(np , {color:"blue"}, "Argentina_II");


//Cargar polígonos áreas protegidas y filtrar en Venezuela
var ap_ven = ee.FeatureCollection('WCMC/WDPA/current/polygons')

.filter(ee.Filter.eq('ISO3', 'VEN'));

// Calcular Área total protegida

print("Área total protegida (km²)",

ap_ven.reduceColumns({

reducer: ee.Reducer.sum(),

selectors: ['GIS_AREA']

}));

// Calcular Superficie total de AP terrestres y marinas

print("Superficie total de AP terrestres y marinas (km²)",

ap_ven.reduceColumns({

selectors: ['GIS_AREA', 'GIS_M_AREA'],

reducer: ee.Reducer.sum().repeat(2)}));

//por ser 2 selectors

// Calcular Número de AP según categoría IUCN

print("Número de AP según categoría IUCN",

ap_ven.reduceColumns({

selectors: ['GIS_AREA', 'IUCN_CAT'],

reducer: ee.Reducer.count().group({

groupField: 1,

groupName: 'IUCN',

}) //Fin de .group

}));

// Calcular Promedio superficie AP

print("Promedio superficie AP (km²)",

ap_ven.reduceColumns({

reducer: ee.Reducer.mean(),

selectors: ['GIS_AREA']

}));
// DEM
// Buscar srtm

var dem = ee.Image("USGS/SRTMGL1_003");

//Agregar DEM al mapa

Map.addLayer(dem); //Se agrega el dem

//Agregar DEM con escala de valores personalizada

Map.addLayer(dem,{min: 0, max: 7000},"dem_2");

//Agregar DEM con paleta de colores personalizada

Map.addLayer(dem,{min: 0, max: 7000,

palette: ["green", "yellow" , "red"]},"dem_3");

//zonas más bajas y más altas en amarillo y rojo


//Pendiente y Aspecto Mundial
// Cargar DEM

var dem = ee.Image("CGIAR/SRTM90_V4");

// Obtener pendiente

// (la tasa máxima de cambio de valor del DEM de un pixel con respecto a sus vecinos)

var pendiente = ee.Terrain.slope(dem);

// Obtener aspecto (orientación de laderas)

// (puede ser pensado como la dirección de la pendiente)

var aspecto = ee.Terrain.aspect(dem);

// Añadir aspecto al mapa

Map.addLayer(aspecto, {min: 0,

max: 360,

palette: [

'3ae237', 'b5e22e', 'd6e21f', 'fff705', 'ffd611', 'ffb613', 'ff8b13',

'ff6e08', 'ff500d', 'ff0000', 'de0101', 'c21301', '0602ff', '235cb1',

'307ef3', '269db1', '30c8e2', '32d3ef', '3be285', '3ff38f', '86e26f'

]},"Aspecto");

// Añadir pendiente al mapa

Map.addLayer(pendiente, {

min: 0,

max: 90,

palette: [

'3ae237', 'b5e22e', 'd6e21f', 'fff705', 'ffd611', 'ffb613', 'ff8b13',

'ff6e08', 'ff500d', 'ff0000', 'de0101', 'c21301', '0602ff', '235cb1',

'307ef3', '269db1', '30c8e2', '32d3ef', '3be285', '3ff38f', '86e26f'

]},"Pendiente");
// Vector a Raster
// Vector a Raster

//Cargar polígonos áreas protegidas y filtrar en Argentina

var ap_arg = ee.FeatureCollection('WCMC/WDPA/current/polygons')

.filter(ee.Filter.eq('ISO3', 'ARG')); //Sólo cambiar el pais

// Crear raster usando el area de las AP como valor

var raster = ap_arg

.filter(ee.Filter.neq('GIS_AREA', null))//Excluye pixeles que sean NA

.filter(ee.Filter.gt("GIS_AREA", 10000))

.reduceToImage({ //Convierte en raster

properties: ['GIS_AREA'],

reducer: ee.Reducer.first() //Selección del 1er input

});

// Centrar el mapa en las AP de Argentina

Map.centerObject(ap_arg);

// Añadir raster al mapa

Map.addLayer(raster,

{min: 0, max: 10000, palette: ['blue', 'green', 'yellow', 'red']});

// Raster a Vector
// Cargar polígono Uruguay
var uruguay = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')

.filter(ee.Filter.eq('country_na', 'Uruguay'));

// Cargar base de datos de cobertura arbórea MOD44B--2000-2019

var tc = ee.ImageCollection('MODIS/006/MOD44B')

.select('Percent_Tree_Cover').median()

.clip(uruguay);

// Definir umbrales de cobertura arbórea de ineterés

//(en este caso filtramos los polígonos con cobertura árborea mayor a 20%)

var zona = tc.gt(20).add(tc.gt(30)).add(tc.gte(65));

// Eliminar los valores de cobertura pequeños

// (para no exportar todo el polígono de los límites de Uruguay)

zona = zona.updateMask(zona.neq(0));

// Convertir los valores de "zona" a vectores

var vector = zona.addBands(tc).reduceToVectors({

geometry: uruguay,

crs: "EPSG:4326",

scale: 1000,

geometryType: 'polygon',

eightConnected: false,

labelProperty: 'zona',

reducer: ee.Reducer.mean()

});

// Centrar mapa en el vector

Map.centerObject(vector);

// Añadir vector al mapa

Map.addLayer(vector, {},'vector');
// Exportar vector a Drive

Export.table.toDrive({

collection: vector,

description: "Export_SHP_URU",

});

// Subir shape a GEE


//01 Ir a Assets/GEE_Curso/ crear carpeta: parques
//02 New/Shapefile ........

// Asset ID: colocar

// GEE_CURSO/AREAS/LORETO (nombre que desees)

// SELECT: buscar shp y seleccionar todos

// Luego UPLOAD.................En Tasks se ve como va subiendo

// 03 Luego de cargar, ver a la izquierda; añadirlo: usar la flecha

//Se irá a la parte superior. Cambiar table por distritos

// Con la palabra distritos completar lo de abajo

Map.centerObject(distritos);

//Anadir el archivo vertorial al mapa

Map.addLayer( distritos, {color:"blue"}, "LORETO");

//nombre del layer


04 TELEDETECCIÓN
// Landsat 8
// ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') ya está calibrada

// Desde 2013-04-11 ---> presente

// 01 Ir a zona de interés, dibujar un rectángulo o polígono, se adjuntará automáticamente

// en la primera linea: nombre geometry

// 02 Buscar toa: USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance

//Buscar imágenes LANDSAT 8: snipped copiado de snippet

var imgs_l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')

.filterDate('2013-06-01', '2021-08-30') //Fechas: 2013-04-11 - 2020-08-30

.filterBounds(geometry) // nombre de var geometry (antes de línea 1)

.filterMetadata('CLOUD_COVER', 'Less_Than',10); //MENOR A 10% COB. DE NUBES

// CLOUD_COVER está en descripción de USGS Landsat 8 Collection

// 1 Tier 1 TOA Reflectance, así como CLOUD_COVER_LAND: IMAGE PROPERTIES

// 03 Ver propiedades imágenes encontradas

print(imgs_l8);

///////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////

// Escoger 4.01 ó 4.02

//04.1 Ir a Console/Features: escoger un código y pegarlo en

//img_fecha

//Seleccionamos la imagen según la fecha que más se acerque a lo que queremos

//var img_fecha = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_011062_20190426");

//04.2 Ó podemos seleccionar la imagen con menor cobertura de nubes

//imgs_18
var img = ee.Image(imgs_l8.sort('CLOUD_COVER').first()); //Ver linea 13

///////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////

// 05 Cortar imagen con el área de estudio

// img o img_fecha

var l8_clip = img.clip(geometry); //podría ser img_fecha en lugar de img.

//img_fecha

// 06 Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// 07 Añadir imagen al mapa

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Landsat 8-Comb 4-3-2 Color Natural');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B5','B4','B3']},

'Landsat 8-Comb 5-4-3 Infrarroja Vegetación');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,
gamma: 1.0,

bands: ['B6','B5','B2']},

'Landsat 8-Comb 6-5-2 Uso agrícola');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B5','B6','B2']},

'Landsat 8-Comb 5-6-2 Vegetación Vigorosa');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B7','B6','B4']},

'Landsat 8-Comb 7-6-4 Falso Color zona urbana en magenta');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B5','B6','B4']},

'Landsat 8-Comb 5-6-4 Uso suelo, agua');

Map.addLayer(l8_clip, {

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B7','B6','B5']},

'Landsat 8-Comb 7-6-5 Penetracion atmosferica');


//Considerar:

// bands: ['B4','B3','B2']}, Color Natural

// bands: ['B5','B4','B3']}, Infrarroja para vegetación

//Rojo veg. sana y bien desarrollada; rosa: veg. menos densa

// Blanco: escasa vegetación; Azul: presencia de agua

//Marron: Vegetación arbustiva muy variable

// bands: ['B6','B5','B2']}, Uso agrícola: verde brillante

// bands: ['B5','B6','B2']}, Vegetación Vigorosa: en rojo

// bands: ['B7','B6','B4']}, Zonas urbanas: Magenta, pastos : verde claro

// De oliva a verde brillante: Oliva: zona forestales, Coníferas más oscuro que caducifolia

// bands: ['B5','B6','B4']}, Uso suelo, agua

// bands: ['B7','B6','B5']}, Penetracion atmosferica

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

// LANDSAT 8 SENTINEL Resolution

// B2 Green 30 meters B2 Blue 10 meters

// B3 Red 30 meters B3 Green 10 meters

// B4 Near Infrared 30 meters B4 Red 10 meters

// B5 ShortWave infrared 1 30 meters B8A NIR 10 meters

// B6 Thermal Infrared 30 meters B11 SWIR 1 20 meters

// B7 ShortWave infrared 2 30 meters B12 SWIR 2 20 meters


//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

// Exportar imagen a Drive

//Export.image.toDrive({

// image: l8_clip.select("B4", "B3", "B2"), # Configurar bien aquí: imagen y bandas

// description: 'Landsat8_30m',

// scale: 30,

// region: geometry}); //GUARDAR EN GEE


//Sentinel 2
// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 - actualidad

//01 Seleccionar con rectángulo área de Interés.

// 02 Buscar Sentinel2 y pegar snippet

//Buscar imágenes SENTINEL 2

var imgs_s2 = ee.ImageCollection ('COPERNICUS/S2_SR') // Sin calibración

.filterDate('2018-06-01', '2020-08-30') //Fechas: 2015-06-23 - actualidad

.filterBounds(geometry)

.filterMetadata ('CLOUDY_PIXEL_PERCENTAGE', 'Less_Than', 10); //Menor a 10%

// Cobertura nubosa

print(imgs_s2); // Para ver todas las imágenes: Console/Features

///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////

// Escoger 4.01 ó 4.02

//04.1 Ir a Console/Features: escoger un código y pegarlo en

//img_fecha

//Seleccionamos la imagen según la fecha que más se acerque a lo que queremos

//var img_fecha =
ee.Image("COPERNICUS/S2/20151226T130212_20151226T130234_T24LUQ");

// 04.2 O podemos seleccionar la imagen con menor cobertura de nubes

//imgs_18

// Seleccionar la imagen con menor cobertura de nubes

var img = ee.Image(imgs_s2.sort('CLOUDY_PIXEL_PERCENTAGE').first());

///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// Cortar imagen con el área de estudio

var s2_clip = img.clip(geometry);

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Añadir imagen al mapa

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb 4-3-2 Color Natural');

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B8A','B4','B3']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb 8-4-3 Infrarrojo Rojo Vegetación');

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B11','B8A','B2']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb B11-B8A-B2 Uso Agrícola');


Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B8A','B11','B2']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb B8A-B11-B2 Vegetación Vigorosa');

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B12','B11','B4']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb B12-B11-B4 Falso Color Urbano en magenta');

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B12','B11','B8A']}, //Bandas, ver ayuda de COPERNICUS/S2

'Sentinel 2-Comb B12-B11-B8A Penetración Atmosférica');

//Map.addLayer (s2_clip, {

// max: 4000,

// min: 0.0,

// gamma: 1.0,

// bands: ['B8A','B11','B2']}, //Bandas, ver ayuda de COPERNICUS/S2

// 'Sentinel 2-Comb B8A-B11-B2 Análisis de la Vegetación');

//Considerar:
// bands: ['B4','B3','B2']}, Color Natural

// bands: ['B8','B4','B3']}, Infrarroja para vegetación

//Rojo veg. sana y bien desarrollada; rosa: veg. menos densa

// Blanco: escasa vegetación; Azul: presencia de agua

//Marron: Vegetación arbustiva muy variable

// bands: ['B11','B8A','B2']}, Campos agrícolas: verde brillante

// bands: ['B8A','B11','B2']}, Vegetación Vigorosa: en rojo

// bands: ['B12','B11','B4']}, Zonas urbanas: Magenta, pastos : verde claro

// De oliva a verde brillante: Oliva: zona forestales, Coníferas más oscuro que caducifolia

// bands: ['B12','B11','B8A']}, Penetracion atmosferica

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

// LANDSAT 8 SENTINEL Resolution

// B2 Green 30 meters B2 Blue 10 meters

// B3 Red 30 meters B3 Green 10 meters

// B4 Near Infrared 30 meters B4 Red 10 meters

// B5 ShortWave infrared 1 30 meters B8A NIR 10 meters

// B6 Thermal Infrared 30 meters B11 SWIR 1 20 meters

// B7 ShortWave infrared 2 30 meters B12 SWIR 2

// Exportar imagen a Drive

//Export.image.toDrive({
// image: s2_clip.select("B4", "B3", "B2"), # Configurar bien aquí: imagen y bandas

// description: 'Sentinel2_10m', //Ver las bandas con cuidado

// scale: 10,

// region: geometry});
// Mosaico Sentinel Polygon

// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")

//01 Seleccionar el área de interés con el polígono: Manglares entre Perú-Ecuador

//Imagen SENTINEL 2

var img_s2 = ee.ImageCollection ('COPERNICUS/S2')

.filterDate('2018-10-01', '2020-12-31') //Fechas: 2015-07-01 - actualidad

.filterBounds(geometry)

.filterMetadata('CLOUDY_PIXEL_PERCENTAGE', 'Less_Than', 10);

// Nubosidad

// Filtro de la mediana

var s2_filtro = ee.Image(img_s2.median());

// Cortar imagen con el área de estudio

var s2_clip = s2_filtro.clip(geometry);

// Añadir imagen al mapa

Map.addLayer(s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Img S2');

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);
//ASTER
// ASTER---> Corregida y ortorectificada

//ASTER/AST_L1T_003 --> Each scene covers an area of 60 x 60 km.

//These scenes, produced by the USGS, contain calibrated at-sensor radiance,

//ortho-rectified and terrain corrected.

var imgs_aster = ee.ImageCollection ('ASTER/AST_L1T_003')

.filterDate ('2012-04-01', '2018-05-31') //Fechas disponibles: 2000-03-04 - hoy

.filterBounds (geometry)

.filterMetadata ('CLOUDCOVER', 'Less_Than', 20);

// Mosaico ASTER (mediana)

var mos_aster = ee.Image(imgs_aster.median());

var mos_aster_clip = mos_aster.clip(geometry);

Map.addLayer(mos_aster_clip, {

max: 255,

min: 0.0,

gamma: 1.0,

bands: ['B3N', 'B02', 'B01']},

'Mosaico ASTER_15m');

//Export.image.toDrive({

// image: mos_aster_clip.select("B3N", "B02", "B01"), # Configurar bien aquí: imagen y bandas

// description: 'ASTER_15m',

// scale: 15,

// region: geometry});
////////

//ASTER/AST_L1T_003 --> Each scene covers an area of 60 x 60 km.

//These scenes, produced by the USGS, contain calibrated at-sensor radiance,

//ortho-rectified and terrain corrected.

// BANDAS Resolution

// B01 VNIR_BAND1 Visible green/yellow 15m

// B02 VNIR_BAND2 Visible red 15m

// B3N VNIR_BAND3N Near Infrared 15m

// B04 SWIR_BAND4 Short wave infrared 30m

// B05 SWIR_BAND5 Short wave infrared 30m

// B06 SWIR_BAND6 Short wave infrared 30m

// B07 SWIR_BAND7 Short wave infrared 30m

// B08 SWIR_BAND8 Short wave infrared 30m

// B09 SWIR_BAND9 Short wave infrared 30m

// B10 TIR_BAND10 Thermal infrared 90m

// B11 TIR_BAND11 Thermal infrared 90m

// B12 TIR_BAND12 Thermal infrared 90m

// B13 TIR_BAND13 Thermal infrared 90m

// B14 TIR_BAND14 Thermal infrared 90m


// MODIS
//MODIS--->FECHAS 2000-02-18T00:00:00 - 2021-03-29

//Seleccionar Polígono

var imgs_modis = ee.ImageCollection('MODIS/006/MCD43A1')

.filterDate('2018-01-01', '2018-12-30') //Fechas disponibles: 2000-02-18 - hoy

.filterBounds(geometry);

var img_mod = ee.Image(imgs_modis.sort('CLOUD_COVER').first());

var modis_clip = img_mod.clip (geometry);

Map.addLayer(modis_clip, {

min: 0.0,

max: 1000.0,

gamma: 2.0,

bands: ['BRDF_Albedo_Parameters_Band1_iso', 'BRDF_Albedo_Parameters_Band4_iso',

'BRDF_Albedo_Parameters_Band3_iso']},

'Imagen MODIS');

Map.centerObject(modis_clip);

//Export.image.toDrive({

// image: modis_clip.select("BRDF_Albedo_Parameters_Band1_iso",

// "BRDF_Albedo_Parameters_Band4_iso",

// "BRDF_Albedo_Parameters_Band3_iso"),

// description: 'MODIS_500m',

// scale: 500,

// region: geometry});

// Mosaico MODIS (mediana)


var mos_modis = ee.Image(imgs_modis.median());

var mos_modis_clip = mos_modis.clip(geometry);

Map.addLayer(mos_modis_clip, {

min: 0.0,

max: 1400.0,

gamma: 2.0,

bands: ['BRDF_Albedo_Parameters_Band1_iso', 'BRDF_Albedo_Parameters_Band4_iso',

'BRDF_Albedo_Parameters_Band3_iso']},

'Mosaico MODIS');

//Export.image.toDrive({

// image: mos_modis_clip.select("BRDF_Albedo_Parameters_Band1_iso", // Configurar bien


aquí: imagen y bandas

// "BRDF_Albedo_Parameters_Band4_iso",

// "BRDF_Albedo_Parameters_Band3_iso"),

// description: 'MODIS_500m',

// scale: 500,

// region: geometry});
//Máscaras de Sentinel 2
// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 - actualidad

// Función para enmascarar nubes de imagen Sentinel 2 a partir de banda QA

//01 Seleccionar polígono del área de interés

////////////////////////////////////////////////////////////////////////////////////////////////////
///

// Algoritmo desarrollo por los de GEE, a partir de la banda QA

function maskS2clouds(image) {

var qa = image.select('QA60'); //Banda QA60 de Sentinel 2

// Bits 10 y 11 son nubes y cirrus, respectivamente

var cloudBitMask = 1 << 10;

var cirrusBitMask = 1 << 11; //Nubes cirrus

// Ambas indicadores deben ser 0, lo que indica un cielo despejado

var mask = qa.bitwiseAnd(cloudBitMask).eq(0) //si es 0 despejado

.and(qa.bitwiseAnd(cirrusBitMask).eq(0));

return image.updateMask(mask).divide(10000);

} //Fin de función maskS2clouds

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////

// Buscar imagen

var img = ee.ImageCollection('COPERNICUS/S2')

.filterDate('2018-01-01', '2018-06-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) //menor a 20%

.map(maskS2clouds) //función map usa función de maskS2clouds

.filterBounds(geometry) //antes línea 1

.map(function(image){return image.clip(geometry)}) //map collection de imágenes

.median(); // Usando mediana, para que sea una sola imágen

// Visualización RGB

var rgb_vis = {

min: 0.0,

max: 0.3,

bands: ['B4', 'B3', 'B2'], }; //Elegimos las bandas

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Añadir imagen al mapa

Map.addLayer(img, rgb_vis, 'Imagen Sentinel 2'); //Imagen sin nubes


//Sentinel 2-Calibrada
// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 - actualidad

////////////

//SENTINEL 2

////////////

var imgs_sentinel2 = ee.ImageCollection ('COPERNICUS/S2_SR')

.filterDate ('2015-01-01', '2020-12-30') //Fechas disponibles: 2015-07-01 - hoy

.filterBounds (geometry)

.filterMetadata ('CLOUDY_PIXEL_PERCENTAGE', 'Less_Than', 30);

var img_s2 = ee.Image(imgs_sentinel2.sort('CLOUDY_PIXEL_PERCENTAGE').first());

var s2_clip = img_s2.clip (geometry);

Map.addLayer(s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Imagen Sentinel 2');

Map.centerObject (s2_clip);

//Export.image.toDrive({

// image: s2_clip.select("B4", "B3", "B2"),

// description: 'Sentinel2_10m',
// scale: 10,

// region: geometry});

// Mosaico SENTINEL 2 (mediana)

var mos_s2 = ee.Image(imgs_sentinel2.median());

var mos_s2_clip = mos_s2.clip(geometry);

Map.addLayer(mos_s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Mosaico Sentinel 2');

//Export.image.toDrive({

// image: mos_s2_clip.select("B4", "B3", "B2"), // Configurar bien aquí: imagen y bandas

// description: 'Sentinel2_10m',

// scale: 10,

// region: geometry});
05 NDVI-SERIES DE TIEMPO-REGRESIONES
//NDVI con Sentinel-2—a gee
// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 – actualidad

// Seleccionar polígono

//01 Buscar imágenes SENTINEL 2

var imgs_s2 = ee.ImageCollection ('COPERNICUS/S2')

.filterDate('2015-07-01', '2016-08-30') //Fechas: 2015-07-01 - actualidad

.filterBounds(geometry)

.filterMetadata ('CLOUDY_PIXEL_PERCENTAGE', 'Less_Than', 10); //Nubosidad menor a 10%

// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")

//02 Seleccionar la fecha con la imagen con menor cobertura de nubes

var img = ee.Image(imgs_s2.sort('CLOUDY_PIXEL_PERCENTAGE').first());

// 03 Cortar imagen con el área de estudio

var s2_clip = img.clip(geometry);

//04 Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// 05 Añadir imagen sentinel al mapa

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,
bands: ['B4','B3','B2']},

'Imagen Sentinel 2');

// NDVI = (NIR-RED) / (NIR+RED)

///////////////

// Forma 1 NDVI

///////////////

// imagen cortada: s2_clip

var ndvi1 = s2_clip.normalizedDifference(['B8','B4']); //Bandas 8 y 4

//Añadir NDVI al mapa

Map.addLayer(ndvi1,

{max:0.7, min: -0.5,

palette:['FFFFFF','CE7E45','DF923D','F1B555','FCD163','99B718','74A901',

'66A000','529400','3E8601','207401','056201','004C00','023B01',

'012E01','011D01','011301']}, // fin de {max

'NDVI_1');

///////////////

// Forma 2 NDVI

///////////////

var ndvi2 = s2_clip.expression('(nir-red)/(nir+red)', {

'nir':s2_clip.select('B8'), //nir es la banda 8

'red':s2_clip.select('B4')}); // red es la banda 4

//Añadir NDVI al mapa

Map.addLayer(ndvi2,

{max:0.5, min:0,

palette:['FFFFFF','CE7E45','DF923D','F1B555','FCD163','99B718','74A901',
'66A000','529400','3E8601','207401','056201','004C00','023B01',

'012E01','011D01','011301']},

'NDVI_2');

// Son diferentes sólo por la paleta

// Para saber el valor del NDVI---> Inspector y click

// Exportar imagen a Drive

//Export.image.toDrive({

// image: ndvi1, # Configurar bien aquí: imagen

// description: 'NDVI_Sentinel2_10m',

// scale: 10, //10 metros

// region: geometry}); //Guardar en GEE


//Series de Tiempo Sentinel-2—a gee
//Series de Tiempo Sentinel-2

// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 - actualidad

// Sentinel 2: Mejor resolución de Landsat. Agricultura de precisión

//Buscar imágenes SENTINEL 2

var imgs_s2 = ee.ImageCollection ('COPERNICUS/S2_SR')

.filterDate('2017-05-01', '2020-12-30') //Fechas: 2015-07-01 - actualidad

.filterBounds(geometry)

.map(function(image){return image.clip(geometry)});

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Función para calcular NDVI

function addNDVI(image) {

var ndvi_imgs = image.normalizedDifference(['B8', 'B4']);

return image.addBands(ndvi_imgs); }

// Calcular NDVI

var ndvi = imgs_s2.map(addNDVI);

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);
// Visualización RGB

var rgb_vis = {min: 0,

max: 4000,

gamma: 1.0,

bands: ['B4', 'B3', 'B2']};

// Añadir al mapa la mediana de la imagen del área de estudio

Map.addLayer(imgs_s2.median(), rgb_vis, 'RGB (Mediana)');

// mean Promedio

// Crear gráfico serie de tiempo NDVI del área de interés

print(ui.Chart.image.series(ndvi.select('nd'), geometry)

.setOptions({title: 'Serie de Tiempo NDVI-Mediana',

vAxis: {title: 'NDVI'},

hAxis: {title: 'Tiempo'},}));

//////////////////////////////////////////////////////////////////////

//Buscar imágenes SENTINEL 2

var imgs_s2 = ee.ImageCollection ('COPERNICUS/S2_SR')

.filterDate('2017-05-01', '2020-12-30') //Fechas: 2015-07-01 - actualidad

.filterBounds(geometry)

.map(function(image){return image.clip(geometry)});

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Función para calcular NDVI

function addNDVI(image) {

var ndvi_imgs = image.normalizedDifference(['B8', 'B4']);

return image.addBands(ndvi_imgs); }
// Calcular NDVI

var ndvi = imgs_s2.map(addNDVI);

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Visualización RGB

var rgb_vis = {min: 0,

max: 4000,

gamma: 1.0,

bands: ['B4', 'B3', 'B2']};

// Añadir al mapa la mediana de la imagen del área de estudio

Map.addLayer(imgs_s2.mean(), rgb_vis, 'RGB (Promedio)');

// median Mediana

// Crear gráfico serie de tiempo NDVI del área de interés

print(ui.Chart.image.series(ndvi.select('nd'), geometry)

.setOptions({title: 'Serie de Tiempo NDVI-Promedio',

vAxis: {title: 'NDVI'},

hAxis: {title: 'Tiempo'},}));


//NDVI y otros Índices con Sentinel-2—a gee
// Copernicus ya corregida

// ee.ImageCollection("COPERNICUS/S2_SR")--->2017-03-28T00:00:00 - 2021-04-07

// Copernicus sin calibrar

//ee.ImageCollection ('COPERNICUS/S2') --->Fechas: 2015-06-23 - actualidad

//Buscar imágenes SENTINEL 2

var imgs_s2 = ee.ImageCollection ('COPERNICUS/S2')

.filterDate('2018-06-01', '2018-08-30') //Fechas: 2015-07-01 - actualidad

.filterBounds(geometry)

.filterMetadata ('CLOUDY_PIXEL_PERCENTAGE', 'Less_Than', 10);

// Seleccionar la imagen con menor cobertura de nubes

var img = ee.Image(imgs_s2.sort('CLOUDY_PIXEL_PERCENTAGE').first());

// Cortar imagen con el área de estudio

var s2_clip = img.clip(geometry);

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Añadir imagen sentinel al mapa

Map.addLayer (s2_clip, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Imagen Sentinel 2');

/*
Bandas Sentinel 2 (Resolución espacial)

1: Coastal aerosol (60m)

2: Blue (10m)

3: Green (10m)

4: Red (10m)

5: Vegetation Red Edge 1 (20m)

6: Vegetation Red Edge 2 (20m)

7: Vegetation Red Edge 3 (20m)

8: NIR (10m)

8a: Narrow NIR (20)

9: Water vapour (60m)

10: SWIR – Cirrus (60m)

11: SWIR (20m)

12: SWIR (20m)

*/

//////////////////////////////////

// EVI (Enhanced Vegetation Index)

//////////////////////////////////

/*

Permite monitorear el estado de la vegetación en caso de altas

densidades de biomasa.

Útil para analizar áreas de la Tierra con grandes cantidades de clorofila

(como los bosques tropicales), y preferiblemente con efectos topográficos

mínimos (regiones no montañosas). */

var EVI = s2_clip.expression ('float (2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1)))', {

'NIR': s2_clip.select ('B8'),

'RED': s2_clip.select ('B4'),


'BLUE': s2_clip.select ('B2')});

/////////////////////

// GNDVI (Green NDVI)

/////////////////////

/*

El índice GNDVI es más sensible a la variación de la clorofila

en el cultivo que el índice NDVI y presenta un punto de saturación más alto.

El índice GNDVI puede ser utilizado en cultivos con canopias densas

o en etapas más avanzadas de desarrollo */

var GNDVI = s2_clip.expression('(NIR-GREEN)/(NIR+GREEN)', {

'NIR':s2_clip.select('B8'),

'GREEN':s2_clip.select('B3')});

/////////////////////////

// GLI (Green Leaf Index)

/////////////////////////

/*

Incorpora las tres bandas del visible y presenta gran sensibilidad a

la hora de identificar todos aquellos elementos verdes y oscuros.

Útil para trabjar con drones*/

var GLI = s2_clip.expression ('float (((GREEN - RED) + (GREEN - BLUE)) / ((2 * GREEN) + RED +
BLUE))', {

'GREEN': s2_clip.select ('B3'),

'RED': s2_clip.select ('B4'),


'BLUE': s2_clip.select ('B2')});

////////////////////////////////////////

// SAVI (Soil Adjusted Vegetation Index)

////////////////////////////////////////

/*

Corrige los efectos del ruido del suelo (color del suelo, humedad del suelo,

variabilidad del suelo a través de la región, etc.),

que tienden a afectar a los resultados.

Análisis de cultivos jóvenes, para regiones áridas con vegetación

escasa (menos del 15% del área total) y superficies expuestas del suelo. */

var SAVI = s2_clip.expression ('float (((NIR - RED) / (NIR + RED + L))* (1+L))',{

'L': 0.5, // Cobertura vegetacion 0-1

'NIR': s2_clip.select ('B8'),

'RED': s2_clip.select ('B4')});

////////////////////////////////

// GCI (Green Chlorophyll Index)

////////////////////////////////

/*

Estima el contenido de clorofila de las hojas en varias

especies de plantas

Útil para monitorear el impacto de la estacionalidad, el estrés ambiental o,

también, la aplicación de los pesticidas en su efecto sobre

la salud de las plantas.*/


var GCI = s2_clip.expression ('float (((NIR) / (GREEN)) - 1)', {

'NIR': s2_clip.select ('B8'),

'GREEN': s2_clip.select ('B3')});

////////////////////////

// NDWI (Normalized Difference Water Index)

////////////////////////

//Permite conocer la hidratación de la vegetación y la humedad del suelo

var NDWI = s2_clip.expression('(NIR-SWIR)/(NIR+SWIR)', {

'NIR':s2_clip.select('B8'),

'SWIR':s2_clip.select('B11')});

/////////////////////////////////////////////

// SIPI (Structure Insensitive Pigment Index)

/////////////////////////////////////////////

/*

Análisis de la vegetación con la estructura variable del dosel.

Estima la relación de carotenoides a clorofila: las señales de mayor valor

de la vegetación estresada.

Útil para monitorear la salud de las plantas en regiones con alta

variabilidad en la estructura del dosel o el índice de área foliar,

para la detección temprana de enfermedades de las plantas u

otras causas de estrés. */

var SIPI = s2_clip.expression ('float ((NIR - BLUE) / (NIR - RED))',{

'NIR': s2_clip.select ('B8'),


'BLUE': s2_clip.select ('B2'),

'RED': s2_clip.select ('B4')});

////////////////////////////////////////////////////

// ARVI (Atmospherically Resistant Vegetation Index)

////////////////////////////////////////////////////

/*

Es un NDVI mejorado usado para corregir la influencia de la atmósfera.

Su uso suele enfocarse sobre regiones con alto contenido de aerosol

atmosférico (por ejemplo, lluvia, niebla, polvo, humo, contaminación del aire).*/

var ARVI = s2_clip.expression ('float ((NIR - (2 * RED) + BLUE) / (NIR + (2 * RED) + BLUE))',{

'NIR': s2_clip.select ('B8'),

'BLUE': s2_clip.select ('B2'),

'RED': s2_clip.select ('B4')});

///////////////////////////////////////

// NBRI (Normalized Burned Ratio Index)

///////////////////////////////////////

/*

Análisis de severidad de incendios

Útil para evaluar daños forestales o analizar la evolución de

la regeneración de la cubierta vegetal tras un incendio.*/

var NBRI = s2_clip.expression ('float (NIR - SWIR) / float (NIR + SWIR)', {

'NIR': s2_clip.select ('B8'),

'SWIR': s2_clip.select ('B12')});


// Visualización índices

var vis = {max: 0.8, min: -0.2,

palette:['FFFFFF','CE7E45','DF923D','F1B555','FCD163','99B718','74A901',

'66A000','529400','3E8601','207401','056201','004C00','023B01',

'012E01','011D01','011301']};

// Añadir índices de vegetación al mapa

Map.addLayer (NBRI, vis, 'NBRI');

Map.addLayer (GCI, vis, 'GCI');

Map.addLayer (NDWI, vis, 'NDWI');

Map.addLayer (GLI, vis, 'GLI');

Map.addLayer (SAVI, vis, 'SAVI');

Map.addLayer (SIPI, vis, 'SIPI');

Map.addLayer (EVI, vis, 'EVI');

Map.addLayer (ARVI, vis, 'ARVI');

Map.addLayer (GNDVI, vis, 'GNDVI');

// Exportar imagen a Drive

//Export.image.toDrive({

// image: EVI,

// description: 'EVI_Sentinel2_10m',

// scale: 10,

// region: geometry});
// Regresión Lineal con NDVI con Filtro País---a gee
// Regresión Lineal con NDVI con Filtro País

//Cargar polígono Bolivia

var Bolivia = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')

.filter(ee.Filter.eq('country_na', 'Bolivia'));

// Centrar el mapa en Bolivia

Map.centerObject(Bolivia);

// Función para añadir una banda de tiempo a la imagen

var addTime = function(image) {

return image.addBands(image.metadata('system:time_start')

.divide(1000*60*60*24*365));

};

// Serie temporal: system:time_start

// 1000 segundos en un año

////MYD13A1.006 Aqua Vegetation Indices 16-Day Global 500m

// Cargar datos NDVI y añadir la banda de tiempo

var dataset = ee.ImageCollection('MODIS/061/MYD13A1') //MODIS/006/MYD13A1

.filterDate('2010-01-01','2019-12-31') //10 años

.map(addTime)

.filterBounds(Bolivia);

// Calcular regresión lineal (primero variable x, luego y)

var reg = dataset.select(['system:time_start', 'NDVI'])

.reduce(ee.Reducer.linearFit());
// Añadir los resultados al mapa

Map.addLayer(reg.clip(Bolivia),

{min: 0, max: [-100, 100, 10000],

bands: ['scale','scale','offset']},

'Tendencia NDVI Bolivia');

// Scale es la pendiente

// offset intercepto

// Dar click en la imagen. saldrá en Inspector

// the ‘offset’ (intercept) and the ‘scale’

//('scale' in this context refers to the slope of the line and

//is not to be confused with the scale parameter input to many reducers,

//which is the spatial scale).


//Animación en GEE----a gee
// Frames y animaciones en Google Earth Engine

// http://www.gisandbeers.com/frames-animaciones-en-google-earth-engine/

var ColeccionLandsat= ee.ImageCollection ('LANDSAT/LC08/C01/T1_RT')

.filterBounds (geometry) //No olvides digitalizar la zona AOI en la que estás interesado

.filterDate ('2015-01-01', '2017-12-31') // Asigna una fecha para componer el timelapse

.filterMetadata ('CLOUD_COVER', 'Less_Than', 20) //Filtra las imágenes con exceso de nubes

.map(function (image){return image.clip(geometry);});

// Declaramos una nueva variable bajo la que realizar composiciones RGB o índices

var ComposicionRGB = {

bands: ['B5','B4','B3'], // Realiza tu composición de imágenes

crs: 'EPSG:4326', // Asigna un sistema mediante código EPSG

min: 0.0,

max: 30000.0, // Juega con los valores de píxel para su representación más clara

framesPerSecond: 1, // Añade los frames por segundo para acelerar la animación

dimensions: '600',}; // Parametriza una dimensión máxima de tamaño del gif

// Generamos el GIF animado del timelpase e imprimimos su URL para descarga

var AnimacionGIF = ColeccionLandsat.getVideoThumbURL (ComposicionRGB);

print (AnimacionGIF);

// Generamos la secuencia de frames que forman el timelpase e imprimimos su URL para


descarga

var FramesPelicula = ColeccionLandsat.getFilmstripThumbURL (ComposicionRGB);

print (FramesPelicula);
06 INTRODUCCION MACHINE LEARNING

// K-means con Lansat8

// Considera: Seleccionar Polígonos

//// 1) BUSCAR IMAGEN ////

var img = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')

.filterDate('2018-04-01', '2020-11-30') // Fechas: 2013-04-11 - actualidad

.filterBounds(geometry)

.filterMetadata('CLOUD_COVER', 'Less_Than', 4);

var l8_filtro = ee.Image(img.median());// Filtro de la mediana

var l8_clip = l8_filtro.clip(geometry);// Cortar imagen con el área de estudio

Map.addLayer(l8_clip, { // Añadir imagen al mapa

min: 0.0,

max: 0.5,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Img L8');

Map.centerObject(geometry);// Centrar el mapa en el área de estudio

// Crear datos de entrenamiento

var training = l8_clip.sample({

region: geometry,

scale: 20,

numPixels: 10000 // Puntos aleatorios (mientras más mejor)

});

// Aplicar algoritmo k-means y "entrenarlo"

var kmeans = ee.Clusterer.wekaKMeans(6).train(training);


// 6 grupos

// Agrupar los resultados del algoritmo

var resultado = l8_clip.cluster(kmeans);

// Añadir imagen clasificada al mapa con colores aleatorios

Map.addLayer(resultado.randomVisualizer(), {},

'Clasificación K-means');

// Exportar imagen clasificada a Drive

//Export.image.toDrive({

// image: resultado,

// description: 'kmeans_img',

// scale: 20,

// region: geometry

// });
//Kmeans con Sentinel 2
//Seleccionar polígonos

// Areas pequeñas Sentinel

// Crear mosaico de imágenes Sentinel 2

var img = ee.ImageCollection('COPERNICUS/S2')

.filterDate('2018-01-01', '2018-12-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))

.filterBounds(geometry)

.map(function(image){return image.clip(geometry)})

.median();

// Centrar el mapa en el área de estudio

Map.centerObject(geometry);

// Añadir imagen al mapa

Map.addLayer (img, {

max: 4000,

min: 0.0,

gamma: 1.0,

bands: ['B4','B3','B2']},

'Imagen Sentinel 2');

// Crear datos de entrenamiento

var training = img.sample({

region: geometry,

scale: 20,

numPixels: 10000 // Puntos aleatorios (mientras más mejor)

});

// Aplicar algoritmo k-means y "entrenarlo"


var kmeans = ee.Clusterer.wekaKMeans(6).train(training);

// 6 grupos

// Agrupar los resultados del algoritmo

var resultado = img.cluster(kmeans);

// Añadir imagen clasificada al mapa con colores aleatorios

Map.addLayer(resultado.randomVisualizer(), {},

'Clasificación K-means');

// Exportar imagen clasificada a Drive

//Export.image.toDrive({

// image: resultado,

// description: 'kmeans_img',

// scale: 20,

// region: geometry

// });

07-Otro

imagen ( Imagen ) :
La imagen a exportar.
taskName  (  Cadena  , opcional  )  :
Un nombre legible por humanos de la tarea. El valor predeterminado es
"myExportImageTask".
params  (  Objeto  , opcional  )  :
Parámetros de configuración de la tarea:
 crs (cadena) CRS a usar para la imagen exportada.
 crs_transform (Matriz de números|cadena) Transformación afín a usar para
la imagen exportada. Requiere que se defina "crs".
 dimensiones (cadena) Dimensiones que se utilizarán para la imagen
exportada. Toma un solo entero positivo como la dimensión máxima o
"ANCHOxALTO" donde ANCHO y ALTO son enteros positivos.
 escala (número) Resolución en metros por píxel. El valor predeterminado es
1000.
 región (coordenadas de LinearRing/Polygon|cadena) Coordenadas de un
GeoJSON LinearRing o Polygon que especifica una región para
descargar. Estos pueden especificarse como coordenadas reales o
serializarse como una cadena.
 maxPixels (número) Restringe el número de píxeles en la imagen
exportada. De forma predeterminada, verá un error si su exportación supera
los 1e8 píxeles. Al establecer este valor explícitamente, puede aumentar o
disminuir este límite.
 driveFolder (string) The Google Drive folder that the export will reside in.
 driveFileNamePrefix (string) The Google Drive filename for the export.
Defaults to the taskName.

También podría gustarte