File size: 6,000 Bytes
64ab846
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
function setup() {
        return {
            input: [{
                bands: [
                        "B02", // Blue
                        "B03", // Green
                        "B04", // Red
                        "B05", // Vegetation red edge, 704.1 nm (S2A), 703.8 nm (S2B)
                        "B06", // Vegetation red edge, 740.5 nm (S2A), 739.1 nm (S2B)
                        "B08", // Nir-Infrared
                        "B11", // SWIR (20m res)
                        "SCL"   // instead of CLM. it is the scene classification
                        //"dataMask"
                        ],
                units: 'DN' // "reflectance"
                //For Sentinel-2, digital numbers are divided by 10,000 to get reflectance. If you want to calculate
                //normalized difference indices for optical bands scaling is relevant. In such cases,
                //it makes sense to use digital numbers (DN) as units. Doing so will be very slightly faster since reflectance
                //conversion will be avoided.
            }],
            output: [
            {
                id: "vi_values",
                bands: 25,
                sampleType: SampleType.FLOAT32
              } ]
        };
    }

// final shape as RGB-NIR
function evaluatePixel(sample) {
        let cloud_mask = ([8, 9, 10].includes(sample.SCL)) ? 1 : 0; // this classes correspond to clouds
        let ndvi = (sample.B08 - sample.B04)/(sample.B08 + sample.B04);
        let grvi = (sample.B08) / (sample.B03);
        let rvi = (sample.B08) / (sample.B04);
        let rgi = (sample.B04) / (sample.B03);
        let aci = (sample.B03) / (sample.B08);
        let maci = (sample.B08) / (sample.B03);
        let gndvi = (sample.B08 - sample.B03) / (sample.B08 + sample.B03);
        let ngrdi = (sample.B03 - sample.B04) / (sample.B03 + sample.B04); // also know as mngrdi
        let ngbdi = (sample.B03 - sample.B02) / (sample.B03 + sample.B02);
        // let rgbvi = () / () rgbvi = (np.square(self.green.astype(float)) - (self.red.astype(float) * self.blue.astype(float))) / (np.square(self.green.astype(float)) + (self.red.astype(float) * self.blue.astype(float)))
        let bgvi = (sample.B02) / (sample.B03);
        let brvi = (sample.B02) / (sample.B04);
        // exg = (2 * self.green.astype(float)) - self.red.astype(float) - self.blue.astype(float)
        let wi = (sample.B03 - sample.B02) / (sample.B04 - sample.B03);
        let varig = (sample.B03 - sample.B04) / (sample.B03 + sample.B04 - sample.B02 );
        let gli = (sample.B03 + sample.B03 - sample.B04 - sample.B02) / (sample.B03 + sample.B03 + sample.B04 - sample.B02);
        //tgi = (self.green.astype(float) - 0.39 * self.red.astype(float) - 0.61 * self.blue.astype(float))
        //twoGRGi = (self.green.astype(float) + self.green.astype(float) - self.red.astype(float) - self.blue.astype(float))
        let g_perc  = (sample.B03) /  (sample.B03 + sample.B04 + sample.B02);
        //let cloud_mask = sample.CLM;
        // let data_mask = sample.dataMask; no apparent benefit
        let ndmi = (sample.B08 - sample.B11) / (sample.B08 + sample.B11);//Sentinel-2 NDMI = (B08 - B11) / (B08 + B11) - https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/ndmi/
        let ndwi =  (sample.B03 - sample.B08) / (sample.B03 + sample.B08); //Sentinel-2 NDWI = (B03 - B08) / (B03 + B08) - https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/ndwi/
                                                                         // // same as ndwi (normalized difference moisture index and normalized difference water index)

        // https://eos.com/blog/vegetation-indices/
        let reci = (sample.B08 / sample.B04) - 1;//  (NIR / RED) – 1
        let ndre_lower_end = (sample.B08 - sample.B05) / (sample.B08 + sample.B05); //  (NIR – RED EDGE) / (NIR + RED EDGE)
        let ndre_upper_end = (sample.B08 - sample.B06) / (sample.B08 + sample.B06);
        let msavi = (2 * sample.B04 + 1 - Math.sqrt((2 * sample.B04 + 1) ** 2 - 8 * (sample.B04 - sample.B03))) / 2; //  (2 * Band 4 + 1 – sqrt ((2 * Band 4 + 1)2 – 8 * (Band 4 – Band 3))) / 2
        // let savi = ((NIR – red) / (NIR + red + L)) * (1 + L)
        // NOT WORKING WITH 0.16 SUMMED TO INT let osavi = (sample.B08 - sample.B04)/(sample.B08 + sample.B04 + 0.16)  (NIR – red) / (NIR + red + 0.16) 0.16 is default soil-adjustment factor (default is 0.5)
        let arvi = (sample.B08 - (2 * sample.B04) + sample.B02) / (sample.B08 + (2 * sample.B04) + sample.B02); // (NIR – (2 * RED) + BLUE) / (NIR + (2 * RED) + BLUE)
        // NOT WORKING WITH 1 SUMMED TO INT let evi = // 2.5 * ((NIR – RED) / ((NIR) + (C1 * RED) – (C2 * BLUE) + L)) with C1=6, C2=7.5, and L=1
        // LAI
        let sipi = (sample.B08 - sample.B02) / (sample.B08 + sample.B02); //  (NIR – BLUE) / (NIR – RED)
        let gci = (sample.B08 / sample.B02) -1; // NIR / GREEN – 1





        return {
                vi_values: [cloud_mask,
                            ndvi,
                            grvi,
                            rvi,
                            rgi,
                            aci,
                            maci,
                            gndvi,
                            ngrdi,
                            ngbdi,
                            bgvi,
                            brvi,
                            wi,
                            varig,
                            gli,
                            g_perc,
                            ndmi,
                            ndwi,
                            reci,
                            ndre_lower_end,
                            ndre_upper_end,
                            msavi,
                            arvi,
                            sipi,
                            gci
                        ]
        }
}