CPL_transform(x, crs, aoi, pipeline, reverse)中出现错误:OGRCreateCoordinateTransformation()返回了NULL:PROJ可用吗?

16

我正在使用Ubuntu 18.04,以下代码会生成一个错误

library(sf)
library(tmap)
library(dplyr)
library(raster)
#sudo apt install libproj-dev
#devtools::install_github("robinlovelace/geocompr")
library(spDataLarge)
if(!file.exists("e.tif"))
  download.file("https://github.com/geocompr/geocompkg/releases/download/0.1/e.tif",
                "e.tif")
elev = raster("e.tif")
urban = spData::urban_agglomerations %>% 
  filter(year == 2030) %>% 
  dplyr::select(population_millions) 
summary(urban)

tm_shape(elev) +
  tm_raster(breaks = c(-10000, 0, 10, 50, 100, 10000)) +
  tm_shape(urban) +
  tm_dots(size = "population_millions", scale = 0.5)

我遇到了以下错误

Error in CPL_transform(x, crs, aoi, pipeline, reverse) : 
  OGRCreateCoordinateTransformation() returned NULL: PROJ available?
In addition: Warning message:
In CPL_transform(x, crs, aoi, pipeline, reverse) :
  GDAL Error 1: No PROJ.4 translation for source SRS, coordinate transformation initialization has failed.

如果我使用以下方式更新PROJ

sudo apt-get install proj-bin

它说我有最新的版本

proj-bin is already the newest version (5.2.0-1~bionic0).

任何帮助都将不胜感激。


2
你解决了吗?我有一个类似的问题。 - Ariel
2
我也对类似的问题感兴趣。我有一个使用空间库的Shiny应用程序,在本地工作正常,但是在部署应用程序后无法正常工作。应用程序日志告诉我它失败并显示同样的错误消息。 - Kmcd39
1
当我试图使用tmaptools :: ttm()交互式绘制shapefile时,我遇到了相同的问题。这不是一个解决方案,我通过从shapefile中删除CRS字符串来解决了这个问题。像这样:shp_copy <- shp; raster :: crs(shp_copy)<-“”。 - Shepherd
1
我也遇到了一个问题,即一个闪亮的应用程序在本地工作但在远程(在Ubuntu闪亮服务器上)不工作,并且最新的proj-bin已经安装... - Remko Duursma
1
我在shinyapps.io上遇到了同样的问题。本地应用程序可以正常工作。有什么解决办法吗? - Ahmed El-Gabbas
1个回答

28

感谢sf的开发者,现在我知道了问题所在和解决方案:

在这里查看 github 问题

回顾一下:

  • 如果使用更新版本的 GDAL 保存 sf 数据框,并在使用旧版本的 GDAL 的系统上尝试 st_transform,则无法正确读取投影信息(至少在 Ubuntu 18 上出现此问题)。

  • 解决方案是重新设置投影:

st_crs(data) <- 4326  # or whatever projection your data is in

如果您有多个几何列,则可能需要单独设置每个列:

st_crs(data$areacolumn) <- 4326

1
哇,感谢你找到了那个。我刚刚开始运行一个昨天还有效的脚本后出现了这个错误。区别是我将文件远程发送到我的大台式机进行计算,它确实有一些不同版本的软件包。两台电脑之间的 sf 不同版本也导致了各种问题,所以现在我也会看看 GDAL! - Dan Slone
确实,感谢您提供的解决方案。我不仅在数据集中遇到了这个问题,而且在创建和存储为软件包数据的CRS(例如crs_longlat <- st_crs(4326))中也遇到了这个问题。将它们保存为字符串是解决方案,因为在我将CRS作为参数传递的任何地方都可以接受字符串(例如crs_longlat <- "EPSG:4326")。 - Scrope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接