[R-sig-Geo] Point Interpolation and Analysis
sownal chand
@own@|ch@nd|m@ @end|ng |rom gm@||@com
Tue Mar 15 06:37:52 CET 2022
Hello Sir/madam,
I have been trying to interpolate this data and make an animation by
following the codes given by Devan using Dr Timo's Dialect analysis in
Germany,
https://github.com/devanmcg/IntroRangeR/blob/master/12_RasGIS/Interpolation.R
.
Is there a way in which these code could be used for Mapping in
Pacific Region. Below is the edited version with errors
#packages
if (!require("pacman")) install.packages("pacman")
pacman::p_load(tidyverse, sf, kknn)
#
# Create a shorthand reference to Fiji Islands CRS
crs_etrs = "+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m
+no_defs"
#
# Fiji geo data
# download
#Draft map of Fiji
world <- rnaturalearth::ne_countries(scale = "Large", returnclass = "sf")
Fiji <- ggplot(data=world) +
geom_sf() +
coord_sf(
crs = 3832, # https://epsg.io/3832
xlim = c(2984265.06, 3539584.72), # limits are taken from projected
bounds
ylim = c(-2224162.41, -1811688.88) # of EPSG:3832
)+ theme_bw()
#Extract Fiji Boundary data
Fiji <- FJI %>%
filter(iso_a3 == "FJI")
plot(Fiji)
Fiji <- Fiji %>%
group_by(iso_a3) %>%
summarize()
# simplify
Fiji %>%
st_simplify(preserveTopology = T, dTolerance = 0.01)
#load point data from the data file stored
data_53YearTemp <- read.csv("C://Users/Sownal/Documents/53YearsTemp.csv")
View(data_53YearTemp)
data$long <- as.numeric(data$Longitude)
data$lat <- as.numeric(data$Latitude)
#remove NA valuues in the spatial Data Frame
data_53YearTemp <- na.omit(data_53YearTemp)
#convert 53YearTemp to a Dataframe
#spatial points dataframe
data.sp1 <- SpatialPointsDataFrame(data_53YearTemp[,c(3,4)],
data_53YearTemp[,-c(3,4)])
View(data.sp1)
#point data to sf
data.sp1 %>%
st_as_sf(coords = c("lng", "lat"),
crs = "+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84
+units=m +no_defs ")
#reproject data to the specificed crs or epsg country code
# CRS: ETRS
etrs <- "+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m
+no_defs "
Fiji %>%
st_transform(etrs)
data.sp_train %>%
st_transform(etrs)
#remove NA valuues in the spatial Data Frame
data_53YearTemp <- na.omit(data_53YearTemp)
#cliping dataframe to buffer Fiji
Fiji_buffered <- Fiji %>%
st_buffer(dist = 10000) # in meters, 10km buffer
data.sp1 <- data.sp1[Fiji_buffered, ]
# specify grid width in pixels
width_in_pixels <- 300
# dx is the width of a grid cell in meters
dx <- ceiling( (st_bbox(Fiji_buffered)["xmax"] -
st_bbox(Fiji_buffered)["xmin"]) / width_in_pixels)
# dy is the height of a grid cell in meters
# because we use quadratic grid cells, dx == dy
dy <- dx
# calculate the height in pixels of the resulting grid
height_in_pixels <- floor( (st_bbox(Fiji_buffered)["ymax"] -
st_bbox(Fiji_buffered)["ymin"]) / dy)
grid <- st_make_grid(Fiji_buffered,
cellsize = dx,
n = c(width_in_pixels, height_in_pixels),
what = "centers"
)
rm(dx, dy, height_in_pixels, Fiji_buffered)
plot(grid)
# View grid
ggplot() +
geom_sf(data=grid) +
geom_sf(data=Fiji, fill=NA, color="blue", lwd=2)
# Prepare data for interpolation
#
# Create tibble of the TempData sf object
TEmp_input <- data_53YearTemp %>%
tibble::as.tibble(data_53YearTemp = .$pronunciation_id,
lon = st_coordinates(.)[, 4],
lat = st_coordinates(.)[, 3]) %>%
select(Year, lon, lat)
#training data set for the interpolations
data.sp_train <- SpatialPointsDataFrame(data_53YearTemp[,c(3,4)],
data_53YearTemp[,-c(3,4)])
View(data.sp_train)
# config
k <- 1000 # "k" for k-nearest-neighbour-interpolation
# specify function which is executed for each tile of the grid
computeGrid <- function(grid, data.sp1, knn) {
# create empty result data frame
Temp_result <- data.frame(Temp = as.factor(NA),
lon = st_coordinates(grid)[, 1],
lat = st_coordinates(grid)[, 2])
# run KKNN
Temp_kknn <- kknn::kknn(data.sp1_train ~ .,
train = data.sp1_train,
test = Temp_result,
kernel = "gaussian",
k = knn)
# bring back to result data frame
# only retain the probability of the dominant dialect at that grid cell
Temp_result %>%
# extract the interpolated dialect at each grid cell with the
# kknn::fitted function
mutate(Temp = fitted(Temp_kknn),
# only retain the probability of the interpolated dialect,
# discard the other 7
prob = apply(Temp_kknn$prob,
1,
function(x) max(x)))
return(Temp_result)
}
# specify the number of cores below (adapt if you have fewer cores or
# want to reserve some computation power to other stuff)
#registerDoParallel(cores = 5)
# specify number of batches and resulting size of each batch (in grid cells)
no_batches <- 60 # increase this number if you run into memory problems
batch_size <- ceiling(length(grid) / no_batches)
# PARALLEL COMPUTATION
start.time <- Sys.time()
Temp_result <- foreach(
batch_no = 1:no_batches,
# after each grid section is computed, rbind the resulting df into
# one big dialects_result df
.combine = rbind,
# the order of grid computation doesn't matter: this speeds it up even
more
.inorder = FALSE) %dopar% {
# compute indices for each grid section, depending on batch_size and
current
# batch
start_idx <- (batch_no - 1) * batch_size + 1
end_idx <- batch_no * batch_size
# specify which section of the grid to interpolate, using regular
# subsetting
grid_batch <- grid[start_idx:ifelse(end_idx > length(grid),
length(grid),
end_idx)]
# apply the actual computation to each grid section
df <- computeGrid(grid_batch, data.sp1_train, k)
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
# convert resulting df back to sf object, but do not remove raw geometry
cols
Temp_raster <- st_as_sf(data.sp_train,
coords = c("lon", "lat"),
crs = etrs,
remove = F)
# clip raster to Fiji again
Temp_raster <- Temp_raster[Fiji, ]
rm(Temp_result, k)
Sample data is also provided. Any assistance would be greatly appreciated.
Yours sincerely
sownalc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20220315/856f8f3b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DataTemp.csv
Type: application/vnd.ms-excel
Size: 5203 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20220315/856f8f3b/attachment.xlb>
More information about the R-sig-Geo
mailing list