当前位置:   article > 正文

利用GEE批量下载基于L8影像SR数据集的某一月份的时序RSEI数据_gee seninel2 时间序列下载

gee seninel2 时间序列下载

SR数据集属于Landsat8影像的L2级数据,优点是经过了大气处理。

本文基于L8影像的SR数据集,计算了北京市2013年到2022年8月份的RSEI数据。

利用GEE批量下载某一月份时序RSEI数据的具体流程如下:


目录

1. 定义研究区和去云函数

2. 定义SR月份数据和去云处理

3. 计算各个指数(NDVI、WET、NDBSI、LST)并去水体

4. 将各个指数分别归一化

5. 定义PCA函数并计算归一化后的RSEI

6. 批量导出RSEI影像

7. 批量RUN

8. RSEI运行结果

9. 完整代码


1. 定义研究区和去云函数

  1. var roi = table;
  2. Map.addLayer(roi, {}, 'yanjiuqu');
  3. // define cloudMasking function
  4. function maskL8sr(image) {
  5. var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  6. var saturationMask = image.select('QA_RADSAT').eq(0);
  7. // Apply the scaling factors to the appropriate bands.
  8. var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  9. var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  10. // Replace the original bands with the scaled ones and apply the masks.
  11. return image.addBands(opticalBands, null, true)
  12. .addBands(thermalBands, null, true)
  13. .updateMask(qaMask)
  14. .updateMask(saturationMask);
  15. }


2. 定义SR月份数据和去云处理

  1. // define SR dateset
  2. var Imagecol = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  3. .filterBounds(roi)
  4. .filterDate('2013-04-08', '2022-12-31')
  5. .filterMetadata('CLOUD_COVER', 'less_than', 50)
  6. .sort('CLOUD_COVER', true)
  7. .map(function(image){
  8. return image.set('year', ee.Image(image).date().get('year')).set('month', ee.Image(image).date().get('month'));
  9. })
  10. .map(maskL8sr);
  11. print('CloudRemoved_Images', Imagecol);
  12. // to prepare mosaiced and clipped dataset
  13. var imgList = ee.List([]);
  14. for (var year = 2013; year < 2023; year++) {
  15. for (var month = 8; month < 9; month++) {
  16. var img = Imagecol.filterMetadata('year', 'equals', year)
  17. .filterMetadata('month', 'equals', month)
  18. .mosaic()
  19. .clip(roi);
  20. var yearmonth = ee.String(ee.Number(year)).cat('-').cat(ee.String(ee.Number(month)));
  21. var image = img.set('yearmonth', yearmonth);
  22. var imgList = imgList.add(image);
  23. }
  24. }
  25. print('Filtered_Images', imgList);
  26. // to filter valid images
  27. var Valid_Imgs = ee.ImageCollection(imgList)
  28. .map(function(image) {
  29. var bands = image.bandNames();
  30. var hasBands = bands.size().gt(0);
  31. return ee.Algorithms.If(hasBands, image, null);
  32. },true);
  33. print('Valid_Images', Valid_Imgs);

