【GEE】4、 Google 地球引擎中的数据导入和导出

news2025/1/15 19:37:45

1简介

在本模块中,我们将讨论以下概念:

  1. 如何将您自己的数据集引入 GEE。
  2. 如何将来自遥感数据的值与您自己的数据相关联。
  3. 如何从 GEE 导出特征。

2背景

了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求,但它们的选择很可能也受到当地天气条件等动态因素的影响。除了直接观察之外,很难将动物行为与天气条件联系起来。在这个单元中,我们将从美洲狮收集的 GPS 项圈数据与通过 GEE 访问的 Daymet 气候数据集的每日温度估计值集成。

这将要求我们将自己的数据引入 GEE,将天气值连接到点位置,并将这些增值数据从 GEE 中带回以进行进一步分析。

在加利福尼亚州洛杉矶的顶级旅游目的地之一附近拍摄的山狮的相机陷阱照片。照片:地球岛杂志
 

2.1 GPS定位数据

Mahoney 等人 2016 年的一项研究使用 GPS 项圈来跟踪犹他州中部的两只美洲狮和 16 只土狼的运动。这些数据用于了解这两个物种个体的一些行为模式。任何人都可以在Movebank网站上访问这些研究人员在研究期间收集的数据。该网站托管来自世界各地的动物运动数据集。虽然某些 Movebank 数据集仅列出作者的联系信息,但其他数据集允许您在其 web 地图上显示信息,还有一些允许您下载数据。
 

Movebank.com 上的交互图示例,可让您搜索有关动物运动的数据。
 

2.2 Daymet 天气数据

Daymet 数据集提供了每日天气参数的网格估计。每天有 7 个地表天气参数可用,空间分辨率为 1 公里 x 1 公里,空间范围为北美。ORNL DAAC 可以通过各种工具和格式访问 Daymet 数据集,从而提供丰富的每日地表气象资源。资料来源: Daymet/NASA

Daymet 数据以 1 公里 x 1 公里的空间分辨率提供每天的数据,是美洲狮与景观相互作用的时间和空间尺度的重要资源。总共有七个测量值。这使我们能够检查天气的多个方面,以评估它如何影响行为。

与 GEE 中的 Daymet 图像关联的元数据。
 

如果您有兴趣了解有关全球可用气候数据的更多信息,请查看 单元6。

3将您自己的数据带入 Earth Engine

在本练习中,我们将讨论如何将您自己的数据移动到 GEE、从数据集中提取值以及从 GEE 中导出这些值。将数据带入 GEE 的过程一直在迅速变化,与大多数事情一样,最好直接转到文档以查看最新更新。该信息可以在这里找到。

3.1清理数据

动物运动数据作为 csv 文件下载。要将它们带入 GEE,我们需要将它们转换为 shapefile。虽然有很多方法可以将 csv 文件转换为 shapefile,但我们将使用 R。下面的代码包含进行此转换所需的所有内容。可以在此处找到有关如何在 R 中将 csv 文件转换为 shapefile 的详细信息。

代码的一些复杂性来自重命名列以删除“.”。为了符合 GEE 对命名约定的要求,这是必要的。虽然此特定细节不在文档中,但它在帮助论坛上的帖子中有所描述。

您不需要运行此代码,它供您将来参考

# Load necessary libraries
library(sp)
library(rgdal)
library(dplyr)
 
# read in CSV of data
baseDir <- "The folder your csv is held in"
data <- read.csv(paste0( baseDir, "/Site fidelity in cougars and coyotes, Utah_Idaho USA (data from Mahoney et al. 2016).csv"))
 
# convert to spatial points data frame
# remove all NA values from lat and long columns
names(data)
noNAs <-  data[complete.cases(data[ , 4:5]),]
# filter to select animal of interest
glimpse(noNAs)
cougarF53 <- noNAs %>%
  filter(individual.local.identifier == "F53") %>%
  dplyr::select("event.id", "timestamp", "location.long","location.lat")
 
# Unique GEE issue
# GEE does not accept column names with dots So we will rename our columsn
colnames(cougarF53) <- c("id", "timestamp", "lon", "lat")
# check the time line of data collection so we can match those dates in GEE
timeframe <- sort(cougarF53$timestamp)
 
