Next Article in Journal
Comparative Analysis of Producer Mobility Management Approaches in Named Data Networking
Next Article in Special Issue
Use of Land Gravity Data in Small Areas to Support Structural Geology, a Case Study in Eskişehir Basin, Turkey
Previous Article in Journal
Walking Speed in a Motorbike Lane Considering the Density of Evacuees and Motorbikes
Previous Article in Special Issue
Research on the Spatiotemporal Evolution of the Patterns of Expressed Inferiority in Different Groups of Occupations and Education Stages
 
 
Article
Peer-Review Record

Geospatial Evaluation of Cropping Pattern and Cropping Intensity Using Multi Temporal Harmonized Product of Sentinel-2 Dataset on Google Earth Engine

Appl. Sci. 2022, 12(24), 12583; https://doi.org/10.3390/app122412583
by Sonia 1, Tathagata Ghosh 1,*, Amel Gacem 2, Taghreed Alsufyani 3, M. Mujahid Alam 4, Krishna Kumar Yadav 5, Mohammed Amanullah 6 and Marina M. S. Cabral-Pinto 7,*
Reviewer 1:
Reviewer 2:
Appl. Sci. 2022, 12(24), 12583; https://doi.org/10.3390/app122412583
Submission received: 20 November 2022 / Revised: 3 December 2022 / Accepted: 5 December 2022 / Published: 8 December 2022
(This article belongs to the Special Issue Recent Advances in Geospatial Big Data Mining)

Round 1

Reviewer 1 Report

The paper deals with the depiction of cropping pattern and cropping intensity in an arid plain zone of India. Kharif and rabu crop distributions were mapped using Sentinel-2 dataset on Google Earth Engine (GEE) computing platform, while crop intensity map was performed on GIS environment. The analysis attempts were supported by ground truth verification and accuracy assessment.

The Manuscript is well structured and clearly presented. The methods used are suitable for the study aims. The authors could improve the description of the procedures used in the Materials and Methods section. I suggest giving some detail about GEE scripts used.

Furthermore, I only have some minor suggestions, which can help the authors to further improve the Manuscript quality:

Throughout the manuscript, replace:

- google earth engine with Google Earth Engine;

- random forest with Random Forest;

- Sentinel 2 or sentinel 2 with Sentinel-2;

Write the words kharif and rabi with their appropriate initial capital or small letter.

 

1.                  Row 92: replace Sentinel 1 and sentinel 2 with Sentinel-1 and Sentinel-2;

2.                  Row 100: is the sentence “With a root-mean-square error (RMSE) of 3.5 million hectare” a misprint?

3.                  Row 155: the section Algorithm execution is empty;

4.                  Row 165-166: why you chose, for the filtered dataset the combined constellation revised frequency instead of the frequency of each single Sentinel-2 satellite?

5.                  Row 173: replace khrif with kharif;

6.                  Figure 11: it could be unnecessary since Confusion matrix is well described in Table 2.

Author Response

Point 1: The authors could improve the description of the procedures used in the Materials and Methods section.

Response 1: Procedure used in Materials and method section is thoroughly revised. A detailed workflow diagram is also incorporated (Figure 2). A generalized algorithm of the Google Earth Engine coding is incorporated (Figure 3) 

 

Point 2: I suggest giving some detail about GEE scripts used.

Response 2:

The GEE script used is as follows:

//For Kharif crop:

function maskS2clouds(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}
var dt = table.filter(ee.Filter.eq('DISTNAME','CHURU'));

var coll1 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-04-01','2020-04-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-04-16','2020-04-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);    

var coll3 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-05-01','2020-05-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll4 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-05-16','2020-05-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll5 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-06-01','2020-06-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll6 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-06-16','2020-06-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll7 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-07-01','2020-07-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll8 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-07-16','2020-07-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll9 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-08-01','2020-08-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll10 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-08-16','2020-08-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll11 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-09-01','2020-09-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll12 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-09-16','2020-09-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);      

print(coll1);      

var addNDVI = function(img){

  var ndvi = img.normalizedDifference(['B8','B4']).rename('NDVI')

  return img.addBands(ndvi);

}

