# Caching

Downloading large amounts of complex geometries from the BKG servers can take some amount of time. Whether or not this time can be reduced depends on three factors:

1. Whether the data is retrieved from a WFS or the download server
2. Whether the data has already been downloaded
3. Whether the data is already pre-loaded in the package

# WFS versus bulk downloads

Some functions like `bkg_admin()` or `bkg_dlm()` interface WFS servers while others like `bkg_nuts()` or `bkg_admin_archive()` download entire ZIP files from a download server. While WFS servers allow for more flexibility, they do not allow for easy caching. `ffm` supports caching of static files. By default, files are cached in a temporary directory that is removed after the R session ends. You can set a permanent cache directory using `options(ffm_cache_dir = ...)`.

# Repeated data downloads

In case of a static data download, the first call will always download fresh data.

    system.time(bkg_nuts(level = "3"))
    #>    user  system elapsed
    #>    0.05    0.03    4.41

Subsequent calls will have significantly reduced time because the downloaded file is directly read from the cache.

    system.time(bkg_nuts(level = "3"))
    #>    user  system elapsed
    #>    0.05    0.00    0.09

In case you need to re-download the data, you can use the `update_cache` argument.

    system.time(bkg_nuts(level = "3", update_cache = TRUE))
    #>    user  system elapsed
    #>    0.05    0.02    4.72

# Pre-loaded datasets

The most common datasets are already included in `ffm`. These include 2023 data from `bkg_admin()` and `bkg_nuts()` at a scale of 1:5,000,000.

    bkg_krs
    #> Simple feature collection with 400 features and 24 fields
    #> Geometry type: MULTIPOLYGON
    #> Dimension:     XY
    #> Bounding box:  xmin: 4031295 ymin: 2684102 xmax: 4672497 ymax: 3551313
    #> Projected CRS: ETRS89-extended / LAEA Europe
    #> # A tibble: 400 × 25
    #>    objid  beginn       ade    gf   bsg ars   ags   sdv_ars gen   bez     ibz bem   nbd   sn_l  sn_r  sn_k  sn_v1 sn_v2 sn_g
    #>    <chr>  <date>     <int> <int> <int> <chr> <chr> <chr>   <chr> <chr> <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
    #>  1 DEBKG… 2019-10-03     4     9     1 01001 01001 010010… Flen… Krei…    40 --    ja    01    0     01    00    00    000
    #>  2 DEBKG… 2019-10-03     4     9     1 01002 01002 010020… Kiel  Krei…    40 --    ja    01    0     02    00    00    000
    #>  3 DEBKG… 2019-10-03     4     9     1 01003 01003 010030… Lübe… Krei…    40 --    ja    01    0     03    00    00    000
    #>  4 DEBKG… 2019-10-03     4     9     1 01004 01004 010040… Neum… Krei…    40 --    ja    01    0     04    00    00    000
    #>  5 DEBKG… 2019-10-03     4     9     1 01051 01051 010510… Dith… Kreis    42 --    ja    01    0     51    00    00    000
    #>  6 DEBKG… 2021-06-19     4     9     1 01053 01053 010530… Herz… Kreis    42 --    ja    01    0     53    00    00    000
    #>  7 DEBKG… 2019-10-03     4     9     1 01054 01054 010540… Nord… Kreis    42 --    ja    01    0     54    00    00    000
    #>  8 DEBKG… 2019-10-03     4     9     1 01055 01055 010550… Osth… Kreis    42 --    ja    01    0     55    00    00    000
    #>  9 DEBKG… 2019-10-03     4     9     1 01056 01056 010560… Pinn… Kreis    42 --    ja    01    0     56    00    00    000
    #> 10 DEBKG… 2019-10-03     4     9     1 01057 01057 010570… Plön  Kreis    42 --    ja    01    0     57    00    00    000
    #> # ℹ 390 more rows
    #> # ℹ 6 more variables: fk_s3 <chr>, nuts <chr>, ars_0 <chr>, ags_0 <chr>, wsk <date>, geometry <MULTIPOLYGON [m]>

    bkg_nuts2
    #> Simple feature collection with 38 features and 6 fields
    #> Geometry type: MULTIPOLYGON
    #> Dimension:     XY
    #> Bounding box:  xmin: 280353.1 ymin: 5235878 xmax: 921261.6 ymax: 6101302
    #> Projected CRS: ETRS89 / UTM zone 32N
    #> # A tibble: 38 × 7
    #>    OBJID            BEGINN        GF NUTS_LEVEL NUTS_CODE NUTS_NAME                                                 geometry
    #>    <chr>            <date>     <int>      <int> <chr>     <chr>                                           <MULTIPOLYGON [m]>
    #>  1 DEBKGNU5000000B6 2021-10-04     9          2 DE11      Stuttgart     (((533236 5377030, 532410.6 5376422, 531497.3 53768…
    #>  2 DEBKGNU5000000B7 2021-10-04     9          2 DE12      Karlsruhe     (((471339.8 5493433, 470661.9 5493366, 470318.8 549…
    #>  3 DEBKGNU5000000B8 2021-10-04     9          2 DE13      Freiburg      (((429398.8 5394070, 430815.5 5395489, 431522.4 539…
    #>  4 DEBKGNU5000000B9 2021-10-04     9          2 DE14      Tübingen      (((582536.8 5314052, 581292.7 5313301, 581305.1 531…
    #>  5 DEBKGNU5000000BA 2021-10-04     9          2 DE21      Oberbayern    (((794293.6 5298232, 795275.6 5298403, 795573.8 529…
    #>  6 DEBKGNU5000000BB 2021-10-04     9          2 DE22      Niederbayern  (((827554.6 5386808, 828451 5385530, 828141.5 53843…
    #>  7 DEBKGNU5000000BC 2023-12-06     9          2 DE23      Oberpfalz     (((729727.5 5418506, 729341.6 5419385, 728572 54189…
    #>  8 DEBKGNU5000000BD 2023-12-06     9          2 DE24      Oberfranken   (((702619 5531689, 705057.5 5530518, 704989.1 55300…
    #>  9 DEBKGNU5000000BE 2021-10-04     9          2 DE25      Mittelfranken (((631678.8 5422644, 629641.9 5420651, 630270.2 541…
    #> 10 DEBKGNU5000000BF 2021-10-04     9          2 DE26      Unterfranken  (((566109.9 5492367, 565932.7 5492922, 565005.2 549…
    #> # ℹ 28 more rows