# ediblecity

    library(ediblecity)

## Set scenarios of urban agriculture

The function `set_scenario` provides a convenient way to create randomized scenarios for urban agriculture. We use the `city_example` provided with the package that is meant to serve as example to create a model for a city of interest.

We create one scenario, with 50% of normal gardens, vacant plot, streets and 75% of rooftops converted to edible_gardens. And with 50% of created gardens being for commercial purposes. To see the correspondence between original and urban agriculture elements, see `?set_scenario`.

    scenario <- set_scenario(city_example,
                               pGardens = 0.5,
                               pVacant = 0.5,
                               pRooftop = 0.75,
                               private_gardens_from = "Normal garden",
                               vacant_from = c("Vacant", "Streets"),
                               rooftop_from = "Rooftop",
                               pCommercial = 0.5)
    #> Only 328 rooftops out of 453 assumed satisfy the 'min_area_rooftop'

The warnings are triggered when there are not elements enough to fulfill the proportions provided to the function.

in this examples, we use the scenario created with `set_scenario`, but all the indicators can be calculated using an `sf` object with the same structure as `city_example`.

Likewise, all the parameters used by the indicators are defined in `city_land_uses`. However, all indicators provide an option to override this an provide a customized dataframe with the parameters. The structure of this dataframe is detailed in the documentation of each function.

## Estimate the benefits of urban agriculture

### Urban Heat Island

The urban heat island indicator can return a summary of values or a `stars` object. It needs a raster representing the Sky view factor. See `?UHI` for more details. We use the `SVF` object provided with the package.

    UHI(scenario, SVF)
    #> Warning in CPL_rasterize(file, driver, st_geometry(sf), values, options, : GDAL
    #> Message 1: The definition of geographic CRS EPSG:4258 got from GeoTIFF keys is
    #> not the same as the one from the EPSG registry, which may cause issues during
    #> reprojection operations. Set GTIFF_SRS_SOURCE configuration option to EPSG to
    #> use official parameters (overriding the ones from GeoTIFF keys), or to GEOKEYS
    #> to use custom values from GeoTIFF keys and drop the EPSG code.
    #> Warning in CPL_read_gdal(as.character(x), as.character(options),
    #> as.character(driver), : GDAL Message 1: The definition of geographic CRS
    #> EPSG:4258 got from GeoTIFF keys is not the same as the one from the EPSG
    #> registry, which may cause issues during reprojection operations. Set
    #> GTIFF_SRS_SOURCE configuration option to EPSG to use official parameters
    #> (overriding the ones from GeoTIFF keys), or to GEOKEYS to use custom values
    #> from GeoTIFF keys and drop the EPSG code.
    #>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    #>   0.000   0.551   1.016   1.033   1.419   2.587

    plot(UHI(scenario, SVF, return_raster = TRUE))
    #> Warning in CPL_rasterize(file, driver, st_geometry(sf), values, options, : GDAL
    #> Message 1: The definition of geographic CRS EPSG:4258 got from GeoTIFF keys is
    #> not the same as the one from the EPSG registry, which may cause issues during
    #> reprojection operations. Set GTIFF_SRS_SOURCE configuration option to EPSG to
    #> use official parameters (overriding the ones from GeoTIFF keys), or to GEOKEYS
    #> to use custom values from GeoTIFF keys and drop the EPSG code.
    #> Warning in CPL_read_gdal(as.character(x), as.character(options),
    #> as.character(driver), : GDAL Message 1: The definition of geographic CRS
    #> EPSG:4258 got from GeoTIFF keys is not the same as the one from the EPSG
    #> registry, which may cause issues during reprojection operations. Set
    #> GTIFF_SRS_SOURCE configuration option to EPSG to use official parameters
    #> (overriding the ones from GeoTIFF keys), or to GEOKEYS to use custom values
    #> from GeoTIFF keys and drop the EPSG code.

### Runoff prevention

The function `runoff_prev` returns an estimation of the runoff in the city after a specific rain event (mm/day). It also estimates the total rainfall and the rainwater harvested by urban agriculture.

    runoff_prev(scenario)
    #>       runoff     rainfall  rainharvest
    #>     35.94306 108169.04500   1457.54729

### Distance to closest green area

The function `green_distance` computes the distances from each home in the city to its closest public green area larger than a specific area. The homes must be identified using the column passed to `residence_col`. The default values for minimal area (0.5 ha) and for maximum distance (300 meters) follow the recommendations of WHO.

    green_distance(scenario)
    #>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    #>    6.12  155.08  251.70  249.72  347.42  465.73

If `percent_out` is set to `TRUE`, instead of a summary of distances, it returns the percentage of homes that are further than `max_dist`.

    green_distance(scenario, percent_out = TRUE)
    #> [1] 36.92615

### Green per capita

The function `green_capita` calculates the amount of public and/or private green are per capita in the city. It can compute the total of the city, the values for each neighbourhood or the ratio between the neighbourhoods with minimum and maximum value (min / max).

    green_capita(scenario, inhabitants = 6000)
    #> [1] 10.6845

    green_capita(scenario,
                 neighbourhoods = neighbourhoods_example,
                 inh_col = 'inhabitants',
                 name_col = 'name',
                 verbose = TRUE)
    #> # A tibble: 2 × 4
    #>   name              area inhabitants green_capita
    #>   <chr>            <dbl>       <dbl>        <dbl>
    #> 1 Sant Narcís nord 35957        1028        35.0
    #> 2 Sant Narcís sud  33230        5290         6.28

    green_capita(scenario,
                 neighbourhoods = neighbourhoods_example,
                 inh_col = 'inhabitants',
                 name_col = 'name')
    #> [1] 0.1795909

### Nitrogen dioxide (NO2) sequestered by urban green

The function `no2_seq` computes the amount of NO2 sequestered by urban green in gr/s.

    no2_seq(scenario)
    #>     gr/s
    #> 109.4544

### Jobs created by commercial urban agriculture

The function `edible_jobs` estimates the number of jobs potentially created by commercial urban agriculture. Since the number of jobs / m2 is randomized, it computes a Monte Carlo simulation (n=1000) to estimate the value and returns the confidence interval (unless `verbose = TRUE`).

    edible_jobs(scenario)
    #>        5%       50%       95%
    #>  220.5918 1626.6634 3158.8951

### Volunteers involved in community urban agriculture

The function `edible_volunteers` estimates the number of volunteers potentially involved in community urban agriculture. Since the number of volunteers / m2 is randomized, it computes a Monte Carlo simulation (n=1000) to estimate the value and returns the confidence interval (unless `verbose = TRUE`).

    edible_volunteers(scenario)
    #>        5%       50%       95%
    #>  273.3766 2224.1086 4385.3583

### Food production

The function `food_production` estimates the food produced by urban agriculture (in kg/year). Since the productivity of each plot is randomized, It computes a Monte Carlo simulation (n=1000) to estimate the value and returns the confidence interval (unless `verbose = TRUE`).

    food_production(scenario)
    #>        5%       50%       95%
    #>  667946.7  916532.1 1145246.6

## Randomization

The construction of scenarios as well as some parameters in the indicators are randomized to consider uncertainty. Our recommendation is to run each scenario you want to simulate in a Monte Carlo simulation to get the confidence interval for each indicator. You will find a practical implementation here.