var withNDVI1 = coll1.map(addNDVI);

var withNDVI2 = coll2.map(addNDVI);

var withNDVI3 = coll3.map(addNDVI);

var withNDVI4 = coll4.map(addNDVI);

var withNDVI5 = coll5.map(addNDVI);

var withNDVI6 = coll6.map(addNDVI);

var withNDVI7 = coll7.map(addNDVI);

var withNDVI8 = coll8.map(addNDVI);

var withNDVI9 = coll9.map(addNDVI);

var withNDVI10 = coll10.map(addNDVI);

var withNDVI11 = coll11.map(addNDVI);

var withNDVI12 = coll12.map(addNDVI);

var greenest1 = withNDVI1.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest2 = withNDVI2.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest3 = withNDVI3.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest4 = withNDVI4.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest5 = withNDVI5.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest6 = withNDVI6.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest7 = withNDVI7.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest8 = withNDVI8.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest9 = withNDVI9.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest10 = withNDVI10.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest11 = withNDVI11.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest12 = withNDVI12.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var ndvi1 = greenest1.normalizedDifference(['B8','B4']).rename('NDVI1');

var ndvi2 = greenest2.normalizedDifference(['B8','B4']).rename('NDVI2');

var ndvi3 = greenest3.normalizedDifference(['B8','B4']).rename('NDVI3');

var ndvi4 = greenest4.normalizedDifference(['B8','B4']).rename('NDVI4');

var ndvi5 = greenest5.normalizedDifference(['B8','B4']).rename('NDVI5');

var ndvi6 = greenest6.normalizedDifference(['B8','B4']).rename('NDVI6');

var ndvi7 = greenest7.normalizedDifference(['B8','B4']).rename('NDVI7');

var ndvi8 = greenest8.normalizedDifference(['B8','B4']).rename('NDVI8');

var ndvi9 = greenest9.normalizedDifference(['B8','B4']).rename('NDVI9');

var ndvi10 = greenest10.normalizedDifference(['B8','B4']).rename('NDVI10');

var ndvi11 = greenest11.normalizedDifference(['B8','B4']).rename('NDVI11');

var ndvi12 = greenest12.normalizedDifference(['B8','B4']).rename('NDVI12');

var stacked_ndvi = ndvi1.addBands([ndvi2,ndvi3,ndvi4,ndvi5,ndvi6,ndvi7,ndvi8,ndvi9,ndvi10,ndvi11,ndvi12]);

var stacked_ndvi_scaled = stacked_ndvi.multiply(100).add(100).uint8();

Map.addLayer(stacked_ndvi_scaled,{bands:['NDVI9','NDVI5','NDVI7'],min:100, max:200},'Stacked_NDVI');

Map.addLayer(greenest9,{bands:['B8','B4','B3'],min:0,max:5000},'Sen_Feb1FN');

print(ndvi1)

var gt = Crop.merge(other);

var training_data = stacked_ndvi_scaled.sampleRegions({

  collection : gt,

  properties:['class'],

  scale:10,

});

var classifier = ee.Classifier.smileRandomForest(100)

                .train({

                  features:training_data,

                  classProperty: 'class',

                });

var classified = stacked_ndvi_scaled.classify(classifier, 'Classified');

var classified1 = classified.updateMask(classified.eq(1))

Map.addLayer(classified1,{palette:['white','yellow'],min:0,max:1},'Classified');

var areaImage = ee.Image.pixelArea().addBands(classified1);

var areas = areaImage.reduceRegion({

  reducer: ee.Reducer.sum().group({

    groupField: 1,

    groupName: 'class',

  }),

  geometry: dt,

  scale: 10,

  maxPixels: 1e13,

});

print('##### CLASS AREA SQ. METERS #####');

print(areas);

var trainAccuracy = classifier.confusionMatrix();

print('Resubstitution error matrix: ', trainAccuracy);

print('Training overall accuracy: ', trainAccuracy.accuracy());

Export.image.toDrive({

    image: classified1,

    description: 'Kharif_20221-22',

    scale: 30,

    folder:'2021-22',

    region: dt

  });

  Export.image.toDrive({

    image: ndvi1,

    description: 'Kharif_20221-22NDVI',

    scale: 30,

    folder:'2021-22',

    region: dt

  });

 

