-
Notifications
You must be signed in to change notification settings - Fork 0
/
gee_min_NDVI
156 lines (128 loc) · 4.03 KB
/
gee_min_NDVI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// modis sensor
// sould be define the geometry by the user
// script to get
// mean mounthly NDVI
// GENERAL CONFIGURATION
// select the area of interest
var area = 'geometry'
// specify the start and end date
var startDate = ee.Date('2008-01-01');
var endDate = ee.Date('2010-01-01');
print("Start Date: ", startDate);
print("End Date: ", endDate);
// define the numbers of months between start and end date
var diff = endDate.difference(startDate, 'month');
// external
var batch = require('users/fitoprincipe/geetools:batch')
var palettesGeneral = require('users/gena/packages:palettes');
// center map
Map.centerObject(geometry, 5)
// add Geometry to map
Map.addLayer(geometry, {}, 'Geometry')
// NDVI
// collection of images
var dataset = ee.ImageCollection('MODIS/006/MOD13Q1')
.filter(ee.Filter.date(startDate, endDate));
// Scaled range up to 1
var modisNDVI = dataset.select('NDVI');
var scaledNDVI = modisNDVI.map(function(image){
return image.multiply(0.0001)
.copyProperties(image,['system:time_start','system:time_end']);
});
var triplets = scaledNDVI.map(function(image) {
var withStats = image.reduceRegions({
collection: geometry,
reducer: ee.Reducer.mean().setOutputs(['ndvi']),
scale: 250
}).map(function(feature) {
return feature.set('imageId', image.id())
})
return withStats
}).flatten()
// NDVI visualization
var palette = palettesGeneral.colorbrewer.RdYlGn[11];
var ndviVis = {
min: 0.0,
max: 1.0,
palette: palette,
};
// define min monthly NDVI
var monthMin = ee.List.sequence(0, diff).map(function(n) {
var start = ee.Date(startDate).advance(n, 'month');
var end = start.advance(1, 'month');
return ee.ImageCollection(scaledNDVI)
.filterDate(start, end)
.min()
.set('system:time_start', start.millis());
});
// create image collection from monthly avg
var collection = ee.ImageCollection(monthMin);
// clip images to the polygon boundary
var clippedNdvi = collection.filter(ee.Filter.date(startDate, endDate))
.map(function(image) {
return ee.Image(image).clip(geometry)
})
// Plotting chart of monthly Rainfall
var title = 'Minimum Monthly NDVI of Geometry';
var timeSeries = ui.Chart.image.seriesByRegion({
imageCollection: clippedNdvi,
regions: geometry,
reducer: ee.Reducer.mean(),
scale: 250,
xProperty: 'system:time_start',
seriesProperty: 'label'
}).setChartType('ScatterChart')
.setOptions({
title: title,
vAxis: {title: '[NDVI]'},
hAxis: {title: 'Year'},
lineWidth: 1,
pointSize: 1,
});
print(timeSeries);
// Download images for a set region
batch.Download.ImageCollection.toDrive(clippedNdvi, 'NDVI',
{region: clippedNdvi,
crs: 'EPSG:4326',
type: 'float',
description: 'imageToDriveExample',
scale: 250,
fileFormat: 'GeoTIFF',
});
// add the first NDVI image to map
Map.addLayer(clippedNdvi, ndviVis, 'NDVI');
// Add bar Legend
function createColorBar(titleText, palette, min, max) {
// Legend Title
var title = ui.Label({
value: titleText,
style: {fontWeight: 'bold', textAlign: 'center', stretch: 'horizontal'}});
// Colorbar
var legend = ui.Thumbnail({
image: ee.Image.pixelLonLat().select(0),
params: {
bbox: [0, 0, 1, 0.1],
dimensions: '200x20',
format: 'png',
min: 0, max: 1,
palette: palette},
style: {stretch: 'horizontal', margin: '8px 8px', maxHeight: '40px'},
});
// Legend Labels
var labels = ui.Panel({
widgets: [
ui.Label(min, {margin: '4px 10px',textAlign: 'left', stretch: 'horizontal'}),
ui.Label((min+max)/2, {margin: '4px 20px', textAlign: 'center', stretch: 'horizontal'}),
ui.Label(max, {margin: '4px 10px',textAlign: 'right', stretch: 'horizontal'})],
layout: ui.Panel.Layout.flow('horizontal')});
// Create a panel with all 3 widgets
var legendPanel = ui.Panel({
widgets: [title, legend, labels],
style: {position: 'bottom-center', padding: '8px 15px'}
})
return legendPanel
}
// Call the function to create a colorbar legend
var colorBar = createColorBar('NDVI - First Image ', palette, 0, 1)
Map.add(colorBar)
/// William Vichete