Geospatial Evaluation of Cropping Pattern and Cropping Intensity Using Multi Temporal Harmonized Product of Sentinel-2 Dataset on Google Earth Engine
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.