//For Rabi crop:

function maskS2clouds(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}

var dt = table.filter(ee.Filter.eq('DISTNAME','CHURU'));

var coll1 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-10-01','2020-10-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-10-16','2020-10-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);    

var coll3 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-11-01','2020-11-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll4 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-11-16','2020-11-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll5 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-12-01','2020-12-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll6 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-12-16','2020-12-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll7 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-01-01','2021-01-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll8 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-01-16','2021-01-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll9 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-02-01','2021-02-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll10 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-02-16','2021-02-28')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll11 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-03-01','2021-03-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll12 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-03-16','2021-03-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

   print(coll1);

var addNDVI = function(img){

  var ndvi = img.normalizedDifference(['B8','B4']).rename('NDVI')

  return img.addBands(ndvi);

}

var withNDVI1 = coll1.map(addNDVI);

var withNDVI2 = coll2.map(addNDVI);

var withNDVI3 = coll3.map(addNDVI);

var withNDVI4 = coll4.map(addNDVI);

var withNDVI5 = coll5.map(addNDVI);

var withNDVI6 = coll6.map(addNDVI);

var withNDVI7 = coll7.map(addNDVI);

var withNDVI8 = coll8.map(addNDVI);

var withNDVI9 = coll9.map(addNDVI);

var withNDVI10 = coll10.map(addNDVI);

var withNDVI11 = coll11.map(addNDVI);

var withNDVI12 = coll12.map(addNDVI);

var greenest1 = withNDVI1.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest2 = withNDVI2.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest3 = withNDVI3.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest4 = withNDVI4.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest5 = withNDVI5.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest6 = withNDVI6.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest7 = withNDVI7.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest8 = withNDVI8.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest9 = withNDVI9.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest10 = withNDVI10.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest11 = withNDVI11.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest12 = withNDVI12.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var ndvi1 = greenest1.normalizedDifference(['B8','B4']).rename('NDVI1');

var ndvi2 = greenest2.normalizedDifference(['B8','B4']).rename('NDVI2');

var ndvi3 = greenest3.normalizedDifference(['B8','B4']).rename('NDVI3');

var ndvi4 = greenest4.normalizedDifference(['B8','B4']).rename('NDVI4');

var ndvi5 = greenest5.normalizedDifference(['B8','B4']).rename('NDVI5');

var ndvi6 = greenest6.normalizedDifference(['B8','B4']).rename('NDVI6');

var ndvi7 = greenest7.normalizedDifference(['B8','B4']).rename('NDVI7');

var ndvi8 = greenest8.normalizedDifference(['B8','B4']).rename('NDVI8');

var ndvi9 = greenest9.normalizedDifference(['B8','B4']).rename('NDVI9');

var ndvi10 = greenest10.normalizedDifference(['B8','B4']).rename('NDVI10');

var ndvi11 = greenest11.normalizedDifference(['B8','B4']).rename('NDVI11');

var ndvi12 = greenest12.normalizedDifference(['B8','B4']).rename('NDVI12');

var stacked_ndvi = ndvi1.addBands([ndvi2,ndvi3,ndvi4,ndvi5,ndvi6,ndvi7,ndvi8,ndvi9,ndvi10,ndvi11,ndvi12]);

var stacked_ndvi_scaled = stacked_ndvi.multiply(100).add(100).uint8();

Map.addLayer(stacked_ndvi_scaled,{bands:['NDVI9','NDVI5','NDVI3'],min:100, max:200},'Stacked_NDVI');

Map.addLayer(greenest9,{bands:['B8','B4','B3'],min:0,max:5000},'Sen_Feb1FN');

print(ndvi1)

var gt = cropr_2021.merge(otherr_2021);

var training_data = stacked_ndvi_scaled.sampleRegions({

  collection : gt,

  properties:['class'],

  scale:10,

});

var classifier = ee.Classifier.smileRandomForest(100)

                .train({

                  features:training_data,

                  classProperty: 'class',

                });

var classified = stacked_ndvi_scaled.classify(classifier, 'Classified');

var classified1 = classified.updateMask(classified.eq(1))

