克里格中的“CRS 对象有注释,在输出中丢失”

Posted

技术标签:

【中文标题】克里格中的“CRS 对象有注释,在输出中丢失”【英文标题】:"CRS object has comment, which is lost in output" in krige 【发布时间】:2021-12-03 15:13:34 【问题描述】:

我正在尝试使用 CRS("+init=epsg:4326") 对具有纬度、经度的水质数据集进行克里格法。

GGT <- read.csv("C:/Users/user/Data/newdata2019.csv")
coordinates(GGT) = ~Lon+Lat
GGT <- st_as_sf(GGT)
st_crs(GGT) <- 4326

GGTgrid <- readOGR('C:/Users/user/Desktop/FisheryScience/Data/Maps/GGTgrid.shp')
GGTgrid1 <- st_as_stars(GGTgrid, crs = 4326)
st_crs(GGTgrid1) <- 4326

-这就是 GGT 数据集的样子

vario <- variogram(log(DO_S)~1, GGT)
model_GGT <- fit.variogram(vario, model=vgm(psill = 1, model= 'Sph', range= 200, nugget =1))
plot(vario, model = model_GGT)

-这里似乎工作正常

然后当我运行下面的代码块时它显示错误

krige_result <- krige(formula = log(DO_S)~1, GGT, GGTgrid1, model = model_GGT)

有很长的错误行

proj4string(obj) 中的警告消息: “CRS 对象有注释,在输出中丢失”proj4string(obj) 中的警告消息: “CRS 对象有注释,在输出中丢失”proj4string(obj) 中的警告消息:

【问题讨论】:

【参考方案1】:

您收到的警告表明您的工作可能会受到 R-spatial 和 rspatial 采用的 PROJ 6(和 GDAL 3)引入的更改的影响。您可以使用这两个链接获取所有详细信息:

https://rgdal.r-forge.r-project.org/articles/CRS_projections_transformations.html

https://r-spatial.org/r/2020/03/17/wkt.html

要使这些警告消息消失,您只需要使用类型为sfstars 的对象(通过安装/加载相同名称的包),其中考虑到这些最近的更改。因此,我建议您在脚本开头使用以下几行代码来替换前六行代码。这将为您提供两个对象(即 sf 类型的 GGT 和 stars 类型的 GGTgrid1):

GGT <- read.csv("C:/Users/user/Data/newdata2019.csv")
coordinates(GGT) = ~Lon+Lat
GGT <- st_as_sf(GGT)
st_crs(GGT) <- 4326

GGTgrid <- readOGR('C:/Users/user/Desktop/maps/GGTgrid.shp')
coordinates(GGTgrid) <- ~x+y
GGTgrid1 <- st_as_stars(GGTgrid1, crs = 4326)
st_crs(GGTgrid1) <- 4326

对我来说,处理真实数据比使用您的对象名称“虚拟地”工作更容易,因为我没有您的原始文件。因此,我更愿意向您展示如何使用 sp 包中包含的“meuse”数据进行分析。

通过类比我给你的reprex,我认为你应该能够使用自己的文件进行管理。你会看到,不会再出现警告消息了:-)

请在下面找到我的代表。

Reprex

加载库和数据
library(sp)
library(sf)
library(stars)
library(gstat)

data(meuse)                # loading the data (equivalent of your csv file)
coordinates(meuse) = ~x+y  # you already know this step ;-)

# Just a look to the class of original data 
class(meuse)
#> [1] "SpatialPointsDataFrame"
#> attr(,"package")
#> [1] "sp"                # "meuse" is an object of class 'sp'


data(meuse.grid)           # loading the data (equivalent of your shp file)
gridded(meuse.grid) = ~x+y

# Just a look to the class of original data 
class(meuse.grid)
#> [1] "SpatialPixelsDataFrame"
#> attr(,"package")
#> [1] "sp"                # "meuse" is an object of class 'sp'

meuse 数据转换为sf 对象,将meuse.grid 数据转换为stars 对象
# Convert 'sp' object 'meuse' (i.e. SpatialPointsDataFrame) into 'sf' object
meuse <-  st_as_sf(meuse)

class(meuse) 
#> [1] "sf"         "data.frame"    # meuse is indeed of class 'sf'

# Convert 'sp' object 'meuse.grid' (i.e. SpatialPixelDataFrame) into 'stars' object
meuse.grid <-  st_as_stars(meuse.grid)

class(meuse.grid) 
#> [1] "stars"                       # meuse.grid is indeed of class 'stars'
计算并绘制变异函数
vario <-  variogram(log(zinc)~1, meuse)
model_meuse <-  fit.variogram(vario, model = vgm(psill = 1, model = "Sph", range = 200, nugget = 1))
plot(vario, model = model_meuse)

克里格和绘图预测和方差
krige_result <- krige(formula = log(zinc)~1, meuse, meuse.grid, model = model_meuse)
#> [using ordinary kriging]
class(krige_result)
#> [1] "stars"
krige_result
#> stars object with 2 dimensions and 2 attributes
#> attribute(s):
#>                  Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
#> var1.pred  4.77655207 5.2376428 5.5728908 5.7072284 6.1717618 7.4399908 5009
#> var1.var   0.08549102 0.1372838 0.1621815 0.1853301 0.2116141 0.5002793 5009
#> dimension(s):
#>   from  to offset delta refsys point values x/y
#> x    1  78 178440    40     NA    NA   NULL [x]
#> y    1 104 333760   -40     NA    NA   NULL [y]
plot(krige_result[1]) # plot predictions

plot(krige_result[2]) # plot variances

由reprex package 创建于 2021-10-19 (v2.0.1)

【讨论】:

让我知道它是否有效。如果是这样,请考虑将此回复标记为已接受。如果没有,请告诉我您遇到的问题是什么。干杯 感谢 lovalery 的帮助和时间,它在绘制 GGTgrid 时出错 (list) object cannot be coerced to type 'double' 同样对于代码 PbSph &lt;- krige(DO_S~1, GGT, GGTgrid, model = sph.fit),它会触发长行错误 "CRS 对象有注释,在输出中丢失"proj4string(obj) 中的警告消息:PbKrig &lt;- autoKrige(DO_S~1, GGT, GGTgrid1) 此代码打印 AutoKrige 中的错误(DO_S ~ 1, GGT, GGTgrid1): Invalid input objects: input_data or data_variogram not of class 'SpatialPointsDataFrame'. 错误。 好的。对不起,我误导了你。我刚刚在上面编辑了我的答案。从头再读一遍,因为我修改了我第一次给你的那几行代码。你会看到,我做了一个评论reprex,它通常可以让你在分析中取得成功。如果您仍有任何困难,请随时问我。如果一切正常,请将答案标记为已接受。干杯。 再次感谢您的时间和帮助,我很抱歉迟到了回复,因为我有另一项任务要紧急完成。我尝试了您友好解释的步骤,但在 krige 函数上出现错误。请看问题。 不用担心延迟。我了解您可能正忙于其他任务。感谢您提供问题中的新信息。老实说,我现在不太明白为什么 R 仍然返回这个警告信息。也就是说,这是一条警告消息,而不是错误消息。那么,你最后得到结果了吗?如果是这样,它看起来是否正确?

以上是关于克里格中的“CRS 对象有注释,在输出中丢失”的主要内容,如果未能解决你的问题,请参考以下文章

转Kriging插值法

如何在 Python 中使用克里金法插入测站数据?

克里格插值结果覆盖指定范围

将具有连续比例的克里格图更改为离散的

克里克中心法则适用于所有生物吗?

克里斯·拉特纳的基本信息