print(paste0("The first time stamp is ", timeframe[1], " the last collection is ", timeframe[length(timeframe)] ))
 
 
# Create a spatial feature with the sp package
# only keep unique id as data
cougarF53Spatial <- sp::SpatialPointsDataFrame(coords = cougarF53[,3:4], data = cougarF53[,1])
# set coordinate reference system to WGS84, using the proj4str
crs(cougarF53Spatial) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "
 
# Export as shapefile
# write a shapefile
writeOGR(cougarF53Spatial, baseDir, "/cougarF53Locations", driver="ESRI Shapefile")

我们写出了 shapefile,每行只有一个列,一个唯一的 id。我们这样做是因为我们计划在 GEE 之外进行大部分分析,因此无需加载所有额外数据。唯一 ID 将允许我们将来自 GEE 的增值数据与原始数据集连接起来。

3.2引入资产

  • 坐标参考系统:首先,重要的是要注意 GEE 使用的投影是WGS 1984 EPSG: 4326。因此,您想要带入 GEE 的所有数据都需要相同的坐标参考系统。请记住 WGS1984 是一个地理坐标系。您不希望数据上有投影坐标系。

  • 上传 shapefile:在上面的 R 代码中,我们将数据的 csv 文件转换为 shapefile,并定义坐标参考系统 (CRS) 以匹配 GEE 的预期 (WGS 1984)。当您将功能加载到 Google 地球引擎中时,您将添加与您的 GEE 帐户相关联的个人资产。


 

您将能够在任务窗格中监控上传进度。


 

上传后,您可以通过代码编辑器左侧的资产窗格编辑资产。这允许您设置共享参数。对于此示例,任何人都可以读取资产。这意味着运行代码的任何人都将能够使用数据集,即使他们不拥有它或没有下载它。

共享个人资产的示例。
 

上传 shapefile 的过程可能需要一段时间,因此我们提供了一个脚本链接,而不是让您完成该过程,该脚本已经加载了本课程所需的数据。带有预加载数据集的代码。请将此脚本用作本课剩余部分的起点。

运行完此内容后,我们建议您加载自己的 shapefile。这可以是您的数据,或者如果您想要快速简便的数据,请尝试使用Natural Earth Data中的 shapefile 。这是一个用于各种地图比例的地理数据的绝佳站点。上面的链接将带您进入的 1:110m 物理向量非常通用,因此加载速度比数据更丰富的层快得多。

每项资产都具有与您在 Google 云端硬盘上可能拥有的其他功能类似的共享偏好。

import允许您将新获取的资产添加到脚本中。这与将 imageCollection 导入脚本非常相似。

share允许您定义谁可以查看和编辑资产。

delete使用它来清理空间,但请记住,一去不复返了。

加载资产后,通过双击资产面板中的资产名称或将鼠标悬停在名称上时按下出现在功能右侧的小箭头图标,将其导入脚本。将功能重命名为具有描述性的名称。然后在地图上将其可视化,以确保该功能看起来符合您的预期。

在预加载的脚本中,您可以看到我们已经完成了这些步骤。我们还添加了一个打印语句来访问数据结构。


  
  
  1. // Imported the data and not add it to the map and print.
  2. Map. addLayer(cougarF53, {}, "cougar presence data");
  3. print(cougarF53, "cougar data");
 

您可以使用检查器工具查看与新资产关联的属性数据。

将这些点可视化后,制作一个包含我们感兴趣区域的几何特征。我们将使用几何特征来过滤我们的气候数据。

您可以通过选择方形几何特征并绘制一个包含这些点的框来完成此操作。

在这些点周围绘制几何特征以过滤气候数据。
 

3.2.1上传栅格

引入栅格的过程与我们刚刚使用 shapefile 进行的过程相同。图像集合(栅格集)是更复杂的数据类型,还有一些其他要求,您可以在此处阅读。

3.3定义天气变量

在本课中,我们使用 Google Earth Engine 作为将遥感数据(即我们的栅格)与我们的点位置相关联的方法。虽然这个过程在概念上是直截了当的,但它确实需要一些工作才能完成。加载我们的点后,下一步是导入 Daymet 天气变量。

3.3.1调用气候资料日

我们使用的是 NASA 派生的数据集 Daymet V3,因为它具有 1 公里的空间分辨率,并且它可以测量美洲狮所经历的环境条件。我们将通过调用数据集的唯一 ID 并将其过滤到我们的边界框几何图形来导入它。

