Google Earth Engine(GEE)——因阈值设定,无法加载影像放大后的影像

我想通过区域阈值设置过滤掉对应的区域,但是当你滑向更小的区域时,挑出超过阈值区域的区域以及为什么不能显示,代码有什么问题?

首先我们先看一下我们加载的矢量和影像:

 

 矢量数据集:

 本次有一个新的函数需要讲解:

connectedComponents(connectedness, maxSize)
找出与输入的第一个带子的值相同的连接组件,并给它们贴上一个全局唯一的值。连通性是由给定的内核指定的。大于maxSize的对象被认为是背景,并被屏蔽。

参数。
this:image(图像)。
要标记的图像。

connectedness (Kernel)。
连通性内核。

maxSize(整数)。
要标记的对象的最大尺寸。

返回。图像

本代码中的结果:

ee.Kernel.plus(radius, units, normalize, magnitude)
生成一个加号的布尔运算内核。

参数。
radius (Float):
要生成的内核的半径。

units(字符串,默认为 "像素")。
内核的测量系统("像素 "或 "米")。如果内核的单位是米,那么当缩放级别改变时,它将会调整大小。

normalize(布尔值,默认为true)。
将内核值归一化,使其总和为1。

magnitude(浮点数,默认为1)。
用这个量来缩放每个值。

返回。内核

connectedPixelCount(maxSize, eightConnected)
生成一个图像,其中每个像素包含4个或8个连接的邻居(包括它自己)的数量。

参数。
this:输入(图像)。
输入的图像。

maxSize(整数,默认:100)。
邻域的最大尺寸,单位是像素。

eightConnected(布尔值,默认为true)。
是否使用8连通而不是4连通的规则。

返回。图像

代码:

var image_baxi01 = ee.Image("projects/ee-ivettexft07-americeclassify/assets/image_baxi01-0000000000-0000000000"),
    Table_baxi01 = ee.FeatureCollection("projects/ee-ivettexft07-americe/assets/dissolve_grid_baxi_01");


var industrial_mature_oilpalm=image_baxi01.eq(5).selfMask();
// print(industrial_mature_oilpalm);

// 对工业_成熟_油棕的图像对象进行独特的标记。
var objectId =industrial_mature_oilpalm.connectedComponents({
  connectedness: ee.Kernel.plus(1),
  maxSize: 128
});
print(objectId);

 Map.addLayer(objectId.randomVisualizer(), null, 'Objects');


var objectSize = objectId.select('labels')
  .connectedPixelCount({
    maxSize: 128, eightConnected: false
  });
 Map.addLayer(objectSize, null, 'Object n pixels');

//获取影像的像素面积
var pixelArea = ee.Image.pixelArea();

//用像素面积乘以物体的像素数来计算物体面积。
//其结果是一个图像,物体的每个像素都与物体的面积有关,单位是m^2。
var objectArea =objectSize.multiply(pixelArea);
// 向地图显示对象区域。
 Map.addLayer(objectArea,
             {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']},
             'Object area m^2');

// 筛选低于一定规模(本例中为1公顷)的物体。
//原有代码:var areaMask=objectArea.gte(10000000);
var areaMask=objectArea.gte(10000);

// 使用刚刚定义的最小面积掩码,更新之前定义的`objectId`层的掩码。
var objectId_IM= objectId.updateMask(areaMask);
Map.addLayer(objectId_IM, null, 'Large Area');

其实这里的原有的问题就是当我们设定了大于10000000的时候,放大zoom的时候,小区域便不会进行加载了,也就是我们这里选择筛选掉了超级大的部分,只剩下小的了,而我们所设定了的单位时平方米,不是我们原有代码中那种单位换算。

当然我们如果依旧再次放大的时候,依旧会有看不到的时候,大家可以自行尝试解决这个问题

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_31988139/article/details/126946647