|
| 1 | +evalscript_baresoil = """ |
| 2 | +//VERSION=3 |
| 3 | +
|
| 4 | +//Author: Domagoj Korais |
| 5 | +
|
| 6 | +function setup() { |
| 7 | + return { |
| 8 | + input: [{ |
| 9 | + bands: ["B02", "B03", "B04", "B05", "B07", "B08", "B11"], |
| 10 | + units: "reflectance" |
| 11 | + }], |
| 12 | + output: { |
| 13 | + id:"baresoil", |
| 14 | + bands: 1, |
| 15 | + sampleType: "AUTO" |
| 16 | + } |
| 17 | + } |
| 18 | +} |
| 19 | +
|
| 20 | +function evaluatePixel(sample) { |
| 21 | + var num_NBSI = ((sample.B11 + sample.B04)-(sample.B08 + sample.B02)); |
| 22 | + var den_NBSI = ((sample.B11 + sample.B04)+(sample.B08 + sample.B02)); |
| 23 | +
|
| 24 | + var NBSI = num_NBSI/den_NBSI; |
| 25 | + var NDVI = index(sample.B08, sample.B04); |
| 26 | + var NDVI_RE3 = index(sample.B08, sample.B07); |
| 27 | + var CL_RE = sample.B07 / sample.B05 - 1; |
| 28 | +
|
| 29 | + var is_bare_soil = NDVI <= -0.1 ? false : predict(NBSI, NDVI, NDVI_RE3, CL_RE) > 0.5; |
| 30 | + return [is_bare_soil] |
| 31 | +} |
| 32 | +
|
| 33 | +
|
| 34 | +var DecisionTreeClassifier = function() { |
| 35 | +
|
| 36 | + var findMax = function(nums) { |
| 37 | + var index = 0; |
| 38 | + for (var i = 0; i < nums.length; i++) { |
| 39 | + index = nums[i] > nums[index] ? i : index; |
| 40 | + } |
| 41 | + return index; |
| 42 | + }; |
| 43 | +
|
| 44 | + this.predict = function(features) { |
| 45 | + var classes = new Array(2); |
| 46 | +
|
| 47 | + if (features[1] <= 0.2880808413028717) { |
| 48 | + if (features[2] <= -0.001884871511720121) { |
| 49 | + if (features[2] <= -0.01514277933165431) { |
| 50 | + if (features[0] <= -0.05856157839298248) { |
| 51 | + if (features[3] <= 0.4919503927230835) { |
| 52 | + if (features[1] <= 0.22891760617494583) { |
| 53 | + classes[0] = 109; |
| 54 | + classes[1] = 75; |
| 55 | + } else { |
| 56 | + classes[0] = 77; |
| 57 | + classes[1] = 5; |
| 58 | + } |
| 59 | + } else { |
| 60 | + if (features[3] <= 0.6081486344337463) { |
| 61 | + classes[0] = 47; |
| 62 | + classes[1] = 128; |
| 63 | + } else { |
| 64 | + classes[0] = 22; |
| 65 | + classes[1] = 311; |
| 66 | + } |
| 67 | + } |
| 68 | + } else { |
| 69 | + if (features[1] <= 0.23794686794281006) { |
| 70 | + if (features[3] <= 0.24695706367492676) { |
| 71 | + classes[0] = 51; |
| 72 | + classes[1] = 132; |
| 73 | + } else { |
| 74 | + classes[0] = 352; |
| 75 | + classes[1] = 3683; |
| 76 | + } |
| 77 | + } else { |
| 78 | + if (features[3] <= 0.4766134023666382) { |
| 79 | + classes[0] = 91; |
| 80 | + classes[1] = 57; |
| 81 | + } else { |
| 82 | + classes[0] = 209; |
| 83 | + classes[1] = 1278; |
| 84 | + } |
| 85 | + } |
| 86 | + } |
| 87 | + } else { |
| 88 | + if (features[0] <= -0.01485772943124175) { |
| 89 | + if (features[3] <= 0.46598660945892334) { |
| 90 | + if (features[1] <= 0.23513969033956528) { |
| 91 | + classes[0] = 80; |
| 92 | + classes[1] = 30; |
| 93 | + } else { |
| 94 | + classes[0] = 83; |
| 95 | + classes[1] = 4; |
| 96 | + } |
| 97 | + } else { |
| 98 | + classes[0] = 38; |
| 99 | + classes[1] = 42; |
| 100 | + } |
| 101 | + } else { |
| 102 | + if (features[1] <= 0.24381835758686066) { |
| 103 | + if (features[0] <= 0.017081347294151783) { |
| 104 | + classes[0] = 37; |
| 105 | + classes[1] = 60; |
| 106 | + } else { |
| 107 | + classes[0] = 72; |
| 108 | + classes[1] = 437; |
| 109 | + } |
| 110 | + } else { |
| 111 | + if (features[3] <= 0.4962599277496338) { |
| 112 | + classes[0] = 84; |
| 113 | + classes[1] = 43; |
| 114 | + } else { |
| 115 | + classes[0] = 23; |
| 116 | + classes[1] = 66; |
| 117 | + } |
| 118 | + } |
| 119 | + } |
| 120 | + } |
| 121 | + } else { |
| 122 | + if (features[2] <= 0.012518306728452444) { |
| 123 | + if (features[0] <= 0.011857263278216124) { |
| 124 | + if (features[3] <= 0.44026511907577515) { |
| 125 | + if (features[0] <= -0.025940910913050175) { |
| 126 | + classes[0] = 155; |
| 127 | + classes[1] = 2; |
| 128 | + } else { |
| 129 | + classes[0] = 122; |
| 130 | + classes[1] = 13; |
| 131 | + } |
| 132 | + } else { |
| 133 | + classes[0] = 58; |
| 134 | + classes[1] = 38; |
| 135 | + } |
| 136 | + } else { |
| 137 | + if (features[1] <= 0.21599827706813812) { |
| 138 | + classes[0] = 44; |
| 139 | + classes[1] = 86; |
| 140 | + } else { |
| 141 | + if (features[3] <= 0.4378824234008789) { |
| 142 | + classes[0] = 145; |
| 143 | + classes[1] = 37; |
| 144 | + } else { |
| 145 | + classes[0] = 57; |
| 146 | + classes[1] = 55; |
| 147 | + } |
| 148 | + } |
| 149 | + } |
| 150 | + } else { |
| 151 | + if (features[3] <= 0.4603644013404846) { |
| 152 | + if (features[1] <= 0.21943768113851547) { |
| 153 | + if (features[0] <= 0.021366839297115803) { |
| 154 | + classes[0] = 131; |
| 155 | + classes[1] = 4; |
| 156 | + } else { |
| 157 | + classes[0] = 58; |
| 158 | + classes[1] = 25; |
| 159 | + } |
| 160 | + } else { |
| 161 | + if (features[3] <= 0.42150408029556274) { |
| 162 | + classes[0] = 982; |
| 163 | + classes[1] = 19; |
| 164 | + } else { |
| 165 | + classes[0] = 237; |
| 166 | + classes[1] = 14; |
| 167 | + } |
| 168 | + } |
| 169 | + } else { |
| 170 | + classes[0] = 84; |
| 171 | + classes[1] = 26; |
| 172 | + } |
| 173 | + } |
| 174 | + } |
| 175 | + } else { |
| 176 | + if (features[2] <= -0.047297170385718346) { |
| 177 | + if (features[1] <= 0.40251147747039795) { |
| 178 | + if (features[3] <= 0.6912856698036194) { |
| 179 | + classes[0] = 114; |
| 180 | + classes[1] = 25; |
| 181 | + } else { |
| 182 | + if (features[1] <= 0.3502514660358429) { |
| 183 | + if (features[3] <= 0.7766227126121521) { |
| 184 | + classes[0] = 29; |
| 185 | + classes[1] = 74; |
| 186 | + } else { |
| 187 | + classes[0] = 64; |
| 188 | + classes[1] = 516; |
| 189 | + } |
| 190 | + } else { |
| 191 | + if (features[0] <= -0.027021611109375954) { |
| 192 | + classes[0] = 84; |
| 193 | + classes[1] = 236; |
| 194 | + } else { |
| 195 | + classes[0] = 72; |
| 196 | + classes[1] = 30; |
| 197 | + } |
| 198 | + } |
| 199 | + } |
| 200 | + } else { |
| 201 | + if (features[1] <= 0.4671569764614105) { |
| 202 | + if (features[0] <= -0.05327927693724632) { |
| 203 | + if (features[2] <= -0.0706191249191761) { |
| 204 | + classes[0] = 43; |
| 205 | + classes[1] = 41; |
| 206 | + } else { |
| 207 | + classes[0] = 99; |
| 208 | + classes[1] = 40; |
| 209 | + } |
| 210 | + } else { |
| 211 | + if (features[1] <= 0.4272315502166748) { |
| 212 | + classes[0] = 67; |
| 213 | + classes[1] = 18; |
| 214 | + } else { |
| 215 | + classes[0] = 121; |
| 216 | + classes[1] = 9; |
| 217 | + } |
| 218 | + } |
| 219 | + } else { |
| 220 | + if (features[3] <= 1.3283718824386597) { |
| 221 | + classes[0] = 137; |
| 222 | + classes[1] = 16; |
| 223 | + } else { |
| 224 | + if (features[2] <= -0.08075670152902603) { |
| 225 | + classes[0] = 75; |
| 226 | + classes[1] = 5; |
| 227 | + } else { |
| 228 | + classes[0] = 453; |
| 229 | + classes[1] = 4; |
| 230 | + } |
| 231 | + } |
| 232 | + } |
| 233 | + } |
| 234 | + } else { |
| 235 | + if (features[1] <= 0.3474765121936798) { |
| 236 | + if (features[3] <= 0.5934110283851624) { |
| 237 | + if (features[2] <= 0.003244615043513477) { |
| 238 | + if (features[0] <= -0.03575599752366543) { |
| 239 | + classes[0] = 330; |
| 240 | + classes[1] = 39; |
| 241 | + } else { |
| 242 | + classes[0] = 360; |
| 243 | + classes[1] = 138; |
| 244 | + } |
| 245 | + } else { |
| 246 | + if (features[2] <= 0.01407763920724392) { |
| 247 | + classes[0] = 607; |
| 248 | + classes[1] = 57; |
| 249 | + } else { |
| 250 | + classes[0] = 2837; |
| 251 | + classes[1] = 48; |
| 252 | + } |
| 253 | + } |
| 254 | + } else { |
| 255 | + if (features[2] <= -0.021189325489103794) { |
| 256 | + if (features[0] <= 0.008428129367530346) { |
| 257 | + classes[0] = 113; |
| 258 | + classes[1] = 342; |
| 259 | + } else { |
| 260 | + classes[0] = 82; |
| 261 | + classes[1] = 90; |
| 262 | + } |
| 263 | + } else { |
| 264 | + if (features[2] <= 0.010304238181561232) { |
| 265 | + classes[0] = 290; |
| 266 | + classes[1] = 266; |
| 267 | + } else { |
| 268 | + classes[0] = 142; |
| 269 | + classes[1] = 28; |
| 270 | + } |
| 271 | + } |
| 272 | + } |
| 273 | + } else { |
| 274 | + if (features[2] <= 0.00489223818294704) { |
| 275 | + if (features[1] <= 0.4410252124071121) { |
| 276 | + if (features[0] <= -0.034201690927147865) { |
| 277 | + classes[0] = 1971; |
| 278 | + classes[1] = 653; |
| 279 | + } else { |
| 280 | + classes[0] = 2273; |
| 281 | + classes[1] = 234; |
| 282 | + } |
| 283 | + } else { |
| 284 | + if (features[3] <= 1.035286784172058) { |
| 285 | + classes[0] = 1973; |
| 286 | + classes[1] = 195; |
| 287 | + } else { |
| 288 | + classes[0] = 9665; |
| 289 | + classes[1] = 144; |
| 290 | + } |
| 291 | + } |
| 292 | + } else { |
| 293 | + if (features[2] <= 0.016115683130919933) { |
| 294 | + if (features[1] <= 0.4877214878797531) { |
| 295 | + classes[0] = 2990; |
| 296 | + classes[1] = 137; |
| 297 | + } else { |
| 298 | + classes[0] = 1448; |
| 299 | + classes[1] = 18; |
| 300 | + } |
| 301 | + } else { |
| 302 | + if (features[0] <= -0.04386013746261597) { |
| 303 | + classes[0] = 7991; |
| 304 | + classes[1] = 130; |
| 305 | + } else { |
| 306 | + classes[0] = 7008; |
| 307 | + classes[1] = 44; |
| 308 | + } |
| 309 | + } |
| 310 | + } |
| 311 | + } |
| 312 | + } |
| 313 | + } |
| 314 | +
|
| 315 | + return findMax(classes); |
| 316 | + }; |
| 317 | +
|
| 318 | +}; |
| 319 | +
|
| 320 | +function predict(NBSI, NDVI, NDVI_RE3, CL_RE){ |
| 321 | + var clf = new DecisionTreeClassifier(); |
| 322 | + return [1/(1+Math.exp(-1*clf.predict([NBSI, NDVI, NDVI_RE3, CL_RE])))]; |
| 323 | +} |
| 324 | +""" |
| 325 | + |
| 326 | +evalscript_ndvi = """ |
| 327 | +//VERSION=3 |
| 328 | +function setup() { |
| 329 | + return { |
| 330 | + input: [ |
| 331 | + { |
| 332 | + bands: ["B04", "B08", "dataMask"], |
| 333 | + } |
| 334 | + ], |
| 335 | + output: [ |
| 336 | + { |
| 337 | + id: "bands", |
| 338 | + bands: ["NDVI"], |
| 339 | + sampleType: SampleType.FLOAT32 |
| 340 | + }, |
| 341 | + { |
| 342 | + id: "dataMask", |
| 343 | + bands: 1 |
| 344 | + } |
| 345 | + ] }; |
| 346 | +} |
| 347 | +
|
| 348 | +function evaluatePixel(samples) { |
| 349 | + return { |
| 350 | + bands: [index(samples.B08, samples.B04)], |
| 351 | + dataMask: [samples.dataMask] |
| 352 | + }; |
| 353 | +} |
| 354 | +""" |
0 commit comments