JS_高程5.引用类型(1)Object类型

本文介绍ECMAScript中创建对象的两种方法:使用new操作符与对象字面量表示法,并展示了如何通过点表示法和方括号表示法访问对象属性。

引用类型

  在ECMASCript中,引用类型是一种数据结构,将数据和功能组织在一起,引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。(注意:尽管ECMAScript从技术上讲是一门面向对象的语言,但是它不具备传统面向对象语言所支持的类和接口等基本结构。)

 

1.Obiect类型

创建Object类型的两种方式:

(1)使用new操作符后跟Objec构造函数

 

1 var person=new Object();
2     person.name="Linshuling";
3     person.age=19;

 

(2)使用对象字面量表示法(简写形式,简化创建包含大量属性的对象的过程。)

1 var person={
2         name:"Linshuling",
3         age:19
4     };
5     alert(person.name);

注意:

  在对象字面量中,使用逗号来分隔不同的属性,因此“Linshuling”后面是一个逗号,但是在age属性的值19后面不能加逗号,因为age是这个对象的最后一个属性。在最后一个属性后面添加逗号,会在IE7及更早的版本和Opera中导致错误。

 

使用对象字面量语法时,属性名也可以使用字符串。

eg:

1 var person={
2        "name" :"Linshuling",
3        "age" :19,
4        5:true
5     };

注意:这里的数值属性名会自动转换为字符串。

 

另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象。

eg:

1 var person={};  //与new Object()相同
2     person.name="Linshuling";
3     person.age=19;
4     alert(person.age);

 

 

注意:

  在通过对象字面量定义对象时,实际上是不会调用Object构造函数(Firefox2及更早版本会调用;但是Firefox3之后就不会了)。实际上,开发人员更倾向对象字面语法,因为这种语法要求的代码量少,而且能够给人封装数据的感觉。

  对象字面量也是向函数传递大量可选参数的首选方式。

eg:

 1  function displayInfo(args){
 2         var output="";
 3         if(typeof args.name=="string"){
 4             output+="Name:"+args.name+"\n";
 5         }
 6         if(typeof args.age=="number"){
 7              output+="Age:"+args.age+"\n";
 8         }
 9 
10         alert(output);
11     }
12     displayInfo({
13         name:"Linshuling",
14         age:29
15     });
16 
17     displayInfo({
18         name:"lin"
19     });

 

  这种传递参数得模式最适合需要向函数传入大量可选参数的情形。

 

 

2.访问对象的方法

(1)点表示法

(2)方括号表示法

eg:

1 var person=new Object();
2     person.name="Linshuling";
3     person.age=19;
4     alert(person.name);
5     alert(person["age"]);

注意:

alert(person["age"]);属性名称age要加“”,不然会出现错误。



方括号的优点:
(1)可以通过变量来访问属性
eg:
1 var n="name";
2     alert(person[n]);

(2)如果属性名中包含导致语法错误的字符,或者属性名使用的是关键字或是保留字,也可以使用方括号表示法。

1 person["first name"]="Linshuling";

由于first name 中包含一个空格,所以不能使用点表示法来访问它。

注意:除非使用变量来访问属性,否则建议使用点表示法。

 

 

转载于:https://www.cnblogs.com/LinSL/p/6187955.html

