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

news2024/11/26 16:43:39

【rgplates】安装、介绍、入门

  • 1. rgplates 安装
    • 1.1 easy way
    • 1.2 备案方法
  • 2. rgplates 介绍
  • 3. rgplates 在线方法入门
    • 3.1 加载rgplates
    • 3.2 板块重建
    • 3.3 独立的地点坐标
      • 3.3.1 单个现存坐标点
      • 3.3.2 单个点的古坐标
      • 3.3.3 多个点的古坐标
    • 3.4 现今的海岸线
    • 3.5 其他的重建模型
    • 3.6 在线方法的缺点
      • 3.6.1 小数位和数据质量
      • 3.6.2 预建模型
      • 3.6.3 网络连接
      • 3.6.4 其他选项
  • 4. rgplates离线方法入门
    • 4.1 介绍
    • 4.2 GPlates桌面应用程序
      • 4.2.1 GPlates安装
    • 4.3 构造模型
    • 4.4 PALEOMAP模型文件
      • 4.4.1 创建临时文件夹
      • 4.4.2 解压模型文件
    • 4.5 板块模型类
    • 4.6 重建板块
    • 4.7 重建地点
    • 4.8 获取模型文件的其他途径
    • 4.9 chronosphere
  • 5. 使用chronosphere获取的数据进行重建
    • 5.1 加载包
    • 5.2 下载数据
    • 5.3 实际重建
    • 5.4 结束语

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包之外,您的计算机上还需要两样东西:

  • GPlates桌面应用程序,用于重建计算
  • 用于重建的实际构造模型文件。

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年上半年完成。

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

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

相关文章

JMeter 性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: 2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!_哔哩哔哩_bilibili2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!共计11条视频&…

javascript获取对象的键名列表、键值列表

Object.keys&#xff1a;获取对象的键名列表 Object.values&#xff1a;获取对象的键值列表 <script>var obj {name: 1,age: 2,order: 3}const klist Object.keys(obj)const vals Object.values(obj)console.log(obj, obj)console.log(键名列表, klist)console.log(键…

STM32F4_位带操作

目录 1. 位带简介 2. 别名区地址的计算 2.1 合并计算 3. 位带操作访问ODR和IDR寄存器 4. GPIOB->MODER&~(3<<(9*2));GPIOB->MODER|0<<9*2 / GPIOB->MODER&~(3<<(9*2));GPIOB->MODER|1<<9*2 位带操作在写单片机程序时&#xf…

springboot+vue 刘老师

课程内容 前端&#xff1a;vue elementui 后端&#xff1a;springboot mybatisplus 公共云部署 ------boot-------- 热部署 不用devtools&#xff0c;交给jrebel工具 RequestMapping ​ 参数 value 路径 method 方法consumes 请求媒体类型 如 application/jsonproduces …

DJ5-7 缓冲区管理

目录 5.7.1 缓冲的引入 5.7.2 单缓冲和双缓冲 1、单缓冲&#xff08;Single Buffer&#xff09; 2、双缓冲&#xff08;Double Buffer&#xff09; 3、双机通信时缓冲区的设置 5.7.3 循环缓冲 1、循环缓冲的组成 2、循环缓冲区的使用 3、进程同步 5.7.4 缓冲池 …

Spring Security源码剖析从入门到精通.跟学尚硅谷

1.1 概要 Spring 是非常流行和成功的 Java 应用开发框架&#xff0c;Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”…

Mediapipe人体识别库

一、简介 官网&#xff1a;MediaPipe | Google for Developershttps://developers.google.cn/mediapipe Mediapipe 是2012年起开始公司内部使用&#xff0c;2019年google的一个开源项目&#xff0c;可以提供开源的、跨平台的常用机器学习(machine learning)方案。Mediapipe…

python-sqlite3使用指南

python下sqlite3使用指南 文章目录 python下sqlite3使用指南开发环境sqlite3常用APICRUD实例参考 开发环境 vscode ​ 开发语言&#xff1a; python vscode SQLite插件使用方法&#xff1a; 之后在这里就可以发现可视化数据&#xff1a; sqlite3常用API Python 2.5.x 以上…

信息安全实践1.3(HTTPS)

前言 做这个实验对Tomcat的版本有要求&#xff0c;最好是使用Tomcat8。因为我之前使用Tomcat10&#xff0c;然后一直做不出来。 要求 部署Web服务器端HTTPS功能&#xff0c;通过网络嗅探分析HTTPS通过SSL实施安全保护的效果 关键步骤 首先要给tomcat配置https&#xff0c;也…

