R实践——【rgplates】安装、介绍、入门

1. rgplates 安装

1.1 easy way

install.packages("rgplates")

1.2 备案方法

  • 从GITHUB安装稳定版本
install.packages(
    "https://github.com/adamkocsis/rgplates/raw/main/_archive/source/rgplates_0.2.1.tar.gz", 
    repos=NULL, type="source")
  • 从GITHUB安装开发版本
    如果您遇到任何地方都没有描述的软件包技术问题,您可能需要查看开发版本

如果您希望安装开发版本,我建议您手动安装:

  1. 将存储库克隆到您的本地硬盘。
  2. 打开一个终端并导航到您克隆的目录。从那里应该可以看到 rgplates 目录。
  3. 在终端中运行这一行
R CMD INSTALL rgplates
  • 如果您看到提示未找到 R 的错误,则必须将其添加到您的 PATH 环境变量中。
  • 如果rgplates依赖的R包没有安装,就得手动安装,否则会报错。

2. rgplates 介绍

该包开箱即用,依赖于 GPlates Web 服务 (GWS),这是一种使用 URL 中提供的数据执行古地理重建的在线服务。rgplates (1) 将数据发送到 GWS,GWS (2) 计算古坐标,然后 (3) rgplates 读取返回的结果。 要使用这个在线服务,您必须连接到互联网。

3. rgplates 在线方法入门

3.1 加载rgplates

使用前,加载此包

library(rgplates)

加载后,rgplates 会自动加载 Simple Features for R (sf) 包,这是一个用于处理矢量空间数据的标准 R 包。

3.2 板块重建

所有古坐标重建都依靠 reconstruct() 函数完成。 它使用的默认模型是由 C. Scotese 开发的 PALEOMAP 项目的模型。

每个构造模型都依赖于在地球表面旋转的板块。板块位置可以重建到模型涵盖的任何年龄。可以使用reconstruct()函数查询板块的当前位置,将字符串“plates”作为第一个参数传递,并将目标age(年龄)设置为0 (以Ma为单位)。

pl0 = reconstruct("plates", age=0)
pl0

在这里插入图片描述

Simple feature collection with 501 features and 0 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -180 ymin: -90 xmax: 180 ymax: 90
Geodetic CRS:  WGS 84
First 10 features:
                         geometry