// 示例:加载Sentinel-2影像(2022年,研究区域匹配) var sentinel2 = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2019-01-25', '2019-12-31') .filterBounds(geometry) // geometry为用户定义的矢量区域 .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) // 筛选云量低的影像 .median(); // 取中值合成影像 // 以Sentinel-2为例 var ndvi = sentinel2.normalizedDifference(['B8', 'B4']).rename('NDVI'); var ndwi = sentinel2.normalizedDifference(['B3', 'B8']).rename('NDWI'); // 裁剪到研究区域 var ndviClip = ndvi.clip(geometry); var ndwiClip = ndwi.clip(geometry); // NDVI可视化参数(范围-11) var ndviParams = {min: -1, max: 1, palette: ['red', 'yellow', 'green']}; // NDWI可视化参数(范围-11) var ndwiParams = {min: -1, max: 1, palette: ['white', 'blue']}; Map.centerObject(geometry, 10); Map.addLayer(ndviClip, ndviParams, '2019年NDVI'); Map.addLayer(ndwiClip, ndwiParams, '2019年NDWI'); // 定义通用统计参数 var statsParams = { geometry: geometry, scale: 10, maxPixels: 1e13, bestEffort: true }; // 计算NDVI统计值(显式传递参数) var ndviStats = ndviClip.reduceRegion({ reducer: ee.Reducer.minMax().combine({ reducer2: ee.Reducer.mean(), sharedInputs: true }), geometry: statsParams.geometry, scale: statsParams.scale, maxPixels: statsParams.maxPixels, bestEffort: statsParams.bestEffort }); // 计算NDWI统计值(显式传递参数) var ndwiStats = ndwiClip.reduceRegion({ reducer: ee.Reducer.minMax().combine({ reducer2: ee.Reducer.mean(), sharedInputs: true }), geometry: statsParams.geometry, scale: statsParams.scale, maxPixels: statsParams.maxPixels, bestEffort: statsParams.bestEffort }); // 打印结果 print('2019年NDVI 范围:', ndviStats); print('2019年NDWI 范围:', ndwiStats); // 修正后的MVI计算函数(使用B3、B8、B11波段) function calMvI(img) { var green = img.select("B3"); // B3: 绿光 var nir = img.select("B8"); // B8: 近红外 var swir1 = img.select("B11"); // B11: 短波红外1 var numerator = nir.subtract(green).abs(); // |NIR - Green| var denominator = swir1.subtract(green).abs(); // |SWIR1 - Green| var mvi = numerator.divide(denominator).rename('MVI'); return mvi; } // 加载Sentinel-2影像(去云处理) var sentinel2 = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2019-01-01', '2019-12-31') .filterBounds(geometry) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)) .median(); // 计算MVI var mviImage = calMvI(sentinel2).clip(geometry); // MVI可视化参数 // 步骤1:计算MVI并可视化(辅助定位) var mviParams = {min: 0, max: 5, palette: ['white', 'yellow', 'green']}; Map.addLayer(mviImage.clip(geometry), mviParams, '2019年MVI 指数'); Map.centerObject(geometry, 10); // 步骤2:点击地图触发查询 Map.onClick(function(lonlat) { // 获取点击位置的坐标 var point = ee.Geometry.Point([lonlat.lon, lonlat.lat]); // 采样MVI值 var mviValue = mviImage.sample(point, 10).first().get('MVI'); // 打印结果 print('点击位置坐标:', point); print('2019年MVI 值:', mviValue); }); //高程值 var delta_dtm = ee.Image("projects/sat-io/open-datasets/DELTARES/deltadtm_v1"); var elevation = delta_dtm.select('b1').clip(geometry); elevation = elevation.updateMask(elevation.neq(10)); var elevationVis = { min: 0, max: 10.0, // cmocean deep palette: ["281a2c", "3f396c", "3e6495", "488e9e", "5dbaa4", "a5dfa7", "fdfecc"] }; Map.addLayer(elevation, elevationVis, 'DeltaDTM'); // 定义点击事件函数 var onClick = function(coords) { var point = ee.Geometry.Point(coords.lon, coords.lat); // 从高程图中提取点击位置的值 var value = elevation.reduceRegion({ reducer: ee.Reducer.first(), geometry: point, scale: 30 // 匹配数据分辨率 }).get('b1'); // 打印结果(单位:米) value.evaluate(function(val) { print('高程():', val); }); }; // 绑定点击事件 Map.onClick(onClick); // 设定MVI阈值(根据研究区域调整) var mviThreshold =6.5; var elevationMin = 0; var elevationMax = 5; // 生成红树林二值掩膜 var mangrovesMask= mviImage.gt(mviThreshold) .and(elevation.gte(elevationMin)) .and(elevation.lte(elevationMax)) .rename('Mangroves'); // 方法:过滤掉值为0的区域(仅保留红树林区域) var maskedMangroves = mangrovesMask.updateMask(mangrovesMask.neq(0)); var mangroveVis = { min: 1, // 仅显示值为1的区域 max: 1, palette: ['#228B22'] // 直接指定绿色 }; Map.addLayer(maskedMangroves, mangroveVis, '2019年红树林分布'); // 将二值掩膜转换为面积(平方米) var areaImage = mangrovesMask.multiply(ee.Image.pixelArea()); // 统计研究区域内的总面积 var areaStats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: geometry, scale: 10, // Sentinel-2分辨率(米) maxPixels: 1e13 // 提高计算上限 }); // 转换为公顷(1公顷=10,000平方米) var areaHectares = ee.Number(areaStats.get('Mangroves')).divide(1e4); print('2019年红树林面积(公顷):', areaHectares); // 示例:加载Sentinel-2影像(2022年,研究区域匹配) var sentinel2 = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2022-01-25', '2022-12-31') .filterBounds(geometry) // geometry为用户定义的矢量区域 .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) // 筛选云量低的影像 .median(); // 取中值合成影像 // 以Sentinel-2为例 var ndvi = sentinel2.normalizedDifference(['B8', 'B4']).rename('NDVI'); var ndwi = sentinel2.normalizedDifference(['B3', 'B8']).rename('NDWI'); // 裁剪到研究区域 var ndviClip = ndvi.clip(geometry); var ndwiClip = ndwi.clip(geometry); // NDVI可视化参数(范围-11) var ndviParams = {min: -1, max: 1, palette: ['red', 'yellow', 'green']}; // NDWI可视化参数(范围-11) var ndwiParams = {min: -1, max: 1, palette: ['white', 'blue']}; Map.centerObject(geometry, 10); Map.addLayer(ndviClip, ndviParams, '2022年NDVI'); Map.addLayer(ndwiClip, ndwiParams, '2022年NDWI'); // 定义通用统计参数 var statsParams = { geometry: geometry, scale: 10, maxPixels: 1e13, bestEffort: true }; // 计算NDVI统计值(显式传递参数) var ndviStats = ndviClip.reduceRegion({ reducer: ee.Reducer.minMax().combine({ reducer2: ee.Reducer.mean(), sharedInputs: true }), geometry: statsParams.geometry, scale: statsParams.scale, maxPixels: statsParams.maxPixels, bestEffort: statsParams.bestEffort }); // 计算NDWI统计值(显式传递参数) var ndwiStats = ndwiClip.reduceRegion({ reducer: ee.Reducer.minMax().combine({ reducer2: ee.Reducer.mean(), sharedInputs: true }), geometry: statsParams.geometry, scale: statsParams.scale, maxPixels: statsParams.maxPixels, bestEffort: statsParams.bestEffort }); // 打印结果 print('2022年NDVI 范围:', ndviStats); print('2022年NDWI 范围:', ndwiStats); // 修正后的MVI计算函数(使用B3、B8、B11波段) function calMvI(img) { var green = img.select("B3"); // B3: 绿光 var nir = img.select("B8"); // B8: 近红外 var swir1 = img.select("B11"); // B11: 短波红外1 var numerator = nir.subtract(green).abs(); // |NIR - Green| var denominator = swir1.subtract(green).abs(); // |SWIR1 - Green| var mvi = numerator.divide(denominator).rename('MVI'); return mvi; } // 加载Sentinel-2影像(去云处理) var sentinel2 = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2022-01-01', '2022-12-31') .filterBounds(geometry) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 10)) .median(); // 计算MVI var mviImage = calMvI(sentinel2).clip(geometry); // MVI可视化参数 // 步骤1:计算MVI并可视化(辅助定位) var mviParams = {min: 0, max: 5, palette: ['white', 'yellow', 'green']}; Map.addLayer(mviImage.clip(geometry), mviParams, 'MVI 指数'); Map.centerObject(geometry, 10); // 步骤2:点击地图触发查询 Map.onClick(function(lonlat) { // 获取点击位置的坐标 var point = ee.Geometry.Point([lonlat.lon, lonlat.lat]); // 采样MVI值 var mviValue = mviImage.sample(point, 10).first().get('2022年MVI'); // 打印结果 print('点击位置坐标:', point); print('2022年MVI 值:', mviValue); }); //高程值 var delta_dtm = ee.Image("projects/sat-io/open-datasets/DELTARES/deltadtm_v1"); var elevation = delta_dtm.select('b1').clip(geometry); elevation = elevation.updateMask(elevation.neq(10)); var elevationVis = { min: 0, max: 10.0, // cmocean deep palette: ["281a2c", "3f396c", "3e6495", "488e9e", "5dbaa4", "a5dfa7", "fdfecc"] }; Map.addLayer(elevation, elevationVis, 'DeltaDTM'); // 定义点击事件函数 var onClick = function(coords) { var point = ee.Geometry.Point(coords.lon, coords.lat); // 从高程图中提取点击位置的值 var value = elevation.reduceRegion({ reducer: ee.Reducer.first(), geometry: point, scale: 30 // 匹配数据分辨率 }).get('b1'); // 打印结果(单位:米) value.evaluate(function(val) { print('高程():', val); }); }; // 绑定点击事件 Map.onClick(onClick); // 设定MVI阈值(根据研究区域调整) var mviThreshold =6.5; var elevationMin = 0; var elevationMax = 5; // 生成红树林二值掩膜 var mangrovesMask= mviImage.gt(mviThreshold) .and(elevation.gte(elevationMin)) .and(elevation.lte(elevationMax)) .rename('Mangroves'); // 方法:过滤掉值为0的区域(仅保留红树林区域) var maskedMangroves = mangrovesMask.updateMask(mangrovesMask.neq(0)); var mangroveVis = { min: 1, // 仅显示值为1的区域 max: 1, palette: ['#228B22'] // 直接指定绿色 }; Map.addLayer(maskedMangroves, mangroveVis, '2022年红树林分布'); // 将二值掩膜转换为面积(平方米) var areaImage = mangrovesMask.multiply(ee.Image.pixelArea()); // 统计研究区域内的总面积 var areaStats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: geometry, scale: 10, // Sentinel-2分辨率(米) maxPixels: 1e13 // 提高计算上限 }); // 转换为公顷(1公顷=10,000平方米) var areaHectares = ee.Number(areaStats.get('Mangroves')).divide(1e4); print('2022年红树林面积(公顷):', areaHectares); 现在绘制了2022年和2019年的红树林面积,如何在源代码基础上分别在不同图层绘制19-22年红树林的增加面积,退化面积,稳定面积的图,
05-28
``` // 加载徐州市边界 var xuzhou = ee.FeatureCollection("projects/ee-xytsres/assets/xuzhou"); // 使用MODIS MAIAC AOD数据 (1km分辨率) var modis = ee.ImageCollection('MODIS/006/MCD19A2_GRANULES') .filterDate('2021-01-01', '2021-12-31') .filterBounds(xuzhou) .map(function(image) { // 质量筛选:二进制位0-1表示AOD质量,0=最佳 var qa = image.select('QA'); var mask = qa.bitwiseAnd(3).eq(0); // 选择最高质量数据 return image.select('Optical_Depth_047') .multiply(0.001) // 应用缩放因子 .updateMask(mask) .set('system:time_start', image.get('system:time_start')); }); // 降尺度到30米分辨率 var downscaleAOD = function(aodImage) { // 使用高程和NDVI作为辅助变量 var dem = ee.Image('USGS/SRTMGL1_003').clip(xuzhou); var ndvi = ee.ImageCollection('MODIS/006/MOD13A2') .filterDate('2021-01-01', '2021-12-31') .mean() .select('NDVI') .multiply(0.0001); return aodImage .resample('bilinear') // 先重采样到250米 .reproject({crs: 'EPSG:4326', scale: 250}) .addBands(dem) .addBands(ndvi) .reduceResolution({ reducer: ee.Reducer.linearRegression(2, 1), maxPixels: 1024 }) .reproject({crs: 'EPSG:4326', scale: 30}); }; // 生成年均AOD var annualAOD = downscaleAOD(modis.mean().clip(xuzhou)); // 可视化 Map.centerObject(xuzhou, 8); Map.addLayer(annualAOD.select('scale'), {min: 0, max: 1, palette: ['blue', 'yellow', 'red']}, 'Downscaled AOD'); // 导出结果 Export.image.toDrive({ image: annualAOD.select('scale'), description: 'Xuzhou_MODIS_AOD_2021', scale: 30, region: xuzhou, maxPixels: 1e13, fileFormat: 'GeoTIFF' });```帮我修改这段代码,它在GEE运行时出现以下问题:Downscaled AOD: Layer error: reduce.mean: Error in map(ID=MCD19A2_A2021001_h27v05_006_2021003031411_02): Image.select: Band pattern 'QA' did not match any bands. Available bands: [Optical_Depth_047, Optical_Depth_055, AOD_Uncertainty, FineModeFraction, Column_WV, AOD_QA, AOD_MODEL, Injection_Height, cosSZA, cosVZA, RelAZ, Scattering_Angle, Glint_Angle]
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值