Map.addLayer(classified1,{palette:['white','yellow'],min:0,max:1},'Classified');

var areaImage = ee.Image.pixelArea().addBands(classified1);

var areas = areaImage.reduceRegion({

  reducer: ee.Reducer.sum().group({

    groupField: 1,

    groupName: 'class',

  }),

  geometry: dt,

  scale: 10,

  maxPixels: 1e13,

  //tileScale: 8

});

print('##### CLASS AREA SQ. METERS #####');

print(areas);

var trainAccuracy = classifier.confusionMatrix();

print('Resubstitution error matrix: ', trainAccuracy);

print('Training overall accuracy: ', trainAccuracy.accuracy());

Export.image.toDrive({

    image: classified1,

    description: 'Rabi_2020-21',

    scale: 30,

    folder:'2020-21a',

    region: dt

  });

  Export.image.toDrive({

    image: ndvi1,

    description: 'Rabi_2020-21NDVI',

    scale: 30,

    folder:'2020-21a',

    region: dt

  });

A detailed GEE algorithm is incorporated in the text (Figure 3)

 

Point 3: Throughout the manuscript, replace:

- google earth engine with Google Earth Engine;

Response 3: Throughout the manuscript google earth engine is replaced with Google Earth Engine.

 

Point 4: - random forest with Random Forest;

Response 4: Throughout the manuscript random forest is replaced with Random Forest.

 

Point 5: Sentinel 2 or sentinel 2 with Sentinel-2;

Response 5: Throughout the manuscript Sentinel 2 or sentinel 2 is replaced with Sentinel-2

 

Point 6: Write the words kharif and rabi with their appropriate initial capital or small letter.

Response 6: Throughout the manuscript kharif and rabi is replaced with Kharif and Rabi.

 

Point 7: Row 92: replace Sentinel 1 and sentinel 2 with Sentinel-1 and Sentinel-2;

Response 7: Sentinel 1 and sentinel 2 replaced with Sentinel-1 and Sentinel-2;

 

Point 8: Row 100: is the sentence “With a root-mean-square error (RMSE) of 3.5 million hectare” a misprint?

Response 8: The sentence is modified in the text.

 

Point 9: Row 155: the section Algorithm execution is empty;                 

Response 9: Google Earth Engine algorithm is incorporated (Figure 3)

 

Point 10: Row 165-166: why you chose, for the filtered dataset the combined constellation revised frequency instead of the frequency of each single Sentinel-2 satellite?

Response 10: The use of multi-temporal dataset over single satellite images enable advantages like lesser coding, opportunity of adding more data in the operation as well as lesser time for execution of the entire operation. Same justification is incorporated in the conclusion section.

 

Point 11: Row 173: replace khrif with kharif;

Response 11: khrif is replaced with Kharif

 

Point 12: Figure 11: it could be unnecessary since Confusion matrix is well described in Table 2

Response 12: Figure is removed.

 

Reviewer 2 Report

The manuscript presented is well written and present a cropping intensity technique based on Google Earth Engine. Anyway, before going ahead some revisions have to be done before going ahead.

Firstly, I suggest you to improve the introduction section emphasizing the GEE possibility before focusing in the case of study this is crucial to help reader to better understand. Therefore, I sugget you to include these works:

- https://doi.org/10.3390/cli9030047

- https://doi.org/10.3390/ani12081049

- https://doi.org/10.1117/12.2533110

- https://doi.org/10.3390/land10121368

In the material and methods I sugget you to better describe the software and the whole processing for eg. by adding a workflow graph to help reader and mentioned which Sentinel-2 collection was adopted and how do you have deal the mask and shadows which mask SCL or QA?

Moreover, consider to better describe the settings in each software to perform the princial analysis. I sugget you to include in the supplementary material the GEE code realized.

Is not clear how you perform the cropping intensity please better describe.

In each figure please report the EPSG or Datum in the caption section.

Finally I suggest you to divide Results and Discussions in two separte parts.

 

Author Response

Point 1: Firstly, I suggest you to improve the introduction section emphasizing the GEE possibility before focusing in the case of study this is crucial to help reader to better understand. Therefore, I suggest you to include these works:

 

