将矢量图像置于栅格的下方,以便在R中进行克里格运算

将矢量图像置于栅格的下方,以便在R中进行克里格运算,r,sp,kriging,gstat,geostatistics,R,Sp,Kriging,Gstat,Geostatistics,在到处搜索、询问和编写代码之后,我在R的gstat中获得了进行克里格运算的最小值 使用4个点(我知道,非常糟糕),我对位于它们之间的未采样点进行了克里格。但实际上,我并不需要所有这些要点。在该区域内,有一个较小的分区。。。这是我真正需要的地方 长话短说。。我在4个气象站进行了测量,这些气象站报告了降雨数据。这些点的横向坐标和纵向坐标为: lat long 7.16 124.21 8.6 123.35 8.43 124.28 8.15 125.08 我的克里金之路可以从我

在到处搜索、询问和编写代码之后,我在R的gstat中获得了进行克里格运算的最小值

使用4个点(我知道,非常糟糕),我对位于它们之间的未采样点进行了克里格。但实际上,我并不需要所有这些要点。在该区域内,有一个较小的分区。。。这是我真正需要的地方

长话短说。。我在4个气象站进行了测量,这些气象站报告了降雨数据。这些点的横向坐标和纵向坐标为:

lat    long
7.16   124.21
8.6    123.35
8.43   124.28
8.15   125.08
我的克里金之路可以从我之前关于StackOverflow的问题中看出

这:

这是:

我知道中的图像具有坐标(至少根据我的估计):

转换将发生,但这并不重要,我认为,或更容易处理以后

图像也是不规则的(但它们不是全部)

把它想象成一个甜甜圈,你对甜甜圈的整个圆形进行克里格,但是你只需要这个洞覆盖的区域,这样你就可以移除或者至少忽略你从甜甜圈本身得到的值

我有一个有问题区域的图像(.jpg),我必须使用QGIS或类似软件将图像转换为shapefile或其他矢量格式。之后,我将不得不在4点克里格区域内插入向量图像,所以我知道要考虑哪些坐标和要移除哪些坐标。 最后,我获取图像覆盖区域的值,并将其存储到csv或数据库中

有人知道我怎么从这个开始吗?R和统计的总noob。感谢所有回应的人

我只是想知道它是否可能,如果它是提供一些提示。再次感谢

也可以发布我的脚本:

suppressPackageStartupMessages({
  library(sp)
  library(gstat)
  library(RPostgreSQL)
  library(dplyr) # for "glimpse"
  library(ggplot2)
  library(scales) # for "comma"
  library(magrittr)
  library(gridExtra)
  library(rgdal)
  library(raster)
  library(leaflet)
  library(mapview)
})


drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname="Rainfall Data", host="localhost", port=5432, 
             user="postgres", password="postgres")
day_1 <- dbGetQuery(con, "SELECT lat, long, rainfall FROM cotabato.sample")

coordinates(day_1) <- ~ lat + long
plot(day_1)

x.range <- as.integer(c(7.0,9.0))
y.range <- as.integer(c(123.0,126.0))

grid <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=0.05), 
               y=seq(from=y.range[1], to=y.range[2], by=0.05))

coordinates(grid) <- ~x+y
plot(grid, cex=1.5)
points(day_1, col='red')
title("Interpolation Grid and Sample Points")

day_1.vgm <- variogram(rainfall~1, day_1, width = 0.02, cutoff = 1.8)
day_1.fit <- fit.variogram(day_1.vgm, model=vgm("Sph", psill = 8000, range = 1))
plot(day_1.vgm, day_1.fit)

