vein imports functions from spatial packages listed below. In order to install these packages, firstly the user must install the requirements mentioned here.
VEIN can be installed via CRAN or github
install.packages("vein")
remotes::install_github("atmoschem/vein")
or if you have a 32 bits machine
install_github("atmoschem/vein",
INSTALL_opts = "--no-multiarch")
Then, if you want, run the demo
library(vein)
demo(VEIN)
At the moment, most of the projects covers Brazilian regions, but I will include China, Europe or USA approaches as soon as I can.
Use the function get_project and read the documentation, there you can see more projects as well.
Check the projects here: (https://atmoschem.github.io/vein/reference/get_project.html)[https://atmoschem.github.io/vein/reference/get_project.html]
library(vein)
?get_project
get_project(directory = "awesome_city")
The structure of the new directory “awesome_city” is:
awesome_city
├── config
│ ├── clean.R
│ ├── config.R
│ ├── inventory.xlsx
│ └── packages.R
├── main.R
├── main.Rproj
├── network
│ ├── net.gpkg
│ └── net.rds
├── scripts
│ ├── evaporatives.R
│ ├── exhaust.R
│ ├── fuel_eval.R
│ ├── net.R
│ ├── pavedroads.R
│ ├── plots.R
│ ├── post.R
│ ├── traffic.R
│ └── wrf.R
└── wrf
└── wrfinput_d02
You have to open the file main.Rproj
with Rstudio and then open and
run main.R
To run main.R
you will need these extra packages:
If you do not have them already, you can install:
install.packages(c("ggplot2", "readxl", "eixport"))
Read the instruction of inventory
?inventory
library(vein)
data("net")
PC_E25_1400 <- age_ldv( x = net$ldv)
plot(PC_E25_1400)
#> Weighted mean = 11.17
If you want to know the vehicles per street and by age of use, just add the net. Age functions now returns ‘sf’ objects if the net argument is present.
PC_E25_1400net <- age_ldv(
x = net$ldv,
net = net
)
plot(PC_E25_1400net,
key.pos = 4,
pal = cptcity::cpt(
colorRampPalette = T,
rev = T))
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> Warning: plotting the first 9 out of 50 attributes; use max.plot = 50 to plot
#> all
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
temporal factors and netspeed
data("net")
data("pc_profile")
pc_week <- temp_fact(
net$ldv + net$hdv,
pc_profile
)
dfspeed <- netspeed(
q = pc_week,
ps = net$ps,
ffs = net$ffs,
cap = net$capacity,
lkm = net$lkm,
alpha = 1.5
)
plot(dfspeed)
#> Weighted mean = 44.16
If you want ot check the speed at different hours by street, just add net:
dfspeednet <- netspeed(
q = pc_week,
ps = net$ps,
ffs = net$ffs,
cap = net$capacity,
lkm = net$lkm,
alpha = 1.5,
net = net
)
plot(
dfspeednet[, c("S1", "S9")],
key.pos = 4,
pal = cptcity::cpt(colorRampPalette = T,
rev = T),
axes = T
)
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#### 2) Emission Factors
V <- 0:150
ef1 <- ef_ldv_speed(
v = "PC",
t = "4S",
cc = "<=1400",
f = "G",
eu = "PRE",
p = "CO"
)
ef2 <- ef_ldv_speed(
v = "PC",
t = "4S",
cc = "<=1400",
f = "G",
eu = "III",
p = "CO"
)
ef1 <- EmissionFactors(ef1(1:150))
ef2 <- EmissionFactors(ef2(1:150))
colplot(data.frame(PRE = ef1, III = ef2))
euro <- c(
rep("V", 5),
rep("IV", 5),
rep("III", 5),
rep("II", 5),
rep("I", 5),
rep("PRE", 15)
)
lef <- lapply(1:40, function(i) {
ef_ldv_speed(
v = "PC",
t = "4S",
cc = "<=1400",
f = "G",
eu = euro[i],
p = "CO",
show.equation = FALSE
)
})
E_CO <- emis(
veh = PC_E25_1400,
lkm = net$lkm,
ef = lef,
speed = dfspeed,
profile = pc_profile
)
E_CO_DF <- emis_post(
arra = E_CO,
veh = "PC",
size = "<1400",
fuel = "G",
pollutant = "CO",
by = "veh",
type_emi = "exhaust"
)
E_CO_STREETS <- emis_post(
arra = E_CO,
pollutant = "CO",
by = "streets",
net = net
)
plot(
E_CO_STREETS[, c("V1", "V9")],
key.pos = 4,
pal = cptcity::cpt(colorRampPalette = T,
rev = T),
axes = T)
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
1) Create a grid using make_grid
.The spobj is the spatial net. The
size of the grid has the size of the net. You have to specify the
grid spacing.
2) Create a grid using a path to wrfinput file instead a net. The grid
will have the size of the wrf_input. You don’t have to specify the
grid spacing.
data(net)
E_CO_STREETSnet <- emis_post(
arra = E_CO,
pollutant = "CO",
by = "streets_wide",
net = net
)
g <- make_grid(
spobj = net,
width = 1/102.47
)
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> Number of lon points: 12
#> Number of lat points: 10
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
E_CO_g <- emis_grid(
spobj = E_CO_STREETSnet,
g = g,
sr= 31983
)
#> Your units are:
#> g
#> Transforming spatial objects to 'sr'
#> old-style crs object detected; please recreate object with a recent sf::st_crs()
#> Sum of street emissions 148791715.29
#> Sum of gridded emissions 148791715.29
na <- paste0("V", 1:168)
for(i in 1:168) E_CO_g[[na[i]]] <- E_CO_g[[na[i]]] * units::set_units(1, "1/h")
plot(
E_CO_g[, c("V1", "V9")],
key.pos = 4,
pal = cptcity::cpt(colorRampPalette = T,
rev = T,
pal = "mpl_viridis"),
axes = T,
lty = 0
)
library(eixport)
dir.create(file.path(tempdir(), "EMISS"))
wrf_create(wrfinput_dir = system.file("extdata", package = "eixport"),
wrfchemi_dir = file.path(tempdir(), "EMISS"),
domains = 2,
frames_per_auxinput5 = 1, #hours
auxinput5_interval_m = 60,
verbose = TRUE)
path_to_wrfi <- paste0(system.file("extdata", package = "eixport"), "/wrfinput_d02")
path_to_wrfc <- list.files(file.path(tempdir(), "EMISS"), full.names = TRUE)[1]
gwrf <- eixport::wrf_grid(path_to_wrfi)
E_CO_gwrf <- emis_grid(spobj = E_CO_STREETSnet, g = gwrf)
gr <- GriddedEmissionsArray(E_CO_gwrf, rows = 51, cols = 63, times = 1)
eixport::wrf_put(file = path_to_wrfc, name = "E_CO", POL = gr)
Thanks and enjoy VEIN!
If you use VEIN, please, cite it (BIBTEX, ENDNOTE):
Ibarra-Espinosa, S., Ynoue, R., O’Sullivan, S., Pebesma, E., Andrade, M. D. F., and Osses, M.: VEIN v0.2.2: an R package for bottom-up vehicular emissions inventories, Geosci. Model Dev., 11, 2209-2229, https://doi.org/10.5194/gmd-11-2209-2018, 2018.
@article{gmd-11-2209-2018,
author = {Ibarra-Espinosa, S. and Ynoue, R. and O'Sullivan, S. and Pebesma, E. and Andrade, M. D. F. and Osses, M.},
title = {VEIN v0.2.2: an R package for bottom--up vehicular emissions inventories},
journal = {Geoscientific Model Development},
volume = {11},
year = {2018},
number = {6},
pages = {2209--2229},
url = {https://gmd.copernicus.org/articles/11/2209/2018/},
doi = {10.5194/gmd-11-2209-2018}
}
If you encounter any issues while using VEIN, please submit your issues to: https://github.com/atmoschem/vein/issues/ If you have any suggestions just let me know to sergio.ibarra@usp.br.
Please, read this guide. Contributions of all sorts are welcome, issues and pull requests are the preferred ways of sharing them. When contributing pull requests, please follow the Google’s R Style Guide. This project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Sometimes you need to install R and all dependencies and a way for doing that is using anaconda. Well, as my system is in portuguese, after installing R using anaconda it changed the decimal character to ‘,’. In order to change it back to english meaning decimal separator as ‘.’, I added this variable into the .bashrc
nano ~/.bashrc
export Lang=C
More details on StackOverflow
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.