3. 计算各个指数(NDVI、WET、NDBSI、LST)并去水体

  1. // data process
  2. // to define watermask function
  3. function waterMask(image) {
  4. var ndwi = image.normalizedDifference(['SR_B3', 'SR_B5']);
  5. var mask = ndwi.lt(0.1);
  6. return image.updateMask(mask);
  7. }
  8. // to define ndvi function
  9. function getNDVI(image) {
  10. var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']);
  11. return image.addBands(ndvi.rename('NDVI'));
  12. }
  13. // to define wet function
  14. function getWET(image) {
  15. var WET = image.expression('B*(0.1509) + G*(0.1973) + R*(0.3279) + NIR*(0.3406) + SWIR1*(-0.7112) + SWIR2*(-0.4572)', {
  16. 'B': image.select('SR_B2'),
  17. 'G': image.select('SR_B3'),
  18. 'R': image.select('SR_B4'),
  19. 'NIR': image.select('SR_B5'),
  20. 'SWIR1': image.select('SR_B6'),
  21. 'SWIR2': image.select('SR_B7')
  22. });
  23. return image.addBands(WET.rename('WET'));
  24. }
  25. // to define ndbsi function
  26. function getNDBSI(image) {
  27. // NDBSI = ( IBI + SI ) / 2
  28. var IBI = image.expression('(2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1))) / (2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1)))', {
  29. 'SWIR1': image.select('SR_B6'),
  30. 'NIR': image.select('SR_B5'),
  31. 'RED': image.select('SR_B4'),
  32. 'GREEN': image.select('SR_B3')
  33. });
  34. var SI = image.expression('((SWIR1 + RED) - (NIR + BLUE)) / ((SWIR1 + RED) + (NIR + BLUE))', {
  35. 'SWIR1': image.select('SR_B6'),
  36. 'NIR': image.select('SR_B5'),
  37. 'RED': image.select('SR_B4'),
  38. 'BLUE': image.select('SR_B2')
  39. });
  40. var NDBSI = (IBI.add(SI)).divide(2);
  41. return image.addBands(NDBSI.rename('NDBSI'));
  42. }
  43. // to dedfine lst function
  44. function getLST(image) {
  45. var LST = image.expression('(LST - 273.15)', {
  46. LST: image.select('ST_B10')
  47. });
  48. return image.addBands(LST.rename('LST'));
  49. }
  50. // to get NDVI, WET, NDBSI, and LST
  51. var Indexed_Imgs = Valid_Imgs.map(waterMask)
  52. .map(getNDVI)
  53. .map(getWET)
  54. .map(getNDBSI)
  55. .map(getLST);

4. 将各个指数分别归一化

  1. var bandNames = ['NDVI', 'WET', 'NDBSI', 'LST'];
  2. var Prepared_Imgs = Indexed_Imgs.select(bandNames);
  3. // to define norm function
  4. function getNorm(image) {
  5. var minMax = image.reduceRegion({
  6. reducer: ee.Reducer.minMax(),
  7. geometry: roi,
  8. scale: 30,
  9. crs: 'EPSG:4326',
  10. bestEffort: true,
  11. maxPixels: 1e13
  12. });
  13. var yearmonth = image.get('yearmonth');
  14. var normalize = ee.ImageCollection.fromImages(
  15. image.bandNames().map(function(name){
  16. name = ee.String(name);
  17. var band = image.select(name);
  18. return band.unitScale(ee.Number(minMax.get(name.cat('_min'))), ee.Number(minMax.get(name.cat('_max'))));
  19. })
  20. ).toBands().set('yearmonth', yearmonth);
  21. return normalize;
  22. }
  23. var Normed_Imgs = Prepared_Imgs.map(getNorm);
  24. print('Normed_Images', Normed_Imgs);

