-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathHOTMAP_test
161 lines (120 loc) · 4.62 KB
/
HOTMAP_test
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
157
158
159
160
161
// Test mapping function
//
// area
// fileID, satID, timestamp
// The Hawaiian Islands
var geom = ee.Geometry.LinearRing([-159.41162109375,23.008964269673108,-160.99365234375,21.739091217718574, -155.687255859375,18.093644270502615,-153.907470703125,19.694314241825747,-159.41162109375,23.008964269673108]);
var geom = ee.Geometry.Point(-82.576, 35.5669)
// Landsat 8 collection
var ic = ee.ImageCollection('LANDSAT/LC8_L1T_TOA')
.filterBounds(geom)
.filterDate('2016-11-12','2016-11-20')
.select(['B2','B3','B4','B5','B6','B7'],['blue','green','red','nir','swir1','swir2']);
// HOTMAP detection (returns hot pixel clusters, i.e. a feature collection per image)
function HOTMAP(img) {
// wavebands
var n = img.select('nir')
var s1 = img.select('swir1')
var s2 = img.select('swir2')
// alpha detection
var a1 = s2.divide(s1).gt(1.4)
var a2 = s2.divide(n).gt(1.4)
var a3 = s2.gt(0.15)
var alpha = a1.and(a2).and(a3).rename('alpha')
// beta detection
var b1 = s1.divide(n).gt(2)
var b2 = s1.gt(0.5)
var beta = b1.and(b2).rename('beta')
// potential hot pixels
var potentialHot = alpha.or(beta)
var hotPixels = potentialHot.updateMask(potentialHot)
// hot pixel clusters (count alpha pixels)
var hotClusters = hotPixels.addBands(alpha).reduceToVectors({
eightConnected:true,
maxPixels:2e8,//might seem like a lot but MOST pixels are masked
reducer:ee.Reducer.count()
})
// hot pixel clusters must contain alpha pixels
var validHotClusters = hotClusters.filter(ee.Filter.gt('count', 0));
// Image properties
var fileID = img.get('system:index')
var satID = ee.String(fileID).slice(0,3)
var timestamp = img.get('system:time_start')
// Assign properties
var clusters = validHotClusters.map(function(feature) {
var clusterGeom = feature.geometry()
var clusterArea = feature.geometry().area(1) // i.e. to within 1 m2
var cluster = ee.Feature(clusterGeom,{
fileID:fileID,
satID:satID,
timestamp:timestamp,
area:clusterArea
})
return cluster
})
return clusters
}
// debugging
// SINGLE IMAGE
var img = ee.Image(ic.first())
Map.addLayer(img.select(['swir2','swir1','nir']),{min:0,max:0.4},'infrared')
Map.addLayer(img.select(['red','green','blue']),{min:0,max:0.4},'rgb')
Map.centerObject(img)
var hot = HOTMAP(img)
var f = ee.Feature(hot.first())
print(ee.Geometry.Polygon(ee.List(f.geometry().coordinates().get(0))).centroid())
Export.table.toDrive({'collection':hot,'fileFormat':'kml'})
Map.addLayer(hot,{color:'FF0000'},'hot_vectors')
//var fires = ic.map(HOTMAP)
//print(fires)
//print(fires.flatten())
//Map.addLayer(fires)
//Map.centerObject(img)
print(ic)
function addWindLayer(s, e) {
if(!s){
s = '2016-11-12';
}
if (!e) {
e = '2016-11-20';
}
var ic = ee.ImageCollection('NASA/NLDAS/FORA0125_H002')
//.filterDate('2017-03-01', '2017-03-27');
.select(['wind_u', 'wind_v'])
.filterDate('2016-11-12','2016-11-20');
var wind = ee.Image(ic.first())
return wind
}
var wind = addWindLayer()
var layer = Map.addLayer(wind, {min:0,max:10, /*palette: ['FF0000', '0000FF']*/}, 'wind', true, 0.40);
// get wind vectors
var get_wind_vectors = function(feature) {
var scale = ee.Number(Map.getScale()).multiply(1e-4)
var point0 = ee.Geometry.Polygon(ee.List(feature.geometry().coordinates().get(0))).centroid();
var wind_vector = wind.reduceRegion(ee.Reducer.mean(),point0)
var wind_u = ee.Number(wind_vector.get('wind_v'))
var wind_v = ee.Number(wind_vector.get('wind_u'))
var du = wind_u.multiply(scale).add(point0.coordinates().get(0))
var dv = wind_v.multiply(scale).add(point0.coordinates().get(1))
var point1 = ee.Geometry.Point(du,dv)
var wind_line = ee.Geometry.LineString([point0,point1])
return ee.Feature(wind_line,{'wind_u':wind_u,'wind_v':wind_v})
}
function get_wind_points(feature) {
var scale = ee.Number(Map.getScale()).multiply(1e-4)
var point0 = ee.Geometry.Polygon(ee.List(feature.geometry().coordinates().get(0))).centroid()
var wind_vector = wind.reduceRegion(ee.Reducer.mean(),point0)
var wind_u = ee.Number(wind_vector.get('wind_v'))
var wind_v = ee.Number(wind_vector.get('wind_u'))
var du = wind_u.multiply(scale).add(point0.coordinates().get(0))
var dv = wind_v.multiply(scale).add(point0.coordinates().get(1))
var point1 = ee.Geometry.Point(du,dv)
var wind_line = ee.Geometry.LineString([point0,point1])
return ee.Feature(point1,{'wind_u':wind_u,'wind_v':wind_v})
}
var wind_vectors = hot.map(get_wind_vectors);
Map.addLayer(wind_vectors)
print(wind_vectors)
var wind_points = hot.map(get_wind_points)
Map.addLayer(wind_points, {color: 'blue'});
print(wind_points)