无法将投影分配给 sp 对象 SpatialPointsDataFrame

Failing to assign projection to sp object SpatialPointsDataFrame

我有一个名为 johnny 的 SpatialPointsDataFrame,它是通过分配坐标从普通数据框创建的。这些坐标在坐标系 EPSG 4326(标准 GPS 地理坐标系)中,但约翰尼不知道。所以,我正在尝试将 EPSG 4326 分配给 johnny,基本上与之前的问题 data projection in R using package SP 一样。我也正在使用 sp。我的最终目标是将 johnny 投射到 projected_johnny。但是,我似乎无法首先正确分配现有投影。谁看到我的错误?

library(sp)
x <- seq(80,90,by=1)
y <- seq(40,50,by=1)
value <- seq(10,20,by=1)
johnny <- data.frame(cbind(x,y,value))
coordinates(johnny) <- ~x+y
class(johnny)

[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"

proj4string(johnny) <- CRS("+init=epsg:4326")

Error in if (is.na(get("has_proj_def.dat", envir = .RGDAL_CACHE))) { : argument is of length zero

我已经考虑并在尝试后拒绝了以下可能的解决方案:

  1. 直接添加库rdgal
  2. 使用 CRS("+proj=longlat +datum=WGS84") 代替 CRS("+init=epsg:4326")

我正在使用 R 3.6.0 和 sp 1.3-1。通过sp加载的rgdal版本是1.5-15。欢迎任何想法。这应该是一个如此简单的动作...

我查看了您的代码并猜测您可能想要完成什么。但是你处理事情的方式比它需要的更不同。有一种简单的方法可以实现这一点。到目前为止,完成此操作的最简单方法是使用 R、sf 包中的那些工具。要知道 sf 包是比 sp 包更新的包。 sf 包提供了易于使用的工具来完成这些任务。

下面的代码与您的代码有些不同。使用了两列矩阵而不是三列数据框。

根据矩阵创建了简单的要素几何点。然后从几何点创建简单的特征列对象。然后情节就创建好了。

代码:

# Create matrix

x <- seq(80,90,by=1)
y <- seq(40,50,by=1)
# value <- seq(10,20,by=1)
#johnny <- data.frame(cbind(x,y))
jm <- matrix(data = c(x,y), nrow = 11, ncol = 2)

# coordinates(johnny) <- ~x+y
# class(johnny)
# johnny

创建 sf 多点几何:

jm.sfg <- st_multipoint(jm)
jm.sfg

创建 sf 列对象:

jm.sfc <- st_sfc(jm.sfg, crs = 4326)
jm.sfc

情节

plot(jm.sfc, axes = TRUE)

剧情可以从下方link查看。