我想通过区域阈值设置过滤掉对应的区域,但是当你滑向更小的区域时,挑出超过阈值区域的区域以及为什么不能显示,代码有什么问题?
首先我们先看一下我们加载的矢量和影像:
矢量数据集:
本次有一个新的函数需要讲解:
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的时候,小区域便不会进行加载了,也就是我们这里选择筛选掉了超级大的部分,只剩下小的了,而我们所设定了的单位时平方米,不是我们原有代码中那种单位换算。
当然我们如果依旧再次放大的时候,依旧会有看不到的时候,大家可以自行尝试解决这个问题