克里格中的“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
要使这些警告消息消失,您只需要使用类型为sf
和stars
的对象(通过安装/加载相同名称的包),其中考虑到这些最近的更改。因此,我建议您在脚本开头使用以下几行代码来替换前六行代码。这将为您提供两个对象(即 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 <- krige(DO_S~1, GGT, GGTgrid, model = sph.fit)
,它会触发长行错误 "CRS 对象有注释,在输出中丢失"proj4string(obj) 中的警告消息:。 PbKrig <- 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 对象有注释,在输出中丢失”的主要内容,如果未能解决你的问题,请参考以下文章