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