- https://doi.org/10.3390/cli9030047

 

- https://doi.org/10.3390/ani12081049

 

- https://doi.org/10.1117/12.2533110

 

- https://doi.org/10.3390/land10121368

Response 1: The suggested works are included in the introduction section.

 

Point 2: In the material and methods I suggest you to better describe the software and the whole processing for eg. by adding a workflow graph to help reader

Response 2: workflow graph is included for illustrating methodology (Figure 2). For the GEE coding, an algorithm is also incorporated (Figure 3).

 

Point 3: Mentioned which Sentinel-2 collection was adopted

Response 3: Harmonized Sentinel-2 MSI: Multi Spectral Instrument, Level-2A is used in the. It is incorporated in the text.

 

Point 4: how do you have deal the mask and shadows which mask SCL or QA?

Response 3: To deal with cloud and shadows, QA mask was used. The justification incorporated in the text.

 

Point 5: Moreover, consider to better describe the settings in each software to perform the princial analysis.

Response 5: For the GIS related work, ArcGIS 10 was used. For statistical works Origin was used. The details are incorporated in the text. 

 

Point 6: I suggest you to include in the supplementary material the GEE code realized.

Response 6:

The GEE code used is as follows:

//For Kharif crop:

function maskS2clouds(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}
var dt = table.filter(ee.Filter.eq('DISTNAME','CHURU'));

var coll1 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-04-01','2020-04-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-04-16','2020-04-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);    

var coll3 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-05-01','2020-05-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll4 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-05-16','2020-05-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll5 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-06-01','2020-06-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll6 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-06-16','2020-06-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll7 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-07-01','2020-07-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll8 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-07-16','2020-07-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll9 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-08-01','2020-08-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll10 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-08-16','2020-08-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll11 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-09-01','2020-09-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll12 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-09-16','2020-09-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);      

print(coll1);      

var addNDVI = function(img){

  var ndvi = img.normalizedDifference(['B8','B4']).rename('NDVI')

  return img.addBands(ndvi);

}

var withNDVI1 = coll1.map(addNDVI);

var withNDVI2 = coll2.map(addNDVI);

var withNDVI3 = coll3.map(addNDVI);

var withNDVI4 = coll4.map(addNDVI);

var withNDVI5 = coll5.map(addNDVI);

var withNDVI6 = coll6.map(addNDVI);

var withNDVI7 = coll7.map(addNDVI);

var withNDVI8 = coll8.map(addNDVI);

var withNDVI9 = coll9.map(addNDVI);

var withNDVI10 = coll10.map(addNDVI);

var withNDVI11 = coll11.map(addNDVI);

var withNDVI12 = coll12.map(addNDVI);

var greenest1 = withNDVI1.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest2 = withNDVI2.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest3 = withNDVI3.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest4 = withNDVI4.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest5 = withNDVI5.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest6 = withNDVI6.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest7 = withNDVI7.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest8 = withNDVI8.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest9 = withNDVI9.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest10 = withNDVI10.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest11 = withNDVI11.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest12 = withNDVI12.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var ndvi1 = greenest1.normalizedDifference(['B8','B4']).rename('NDVI1');

var ndvi2 = greenest2.normalizedDifference(['B8','B4']).rename('NDVI2');

var ndvi3 = greenest3.normalizedDifference(['B8','B4']).rename('NDVI3');

var ndvi4 = greenest4.normalizedDifference(['B8','B4']).rename('NDVI4');

var ndvi5 = greenest5.normalizedDifference(['B8','B4']).rename('NDVI5');

var ndvi6 = greenest6.normalizedDifference(['B8','B4']).rename('NDVI6');

var ndvi7 = greenest7.normalizedDifference(['B8','B4']).rename('NDVI7');

var ndvi8 = greenest8.normalizedDifference(['B8','B4']).rename('NDVI8');

var ndvi9 = greenest9.normalizedDifference(['B8','B4']).rename('NDVI9');

var ndvi10 = greenest10.normalizedDifference(['B8','B4']).rename('NDVI10');

var ndvi11 = greenest11.normalizedDifference(['B8','B4']).rename('NDVI11');

