JSP获取表单值域注意的问题 : enctype="multipart/form-data" 问题

在使用表单传送数据的时候,如果form 加了enctype="multipart/form-data" 这个属性,那么表单请求传到另一个jsp或servlet 里时是不能用request.getParameter()来获取到各个表单元素的值的。原因是因为在form使用了multipart/form-data时,就是以二进制的形式传输数据了,所以ruquest.getParameter("name")得到的值是null

解决方法:

<think>我们使用GoogleEarthEngine(GEE)的JavaScriptAPI来实现这个任务。主要步骤包括:1.定义甘肃省的几何区域(可以使用GEE提供的FeatureCollection)。2.加载2018年的Landsat8TOA影像集,并进行去云等预处理。3.计算每景影像的NDVI值,并生成月度合成影像(例如取月最大值合成)。4.提取甘肃省区域内的NDVI值,并计算每个月的平均NDVI(或其他统计值)以生成折线图。5.对全年的NDVI值(或某一代表性影像的NDVI)生成直方图。注意:由于Landsat8影像可能受云的影响,我们需要进行去云处理。这里我们使用QA波段进行去云,但TOA数据集中没有QA波段,因此我们可以使用pixel_qa波段(在T1_SR数据中有)或者使用TOA数据集的QA波段(如果有的话)。不过,在TOA数据集中,我们可以使用`'BQA'`波段(即质量评估波段)来去云。但根据GEE文档,LANDSAT/LC08/C01/T1_TOA数据集并没有提供QA波段,因此我们可能需要使用其他方法去云,例如使用简单的云掩膜(如阈值法)或者使用其他数据集(如SR数据集)提供的QA信息。但为了保持与问题要求一致(使用TOA数据),这里我们采用一个简单的方法:利用云覆盖属性(CLOUD_COVER)进行影像筛选,并在计算NDVI时使用每个月的无云影像进行合成(如中值合成或最大值合成)。由于问题要求制作折线图和直方图,折线图将展示2018年每个月的平均NDVI变化,直方图则展示全年NDVI值的分布(例如使用全年最大NDVI合成影像)。步骤:1.定义甘肃省边界:我们可以使用GEE提供的中国省级行政区划数据。2.获取2018年每个月的Landsat8影像集,并计算NDVI。3.对每个月进行合成(例如取最大值合成,因为NDVI在植被生长季较高,最大值可以避免云的影响)。4.提取每个月的合成影像在甘肃省范围内的平均NDVI值,用于折线图。5.另外,我们可以使用全年的最大值合成影像(即每个像素取全年最大值)来代表全年NDVI,然后计算其直方图。代码实现:首先,我们需要导入甘肃省的边界。在GEE中,我们可以使用`ee.FeatureCollection`来加载边界。这里我们使用FAO的全球行政区划数据:`FAO/GAUL/2015/level1`,然后从中过滤出甘肃省。然后,我们定义时间范围:2018年全年。接着,我们循环12个月,每个月获取该月的影像集,进行去云(通过云覆盖属性过滤,并取该月内云量最少的影像或者进行合成),然后计算NDVI,并合成月NDVI影像(这里我们采用最大值合成,因为最大值合成可以较好地去除云的影响,同时保留植被信息)。对于折线图,我们提取每个月的合成NDVI影像在甘肃省范围内的均值(或者其他统计值),然后绘制折线图。对于直方图,我们使用全年最大值合成的NDVI影像(即每个像素取12个月中的最大值),然后计算整个甘肃省区域的NDVI值分布直方图。注意:由于Landsat8数据可能在某些月份缺失(如冬季云量多),我们可以允许在合成时使用多个月份的影像,但这里我们严格按月份合成。代码示例:```javascript//导入甘肃省边界vargansu=ee.FeatureCollection("FAO/GAUL/2015/level1").filter(ee.Filter.eq('ADM1_NAME','Gansu'));//定义时间范围varstartDate='2018-01-01';varendDate='2018-12-31';//导入Landsat8TOA影像集varl8=ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');//创建一个列表用于存储每个月的NDVI影像varmonthlyNDVI=ee.List.sequence(1,12).map(function(month){//计算该月的起始和结束日期varstart=ee.Date(startDate).advance(month-1,'month');varend=start.advance(1,'month');//过滤影像集:时间、甘肃省边界、云量(这里使用云覆盖属性,我们设定一个阈值,比如小于20%)varcollection=l8.filterBounds(gansu).filterDate(start,end).filter(ee.Filter.lt('CLOUD_COVER',20));//计算NDVI并取该月最大值合成varndvi=collection.map(function(image){varnir=image.select('B5');varred=image.select('B4');returnnir.subtract(red).divide(nir.add(red)).rename('NDVI');});//取最大值合成,并设置月份属性returnndvi.max().set('month',month);});//将列表转换为影像集合varmonthlyNDVICollection=ee.ImageCollection(monthlyNDVI);//准备折线图数据:每个月甘肃省的平均NDVIvarchart=ui.Chart.image.seriesByRegion({imageCollection:monthlyNDVICollection,regions:gansu,reducer:ee.Reducer.mean(),band:'NDVI',scale:500,//根据实际需要调整尺度xProperty:'month'});print(chart);//计算全年NDVI最大值合成(从各月最大值中取最大值)varannualMaxNDVI=monthlyNDVICollection.max();//计算甘肃省全年NDVI最大值合成的直方图//首先,我们需要获取甘肃省区域内的NDVI值数组varhistogram=annualMaxNDVI.reduceRegion({reducer:ee.Reducer.histogram(),geometry:gansu,scale:30,maxPixels:1e13});//打印直方图数据,然后绘制直方图print('Histogram',histogram);//或者使用ui.Chart.image.histogram绘制直方图varhistChart=ui.Chart.image.histogram({image:annualMaxNDVI.select('NDVI'),region:gansu,scale:30,minBucketWidth:0.01});print(histChart);//可视化参数varndviParams={min:-1,max:1,palette:['blue','white','green']};//显示甘肃省边界Map.addLayer(gansu,{color:'red'},'Gansu');//显示全年NDVI最大值合成Map.addLayer(annualMaxNDVI,ndviParams,'AnnualMaxNDVI');Map.centerObject(gansu,6);```注意:1.由于Landsat8数据可能在某些月份没有符合条件的影像(云量<20%),那么该月的合成影像可能为空。我们可以考虑放宽云量阈值或者使用该月所有影像的中值合成等替代方法。2.折线图使用`ui.Chart.image.seriesByRegion`,其中xProperty设置为月份(month),这样折线图的横轴就是月份。3.直方图使用了两种方法:一种是使用`reduceRegion`得到直方图数据并打印,另一种是使用`ui.Chart.image.histogram`直接绘制直方图图表。这里我们同时打印了两种结果,但图表形式更直观。4.由于甘肃省范围较大,处理时可能需要调整`scale`参数和`maxPixels`参数,以避免超过内存限制。请将上述代码复制到GEE的代码编辑器中运行。注意,需要先导入甘肃省的边界,这里使用的是FAO的行政区划数据,如果找不到,可以尝试其他数据源,比如使用用户自己上传的边界。另外,折线图显示的是每个月最大值合成的NDVI在甘肃省范围内的平均值,因此它反映的是该月植被覆盖的最好情况(因为NDVI最大值通常代表无云且植被生长状况最好)。直方图则是全年最大值合成的NDVI在甘肃省的分布情况。如果运行中出现问题,请检查数据集的可用性和边界数据。相关问题:1.如何调整折线图使其显示中值而不是平均值?2.如果某些月份没有影像数据,应该如何处理?3.如何将生成的图表导出为图片或CSV文件?</think>以下是基于Google Earth Engine (GEE) JavaScript API实现甘肃省2018年全年NDVI计算及可视化的完整代码解决方案: ```javascript // 1. 加载甘肃省行政区划边界 var gansu = ee.FeatureCollection("users/geography/products/China_Province") .filter(ee.Filter.eq('省', '甘肃省')); // 2. 加载2018年Landsat8 TOA影像集 var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2018-01-01', '2018-12-31') .filterBounds(gansu) .filter(ee.Filter.lt('CLOUD_COVER', 20)); // 过滤云量>20%的影像 // 3. 定义NDVI计算函数 var addNDVI = function(image) { var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); return image.addBands(ndvi); }; // 4. 应用NDVI计算并创建月度合成 var monthlyNDVI = ee.List.sequence(1, 12).map(function(m) { var start = ee.Date('2018-' + m + '-01'); var end = start.advance(1, 'month'); return l8.filterDate(start, end) .map(addNDVI) .select('NDVI') .mean() // 取月均值 .set('month', m); }); var monthlyCollection = ee.ImageCollection(monthlyNDVI); // 5. 生成折线图(月均NDVI变化) var chart1 = ui.Chart.image.seriesByRegion({ imageCollection: monthlyCollection, regions: gansu, reducer: ee.Reducer.mean(), band: 'NDVI', scale: 30, xProperty: 'month' }).setOptions({ title: '甘肃省2018年月均NDVI变化趋势', vAxis: {title: 'NDVI值'}, hAxis: {title: '月份', ticks: [1,2,3,4,5,6,7,8,9,10,11,12]}, lineWidth: 3, colors: ['#00aa00'] }); print(chart1); // 6. 生成全年NDVI直方图 var fullYearNDVI = l8.map(addNDVI).select('NDVI').mean(); var histogram = ui.Chart.image.histogram({ image: fullYearNDVI, region: gansu, scale: 30, minBucketWidth: 0.01 }).setOptions({ title: '甘肃省2018年NDVI值分布直方图', hAxis: {title: 'NDVI值', viewWindow: {min: -1, max: 1}}, vAxis: {title: '像素数量'}, colors: ['#1e90ff'] }); print(histogram); // 7. 可视化设置 Map.centerObject(gansu, 6); Map.addLayer(gansu, {color: 'blue'}, '甘肃省边界'); Map.addLayer(fullYearNDVI, {min: -0.2, max: 0.8, palette: ['red', 'yellow', 'green']}, '全年NDVI均值'); ``` ### 代码说明: 1. **边界获取**: - 使用公开的中国省级行政区划数据加载甘肃省边界 - 替代方案:使用`ee.FeatureCollection("FAO/GAUL/2015/level1").filter(ee.Filter.eq('ADM1_NAME','Gansu'))` 2. **数据预处理**: - 过滤2018年数据 - 云量阈值<20%(通过`CLOUD_COVER`属性) - 空间范围限定在甘肃省内 3. **NDVI计算**: - 使用公式$NDVI = \frac{B5 - B4}{B5 + B4}$ - Landsat8波段:B4(红波段), B5(近红外波段) 4. **月度合成**: - 将全年分为12个月段 - 每月取所有可用影像的NDVI均值 - 为每月影像添加月份属性用于制图 5. **折线图特性**: - X轴:1-12月 - Y轴:甘肃省全域平均NDVI值 - 反映植被季节性变化规律 6. **直方图特性**: - 基于全年NDVI均值影像 - 横轴:NDVI值域(-1到1) - 纵轴:对应NDVI值的像素数量 - 反映全省植被覆盖分布状况 ### 技术要点: - **去云处理**:通过`CLOUD_COVER`元数据过滤,确保数据质量[^1] - **时间序列处理**:使用`ee.List.sequence`创建月度时间序列 - **统计方法**:`ee.Reducer.mean()`计算区域平均值 - **可视化优化**:直方图设置`minBucketWidth`控制柱宽,折线图设置ticks明确月份 > **注意**:首次运行可能需要调整`scale`参数(第5/6步)以适应计算资源,建议值30-100米。若数据量过大,可考虑按季度合成替代月度合成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值