// Call in image and filter.
var Daymet = ee.ImageCollection("NASA/ORNL/DAYMET_V3")
.filterDate("2014-01-01", "2017-08-01")
.filterBounds(geometry)
.select('tmin')
.map(function(image){return image.clip(geometry)});
 
print(Daymet,"Daymet");
Map.addLayer(Daymet, {}, "Daymet");

打印语句中 Daymet 数据结构的视图。
 

从打印语句中,我们可以看到这是一个包含 267 张图像的图像集合(尽管您的图像总数可能会随着数据集的变化而变化)。每幅图像都有七个与特定天气测量相关的波段。现在两个数据集都已加载,我们将把美洲狮的发生数据与天气数据相关联。

3.4提取值

加载我们的点和图像后,我们可以调用一个函数,根据美洲狮的已知位置从底层栅格中提取值。我们将使用该ee.Image.sampleRegions函数来执行此操作。在 Docs 选项卡下搜索ee.Image.sampleRegions()函数以熟悉它所需的参数。

ee.Image.sampleRegions()是一个图像的函数,所以如果我们试图在 Daymet 上调用它,ImageCollection我们会得到一个错误。为了解决这个问题,我们将把 Daymet 图像集合转换为多波段图像。每天的七次测量中的每一次都将成为我们多波段图像中的一个特定波段。这个过程最终将对我们有所帮助,因为每个波段都是由收集日期和显示的变量定义的。我们可以使用这些信息来确定哪些数据与美洲狮在特定日期的位置有关。

重要提示:在图像集合中有许多图像,我们将创建具有大量波段的单个图像。因为 GEE 非常擅长数据操作,所以它可以处理这种类型的请求。

// Convert to a multiband image and clip.
var DaymetImage = Daymet
  .toBands()
  .filterBounds(geometry);
 
print(DaymetImage, "DaymetImage");

显示从图像集合转换为多波段图像的结果的打印语句。

现在我们有了一个多波段图像,我们可以使用该sampleRegions函数。您需要考虑此函数的三个参数。

Collection采样数据将与之关联的矢量数据集。

Properties定义将保留矢量数据集的哪些列。在这种情况下,我们希望保留“id”列,因为我们将使用它来将此数据集连接回 GEE 之外的原始数据。

Scale:这是指数据集的空间尺度(像元大小)。比例应始终与栅格数据的分辨率相匹配。如果您不确定栅格的分辨率是多少,请使用搜索栏搜索数据集,该信息将出现在文档中。

// Call the sample regions function.
var samples = DaymetImage.sampleRegions({
  collection: cougarF53,
  properties: ['id'],
  scale: 1000 });
print(samples,'samples');

从打印语句中,我们可以看到我们的点位置现在具有与之关联的天气测量值。同样,您的结果可能看起来略有不同。
 

3.5 导出

3.5.1将点导出为 Shapefile

我们有一系列与美洲狮 57 已知位置相关的每日天气数据。虽然我们可以在 GEE 中更多地使用这些数据,但很容易将它们导入 R 或 Excel。有几个选项可以定义导出数据的最终位置。一般来说,将数据保存到 Google Drive 帐户是一个安全的选择。我们将使用字典(用大括号表示)来定义export.table.toDrive()函数的参数。

shapefile 字段限制:一个 shapefile 只能包含 255 个字段;这些数据有 1869 个。因此,我们将数据导出为 csv 文件。

// Export value added data to your Google Drive.
Export.table.toDrive({
  collection: samples,
  description:'cougarDaymetToDriveExample',
  fileFormat: 'csv'
});

当您导出某些内容时,您的任务窗格将亮起。您需要通过选择运行按钮单独运行任务。


export运行具有函数的脚本后的任务栏示例。
 

当您选择运行按钮时,将出现以下弹出窗口。这允许您编辑导出的详细信息。

从 GEE 导出特征时出现的用户定义参数示例。
 

3.5.2导出栅格

在处理所有这些空间数据时,您可能已经意识到,在美洲狮上收集数据的时间段内显示中值的栅格可能是非常有用的信息。有关使用栅格的更多信息,请参阅5

为此,我们将对median()Daymet 图像集合应用一个 reducer 函数,为每个单元格中的每个参数生成一个中值。就像表格数据一样,我们将把这个多波段图像导出到 Google Drive。一旦我们使用该函数将图像集合转换为图像median(),我们就可以将其剪辑到geometry特征对象中。此要素将导出为多波段栅格。