5. 定义PCA函数并计算归一化后的RSEI

  1. // to define PCA function
  2. var getPCA = function(image){
  3. var bandNames = image.bandNames();
  4. var region = roi;
  5. var yearmonth = image.get('yearmonth');
  6. // Mean center the data to enable a faster covariance reducer
  7. // and an SD stretch of the principal components.
  8. var meanDict = image.reduceRegion({
  9. reducer: ee.Reducer.mean(),
  10. geometry: region,
  11. scale: 30,
  12. maxPixels: 1e13
  13. });
  14. var means = ee.Image.constant(meanDict.values(bandNames));
  15. var centered = image.subtract(means).set('yearmonth', yearmonth);
  16. // This helper function returns a list of new band names.
  17. var getNewBandNames = function(prefix, bandNames){
  18. var seq = ee.List.sequence(1, 4);
  19. //var seq = ee.List.sequence(1, bandNames.length());
  20. return seq.map(function(n){
  21. return ee.String(prefix).cat(ee.Number(n).int());
  22. });
  23. };
  24. // This function accepts mean centered imagery, a scale and
  25. // a region in which to perform the analysis. It returns the
  26. // Principal Components (PC) in the region as a new image.
  27. var getPrincipalComponents = function(centered, scale, region){
  28. var year = centered.get('yearmonth');
  29. var arrays = centered.toArray();
  30. // Compute the covariance of the bands within the region.
  31. var covar = arrays.reduceRegion({
  32. reducer: ee.Reducer.centeredCovariance(),
  33. geometry: region,
  34. scale: scale,
  35. bestEffort:true,
  36. maxPixels: 1e13
  37. });
  38. // Get the 'array' covariance result and cast to an array.
  39. // This represents the band-to-band covariance within the region.
  40. var covarArray = ee.Array(covar.get('array'));
  41. // Perform an eigen analysis and slice apart the values and vectors.
  42. var eigens = covarArray.eigen();
  43. // This is a P-length vector of Eigenvalues.
  44. var eigenValues = eigens.slice(1, 0, 1);
  45. // This is a PxP matrix with eigenvectors in rows.
  46. var eigenVectors = eigens.slice(1, 1);
  47. // Convert the array image to 2D arrays for matrix computations.
  48. var arrayImage = arrays.toArray(1);
  49. // Left multiply the image array by the matrix of eigenvectors.
  50. var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage);
  51. // Turn the square roots of the Eigenvalues into a P-band image.
  52. var sdImage = ee.Image(eigenValues.sqrt())
  53. .arrayProject([0]).arrayFlatten([getNewBandNames('SD',bandNames)]);
  54. // Turn the PCs into a P-band image, normalized by SD.
  55. return principalComponents
  56. // Throw out an an unneeded dimension, [[]] -> [].
  57. .arrayProject([0])
  58. // Make the one band array image a multi-band image, [] -> image.
  59. .arrayFlatten([getNewBandNames('PC', bandNames)])
  60. // Normalize the PCs by their SDs.
  61. .divide(sdImage)
  62. .set('yearmonth', yearmonth);
  63. };
  64. // Get the PCs at the specified scale and in the specified region
  65. image = getPrincipalComponents(centered, 1000, region);
  66. return image;
  67. };
  68. var PCA_Imgcol = Normed_Imgs.map(getPCA);
  69. print('PCA_Imgcol', PCA_Imgcol);
  70. // to compute RSEI
  71. var Normed_RSEI = PCA_Imgcol.map(function(image){
  72. // image = image.addBands(ee.Image(1).rename('constant'));
  73. // var rsei = image.expression('constant - pc1' , {
  74. // constant: image.select('constant'),
  75. // pc1: image.select('PC1')
  76. // });
  77. var rsei = image.select('PC1');
  78. var RSEI = getNorm(rsei);
  79. return image.addBands(RSEI.rename('RSEI'));
  80. });
  81. print('Normed_RSEI', Normed_RSEI);

6. 批量导出RSEI影像

  1. // data download
  2. // 批量下载函数
  3. function exportImage(image, fileName) {
  4. Export.image.toDrive({
  5. image: image.select('RSEI'),
  6. description: 'RSEI-' + fileName,
  7. folder: 'GEE_export',
  8. region: roi,
  9. scale: 30,
  10. crs: 'EPSG:4326',
  11. maxPixels: 1e13 //最大像元素
  12. });
  13. }
  14. // 生成列表,迭代下载
  15. var indexList = Normed_RSEI.reduceColumns(ee.Reducer.toList(), ['system:index']).get('list');
  16. indexList.evaluate(function(indexs) {
  17. for (var i = 0; i < indexs.length; i++) {
  18. var image = ee.Image(Normed_RSEI.filter(ee.Filter.eq('system:index', indexs[i])).first());
  19. var name = 2013 + i + '-8';
  20. exportImage(image, name);
  21. }
  22. });

7. 批量RUN

  1. // 运行结果出来后,将代码粘贴到网页控制台
  2. runTasks = function() {
  3. const evt = new MouseEvent('click', {bubbles: true, cancelable: true, ctrlKey: true})
  4. $$('.run-button' ,$$('ee-task-pane')[0].shadowRoot).forEach(function(e) {
  5. e.dispatchEvent(evt)
  6. })
  7. }
  8. runTasks()


8. RSEI运行结果

