GEE中LandTrendr算法多边形AOI报错:LinearRing需至少3个点
解决Google Earth Engine中LandTrendr多边形AOI报错问题
尝试在Google Earth Engine中运行LandTrendr算法提取变化图,使用点作为AOI时运行正常,但改用多边形AOI时抛出错误:
Line 75: GeometryConstructors.Polygon: LinearRing requires at least 3 points
原始报错代码
//########################################################################################## // START INPUTS //########################################################################################## // define collection parameters var startYear = 1985; var endYear = 2017; var startDay = '06-20'; var endDay = '09-20'; //var aoi = ee.Geometry.Point(-122.8848, 43.7929); var coords = ([70.9361058400289,28.387332974875402], [83.5044652150289,28.387332974875402], [83.5044652150289,37.305336609850876], [70.9361058400289,37.305336609850876], [70.9361058400289,28.387332974875402]); var aoi = ee.Geometry.Polygon(coords); var index = 'NBR'; var maskThese = ['cloud', 'shadow', 'snow', 'water']; // define landtrendr parameters var runParams = { maxSegments: 6, spikeThreshold: 0.9, vertexCountOvershoot: 3, preventOneYearRecovery: true, recoveryThreshold: 0.25, pvalThreshold: 0.05, bestModelProportion: 0.75, minObservationsNeeded: 6 }; // define change parameters var changeParams = { delta: 'loss', sort: 'greatest', year: {checked:false, start:2000, end:2010}, mag: {checked:true, value:200, operator: '\>', dsnr:false}, dur: {checked:true, value:4, operator: '\<'}, preval: {checked:true, value:300, operator: '\>'}, mmu: {checked:true, value:11}, }; //########################################################################################## // END INPUTS //########################################################################################## // load the LandTrendr.js module var ltgee = require('users/emaprlab/public:Modules/LandTrendr.js'); // add index to changeParams object changeParams.index = index; // run landtrendr var lt = ltgee.runLT(startYear, endYear, startDay, endDay, aoi, index, [], runParams, maskThese); // get the change map layers var changeImg = ltgee.getChangeMap(lt, changeParams); // set visualization dictionaries var palette = ['#9400D3', '#4B0082', '#0000FF', '#00FF00', '#FFFF00', '#FF7F00', '#FF0000']; var yodVizParms = { min: startYear, max: endYear, palette: palette }; var magVizParms = { min: 200, max: 800, palette: palette }; // display the change attribute map - note that there are other layers - print changeImg to console to see Map.centerObject(aoi, 11); Map.addLayer(changeImg.select(['mag']), magVizParms, 'Magnitude of Change'); Map.addLayer(changeImg.select(['yod']), yodVizParms, 'Year of Detection'); // export change data to google drive var region = aoi.buffer(1000).bounds(); var exportImg = changeImg.clip(region).unmask(0).short(); Export.image.toDrive( {image: exportImg,description: 'lt-gee_disturbance_map', folder: 'lt-gee_disturbance_map', fileNamePrefix: 'lt-gee_disturbance_map', region: region, scale: 30, crs: 'EPSG:5070', maxPixels: 1e13});
问题原因
错误根源在于多边形坐标数组的语法错误:定义coords时,直接用逗号分隔多个坐标数组,未将这些坐标数组包裹在一个外层数组中。GEE的ee.Geometry.Polygon要求输入是二维数组(外层数组包含所有坐标点数组),当前写法导致GEE无法识别有效的线性环(LinearRing)结构。
修复方案
修改coords的定义,将所有坐标点数组包裹在一个外层方括号内:
var coords = [ [70.9361058400289,28.387332974875402], [83.5044652150289,28.387332974875402], [83.5044652150289,37.305336609850876], [70.9361058400289,37.305336609850876], [70.9361058400289,28.387332974875402] ]; var aoi = ee.Geometry.Polygon(coords);
补充说明
- GEE中
ee.Geometry.Polygon的标准输入格式为[[lon1, lat1], [lon2, lat2], ..., [lonN, latN]],外层数组确保所有点构成一个闭合的线性环; - 原始代码中
coords的写法相当于传递多个独立的坐标数组参数,而非一个包含所有点的二维数组,导致GEE无法解析为有效的多边形。
内容的提问来源于stack exchange,提问作者Shalu Shalu
相关产品推荐
相关产品推荐

