-
Notifications
You must be signed in to change notification settings - Fork 0
/
5.1.2_distance_to_water.py
93 lines (74 loc) · 3.24 KB
/
5.1.2_distance_to_water.py
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
var gsw = ee.ImageCollection('JRC/GSW1_0/MonthlyHistory').filterDate('2014-01-01', '2015-12-31');
var gsw_season = ee.ImageCollection('JRC/GSW1_0/MonthlyRecurrence');
var africa = ee.FeatureCollection('users/tim479874/africa_1500_iwbuffer')
var seg = ee.FeatureCollection('users/tim479874/segments_GEE')
var empty = ee.Image().select();
var gsw_old = ee.ImageCollection('JRC/GSW1_0/MonthlyHistory').filterDate('2013-01-01', '2013-06-30');
//collapse the imagecollection of monthly occurene to a binary multiband image
//1 = occurence rate > 50%
//0 = occurence rate < 50%
var mb_gsw_season = gsw_season.iterate(function(image, result){
var name = ee.Number(image.get('system:index'))
image = image.select('monthly_recurrence').rename(ee.String(name))
image = image.gt(50).clip(africa)
return ee.Image(result).addBands(ee.Image(image))
}, empty)
//select the corresponding occurence bands and fill no data areas.
//afterDWrds, compute the distance maps and return them as an image collection
var empty = ee.ImageCollection(gsw_old);
var filled_gsw = gsw.iterate(function(image, result){
//save image for system:time_start extraction
var input = image //0 = no_data, 1 = no_DWter, 2 = DWter
//get month and the respective seasonal occurence
var month = ee.Number(ee.Image(image).date().get('month')).subtract(1)
var fill = ee.Image(mb_gsw_season).select(month).multiply(2) //0 = no_occurence, 2 = occurence
var filled_image = image.eq(0).multiply(fill) //0 = no_occurence, 2 = occurence
//add the new layer to the image where
image = image.add(filled_image)
image = image.clip(africa)
var cost = ee.Image(gsw.first()).gte(-1)
var source = image.gte(2)
var dist = cost.cumulativeCost(source, 1000000)
dist = ee.Image(dist).set('system:time_start', ee.Image(input).get('system:time_start'))
//return dist
return ee.ImageCollection(result).merge(ee.ImageCollection(dist))
}, empty)
//remove dummy
filled_gsw = ee.ImageCollection(filled_gsw).filterDate('2014-01-01', '2015-12-31')
var dummy = seg.filter(ee.Filter.lt('time', 0))
var dummy_ext = ee.Image(filled_gsw.first()).reduceRegions({
collection: dummy,
reducer: ee.Reducer.mean(),
tileScale: 16,
scale: 1000
})
var DW = filled_gsw.iterate(function(image, result){
var date = image.date().getRange('month')
var start = date.start().millis().divide(1000000000000)
var end = date.end().millis().divide(1000000000000)
var features = seg.filter(ee.Filter.rangeContains('time', start, end))
var out = image.reduceRegions({
collection: features,
reducer: ee.Reducer.mean(),
scale: 1000,
tileScale: 16
})
return ee.FeatureCollection(result).merge(ee.FeatureCollection(out))
}, dummy_ext)
var start = ee.Date("2015-11-01").millis().divide(1000000000000)
var end = ee.Date("2015-12-31").millis().divide(1000000000000)
var seg_late = seg.filter(ee.Filter.rangeContains('time', start, end))
var last_gsw = ee.Image(filled_gsw.filterDate('2015-10-01', '2015-10-31').first())
var DW_add = last_gsw.reduceRegions({
collection: seg_late,
scale: 1000,
tileScale: 16,
reducer: ee.Reducer.mean()
})
DW = ee.FeatureCollection(DW).merge(ee.FeatureCollection(DW_add))
Export.table.toDrive({
collection: DW,
selectors: ['ID', 'mean'],
description: 'DW",
folder: 'GEC'
})