设计模式之美-实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?

领域驱动设计&#xff08;Domain Driven Design&#xff0c;简称DDD&#xff09;盛行之后&#xff0c;这种基于贫血模型的传统的开发模式就更加被人诟病。而基于充血模型的DDD开发模式越来越被人提倡。所以&#xff0c;我打算用两节课的时间&#xff0c;结合一个虚拟钱包系统的…

超低功耗三通道低频无线唤醒ASK接收 125k soc芯片UM2082F08

UM2082F08 是基于单周期 8051 内核的超低功耗 8 位、、具有三通道低频无线唤醒 ASK 接收功能的 SOC 芯片。芯片可检测 30KHz~300KHz 范围的 LF&#xff08;低频&#xff09;载波频率数据并触发唤醒信号&#xff0c;同时可以调节接收灵敏度&#xff0c;确保在各种应用环境下实现…

代码随想录算法训练营15期 Day 6 | 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和

由于昨天是周日&#xff0c;周日是休息日&#xff0c;所以就是什么也没有写啦。今天是day06天&#xff0c;继续加油。 哈希表理论基础 建议&#xff1a;大家要了解哈希表的内部实现原理&#xff0c;哈希函数&#xff0c;哈希碰撞&#xff0c;以及常见哈希表的区别&#xff0c;…

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式?答案是**是**

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式? 答案是是 反复调用Toolkit.getDefaultToolkit()获得的 java.awt.Toolkit 是同一个 import java.awt.Toolkit;public class GetDefaultToolkit是不是获得单例Toolkit {static public …

【P43】JMeter 吞吐量控制器(Throughput Controller)

文章目录 一、吞吐量控制器&#xff08;Throughput Controller&#xff09;参数说明二、测试计划设计2.1、Total Executions2.2、Percent Executions2.3、Per User 一、吞吐量控制器&#xff08;Throughput Controller&#xff09;参数说明 允许用户控制后代元素的执行的次数。…

中级软件设计师考试总结

目录 前言考前学习宏观什么是软考涉及的知识范围软考整体导图总结 微观我的分享——希尔排序学习过程结构化做题 考试阶段确定不确定 考后总结 前言 作为一名中级软件设计师&#xff0c;考试是衡量自己技能和水平的一项重要指标。在备考和考试过程中&#xff0c;我通过总结经验…

【TI毫米波雷达笔记】IWR6843AOPEVM-G的DCA1000EVM模式配置及避坑(官方手册有误)

【TI毫米波雷达笔记】IWR6843AOPEVM-G的DCA1000EVM模式配置及避坑&#xff08;官方手册有误&#xff09; IWR6843AOPEVM-G版本可以直接与DCA1000EVM连接 进行数据获取 不需要连接MMWAVEICBOOST版 直接使用 DCA1000mmWave Studio 软件进行数据采集 在官方手册中 User’s Guide…

linux环境下安装gitlab

前几天跟朋友聊天时说到gitlab版本控制。其实&#xff0c;之前也对它只是知道有这个东西&#xff0c;也会用。只是对于它的安装和配置&#xff0c;那我还是没整过。这两天&#xff0c;我找了一下网上的资料&#xff0c;还是写下吧。 一安装&#xff1a; 按网上所说&#xff0c;…

2023年上半年信息系统项目管理师下午真题及答案解析

试题一(25分) 为实现空气质量的精细化治理&#xff0c;某市规划了智慧环保项目。该项目涉及网格化监测、应急管理、执法系统等多个子系统。作为总集成商&#xff0c;A公司非常重视&#xff0c;委派李经理任项目经理&#xff0c;对公司内研发部门与项目相关的各产品线研发人员及…

带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示-------之 阿里云平台项目建造。

第一篇章&#xff1a; (13条消息) 带你开发一个远程控制项目----&#xff1e;STM32标准库阿里云平台传感器模块远程显示。_海口飞鹏岛科技有限公司的博客-CSDN博客 本次文章是指引开发者进行开发阿里云平台建造设备项目&#xff0c;可观看UP主教程&#xff0c;完成如下&#x…

今天面了一个9个月测试经验的人,开口就跟我要18K,我都愣住了....

2月初我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥都没有…