常见问题
我遇到了问题,需要帮助!
按照此指南发布问题,并提供尽可能多的信息(请参阅 Stack Overflow 提问指南)。这通常意味着:
发送代码编辑器中脚本的链接(点击“获取链接”按钮即可获取)
对于失败的批处理任务,报告失败任务的 ID。任务 ID 如下所示:
4C25GIJBMB52PXTEJTF4JLGL。您可以在代码编辑器的“任务”标签页中找到这些任务。 了解详情。
在哪里可以了解 Earth Engine 架构?
请参阅以下论文:Gorelick 等人,2017 年。
是否有任何非 Google 制作的推荐 Earth Engine 教程?
是否有推荐的遥感教程?
请参阅 Ujaval Gandhi 提供的此免费 EE 课程,其中包含一个介绍遥感的视频。
Earth Engine 编程
有哪些常见的编码错误?
请参阅调试指南。
为什么我会收到“…不是函数”错误?
当 Earth Engine 找不到调用的方法时,就会发生此错误。请检查以下常见原因:
拼写或大小写:方法区分大小写。根据 API 参考文档验证拼写。
Error: img.normalizedDiff(...) -> Correct: img.normalizedDifference(...)
缺少类型转换:从 .get() 等函数返回的值是通用 ee.ComputedObject 实例,必须显式转换。请参阅未知对象类型转换。
Error: dict.get('val').add(5) -> Correct: ee.Number(dict.get('val')).add(5)
混合使用客户端和服务器方法:确保您没有在 Earth Engine 对象上使用标准 JavaScript 或 Python 方法(例如 .push() 或 .append())。请参阅避免混合使用客户端和服务器函数。
Error: list.push(4) or list.append(4) -> Correct: list.add(4)
方法不可用:如果对象类型正确,且方法存在于文档中或之前有效但现在失败,请报告 bug。
为什么我不能使用 ee.Image("image") * 2 等基本数学运算?
在 EE 中,您不应混用服务器端和客户端对象或操作。 对 EE 对象的所有操作都在服务器端执行。任何客户端计算都不会按预期执行。如需了解详情,请参阅此页面。
如何使用 for 循环或 if/else 语句?
Earth Engine 编程使用函数式语言,因此循环和条件运算应使用等效概念(如 map 或 filter)来表示。如需了解详情,请参阅此页面。
如何在图片或视频中显示文字标签?
没有对文本标签的内置支持,但您可以:
- 使用第三方 JS 软件包。 查看示例
- 使用第三方 Python 软件包 geemap。
- 使用 EE QGIS 插件,通过 QGIS 导入 EE 图像
我可以使用一些标准调色板吗?
使用第三方 JS 软件包 ee-palettes。
如何创建使用 Earth Engine 的自有网站?
对于基本应用,请使用 Earth Engine 应用。在更复杂的情况下,您可以构建由 EE 提供支持的 App Engine 应用。
地图 ID 的运作方式
地图 ID(在整个 API 中称为 mapid)是允许客户端提取地图图块的密钥。每个 ID 都是通过向 getMapId 端点提供图片表达式而创建的哈希。生成的 ID 是指向图片表达式和用户凭据的键,这些凭据将在后续阶段用于生成图块。
请求地图图块时,需要指定图块的位置(x、y、zoom)以及 mapid(图片和凭证的密钥)。您可以重复使用同一 ID 来加载多个地图图块。mapid 密钥的重复使用没有限制,但会在几个小时后过期。我们不会发布有关这些 ID 的保留时长的具体时间范围,但您编写的任何代码都应能够应对 ID 过期的情况。
创建这些 ID 涉及存储少量数据和验证凭据,因此最好尽可能长时间地重复使用它们。没有专门与 getMapId 端点关联的 API 配额,但任何涉及以接近获取图块的速率创建 mapid 对象的工作流都可能存在问题。Earth Engine 没有用于移除、列出或管理这些 ID 的 API 端点,因为这些是临时资源。
为什么 ee.Algorithms.If() 会同时输出 true 和 false 情况?
function a() { print("true"); }
function b() { print("false"); }
// Prints 'true' and 'false'.
ee.Algorithms.If(true, a(), b());
If() 算法的工作方式与 Earth Engine 上的所有其他算法一样,即必须先对所有参数求值,然后算法本身才能运行。该算法会同时获取 trueCase 和 falseCase 结果,然后根据 condition 参数选择并返回其中一个结果,但必须先执行这两条路径,才能将这些值传递给该算法。
我收到“Request payload size exceeds the limit”(请求载荷大小超出限制)错误
您尝试向 Earth Engine 发送一个非常大的请求。这通常发生在代码使用大量客户端“for”循环或通过许多几何图形对象构建 FeatureCollection 时。在后一种情况下,请勿在脚本中创建此类几何图形,而是生成一个包含这些几何图形的 CSV 文件,并将其上传到表资源中。
ee.Image.clip() 与 ee.Filter.bounds() 有何区别?
请参阅此 GIS Stack Exchange 话题。
ee.Image.clip() 函数会遮盖不与给定 ee.Geometry 或 ee.Feature 相交的像素,使其在可视化中透明,并在计算中排除。您可以将其概念化为从图片中剪裁像素。
ee.Filter.bounds() 函数会根据图片与 ee.Geometry 或 ee.Feature 的交集,从 ee.ImageCollection 中滤除 ee.Image 对象。它用于将分析范围限制为仅与给定区域相交的图像,这有助于优化表达式。
如何将图片像素转换为特征集合,每个像素对应一个特征?
使用 ee.Image.sample() 函数。请参阅该函数的 API 参考文档页面中的用法示例。
ee.ImageCollection.merge() 与 ee.ImageCollection.combine() 有何区别?
ee.ImageCollection.merge() 函数会将两个集合中的所有图像合并为一个集合,无论它们各自的图像是否具有重合的波段、元数据、CRS 或比例。它是两个集合的并集。combine() 方法会将两个集合中匹配图片的波段合并到一个集合中。匹配的图片具有相同的 ID(system:index 属性)。它是基于图片 ID 的两个集合的内联接,其中匹配图片的波段会合并。对于匹配的图片,次要图片中的波段会附加到主要图片(可选择覆盖)。如果没有匹配的映像,则返回空集合。
如何按多个日期区间过滤图片集?
请参阅此 GIS Stack Exchange 话题。
将多个集合merge()在一起,或使用 ee.Filter.or()。
如何围绕给定点创建边界框?
// Buffer the point by a chosen radius and then get the bounding box.
var LNG = -117.298;
var LAT = 45.162;
var point = ee.Geometry.Point([LNG, LAT]);
var buffer = point.buffer(30000); // half of box width as buffer input
var box = buffer.bounds(); // draw a bounding box around the buffered point
Map.centerObject(box);
Map.addLayer(point);
Map.addLayer(box);
// Map the buffer and bounds procedure over a point feature collection.
var pointCol = ee.FeatureCollection([
ee.Feature(ee.Geometry.Point([LNG + 1, LAT])),
ee.Feature(ee.Geometry.Point([LNG - 1, LAT]))
]);
var boxCol = pointCol.map(function(feature) {
var box = feature.buffer(30000).bounds();
return feature.setGeometry(box.geometry());
});
Map.addLayer(boxCol);
Data Catalog
您能添加数据集 X 吗?
按照数据集请求指南提交数据集请求 bug。
您还可以将数据上传到 Earth Engine 主文件夹。请参阅导入栅格数据和导入表数据。
现有数据集有新版本
按照数据集请求指南提交数据集 bug,并指明您正在请求数据集更新。
现有数据集未更新或缺少资产
在报告问题之前,请尽可能验证所选资产是否确实存在于数据集提供商的网站上。如需了解详情,请参阅有关缺少图片的指南。
如果您通过过滤 ImageCollection 来查找资产,请确保过滤条件不会过于严格。
具体而言,请注意以下几点:
ESA 未针对早期 1 级场景生成 Sentinel-2 SR(2 级数据)。
Landsat 在 2000 年之前没有全球覆盖。
现有数据集的值有误
在开发者论坛上发帖。 添加一个脚本,用于放大素材资源的原始分辨率,以便清楚地看到哪些值有误。请说明您具体在何处观察到了替代值。
我还可以去哪里询问数据集相关问题?
如需了解有关 NASA 数据集的问题,请参阅 NASA 地球数据论坛。
如需了解有关在 Copernicus 数据集上运行的工具箱的问题,请参阅 S1、S2 和 S3 论坛。
EE 目录有多大?
截至 2023 年 10 月,该目录包含 1, 000 多个数据集。其占用的存储空间超过 90 PB(考虑无损压缩后)。
EE 中的数据多久更新一次?
通常,所有持续更新的数据集至少每天更新一次(尽管并非所有此类数据集每天都有新数据)。有些数据集每天会更新多次。但是,没有任何政策可确保目录中存在最新资源。
如何以编程方式查看 EE 目录的内容?
数据集列表会以 STAC 格式导出到 Google Cloud Storage 存储桶 gs://earthengine-stac。条目文件为 catalog.json。
我能否使用 Google 地图数据或图像进行分析?
Google 不会许可或出售底图数据用于分析。
如何查找资产的提取日期?
'system:version' 资源属性是提取时间戳,格式为自 Unix 纪元以来的微秒数。以下示例将 Landsat 图像的提取时间戳转换为人类可读的格式。
var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508');
print('Ingest date', ee.Date(image.getNumber('system:version').divide(1000)));
Earth Engine 目录是否包含 JSON-LD 元数据?
是的,JSON-LD 元数据嵌入在目录 HTML 页面中。例如,Sentinel-2 页面包含以下代码块:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Earth Engine Data Catalog",
"item": "https://developers.google.com/earth-engine/datasets"
},{
"@type": "ListItem",
"position": 2,
"name": "Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",
"item": "https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED"
}]
}
</script>
Landsat
simpleComposite 算法是如何实现的?
服务器端实现等效于此 JavaScript 代码。
如何根据 Landsat 地表反射率数据创建无云合成图像?
Landsat 2 级(地表反射率)数据有多个质量波段,可用于遮盖云层和其他不需要的图像伪影。这篇 GIS Stack Exchange 帖子中提供了一个示例,展示了如何使用这些波段处理 Landsat 8 SR 图像并创建无云中位数合成图像。开发者指南中的监督式分类示例也使用相同的过程来构建无云合成图像。
是否需要进行跨传感器 Landsat 地表反射率协调?
Roy 等,2016 包含对 Landsat 7-8 TOA 与地表反射率之间的反射率差异的分析。他们发布了 OLS 和 RMA 系数,以便读者可以将一个传感器数据的反射率值转换为另一个传感器数据的反射率值。论文的最后一行指出:“尽管传感器差异非常小,但它们可能会产生重大影响,具体取决于 Landsat 数据的应用。”不过,该分析基于收集前的数据。
在 Collection 1 和 Collection 2 重新处理期间所做的改进可能会影响传感器之间的关系,但据我们所知,目前还没有针对 Collection 1 或 Collection 2 数据进行过类似于 Roy 等人 (2016) 的分析。尽管没有进行正式分析,但有影响力的 Landsat 用户似乎普遍认为,无需对 Collection 2、Level 2(地表反射率)数据进行校正。例如,在回答有关是否需要对 Collection 2、Level 2 进行协调的问题时,Landsat 科学团队的 Mike Wulder 指出,根据相关应用(包括土地覆盖制图和变化检测)的性质,Collection 2 地表反射率产品非常合适且可靠,无需进行跨传感器调整。
如何遮盖 MSS 图像中的云和云阴影?
适用于 JavaScript 代码编辑器的第三方 msslib 模块包含 MSScvm 算法的实现,以及用于探索和准备 MSS 数据的其他实用函数。
数据管理
我上传的数据归谁所有?
根据 Earth Engine 服务条款,客户拥有其上传到 Earth Engine 的数据。
我无法上传数据!
在代码编辑器右上角的“Tasks”(任务)窗格中查看上传任务状态。您还可以查看专用任务页面。
如果没有任务,您可能尝试过通过代码编辑器上传文件,但由于网络问题,文件未完成上传,因此从未创建任务。尝试使用其他浏览器或其他计算机。
如果存在失败的任务,请检查其显示的错误。如果没有具体的错误消息,请先验证文件是否损坏,方法是针对栅格文件运行 gdalinfo,针对矢量文件运行 ogr2ogr。这些命令将尝试从源文件中读取所有数据,并在文件损坏时显示错误。
gdalinfo 调用示例:
gdalinfo -mm -stats -checksum file.tif
将 in.shp 转换为 out.csv 的 ogr2ogr 调用示例:
ogr2ogr -lco GEOMETRY=AS_WKT -f CSV out.csv in.shp
如果文件看起来有效,请在开发者邮寄名单中以文本(而非屏幕截图)形式发布失败的任务 ID。任务 ID 的格式如下:4C25GIJBMB52PXTEJTF4JLGL。如果可能,请将源文件设为可公开读取。如果是私有文件,请仅与 earthengine@google.com 共享,以便 Earth Engine 团队进行检查。如果无法共享源文件,请至少提供 gdalinfo -mm -stats -checksum 的输出。
如果 Earth Engine 不支持某种投影,您需要先对数据进行重新投影,然后再使用 gdalwarp 等工具上传。
如何上传 NetCDF 或其他不受支持的光栅格式的文件?
只有 GeoTIFF 文件可以上传到 Earth Engine。其他与 GDAL 兼容的格式可以使用 gdal_translate 转换为 GeoTIFF。示例:
gdal_translate -co COMPRESS=DEFLATE file.nc file.tif
请注意,某些 NetCDF 或 HDF 文件由多个子数据集组成,这些子数据集可通过 gdalinfo 发现。在这种情况下,gdal_translate 命令将如下所示(请注意英文双引号之间的路径):
gdal_translate HDF4_EOS:EOS_GRID:"/tmp/MCD12Q1.A2001001.h00v08.005.2011055224312.hdf":MOD12Q1:Land_Cover_Type_1 file.tif
NetCDF 文件有时不包含 GDAL 可识别的投影。在这种情况下,您需要在 gdal_translate 命令行中设置投影和空间范围。示例:
gdal_translate -a_srs EPSG:4326 -a_ullr -180 90 180 -90 file.nc file.tid
我可以对上传的 GeoTIFF 使用哪些压缩算法?
对于上传,GeoTIFF 可以使用 DEFLATE、JPEG、JPEG-XL/JXL、LERC、LERC_DEFLATE、LERC_ZSTD、LZMA、LZW、WEBP 或 ZSTD 进行压缩。Earth Engine 就地读取的 COG(使用 ee.Image.loadGeoTIFF() 或作为 COG 支持的资产)可以使用 DEFLATE、JPEG、LZW、PACKBITS、ZSTD 或不压缩(请参阅 COG 最佳实践)。ZSTD 是一个不错的整体选择,因为它解压速度快,同时仍能对大多数映像提供良好的压缩。
如需在使用 gdal_translate 时应用 ZSTD 压缩,请添加以下选项。如果数据包含浮点值,请将 PREDICTOR 更改为 3。(对于您计划注册为 COG 而不是上传的文件,请参阅 COG 注册指南。)
gdal_translate in.tif out.tif \
-co BIGTIFF=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co PREDICTOR=2 \
-co ZSTD_LEVEL=16 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS
我的光栅提取已运行数天,但尚未完成。
使用 gdalinfo 检查您的文件是否设置了以下 GDAL 选项:INTERLEAVE=PIXEL。对于具有此选项和许多波段的文件,提取可能永远无法完成,因为此类文件的布局会导致读取速度非常慢。
请尝试在上传之前将此类文件转换为波段交错布局:
gdal_translate -co "INTERLEAVE=BAND" src.tif dst.tif
这适用于提取;COG 支持的资源支持两种交错(请参阅单波段文件与多波段文件)。
我上传的栅格与底图不匹配。
如果数据与底图略有偏移,则投影可能具有不正确的基准(关于地球形状的假设)。这种情况最常发生在无法在 GDAL 元数据中完全编码的正弦投影中。如果您知道目标投影应该是什么(例如,对于使用 MODIS 正弦投影的文件,应为 SR-ORG:6974),请在命令行上传期间设置 --crs 标志,或设置上传清单的 crs 字段。
如果数据严重失真或位置完全错误,则投影或仿射变换可能不正确。
我的光栅仅显示在东半球。
您可能上传了跨越经度范围 [0, 360] 的全球栅格。 不过,Earth Engine 要求栅格必须在 [-180, 180] 范围内。在提取之前,请交换光栅的左半部分和右半部分。请参阅这些 GIS Stack Exchange 建议。
为什么我提取的分类图片看起来有斑点?
您可能使用了默认的 MEAN
金字塔政策。对于分类图片,应使用 MODE 金字塔政策。对于 QA/位掩码图片,应使用 SAMPLE 金字塔政策。
我收到以下错误:无法将无数据值 -128.0 应用于 Short<0, 255> 类型的波段 #0。
GDAL 无法将单字节波段视为包含有符号整数,因此会将此类波段读取为无符号整数。这会与负的无数据值冲突。
如果您的值实际上是有符号整数,请使用清单上传,并将以下内容添加到包含文件的图块集部分:data_type: "INT8"
如果您的值为无符号整数,则您的文件具有错误的 nodata 值。您可以在上传时使用正确的数据值(或一个永远不会出现的值,如果存在的话)覆盖它。您还可以使用 gdal_translate -a_nodata 更改 nodata 值,或使用 gdal_edit.py -unsetnodata 将其移除。
如何上传 GeoJSON 或其他不受支持的矢量格式的文件?
使用 ogr2ogr 将 OGR 兼容格式转换为 CSV 或 SHP。示例:
or2ogr -f "ESRI Shapefile" file.shp file.kml
请注意,在 CSV 上传中,几何图形列可以包含 GeoJSON。
我想使用 Python 上传数据,或一次上传多个文件。
使用命令行上传。 此类上传要求先将源文件放入 GCS (Google Cloud Storage) 存储桶中。如果您在免费层级限制范围内使用 GCS,则无需支付任何费用 - 请参阅价格页面。
我想上传一个拆分为多个图块的大型栅格拼接图。
如果这些文件都具有相同的投影和像素大小,只需将它们一起上传到同一资源中,系统会自动对它们进行拼接。
如果文件具有不同的投影或像素大小,则无法将其拼接成单个栅格资源。而是应将每个图块作为单独的资源上传到同一个 ImageCollection 中,然后使用 ImageCollection.mosaic() 进行拼接
我尝试上传拼接图片,但收到有关图块不匹配的错误。
Earth Engine 栅格拼接图的图块必须具有相同的投影和像素大小。此外,图块必须与像素边界精确对齐。
我尝试从 GCS 存储桶上传文件,但 Earth Engine 找不到该文件。
您可能使用了不同的 Google 账号进行 GCS 上传和连接到 Earth Engine。确保您用于连接到 Earth Engine 的账号可以读取 GCS 文件。如果浏览器多账号登录功能让您感到困惑,请在无痕式浏览器窗口中连接到 Earth Engine。
我想一次导出多项资产。
您必须单独导出每个映像。
我想通过一条命令移动或删除 Folder 或 ImageCollection。
earthengine rm -r 会删除文件夹或集合及其中的所有内容,但一次只能删除一项资产,因此删除大型集合可能需要数小时。如需加快速度,请通过脚本并行删除子级,然后删除父级(请参阅处理大型集合);同样的方法也适用于任何平面集合或文件夹。包含其他文件夹或集合的文件夹必须自下而上清空,因为容器只有在清空后才能删除。如需移动,请以相同方式使用 mv。
我想直接从 EE 外部访问 Earth Engine 数据。
QGIS 有一个 Earth Engine 插件。
GDAL 具有 Earth Engine 驱动程序。
其他系统可以使用 EE REST API。
我想更新 Earth Engine 资产的一部分,而无需完全重新注入。
无法更新上传到 EE 的栅格或矢量数据。 只能更新资产元数据属性。COG 支持的资源除外,您可以通过重新注册并启用覆盖,将这些资源指向更新后的 Cloud Storage 文件。
我即将失去账号访问权限。我该如何处理我的资产?
如果原始账号的政策允许数据传输,请与其他账号共享您的资产,然后将资产复制到新账号。如果要移动大量资产,请使用命令行复制实用程序。
如果账号被删除,其拥有的素材资源将无法再访问。
我导出的图片位置不正确。
对于某些投影(例如正弦投影或圆锥投影),GeoTIFF 文件有时无法存储所有必要的投影参数。这会导致导出的文件在桌面 GIS 工具中查看或重新注入 EE 时出现在错误的位置。
如需解决此问题,请指定一个已知可与 GeoTIFF 文件搭配使用的导出 crs 参数,例如,使用包含您感兴趣区域的 UTM 区域的 EPSG 代码。
导出的地图项集合资产不会保留我设置的属性。
Export.table.* 函数不会在输出中保留表级属性。对于许多输出格式(例如 CSV、GeoJSON),不支持此类元数据。Export.table.toAsset 函数可以支持表级属性,但目前不支持。
以 CSV 格式导出到云端硬盘的表格会转换为 XLSX 格式。
根据您的 Google 云端硬盘设置,您从 Earth Engine 导出的 CSV 表格可能会转换为 XLSX 文件,并产生意外影响,例如数据类型转换。请按照以下步骤修改后续导出的行为。
- 在网页版 Google 云端硬盘中,点击右上角的“设置”齿轮图标。
- 点击“设置”。
- 滚动到“将上传的文件转换为 Google 文档编辑器格式”,然后清除该选项。
云优化 GeoTIFF (COG)
如需了解背景信息,请参阅 COG 概览和 COG 注册指南。
我分享了由 COG 支持的资产,但我的协作者收到权限错误。
由 COG 支持的资产是指向 Cloud Storage 存储桶中文件的指针,因此协作者需要对 Earth Engine 资产和存储桶都具有读取权限。在存储桶上,向他们授予 Storage Object Viewer 和 Storage Bucket Viewer 角色;如果他们能看到资产,但遇到权限错误,通常意味着缺少这两个角色之一。请参阅配置权限。
我应该使用哪个 Cloud Storage 存储桶位置来存储 COG 资源?
仅支持少数美国位置,Earth Engine 会拒绝其他任何位置的存储桶的注册和读取请求。请参阅支持的存储桶位置。
我替换了 Cloud Storage 中的 COG 文件。为什么素材资源无法加载,或仍然显示旧数据?
注册 COG 时,Earth Engine 会固定文件的对象生成(版本),因此就地覆盖文件不会更新资产。使用相同名称重新注册该素材资源,并启用覆盖功能;您无需先将其删除。请参阅更新、替换和删除由 COG 支持的资源。
如何判断由 COG 支持的素材资源指向哪个版本的文件?
素材资源的元数据 (ee.data.getAsset()) 会将固定的世代显示为文件 URI 的后缀。请参阅对象生成。
如果我删除了 Cloud Storage 中的 COG 文件,但未删除 Earth Engine 资产,或者反之,会发生什么情况?
它们是独立的。删除 Earth Engine 资源不会影响 Cloud Storage 中的文件,而删除文件会使资源保持原样,但通常会使其像素无法读取。请参阅独立生命周期。
删除或替换大型 COG 支持的 ImageCollection 的最快方法是什么?
Earth Engine API 中没有批量或递归删除功能,earthengine rm -r 一次只能删除一个资产。如果您要替换映像,请在启用覆盖的情况下重新注册映像,而不是将其删除;如果您要删除映像,请通过脚本并行执行。如需了解相关方法和脚本,请参阅处理大型集合。
为什么我的 COG 注册信息没有显示在“任务”标签页中?
注册 COG 是一个同步 API 调用,它只会为文件的元数据编制索引,而不是批量提取作业,因此不会创建任务。调用返回后,素材资源会立即显示在素材资源标签页中。请参阅提交注册请求。
我可以将多个 COG 文件合并为一个 Earth Engine 资产吗?
仅当每个文件包含同一场景的不同波段时:在清单中将每个文件列为单独的图块集,并将波段映射到图块集。您无法将空间相邻的文件拼接成一个由 COG 支持的资产;请将每个文件注册为 ee.ImageCollection 中的独立图片,并调用 mosaic()。请参阅清单限制。
COG 支持的资产可以使用哪些压缩方案、图块大小和像素类型?
如需了解支持的压缩方案、图块大小和像素数据类型,请参阅准备外部 COG 的最佳实践。Earth Engine 无法直接读取为 COG 的压缩格式的文件仍可作为标准资源上传。
我收到错误消息“无法在前 10000000 字节中读取 TIFF 的元数据”。
Earth Engine 在加载或注册文件时仅读取文件的开头部分;包含许多图块的大型图片和截断的文件会超出此限制。请参阅选择文件维度,了解限制以及如何保持在限制范围内。
当文件发生更改时,ee.Image.loadGeoTIFF() 与已注册资产有何不同?
ee.Image.loadGeoTIFF() 会在每次计算或地图图块请求时读取文件的当前版本,因此它会获取替换内容(在地图上不均匀,因为渲染的地图图块会保持缓存状态)。已注册的素材资源始终会固定其注册时所用的代次,并且必须重新注册才能看到新文件,但作为交换,其占用空间和元数据会被编入索引,这使得它可以在大型集合中使用。请参阅从 Cloud Storage 读取 COG。
代码编辑器
我无法登录代码编辑器,因为它提示我使用错误的账号。
退出,在“选择账号”页面中选择已注册使用 Earth Engine 的账号,然后在第二个“选择账号以继续使用 Earth Engine 代码编辑器”页面中重新选择同一账号(确切措辞可能有所不同)。
我想截取一张全球地图,但我不喜欢 Web 墨卡托投影。
代码编辑器中使用的地图投影是 Web Mercator ('EPSG:3857')。它会放大远离赤道的对象的大小,使高纬度区域看起来比实际大得多(与赤道附近的区域相比)。您无法更改代码编辑器地图画布的投影,但可以使用 ee.Image.changeProj 方法在 Web 墨卡托画布上以您选择的投影“绘制”图片。如需查看在罗宾森投影中向代码编辑器地图显示全球 DEM 的示例,请参阅该方法的 API 参考文档。请注意,此方法仅适用于可视化目的,因为代码编辑器的检查器和绘图工具仍在使用 Web 墨卡托投影。
我的脚本无法保存 (Script error: Unknown commit)。
如果您在保存脚本时收到 Script error: Unknown commit 消息,则可能意味着您要保存到的代码库不同步。导致此状态的原因不尽相同,且难以确定。如需解决此问题,请尝试使用“脚本”标签页右上角的按钮刷新脚本列表。如果这样做不起作用,请尝试通过“脚本”标签页中的“新建”按钮创建一个新代码库,并将脚本保存在其中(您可能需要将脚本从不同步的代码库移至新代码库)。
为什么我在代码编辑器中反复看到 400 错误?
如果您在代码编辑器中反复看到 400 错误,请前往 https://myaccount.google.com/connections,在应用和服务列表中找到“Earth Engine 代码编辑器”,选择该应用,然后选择“删除您与 Earth Engine 代码编辑器的所有关联”并确认。然后打开代码编辑器并重新进行身份验证。
如何恢复已删除的脚本和文件夹?
如果您不小心删除了现有代码库中的脚本或文件夹,完整的提交记录会保留在我们服务器上的 Git 日志中。您可以使用标准 Git 命令行工具在本地克隆代码库,从而恢复已删除的脚本或文件夹。
不过,删除整个代码库 (users/username/repository) 会从 earthengine.googlesource.com 中永久移除该代码库及其提交记录,并且无法撤消或恢复。
如需了解如何生成 Git 凭据、克隆代码库以及恢复已删除的文件或文件夹,请参阅脚本恢复和代码库迁移指南。
如何重命名脚本代码库根目录?
您的脚本根目录 (users/username) 会绑定到您最初注册的 Earth Engine 账号。无法直接在后端重命名,因为这样做会破坏使用 require('users/username/repository:...') 路径导入模块化代码的任何外部脚本或协作者项目。
如果您需要新的命名空间,受支持的解决方法是将您的工作迁移到新账号:
- 使用新的 Google Identity 注册新的 Earth Engine 账号(这会生成一个干净的
users/new_username根目录)。 - 按照代码库迁移说明克隆旧代码库,并将其完整历史记录推送到新的空代码库。
重要注意事项:
- 公开模块:如果您有其他人依赖的公开模块,我们强烈建议您保持旧账号和代码库处于活跃状态,以免破坏他们的工作流。
- 私有脚本:如果您的脚本完全是私有的,则可以更新
require()导入语句以引用新的代码库路径,然后安全地删除旧代码库。