在R中使用ggplot进行空间插值Map温度

ukxgm1gy  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(119)

我想创建一个国家(如比利时)的空间插值3Map使用GADM geopkg数据,可以在那里找到:https://gadm.org/download_country.html
我们的想法是创建3个插值贴图:

  • Voronoi插值
  • IDW插值
  • 普通克里格插值

我也想使用ggplot 2库。我的目标是进行空间插值与几个观察,但这是插在全国各地。
有没有人有任何想法来调试我的代码,并帮助我实现IDW /克里金法?
我还附上了一个例子,在互联网上找到的,我试图复制尽可能多的。我也在努力确保,就像照片中一样,温度标度是按度或半度分类的。
What i want to do
下面是我的代码起点:
这段代码试图对Voronoi做同样的事情,但是由于某些原因,代码无法访问geom_sf中的温度场

library(tidyverse)
library(sf)
library(sp)
library(spatstat)
library(maptools)

belgium_gadm <- st_read("gadm41_BEL.gpkg", layer="ADM_ADM_0")

temps_data <- data.frame(
  city = c("Brussels", "Antwerp", "Ghent"), 
  lat = c(50.8503, 51.2194, 51.0543), 
  lon = c(4.3517, 4.4024, 3.7174), 
  temperature = c(15, 16, 17)
)

coordinates(temps_data) <- ~lon+lat

temp_ppp <- as.ppp(
  matrix(c(temps_data$lon, temps_data$lat), ncol = 2),
  W = as.owin(st_bbox(belgium_gadm))
)

voronoi_result <- dirichlet(temp_ppp)

voronoi_sf <- (as(voronoi_result, "SpatialPolygons"))

voronoi_sf$temperature <- over(voronoi_sf,temps_data[,2], fn = mean)$temperature

ggplot() +
  geom_sf(data = belgium_gadm, fill = NA, color = 'black') +
  geom_sf(data = voronoi_sf, aes(fill = temperature)) +
  coord_sf() +
  theme_minimal()
6kkfgxo0

6kkfgxo01#

这里的问题是voronoi_sf <- (as(voronoi_result, "SpatialPolygons"))不是sf对象,而是SpatialPolygon对象。将其转换为具有适当CRS的sf(EPSG:4326,因为您使用的是经度/纬度坐标,所以我假设):

library(tidyverse)
library(sf)
library(sp)
library(spatstat)
library(maptools)

belgium_gadm <- giscoR::gisco_get_countries(country = "BEL")

temps_data <- data.frame(
  city = c("Brussels", "Antwerp", "Ghent"), 
  lat = c(50.8503, 51.2194, 51.0543), 
  lon = c(4.3517, 4.4024, 3.7174), 
  temperature = c(15, 16, 17)
)

coordinates(temps_data) <- ~lon+lat

temp_ppp <- as.ppp(
  matrix(c(temps_data$lon, temps_data$lat), ncol = 2),
  W = as.owin(st_bbox(belgium_gadm))
)

voronoi_result <- dirichlet(temp_ppp)

voronoi_sf <- (as(voronoi_result, "SpatialPolygons"))

voronoi_sf$temperature <- over(voronoi_sf,temps_data[,2], fn = mean)$temperature

添加这些行

#######################
#### NEW CODE HERE ####
####################### 
# See here how to convert to sf
voronoi_sf <- st_as_sf(voronoi_sf)
# Need to assig crs
st_crs(voronoi_sf) <- st_crs(4326)

# Same for cities
temps_data_sf <- st_as_sf(temps_data)
st_crs(temps_data_sf)<- st_crs(4326)

# Final plot
ggplot() +
  geom_sf(data = belgium_gadm, fill = NA, color = 'black') +
  geom_sf(data = voronoi_sf, aes(fill = temperature), alpha = 0.5) +
  geom_sf(data = temps_data_sf) +
  theme_minimal()

创建于2023-06-01使用reprex v2.0.2

相关问题