在 google 地球引擎中提取多边形中所有像素的值
extract the values for all pixels in a polygon in google earth engine
我定义了一个多边形
var polygon = ee.Geometry.Polygon([114, 0.37, 114, 2.04, 112, 2.04, 112, 0.37]);
和上面的多边形需要处理的数据集
var dataset = ee.ImageCollection('NASA/NEX-GDDP');
选定日期
var startDate = ee.Date('1980-01-01');
var endDate = ee.Date('1980-01-02');
数据集有 3 个波段 pr
、tasmax
和 tasmin
,我正在选择我需要处理的波段
var dataset = ee.ImageCollection('NASA/NEX-GDDP')
.filter(ee.Filter.date(startDate,endDate))
.filter(ee.Filter.bounds(polygon))
.select('tasmax');
Map.addLayer(dataset)
我想导出属于多边形的所有网格的数据
连同他们各自的经纬度。由于一天有 21 个特征 (GCM),
我期望最终数据的行数等于多边形 X 21 要素 (GCM) 中的网格数
var dailyImg = dataset.toBands();
Export.table.toDrive({
collection: dailyImg,
description: 'hist_tx',
fileFormat: 'CSV',
});
当我尝试这样做时,出现错误
错误:参数无效:'collection' 必须是一个 FeatureCollection。
我该如何解决这个问题?此外,即使在将我的空间区域限制为多边形之后,地图仍然
显示整个地球的数据?为什么会这样?
Error: Invalid argument: 'collection' must be a FeatureCollection.
Export.table
用于导出 tables,也称为 FeatureCollection
s。你有一张图片,不是 table.
从 Earth Engine 中获取数据的最高效 方法是使用 Export.image
,然后转换下载的 GeoTIFF 以适合您的 R 程序。然而,由于这个数据集非常小,将它下载为 CSV 格式就可以了,而用于此目的的工具是 ee.Image.sample
,它将 Image
的区域转换为 FeatureCollection
。
var collection = dailyImg.sample({
region: polygon,
geometries: true, // This specifies that you want the lat-long, rather
// than image samples without any position information.
});
如果导出它,您将获得 GeoJSON 格式的单列中的位置。这可能不是您想要的,因此我们可以将其转换为列:
var collection_with_latlon = collection.map(function (feature) {
var coordinates = feature.geometry().transform('epsg:4326').coordinates();
return feature.set('lon', coordinates.get(0), 'lat', coordinates.get(1));
});
Here's everything put together as a working example:
var polygon = ee.Geometry.Polygon([114, 0.37, 114, 2.04, 112, 2.04, 112, 0.37]);
var startDate = ee.Date('1980-01-01');
var endDate = ee.Date('1980-01-02');
var dataset = ee.ImageCollection('NASA/NEX-GDDP')
.filter(ee.Filter.date(startDate,endDate))
.filter(ee.Filter.bounds(polygon))
.select('tasmax');
Map.addLayer(polygon);
var dailyImg = dataset.toBands();
var collection = dailyImg.sample({
region: polygon,
geometries: true, // This specifies that you want the lat-long.
});
// Break point coordinates up into properties (table columns) explicitly.
var collection_with_latlon = collection.map(function (feature) {
var coordinates = feature.geometry().transform('epsg:4326').coordinates();
return feature.set('lon', coordinates.get(0), 'lat', coordinates.get(1));
});
print(collection_with_latlon);
Export.table.toDrive({
collection: collection_with_latlon,
description: 'hist_tx',
fileFormat: 'CSV',
});
In addition, even after restricting my spatial area to the polygon, the map still displays the data for the entire globe? Why is this happening?
仅将集合过滤为几何图形忽略不与几何图形相交的图像。在这种情况下,图像覆盖了整个地球,因此没有图像被过滤掉。为了将图像剪辑到集合中,您必须指定它,例如:
var dailyImg = dataset.toBands().clip(polygon);
但是,如果您使用 .sample()
,则没有必要这样做,因为该操作有其自己的区域参数,不会使用多边形之外的任何像素。
我定义了一个多边形
var polygon = ee.Geometry.Polygon([114, 0.37, 114, 2.04, 112, 2.04, 112, 0.37]);
和上面的多边形需要处理的数据集
var dataset = ee.ImageCollection('NASA/NEX-GDDP');
选定日期
var startDate = ee.Date('1980-01-01');
var endDate = ee.Date('1980-01-02');
数据集有 3 个波段 pr
、tasmax
和 tasmin
,我正在选择我需要处理的波段
var dataset = ee.ImageCollection('NASA/NEX-GDDP')
.filter(ee.Filter.date(startDate,endDate))
.filter(ee.Filter.bounds(polygon))
.select('tasmax');
Map.addLayer(dataset)
我想导出属于多边形的所有网格的数据 连同他们各自的经纬度。由于一天有 21 个特征 (GCM), 我期望最终数据的行数等于多边形 X 21 要素 (GCM) 中的网格数
var dailyImg = dataset.toBands();
Export.table.toDrive({
collection: dailyImg,
description: 'hist_tx',
fileFormat: 'CSV',
});
当我尝试这样做时,出现错误
错误:参数无效:'collection' 必须是一个 FeatureCollection。
我该如何解决这个问题?此外,即使在将我的空间区域限制为多边形之后,地图仍然 显示整个地球的数据?为什么会这样?
Error: Invalid argument: 'collection' must be a FeatureCollection.
Export.table
用于导出 tables,也称为 FeatureCollection
s。你有一张图片,不是 table.
从 Earth Engine 中获取数据的最高效 方法是使用 Export.image
,然后转换下载的 GeoTIFF 以适合您的 R 程序。然而,由于这个数据集非常小,将它下载为 CSV 格式就可以了,而用于此目的的工具是 ee.Image.sample
,它将 Image
的区域转换为 FeatureCollection
。
var collection = dailyImg.sample({
region: polygon,
geometries: true, // This specifies that you want the lat-long, rather
// than image samples without any position information.
});
如果导出它,您将获得 GeoJSON 格式的单列中的位置。这可能不是您想要的,因此我们可以将其转换为列:
var collection_with_latlon = collection.map(function (feature) {
var coordinates = feature.geometry().transform('epsg:4326').coordinates();
return feature.set('lon', coordinates.get(0), 'lat', coordinates.get(1));
});
Here's everything put together as a working example:
var polygon = ee.Geometry.Polygon([114, 0.37, 114, 2.04, 112, 2.04, 112, 0.37]);
var startDate = ee.Date('1980-01-01');
var endDate = ee.Date('1980-01-02');
var dataset = ee.ImageCollection('NASA/NEX-GDDP')
.filter(ee.Filter.date(startDate,endDate))
.filter(ee.Filter.bounds(polygon))
.select('tasmax');
Map.addLayer(polygon);
var dailyImg = dataset.toBands();
var collection = dailyImg.sample({
region: polygon,
geometries: true, // This specifies that you want the lat-long.
});
// Break point coordinates up into properties (table columns) explicitly.
var collection_with_latlon = collection.map(function (feature) {
var coordinates = feature.geometry().transform('epsg:4326').coordinates();
return feature.set('lon', coordinates.get(0), 'lat', coordinates.get(1));
});
print(collection_with_latlon);
Export.table.toDrive({
collection: collection_with_latlon,
description: 'hist_tx',
fileFormat: 'CSV',
});
In addition, even after restricting my spatial area to the polygon, the map still displays the data for the entire globe? Why is this happening?
仅将集合过滤为几何图形忽略不与几何图形相交的图像。在这种情况下,图像覆盖了整个地球,因此没有图像被过滤掉。为了将图像剪辑到集合中,您必须指定它,例如:
var dailyImg = dataset.toBands().clip(polygon);
但是,如果您使用 .sample()
,则没有必要这样做,因为该操作有其自己的区域参数,不会使用多边形之外的任何像素。