--- title: "adw" output: html_document: highlight: textmate keep_md: true number_sections: no theme: united toc: yes toc_float: yes vignette: > %\VignetteIndexEntry{adw: Angular Distance Weighting Interpolation} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE, message=FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Angular Distance Weighting Interpolation The irregularly-spaced data are interpolated onto regular latitude-longitude grids by weighting each station according to its distance and angle from the center of a search radius. In addition to this, we also provide a simple way (Jones and Hulme, 1996) to grid the irregularly-spaced data points onto regular latitude-longitude grids by averaging all stations in grid-boxes. ## Reference Caesar, J., L. Alexander, and R. Vose, 2006: Large-scale changes in observed daily maximum and minimum temperatures: Creation and analysis of a new gridded data set. Journal of Geophysical Research, 111, . Jones, P. D., and M. Hulme, 1996: Calculating regional climatic time series for temperature and precipitation: Methods and illustrations. Int. J. Climatol., 16, 361–377, 3.0.CO;2-F>. ## Installation Install the latest CRAN release via command: ```{r,eval=FALSE} install.packages("adw") ``` ## generate data and plot scatter ```{r, message=FALSE} library(sf) library(ggplot2) library(adw) library(cnmap) set.seed(1) tavg <- data.frame(lon = runif(100, min = 110, max = 117), lat = runif(100, min = 31, max = 37), value = runif(100, min = 20, max = 35)) hmap <- getMap(name = "河南省", returnClass = "sf") ggplot() + geom_point(data = tavg, aes(x = lon, y = lat, colour = value), pch = 17, size = 2.5) + geom_sf(data = st_cast(hmap, 'MULTILINESTRING')) + scale_colour_fermenter(palette = "YlOrRd", direction = 1, breaks = seq(from = 25, to = 32, by = 1), limits = c(0, 100), name = expression("\u00B0C")) + ggtitle("The irregularly-spaced data") + theme_bw() + theme(axis.title = element_blank(), legend.key.width = unit(0.5,"cm"), legend.key.height = unit(1.5, "cm"), plot.title = element_text(hjust = 0.5, size = 11)) ``` ## Interpolation ### Usage 1 The parameter *extent* in the **adw** function is a *sf* class (sf package), and the coordinate reference system of the object is WGS1984 (EPSG: 4326). ```{r} library(adw) hmap_sf <- getMap(name = "河南省", returnClass = "sf") |> st_make_valid() dg <- adw(tavg, extent = hmap_sf, gridsize = 0.1, cdd = 400) head(dg) ggplot() + geom_tile(data = dg, aes(x = lon, y = lat, fill = value)) + geom_sf(data = st_cast(hmap_sf, 'MULTILINESTRING')) + scale_fill_fermenter(palette = "YlOrRd", direction = 1, breaks = seq(from = 25, to = 32, by = 1), limits = c(0, 100), name = expression("\u00B0C"), na.value = "white") + ggtitle("Angular distance weighting interpolation") + theme_bw() + theme(axis.title = element_blank(), legend.key.width = unit(0.5,"cm"), legend.key.height = unit(1.5, "cm"), plot.title = element_text(hjust = 0.5, size = 11)) ``` ### Usage 2 The parameter *extent* in the **adw** function is a *SpatVector* class (terra packag), and the coordinate reference system of the object is WGS1984 (EPSG: 4326). ```{r} library(adw) library(terra) hmap_sv <- getMap(name = "河南省", returnClass = "sv") dg <- adw(tavg, extent = hmap_sv, gridsize = 0.1, cdd = 400) head(dg) ggplot() + geom_tile(data = dg, aes(x = lon, y = lat, fill = value)) + geom_sf(data = st_cast(hmap_sf, 'MULTILINESTRING')) + scale_fill_fermenter(palette = "YlOrRd", direction = 1, breaks = seq(from = 25, to = 32, by = 1), limits = c(0, 100), name = expression("\u00B0C"), na.value = "white") + ggtitle("Angular distance weighting interpolation") + theme_bw() + theme(axis.title = element_blank(), legend.key.width = unit(0.5,"cm"), legend.key.height = unit(1.5, "cm"), plot.title = element_text(hjust = 0.5, size = 11)) ``` ### Usage 3 The parameter *extent* in the **adw** function is a extent *vector* of length 4 in the order [xmin, xmax, ymin, ymax] ```{r} library(adw) interpExtent <- c(110.36, 116.65, 31.38, 36.37) # [xmin, xmax, ymin, ymax] dg <- adw(tavg, extent = interpExtent, gridsize = 0.1, cdd = 400) head(dg) ggplot() + geom_tile(data = dg, aes(x = lon, y = lat, fill = value)) + geom_sf(data = st_cast(hmap_sf, 'MULTILINESTRING')) + scale_fill_fermenter(palette = "YlOrRd", direction = 1, breaks = seq(from = 25, to = 32, by = 1), limits = c(0, 100), name = expression("\u00B0C"), na.value = "white") + ggtitle("Angular distance weighting interpolation") + theme_bw() + theme(axis.title = element_blank(), legend.key.width = unit(0.5,"cm"), legend.key.height = unit(1.5, "cm"), plot.title = element_text(hjust = 0.5, size = 11)) ``` ### Usage 4 The irregularly-spaced data of points are converted onto regular latitude-longitude grids by averaging all stations in grid-boxes. The parameter *extent* in the **point2grid** function is a extent *vector* of length 4 in the order [xmin, xmax, ymin, ymax], or a simple fearture object, or a SpatVect object. ```{r} library(adw) interpExtent <- c(110.36, 116.65, 31.38, 36.37) # [xmin, xmax, ymin, ymax] dg <- points2grid(tavg, extent = interpExtent, gridsize = 0.5) head(dg) ggplot() + geom_tile(data = dg, aes(x = lon, y = lat, fill = value)) + geom_sf(data = st_cast(hmap_sf, 'MULTILINESTRING')) + scale_fill_fermenter(palette = "YlOrRd", direction = 1, breaks = seq(from = 25, to = 32, by = 1), limits = c(0, 100), name = expression("\u00B0C"), na.value = "white") + ggtitle("Averaging all stations in grid-boxes") + theme_bw() + theme(axis.title = element_blank(), legend.key.width = unit(0.5,"cm"), legend.key.height = unit(1.5, "cm"), plot.title = element_text(hjust = 0.5, size = 11)) ``` ### Area weight average The large area, or hemispheric, or global averages can be calculated dependent on the area represented by the grid-point or grid-box. The weight of latitude-longitude grid-points-boxes should be the cosine of the latitude of the ith grid-point-box. ```{r} dg <- na.omit(dg) awa(dg$value, dg$lat) ```