1  POLYGON ((-155.2068 19.5404...
2  POLYGON ((-77.6715 24.7979,...
3  POLYGON ((-77.6715 24.7979,...
4  POLYGON ((-71.9396 20.9241,...
5  POLYGON ((-78.3856 27.3354,...
6  POLYGON ((-180 90, 180 90, ...
7  POLYGON ((164.2599 89.0123,...
8  POLYGON ((-106.0379 21.2018...
9  POLYGON ((-112.1621 28.3617...
10 POLYGON ((-108.7002 23.7579...

gplates 包依赖 sf 来处理矢量空间数据——比如板块。你可以用它做任何你通常可以用和 sf 对象做的事情:操纵它,改变它的地图投影,导出或使用它进行计算。这些数据是标准的等矩形投影,配有经度和纬度数据。

您可以使用plot()函数绘制板块分布图。要关注空间数据而不是要素的属性(本质上是技术性的),可以绘制该对象的几何图形。

plot(pl0$geometry)

在这里插入图片描述
设置年龄参数允许您访问过去时间点的板块构造状态。年龄接受以百万年为单位的日期。重建三叠纪/侏罗纪边界附近的板块位置(大约200Ma),您必须将年龄参数设置为200:

pl200 = reconstruct("plates", age=200)
pl200

在这里插入图片描述

Simple feature collection with 142 features and 0 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -180 ymin: -77.0625 xmax: 180 ymax: 90
Geodetic CRS:  WGS 84
First 10 features:
                         geometry
1  POLYGON ((17.3375 17.8127, ...
2  POLYGON ((-19.2369 72.1231,...
3  POLYGON ((-19.3706 71.9604,...
4  POLYGON ((-19.3706 71.9604,...
5  POLYGON ((-2.4637 32.5774, ...
6  POLYGON ((-19.7326 72.67, -...
7  POLYGON ((-19.7326 72.67, -...
8  POLYGON ((-19.6809 73.003, ...
9  POLYGON ((-18.0301 72.7282,...
10 POLYGON ((-18.6014 71.6729,...

您可以用类似的方式绘制结果:

plot(pl200$geometry)

在这里插入图片描述
请注意,与今天 (0Ma) 的结果不同,过去的板块配置不会返回海洋板块。(大部分模型不返回大洋板块,这是PALEOMAP模型的一个特点)

同样,pl0和pl200对象都是sf类对象。你可以自定义他们的绘图,就像你对任何其他sf对象一样——例如为多边形设置一个填充颜色,而不绘制它们的边界。

plot(pl200$geometry, col="gray", border=NA)

在这里插入图片描述

3.3 独立的地点坐标

这很好,但单独绘制板块的用处也仅有此了。 reconstruct() 的真正用途是能够计算给定年龄的当前位置的古坐标。

3.3.1 单个现存坐标点

我们来考虑一下伦敦的位置!无论是在网址里,还是用谷歌地图的用户界面,都可以查到市中心的坐标在北纬51.52(纬度),西经0.38(经度)左右。为了找出这个城市在三叠纪/侏罗纪界线的位置,你需要:(1)在R中输入这些坐标;以及(2)将它们提供给reconstruct()函数。

请注意,我们在这里处理的是全球范围的近似坐标。为了获得更精确的结果,请始终确保点的CRS与地图(包括椭圆)的CRS匹配!

因为在通常使用的等矩形投影中,绘图的x轴为经度,y轴为纬度,所以我们通常先按经度的顺序记录坐标,然后按纬度的顺序记录坐标(东经度和北纬度记录为正值)。

为了使这种结构绝对清晰,最好将坐标输入为两列矩阵,第一列是经度,第二列是纬度:

london = c(-0.38, 51.52)
londonMat = matrix(london, ncol=2, byrow=TRUE)
colnames = c("long", "lat")
londonMat
      [,1]  [,2]
[1,] -0.38 51.52

因为地图的坐标参考系统(CRS)是经度-纬度,所以您可以使用这些坐标直接在当前地图上用点()表示城市的位置x,在本例中是用红色加号:

plot(pl0$geometry)
points(londonMat, col="red", pch=3)

在这里插入图片描述

3.3.2 单个点的古坐标

找到这些地点的古坐标就像计算板块的坐标一样简单。您必须使用之前定义的矩阵 (londonMat) 作为 reconstruct() 的第一个参数 (之前给出了“plates”) ,并提供以百万年为单位的目标年龄:

londonMat200 = reconstruct(londonMat, age=200)
londonMat200
     paleolong paleolat
[1,]    2.3267  38.1654

此计算的结果是一个类似的矩阵:包括 paleolongitude 和 paleolatitude 列。如果您将坐标作为普通矩阵提供,则坐标会被推断为经度和纬度。

你可以用同样的方式来可视化这一点,就像你可视化该地点的当前位置一样:

plot(pl200$geometry, col="gray", border=NA)
points(londonMat200, col="red", pch=3)

在这里插入图片描述

3.3.3 多个点的古坐标

如果要重建多个位置,只需在矩阵中提供更多的行。例如,如果您还想计算澳大利亚悉尼(南纬33.85度,东经151.11度)和加拿大蒙特利尔(北纬45.52度,西经73.61度)的位置,您需要以类似的方式添加这些位置。

sydney = c(151.17, -33.85)
montreal = c(-73.61, 45.52)
cities = rbind(london, sydney, montreal)
colnames(cities) = c("long", "lat")

在这里插入图片描述
现在我们有了经度和纬度的矩阵,我们需要做的就是使用它作为 reconstruct() 函数的第一个参数:

cities200 = reconstruct(cities, age=200)

在这里插入图片描述
请注意,实体的顺序保持不变。我们可以用类似于单个城市的方法来绘制这些图。

plot(pl200$geometry, col="gray", border=NA)
points(cities200, col="red", pch=3)

在这里插入图片描述

3.4 现今的海岸线

某些模型(包括 PaleoMAP 模型)允许您访问当今海岸线的重建位置,这可能有助于您更好地定位重建板块。如果将字符串“coastlines”作为 reconstruct() 函数的第一个参数传递,则可以获得这些数据:

coast200 = reconstruct("coastlines", age=200)

在这里插入图片描述
这将返回一个 sf 类对象,类似于plates。您可以使用 plot() 可视化这些并将它们绘制在其他地图之上,但您必须设置 add=TRUE,否则将创建一个新的绘图。

plot(pl200$geometry, col="gray", border=NA)
points(cities200, col="red", pch=3)
plot(coast200$geometry, add=TRUE)

在这里插入图片描述

3.5 其他的重建模型

如果你查看reconstruct()引用的细节,你会发现除了“PALEOMAP”之外,模型参数还可以设置为其他字符串。这些表示可以通过GPLates Web服务访问的其他模型。例如,如果您想使用Seton等人2012模型在200Ma下执行相同的计算来重建板的位置,您所要做的就是设置model=“SETON2012”:

pl200seton = reconstruct("plates", age=200, model="SETON2012")

在这里插入图片描述
您可以将这个结果与PALEOMAP模型进行比较,方法是将这个结果绘制在具有一定透明度的结果之上(例如,在HTML RGBA中为半透明的红色:" #FF000077 "):

plot(pl200$geometry, col="gray", border=NA)
plot(pl200seton$geometry, col="#FF000077", add=TRUE, border=NA)

在这里插入图片描述
你可以看到,这两个重建有很大的不同,随着时间的推移,这一点变得更加明显。此外,通过透明度,你们可以看到板块是如何在收敛区重叠的。

3.6 在线方法的缺点

尽管设置起来很容易,但在线方法有几个局限性。为了更完全地控制旋转,您可能想尝试离线方法。

如果想坚持使用在线方法,您需要了解以下限制因素:

3.6.1 小数位和数据质量

在线方法的数据通过 URL 传递到 GWS,这对重建施加了一些技术限制。第一个限制是年龄必须四舍五入为整数,这可能会影响结果的质量。

第二个潜在的问题是,可以传输的数据量有些有限。这对于数百个点来说很好,但是对于重建数千个坐标来说,您肯定需要使用离线方法。

离线方法可以毫无问题地处理17.24Ma这样的年龄,以及任意数量的数据。

3.6.2 预建模型

虽然在线方法很容易设置,但它使用预定义的模型来实际执行重建。如果您想使用 GWS 尚未实现的自定义或其他模型,则需要使用离线方法。

3.6.3 网络连接

由于计算不是在您的计算机上执行的,而是由托管 GWS 的服务器执行的,因此如果您没有互联网连接,则无法使用此方法。此外,如果您考虑再现性,很容易看出您无法控制该服务在未来是否仍然可用。

有一些docker容器允许你实例化GWS,这可能有助于解决这个问题——但是如果你真的想确保你的代码保持可复制性——你可能想尝试离线方法。

3.6.4 其他选项

您还可以自定义一些其他选项,这些选项不会在GWS中公开供您设置,这可能会影响您的结果。

4. rgplates离线方法入门

虽然在线重建方法可以帮助完成快速计算,但 rgplates 包的真正强大之处在于我们所说的离线重建方法。

4.1 介绍

离线方法不依赖于与GPlates网络服务的连接,而是允许你在你的计算机上本地执行板块构造旋转。为此,除了rgplates包之外,您的计算机上还需要两样东西:

4.2 GPlates桌面应用程序

GPlates是目前我们用来建造、操作和应用板块构造重建的标准程序。GPlates有一个开发得非常好的图形用户界面(GUI ),您可以从本教程的任何内容中独立使用它。如果你想了解更多关于GPlates的知识,你可以在这里找到很多资料。

为了使用GPlates的离线方法,您不必离开R环境或使用gplates的GUI。你只需要确保你的电脑上安装了应用程序,rgplates会处理剩下的事情。

4.2.1 GPlates安装

除了安装rgplates包之外,您还必须在计算机上安装gplates桌面应用程序。在看到您的操作系统需要哪个文件后,您必须向下滚动到页面底部,选择您希望下载的文件,然后按照说明进行操作。

这已经在所有主要的操作系统(Windows、Mac和GNU/Linux)上进行了测试,并且已经在gplates版本2.2和2.3上可靠地工作。rgplates将能够找到GPlates在Mac和GNU/Linux上的开箱即用安装。只要你把GPlates安装到默认的安装目录,在Windows上也不会有任何问题(不要在安装过程中改变建议的内容——除非你自找麻烦!)

4.3 构造模型

要使用离线方法,您的计算机上必须有一个构造模型。实际上,并没有板块构造模型这样的东西。从技术角度来看,每个模型至少包含两个数据项:

  • the Partitioning polygons
  • and the Reconstruction tree (aka. rotation file)

分割多边形是矢量空间数据(多边形),代表现今构造板块的分布。GPlates通过旋转在地球表面移动这些多边形,如重建树中所述。这些通常是一起开发的(我们通常称之为模型),但是它们分别存储在不同的文件中。换句话说,GPlates只是执行旋转/重建的程序,但是您还需要有文件

在线方法依赖于GPlates Web服务服务器上的文件。例如,古地图模型的分割多边形是可见的,如果你只要求“板块”,即今天的年龄(即0Ma)。

partPol = reconstruct("plates", age=0)
plot(partPol$geometry)

在这里插入图片描述
为了使用离线方法,我们需要

  • 在我们的计算机上同时拥有分区多边形和重建树
  • 用R表示它们
  • 将它们传递给 reconstruct() 函数

4.4 PALEOMAP模型文件

为了简化第一次试验,我们将使用与 rgplates 包一起分发的 PaleoMAP 项目的模型文件。

这些文件位于 zip 存档中包的安装目录中。我们要做的是:

  • 创建一个新的临时目录来存储我们的模型文件
  • 在那里解压缩模型文件,然后
  • 将它们加载到R中。

注意:有更简单的方法来获取这些文件并以其他方式将它们表示到 R 中(例如使用chronosphere,我们将在教程 4 中进行研究。)但出于教学目的,我建议首先使用以下方式执行此操作如下。

4.4.1 创建临时文件夹

临时目录是存储临时数据、文件的最佳位置,它们是在计算过程中创建的,在 R 会话之外不需要(当然你不需要在这里存储这些,你可以使用计算机上的任何目录) .

临时目录很容易创建,你只需要使用 tempdir() 函数,它会为你创建这样一个目录,并告诉你在哪里可以找到它:

td = tempdir()
[1] "C:\\Users\\bailo\\AppData\\Local\\Temp\\RtmpgRghHL"

每个操作系统都会以不同的方式处理这些问题,所以如果您的操作系统与上面的结果不匹配,请不要感到惊讶——实际上,当您运行上面的函数时,每个会话中的情况都可能不同。

4.4.2 解压模型文件

模型的文件很大,比 CRAN 指南推荐的大,所以必须压缩。我们将不得不使用 unzip() 函数解压缩它们——但首先我们必须找到它们的位置。

可以使用 system.file() 函数找到 R 包的安装路径。

rgPath = system.file(package="rgplates")
[1] "D:/ALL_Softwares/R-4.2.0/library/rgplates"

您可以通过使用 list.files() 列出该目录的内容来确认这是正确的路径

list.files(rgPath)
 [1] "CITATION"     "DESCRIPTION"  "extdata"      "help"         "html"         "INDEX"       
 [7] "MD5"          "Meta"         "NAMESPACE"    "NEWS.md"      "R"            "rgplates.pdf"

模型数据位于 extdata 目录中,在存档 paleomap_v3.zip 中。我们必须找到这个存档并将其解压缩到临时目录(exdir 参数)

unzip(file.path(rgPath,"extdata/paleomap_v3.zip"), exdir=td)

您可以通过查看临时目录来确认提取确实发生了:

list.files(file.path(td))
 [1] "20e8cc60218b4655a3881a246b5b14f2.png"            
 [2] "3d5d7aba18ec4ea09ad3afe6d6c3ab4f.png"            
 [3] "617dc5e784fb413bb4f181837cd7bf7b.png"            
 [4] "9b9c99ee368f4989bfb89c9755d96e87.png"            
 [5] "c1e2330ed82e491fbb8afd581c4af79e.png"            
 [6] "d44dcec927d64eb99923a4da09e245cd.png"            
 [7] "ded46f127eb44d17a1b85ecdbbcd66f5.png"            
 [8] "ef2d31134c49404684bf9638119de99c.png"            
 [9] "ffad242897fd47839324f4fa08c96d63.png"            
[10] "PALEOMAP_PlateModel.rot"                         
[11] "PALEOMAP_PlatePolygons.gpml"                     
[12] "PALEOMAP_PoliticalBoundaries.gpml"               
[13] "rs-graphics-9d334d49-dded-4ee1-be86-5b71e69d6008"

有两个文件对我们很重要:一个以 .gpml 结尾(GPlates 标记语言格式的分区多边形)和一个以 .rot 结尾(重建树/旋转文件)。我们知道这些文件的绝对路径,可以在以下位置找到它们:

pathToPolygons = file.path(td, "PALEOMAP_PlatePolygons.gpml")
pathToRotations = file.path(td, "PALEOMAP_PlateModel.rot")
> pathToPolygons
[1] "C:\\Users\\bailo\\AppData\\Local\\Temp\\RtmpgRghHL/PALEOMAP_PlatePolygons.gpml"
> pathToRotations
[1] "C:\\Users\\bailo\\AppData\\Local\\Temp\\RtmpgRghHL/PALEOMAP_PlateModel.rot"

4.5 板块模型类

现在我们有了文件并且知道如何找到它们,我们已经以某种方式在 R 中表示它们,因此我们可以表明我们希望将它们与 GPlates 一起使用来进行板块构造重建。

我们需要创建一个 platemodel 类对象来执行此操作。我们需要提供的是这些文件的路径,分别用于分区多边形和旋转文件:

pm = platemodel(polygons = pathToPolygons,
                rotation = pathToRotations)
GPlates plate tectonic model.
static polygons:  "PALEOMAP_PlatePolygons.gpml" 
rotation:         "PALEOMAP_PlateModel.rot" 

这是一个platemodel类对象,它实际上只是一个包含文件实际位置的包装器。
现在是时候提一下,这就是离线方法真正的灵活性所在。您可以在此处使用任何第三方模型文件,只要您提供文件的适当绝对路径,下面的方法应该有效。请参阅下面的详细信息

4.6 重建板块

重建本身的工作方式与在线方法相同,唯一的区别是我们将使用 platemodel 类对象 pm,而不是使用字符串作为模型参数(默认为“PALEOMAP”)。

以下是使用 PaleoMAP 模型为 200Ma 重建的板块 - 现在使用离线方法计算:

pl0ff200 = reconstruct("plates", age=200, model=pm, path.gplates="D:/ALL_Softwares/GPlates/gplates-2.2.0.exe")

在这里插入图片描述
请注意,这是一个类似于我们之前在在线方法中看到的 sf 类对象,尽管它具有更多的属性。不过,您可以使用 plot() 以相同的方式将其可视化。

plot(pl0ff200$geometry, border=NA, col="gray")

在这里插入图片描述

4.7 重建地点

重建点的位置与在线方法类似。同样,唯一的区别是您必须提供 platemodel 对象作为模型参数。这是之前计算和可视化一些城市过去位置的示例,现在使用离线方法:

首先,我们获取地点数据:

london = c(-0.38, 51.52)
sydney = c(151.17, -33.85)
montreal = c(-73.61, 45.52)

cities = rbind(london, sydney, montreal)
colnames(cities) = c("long", "lat")
           long    lat
london    -0.38  51.52
sydney   151.17 -33.85
montreal -73.61  45.52

其次,我们用我们的模型进行重建

cities200 = reconstruct(cities, age=200, model=pm, path.gplates="D:/ALL_Softwares/GPlates/gplates-2.2.0.exe")
               long       lat
london     2.326686  38.16536
sydney    79.175489 -60.67032
montreal -20.890271  26.08778

然后我们绘图:

plot(pl0ff200$geometry, col="gray", border=NA)
points(cities200, col="red", pch=3, add=TRUE)

在这里插入图片描述

4.8 获取模型文件的其他途径

模型文件可从EarthByte资源页面获得。例如,我们在这里使用的古地图模型的文件可以在https://www.earthbyte.org/paleomap-paleoatlas-for-gplates/.获得。

在页面底部,您会找到一个链接:Link to rasters, reconstruction files and tutorial (指向栅格、重建文件和教程的链接),您可以通过该链接下载 Scotese_Paleoatlas_v3.zip 文件。在此 zip 文件中,在 PALEOMAP Global Plate Model 目录中,您可以看到我们之前拥有的相同文件。

只要提供文件的绝对路径,就可以使用这些文件或任何类似的文件来创建platemodel对象。

4.9 chronosphere

正如你所看到的,处理这些文件是相当乏味的,而我们,rgplates的开发者,很少以这种方式使用它们。在实际应用中,我们推荐使用离线的rgplates方法和chronosphere,你可以在下一个教程中了解更多。

5. 使用chronosphere获取的数据进行重建

最初,rgplates中的所有功能都是在chronosphere项目中开发的。然而,自项目开始以来,这些模块的功能发生了分化:rgplates包含用R执行板块构造重建的功能,而chronosphere是一个数据分发和版本化系统。这两者与构造模型数据相关联:我们将下载这些数据并将其导入chronosphere,并与rgplates一起使用。

5.1 加载包

library(rgplates)
library(chronosphere)

为了表明我们调用了哪些函数,我们将使用::运算符。这个操作符允许我们指出我们想从哪个包中使用函数。

5.2 下载数据

稍后将提供有关如何使用 chronosphere-portal 的详细教程。现在,我们只需要知道如何访问 platemodel 类对象。

从 chronosphere 下载数据很容易:您只需要一行代码,以及您选择的数据的适当 ID。要下载我们之前使用的构造模型(板块多边形和重建树)(PaleoMAP 模型),我们只需要这个命令:

pm = chronosphere::fetch(dat="paleomap", var="model", ver="v3-GPlates")

在这里插入图片描述

GPlates plate tectonic model.
PALEOMAP plate tectonic reconstruction files (C. Scotese) 
 - v3 (GPlates resource) 
static polygons:  "PALEOMAP_PlatePolygons.gpml" 
rotation:         "PALEOMAP_PlateModel.rot" 

chronosphere::fetch() 的参数是您要下载的项目的数据集 (dat)、变量 (var) 和版本 (ver) ID。

5.3 实际重建

我们可以立即将其与离线重建方法一起使用。

pl400 = rgplates::reconstruct("plates", age=400, model=pm,
                              path.gplates="D:/ALL_Softwares/GPlates/gplates-2.2.0.exe")

在这里插入图片描述

plot(pl400$geometry, col="gray", border=NA)

在这里插入图片描述

5.4 结束语

通过三行代码,我们下载了构造信息,计算了旋转并绘制了重建的几何图形。

这就是我们最初打算如何使用reconstruct()函数的离线方法,这也是我们建议作为一般工作流采用的方法。

请注意,我们打算将尽可能多的模型添加到chronosphere中,chronosphere正在进行彻底检查,以使其尽可能灵活和有用。然而,保留所有当前可用的数据并保持所有功能并不容易——但预计将在2023年上半年完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值