我想创建一个国家(如比利时)的空间插值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()
1条答案
按热度按时间6kkfgxo01#
这里的问题是
voronoi_sf <- (as(voronoi_result, "SpatialPolygons"))
不是sf
对象,而是SpatialPolygon
对象。将其转换为具有适当CRS的sf
(EPSG:4326,因为您使用的是经度/纬度坐标,所以我假设):添加这些行
创建于2023-06-01使用reprex v2.0.2