9. 完整代码

  1. // 定义成自己的研究区
  2. var roi = table;
  3. // 在图层上显示
  4. Map.addLayer(roi, {}, 'yanjiuqu');
  5. // 定义SR数据的去云函数
  6. function maskL8sr(image) {
  7. var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  8. var saturationMask = image.select('QA_RADSAT').eq(0);
  9. // Apply the scaling factors to the appropriate bands.
  10. var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  11. var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  12. // Replace the original bands with the scaled ones and apply the masks.
  13. return image.addBands(opticalBands, null, true)
  14. .addBands(thermalBands, null, true)
  15. .updateMask(qaMask)
  16. .updateMask(saturationMask);
  17. }
  18. //_______________________________________________________________________________________
  19. // 定义SR数据集并进行去云处理
  20. var Imagecol = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  21. .filterBounds(roi)
  22. .filterDate('2013-04-08', '2022-12-31')
  23. .filterMetadata('CLOUD_COVER', 'less_than', 50) // 根据需要替换阈值
  24. .sort('CLOUD_COVER', true)
  25. .map(function(image){
  26. return image.set('year', ee.Image(image).date().get('year')).set('month', ee.Image(image).date().get('month'));
  27. })
  28. .map(maskL8sr);
  29. print('CloudRemoved_Images', Imagecol);
  30. // 筛选想要的月份数据并进行裁剪
  31. var imgList = ee.List([]);
  32. for (var year = 2013; year < 2023; year++) {
  33. for (var month = 8; month < 9; month++) { // 根据需要替换月份
  34. var img = Imagecol.filterMetadata('year', 'equals', year)
  35. .filterMetadata('month', 'equals', month)
  36. .mosaic()
  37. .clip(roi);
  38. var yearmonth = ee.String(ee.Number(year)).cat('-').cat(ee.String(ee.Number(month)));
  39. var image = img.set('yearmonth', yearmonth);
  40. var imgList = imgList.add(image);
  41. }
  42. }
  43. print('Filtered_Images', imgList);
  44. // 筛选出有效的数据集
  45. var Valid_Imgs = ee.ImageCollection(imgList)
  46. .map(function(image) {
  47. var bands = image.bandNames();
  48. var hasBands = bands.size().gt(0);
  49. return ee.Algorithms.If(hasBands, image, null);
  50. },true);
  51. print('Valid_Images', Valid_Imgs);
  52. //_______________________________________________________________________________________
  53. // 数据处理
  54. // 定义去水体函数
  55. function waterMask(image) {
  56. var ndwi = image.normalizedDifference(['SR_B3', 'SR_B5']);
  57. var mask = ndwi.lt(0.1);
  58. return image.updateMask(mask);
  59. }
  60. // 定义NDVI函数
  61. function getNDVI(image) {
  62. var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']);
  63. return image.addBands(ndvi.rename('NDVI'));
  64. }
  65. // 定义WET函数
  66. function getWET(image) {
  67. var WET = image.expression('B*(0.1509) + G*(0.1973) + R*(0.3279) + NIR*(0.3406) + SWIR1*(-0.7112) + SWIR2*(-0.4572)', {
  68. 'B': image.select('SR_B2'),
  69. 'G': image.select('SR_B3'),
  70. 'R': image.select('SR_B4'),
  71. 'NIR': image.select('SR_B5'),
  72. 'SWIR1': image.select('SR_B6'),
  73. 'SWIR2': image.select('SR_B7')
  74. });
  75. return image.addBands(WET.rename('WET'));
  76. }
  77. // 定义NDBSI函数
  78. function getNDBSI(image) {
  79. // NDBSI = ( IBI + SI ) / 2
  80. var IBI = image.expression('(2 * SWIR1 / (SWIR1 + NIR) - (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1))) / (2 * SWIR1 / (SWIR1 + NIR) + (NIR / (NIR + RED) + GREEN / (GREEN + SWIR1)))', {
  81. 'SWIR1': image.select('SR_B6'),
  82. 'NIR': image.select('SR_B5'),
  83. 'RED': image.select('SR_B4'),
  84. 'GREEN': image.select('SR_B3')
  85. });
  86. var SI = image.expression('((SWIR1 + RED) - (NIR + BLUE)) / ((SWIR1 + RED) + (NIR + BLUE))', {
  87. 'SWIR1': image.select('SR_B6'),
  88. 'NIR': image.select('SR_B5'),
  89. 'RED': image.select('SR_B4'),
  90. 'BLUE': image.select('SR_B2')
  91. });
  92. var NDBSI = (IBI.add(SI)).divide(2);
  93. return image.addBands(NDBSI.rename('NDBSI'));
  94. }
  95. // 定义LST函数
  96. function getLST(image) {
  97. var LST = image.expression('(LST - 273.15)', {
  98. LST: image.select('ST_B10')
  99. });
  100. return image.addBands(LST.rename('LST'));
  101. }
  102. // 计算4个指数并去水体
  103. var Indexed_Imgs = Valid_Imgs.map(waterMask)
  104. .map(getNDVI)
  105. .map(getWET)
  106. .map(getNDBSI)
  107. .map(getLST);
  108. //_______________________________________________________________________________________
  109. // 筛选出所需波段
  110. var bandNames = ['NDVI', 'WET', 'NDBSI', 'LST'];
  111. var Prepared_Imgs = Indexed_Imgs.select(bandNames);
  112. // 定义归一化函数
  113. function getNorm(image) {
  114. var minMax = image.reduceRegion({
  115. reducer: ee.Reducer.minMax(),
  116. geometry: roi,
  117. scale: 30,
  118. crs: 'EPSG:4326',
  119. bestEffort: true,
  120. maxPixels: 1e13
  121. });
  122. var yearmonth = image.get('yearmonth');
  123. var normalize = ee.ImageCollection.fromImages(
  124. image.bandNames().map(function(name){
  125. name = ee.String(name);
  126. var band = image.select(name);
  127. return band.unitScale(ee.Number(minMax.get(name.cat('_min'))), ee.Number(minMax.get(name.cat('_max'))));
  128. })
  129. ).toBands().set('yearmonth', yearmonth);
  130. return normalize;
  131. }
  132. // 对指数分别归一化
  133. var Normed_Imgs = Prepared_Imgs.map(getNorm);
  134. print('Normed_Images', Normed_Imgs);
  135. //_______________________________________________________________________________________
  136. // 定义PCA函数
  137. var getPCA = function(image){
  138. var bandNames = image.bandNames();
  139. var region = roi;
  140. var yearmonth = image.get('yearmonth');
  141. // Mean center the data to enable a faster covariance reducer
  142. // and an SD stretch of the principal components.
  143. var meanDict = image.reduceRegion({
  144. reducer: ee.Reducer.mean(),
  145. geometry: region,
  146. scale: 30,
  147. maxPixels: 1e13
  148. });
  149. var means = ee.Image.constant(meanDict.values(bandNames));
  150. var centered = image.subtract(means).set('yearmonth', yearmonth);
  151. // This helper function returns a list of new band names.
  152. var getNewBandNames = function(prefix, bandNames){
  153. var seq = ee.List.sequence(1, 4);
  154. //var seq = ee.List.sequence(1, bandNames.length());
  155. return seq.map(function(n){
  156. return ee.String(prefix).cat(ee.Number(n).int());
  157. });
  158. };
  159. // This function accepts mean centered imagery, a scale and
  160. // a region in which to perform the analysis. It returns the
  161. // Principal Components (PC) in the region as a new image.
  162. var getPrincipalComponents = function(centered, scale, region){
  163. var year = centered.get('yearmonth');
  164. var arrays = centered.toArray();
  165. // Compute the covariance of the bands within the region.
  166. var covar = arrays.reduceRegion({
  167. reducer: ee.Reducer.centeredCovariance(),
  168. geometry: region,
  169. scale: scale,
  170. bestEffort:true,
  171. maxPixels: 1e13
  172. });
  173. // Get the 'array' covariance result and cast to an array.
  174. // This represents the band-to-band covariance within the region.
  175. var covarArray = ee.Array(covar.get('array'));
  176. // Perform an eigen analysis and slice apart the values and vectors.
  177. var eigens = covarArray.eigen();
  178. // This is a P-length vector of Eigenvalues.
  179. var eigenValues = eigens.slice(1, 0, 1);
  180. // This is a PxP matrix with eigenvectors in rows.
  181. var eigenVectors = eigens.slice(1, 1);
  182. // Convert the array image to 2D arrays for matrix computations.
  183. var arrayImage = arrays.toArray(1);
  184. // Left multiply the image array by the matrix of eigenvectors.
  185. var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage);
  186. // Turn the square roots of the Eigenvalues into a P-band image.
  187. var sdImage = ee.Image(eigenValues.sqrt())
  188. .arrayProject([0]).arrayFlatten([getNewBandNames('SD',bandNames)]);
  189. // Turn the PCs into a P-band image, normalized by SD.
  190. return principalComponents
  191. // Throw out an an unneeded dimension, [[]] -> [].
  192. .arrayProject([0])
  193. // Make the one band array image a multi-band image, [] -> image.
  194. .arrayFlatten([getNewBandNames('PC', bandNames)])
  195. // Normalize the PCs by their SDs.
  196. .divide(sdImage)
  197. .set('yearmonth', yearmonth);
  198. };
  199. // Get the PCs at the specified scale and in the specified region
  200. image = getPrincipalComponents(centered, 1000, region);
  201. return image;
  202. };
  203. var PCA_Imgcol = Normed_Imgs.map(getPCA);
  204. print('PCA_Imgcol', PCA_Imgcol);
  205. // 计算归一化的RSEI
  206. var Normed_RSEI = PCA_Imgcol.map(function(image){
  207. // 利用'1-PC1'表示RSEI
  208. // image = image.addBands(ee.Image(1).rename('constant'));
  209. // var rsei = image.expression('constant - pc1' , {
  210. // constant: image.select('constant'),
  211. // pc1: image.select('PC1')
  212. // });
  213. // 利用'PC1'表示RSEI
  214. var rsei = image.select('PC1');
  215. var RSEI = getNorm(rsei);
  216. return image.addBands(RSEI.rename('RSEI'));
  217. });
  218. print('Normed_RSEI', Normed_RSEI);
  219. //_______________________________________________________________________________________
  220. // 数据下载
  221. // 批量下载函数
  222. function exportImage(image, fileName) {
  223. Export.image.toDrive({
  224. image: image.select('RSEI'),
  225. description: 'RSEI-' + fileName,
  226. folder: 'GEE_export',
  227. region: roi,
  228. scale: 30,
  229. crs: 'EPSG:4326',
  230. maxPixels: 1e13 //最大像元素
  231. });
  232. }
  233. // 生成列表,迭代下载
  234. var indexList = Normed_RSEI.reduceColumns(ee.Reducer.toList(), ['system:index']).get('list');
  235. indexList.evaluate(function(indexs) {
  236. for (var i = 0; i < indexs.length; i++) {
  237. var image = ee.Image(Normed_RSEI.filter(ee.Filter.eq('system:index', indexs[i])).first());
  238. var name = 2013 + i + '-8';
  239. exportImage(image, name);
  240. }
  241. });

