【问题标题】:Failing to assign projection to sp object SpatialPointsDataFrame未能将投影分配给 sp 对象 SpatialPointsDataFrame
【发布时间】:2020-11-26 20:51:56
【问题描述】:

我有一个名为 johnny 的 SpatialPointsDataFrame,它是通过分配坐标从 vanilla 数据框创建的。这些坐标位于坐标系 EPSG 4326(标准 GPS 地理坐标系)中,但 johnny 不知道这一点。所以,我试图将 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")

if (is.na(get("has_proj_def.dat", envir = .RGDAL_CACHE))) { 中的错误: 参数长度为零

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

  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 gis projection sp


    【解决方案1】:

    我查看了您的代码并猜到了您可能想要完成的任务。但是你处理事情的方式比它需要的更不同。有一种简单的方法可以实现这一点。到目前为止,最简单的方法是使用 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)
    

    情节可以从下面的链接查看。

    【讨论】:

    • 你好@Gray。谢谢你的建议。它也适用于我。但是,我不确定矩阵方法将如何转化为像我这样有一个“z”变量的情况。实际上,我有很多“z”变量,在投影我的数据框(或矩阵)之后,我想对它们做一些事情,例如计算半变异函数(使用来自 gstat 的变异函数或替代方法)。 sf 多点几何是否允许这样的事情?
    猜你喜欢
    • 2018-03-24
    • 2019-02-24
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多