R terra::project函数导致核心转储(Ubuntu)

f4t66c6m  于 2023-06-03  发布在  其他
关注(0)|答案(2)|浏览(146)

我一直在R(4.3.0)中的terra R package(v1.7-29)崩溃中遇到project function。这是通过终端和RStudio发生的,尽管terra包安装没有错误。
Reprex:

library(terra)

# SPECIFY PROJECTIONS 
pt.proj <- "+proj=longlat +datum=WGS84"
calc.proj <- 
  "+proj=aea + lat_1=14.5 + lat_2=32.5 + lat_0=24.0 + lon_0=-105 +x_0=0 +y_0=0 + ellps =GRS80 +datum=NAD83 + units=m +no_defs"

# BUILDING SPATIAL VECTOR
# Fields
ids <- c("id00041130", "id00043728", "id00032757", "id00035604")
spp <- rep("Quercus_aerea", 4)
lats <- c(27.4, 25.1, 26.9, 28.2)
longs <- c(-108, -106, -107, -107)
spat_points <- cbind.data.frame(ids, spp, lats, longs)
# Convert to spatial vector
spat_vect <- vect(spat_points, geom=c("longs", "lats"), crs=pt.proj, keepgeom=FALSE)

# PROJECT FUNCTION (CRASHING)
spat_vect.calc <- project(spat_vect,calc.proj)

# Generates the message:
# "free(): double free detected in tcache 2"
# "Aborted (core dumped)"

会话信息:

> sessionInfo()
R version 4.3.0 (2023-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.6 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3 
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3;  LAPACK version 3.7.1

因为terra v1.7-29有一定的system requirements,我用sf::sf_extSoftVersion检查了这些;一切似乎都得到了满足。

> sf::sf_extSoftVersion()
          GEOS           GDAL         proj.4 
       "3.6.2"        "2.2.3"        "4.9.3" 
GDAL_with_GEOS     USE_PROJ_H           PROJ 
        "true"        "false"        "4.9.3"

任何关于其他事情的提示,我可以检查与此包,或建议,我如何可以更清楚地诊断问题,将不胜感激。谢谢!

cld4siwp

cld4siwp1#

我在旧GDAL/PROJ中看到了相同的情况

library(terra)
#terra 1.7.33
gdal(lib="")
#   gdal    proj    geos
#"2.2.3" "4.9.3" "3.6.2"

但是如果您正确地指定了PROJ 4字符串(“+”和关键字之间没有空格),它对我来说是有效的。

prj <- "+proj=aea +lat_1=14.5 +lat_2=32.5 +lat_0=24.0 +lon_0=-105 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m"
v <- project(spat_vect, prj)

这不是较新版本的问题,例如

library(terra)
terra 1.7.33
gdal(lib="")
#    gdal     proj     geos
# "3.4.3"  "8.2.0" "3.10.2"

或者

#    gdal     proj     geos 
# "3.6.2"  "9.2.0" "3.11.2"

因此,这似乎是旧版GDAL或PROJ的问题。我会建议获得较新的版本。我将从升级Ubuntu开始,因为您仍在使用版本18.04,即deprecated today(2023年5月31日)。

cpjpxq1n

cpjpxq1n2#

支持@robert-hijamns的建议,即新版本可以更容易。你在这里有一个“存在主义”的冲突:你想要并使用 * 当前的 * R版本4.3.0,但随后将其 * 限制 * 到五年前的操作系统中:Ubuntu 18.04 LTS.
考虑一个约束较少的替代方案:Ubuntu 22.04 LTS.我在这里使用了一个基于22.04 * 和 * 的Rocker容器,由于r2u,它提供了所有CRAN作为二进制文件。
然后,在快速启动rocker/r2u:22.04容器和快速apt update -qq; apt upgrade之后,我们可以执行install.r terra。这就是魔术发生的地方:r2u知道terra等同于r-cran-terra,它会安装该软件包及其所有的二进制依赖项。而安装所需的56个软件包只需要59秒。
然后我可以运行你的脚本,没有segfault:

> source("question.R")  # the code you posted
terra 1.7.29
> spat_vect.calc
 class       : SpatVector 
 geometry    : points 
 dimensions  : 4, 2  (geometries, attributes)
 extent      : -293639.2, -99657.76, 123683.6, 471931.6  (xmin, xmax, ymin, ymax)
 coord. ref. : +proj=aea +lat_0=24 +lon_0=-105 +lat_1=14.5 +lat_2=32.5 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs 
 names       :        ids           spp
 type        :      <chr>         <chr>
 values      : id00041130 Quercus_aerea
               id00043728 Quercus_aerea
               id00032757 Quercus_aerea
>

给予r2u一个机会。它是一个存储库,所以它与服务器,台式机,笔记本电脑,云,CI,...使用。它已经派上用场了,我们几个人已经有一年多了。

相关问题