参考了以下文章:

PCA函数参考:利用GEE计算城市遥感生态指数(RSEI)——Landsat 8为例_gee计算rsei_何处惹尘埃?的博客-CSDN博客GEE,RSEI,城市生态状况快速监测与评价_gee计算rseihttps://blog.csdn.net/qq_35490698/article/details/125751534

批量导出参考:GEE学习笔记001-ImageCollection(影像集合)的批量裁剪和批量导出_gee导出imagecollection_小郭学地信的博客-CSDN博客在GEE(Google Earth Engine)中,遥感影像可以是单张的Image,也可以是多张影像组成的影像集合(ImageCollection)。其中,Image的裁剪很简单,直接调用clip函数即可,但是针对ImageCollection,不能直接使用clip函数。_gee导出imagecollectionhttps://blog.csdn.net/guoshihui123/article/details/129242873批量RUN参考:新版GEE批量导出点run代码_P0级推荐算法工程师的博客-CSDN博客偶然在GEE的论坛上看到杨志强老师写的新版GEE批量导出点run代码,分享给大家,杨志强老师还实现了LandTrendr算法(膜拜大神),论坛讨论链接在这儿了。Exporting images without clicking on RUN button (google.com)当导出run的列表全部显示后,打开浏览器的console命令行运行窗口,复制粘贴杨老师的批量点run代码,再enter,耐心等待即可runTasks = function() { const evt = new Mhttps://blog.csdn.net/SunStrongInChina/article/details/120707460

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/455257
推荐阅读
相关标签
  

闽ICP备14008679号