Suite

Couper le fichier de formes à la surface interpolée (contours) dans R ?


R novice ici, essayant de travailler à travers la tâche toujours intimidante de couper mes données. J'ai posté plusieurs questions sur la façon de découper différents types de données, alors en voici une autre, complète avec toutes mes données pour reproduire les résultats. :)

Données : données CSV, fichier de formes

Ma carte représente les périodes de retour des précipitations en Tanzanie. J'ai utilisé la méthode d'interpolation IDW pour réaliser ce tracé. Au lieu d'avoir toute la surface sur/autour de TZ profilée, j'ai seulement besoin que les contours soient coupés dans le fichier de formes TZ. Voici mon code, qui a été fourni par cet excellent tutoriel :

setwd("D:/Mapping-R/Returns-Practice") library(ggplot2) library(gstat) library(sp) library(maptools) tz <- read.csv("TZ_ReturnPeriods.csv", header = TRUE) temp < - tz temp$x <- temp$Lon temp$y <- temp$Lat coordinates(temp) <- ~x + y plot(temp) x.range <- as.numeric(c(28.61, 41.19)) y. range <- as.numeric(c(-12,61, -0,19)) tz.grid <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 0,1 ), y = seq(from = y.range[1], to = y.range[2], by = 0,1)) coordonnées(tz.grid) <- ~x + y plot(tz.grid, cex = 1.5 , col = "grey") points(temp, pch = 16, col = "blue", cex = 0.5) idw <- idw(formula = Return.10 ~ 1, locations = temp, newdata = tz.grid) idw. output <- as.data.frame(idw) names(idw.output)[1:3] <- c("Longitude", "Latitude", "Return") ggplot() + geom_tile(data = idw.output, aes(x = Longitude, y = Latitude, fill = Return)) + geom_point(data = tz, aes(x = Lon, y = Lat), shape = 21, color = "red") tz.contour <- readShapePoly( "TZA_adm0.shp") tz.contour <- fortify(tz.contour, region = "NAME_0" ) ggplot() + geom_tile(data = idw.output, alpha = 0.8, aes(x = Longitude, y = Latitude, fill = round(Return, 0))) + scale_fill_gradient(low = "cyan", high = "orange ") + geom_path(data = tz.contour, aes(long, lat, group = group), color = "grey") + geom_point(data = tz, aes(x = Lon, y = Lat), shape = 16, cex = 0.5, color = "red") + labs(fill = "Rainfall", title = "10 Year Return Period in Tanzania")

Ce code produit cette image :

MAIS ce n'était que la moitié de la bataille. Je dois découper le fichier de formes de la Tanzanie sur la surface profilée afin que SEULS les contours à l'intérieur des frontières de la Tanzanie soient affichés. J'ai trouvé beaucoup de presque-solutions, mais rien qui fonctionne vraiment.


J'utiliserais le package raster pour découper.

Dans votre code, à partir de la lignetz.contour <- readShapePoly…procédez comme suit :

tz.contour <- readShapePoly("TZA_adm0.shp") # utilisez-le pour découper tz.contour.dfr <- fortify(tz.contour, region = "NAME_0") # utilisez-le pour tracer la bibliothèque (raster) idw.r < - rasterFromXYZ(idw.output[, c("Longitude", "Latitude", "Retour")]) idw.crp <- crop(idw.r, tz.contour) idw.msk <- mask(idw.crp, tz.contour) idw.msk.dfr <- as.data.frame(rasterToPoints(idw.msk)) names(idw.msk.dfr)[1:2] <- c("Longitude", "Latitude") # maintenant tracer: ggplot() + geom_tile(data = idw.msk.dfr, alpha = 0.8, aes(x = Longitude, y = Latitude, fill = round(Return, 0))) + scale_fill_gradient(low = "cyan", high = "orange") + geom_path(data = tz.contour.dfr, aes(long, lat, group = group), color = "grey") + geom_point(data = tz, aes(x = Lon, y = Lat ), shape = 16, cex = 0.5, color = "red") + labs(fill = "Rainfall", title = "10 Year Return Period in Tanzania") + coord_equal() + theme(panel.grid.major = element_blank (), panel.grid.minor = element_blank(), panel.background = element_blank())


Voir la vidéo: ArcGIS Pro: Topo to Raster Interpolation (Octobre 2021).