// Apply a median reducer to the dataset.
var Daymet1 = Daymet
  .median()
  .clip(geometry);
  
print(Daymet1);
 
// Export the image to drive.
Export.image.toDrive({
  image: Daymet1,
  description: 'MedianValueForStudyArea',
  scale: 1000,
  region: geometry,
  maxPixels: 1e9
});



有很多选项。最重要的选项之一是max.pixels设置。一般来说,GEE 不允许您导出超过 10^9 像素的栅格。使用该max.pixels参数,您可以将其提高到每张图像大约 10^12 像素。如果您为大于 10^12 像素的区域导出数据,您将需要创造性地了解如何从 GEE 中获取信息。有时这涉及将图像分割成更小的部分,或者在 GEE 之外重新评估如此大的图像的有用性。

4结论

虽然 Google 地球引擎可用于行星尺度分析,但它也是一种有效的资源,可用于使用您自己的数据快速访问和分析大量信息。本模块中介绍的方法是为您自己的数据集增加价值的好方法。在此示例中,我们使用了天气数据,但这绝不是唯一的选择!您可以将您的数据连接到 Google 地球引擎中的许多其他数据集。由您决定什么是重要的以及为什么重要。

4.1 完整代码

// Imported the data and not add it to the map and print.
Map.addLayer(cougarF53, {}, "cougar presence data");
print(cougarF53, "cougar data");
 
// Call in image and filter.
var Daymet = ee.ImageCollection("NASA/ORNL/DAYMET_V3")
.filterDate("2014-01-01", "2017-08-01")
.filterBounds(geometry)
.select('tmin')
.map(function(image){return image.clip(geometry)});
 
print(Daymet,"Daymet");
Map.addLayer(Daymet, {}, "Daymet");
 
// Convert to a multiband image and clip.
var DaymetImage = Daymet
  .toBands()
  .clip(geometry);
 
print(DaymetImage, "DaymetImage");
 
// Call the sample regions function.
var samples = DaymetImage.sampleRegions({
  collection: cougarF53,
  properties: ['id'],
  scale: 1000 });
print(samples,'samples');
 
// Export value added data to your Google Drive.
Export.table.toDrive({
  collection: samples,
  description:'cougarDaymetToDriveExample',
  fileFormat: 'csv'
});
 
// Apply a median reducer to the dataset.
var Daymet1 = Daymet
  .median()
  .clip(geometry);
print(Daymet1);
 