var ndvi12 = greenest12.normalizedDifference(['B8','B4']).rename('NDVI12');

var stacked_ndvi = ndvi1.addBands([ndvi2,ndvi3,ndvi4,ndvi5,ndvi6,ndvi7,ndvi8,ndvi9,ndvi10,ndvi11,ndvi12]);

var stacked_ndvi_scaled = stacked_ndvi.multiply(100).add(100).uint8();

Map.addLayer(stacked_ndvi_scaled,{bands:['NDVI9','NDVI5','NDVI7'],min:100, max:200},'Stacked_NDVI');

Map.addLayer(greenest9,{bands:['B8','B4','B3'],min:0,max:5000},'Sen_Feb1FN');

print(ndvi1)

var gt = Crop.merge(other);

var training_data = stacked_ndvi_scaled.sampleRegions({

  collection : gt,

  properties:['class'],

  scale:10,

});

var classifier = ee.Classifier.smileRandomForest(100)

                .train({

                  features:training_data,

                  classProperty: 'class',

                });

var classified = stacked_ndvi_scaled.classify(classifier, 'Classified');

var classified1 = classified.updateMask(classified.eq(1))

Map.addLayer(classified1,{palette:['white','yellow'],min:0,max:1},'Classified');

var areaImage = ee.Image.pixelArea().addBands(classified1);

var areas = areaImage.reduceRegion({

  reducer: ee.Reducer.sum().group({

    groupField: 1,

    groupName: 'class',

  }),

  geometry: dt,

  scale: 10,

  maxPixels: 1e13,

});

print('##### CLASS AREA SQ. METERS #####');

print(areas);

var trainAccuracy = classifier.confusionMatrix();

print('Resubstitution error matrix: ', trainAccuracy);

print('Training overall accuracy: ', trainAccuracy.accuracy());

Export.image.toDrive({

    image: classified1,

    description: 'Kharif_20221-22',

    scale: 30,

    folder:'2021-22',

    region: dt

  });

  Export.image.toDrive({

    image: ndvi1,

    description: 'Kharif_20221-22NDVI',

    scale: 30,

    folder:'2021-22',

    region: dt

  });

 

//For Rabi crop:

function maskS2clouds(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10;
  var cirrusBitMask = 1 << 11;
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
      .and(qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}

var dt = table.filter(ee.Filter.eq('DISTNAME','CHURU'));

var coll1 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-10-01','2020-10-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-10-16','2020-10-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);    

var coll3 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-11-01','2020-11-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll4 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-11-16','2020-11-30')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt); 

var coll5 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-12-01','2020-12-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll6 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2020-12-16','2020-12-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll7 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-01-01','2021-01-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll8 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-01-16','2021-01-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll9 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-02-01','2021-02-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll10 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-02-16','2021-02-28')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll11 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-03-01','2021-03-15')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

var coll12 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")

          .filterDate('2021-03-16','2021-03-31')

.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))

               .map(maskS2clouds);

          .filterBounds(dt);

   print(coll1);

var addNDVI = function(img){

  var ndvi = img.normalizedDifference(['B8','B4']).rename('NDVI')

  return img.addBands(ndvi);

}

var withNDVI1 = coll1.map(addNDVI);

var withNDVI2 = coll2.map(addNDVI);

var withNDVI3 = coll3.map(addNDVI);

var withNDVI4 = coll4.map(addNDVI);

var withNDVI5 = coll5.map(addNDVI);

var withNDVI6 = coll6.map(addNDVI);

var withNDVI7 = coll7.map(addNDVI);

var withNDVI8 = coll8.map(addNDVI);

var withNDVI9 = coll9.map(addNDVI);

var withNDVI10 = coll10.map(addNDVI);

var withNDVI11 = coll11.map(addNDVI);

var withNDVI12 = coll12.map(addNDVI);

var greenest1 = withNDVI1.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest2 = withNDVI2.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest3 = withNDVI3.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest4 = withNDVI4.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest5 = withNDVI5.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest6 = withNDVI6.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest7 = withNDVI7.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest8 = withNDVI8.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest9 = withNDVI9.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest10 = withNDVI10.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest11 = withNDVI11.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var greenest12 = withNDVI12.qualityMosaic('NDVI').select(['B2','B3','B4','B8','B11','B12']).clip(dt);

