无法将投影分配给 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
我已经考虑并在尝试后拒绝了以下可能的解决方案:
- 直接添加库rdgal
- 使用 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查看。
我有一个名为 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
我已经考虑并在尝试后拒绝了以下可能的解决方案:
- 直接添加库rdgal
- 使用 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查看。