// Export the image to drive.
Export.image.toDrive({
  image: Daymet1,
  description: 'MedianValueForStudyArea',
  scale: 1000,
  region: geometry,
  maxPixels: 1e9
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习---SVM目标函数求解,SMO算法

1. 线性可分支持向量机 1.1 定义输入数据 假设给定⼀个特征空间上的训练集为&#xff1a; 其中&#xff0c;(x , y )称为样本点。 x 为第i个实例&#xff08;样本&#xff09;。 y 为x 的标记&#xff1a; 当y 1时&#xff0c;x 为正例&#xff1b;当y −1时&#xff0c;x…

✔ ★【备战实习(面经+项目+算法)】 11.5学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

【LeetCode力扣】287.寻找重复数

1、题目介绍 原题链接&#xff1a;287. 寻找重复数 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;nums [1,3,4,2,2] 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [3,1,3,4,2] 输出&#xff1a;3提示&#xff1a; 1 < n &l…

由于找不到vcomp140.dll,无法继续执行代码问题的5种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些奇怪的错误提示&#xff0c;其中最常见的就是“无法找到xxx.dll文件”。而其中一个常见的问题就是“找不到vcomp140.dll无法继续执行代码”这个错误通常会导致某些应用程序无法正常运行。那么&#xff0c;当遇到这个问题时&am…

腾讯云CVM服务器购买流程_省钱入口(一步步操作)

腾讯云服务器购买流程直接在官方秒杀活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是…

删除链表的倒数第 N 个结点

LeetCode 19. 删除链表的倒数第 N 个结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *n…

Sublime Text 4 激活教程,内含码(亲测有效) 原创

给大家分享一个 Sublime Text 4 免费注册方法&#xff0c;亲测可用&#xff0c;希望能帮助到大家&#xff0c;上面是我激活成功的截图。 前言 Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器。 Sublime Text具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图…

Glide transform CircleCrop()圆图,Kotlin

Glide transform CircleCrop()圆图&#xff0c;Kotlin import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load.resource.bitmap.CircleCropclass MainActivity : AppCompatActivity() {o…

【Mybatis小白从0到90%精讲】15: Mybatis配置打印SQL日志

文章目录 前言配置日志实现前言 日志(Log)是每个程序都不可或缺的一部分,它可以帮助开发人员诊断和调试问题。Mybatis,作为一款备受赞誉的ORM框架,自然也提供了强大的日志功能。 它不仅提供了内置的标准实现,还支持集成各种主流的日志框架,让我们可以轻松地查看最终执行…

C++入门指南:string类文档详细解析(非常经典,建议收藏)

C入门指南&#xff1a;string类 一、 string类解读二、 string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的容量操作2.3 string类对象的访问及遍历操作2.4 string类对象的修改操作2.5 string类非成员函数 一、 string类解读 string类文档 具体如下&#xff…

剑指JUC原理-12.手写简易版线程池思路

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

为什么要学中文编程?它能有哪些益处?免费版编程工具怎么下载?系统化的编程教程课程怎么学习

一、为什么要学习这个编程工具&#xff1f;能给自己带来什么益处&#xff1f; 1、不论在哪里上班&#xff0c;都不是铁饭碗&#xff1a;现在全球经济低迷&#xff0c;使得很多企业倒闭&#xff0c; 大到知名国企小到私营企业&#xff0c;大量裁员。任何人都无法保证自己现在的…

操作系统学习与思考

x86体系架构 x86是因特尔8086代芯片的CPU总线位数以及寄存器种类的规范&#xff0c;大部分操作系统都是以该规范作为基准来生产的 计算机组成 CPU&#xff0c;可以根据程序计数器进行取指令操作&#xff0c;并根据指令执行运算&#xff08;加、减、乘、除&#xff09;。运算所…

从0到1:腾讯云服务器使用教程

腾讯云服务器入门教程包括云服务器CPU内存带宽配置选择&#xff0c;选择云服务器CVM或轻量应用服务器&#xff0c;云服务器创建后重置密码、远程连接、搭建程序环境等&#xff0c;腾讯云服务器网txyfwq.com分享从0到1腾讯云服务器入门教程&#xff1a; 目录 腾讯云服务器入门…

多目标优化算法:多目标霸王龙优化算法(MOTROA)MATLAB

一、霸王龙优化算法 霸王龙优化算法&#xff08;Tyrannosaurus optimization&#xff0c;TROA&#xff09;由Venkata Satya Durga Manohar Sahu等人于2023年提出&#xff0c;该算法模拟霸王龙的狩猎行为&#xff0c;具有搜索速度快等优势。 参考文献&#xff1a; [1]Venkata …

pg14-sql基础(二)-排序与统计

排序 SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY first_name; --按字母&#xff0c;默认升序 ORDER BY hire_date ASC; --升序 ORDER BY hire_date DESC; --降序SELECT employee_id, first_name, last_name, hire_date, salary F…

[MICROSAR Adaptive] --- autosar官方文档阅读建议

目前互联网上没有太多的 Adaptive AUTOSAR 的学习资料,官方文档是一个很不错的途径。看过官方文档才发现,目前很多关于 Adaptive AUTOSAR 的文章都是官方文档的简化翻译,不如直接看官方文档更全面深入。 1 Adaptive AUTOSAR 文档官方下载地址 https://www.autosar.org/sta…

百面深度学习-循环神经网络

循环神经网络 什么是循环神经网络&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类用于处理序列数据的神经网络。你可以将它想象成一个机器&#xff0c;它不仅考虑当前的输入&#xff0c;还考虑之前接收过的输入。这使得它非…

Android---彻底掌握 Handler

Handler 现在几乎是 Android 面试的必问知识点&#xff0c;大多数 Adnroid 工程师都在项目中使用过 Handler。主要场景是子线程完成耗时操作的过程中&#xff0c;通过 Handler 向主线程发送消息 Message&#xff0c;用来刷新 UI 界面。 下面我们来了解 Handler 的发送消息和处…

Jupyter 两个炸裂的骚操作!

大家好&#xff0c;Jupyter的常用功能不多说了&#xff0c;关注我的粉丝相信都比较熟悉了&#xff0c;不了解的可以看看历史文章。 今天聊两个不太常见但很有用的骚操作&#xff0c;可以为我们节省大量的时间&#xff0c;提高效率。 下面我们开始介绍。 一、获取历史执行信息…