var ndvi1 = greenest1.normalizedDifference(['B8','B4']).rename('NDVI1');

var ndvi2 = greenest2.normalizedDifference(['B8','B4']).rename('NDVI2');

var ndvi3 = greenest3.normalizedDifference(['B8','B4']).rename('NDVI3');

var ndvi4 = greenest4.normalizedDifference(['B8','B4']).rename('NDVI4');

var ndvi5 = greenest5.normalizedDifference(['B8','B4']).rename('NDVI5');

var ndvi6 = greenest6.normalizedDifference(['B8','B4']).rename('NDVI6');

var ndvi7 = greenest7.normalizedDifference(['B8','B4']).rename('NDVI7');

var ndvi8 = greenest8.normalizedDifference(['B8','B4']).rename('NDVI8');

var ndvi9 = greenest9.normalizedDifference(['B8','B4']).rename('NDVI9');

var ndvi10 = greenest10.normalizedDifference(['B8','B4']).rename('NDVI10');

var ndvi11 = greenest11.normalizedDifference(['B8','B4']).rename('NDVI11');

var ndvi12 = greenest12.normalizedDifference(['B8','B4']).rename('NDVI12');

var stacked_ndvi = ndvi1.addBands([ndvi2,ndvi3,ndvi4,ndvi5,ndvi6,ndvi7,ndvi8,ndvi9,ndvi10,ndvi11,ndvi12]);

var stacked_ndvi_scaled = stacked_ndvi.multiply(100).add(100).uint8();

Map.addLayer(stacked_ndvi_scaled,{bands:['NDVI9','NDVI5','NDVI3'],min:100, max:200},'Stacked_NDVI');

Map.addLayer(greenest9,{bands:['B8','B4','B3'],min:0,max:5000},'Sen_Feb1FN');

print(ndvi1)

var gt = cropr_2021.merge(otherr_2021);

var training_data = stacked_ndvi_scaled.sampleRegions({

  collection : gt,

  properties:['class'],

  scale:10,

});

var classifier = ee.Classifier.smileRandomForest(100)

                .train({

                  features:training_data,

                  classProperty: 'class',

                });

var classified = stacked_ndvi_scaled.classify(classifier, 'Classified');

var classified1 = classified.updateMask(classified.eq(1))

Map.addLayer(classified1,{palette:['white','yellow'],min:0,max:1},'Classified');

var areaImage = ee.Image.pixelArea().addBands(classified1);

var areas = areaImage.reduceRegion({

  reducer: ee.Reducer.sum().group({

    groupField: 1,

    groupName: 'class',

  }),

  geometry: dt,

  scale: 10,

  maxPixels: 1e13,

  //tileScale: 8

});

print('##### CLASS AREA SQ. METERS #####');

print(areas);

var trainAccuracy = classifier.confusionMatrix();

print('Resubstitution error matrix: ', trainAccuracy);

print('Training overall accuracy: ', trainAccuracy.accuracy());

Export.image.toDrive({

    image: classified1,

    description: 'Rabi_2020-21',

    scale: 30,

    folder:'2020-21a',

    region: dt

  });

  Export.image.toDrive({

    image: ndvi1,

    description: 'Rabi_2020-21NDVI',

    scale: 30,

    folder:'2020-21a',

    region: dt

  });

A detailed GEE algorithm is incorporated in the text (Figure 3)

 

Point 7: Is not clear how you perform the cropping intensity please better describe.

Response 7: The entire process of calculation and illustration is mentioned in the text (2.6 Cropping intensity computation and 3.2 Spatial distribution of cropping intensity) .  

 

Point 8: In each figure please report the EPSG or Datum in the caption section.

Response 8: In each figure, Datum (WGS 84) is incorporated.

 

Point 9: Finally I suggest you to divide Results and Discussions in two separate parts. 

Response 9: Results and Discussion are separated in different sections.

 

Round 2

Reviewer 2 Report

The authors well followed the suggestion given. Therefore, at this point the manuscript has an high quality level. I have nothing more to add and I recomend this manuscript to be published on Applied Sciences. 

Back to TopTop