- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试寻找从 imageCollection 导出单个图像的方法,目前正在研究 imageCollection.reduce() 函数。特别是,我想从图像集合中创建单个图像,其中每个像素代表集合中图像中该位置的像素的平均值。根据此网页( https://developers.google.com/earth-engine/reducers_image_collection ), imageCollection.reduce() 函数应该执行此操作。看一下中值函数的示例,它表示“输出是按像素计算的,因此输出中的每个像素都由该位置集合中所有图像的中值组成。”
但是,每当我尝试使用这些函数时,导出到我的 Google 云端硬盘的输出都是单像素图像。
我已经能够导出和下载仅包含单个图像的 ee 图层的整个图像。下面的示例显示了我的高程图层结果:
import ee
import rasterio as rio
import numpy as np
ee.Initialize()
elevation = ee.Image('JAXA/ALOS/AW3D30_V1_1').select('AVE')
geometry = ee.Geometry.Polygon([[33.8777, -13.4055],
[33.8777, -13.3157],
[33.9701, -13.3157],
[33.9701, -13.4055]])
geometry = geometry['coordinates'][0]
filename = "Example_File"
task_config = {
'region': geometry,
'min': 0.0,
'max': 4000.0,
'palette': ['0000ff', '00ffff', 'ffff00', 'ff0000', 'ffffff']
}
task = ee.batch.Export.image(elevation, filename, task_config)
task.start()
将图像导出并下载到我的计算机上后,我会得到以下输出:
rs = rio.open("C:\\Users\\miker\\Downloads\\Example_File.TIF")
rs.read(1)
#Output#
array([[1275, 1273, 1271, ..., 1152, 1163, 1178],
[1275, 1273, 1271, ..., 1152, 1164, 1184],
[1275, 1273, 1271, ..., 1158, 1169, 1187],
...,
[1327, 1326, 1324, ..., 1393, 1396, 1397],
[1328, 1326, 1325, ..., 1399, 1400, 1403],
[1328, 1326, 1325, ..., 1402, 1404, 1407]], dtype=int16)
但是,当我尝试对 imageCollection 层执行类似的过程时,其中集合已使用 ee.Reducer.mean() 函数缩减为图像,我只得到一个像素数组:
population = (ee.ImageCollection('WorldPop/POP')
.select('population')
.filter(ee.Filter.date('2015-01-01', '2017-12-31')))
population = population.reduce(ee.Reducer.mean())
File_Name = "Example_File2"
task_config = {
'region': geometry,
'min': 0.0,
'max': 50.0,
'palette': ['24126c', '1fff4f', 'd4ff50']
}
task = ee.batch.Export.image(population, File_Name, task_config)
task.start()
rs = rio.open("C:\\Users\\miker\\Downloads\\Example_File2.TIF")
rs.read(1)
#Output#
array([[1.262935]], dtype=float32)
我对 min()、max() 和median() 重复了这个过程,并得到了相似的结果:
# mean: array([[1.262935]], dtype=float32)
# median: array([[1.262935]], dtype=float32)
# min: array([[1.2147448]], dtype=float32)
# max: array([[1.3111253]], dtype=float32)
有谁知道为什么会发生这种情况?我的猜测是,reduce() 函数将整个集合聚合为一个值,但我不确定为什么或者我可以采取什么措施来阻止这种情况。
任何帮助将不胜感激。
最佳答案
当您运行 task.start()
而不显式设置参数时,任务将使用默认值。正如 @blindjesse 提到的,您没有正确设置图像导出任务的参数,并且默认值会给您带来奇怪的结果。以下是将人口图像以 30m 分辨率导出到 GDrive 的示例:
population = (ee.ImageCollection('WorldPop/POP')
.select('population')
.filter(ee.Filter.date('2015-01-01', '2017-12-31')))
population = population.reduce(ee.Reducer.mean())
geometry = ee.Geometry.Polygon([[33.8777, -13.4055],
[33.8777, -13.3157],
[33.9701, -13.3157],
[33.9701, -13.4055]])
File_Name = "Example_File2"
task_config = {
'region': geometry.coordinates().getInfo(),
'scale': 30,
'description': File_Name
}
task = ee.batch.Export.image.toDrive(population, **task_config)
task.start()
关于python - imageCollection.reduce() 函数在使用 Google Earth Engine Python API 导出时生成单像素图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547601/
似乎在应用程序中使用 Google 地球的首选方式是将其嵌入网页,然后通过 javascript API 访问它。 但是,不是将其嵌入到网页中,而是可以让一些代码将新功能嵌入到 Google 地球桌面
我刚刚开始使用 .Net 的 GEPlugin 控件使用 Google Earth 进行编码,但仍有很多东西要学习。 让我感到困惑的是当我尝试拖动多边形时。 每当 mousemove 事件触发时调用下
我正在尝试为 google earth api 提供一个我从中返回的起点谷歌地图 Api v3(我有经纬度)。我想做的是给一个位置Google Earth,它可以自动移动到街景级别。 到目前为止,我所
我正在尝试为 google earth api 提供一个我从中返回的起点谷歌地图 Api v3(我有经纬度)。我想做的是给一个位置Google Earth,它可以自动移动到街景级别。 到目前为止,我所
在Google Earth Engine中,是否可以获得图像的像素值?下面的代码显示了图像的细节,我们可以看到图像的波段 2,3 和 4 有 10980*10980 像素。我们如何获得波段 3 在 (
在Google Earth Engine中,是否可以获得图像的像素值?下面的代码显示了图像的细节,我们可以看到图像的波段 2,3 和 4 有 10980*10980 像素。我们如何获得波段 3 在 (
当我将光栅文件导出到我的驱动器时,它被分成 4 个部分。为什么会这样? 它可能与我不使用的 dimensions 属性有关。但是没有给出默认值。 我使用了这个命令: Export.image.toDr
我想在 table 面应用程序中使用Google Earth。 我的问题是,您认为Google提供的这两个API中的哪一个具有更多功能和/或最佳支持? 非常感谢你 最佳答案 Google Earth
我在使用 Google Earth Engine 时遇到问题。我正在处理一些矢量文件。我得到以下代码: 最佳答案 几何图形有太多顶点。您可以尝试使用以下方法来简化它: // Get a feature
我想重新分类全局森林数据值,例如 0 - 20% --> 1 21 - 49 % --> 0.5 50 - 100% --> 0 但是,我无法找到如何在 GEE 中为范围执行此操作。可以在此处找到对个
我想重新分类全局森林数据值,例如 0 - 20% --> 1 21 - 49 % --> 0.5 50 - 100% --> 0 但是,我无法找到如何在 GEE 中为范围执行此操作。可以在此处找到对个
我需要为我的论文下载一堆 Landsat 图像。我的问题看起来很简单,但我对 JavaScript 一无所知,文档也没有提供足够的帮助。我已将集合过滤到我的区域和时间段,我想将所有图像分别导出到云端硬
我应该使用一个利用 [google-earth-plugin] 的网页浏览器 问题是我使用的是 Linux (ubuntu),并且没有适合我们的 [google-earth-plugin]。 我想知道
我想在企业网络上使用 Earthly,该网络使用 SSL 探测来颁发自签名证书。 我有自定义的 ca-cert pem 文件,我已经成功地将其与 python、curl 等其他工具和工具链一起使用。
我有一组点地标分布在 google earth 插件上的一个小区域,如何获得这些点地标子集的平均范围(边界矩形)并缩放到该范围? 问候,湿婆神 最佳答案 你应该看看 GEarthExtensions
程序应如何确定 Google Earth API 已获取某个位置的准确高度? Google Earth Plugin API 有以下获取地面高度的方法: double GEGlobe.getGroun
在初始化 API 时,在看似成功的服务身份验证之后,我收到了初始化错误。我们的小组正在 react 框架上运行。 这是抛出错误的日志: Server listening on port 8080...
我正在使用 WebGL 的 Globe API 及其旋转动画功能,但我希望用户能够通过双击地球来停止和重新启动动画。 目前我有以下运行 onload 的动画代码: function performAn
我对 google earth 的 kml 文件有疑问。当我使用高度模式 clampToGround 时,它完全符合我的预期,它很好地跟随地面。 pm1kml
我正在编写一个带有 WebBrowser 控件的 WinForms 应用程序。我在此应用程序中使用了 Google Earth Plugin,需要在 Google Earth 上创建一些地标。根据当前
我是一名优秀的程序员,十分优秀!