plot1 <- day_1 %>% as.data.frame %>%
  ggplot(aes(lat, long)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points with measurements")

plot(plot1)

############################

plot2 <- grid %>% as.data.frame %>%
  ggplot(aes(x, y)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points at which to estimate")

plot(plot2)
grid.arrange(plot1, plot2, ncol = 2)
coordinates(grid) <- ~ x + y

############################

day_1.kriged <- krige(rainfall~1, day_1, grid, model=day_1.fit)

day_1.kriged %>% as.data.frame %>%
  ggplot(aes(x=x, y=y)) + geom_tile(aes(fill=var1.pred)) + coord_equal() +
  scale_fill_gradient(low = "yellow", high="red") +
  scale_x_continuous(labels=comma) + scale_y_continuous(labels=comma) +
  theme_bw()

write.csv(day_1.kriged, file = "Day_1.csv")
suppress-packagestartpmessages({
图书馆(sp)
图书馆(gstat)
库(RPostgreSQL)
图书馆(dplyr)#用于“一瞥”
图书馆(GG2)
图书馆(比例尺)#表示“逗号”
图书馆(magrittr)
图书馆(gridExtra)
图书馆(rgdal)
图书馆(光栅)
图书馆(单张)
图书馆(地图视图)
})

drv要简化您的问题:

  • 您希望基于未进行地理参考的图像描绘区域
  • 您希望仅为此区域提取插值结果
只需要几个步骤

  • 您需要使用QGIS对图像进行地理参考(
    光栅>地理参考器
    )。您需要在背景中有一个地理参考地图来提供帮助。这将创建具有空间信息的光栅对象
  • 有两种可能性。
    • 2.a。图像的中心部分的颜色不能直接用作R中的遮罩(例如,红色像素中间的所有绿色像素)
    • 2.b。如果没有,则需要使用QGIS手动描绘该区域的多边形(
      Layer>Create Layer>New Shapefile>Polygon
  • 在R中导入光栅或多边形形状文件
  • 使用函数
    raster::mask
    使用光栅图像或空间多边形提取插值值

  • 如果您觉得这有用,请告诉我:

    “把它想象成一个油炸圈饼,你可以对油炸圈饼的整个圆形进行克里格分析,但你只需要这个洞覆盖的区域,这样你就可以去掉或者至少忽略从油炸圈饼本身得到的值。”

    为此,请加载矢量数据:

    donut <- rgdal::readOGR('/variogram', 'donut')
    day_1@proj4string@projargs <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" # Becouse donut shape have this CRS
    
    plot(donut, axes = TRUE, col = 3)
    plot(day_1, col = 2, pch = 20, add = TRUE)
    

    “最后,我获取图像覆盖区域的值,并将其存储到csv或数据库中。”


    希望你觉得这很有用,我回应你的意思

    你说得对,我将编辑这篇文章以符合要求的标准。@42查看我所做的编辑。这就足够了吗?如果SQL数据集是其中一个包的一部分就足够了。不会是我,因为我已经一个星期没在我的机器旁了。我怀疑我能做得更多,但如果你在3天内没有得到有用的回复,请打电话给我。我可以悬赏,悬赏?那是我不熟悉的堆垛机吗?对社区来说有点新鲜。看看单独面板中的“特色”项目。我正在投票,但还没有授予奖金,因为我没有看到一个完全编码的解决方案。由于我在度假,我无法确定这套说明对我在GIS编码方面经验有限的人来说是否足够。我理解。事实上,这个问题需要更多的QGIS而不是R。因此,没有太多的编码。问题是,它需要一个完整的协议,我通常会建议作为一个完整的1天教程。我不认为stackoverflow旨在提供这样完整的课程。通过给定的步骤,Ace_01S将知道在哪里查看:QGIS手册…然后我将等待@Ace_01S的进一步输入。我没有这方面的经验。哇,没想到会有人回答。我将尝试更彻底地研究QGIS。至于问题的R面,从发帖到现在,我已经有了一些想法。这看起来真的很有希望。我一定要试试这个。编辑:有很多代码需要解析。我得给这几天时间来处理。其中一些东西对我来说是非常新的(或闻所未闻的),而且,它实际上不是一个甜甜圈,因为有一个甜甜圈网格看起来很奇怪。它是一个矩形网格,形状不规则。但我知道我可以如何解决它。我仍然无法检查正确性,但它至少给人一个有用的开始的感觉。谢谢你的努力。如果你需要帮助,请告诉我;)<代码>孔
    donut <- rgdal::readOGR('/variogram', 'donut')
    day_1@proj4string@projargs <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" # Becouse donut shape have this CRS
    
    plot(donut, axes = TRUE, col = 3)
    plot(day_1, col = 2, pch = 20, add = TRUE)
    
    hole <- donut # for keep original shape
    hole@polygons[1][[1]]@Polygons[1] <- NULL
    hole@polygons[1][[1]]@Polygons[1][[1]]@hole <- FALSE
    
    plot(hole, axes = TRUE, col = 4, add = TRUE)
    
    over.pts <- over(day_1, hole)
    day_1_subset <- day_1[!is.na(over.pts$Id), ]
    
    plot(donut, axes = TRUE, col = 3)
    plot(hole, col = 4, add = TRUE)
    plot(day_1, col = 2, pch = 20, add = TRUE)
    plot(day_1_subset, col = 'white', pch = 1, cex = 2, add = TRUE)
    
    write.csv(day_1_subset@data, 'myfile.csv') # write intersected points table
    write.csv(as.data.frame(coordinates(day_1_subset)), 'myfile.csv') # write intersected points coords
    writeOGR(day_1_subset, 'path', 'mysubsetlayer', driver = 'ESRI Shapefile') # write intersected points shape
    
    coordDf <- as.data.frame(coordinates(day_1)) # get basemap from points
    # coordDf <- data.frame(hole@polygons[1][[1]]@Polygons[1][[1]]@coords) # get basemap from hole
    colnames(coordDf) <- c('x', 'y') 
    imag <- dismo::gmap(coordDf, lonlat = TRUE)
    myimag <- raster::crop(day_1.kriged, hole)
    plot(myimag)
    plot(day_1, add = TRUE, col = 2)
    
    myCropKrig<- raster::crop(day_1.kriged, hole)
    
      myCropKrig %>% as.data.frame %>%
      ggplot(aes(x=x, y=y)) + geom_tile(aes(fill=var1.pred)) + coord_equal() +
      scale_fill_gradient(low = "yellow", high="red") +
      scale_x_continuous(labels=comma) + scale_y_continuous(labels=comma) +
      geom_point(data=coordDf[!is.na(over.pts$Id), ], aes(x=x, y=y), color="blue", size=3, shape=20) +
      theme_bw()
    
    write.csv(as.data.frame(myCropKrig), 'myCropKrig.csv')