• 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连通的规则。

    返回。图像

    代码:

    1. var image_baxi01 = ee.Image("projects/ee-ivettexft07-americeclassify/assets/image_baxi01-0000000000-0000000000"),
    2. Table_baxi01 = ee.FeatureCollection("projects/ee-ivettexft07-americe/assets/dissolve_grid_baxi_01");
    3. var industrial_mature_oilpalm=image_baxi01.eq(5).selfMask();
    4. // print(industrial_mature_oilpalm);
    5. // 对工业_成熟_油棕的图像对象进行独特的标记。
    6. var objectId =industrial_mature_oilpalm.connectedComponents({
    7. connectedness: ee.Kernel.plus(1),
    8. maxSize: 128
    9. });
    10. print(objectId);
    11. Map.addLayer(objectId.randomVisualizer(), null, 'Objects');
    12. var objectSize = objectId.select('labels')
    13. .connectedPixelCount({
    14. maxSize: 128, eightConnected: false
    15. });
    16. Map.addLayer(objectSize, null, 'Object n pixels');
    17. //获取影像的像素面积
    18. var pixelArea = ee.Image.pixelArea();
    19. //用像素面积乘以物体的像素数来计算物体面积。
    20. //其结果是一个图像,物体的每个像素都与物体的面积有关,单位是m^2。
    21. var objectArea =objectSize.multiply(pixelArea);
    22. // 向地图显示对象区域。
    23. Map.addLayer(objectArea,
    24. {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']},
    25. 'Object area m^2');
    26. // 筛选低于一定规模(本例中为1公顷)的物体。
    27. //原有代码:var areaMask=objectArea.gte(10000000);
    28. var areaMask=objectArea.gte(10000);
    29. // 使用刚刚定义的最小面积掩码,更新之前定义的`objectId`层的掩码。
    30. var objectId_IM= objectId.updateMask(areaMask);
    31. Map.addLayer(objectId_IM, null, 'Large Area');

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

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

     

     

     

     

     

  • 相关阅读:
    5个实用的性能测试工具(软件测试工程师必备)
    【matplotlib 实战】--堆叠面积图
    nginx 根据用户端设备标识,pc端还是移动端进入对应的网页。
    docker
    黑客入门指南,学习黑客必须掌握的技术
    css 实现鼠标上移添加下划线
    go slice切片的详细知识(包含底层扩容)——2
    spark中的bykey
    机器学习必修课 - 如何处理缺失数据
    Vue插件
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/126946647