From bbd8acef4f1d0d96d81b902735cb7f4e36804d24 Mon Sep 17 00:00:00 2001 From: DDorch <14124454+DDorch@users.noreply.github.com> Date: Thu, 22 Feb 2024 10:27:17 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20inrae/hu?= =?UTF-8?q?beau@6839ea28e5b9fac628145138a2c95bac671fd7a5=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/CONTRIBUTING.html | 5 +- dev/LICENSE-text.html | 5 +- dev/LICENSE.html | 5 +- dev/articles/data_extraction_naiades.html | 182 +- dev/articles/example_ecoulement_api.html | 17 +- dev/articles/example_niveaux_nappes_api.html | 318 ++ .../HomeButton-0.0.1/LICENSE | 7 + .../HomeButton-0.0.1/easy-button-src.min.js | 1 + .../HomeButton-0.0.1/glyphicons-21-home.png | Bin 0 -> 1266 bytes .../HomeButton-0.0.1/home-button.css | 69 + .../HomeButton-0.0.1/home-button.js | 40 + .../Proj4Leaflet-1.0.1/proj4leaflet.js | 272 ++ .../clipboard-0.0.1/setClipboardText.js | 51 + .../figure-html/unnamed-chunk-10-1.png | Bin 0 -> 195222 bytes .../htmlwidgets-1.6.4/htmlwidgets.js | 901 ++++++ .../leaflet-1.3.1/images/layers-2x.png | Bin 0 -> 1259 bytes .../leaflet-1.3.1/images/layers.png | Bin 0 -> 696 bytes .../leaflet-1.3.1/images/marker-icon-2x.png | Bin 0 -> 2464 bytes .../leaflet-1.3.1/images/marker-icon.png | Bin 0 -> 1466 bytes .../leaflet-1.3.1/images/marker-shadow.png | Bin 0 -> 618 bytes .../leaflet-1.3.1/leaflet.css | 636 ++++ .../leaflet-1.3.1/leaflet.js | 5 + .../leaflet-binding-2.2.1/leaflet.js | 2789 +++++++++++++++++ .../leaflet-providers_2.0.0.js | 1178 +++++++ .../leaflet-providers-plugin.js | 3 + .../leafletfix-1.0.0/leafletfix.css | 36 + .../mapviewCSS-0.0.1/mapview-popup.css | 102 + .../mapviewCSS-0.0.1/mapview.css | 1 + .../proj4-2.6.2/proj4.min.js | 1 + .../rstudio_leaflet-1.3.1/images/1px.png | Bin 0 -> 68 bytes .../rstudio_leaflet-1.3.1/rstudio_leaflet.css | 41 + dev/articles/index.html | 9 +- dev/authors.html | 5 +- dev/index.html | 5 +- dev/news/index.html | 5 +- dev/pkgdown.yml | 3 +- dev/reference/Rplot002.png | Bin 12387 -> 12648 bytes dev/reference/convert_list_to_tibble.html | 5 +- dev/reference/doApiQuery.html | 5 +- dev/reference/get_ecoulement.html | 25 +- dev/reference/get_hydrobio.html | 5 +- dev/reference/get_hydrometrie.html | 25 +- dev/reference/get_indicateurs_services.html | 9 +- dev/reference/get_niveaux_nappes-2.png | Bin 34500 -> 34868 bytes dev/reference/get_niveaux_nappes.html | 5 +- dev/reference/get_poisson.html | 5 +- dev/reference/get_prelevements.html | 5 +- dev/reference/get_qualite_eau_potable.html | 5 +- dev/reference/get_qualite_nappes.html | 5 +- dev/reference/get_qualite_rivieres.html | 5 +- dev/reference/get_temperature.html | 5 +- dev/reference/hubeau.html | 19 +- dev/reference/index.html | 7 +- dev/reference/lists.html | 5 +- dev/sitemap.xml | 3 + 55 files changed, 6648 insertions(+), 187 deletions(-) create mode 100644 dev/articles/example_niveaux_nappes_api.html create mode 100644 dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/LICENSE create mode 100644 dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/easy-button-src.min.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/glyphicons-21-home.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.css create mode 100644 dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/Proj4Leaflet-1.0.1/proj4leaflet.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/clipboard-0.0.1/setClipboardText.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/figure-html/unnamed-chunk-10-1.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/htmlwidgets-1.6.4/htmlwidgets.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers-2x.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/marker-icon-2x.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/marker-icon.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/marker-shadow.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.css create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-binding-2.2.1/leaflet.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/leafletfix-1.0.0/leafletfix.css create mode 100644 dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview-popup.css create mode 100644 dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview.css create mode 100644 dev/articles/example_niveaux_nappes_api_files/proj4-2.6.2/proj4.min.js create mode 100644 dev/articles/example_niveaux_nappes_api_files/rstudio_leaflet-1.3.1/images/1px.png create mode 100644 dev/articles/example_niveaux_nappes_api_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css diff --git a/dev/CONTRIBUTING.html b/dev/CONTRIBUTING.html index da7f807..cd032ae 100644 --- a/dev/CONTRIBUTING.html +++ b/dev/CONTRIBUTING.html @@ -32,11 +32,14 @@
  • Changelog diff --git a/dev/LICENSE-text.html b/dev/LICENSE-text.html index a822f0d..ee08df0 100644 --- a/dev/LICENSE-text.html +++ b/dev/LICENSE-text.html @@ -32,11 +32,14 @@
  • Changelog diff --git a/dev/LICENSE.html b/dev/LICENSE.html index deea9b0..d41a631 100644 --- a/dev/LICENSE.html +++ b/dev/LICENSE.html @@ -32,11 +32,14 @@
  • Changelog diff --git a/dev/articles/data_extraction_naiades.html b/dev/articles/data_extraction_naiades.html index 27794de..55a4dc0 100644 --- a/dev/articles/data_extraction_naiades.html +++ b/dev/articles/data_extraction_naiades.html @@ -5,7 +5,7 @@ -Data extraction using the The API "qualité des cours d'eau" • hubeau +Getting data from the API "qualité des cours d'eau" • hubeau @@ -17,7 +17,7 @@ - + @@ -58,11 +58,14 @@
  • @@ -89,8 +92,8 @@

    Get started

    How it works

    -

    The Hubeau package provides functions to query the databases of the -french water information system using the Hub’eau API.

    -

    The function names are wrtitten as follow: +

    The hubeau package provides functions to query the databases +of the French water information system using the Hub’eau API.

    +

    The functions are named as follows: hubeau::get_[API]_[endpoint](argument) where:

    • [API] is the name of the API (one API = one database)

    • @@ -160,16 +141,16 @@

      How it worksget_qualite_rivieres_station() -uses the API “qualité des cours d’eau” to recover the water quality -stations corresponding to requirements described in the station() +uses the API “qualité des cours d’eau” to get the water quality stations +corresponding to requirements described in the station() function.

      See the readme in -the R package Hubeau

      +the R package hubeau.

    -

    Listing the available API in the R package +

    Listing the APIs searchable with the hubeau R package

    -

    The 0.4.1 version is able to query 10 different databases which can +

    The hubeau R package allows to query 11 databases which can be listed as follow:

     list_apis()
    @@ -187,7 +168,7 @@ 

    Available endpoints fo

    The function list_endpoints(api = "name of the api given by <list_apis>") -of the Hubeau R package lists the available endpoints. For the +of the hubeau R package lists the available endpoints. For the qualite_rivieres API it gives:

     list_endpoints(api = "qualite_rivieres")
    @@ -201,7 +182,7 @@ 

    Available endpoints fo
  • [operation_pc] lists the sampling operation occuring on each water station;

  • [condition_environnementale_pc] lists the -environmental conditions observed during water sampming (air +environmental conditions observed during water sampling (air temperature, presence of mosses, alguae, etc.);

  • [analyse_pc] gives the results of the physico-chemical analysis made on water samples of a selected water @@ -216,7 +197,8 @@

    List of arguments by endpoint gives the arguments which can be used in the query. These arguments -correspond the parameters of the Hub’eau API and are described in the Hub’eau +correspond to the parameters of the Hub’eau API and are described in the +Hub’eau web page of the API.

    For example, the following instruction lists the available arguments for the endpoint “condition_environnementale_pc”:

    @@ -241,10 +223,10 @@

    List of arguments by endpointExtracting physico-chemical data

    This example shows how to extract the nitrates concentration values -in river water samples for station located in the Cote d’Or department +in river water samples for stations located in the Cote d’Or department from 2000 to 2022.

    -

    Availability of station in the Côte d’Or department +

    Availability of stations in the Côte d’Or department

    The function get_qualite_rivieres_station(…) will be used to list the available stations. Arguments for the function can be @@ -269,7 +251,7 @@

    Availability of sta #> [46] "nom_sous_bassin" "page" "size" #> [49] "sort" "type_entite_hydro"

  • The argument “code_departement” will be used with the value “21” -which is the french administrative code for Côte d’Or.

    +which is the French administrative code for Côte d’Or.

     station_21 <- get_qualite_rivieres_station(code_departement = "21")
    @@ -294,13 +276,13 @@ 

    Availability of sta #> # libelle_region <chr>, code_cours_eau <chr>, nom_cours_eau <chr>, #> # uri_cours_eau <chr>, code_masse_deau <chr>, code_eu_masse_deau <chr>, #> # nom_masse_deau <chr>, uri_masse_deau <chr>, code_eu_sous_bassin <chr>, …

    -

    The result of the query gives a tibble of 466 lines and 48 columns +

    The result of the query gives a tibble of 466 rows and 48 columns which means that the database comprises 466 water stations in the Côte d’Or department being described by 48 parameters.

    -

    Retrieving nitrates concentration in river water of the Côte d’or -department +

    Retrieving nitrate concentration in river water of the Côte d’or +department

    The function get_qualite_rivieres_analyse(…) is used to get the physico-chemical analysis for selected stations. Arguments for @@ -324,25 +306,26 @@

    #> [43] "nom_bassin_dce" "nom_cours_eau" "nom_groupe_parametres" #> [46] "nom_sous_bassin" "page" "size" #> [49] "sort" "type_entite_hydro"

    -

    These arguments are described in theHub’eau +

    These arguments are described in the Hub’eau API web page.

    -

    Needed arguments in this example are:

    +

    The arguments in this example are:

    • -code_departement: french administrative code for +code_departement: French administrative code for department (“21” for Côte d’Or)
    • code_param: Code of the physico-chemical parameter; if -more than one parameter, codes must be separated by a commas; maximum -number of code is 200. The code of a given parameter that can be found -in the french -water reference system “Sandre; For nitrates the code is “1340”
    • +more than one parameter, codes must be separated by a commas; the +maximum number of codes is 200. The code of a given parameter that can +be found in the French +water reference system “Sandre”. For nitrates the code is +“1340”
    • date_debut_prelevement et date_fin_prelevement: beginning and end dates of samples (“yyyy-mm-dd” format).
    -

    The query can be written as follow:

    +

    The query can be written as follows:

     nitrates_21_raw <- get_qualite_rivieres_analyse(code_departement = "21", 
                                                 date_debut_prelevement = "2000-01-01", 
    @@ -372,7 +355,7 @@ 

    #> # code_parametre <chr>, libelle_parametre <chr>, uri_parametre <chr>, #> # resultat <dbl>, code_groupe_parametre1 <chr>, code_groupe_parametre2 <chr>, #> # code_groupe_parametre3 <chr>, code_groupe_parametre4 <chr>, …

    -

    The query gives a tibble of more than 13000 lines and 134 columns. +

    The query returns a tibble of more than 13000 lines and 134 columns. Each line corresponds to a nitrate concentration value (resultat) in mg.L-1 for a given station (code_station) and for a given date @@ -441,8 +424,7 @@

    ObjectivesSelection of stations available for analysis

    In the following example, a list of the stations of the Côte d’Or -department is created -(get_qualite_rivieres_station(code_departement = "21")

    +department is created.

     #list of station to query 
     station_21 <- get_qualite_rivieres_station(code_departement = "21")
    @@ -450,10 +432,9 @@

    Selection of stations avai
     nrow(station_21)
     #> [1] 468
    -

    We use the function -get_qualite_rivieres_analyse(code_station = "") for -retrieving nitrate concentration values -(code_parametre = "1340") from 2000 to 2022.

    +

    We use the function get_qualite_rivieres_analyse() to +retrieve nitrate concentration values +(code_parametre = "1340") from 2000 to 2022.

     nitrates_21 <- get_qualite_rivieres_analyse(
       code_departement = "21", 
    @@ -471,10 +452,12 @@ 

    Selection of stations avai )

    We compute some annual statistics for each station:

    -nitrates_21$date_prelevement <- as.POSIXct(nitrates_21$date_prelevement)
    -nitrates_21$year <- year(nitrates_21$date_prelevement)
    +nitrates_21 <- nitrates_21 %>% 
    +  mutate(date_prelevement = as.POSIXct(date_prelevement),
    +         year = year(date_prelevement))
     
    -station_stats <- nitrates_21 %>% group_by(code_station, libelle_station, year) %>%
    +station_stats <- nitrates_21 %>%
    +  group_by(code_station, libelle_station, year) %>%
       summarise(nb_analyses = n(), 
                 nitrate_mean = mean(resultat),
                 nitrate_p90 = quantile(resultat, probs = 0.9), 
    @@ -499,11 +482,11 @@ 

    Selection of stations avai

    Stations with less than 10 values per year on average and less than 10 years of data are excluded of the statistical analysis.

    -valid_stations <- station_stats %>% group_by(code_station, libelle_station) %>%
    +valid_stations <- station_stats %>%
    +  group_by(code_station, libelle_station) %>%
       summarise(analyses_per_year = mean(nb_analyses), nb_years = n()) %>%
       filter(analyses_per_year >= 10, nb_years >= 10)
    -#> `summarise()` has grouped output by 'code_station'. You can override using the
    -#> `.groups` argument.
    +
     valid_stations
     #> # A tibble: 13 × 4
     #> # Groups:   code_station [13]
    @@ -522,14 +505,14 @@ 

    Selection of stations avai #> 11 06016500 "OUCHE A ECHENON " 11.2 22 #> 12 06017050 "SAONE A CHARREY-SUR-SAONE " 12.9 22 #> 13 06017070 "SAONE A SEURRE " 12.8 16

    -

    The number of lines of the tibble valid_stations +

    The number of rows of the tibble valid_stations corresponds to the number of stations with at least 10 samples per year on average and 10 years of data.

    Statistical analysis of samples

    -

    Then, we plot the year distribution of nitrate levels with violin +

    Then, we plot the annual distribution of nitrate levels with violin plots.

     plot_nitrates <- function(code) {
    @@ -588,45 +571,8 @@ 

    Statistical analysis of samples ) # adds the mean and the standard deviation in blue }

    -lapply(valid_stations$code_station, plot_nitrates)
    -#> [[1]]
    -

    -
    #> 
    -#> [[2]]
    -

    -
    #> 
    -#> [[3]]
    -

    -
    #> 
    -#> [[4]]
    -

    -
    #> 
    -#> [[5]]
    -

    -
    #> 
    -#> [[6]]
    -

    -
    #> 
    -#> [[7]]
    -

    -
    #> 
    -#> [[8]]
    -

    -
    #> 
    -#> [[9]]
    -

    -
    #> 
    -#> [[10]]
    -

    -
    #> 
    -#> [[11]]
    -

    -
    #> 
    -#> [[12]]
    -

    -
    #> 
    -#> [[13]]
    -

    +lapply(valid_stations$code_station, plot_nitrates)
    +

    diff --git a/dev/articles/example_ecoulement_api.html b/dev/articles/example_ecoulement_api.html index 240e330..b446d92 100644 --- a/dev/articles/example_ecoulement_api.html +++ b/dev/articles/example_ecoulement_api.html @@ -58,11 +58,14 @@
  • @@ -96,10 +99,10 @@
  • +visually in the field)

    station and observations can be joined at least by the field code_station.

    @@ -229,8 +232,8 @@

    Sites label = "libelle_station", legend = FALSE ) -
    - +
    +

    Surveys diff --git a/dev/articles/example_niveaux_nappes_api.html b/dev/articles/example_niveaux_nappes_api.html new file mode 100644 index 0000000..f0a2df9 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api.html @@ -0,0 +1,318 @@ + + + + + + + +Performing queries on the 'niveaux_nappes' API • hubeau + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + + + + +
    +
    + + + + +

    This vignette shows how to use the hubeau R package +in order to retrieve data from the French piezometric monitoring network +(portail national d’Accès aux +Données sur les Eaux Souterraines, ADES) from the API +“piézométrie” (or “niveaux nappes”) of the Hub’eau portal.

    +

    We illustrate the use of this API for the geological layer “Calcaires +et marnes du Dogger du bassin versant du Clain libres” +(code=GG063) with an example of map and chart useful for +the interpretation of these data.

    +
    +my_water_table_code <- "GG063"
    +
    +

    Getting started +

    +

    First, we need to load the packages used in this vignette for +processing data and display results on charts and map:

    +
    +library(hubeau)
    +
    +library(dplyr)
    +#> 
    +#> Attaching package: 'dplyr'
    +#> The following objects are masked from 'package:stats':
    +#> 
    +#>     filter, lag
    +#> The following objects are masked from 'package:base':
    +#> 
    +#>     intersect, setdiff, setequal, union
    +library(sf)
    +#> Linking to GEOS 3.10.2, GDAL 3.4.1, PROJ 8.2.1; sf_use_s2() is TRUE
    +library(mapview)
    +library(ggplot2)
    +library(purrr)
    +

    “niveaux_nappes” is one of the 11 APIs that can be queried with the +hubeau R package.

    +

    The list of the API endpoints is provided by the function +list_endpoints.

    +
    +list_endpoints(api = "niveaux_nappes")
    +#> [1] "chroniques"    "chroniques_tr" "stations"
    +
      +
    • +chroniques long-term time series
    • +
    • +chroniques_tr real time observations
    • +
    • +stations lists the monitoring stations
    • +
    +

    The tables can be joined at least by the field +code_bss (i.e. the site Id).

    +

    For each endpoint, the function list_params() gives the +different parameters that can be retrieved.

    +
    +list_params(api = "niveaux_nappes",
    +            endpoint = "stations")
    +#>  [1] "bbox"                 "bss_id"               "code_bdlisa"         
    +#>  [4] "code_bss"             "code_commune"         "code_departement"    
    +#>  [7] "codes_masse_eau_edl"  "date_recherche"       "fields"              
    +#> [10] "format"               "nb_mesures_piezo_min" "page"                
    +#> [13] "size"                 "srid"
    +
    +
    +

    Retrieving the data +

    +
    +

    Sites +

    +

    Download the data.

    +
    +stations <- get_niveaux_nappes_stations(
    +  codes_masse_eau_edl = my_water_table_code
    +)
    +
    +
    +

    Time series +

    +

    The aim here is to retrieve the time series of water levels measures +in the piezometers.

    +
    +param_chroniques <- paste(
    +    list_params(api = "niveaux_nappes",
    +                endpoint = "chroniques"),
    +    collapse = ","
    +)
    +

    No field allows to select a departement, so it is necessary to +iterate through stations.

    +
    +water_table_level <- map_df(
    +  .x = stations$code_bss,
    +  .f = function(x)
    +    get_niveaux_nappes_chroniques(code_bss = x,
    +                                  date_debut_mesure = "2015-01-01")
    +)
    +
    +
    +
    +

    Tidying the data +

    +

    The dataframe is processed to get a ‘year’ and a ‘month’ variables, +then averaged by year for each site.

    +
    +water_table_level <- water_table_level %>% 
    +  mutate(date_mesure = lubridate::ymd(date_mesure),
    +         year = lubridate::year(date_mesure),
    +         month = lubridate::month(date_mesure))
    +

    Selection, for each of the stations, of the years with 12 months of +data. This is done to prevent incomplete time periods to influence the +yearly mean water level excessively.

    +
    +yearly_mean_water_table_level <- water_table_level %>% 
    +  group_by(code_bss,
    +           year) %>% 
    +    summarise(n_months = n_distinct(month)) %>% 
    +    filter(n_months == 12) # complete years
    +
    +yearly_mean_water_table_level <- yearly_mean_water_table_level %>% 
    +  select(-n_months) %>% 
    +  left_join(water_table_level) %>% # filtering join
    +  group_by(code_bss,
    +           year,
    +           month) %>% 
    +    summarise(monthly_mean_water_table_level = mean(niveau_nappe_eau, na.rm = TRUE)) %>% 
    +  group_by(code_bss,
    +           year) %>% 
    +    summarise(yearly_mean_water_table_level = mean(monthly_mean_water_table_level, na.rm = TRUE)) %>% 
    +  ungroup()
    +
    +
    +

    Plotting +

    +
    +ggplot(data = yearly_mean_water_table_level,
    +       aes(x = year,
    +           y = yearly_mean_water_table_level)) +
    +  geom_line() +
    +  facet_wrap(~code_bss,
    +             scales = "free_y")
    +

    +
    +
    +

    Mapping +

    +

    The stations data.frame is transformed into a +sf geographical object.

    +
    +stations_geo <- stations %>% 
    +  st_as_sf(coords = c("x", "y"),
    +           crs = 4626)
    +

    We create a plot for each station ready to be displayed as map +“pop-up”.

    +
    +p <- lapply(unique(yearly_mean_water_table_level$code_bss),
    +            function(x) {
    +              ggplot(data = yearly_mean_water_table_level %>% filter(code_bss == x),
    +                     aes(x = year,
    +                         y = yearly_mean_water_table_level)) +
    +                geom_line() +
    +                labs(title = x)
    +            })
    +

    Then they are mapped using the mapview R package. Click +on a spot to popup the plot.

    +
    +mapview(
    +  stations_geo,
    +  map.types = c("OpenStreetMap",
    +                "Esri.WorldShadedRelief",
    +                "OpenTopoMap"),
    +  popup = leafpop::popupGraph(p)
    +)
    +
    + +
    +
    + + + +
    + + + +
    + +
    +

    +

    Site built with pkgdown 2.0.7.

    +
    + +
    +
    + + + + + + + + diff --git a/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/LICENSE b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/LICENSE new file mode 100644 index 0000000..a1d3414 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/LICENSE @@ -0,0 +1,7 @@ +Copyright (C) 2014 Daniel Montague + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/easy-button-src.min.js b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/easy-button-src.min.js new file mode 100644 index 0000000..8270ab1 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/easy-button-src.min.js @@ -0,0 +1 @@ +!function(){function a(a,c){this.title=a.title,this.stateName=a.stateName?a.stateName:"unnamed-state",this.icon=L.DomUtil.create("span",""),L.DomUtil.addClass(this.icon,"button-state state-"+this.stateName.replace(/(^\s*|\s*$)/g,"")),this.icon.innerHTML=b(a.icon),this.onClick=L.Util.bind(a.onClick?a.onClick:function(){},c)}function b(a){var b;return a.match(/[&;=<>"']/)?b=a:(a=a.replace(/(^\s*|\s*$)/g,""),b=L.DomUtil.create("span",""),0===a.indexOf("fa-")?L.DomUtil.addClass(b,"fa "+a):0===a.indexOf("glyphicon-")?L.DomUtil.addClass(b,"glyphicon "+a):L.DomUtil.addClass(b,a),b=b.outerHTML),b}L.Control.EasyBar=L.Control.extend({options:{position:"bottomright",id:null,leafletClasses:!0},initialize:function(a,b){b&&L.Util.setOptions(this,b),this._buildContainer(),this._buttons=[];for(var c=0;cON$&;6fSWRh9-@I3zNyhOC<&ctLxqMV0vb1x~h|g>2cE2B#o=wx%YN=W$Ip>E|dXx`2hhTAOu7a0=ZSw-I+y5K~U`&X z=T#qWtY0jb7D^n)m7AB`HhZ68_v!hQ?D@ivSANMA)a%mCxJO4YC7grfEdrV$?2|Tu zc<1fk$Rfwh&HJ4$?Y7oz6o(a<+f>G3!q6PIxI9iE+9niik-i_*_`iSpnFl_u@mKYh z)Jp1P;9uHJ$>#2Q2kmYn3-ilMU~z0S2O*&ljKd(x>~W1R{Mt;;)gliH6S`gFk4SY} z8=xMi1n8BjfTXGc467pRhM^g607a5@QBp-!5){?eBwJI!dGQa_=79D&>;+=_>^#xtfz zDTGO@HFF$glR~kQiDQ_EazzruFwd*7&S;xFq48Afth194u}!jgm?GAX-nl85)$ZAW zriK{J?2=&`6nSDKl7NIHq8TG47mOHl`_0s64TOOkqhbEF>DKt+(8qRF_o}KTRn2O> zAy9F)K@jh$b;n$jsuydf*ICPJ;&8N!_-w(mOb6{G^ycArtDhm<;<|n zD5Ee!BoCTn{U_M!GqH9(C6LBxCys;ZsB8>k8fSwz0rh$@8sN1SM1GVjU(dTa;Y(8g z9fBKa9D<@9w*M3sY%B~(H=%$P!xS{FiUnwzOhTrFO}M2SYLB1b@v+h!jWg4*Op+-f z8)>+QWeEug5nYgF<`P;aW=GsZmT6hAC-EYqh>=Zw8j#8KIsu(XfuB#19l)s1N+n>@ zgTsLGOZ{Lc8TcrUvPChU&cJ7YLOQ~V$2=D5W8*xvWIK|Jv*l!m*?N(`KklCX%mSZecl#^g z{_U49|I@v`aGBfwwfq-%B6Uu#Y+jgqZf(AFXYa(VucN&+?z@kT!<$#Q@(-n3%MX;V zR?hE#u=ho|{_yjIe=q(A&c2tv^~y_U_8(nX_V&5wIq87lSMTHV`Cq8%t-If@UVHyB DN350C literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.css b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.css new file mode 100644 index 0000000..030bc3c --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.css @@ -0,0 +1,69 @@ +.leaflet-bar button/*, +.leaflet-bar button:hover*/ { + background-color: rgba(255,255,255, 0.95) /*#fff*/; + border: none; + width: 100%; + height: 20px; + line-height: 15px; + font-size: 85%; + /*display: block;*/ + text-align: center; + text-decoration: none; + color: black; + cursor: pointer; + overflow-x: visible; + overflow-y: hidden; + opacity: 0.25; + filter: alpha(opacity = 25); + background-position: 50% 50%; + background-repeat: no-repeat; + display: inline-block; +} + +.leaflet-bar button:hover { + background-color: #00ffff; /* #909090 */; + text-decoration: underline; + opacity: 0.9; + filter: alpha(opacity=90); +} + +/* uncomment this to get rid of button borders, this also removes border from zoom buttons +.leaflet-touch .leaflet-bar { + border: none; +} + +/*.leaflet-bar button:first-of-type { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} + +.leaflet-bar button:last-of-type { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom: none; +} + +.leaflet-bar.disabled, +.leaflet-bar button.disabled { + cursor: default; + pointer-events: none; + opacity: .4; +} + +.easy-button-button .button-state{ + display: block; + width: 100%; + height: 100%; + position: relative; +} + + +/*.leaflet-touch .leaflet-bar button { + width: 100%; + height: 20px; + line-height: 18px; + overflow-y: hidden; + opacity: .5; + filter: alpha(opacity=50); + white-space: nowrap; +}*/ diff --git a/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.js b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.js new file mode 100644 index 0000000..a7a8e7f --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/HomeButton-0.0.1/home-button.js @@ -0,0 +1,40 @@ +LeafletWidget.methods.addHomeButton = function (xmin, ymin, xmax, ymax, useext, + group, label, icon, position) { + + if (this.easyButton) { + this.easyButton.removeFrom(this); + } + + var bx = []; + if (useext) { + bx = [[ymin, xmin], [ymax, xmax]]; + } else { + bx = this.layerManager._groupContainers[group].getBounds(); + } + + var easyButton = new L.easyButton({ + position: position, + states: [{ + stateName: label, // name the state + icon: icon, // and define its properties + title: label, // like its title + onClick: function(btn, map){ + map.fitBounds(bx, {maxZoom: 18}); + btn.state(label); + } + }] + }); + + easyButton.addTo(this); + + this.currentEasyButton = easyButton; + +}; + + +LeafletWidget.methods.removeHomeButton = function () { + if (this.currentEasyButton) { + this.currentEasyButton.removeFrom(this); + this.currentEasyButton = null; + } +}; diff --git a/dev/articles/example_niveaux_nappes_api_files/Proj4Leaflet-1.0.1/proj4leaflet.js b/dev/articles/example_niveaux_nappes_api_files/Proj4Leaflet-1.0.1/proj4leaflet.js new file mode 100644 index 0000000..eaa650c --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/Proj4Leaflet-1.0.1/proj4leaflet.js @@ -0,0 +1,272 @@ +(function (factory) { + var L, proj4; + if (typeof define === 'function' && define.amd) { + // AMD + define(['leaflet', 'proj4'], factory); + } else if (typeof module === 'object' && typeof module.exports === "object") { + // Node/CommonJS + L = require('leaflet'); + proj4 = require('proj4'); + module.exports = factory(L, proj4); + } else { + // Browser globals + if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined') + throw 'Leaflet and proj4 must be loaded first'; + factory(window.L, window.proj4); + } +}(function (L, proj4) { + if (proj4.__esModule && proj4.default) { + // If proj4 was bundled as an ES6 module, unwrap it to get + // to the actual main proj4 object. + // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147 + proj4 = proj4.default; + } + + L.Proj = {}; + + L.Proj._isProj4Obj = function(a) { + return (typeof a.inverse !== 'undefined' && + typeof a.forward !== 'undefined'); + }; + + L.Proj.Projection = L.Class.extend({ + initialize: function(code, def, bounds) { + var isP4 = L.Proj._isProj4Obj(code); + this._proj = isP4 ? code : this._projFromCodeDef(code, def); + this.bounds = isP4 ? def : bounds; + }, + + project: function (latlng) { + var point = this._proj.forward([latlng.lng, latlng.lat]); + return new L.Point(point[0], point[1]); + }, + + unproject: function (point, unbounded) { + var point2 = this._proj.inverse([point.x, point.y]); + return new L.LatLng(point2[1], point2[0], unbounded); + }, + + _projFromCodeDef: function(code, def) { + if (def) { + proj4.defs(code, def); + } else if (proj4.defs[code] === undefined) { + var urn = code.split(':'); + if (urn.length > 3) { + code = urn[urn.length - 3] + ':' + urn[urn.length - 1]; + } + if (proj4.defs[code] === undefined) { + throw 'No projection definition for code ' + code; + } + } + + return proj4(code); + } + }); + + L.Proj.CRS = L.Class.extend({ + includes: L.CRS, + + options: { + transformation: new L.Transformation(1, 0, -1, 0) + }, + + initialize: function(a, b, c) { + var code, + proj, + def, + options; + + if (L.Proj._isProj4Obj(a)) { + proj = a; + code = proj.srsCode; + options = b || {}; + + this.projection = new L.Proj.Projection(proj, options.bounds); + } else { + code = a; + def = b; + options = c || {}; + this.projection = new L.Proj.Projection(code, def, options.bounds); + } + + L.Util.setOptions(this, options); + this.code = code; + this.transformation = this.options.transformation; + + if (this.options.origin) { + this.transformation = + new L.Transformation(1, -this.options.origin[0], + -1, this.options.origin[1]); + } + + if (this.options.scales) { + this._scales = this.options.scales; + } else if (this.options.resolutions) { + this._scales = []; + for (var i = this.options.resolutions.length - 1; i >= 0; i--) { + if (this.options.resolutions[i]) { + this._scales[i] = 1 / this.options.resolutions[i]; + } + } + } + + this.infinite = !this.options.bounds; + + }, + + scale: function(zoom) { + var iZoom = Math.floor(zoom), + baseScale, + nextScale, + scaleDiff, + zDiff; + if (zoom === iZoom) { + return this._scales[zoom]; + } else { + // Non-integer zoom, interpolate + baseScale = this._scales[iZoom]; + nextScale = this._scales[iZoom + 1]; + scaleDiff = nextScale - baseScale; + zDiff = (zoom - iZoom); + return baseScale + scaleDiff * zDiff; + } + }, + + zoom: function(scale) { + // Find closest number in this._scales, down + var downScale = this._closestElement(this._scales, scale), + downZoom = this._scales.indexOf(downScale), + nextScale, + nextZoom, + scaleDiff; + // Check if scale is downScale => return array index + if (scale === downScale) { + return downZoom; + } + if (downScale === undefined) { + return -Infinity; + } + // Interpolate + nextZoom = downZoom + 1; + nextScale = this._scales[nextZoom]; + if (nextScale === undefined) { + return Infinity; + } + scaleDiff = nextScale - downScale; + return (scale - downScale) / scaleDiff + downZoom; + }, + + distance: L.CRS.Earth.distance, + + R: L.CRS.Earth.R, + + /* Get the closest lowest element in an array */ + _closestElement: function(array, element) { + var low; + for (var i = array.length; i--;) { + if (array[i] <= element && (low === undefined || low < array[i])) { + low = array[i]; + } + } + return low; + } + }); + + L.Proj.GeoJSON = L.GeoJSON.extend({ + initialize: function(geojson, options) { + this._callLevel = 0; + L.GeoJSON.prototype.initialize.call(this, geojson, options); + }, + + addData: function(geojson) { + var crs; + + if (geojson) { + if (geojson.crs && geojson.crs.type === 'name') { + crs = new L.Proj.CRS(geojson.crs.properties.name); + } else if (geojson.crs && geojson.crs.type) { + crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code); + } + + if (crs !== undefined) { + this.options.coordsToLatLng = function(coords) { + var point = L.point(coords[0], coords[1]); + return crs.projection.unproject(point); + }; + } + } + + // Base class' addData might call us recursively, but + // CRS shouldn't be cleared in that case, since CRS applies + // to the whole GeoJSON, inluding sub-features. + this._callLevel++; + try { + L.GeoJSON.prototype.addData.call(this, geojson); + } finally { + this._callLevel--; + if (this._callLevel === 0) { + delete this.options.coordsToLatLng; + } + } + } + }); + + L.Proj.geoJson = function(geojson, options) { + return new L.Proj.GeoJSON(geojson, options); + }; + + L.Proj.ImageOverlay = L.ImageOverlay.extend({ + initialize: function (url, bounds, options) { + L.ImageOverlay.prototype.initialize.call(this, url, null, options); + this._projectedBounds = bounds; + }, + + // Danger ahead: Overriding internal methods in Leaflet. + // Decided to do this rather than making a copy of L.ImageOverlay + // and doing very tiny modifications to it. + // Future will tell if this was wise or not. + _animateZoom: function (event) { + var scale = this._map.getZoomScale(event.zoom); + var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y); + var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center); + + L.DomUtil.setTransform(this._image, offset, scale); + }, + + _reset: function () { + var zoom = this._map.getZoom(); + var pixelOrigin = this._map.getPixelOrigin(); + var bounds = L.bounds( + this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin), + this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin) + ); + var size = bounds.getSize(); + + L.DomUtil.setPosition(this._image, bounds.min); + this._image.style.width = size.x + 'px'; + this._image.style.height = size.y + 'px'; + }, + + _projectedToNewLayerPoint: function (point, zoom, center) { + var viewHalf = this._map.getSize()._divideBy(2); + var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round(); + var topLeft = newTopLeft.add(this._map._getMapPanePos()); + + return this._transform(point, zoom)._subtract(topLeft); + }, + + _transform: function (point, zoom) { + var crs = this._map.options.crs; + var transformation = crs.transformation; + var scale = crs.scale(zoom); + + return transformation.transform(point, scale); + } + }); + + L.Proj.imageOverlay = function (url, bounds, options) { + return new L.Proj.ImageOverlay(url, bounds, options); + }; + + return L.Proj; +})); diff --git a/dev/articles/example_niveaux_nappes_api_files/clipboard-0.0.1/setClipboardText.js b/dev/articles/example_niveaux_nappes_api_files/clipboard-0.0.1/setClipboardText.js new file mode 100644 index 0000000..919477d --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/clipboard-0.0.1/setClipboardText.js @@ -0,0 +1,51 @@ +// taken from +// https://ourcodeworld.com/articles/read/143/how-to-copy-text-to-clipboard-with-javascript-easily +function setClipboardText(text) { + var id = 'mycustom-clipboard-textarea-hidden-id'; + var existsTextarea = document.getElementById(id); + + if (!existsTextarea) { + console.log('Creating textarea'); + var textarea = document.createElement('textarea'); + textarea.id = id; + // Place in top-left corner of screen regardless of scroll position. + textarea.style.position = 'fixed'; + textarea.style.top = 0; + textarea.style.left = 0; + + // Ensure it has a small width and height. Setting to 1px / 1em + // doesn't work as this gives a negative w/h on some browsers. + textarea.style.width = '1px'; + textarea.style.height = '1px'; + + // We don't need padding, reducing the size if it does flash render. + textarea.style.padding = 0; + + // Clean up any borders. + textarea.style.border = 'none'; + textarea.style.outline = 'none'; + textarea.style.boxShadow = 'none'; + + // Avoid flash of white box if rendered for any reason. + textarea.style.background = 'transparent'; + document.querySelector('body').appendChild(textarea); + console.log('The textarea now exists :)'); + existsTextarea = document.getElementById(id); + } else { + console.log('The textarea already exists :3'); + } + + existsTextarea.value = text; + existsTextarea.select(); + + try { + var status = document.execCommand('copy'); + if (!status) { + console.error('Cannot copy text'); + } else { + console.log('The text is now on the clipboard'); + } + } catch (err) { + console.log('Unable to copy.'); + } +} diff --git a/dev/articles/example_niveaux_nappes_api_files/figure-html/unnamed-chunk-10-1.png b/dev/articles/example_niveaux_nappes_api_files/figure-html/unnamed-chunk-10-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2d753f80632ebc2bf55530899d9086f1a99205c5 GIT binary patch literal 195222 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

    Y&{pN8zZP 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 Jn%vpz{{xv(T4(?O literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/htmlwidgets-1.6.4/htmlwidgets.js b/dev/articles/example_niveaux_nappes_api_files/htmlwidgets-1.6.4/htmlwidgets.js new file mode 100644 index 0000000..1067d02 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/htmlwidgets-1.6.4/htmlwidgets.js @@ -0,0 +1,901 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval("(" + code + ")"); + } catch(error) { + if (!(error instanceof SyntaxError)) { + throw error; + } + try { + result = eval(code); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("

    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var rect = el.getBoundingClientRect(); + var result = bindingDef.initialize(el, rect.width, rect.height); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + var getSize = function(el) { + if (sizeObj) { + return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} + } else { + var rect = el.getBoundingClientRect(); + return {w: rect.width, h: rect.height} + } + }; + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + var size = getSize(el); + initResult = binding.initialize(el, size.w, size.h); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = getSize(el); + var resizeHandler = function(e) { + var size = getSize(el); + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers-2x.png b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..200c333dca9652ac4cba004d609e5af4eee168c1 GIT binary patch literal 1259 zcmVFhCYNy;#0irRPomHqW|G1C*;4?@4#E?jH>?v@U%cy?3dQAc-DchXVErpOh~ z-jbon+tNbnl6hoEb;)TVk+%hTDDi_G%i3*RZ&15!$Fjr^f;Ke&A@|?=`2&+{zr+3a z{D*=t(`AXyS%X7N z%a#RZw6vD^t_rnM`L4E>m=U&R!A-&}nZIi$BOPvkhrCuUe@BN~-lRD)f44;J%TwgE zcze8u!PQ_NR7?o(NylLXVTfDO zxs5=@|GsYEsNo4M#nT%N!UE(?dnS)t2+{ELYAFp*3=iF=|EQnTp`#vlSXuGVraYo? z+RCzXo6h3qA8{KG?S4nE(lM+;Eb4nT3XV;7gcAxUi5m)`k5tv}cPy()8ZR3TLW3I- zAS^}cq-IJvL7a4RgR!yk@~RT%$lA7{L5ES*hyx)M4(yxI$Ub(4f)K|^v1>zvwQY!_ zIrWw8q9GS^!Dp~}+?mbnB6jDF8mVlbQ!jFKDY;w=7;XO{9bq7>LXGK24WA`;rL)_Z z)&j}pbV(;6gY;VMhbxgvn`X;6x}VUEE-7 z%)7j-%t8S=ZL3yc)HbXDAqJZvBTPoiW_A-+a8m3_Z?v{DN7Tnr#O_VUMT0UBt$;p` zDh6JbGHN8JJ*JN%y2%msb97@_S>9!%Egwk;?PEkU9ntz&3uR}%Fj5d$JHQbQb3}a{ zSzFT^#n=VInPpcAS}CNxj?_ zVscANk5Cfz(51EI1pz};AWWb|kgbYNb4wCEGUn3+eMUMV?1-{=I4TlmLJMot@rd07 zZuo2hk1ccu{YmGkcYdWAVdk{Z4Nm?^cTD&}jGm+Q1SYIXMwmG*oO*83&#>l%nbR`G zhh=lZ%xIb7kU3#;TBbfECrnC9P=-XpL|TG2BoZdj61*XiFbW8?1Z_wp%#;>${SUIy V$8qr;L*)Pf002ovPDHLkV1hYLS~36t literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers.png b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/layers.png new file mode 100644 index 0000000000000000000000000000000000000000..1a72e5784b2b456eac5d7670738db80697af3377 GIT binary patch literal 696 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 e-I|>x8~*?ZhF3snGbtJX0000cOl4 literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/marker-icon.png b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/images/marker-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..950edf24677ded147df13b26f91baa2b0fa70513 GIT binary patch literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.css b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.css new file mode 100644 index 0000000..230e5ba --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.css @@ -0,0 +1,636 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer { + max-width: none !important; + max-height: none !important; + } + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; + } +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; + } +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + } + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; + } + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-container a.leaflet-active { + outline: 2px solid orange; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } + +.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + +/* Default icon URLs */ +.leaflet-default-icon-path { + background-image: url(images/marker-icon.png); + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover { + text-decoration: underline; + } +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: border-box; + box-sizing: border-box; + + background: #fff; + background: rgba(255, 255, 255, 0.5); + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; + } +.leaflet-popup-content p { + margin: 18px 0; + } +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-left: -20px; + overflow: hidden; + pointer-events: none; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + border: none; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; + } +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } + + +/* Tooltip */ +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + } +.leaflet-tooltip.leaflet-clickable { + cursor: pointer; + pointer-events: auto; + } +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; + } + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} +.leaflet-tooltip-top { + margin-top: -6px; +} +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; + } +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; + } +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; + } +.leaflet-tooltip-left { + margin-left: -6px; +} +.leaflet-tooltip-right { + margin-left: 6px; +} +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; + } +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; + } +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; + } diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.js b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.js new file mode 100644 index 0000000..4eca8af --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leaflet-1.3.1/leaflet.js @@ -0,0 +1,5 @@ +/* @preserve + * Leaflet 1.3.1+Detached: ba6f97fff8647e724e4dfe66d2ed7da11f908989.ba6f97f, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";function i(t){var i,e,n,o;for(e=1,n=arguments.length;e=0}function I(t,i,e,n){return"touchstart"===i?O(t,e,n):"touchmove"===i?W(t,e,n):"touchend"===i&&H(t,e,n),this}function B(t,i,e){var n=t["_leaflet_"+i+e];return"touchstart"===i?t.removeEventListener(Qi,n,!1):"touchmove"===i?t.removeEventListener(te,n,!1):"touchend"===i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var o=e(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)<0))return;$(t)}j(t,i)});t["_leaflet_touchstart"+n]=o,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se=!0)}function R(t){oe[t.pointerId]=t,re++}function D(t){oe[t.pointerId]&&(oe[t.pointerId]=t)}function N(t){delete oe[t.pointerId],re--}function j(t,i){t.touches=[];for(var e in oe)t.touches.push(oe[e]);t.changedTouches=[t],i(t)}function W(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&j(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(te,n,!1)}function H(t,i,e){var n=function(t){j(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||"mouse"===t.pointerType)return;i=re}else i=t.touches.length;if(!(i>1)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=n>0&&n<=h,s=e}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||"mouse"===t.pointerType)return;var e,n,o={};for(n in r)e=r[n],o[n]=e&&e.bind?e.bind(r):e;r=o}r.type="dblclick",i(r),s=null}}var s,r,a=!1,h=250;return t[ue+ae+e]=n,t[ue+he+e]=o,t[ue+"dblclick"+e]=i,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener("dblclick",i,!1),this}function U(t,i){var e=t[ue+ae+i],n=t[ue+he+i],o=t[ue+"dblclick"+i];return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener("dblclick",o,!1),this}function V(t,i,e,n){if("object"==typeof i)for(var o in i)G(t,o,i[o],e);else for(var s=0,r=(i=u(i)).length;s100&&n<500||t.target._simulatedClick&&!t._simulated?Q(t):(pi=e,i(t))}function rt(t){return"string"==typeof t?document.getElementById(t):t}function at(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function ht(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ut(t){var i=t.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var i=t.parentNode;i.lastChild!==t&&i.appendChild(t)}function _t(t){var i=t.parentNode;i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gt(t);return e.length>0&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pt(t,i){if(void 0!==t.classList)for(var e=u(i),n=0,o=e.length;nh&&(s=r,h=a);h>e&&(i[s]=1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;ni&&(e.push(t[n]),o=n);return oi.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function Ot(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function Nt(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o0?Math.floor(t):Math.ceil(t)};x.prototype={clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=li(this.x),this.y=li(this.y),this},distanceTo:function(t){var i=(t=w(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=w(t)).x===this.x&&t.y===this.y},contains:function(t){return t=w(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+a(this.x)+", "+a(this.y)+")"}},P.prototype={extend:function(t){return t=w(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof x?w(t):b(t))instanceof P?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=b(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=z(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng1,Yi=!!document.createElement("canvas").getContext,Xi=!(!document.createElementNS||!E("svg").createSVGRect),Ji=!Xi&&function(){try{var t=document.createElement("div");t.innerHTML='';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}(),$i=(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ai,opera12:Ii,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),Qi=Fi?"MSPointerDown":"pointerdown",te=Fi?"MSPointerMove":"pointermove",ie=Fi?"MSPointerUp":"pointerup",ee=Fi?"MSPointerCancel":"pointercancel",ne=["INPUT","SELECT","OPTION"],oe={},se=!1,re=0,ae=Fi?"MSPointerDown":Ui?"pointerdown":"touchstart",he=Fi?"MSPointerUp":Ui?"pointerup":"touchend",ue="_leaflet_",le="_leaflet_events",ce=Bi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e={},de=(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pe=xt(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),me=xt(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),fe="webkitTransition"===me||"OTransition"===me?me+"End":"transitionend";if("onselectstart"in document)mi=function(){V(window,"selectstart",$)},fi=function(){q(window,"selectstart",$)};else{var ge=xt(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);mi=function(){if(ge){var t=document.documentElement.style;gi=t[ge],t[ge]="none"}},fi=function(){ge&&(document.documentElement.style[ge]=gi,gi=void 0)}}var ve,ye,xe=(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),we=ui.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=f(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;ithis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},invalidateSize:function(t){if(!this._loaded)return this;t=i({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var o=this.getSize(),s=n.divideBy(2).round(),r=o.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(e(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=i({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=e(this._handleGeolocationResponse,this),o=e(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new M(t.coords.latitude,t.coords.longitude),e=i.toBounds(t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)ut(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=ht("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=z(t),e=w(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=b(this.project(a,n),this.project(r,n)).getSize(),l=Ni?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var i=w(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=rt(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");V(i,"scroll",this._onScroll,this),this._containerId=n(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ni,pt(t,"leaflet-container"+(Vi?" leaflet-touch":"")+(Ki?" leaflet-retina":"")+(Li?" leaflet-oldie":"")+(ki?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=at(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Lt(this._mapPane,new x(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pt(t.markerPane,"leaflet-zoom-hide"),pt(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[n(this._container)]=this;var i=t?q:V;i(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequest=f(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o=[],s="mouseout"===i||"mouseover"===i,r=t.target||t.srcElement,a=!1;r;){if((e=this._targets[n(r)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(r===this._container)break;r=r.parentNode}return o.length||a||s||!ot(r,t)||(o=[this]),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,n){if("click"===t.type){var o=i({},t);o.type="preclick",this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n=(n||[]).concat(this._findEventTargets(t,e))).length){var s=n[0];"contextmenu"===e&&s.listens(e,!0)&&$(t);var r={originalEvent:t};if("keypress"!==t.type){var a=s.getLatLng&&(!s._radius||s._radius<=10);r.containerPoint=a?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPoint=this.containerPointToLayerPoint(r.containerPoint),r.latlng=a?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h=0;h0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ni?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mt(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=ht("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=pe,e=this._proxy.style[i];wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pt(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pe=v.extend({options:{position:"topright"},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pt(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),be=function(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var s=e+t+" "+e+o;i[t+o]=ht("div",s,n)}var i=this._controlCorners={},e="leaflet-",n=this._controlContainer=ht("div",e+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCorners[t]);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Te=Pe.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(n(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),o=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=o):i=this._createRadioElement("leaflet-base-layers",o),this._layerControlInputs.push(i),i.layerId=n(t.layer),V(i,"click",this._onInputClick,this);var s=document.createElement("span");s.innerHTML=" "+t.name;var r=document.createElement("div");return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ze=Pe.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=ht("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=ht("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),J(s),V(s,"click",Q),V(s,"click",o,this),V(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoom===t.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ze,this.addControl(this.zoomControl))});var Me=Pe.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=ht("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",i),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=ht("div",i,e)),t.imperial&&(this._iScale=ht("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1,i*e}}),Ce=Pe.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){l(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=ht("div","leaflet-control-attribution"),J(this._container);for(var i in t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.Layers=Te,Pe.Zoom=ze,Pe.Scale=Me,Pe.Attribution=Ce,be.layers=function(t,i,e){return new Te(t,i,e)},be.zoom=function(t){return new ze(t)},be.scale=function(t){return new Me(t)},be.attribution=function(t){return new Ce(t)};var Ze=v.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTo=function(t,i){return t.addHandler(i,this),this};var Se,Ee={Events:hi},ke=Vi?"touchstart mousedown":"mousedown",Ae={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},Ie={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},Be=ui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Be._dragging===this&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!dt(this._element,"leaflet-zoom-anim")&&!(Be._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(Be._dragging=this,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t;this._startPoint=new x(i.clientX,i.clientY),V(document,Ie[t.type],this._onMove,this),V(document,Ae[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je=(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),We=i({},_i,{code:"EPSG:3395",projection:Ne,transformation:function(){var t=.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),He=i({},_i,{code:"EPSG:4326",projection:De,transformation:S(1/180,1,-1/180,.5)}),Fe=i({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth=_i,ci.EPSG3395=We,ci.EPSG3857=vi,ci.EPSG900913=yi,ci.EPSG4326=He,ci.Simple=Fe;var Ue=ui.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[n(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[n(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=n(t);return this._layers[i]?this:(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var i=n(t);return this._layers[i]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?ei(t)?t:[t]:[]).length;ithis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=C(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new T,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Dt(t),n=0,o=t.length;n=2&&i[0]instanceof M&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new x(i,i);if(t=new P(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;ot.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nn=qe.extend({initialize:function(t,i){l(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=ei(t)?t:t.features;if(o){for(i=0,e=o.length;i0?o:[i.src]}else{ei(this._url)||(this._url=[this._url]),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var a=0;ao?(i.height=o+"px",pt(t,"leaflet-popup-scrolled")):mt(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var t=this._map,i=parseInt(at(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=w(this.options.autoPanPadding),a=w(this.options.autoPanPaddingTopLeft||r),h=w(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(t=new un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popup=t,t._source=this):(this._popup&&!i||(this._popup=new un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){if(t instanceof Ue||(i=t,t=this),t instanceof qe)for(var e in this._layers){t=this._layers[e];break}return i||(i=t.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._source=t,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var ln=hn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=hn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ht("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=w(this.options.offset),u=this._getAnchor();"top"===s?t=t.add(w(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t=t.subtract(w(r/2-h.x,-h.y,!0)):"center"===s?t=t.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||en&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new x(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&o1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new x(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_e.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new T(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new x(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(Ci||i.el.setAttribute("src",ni),ut(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=r,t.onmousemove=r,Li&&this.options.opacity<1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var n=this._getTilePos(t),o=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tiles[o]={el:s,coords:t,current:!0},i.appendChild(s),this.fire("tileloadstart",{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire("tileerror",{error:i,tile:n,coords:t});var o=this._tileCoordsToKey(t);(n=this._tiles[o])&&(n.loaded=+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFrame=f(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),i||(pt(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),dn=_n.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=l(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),Ti||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url=t,i||this.redraw(),this},createTile:function(t,i){var n=document.createElement("img");return V(n,"load",e(this._tileOnLoad,this,i,n)),V(n,"error",e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin=""),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var e={r:Ki?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=n),e["-y"]=n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom,e=this.options.zoomReverse,n=this.options.zoomOffset;return e&&(t=i-t),t+n},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=r,i.onerror=r,i.complete||(i.src=ni,ut(i),delete this._tiles[t]))}}),pn=dn.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var n=i({},this.defaultWmsParams);for(var o in e)o in this.options||(n[o]=e[o]);var s=(e=l(this,e)).detectRetina&&Ki?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[i]=this._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=b(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===He?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=L.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMS=pn,Yt.wms=function(t,i){return new pn(t,i)};var mn=Ue.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pt(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new P(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),fn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");V(t,"mousemove",o(this._onMouseMove,32,this),this),V(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),V(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBounds=null;for(var t in this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers={},mn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ki?2:1;Lt(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[n(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[L.stamp(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,e=t.options.dashArray.split(","),n=[];for(i=0;i')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),vn={_initContainer:function(){this._container=ht("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=gn("shape");pt(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=gn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ut(i),t.removeInteractiveTarget(i),delete this._layers[n(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=gn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=ei(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=gn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},yn=Ji?gn:E,xn=mn.extend({getEvents:function(){var t=mn.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=yn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=yn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),Lt(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=yn("path");t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,"leaflet-interactive"),this._updateStyle(t),this._layers[n(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layers[n(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=xn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderers[t]=i),i}});var wn=en.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=z(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});xn.create=yn,xn.pointsToPath=k,nn.geometryToLayer=Wt,nn.coordsToLatLng=Ht,nn.coordsToLatLngs=Ft,nn.latLngToCoords=Ut,nn.latLngsToCoords=Vt,nn.getFeature=qt,nn.asFeature=Gt,Le.mergeOptions({boxZoom:!0});var Ln=Ze.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){q(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPoint=this._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ht("div","leaflet-zoom-box",this._container),pt(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new P(this._point,this._startPoint),e=i.getSize();Lt(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ut(this._box),mt(this._container,"leaflet-crosshair")),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(e(this._resetState,this),0);var i=new T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Le.addInitHook("addHandler","boxZoom",Ln),Le.mergeOptions({doubleClickZoom:!0});var Pn=Ze.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook("addHandler","doubleClickZoom",Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bn=Ze.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mt(this._map._container,"leaflet-grab"),mt(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=z(this._map.options.maxBounds);this._offsetLimit=b(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.xi.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)0?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook("addHandler","scrollWheelZoom",zn),Le.mergeOptions({tap:!0,tapTolerance:15});var Mn=Ze.extend({addHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){q(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new x(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&pt(n,"leaflet-active"),this._holdTimeout=setTimeout(e(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mt(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new x(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook("addHandler","tap",Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var Cn=Ze.extend({addHooks:function(){pt(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,"leaflet-touch-zoom"),q(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend",this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,n=i.mouseEventToContainerPoint(t.touches[0]),o=i.mouseEventToContainerPoint(t.touches[1]),s=n.distanceTo(o)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoomi.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=n._add(o)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),g(this._animRequest);var a=e(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=f(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,g(this._animRequest),q(document,"touchmove",this._onTouchMove),q(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Le.addInitHook("addHandler","touchZoom",Cn),Le.BoxZoom=Ln,Le.DoubleClickZoom=Pn,Le.Drag=bn,Le.Keyboard=Tn,Le.ScrollWheelZoom=zn,Le.Tap=Mn,Le.TouchZoom=Cn;var Zn=window.L;window.L=t,Object.freeze=$t,t.version="1.3.1+HEAD.ba6f97f",t.noConflict=function(){return window.L=Zn,this},t.Control=Pe,t.control=be,t.Browser=$i,t.Evented=ui,t.Mixin=Ee,t.Util=ai,t.Class=v,t.Handler=Ze,t.extend=i,t.bind=e,t.stamp=n,t.setOptions=l,t.DomEvent=de,t.DomUtil=xe,t.PosAnimation=we,t.Draggable=Be,t.LineUtil=Oe,t.PolyUtil=Re,t.Point=x,t.point=w,t.Bounds=P,t.bounds=b,t.Transformation=Z,t.transformation=S,t.Projection=je,t.LatLng=M,t.latLng=C,t.LatLngBounds=T,t.latLngBounds=z,t.CRS=ci,t.GeoJSON=nn,t.geoJSON=Kt,t.geoJson=sn,t.Layer=Ue,t.LayerGroup=Ve,t.layerGroup=function(t,i){return new Ve(t,i)},t.FeatureGroup=qe,t.featureGroup=function(t){return new qe(t)},t.ImageOverlay=rn,t.imageOverlay=function(t,i,e){return new rn(t,i,e)},t.VideoOverlay=an,t.videoOverlay=function(t,i,e){return new an(t,i,e)},t.DivOverlay=hn,t.Popup=un,t.popup=function(t,i){return new un(t,i)},t.Tooltip=ln,t.tooltip=function(t,i){return new ln(t,i)},t.Icon=Ge,t.icon=function(t){return new Ge(t)},t.DivIcon=cn,t.divIcon=function(t){return new cn(t)},t.Marker=Xe,t.marker=function(t,i){return new Xe(t,i)},t.TileLayer=dn,t.tileLayer=Yt,t.GridLayer=_n,t.gridLayer=function(t){return new _n(t)},t.SVG=xn,t.svg=Jt,t.Renderer=mn,t.Canvas=fn,t.canvas=Xt,t.Path=Je,t.CircleMarker=$e,t.circleMarker=function(t,i){return new $e(t,i)},t.Circle=Qe,t.circle=function(t,i,e){return new Qe(t,i,e)},t.Polyline=tn,t.polyline=function(t,i){return new tn(t,i)},t.Polygon=en,t.polygon=function(t,i){return new en(t,i)},t.Rectangle=wn,t.rectangle=function(t,i){return new wn(t,i)},t.Map=Le,t.map=function(t,i){return new Le(t,i)}}); \ No newline at end of file diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-binding-2.2.1/leaflet.js b/dev/articles/example_niveaux_nappes_api_files/leaflet-binding-2.2.1/leaflet.js new file mode 100644 index 0000000..c8e7e5e --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leaflet-binding-2.2.1/leaflet.js @@ -0,0 +1,2789 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this.effectiveLength) throw new Error("Row argument was out of bounds: " + row + " > " + this.effectiveLength); + var colIndex = -1; + + if (typeof col === "undefined") { + var rowData = {}; + this.colnames.forEach(function (name, i) { + rowData[name] = _this3.columns[i][row % _this3.columns[i].length]; + }); + return rowData; + } else if (typeof col === "string") { + colIndex = this._colIndex(col); + } else if (typeof col === "number") { + colIndex = col; + } + + if (colIndex < 0 || colIndex > this.columns.length) { + if (missingOK) return void 0;else throw new Error("Unknown column index: " + col); + } + + return this.columns[colIndex][row % this.columns[colIndex].length]; + } + }, { + key: "nrow", + value: function nrow() { + return this.effectiveLength; + } + }]); + + return DataFrame; +}(); + +exports["default"] = DataFrame; + + +},{"./util":17}],5:[function(require,module,exports){ +"use strict"; + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +// In RMarkdown's self-contained mode, we don't have a way to carry around the +// images that Leaflet needs but doesn't load into the page. Instead, we'll use +// the unpkg CDN. +if (typeof _leaflet2["default"].Icon.Default.imagePath === "undefined") { + _leaflet2["default"].Icon.Default.imagePath = "https://unpkg.com/leaflet@1.3.1/dist/images/"; +} + + +},{"./global/leaflet":10}],6:[function(require,module,exports){ +"use strict"; + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +// add texxtsize, textOnly, and style +_leaflet2["default"].Tooltip.prototype.options.textsize = "10px"; +_leaflet2["default"].Tooltip.prototype.options.textOnly = false; +_leaflet2["default"].Tooltip.prototype.options.style = null; // copy original layout to not completely stomp it. + +var initLayoutOriginal = _leaflet2["default"].Tooltip.prototype._initLayout; + +_leaflet2["default"].Tooltip.prototype._initLayout = function () { + initLayoutOriginal.call(this); + this._container.style.fontSize = this.options.textsize; + + if (this.options.textOnly) { + _leaflet2["default"].DomUtil.addClass(this._container, "leaflet-tooltip-text-only"); + } + + if (this.options.style) { + for (var property in this.options.style) { + this._container.style[property] = this.options.style[property]; + } + } +}; + + +},{"./global/leaflet":10}],7:[function(require,module,exports){ +"use strict"; + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var protocolRegex = /^\/\//; + +var upgrade_protocol = function upgrade_protocol(urlTemplate) { + if (protocolRegex.test(urlTemplate)) { + if (window.location.protocol === "file:") { + // if in a local file, support http + // http should auto upgrade if necessary + urlTemplate = "http:" + urlTemplate; + } + } + + return urlTemplate; +}; + +var originalLTileLayerInitialize = _leaflet2["default"].TileLayer.prototype.initialize; + +_leaflet2["default"].TileLayer.prototype.initialize = function (urlTemplate, options) { + urlTemplate = upgrade_protocol(urlTemplate); + originalLTileLayerInitialize.call(this, urlTemplate, options); +}; + +var originalLTileLayerWMSInitialize = _leaflet2["default"].TileLayer.WMS.prototype.initialize; + +_leaflet2["default"].TileLayer.WMS.prototype.initialize = function (urlTemplate, options) { + urlTemplate = upgrade_protocol(urlTemplate); + originalLTileLayerWMSInitialize.call(this, urlTemplate, options); +}; + + +},{"./global/leaflet":10}],8:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = global.HTMLWidgets; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],9:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = global.jQuery; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],10:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = global.L; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],11:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = global.L.Proj; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],12:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = global.Shiny; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],13:[function(require,module,exports){ +"use strict"; + +var _jquery = require("./global/jquery"); + +var _jquery2 = _interopRequireDefault(_jquery); + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +var _shiny = require("./global/shiny"); + +var _shiny2 = _interopRequireDefault(_shiny); + +var _htmlwidgets = require("./global/htmlwidgets"); + +var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); + +var _util = require("./util"); + +var _crs_utils = require("./crs_utils"); + +var _controlStore = require("./control-store"); + +var _controlStore2 = _interopRequireDefault(_controlStore); + +var _layerManager = require("./layer-manager"); + +var _layerManager2 = _interopRequireDefault(_layerManager); + +var _methods = require("./methods"); + +var _methods2 = _interopRequireDefault(_methods); + +require("./fixup-default-icon"); + +require("./fixup-default-tooltip"); + +require("./fixup-url-protocol"); + +var _dataframe = require("./dataframe"); + +var _dataframe2 = _interopRequireDefault(_dataframe); + +var _clusterLayerStore = require("./cluster-layer-store"); + +var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +window.LeafletWidget = {}; +window.LeafletWidget.utils = {}; + +var methods = window.LeafletWidget.methods = _jquery2["default"].extend({}, _methods2["default"]); + +window.LeafletWidget.DataFrame = _dataframe2["default"]; +window.LeafletWidget.ClusterLayerStore = _clusterLayerStore2["default"]; +window.LeafletWidget.utils.getCRS = _crs_utils.getCRS; // Send updated bounds back to app. Takes a leaflet event object as input. + +function updateBounds(map) { + var id = map.getContainer().id; + var bounds = map.getBounds(); + + _shiny2["default"].onInputChange(id + "_bounds", { + north: bounds.getNorthEast().lat, + east: bounds.getNorthEast().lng, + south: bounds.getSouthWest().lat, + west: bounds.getSouthWest().lng + }); + + _shiny2["default"].onInputChange(id + "_center", { + lng: map.getCenter().lng, + lat: map.getCenter().lat + }); + + _shiny2["default"].onInputChange(id + "_zoom", map.getZoom()); +} + +function preventUnintendedZoomOnScroll(map) { + // Prevent unwanted scroll capturing. Similar in purpose to + // https://github.com/CliffCloud/Leaflet.Sleep but with a + // different set of heuristics. + // The basic idea is that when a mousewheel/DOMMouseScroll + // event is seen, we disable scroll wheel zooming until the + // user moves their mouse cursor or clicks on the map. This + // is slightly trickier than just listening for mousemove, + // because mousemove is fired when the page is scrolled, + // even if the user did not physically move the mouse. We + // handle this by examining the mousemove event's screenX + // and screenY properties; if they change, we know it's a + // "true" move. + // lastScreen can never be null, but its x and y can. + var lastScreen = { + x: null, + y: null + }; + (0, _jquery2["default"])(document).on("mousewheel DOMMouseScroll", "*", function (e) { + // Disable zooming (until the mouse moves or click) + map.scrollWheelZoom.disable(); // Any mousemove events at this screen position will be ignored. + + lastScreen = { + x: e.originalEvent.screenX, + y: e.originalEvent.screenY + }; + }); + (0, _jquery2["default"])(document).on("mousemove", "*", function (e) { + // Did the mouse really move? + if (map.options.scrollWheelZoom) { + if (lastScreen.x !== null && e.screenX !== lastScreen.x || e.screenY !== lastScreen.y) { + // It really moved. Enable zooming. + map.scrollWheelZoom.enable(); + lastScreen = { + x: null, + y: null + }; + } + } + }); + (0, _jquery2["default"])(document).on("mousedown", ".leaflet", function (e) { + // Clicking always enables zooming. + if (map.options.scrollWheelZoom) { + map.scrollWheelZoom.enable(); + lastScreen = { + x: null, + y: null + }; + } + }); +} + +_htmlwidgets2["default"].widget({ + name: "leaflet", + type: "output", + factory: function factory(el, width, height) { + var map = null; + return { + // we need to store our map in our returned object. + getMap: function getMap() { + return map; + }, + renderValue: function renderValue(data) { + // Create an appropriate CRS Object if specified + if (data && data.options && data.options.crs) { + data.options.crs = (0, _crs_utils.getCRS)(data.options.crs); + } // As per https://github.com/rstudio/leaflet/pull/294#discussion_r79584810 + + + if (map) { + map.remove(); + + map = function () { + return; + }(); // undefine map + + } + + if (data.options.mapFactory && typeof data.options.mapFactory === "function") { + map = data.options.mapFactory(el, data.options); + } else { + map = _leaflet2["default"].map(el, data.options); + } + + preventUnintendedZoomOnScroll(map); // Store some state in the map object + + map.leafletr = { + // Has the map ever rendered successfully? + hasRendered: false, + // Data to be rendered when resize is called with area != 0 + pendingRenderData: null + }; // Check if the map is rendered statically (no output binding) + + if (_htmlwidgets2["default"].shinyMode && /\bshiny-bound-output\b/.test(el.className)) { + map.id = el.id; // Store the map on the element so we can find it later by ID + + (0, _jquery2["default"])(el).data("leaflet-map", map); // When the map is clicked, send the coordinates back to the app + + map.on("click", function (e) { + _shiny2["default"].onInputChange(map.id + "_click", { + lat: e.latlng.lat, + lng: e.latlng.lng, + ".nonce": Math.random() // Force reactivity if lat/lng hasn't changed + + }); + }); + var groupTimerId = null; + map.on("moveend", function (e) { + updateBounds(e.target); + }).on("layeradd layerremove", function (e) { + // If the layer that's coming or going is a group we created, tell + // the server. + if (map.layerManager.getGroupNameFromLayerGroup(e.layer)) { + // But to avoid chattiness, coalesce events + if (groupTimerId) { + clearTimeout(groupTimerId); + groupTimerId = null; + } + + groupTimerId = setTimeout(function () { + groupTimerId = null; + + _shiny2["default"].onInputChange(map.id + "_groups", map.layerManager.getVisibleGroups()); + }, 100); + } + }); + } + + this.doRenderValue(data, map); + }, + doRenderValue: function doRenderValue(data, map) { + // Leaflet does not behave well when you set up a bunch of layers when + // the map is not visible (width/height == 0). Popups get misaligned + // relative to their owning markers, and the fitBounds calculations + // are off. Therefore we wait until the map is actually showing to + // render the value (we rely on the resize() callback being invoked + // at the appropriate time). + if (el.offsetWidth === 0 || el.offsetHeight === 0) { + map.leafletr.pendingRenderData = data; + return; + } + + map.leafletr.pendingRenderData = null; // Merge data options into defaults + + var options = _jquery2["default"].extend({ + zoomToLimits: "always" + }, data.options); + + if (!map.layerManager) { + map.controls = new _controlStore2["default"](map); + map.layerManager = new _layerManager2["default"](map); + } else { + map.controls.clear(); + map.layerManager.clear(); + } + + var explicitView = false; + + if (data.setView) { + explicitView = true; + map.setView.apply(map, data.setView); + } + + if (data.fitBounds) { + explicitView = true; + methods.fitBounds.apply(map, data.fitBounds); + } + + if (data.flyTo) { + if (!explicitView && !map.leafletr.hasRendered) { + // must be done to give a initial starting point + map.fitWorld(); + } + + explicitView = true; + map.flyTo.apply(map, data.flyTo); + } + + if (data.flyToBounds) { + if (!explicitView && !map.leafletr.hasRendered) { + // must be done to give a initial starting point + map.fitWorld(); + } + + explicitView = true; + methods.flyToBounds.apply(map, data.flyToBounds); + } + + if (data.options.center) { + explicitView = true; + } // Returns true if the zoomToLimits option says that the map should be + // zoomed to map elements. + + + function needsZoom() { + return options.zoomToLimits === "always" || options.zoomToLimits === "first" && !map.leafletr.hasRendered; + } + + if (!explicitView && needsZoom() && !map.getZoom()) { + if (data.limits && !_jquery2["default"].isEmptyObject(data.limits)) { + // Use the natural limits of what's being drawn on the map + // If the size of the bounding box is 0, leaflet gets all weird + var pad = 0.006; + + if (data.limits.lat[0] === data.limits.lat[1]) { + data.limits.lat[0] = data.limits.lat[0] - pad; + data.limits.lat[1] = data.limits.lat[1] + pad; + } + + if (data.limits.lng[0] === data.limits.lng[1]) { + data.limits.lng[0] = data.limits.lng[0] - pad; + data.limits.lng[1] = data.limits.lng[1] + pad; + } + + map.fitBounds([[data.limits.lat[0], data.limits.lng[0]], [data.limits.lat[1], data.limits.lng[1]]]); + } else { + map.fitWorld(); + } + } + + for (var i = 0; data.calls && i < data.calls.length; i++) { + var call = data.calls[i]; + if (methods[call.method]) methods[call.method].apply(map, call.args);else (0, _util.log)("Unknown method " + call.method); + } + + map.leafletr.hasRendered = true; + + if (_htmlwidgets2["default"].shinyMode) { + setTimeout(function () { + updateBounds(map); + }, 1); + } + }, + resize: function resize(width, height) { + if (map) { + map.invalidateSize(); + + if (map.leafletr.pendingRenderData) { + this.doRenderValue(map.leafletr.pendingRenderData, map); + } + } + } + }; + } +}); + +if (_htmlwidgets2["default"].shinyMode) { + _shiny2["default"].addCustomMessageHandler("leaflet-calls", function (data) { + var id = data.id; + var el = document.getElementById(id); + var map = el ? (0, _jquery2["default"])(el).data("leaflet-map") : null; + + if (!map) { + (0, _util.log)("Couldn't find map with id " + id); + return; + } // If the map has not rendered, stash the proposed `leafletProxy()` calls + // in `pendingRenderData.calls` to be run on display via `doRenderValue()`. + // This is necessary if the map has not been rendered. + // If new pendingRenderData is set via a new `leaflet()`, the previous calls will be discarded. + + + if (!map.leafletr.hasRendered) { + map.leafletr.pendingRenderData.calls = map.leafletr.pendingRenderData.calls.concat(data.calls); + return; + } + + for (var i = 0; i < data.calls.length; i++) { + var call = data.calls[i]; + var args = call.args; + + for (var _i = 0; _i < call.evals.length; _i++) { + window.HTMLWidgets.evaluateStringMember(args, call.evals[_i]); + } + + if (call.dependencies) { + _shiny2["default"].renderDependencies(call.dependencies); + } + + if (methods[call.method]) methods[call.method].apply(map, args);else (0, _util.log)("Unknown method " + call.method); + } + }); +} + + +},{"./cluster-layer-store":1,"./control-store":2,"./crs_utils":3,"./dataframe":4,"./fixup-default-icon":5,"./fixup-default-tooltip":6,"./fixup-url-protocol":7,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./layer-manager":14,"./methods":15,"./util":17}],14:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = undefined; + +var _jquery = require("./global/jquery"); + +var _jquery2 = _interopRequireDefault(_jquery); + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +var _util = require("./util"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var LayerManager = /*#__PURE__*/function () { + function LayerManager(map) { + _classCallCheck(this, LayerManager); + + this._map = map; // BEGIN layer indices + // {: {: layer}} + + this._byGroup = {}; // {: {: layer}} + + this._byCategory = {}; // {: layer} + + this._byLayerId = {}; // {: { + // "group": , + // "layerId": , + // "category": , + // "container": + // } + // } + + this._byStamp = {}; // {: {: [, , ...], ...}} + + this._byCrosstalkGroup = {}; // END layer indices + // {: L.layerGroup} + + this._categoryContainers = {}; // {: L.layerGroup} + + this._groupContainers = {}; + } + + _createClass(LayerManager, [{ + key: "addLayer", + value: function addLayer(layer, category, layerId, group, ctGroup, ctKey) { + var _this = this; + + // Was a group provided? + var hasId = typeof layerId === "string"; + var grouped = typeof group === "string"; + var stamp = _leaflet2["default"].Util.stamp(layer) + ""; // This will be the default layer group to add the layer to. + // We may overwrite this let before using it (i.e. if a group is assigned). + // This one liner creates the _categoryContainers[category] entry if it + // doesn't already exist. + + var container = this._categoryContainers[category] = this._categoryContainers[category] || _leaflet2["default"].layerGroup().addTo(this._map); + + var oldLayer = null; + + if (hasId) { + // First, remove any layer with the same category and layerId + var prefixedLayerId = this._layerIdKey(category, layerId); + + oldLayer = this._byLayerId[prefixedLayerId]; + + if (oldLayer) { + this._removeLayer(oldLayer); + } // Update layerId index + + + this._byLayerId[prefixedLayerId] = layer; + } // Update group index + + + if (grouped) { + this._byGroup[group] = this._byGroup[group] || {}; + this._byGroup[group][stamp] = layer; // Since a group is assigned, don't add the layer to the category's layer + // group; instead, use the group's layer group. + // This one liner creates the _groupContainers[group] entry if it doesn't + // already exist. + + container = this.getLayerGroup(group, true); + } // Update category index + + + this._byCategory[category] = this._byCategory[category] || {}; + this._byCategory[category][stamp] = layer; // Update stamp index + + var layerInfo = this._byStamp[stamp] = { + layer: layer, + group: group, + ctGroup: ctGroup, + ctKey: ctKey, + layerId: layerId, + category: category, + container: container, + hidden: false + }; // Update crosstalk group index + + if (ctGroup) { + if (layer.setStyle) { + // Need to save this info so we know what to set opacity to later + layer.options.origOpacity = typeof layer.options.opacity !== "undefined" ? layer.options.opacity : 0.5; + layer.options.origFillOpacity = typeof layer.options.fillOpacity !== "undefined" ? layer.options.fillOpacity : 0.2; + } + + var ctg = this._byCrosstalkGroup[ctGroup]; + + if (!ctg) { + ctg = this._byCrosstalkGroup[ctGroup] = {}; + var crosstalk = global.crosstalk; + + var handleFilter = function handleFilter(e) { + if (!e.value) { + var groupKeys = Object.keys(ctg); + + for (var i = 0; i < groupKeys.length; i++) { + var key = groupKeys[i]; + var _layerInfo = _this._byStamp[ctg[key]]; + + _this._setVisibility(_layerInfo, true); + } + } else { + var selectedKeys = {}; + + for (var _i = 0; _i < e.value.length; _i++) { + selectedKeys[e.value[_i]] = true; + } + + var _groupKeys = Object.keys(ctg); + + for (var _i2 = 0; _i2 < _groupKeys.length; _i2++) { + var _key = _groupKeys[_i2]; + var _layerInfo2 = _this._byStamp[ctg[_key]]; + + _this._setVisibility(_layerInfo2, selectedKeys[_groupKeys[_i2]]); + } + } + }; + + var filterHandle = new crosstalk.FilterHandle(ctGroup); + filterHandle.on("change", handleFilter); + + var handleSelection = function handleSelection(e) { + if (!e.value || !e.value.length) { + var groupKeys = Object.keys(ctg); + + for (var i = 0; i < groupKeys.length; i++) { + var key = groupKeys[i]; + var _layerInfo3 = _this._byStamp[ctg[key]]; + + _this._setOpacity(_layerInfo3, 1.0); + } + } else { + var selectedKeys = {}; + + for (var _i3 = 0; _i3 < e.value.length; _i3++) { + selectedKeys[e.value[_i3]] = true; + } + + var _groupKeys2 = Object.keys(ctg); + + for (var _i4 = 0; _i4 < _groupKeys2.length; _i4++) { + var _key2 = _groupKeys2[_i4]; + var _layerInfo4 = _this._byStamp[ctg[_key2]]; + + _this._setOpacity(_layerInfo4, selectedKeys[_groupKeys2[_i4]] ? 1.0 : 0.2); + } + } + }; + + var selHandle = new crosstalk.SelectionHandle(ctGroup); + selHandle.on("change", handleSelection); + setTimeout(function () { + handleFilter({ + value: filterHandle.filteredKeys + }); + handleSelection({ + value: selHandle.value + }); + }, 100); + } + + if (!ctg[ctKey]) ctg[ctKey] = []; + ctg[ctKey].push(stamp); + } // Add to container + + + if (!layerInfo.hidden) container.addLayer(layer); + return oldLayer; + } + }, { + key: "brush", + value: function brush(bounds, extraInfo) { + var _this2 = this; + + /* eslint-disable no-console */ + // For each Crosstalk group... + Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { + var ctg = _this2._byCrosstalkGroup[ctGroupName]; + var selection = []; // ...iterate over each Crosstalk key (each of which may have multiple + // layers)... + + Object.keys(ctg).forEach(function (ctKey) { + // ...and for each layer... + ctg[ctKey].forEach(function (stamp) { + var layerInfo = _this2._byStamp[stamp]; // ...if it's something with a point... + + if (layerInfo.layer.getLatLng) { + // ... and it's inside the selection bounds... + // TODO: Use pixel containment, not lat/lng containment + if (bounds.contains(layerInfo.layer.getLatLng())) { + // ...add the key to the selection. + selection.push(ctKey); + } + } + }); + }); + new global.crosstalk.SelectionHandle(ctGroupName).set(selection, extraInfo); + }); + } + }, { + key: "unbrush", + value: function unbrush(extraInfo) { + Object.keys(this._byCrosstalkGroup).forEach(function (ctGroupName) { + new global.crosstalk.SelectionHandle(ctGroupName).clear(extraInfo); + }); + } + }, { + key: "_setVisibility", + value: function _setVisibility(layerInfo, visible) { + if (layerInfo.hidden ^ visible) { + return; + } else if (visible) { + layerInfo.container.addLayer(layerInfo.layer); + layerInfo.hidden = false; + } else { + layerInfo.container.removeLayer(layerInfo.layer); + layerInfo.hidden = true; + } + } + }, { + key: "_setOpacity", + value: function _setOpacity(layerInfo, opacity) { + if (layerInfo.layer.setOpacity) { + layerInfo.layer.setOpacity(opacity); + } else if (layerInfo.layer.setStyle) { + layerInfo.layer.setStyle({ + opacity: opacity * layerInfo.layer.options.origOpacity, + fillOpacity: opacity * layerInfo.layer.options.origFillOpacity + }); + } + } + }, { + key: "getLayer", + value: function getLayer(category, layerId) { + return this._byLayerId[this._layerIdKey(category, layerId)]; + } + }, { + key: "removeLayer", + value: function removeLayer(category, layerIds) { + var _this3 = this; + + // Find layer info + _jquery2["default"].each((0, _util.asArray)(layerIds), function (i, layerId) { + var layer = _this3._byLayerId[_this3._layerIdKey(category, layerId)]; + + if (layer) { + _this3._removeLayer(layer); + } + }); + } + }, { + key: "clearLayers", + value: function clearLayers(category) { + var _this4 = this; + + // Find all layers in _byCategory[category] + var catTable = this._byCategory[category]; + + if (!catTable) { + return false; + } // Remove all layers. Make copy of keys to avoid mutating the collection + // behind the iterator you're accessing. + + + var stamps = []; + + _jquery2["default"].each(catTable, function (k, v) { + stamps.push(k); + }); + + _jquery2["default"].each(stamps, function (i, stamp) { + _this4._removeLayer(stamp); + }); + } + }, { + key: "getLayerGroup", + value: function getLayerGroup(group, ensureExists) { + var g = this._groupContainers[group]; + + if (ensureExists && !g) { + this._byGroup[group] = this._byGroup[group] || {}; + g = this._groupContainers[group] = _leaflet2["default"].featureGroup(); + g.groupname = group; + g.addTo(this._map); + } + + return g; + } + }, { + key: "getGroupNameFromLayerGroup", + value: function getGroupNameFromLayerGroup(layerGroup) { + return layerGroup.groupname; + } + }, { + key: "getVisibleGroups", + value: function getVisibleGroups() { + var _this5 = this; + + var result = []; + + _jquery2["default"].each(this._groupContainers, function (k, v) { + if (_this5._map.hasLayer(v)) { + result.push(k); + } + }); + + return result; + } + }, { + key: "getAllGroupNames", + value: function getAllGroupNames() { + var result = []; + + _jquery2["default"].each(this._groupContainers, function (k, v) { + result.push(k); + }); + + return result; + } + }, { + key: "clearGroup", + value: function clearGroup(group) { + var _this6 = this; + + // Find all layers in _byGroup[group] + var groupTable = this._byGroup[group]; + + if (!groupTable) { + return false; + } // Remove all layers. Make copy of keys to avoid mutating the collection + // behind the iterator you're accessing. + + + var stamps = []; + + _jquery2["default"].each(groupTable, function (k, v) { + stamps.push(k); + }); + + _jquery2["default"].each(stamps, function (i, stamp) { + _this6._removeLayer(stamp); + }); + } + }, { + key: "clear", + value: function clear() { + function clearLayerGroup(key, layerGroup) { + layerGroup.clearLayers(); + } // Clear all indices and layerGroups + + + this._byGroup = {}; + this._byCategory = {}; + this._byLayerId = {}; + this._byStamp = {}; + this._byCrosstalkGroup = {}; + + _jquery2["default"].each(this._categoryContainers, clearLayerGroup); + + this._categoryContainers = {}; + + _jquery2["default"].each(this._groupContainers, clearLayerGroup); + + this._groupContainers = {}; + } + }, { + key: "_removeLayer", + value: function _removeLayer(layer) { + var stamp; + + if (typeof layer === "string") { + stamp = layer; + } else { + stamp = _leaflet2["default"].Util.stamp(layer); + } + + var layerInfo = this._byStamp[stamp]; + + if (!layerInfo) { + return false; + } + + layerInfo.container.removeLayer(stamp); + + if (typeof layerInfo.group === "string") { + delete this._byGroup[layerInfo.group][stamp]; + } + + if (typeof layerInfo.layerId === "string") { + delete this._byLayerId[this._layerIdKey(layerInfo.category, layerInfo.layerId)]; + } + + delete this._byCategory[layerInfo.category][stamp]; + delete this._byStamp[stamp]; + + if (layerInfo.ctGroup) { + var ctGroup = this._byCrosstalkGroup[layerInfo.ctGroup]; + var layersForKey = ctGroup[layerInfo.ctKey]; + var idx = layersForKey ? layersForKey.indexOf(stamp) : -1; + + if (idx >= 0) { + if (layersForKey.length === 1) { + delete ctGroup[layerInfo.ctKey]; + } else { + layersForKey.splice(idx, 1); + } + } + } + } + }, { + key: "_layerIdKey", + value: function _layerIdKey(category, layerId) { + return category + "\n" + layerId; + } + }]); + + return LayerManager; +}(); + +exports["default"] = LayerManager; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./global/jquery":9,"./global/leaflet":10,"./util":17}],15:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _jquery = require("./global/jquery"); + +var _jquery2 = _interopRequireDefault(_jquery); + +var _leaflet = require("./global/leaflet"); + +var _leaflet2 = _interopRequireDefault(_leaflet); + +var _shiny = require("./global/shiny"); + +var _shiny2 = _interopRequireDefault(_shiny); + +var _htmlwidgets = require("./global/htmlwidgets"); + +var _htmlwidgets2 = _interopRequireDefault(_htmlwidgets); + +var _util = require("./util"); + +var _crs_utils = require("./crs_utils"); + +var _dataframe = require("./dataframe"); + +var _dataframe2 = _interopRequireDefault(_dataframe); + +var _clusterLayerStore = require("./cluster-layer-store"); + +var _clusterLayerStore2 = _interopRequireDefault(_clusterLayerStore); + +var _mipmapper = require("./mipmapper"); + +var _mipmapper2 = _interopRequireDefault(_mipmapper); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var methods = {}; +exports["default"] = methods; + +function mouseHandler(mapId, layerId, group, eventName, extraInfo) { + return function (e) { + if (!_htmlwidgets2["default"].shinyMode) return; + var latLng = e.target.getLatLng ? e.target.getLatLng() : e.latlng; + + if (latLng) { + // retrieve only lat, lon values to remove prototype + // and extra parameters added by 3rd party modules + // these objects are for json serialization, not javascript + var latLngVal = _leaflet2["default"].latLng(latLng); // make sure it has consistent shape + + + latLng = { + lat: latLngVal.lat, + lng: latLngVal.lng + }; + } + + var eventInfo = _jquery2["default"].extend({ + id: layerId, + ".nonce": Math.random() // force reactivity + + }, group !== null ? { + group: group + } : null, latLng, extraInfo); + + _shiny2["default"].onInputChange(mapId + "_" + eventName, eventInfo); + }; +} + +methods.mouseHandler = mouseHandler; + +methods.clearGroup = function (group) { + var _this = this; + + _jquery2["default"].each((0, _util.asArray)(group), function (i, v) { + _this.layerManager.clearGroup(v); + }); +}; + +methods.setView = function (center, zoom, options) { + this.setView(center, zoom, options); +}; + +methods.fitBounds = function (lat1, lng1, lat2, lng2, options) { + this.fitBounds([[lat1, lng1], [lat2, lng2]], options); +}; + +methods.flyTo = function (center, zoom, options) { + this.flyTo(center, zoom, options); +}; + +methods.flyToBounds = function (lat1, lng1, lat2, lng2, options) { + this.flyToBounds([[lat1, lng1], [lat2, lng2]], options); +}; + +methods.setMaxBounds = function (lat1, lng1, lat2, lng2) { + this.setMaxBounds([[lat1, lng1], [lat2, lng2]]); +}; + +methods.addPopups = function (lat, lng, popup, layerId, group, options) { + var _this2 = this; + + var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("popup", popup).col("layerId", layerId).col("group", group).cbind(options); + + var _loop = function _loop(i) { + if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { + (function () { + var popup = _leaflet2["default"].popup(df.get(i)).setLatLng([df.get(i, "lat"), df.get(i, "lng")]).setContent(df.get(i, "popup")); + + var thisId = df.get(i, "layerId"); + var thisGroup = df.get(i, "group"); + this.layerManager.addLayer(popup, "popup", thisId, thisGroup); + }).call(_this2); + } + }; + + for (var i = 0; i < df.nrow(); i++) { + _loop(i); + } +}; + +methods.removePopup = function (layerId) { + this.layerManager.removeLayer("popup", layerId); +}; + +methods.clearPopups = function () { + this.layerManager.clearLayers("popup"); +}; + +methods.addTiles = function (urlTemplate, layerId, group, options) { + this.layerManager.addLayer(_leaflet2["default"].tileLayer(urlTemplate, options), "tile", layerId, group); +}; + +methods.removeTiles = function (layerId) { + this.layerManager.removeLayer("tile", layerId); +}; + +methods.clearTiles = function () { + this.layerManager.clearLayers("tile"); +}; + +methods.addWMSTiles = function (baseUrl, layerId, group, options) { + if (options && options.crs) { + options.crs = (0, _crs_utils.getCRS)(options.crs); + } + + this.layerManager.addLayer(_leaflet2["default"].tileLayer.wms(baseUrl, options), "tile", layerId, group); +}; // Given: +// {data: ["a", "b", "c"], index: [0, 1, 0, 2]} +// returns: +// ["a", "b", "a", "c"] + + +function unpackStrings(iconset) { + if (!iconset) { + return iconset; + } + + if (typeof iconset.index === "undefined") { + return iconset; + } + + iconset.data = (0, _util.asArray)(iconset.data); + iconset.index = (0, _util.asArray)(iconset.index); + return _jquery2["default"].map(iconset.index, function (e, i) { + return iconset.data[e]; + }); +} + +function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) { + (function () { + var _this3 = this; + + var clusterGroup = this.layerManager.getLayer("cluster", clusterId), + cluster = clusterOptions !== null; + + if (cluster && !clusterGroup) { + clusterGroup = _leaflet2["default"].markerClusterGroup.layerSupport(clusterOptions); + + if (clusterOptions.freezeAtZoom) { + var freezeAtZoom = clusterOptions.freezeAtZoom; + delete clusterOptions.freezeAtZoom; + clusterGroup.freezeAtZoom(freezeAtZoom); + } + + clusterGroup.clusterLayerStore = new _clusterLayerStore2["default"](clusterGroup); + } + + var extraInfo = cluster ? { + clusterId: clusterId + } : {}; + + var _loop2 = function _loop2(i) { + if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng"))) { + (function () { + var marker = markerFunc(df, i); + var thisId = df.get(i, "layerId"); + var thisGroup = cluster ? null : df.get(i, "group"); + + if (cluster) { + clusterGroup.clusterLayerStore.add(marker, thisId); + } else { + this.layerManager.addLayer(marker, "marker", thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); + } + + var popup = df.get(i, "popup"); + var popupOptions = df.get(i, "popupOptions"); + + if (popup !== null) { + if (popupOptions !== null) { + marker.bindPopup(popup, popupOptions); + } else { + marker.bindPopup(popup); + } + } + + var label = df.get(i, "label"); + var labelOptions = df.get(i, "labelOptions"); + + if (label !== null) { + if (labelOptions !== null) { + if (labelOptions.permanent) { + marker.bindTooltip(label, labelOptions).openTooltip(); + } else { + marker.bindTooltip(label, labelOptions); + } + } else { + marker.bindTooltip(label); + } + } + + marker.on("click", mouseHandler(this.id, thisId, thisGroup, "marker_click", extraInfo), this); + marker.on("mouseover", mouseHandler(this.id, thisId, thisGroup, "marker_mouseover", extraInfo), this); + marker.on("mouseout", mouseHandler(this.id, thisId, thisGroup, "marker_mouseout", extraInfo), this); + marker.on("dragend", mouseHandler(this.id, thisId, thisGroup, "marker_dragend", extraInfo), this); + }).call(_this3); + } + }; + + for (var i = 0; i < df.nrow(); i++) { + _loop2(i); + } + + if (cluster) { + this.layerManager.addLayer(clusterGroup, "cluster", clusterId, group); + } + }).call(map); +} + +methods.addGenericMarkers = addMarkers; + +methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { + var icondf; + var getIcon; + + if (icon) { + // Unpack icons + icon.iconUrl = unpackStrings(icon.iconUrl); + icon.iconRetinaUrl = unpackStrings(icon.iconRetinaUrl); + icon.shadowUrl = unpackStrings(icon.shadowUrl); + icon.shadowRetinaUrl = unpackStrings(icon.shadowRetinaUrl); // This cbinds the icon URLs and any other icon options; they're all + // present on the icon object. + + icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. + + getIcon = function getIcon(i) { + var opts = icondf.get(i); + + if (!opts.iconUrl) { + return new _leaflet2["default"].Icon.Default(); + } // Composite options (like points or sizes) are passed from R with each + // individual component as its own option. We need to combine them now + // into their composite form. + + + if (opts.iconWidth) { + opts.iconSize = [opts.iconWidth, opts.iconHeight]; + } + + if (opts.shadowWidth) { + opts.shadowSize = [opts.shadowWidth, opts.shadowHeight]; + } + + if (opts.iconAnchorX) { + opts.iconAnchor = [opts.iconAnchorX, opts.iconAnchorY]; + } + + if (opts.shadowAnchorX) { + opts.shadowAnchor = [opts.shadowAnchorX, opts.shadowAnchorY]; + } + + if (opts.popupAnchorX) { + opts.popupAnchor = [opts.popupAnchorX, opts.popupAnchorY]; + } + + return new _leaflet2["default"].Icon(opts); + }; + } + + if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { + var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); + if (icon) icondf.effectiveLength = df.nrow(); + addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { + var options = df.get(i); + if (icon) options.icon = getIcon(i); + return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); + }); + } +}; + +methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions, crosstalkOptions) { + var icondf; + var getIcon; + + if (icon) { + // This cbinds the icon URLs and any other icon options; they're all + // present on the icon object. + icondf = new _dataframe2["default"]().cbind(icon); // Constructs an icon from a specified row of the icon dataframe. + + getIcon = function getIcon(i) { + var opts = icondf.get(i); + + if (!opts) { + return new _leaflet2["default"].AwesomeMarkers.icon(); + } + + if (opts.squareMarker) { + opts.className = "awesome-marker awesome-marker-square"; + } + + return new _leaflet2["default"].AwesomeMarkers.icon(opts); + }; + } + + if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { + var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options).cbind(crosstalkOptions || {}); + if (icon) icondf.effectiveLength = df.nrow(); + addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { + var options = df.get(i); + if (icon) options.icon = getIcon(i); + return _leaflet2["default"].marker([df.get(i, "lat"), df.get(i, "lng")], options); + }); + } +}; + +function addLayers(map, category, df, layerFunc) { + var _loop3 = function _loop3(i) { + (function () { + var layer = layerFunc(df, i); + + if (!_jquery2["default"].isEmptyObject(layer)) { + var thisId = df.get(i, "layerId"); + var thisGroup = df.get(i, "group"); + this.layerManager.addLayer(layer, category, thisId, thisGroup, df.get(i, "ctGroup", true), df.get(i, "ctKey", true)); + + if (layer.bindPopup) { + var popup = df.get(i, "popup"); + var popupOptions = df.get(i, "popupOptions"); + + if (popup !== null) { + if (popupOptions !== null) { + layer.bindPopup(popup, popupOptions); + } else { + layer.bindPopup(popup); + } + } + } + + if (layer.bindTooltip) { + var label = df.get(i, "label"); + var labelOptions = df.get(i, "labelOptions"); + + if (label !== null) { + if (labelOptions !== null) { + layer.bindTooltip(label, labelOptions); + } else { + layer.bindTooltip(label); + } + } + } + + layer.on("click", mouseHandler(this.id, thisId, thisGroup, category + "_click"), this); + layer.on("mouseover", mouseHandler(this.id, thisId, thisGroup, category + "_mouseover"), this); + layer.on("mouseout", mouseHandler(this.id, thisId, thisGroup, category + "_mouseout"), this); + var highlightStyle = df.get(i, "highlightOptions"); + + if (!_jquery2["default"].isEmptyObject(highlightStyle)) { + var defaultStyle = {}; + + _jquery2["default"].each(highlightStyle, function (k, v) { + if (k != "bringToFront" && k != "sendToBack") { + if (df.get(i, k)) { + defaultStyle[k] = df.get(i, k); + } + } + }); + + layer.on("mouseover", function (e) { + this.setStyle(highlightStyle); + + if (highlightStyle.bringToFront) { + this.bringToFront(); + } + }); + layer.on("mouseout", function (e) { + this.setStyle(defaultStyle); + + if (highlightStyle.sendToBack) { + this.bringToBack(); + } + }); + } + } + }).call(map); + }; + + for (var i = 0; i < df.nrow(); i++) { + _loop3(i); + } +} + +methods.addGenericLayers = addLayers; + +methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions, crosstalkOptions) { + if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { + var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options).cbind(crosstalkOptions || {}); + addLayers(this, "shape", df, function (df, i) { + if (_jquery2["default"].isNumeric(df.get(i, "lat")) && _jquery2["default"].isNumeric(df.get(i, "lng")) && _jquery2["default"].isNumeric(df.get(i, "radius"))) { + return _leaflet2["default"].circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i)); + } else { + return null; + } + }); + } +}; + +methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions, crosstalkOptions) { + if (!(_jquery2["default"].isEmptyObject(lat) || _jquery2["default"].isEmptyObject(lng)) || _jquery2["default"].isNumeric(lat) && _jquery2["default"].isNumeric(lng)) { + var df = new _dataframe2["default"]().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(crosstalkOptions || {}).cbind(options); + addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) { + return _leaflet2["default"].circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i)); + }); + } +}; +/* + * @param lat Array of arrays of latitude coordinates for polylines + * @param lng Array of arrays of longitude coordinates for polylines + */ + + +methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { + if (polygons.length > 0) { + var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); + addLayers(this, "shape", df, function (df, i) { + var shapes = df.get(i, "shapes"); + shapes = shapes.map(function (shape) { + return _htmlwidgets2["default"].dataframeToD3(shape[0]); + }); + + if (shapes.length > 1) { + return _leaflet2["default"].polyline(shapes, df.get(i)); + } else { + return _leaflet2["default"].polyline(shapes[0], df.get(i)); + } + }); + } +}; + +methods.removeMarker = function (layerId) { + this.layerManager.removeLayer("marker", layerId); +}; + +methods.clearMarkers = function () { + this.layerManager.clearLayers("marker"); +}; + +methods.removeMarkerCluster = function (layerId) { + this.layerManager.removeLayer("cluster", layerId); +}; + +methods.removeMarkerFromCluster = function (layerId, clusterId) { + var cluster = this.layerManager.getLayer("cluster", clusterId); + if (!cluster) return; + cluster.clusterLayerStore.remove(layerId); +}; + +methods.clearMarkerClusters = function () { + this.layerManager.clearLayers("cluster"); +}; + +methods.removeShape = function (layerId) { + this.layerManager.removeLayer("shape", layerId); +}; + +methods.clearShapes = function () { + this.layerManager.clearLayers("shape"); +}; + +methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { + var df = new _dataframe2["default"]().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); + addLayers(this, "shape", df, function (df, i) { + if (_jquery2["default"].isNumeric(df.get(i, "lat1")) && _jquery2["default"].isNumeric(df.get(i, "lng1")) && _jquery2["default"].isNumeric(df.get(i, "lat2")) && _jquery2["default"].isNumeric(df.get(i, "lng2"))) { + return _leaflet2["default"].rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i)); + } else { + return null; + } + }); +}; +/* + * @param lat Array of arrays of latitude coordinates for polygons + * @param lng Array of arrays of longitude coordinates for polygons + */ + + +methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions, highlightOptions) { + if (polygons.length > 0) { + var df = new _dataframe2["default"]().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).col("highlightOptions", highlightOptions).cbind(options); + addLayers(this, "shape", df, function (df, i) { + // This code used to use L.multiPolygon, but that caused + // double-click on a multipolygon to fail to zoom in on the + // map. Surprisingly, putting all the rings in a single + // polygon seems to still work; complicated multipolygons + // are still rendered correctly. + var shapes = df.get(i, "shapes").map(function (polygon) { + return polygon.map(_htmlwidgets2["default"].dataframeToD3); + }).reduce(function (acc, val) { + return acc.concat(val); + }, []); + return _leaflet2["default"].polygon(shapes, df.get(i)); + }); + } +}; + +methods.addGeoJSON = function (data, layerId, group, style) { + // This time, self is actually needed because the callbacks below need + // to access both the inner and outer senses of "this" + var self = this; + + if (typeof data === "string") { + data = JSON.parse(data); + } + + var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); + + var gjlayer = _leaflet2["default"].geoJson(data, { + style: function style(feature) { + if (feature.style || feature.properties.style) { + return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); + } else { + return globalStyle; + } + }, + onEachFeature: function onEachFeature(feature, layer) { + var extraInfo = { + featureId: feature.id, + properties: feature.properties + }; + var popup = feature.properties ? feature.properties.popup : null; + if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); + layer.on("click", mouseHandler(self.id, layerId, group, "geojson_click", extraInfo), this); + layer.on("mouseover", mouseHandler(self.id, layerId, group, "geojson_mouseover", extraInfo), this); + layer.on("mouseout", mouseHandler(self.id, layerId, group, "geojson_mouseout", extraInfo), this); + } + }); + + this.layerManager.addLayer(gjlayer, "geojson", layerId, group); +}; + +methods.removeGeoJSON = function (layerId) { + this.layerManager.removeLayer("geojson", layerId); +}; + +methods.clearGeoJSON = function () { + this.layerManager.clearLayers("geojson"); +}; + +methods.addTopoJSON = function (data, layerId, group, style) { + // This time, self is actually needed because the callbacks below need + // to access both the inner and outer senses of "this" + var self = this; + + if (typeof data === "string") { + data = JSON.parse(data); + } + + var globalStyle = _jquery2["default"].extend({}, style, data.style || {}); + + var gjlayer = _leaflet2["default"].geoJson(null, { + style: function style(feature) { + if (feature.style || feature.properties.style) { + return _jquery2["default"].extend({}, globalStyle, feature.style, feature.properties.style); + } else { + return globalStyle; + } + }, + onEachFeature: function onEachFeature(feature, layer) { + var extraInfo = { + featureId: feature.id, + properties: feature.properties + }; + var popup = feature.properties.popup; + if (typeof popup !== "undefined" && popup !== null) layer.bindPopup(popup); + layer.on("click", mouseHandler(self.id, layerId, group, "topojson_click", extraInfo), this); + layer.on("mouseover", mouseHandler(self.id, layerId, group, "topojson_mouseover", extraInfo), this); + layer.on("mouseout", mouseHandler(self.id, layerId, group, "topojson_mouseout", extraInfo), this); + } + }); + + global.omnivore.topojson.parse(data, null, gjlayer); + this.layerManager.addLayer(gjlayer, "topojson", layerId, group); +}; + +methods.removeTopoJSON = function (layerId) { + this.layerManager.removeLayer("topojson", layerId); +}; + +methods.clearTopoJSON = function () { + this.layerManager.clearLayers("topojson"); +}; + +methods.addControl = function (html, position, layerId, classes) { + function onAdd(map) { + var div = _leaflet2["default"].DomUtil.create("div", classes); + + if (typeof layerId !== "undefined" && layerId !== null) { + div.setAttribute("id", layerId); + } + + this._div = div; // It's possible for window.Shiny to be true but Shiny.initializeInputs to + // not be, when a static leaflet widget is included as part of the shiny + // UI directly (not through leafletOutput or uiOutput). In this case we + // don't do the normal Shiny stuff as that will all happen when Shiny + // itself loads and binds the entire doc. + + if (window.Shiny && _shiny2["default"].initializeInputs) { + _shiny2["default"].renderHtml(html, this._div); + + _shiny2["default"].initializeInputs(this._div); + + _shiny2["default"].bindAll(this._div); + } else { + this._div.innerHTML = html; + } + + return this._div; + } + + function onRemove(map) { + if (window.Shiny && _shiny2["default"].unbindAll) { + _shiny2["default"].unbindAll(this._div); + } + } + + var Control = _leaflet2["default"].Control.extend({ + options: { + position: position + }, + onAdd: onAdd, + onRemove: onRemove + }); + + this.controls.add(new Control(), layerId, html); +}; + +methods.addCustomControl = function (control, layerId) { + this.controls.add(control, layerId); +}; + +methods.removeControl = function (layerId) { + this.controls.remove(layerId); +}; + +methods.getControl = function (layerId) { + this.controls.get(layerId); +}; + +methods.clearControls = function () { + this.controls.clear(); +}; + +methods.addLegend = function (options) { + var legend = _leaflet2["default"].control({ + position: options.position + }); + + var gradSpan; + + legend.onAdd = function (map) { + var div = _leaflet2["default"].DomUtil.create("div", options.className), + colors = options.colors, + labels = options.labels, + legendHTML = ""; + + if (options.type === "numeric") { + // # Formatting constants. + var singleBinHeight = 20; // The distance between tick marks, in px + + var vMargin = 8; // If 1st tick mark starts at top of gradient, how + // many extra px are needed for the top half of the + // 1st label? (ditto for last tick mark/label) + + var tickWidth = 4; // How wide should tick marks be, in px? + + var labelPadding = 6; // How much distance to reserve for tick mark? + // (Must be >= tickWidth) + // # Derived formatting parameters. + // What's the height of a single bin, in percentage (of gradient height)? + // It might not just be 1/(n-1), if the gradient extends past the tick + // marks (which can be the case for pretty cut points). + + var singleBinPct = (options.extra.p_n - options.extra.p_1) / (labels.length - 1); // Each bin is `singleBinHeight` high. How tall is the gradient? + + var totalHeight = 1 / singleBinPct * singleBinHeight + 1; // How far should the first tick be shifted down, relative to the top + // of the gradient? + + var tickOffset = singleBinHeight / singleBinPct * options.extra.p_1; + gradSpan = (0, _jquery2["default"])("").css({ + "background": "linear-gradient(" + colors + ")", + "opacity": options.opacity, + "height": totalHeight + "px", + "width": "18px", + "display": "block", + "margin-top": vMargin + "px" + }); + var leftDiv = (0, _jquery2["default"])("
    ").css("float", "left"), + rightDiv = (0, _jquery2["default"])("
    ").css("float", "left"); + leftDiv.append(gradSpan); + (0, _jquery2["default"])(div).append(leftDiv).append(rightDiv).append((0, _jquery2["default"])("
    ")); // Have to attach the div to the body at this early point, so that the + // svg text getComputedTextLength() actually works, below. + + document.body.appendChild(div); + var ns = "http://www.w3.org/2000/svg"; + var svg = document.createElementNS(ns, "svg"); + rightDiv.append(svg); + var g = document.createElementNS(ns, "g"); + (0, _jquery2["default"])(g).attr("transform", "translate(0, " + vMargin + ")"); + svg.appendChild(g); // max label width needed to set width of svg, and right-justify text + + var maxLblWidth = 0; // Create tick marks and labels + + _jquery2["default"].each(labels, function (i, label) { + var y = tickOffset + i * singleBinHeight + 0.5; + var thisLabel = document.createElementNS(ns, "text"); + (0, _jquery2["default"])(thisLabel).text(labels[i]).attr("y", y).attr("dx", labelPadding).attr("dy", "0.5ex"); + g.appendChild(thisLabel); + maxLblWidth = Math.max(maxLblWidth, thisLabel.getComputedTextLength()); + var thisTick = document.createElementNS(ns, "line"); + (0, _jquery2["default"])(thisTick).attr("x1", 0).attr("x2", tickWidth).attr("y1", y).attr("y2", y).attr("stroke-width", 1); + g.appendChild(thisTick); + }); // Now that we know the max label width, we can right-justify + + + (0, _jquery2["default"])(svg).find("text").attr("dx", labelPadding + maxLblWidth).attr("text-anchor", "end"); // Final size for + + (0, _jquery2["default"])(svg).css({ + width: maxLblWidth + labelPadding + "px", + height: totalHeight + vMargin * 2 + "px" + }); + + if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { + (0, _jquery2["default"])(div).append("
    " + options.na_label + "
    "); + } + } else { + if (options.na_color && _jquery2["default"].inArray(options.na_label, labels) < 0) { + colors.push(options.na_color); + labels.push(options.na_label); + } + + for (var i = 0; i < colors.length; i++) { + legendHTML += " " + labels[i] + "
    "; + } + + div.innerHTML = legendHTML; + } + + if (options.title) (0, _jquery2["default"])(div).prepend("
    " + options.title + "
    "); + return div; + }; + + if (options.group) { + // Auto generate a layerID if not provided + if (!options.layerId) { + options.layerId = _leaflet2["default"].Util.stamp(legend); + } + + var map = this; + map.on("overlayadd", function (e) { + if (e.name === options.group) { + map.controls.add(legend, options.layerId); + } + }); + map.on("overlayremove", function (e) { + if (e.name === options.group) { + map.controls.remove(options.layerId); + } + }); + map.on("groupadd", function (e) { + if (e.name === options.group) { + map.controls.add(legend, options.layerId); + } + }); + map.on("groupremove", function (e) { + if (e.name === options.group) { + map.controls.remove(options.layerId); + } + }); + } + + this.controls.add(legend, options.layerId); +}; + +methods.addLayersControl = function (baseGroups, overlayGroups, options) { + var _this4 = this; + + // Only allow one layers control at a time + methods.removeLayersControl.call(this); + var firstLayer = true; + var base = {}; + + _jquery2["default"].each((0, _util.asArray)(baseGroups), function (i, g) { + var layer = _this4.layerManager.getLayerGroup(g, true); + + if (layer) { + base[g] = layer; // Check if >1 base layers are visible; if so, hide all but the first one + + if (_this4.hasLayer(layer)) { + if (firstLayer) { + firstLayer = false; + } else { + _this4.removeLayer(layer); + } + } + } + }); + + var overlay = {}; + + _jquery2["default"].each((0, _util.asArray)(overlayGroups), function (i, g) { + var layer = _this4.layerManager.getLayerGroup(g, true); + + if (layer) { + overlay[g] = layer; + } + }); + + this.currentLayersControl = _leaflet2["default"].control.layers(base, overlay, options); + this.addControl(this.currentLayersControl); +}; + +methods.removeLayersControl = function () { + if (this.currentLayersControl) { + this.removeControl(this.currentLayersControl); + this.currentLayersControl = null; + } +}; + +methods.addScaleBar = function (options) { + // Only allow one scale bar at a time + methods.removeScaleBar.call(this); + + var scaleBar = _leaflet2["default"].control.scale(options).addTo(this); + + this.currentScaleBar = scaleBar; +}; + +methods.removeScaleBar = function () { + if (this.currentScaleBar) { + this.currentScaleBar.remove(); + this.currentScaleBar = null; + } +}; + +methods.hideGroup = function (group) { + var _this5 = this; + + _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { + var layer = _this5.layerManager.getLayerGroup(g, true); + + if (layer) { + _this5.removeLayer(layer); + } + }); +}; + +methods.showGroup = function (group) { + var _this6 = this; + + _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { + var layer = _this6.layerManager.getLayerGroup(g, true); + + if (layer) { + _this6.addLayer(layer); + } + }); +}; + +function setupShowHideGroupsOnZoom(map) { + if (map.leafletr._hasInitializedShowHideGroups) { + return; + } + + map.leafletr._hasInitializedShowHideGroups = true; + + function setVisibility(layer, visible, group) { + if (visible !== map.hasLayer(layer)) { + if (visible) { + map.addLayer(layer); + map.fire("groupadd", { + "name": group, + "layer": layer + }); + } else { + map.removeLayer(layer); + map.fire("groupremove", { + "name": group, + "layer": layer + }); + } + } + } + + function showHideGroupsOnZoom() { + if (!map.layerManager) return; + var zoom = map.getZoom(); + map.layerManager.getAllGroupNames().forEach(function (group) { + var layer = map.layerManager.getLayerGroup(group, false); + + if (layer && typeof layer.zoomLevels !== "undefined") { + setVisibility(layer, layer.zoomLevels === true || layer.zoomLevels.indexOf(zoom) >= 0, group); + } + }); + } + + map.showHideGroupsOnZoom = showHideGroupsOnZoom; + map.on("zoomend", showHideGroupsOnZoom); +} + +methods.setGroupOptions = function (group, options) { + var _this7 = this; + + _jquery2["default"].each((0, _util.asArray)(group), function (i, g) { + var layer = _this7.layerManager.getLayerGroup(g, true); // This slightly tortured check is because 0 is a valid value for zoomLevels + + + if (typeof options.zoomLevels !== "undefined" && options.zoomLevels !== null) { + layer.zoomLevels = (0, _util.asArray)(options.zoomLevels); + } + }); + + setupShowHideGroupsOnZoom(this); + this.showHideGroupsOnZoom(); +}; + +methods.addRasterImage = function (uri, bounds, opacity, attribution, layerId, group) { + // uri is a data URI containing an image. We want to paint this image as a + // layer at (top-left) bounds[0] to (bottom-right) bounds[1]. + // We can't simply use ImageOverlay, as it uses bilinear scaling which looks + // awful as you zoom in (and sometimes shifts positions or disappears). + // Instead, we'll use a TileLayer.Canvas to draw pieces of the image. + // First, some helper functions. + // degree2tile converts latitude, longitude, and zoom to x and y tile + // numbers. The tile numbers returned can be non-integral, as there's no + // reason to expect that the lat/lng inputs are exactly on the border of two + // tiles. + // + // We'll use this to convert the bounds we got from the server, into coords + // in tile-space at a given zoom level. Note that once we do the conversion, + // we don't to do any more trigonometry to convert between pixel coordinates + // and tile coordinates; the source image pixel coords, destination canvas + // pixel coords, and tile coords all can be scaled linearly. + function degree2tile(lat, lng, zoom) { + // See http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames + var latRad = lat * Math.PI / 180; + var n = Math.pow(2, zoom); + var x = (lng + 180) / 360 * n; + var y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2 * n; + return { + x: x, + y: y + }; + } // Given a range [from,to) and either one or two numbers, returns true if + // there is any overlap between [x,x1) and the range--or if x1 is omitted, + // then returns true if x is within [from,to). + + + function overlap(from, to, x, + /* optional */ + x1) { + if (arguments.length == 3) x1 = x; + return x < to && x1 >= from; + } + + function getCanvasSmoothingProperty(ctx) { + var candidates = ["imageSmoothingEnabled", "mozImageSmoothingEnabled", "webkitImageSmoothingEnabled", "msImageSmoothingEnabled"]; + + for (var i = 0; i < candidates.length; i++) { + if (typeof ctx[candidates[i]] !== "undefined") { + return candidates[i]; + } + } + + return null; + } // Our general strategy is to: + // 1. Load the data URI in an Image() object, so we can get its pixel + // dimensions and the underlying image data. (We could have done this + // by not encoding as PNG at all but just send an array of RGBA values + // from the server, but that would inflate the JSON too much.) + // 2. Create a hidden canvas that we use just to extract the image data + // from the Image (using Context2D.getImageData()). + // 3. Create a TileLayer.Canvas and add it to the map. + // We want to synchronously create and attach the TileLayer.Canvas (so an + // immediate call to clearRasters() will be respected, for example), but + // Image loads its data asynchronously. Fortunately we can resolve this + // by putting TileLayer.Canvas into async mode, which will let us create + // and attach the layer but have it wait until the image is loaded before + // it actually draws anything. + // These are the variables that we will populate once the image is loaded. + + + var imgData = null; // 1d row-major array, four [0-255] integers per pixel + + var imgDataMipMapper = null; + var w = null; // image width in pixels + + var h = null; // image height in pixels + // We'll use this array to store callbacks that need to be invoked once + // imgData, w, and h have been resolved. + + var imgDataCallbacks = []; // Consumers of imgData, w, and h can call this to be notified when data + // is available. + + function getImageData(callback) { + if (imgData != null) { + // Must not invoke the callback immediately; it's too confusing and + // fragile to have a function invoke the callback *either* immediately + // or in the future. Better to be consistent here. + setTimeout(function () { + callback(imgData, w, h, imgDataMipMapper); + }, 0); + } else { + imgDataCallbacks.push(callback); + } + } + + var img = new Image(); + + img.onload = function () { + // Save size + w = img.width; + h = img.height; // Create a dummy canvas to extract the image data + + var imgDataCanvas = document.createElement("canvas"); + imgDataCanvas.width = w; + imgDataCanvas.height = h; + imgDataCanvas.style.display = "none"; + document.body.appendChild(imgDataCanvas); + var imgDataCtx = imgDataCanvas.getContext("2d"); + imgDataCtx.drawImage(img, 0, 0); // Save the image data. + + imgData = imgDataCtx.getImageData(0, 0, w, h).data; + imgDataMipMapper = new _mipmapper2["default"](img); // Done with the canvas, remove it from the page so it can be gc'd. + + document.body.removeChild(imgDataCanvas); // Alert any getImageData callers who are waiting. + + for (var i = 0; i < imgDataCallbacks.length; i++) { + imgDataCallbacks[i](imgData, w, h, imgDataMipMapper); + } + + imgDataCallbacks = []; + }; + + img.src = uri; + + var canvasTiles = _leaflet2["default"].gridLayer({ + opacity: opacity, + attribution: attribution, + detectRetina: true, + async: true + }); // NOTE: The done() function MUST NOT be invoked until after the current + // tick; done() looks in Leaflet's tile cache for the current tile, and + // since it's still being constructed, it won't be found. + + + canvasTiles.createTile = function (tilePoint, done) { + var zoom = tilePoint.z; + + var canvas = _leaflet2["default"].DomUtil.create("canvas"); + + var error; // setup tile width and height according to the options + + var size = this.getTileSize(); + canvas.width = size.x; + canvas.height = size.y; + getImageData(function (imgData, w, h, mipmapper) { + try { + // The Context2D we'll being drawing onto. It's always 256x256. + var ctx = canvas.getContext("2d"); // Convert our image data's top-left and bottom-right locations into + // x/y tile coordinates. This is essentially doing a spherical mercator + // projection, then multiplying by 2^zoom. + + var topLeft = degree2tile(bounds[0][0], bounds[0][1], zoom); + var bottomRight = degree2tile(bounds[1][0], bounds[1][1], zoom); // The size of the image in x/y tile coordinates. + + var extent = { + x: bottomRight.x - topLeft.x, + y: bottomRight.y - topLeft.y + }; // Short circuit if tile is totally disjoint from image. + + if (!overlap(tilePoint.x, tilePoint.x + 1, topLeft.x, bottomRight.x)) return; + if (!overlap(tilePoint.y, tilePoint.y + 1, topLeft.y, bottomRight.y)) return; // The linear resolution of the tile we're drawing is always 256px per tile unit. + // If the linear resolution (in either direction) of the image is less than 256px + // per tile unit, then use nearest neighbor; otherwise, use the canvas's built-in + // scaling. + + var imgRes = { + x: w / extent.x, + y: h / extent.y + }; // We can do the actual drawing in one of three ways: + // - Call drawImage(). This is easy and fast, and results in smooth + // interpolation (bilinear?). This is what we want when we are + // reducing the image from its native size. + // - Call drawImage() with imageSmoothingEnabled=false. This is easy + // and fast and gives us nearest-neighbor interpolation, which is what + // we want when enlarging the image. However, it's unsupported on many + // browsers (including QtWebkit). + // - Do a manual nearest-neighbor interpolation. This is what we'll fall + // back to when enlarging, and imageSmoothingEnabled isn't supported. + // In theory it's slower, but still pretty fast on my machine, and the + // results look the same AFAICT. + // Is imageSmoothingEnabled supported? If so, we can let canvas do + // nearest-neighbor interpolation for us. + + var smoothingProperty = getCanvasSmoothingProperty(ctx); + + if (smoothingProperty || imgRes.x >= 256 && imgRes.y >= 256) { + // Use built-in scaling + // Turn off anti-aliasing if necessary + if (smoothingProperty) { + ctx[smoothingProperty] = imgRes.x >= 256 && imgRes.y >= 256; + } // Don't necessarily draw with the full-size image; if we're + // downscaling, use the mipmapper to get a pre-downscaled image + // (see comments on Mipmapper class for why this matters). + + + mipmapper.getBySize(extent.x * 256, extent.y * 256, function (mip) { + // It's possible that the image will go off the edge of the canvas-- + // that's OK, the canvas should clip appropriately. + ctx.drawImage(mip, // Convert abs tile coords to rel tile coords, then *256 to convert + // to rel pixel coords + (topLeft.x - tilePoint.x) * 256, (topLeft.y - tilePoint.y) * 256, // Always draw the whole thing and let canvas clip; so we can just + // convert from size in tile coords straight to pixels + extent.x * 256, extent.y * 256); + }); + } else { + // Use manual nearest-neighbor interpolation + // Calculate the source image pixel coordinates that correspond with + // the top-left and bottom-right of this tile. (If the source image + // only partially overlaps the tile, we use max/min to limit the + // sourceStart/End to only reflect the overlapping portion.) + var sourceStart = { + x: Math.max(0, Math.floor((tilePoint.x - topLeft.x) * imgRes.x)), + y: Math.max(0, Math.floor((tilePoint.y - topLeft.y) * imgRes.y)) + }; + var sourceEnd = { + x: Math.min(w, Math.ceil((tilePoint.x + 1 - topLeft.x) * imgRes.x)), + y: Math.min(h, Math.ceil((tilePoint.y + 1 - topLeft.y) * imgRes.y)) + }; // The size, in dest pixels, that each source pixel should occupy. + // This might be greater or less than 1 (e.g. if x and y resolution + // are very different). + + var pixelSize = { + x: 256 / imgRes.x, + y: 256 / imgRes.y + }; // For each pixel in the source image that overlaps the tile... + + for (var row = sourceStart.y; row < sourceEnd.y; row++) { + for (var col = sourceStart.x; col < sourceEnd.x; col++) { + // ...extract the pixel data... + var i = (row * w + col) * 4; + var r = imgData[i]; + var g = imgData[i + 1]; + var b = imgData[i + 2]; + var a = imgData[i + 3]; + ctx.fillStyle = "rgba(" + [r, g, b, a / 255].join(",") + ")"; // ...calculate the corresponding pixel coord in the dest image + // where it should be drawn... + + var pixelPos = { + x: (col / imgRes.x + topLeft.x - tilePoint.x) * 256, + y: (row / imgRes.y + topLeft.y - tilePoint.y) * 256 + }; // ...and draw a rectangle there. + + ctx.fillRect(Math.round(pixelPos.x), Math.round(pixelPos.y), // Looks crazy, but this is necessary to prevent rounding from + // causing overlap between this rect and its neighbors. The + // minuend is the location of the next pixel, while the + // subtrahend is the position of the current pixel (to turn an + // absolute coordinate to a width/height). Yes, I had to look + // up minuend and subtrahend. + Math.round(pixelPos.x + pixelSize.x) - Math.round(pixelPos.x), Math.round(pixelPos.y + pixelSize.y) - Math.round(pixelPos.y)); + } + } + } + } catch (e) { + error = e; + } finally { + done(error, canvas); + } + }); + return canvas; + }; + + this.layerManager.addLayer(canvasTiles, "image", layerId, group); +}; + +methods.removeImage = function (layerId) { + this.layerManager.removeLayer("image", layerId); +}; + +methods.clearImages = function () { + this.layerManager.clearLayers("image"); +}; + +methods.addMeasure = function (options) { + // if a measureControl already exists, then remove it and + // replace with a new one + methods.removeMeasure.call(this); + this.measureControl = _leaflet2["default"].control.measure(options); + this.addControl(this.measureControl); +}; + +methods.removeMeasure = function () { + if (this.measureControl) { + this.removeControl(this.measureControl); + this.measureControl = null; + } +}; + +methods.addSelect = function (ctGroup) { + var _this8 = this; + + methods.removeSelect.call(this); + this._selectButton = _leaflet2["default"].easyButton({ + states: [{ + stateName: "select-inactive", + icon: "ion-qr-scanner", + title: "Make a selection", + onClick: function onClick(btn, map) { + btn.state("select-active"); + _this8._locationFilter = new _leaflet2["default"].LocationFilter2(); + + if (ctGroup) { + var selectionHandle = new global.crosstalk.SelectionHandle(ctGroup); + selectionHandle.on("change", function (e) { + if (e.sender !== selectionHandle) { + if (_this8._locationFilter) { + _this8._locationFilter.disable(); + + btn.state("select-inactive"); + } + } + }); + + var handler = function handler(e) { + _this8.layerManager.brush(_this8._locationFilter.getBounds(), { + sender: selectionHandle + }); + }; + + _this8._locationFilter.on("enabled", handler); + + _this8._locationFilter.on("change", handler); + + _this8._locationFilter.on("disabled", function () { + selectionHandle.close(); + _this8._locationFilter = null; + }); + } + + _this8._locationFilter.addTo(map); + } + }, { + stateName: "select-active", + icon: "ion-close-round", + title: "Dismiss selection", + onClick: function onClick(btn, map) { + btn.state("select-inactive"); + + _this8._locationFilter.disable(); // If explicitly dismissed, clear the crosstalk selections + + + _this8.layerManager.unbrush(); + } + }] + }); + + this._selectButton.addTo(this); +}; + +methods.removeSelect = function () { + if (this._locationFilter) { + this._locationFilter.disable(); + } + + if (this._selectButton) { + this.removeControl(this._selectButton); + this._selectButton = null; + } +}; + +methods.createMapPane = function (name, zIndex) { + this.createPane(name); + this.getPane(name).style.zIndex = zIndex; +}; + + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./cluster-layer-store":1,"./crs_utils":3,"./dataframe":4,"./global/htmlwidgets":8,"./global/jquery":9,"./global/leaflet":10,"./global/shiny":12,"./mipmapper":16,"./util":17}],16:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +// This class simulates a mipmap, which shrinks images by powers of two. This +// stepwise reduction results in "pixel-perfect downscaling" (where every +// pixel of the original image has some contribution to the downscaled image) +// as opposed to a single-step downscaling which will discard a lot of data +// (and with sparse images at small scales can give very surprising results). +var Mipmapper = /*#__PURE__*/function () { + function Mipmapper(img) { + _classCallCheck(this, Mipmapper); + + this._layers = [img]; + } // The various functions on this class take a callback function BUT MAY OR MAY + // NOT actually behave asynchronously. + + + _createClass(Mipmapper, [{ + key: "getBySize", + value: function getBySize(desiredWidth, desiredHeight, callback) { + var _this = this; + + var i = 0; + var lastImg = this._layers[0]; + + var testNext = function testNext() { + _this.getByIndex(i, function (img) { + // If current image is invalid (i.e. too small to be rendered) or + // it's smaller than what we wanted, return the last known good image. + if (!img || img.width < desiredWidth || img.height < desiredHeight) { + callback(lastImg); + return; + } else { + lastImg = img; + i++; + testNext(); + return; + } + }); + }; + + testNext(); + } + }, { + key: "getByIndex", + value: function getByIndex(i, callback) { + var _this2 = this; + + if (this._layers[i]) { + callback(this._layers[i]); + return; + } + + this.getByIndex(i - 1, function (prevImg) { + if (!prevImg) { + // prevImg could not be calculated (too small, possibly) + callback(null); + return; + } + + if (prevImg.width < 2 || prevImg.height < 2) { + // Can't reduce this image any further + callback(null); + return; + } // If reduce ever becomes truly asynchronous, we should stuff a promise or + // something into this._layers[i] before calling this.reduce(), to prevent + // redundant reduce operations from happening. + + + _this2.reduce(prevImg, function (reducedImg) { + _this2._layers[i] = reducedImg; + callback(reducedImg); + return; + }); + }); + } + }, { + key: "reduce", + value: function reduce(img, callback) { + var imgDataCanvas = document.createElement("canvas"); + imgDataCanvas.width = Math.ceil(img.width / 2); + imgDataCanvas.height = Math.ceil(img.height / 2); + imgDataCanvas.style.display = "none"; + document.body.appendChild(imgDataCanvas); + + try { + var imgDataCtx = imgDataCanvas.getContext("2d"); + imgDataCtx.drawImage(img, 0, 0, img.width / 2, img.height / 2); + callback(imgDataCanvas); + } finally { + document.body.removeChild(imgDataCanvas); + } + } + }]); + + return Mipmapper; +}(); + +exports["default"] = Mipmapper; + + +},{}],17:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.log = log; +exports.recycle = recycle; +exports.asArray = asArray; + +function log(message) { + /* eslint-disable no-console */ + if (console && console.log) console.log(message); + /* eslint-enable no-console */ +} + +function recycle(values, length, inPlace) { + if (length === 0 && !inPlace) return []; + + if (!(values instanceof Array)) { + if (inPlace) { + throw new Error("Can't do in-place recycling of a non-Array value"); + } + + values = [values]; + } + + if (typeof length === "undefined") length = values.length; + var dest = inPlace ? values : []; + var origLength = values.length; + + while (dest.length < length) { + dest.push(values[dest.length % origLength]); + } + + if (dest.length > length) { + dest.splice(length, dest.length - length); + } + + return dest; +} + +function asArray(value) { + if (value instanceof Array) return value;else return [value]; +} + + +},{}]},{},[13]); diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js b/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js new file mode 100644 index 0000000..bcde1ed --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js @@ -0,0 +1,1178 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['leaflet'], factory); + } else if (typeof modules === 'object' && module.exports) { + // define a Common JS module that relies on 'leaflet' + module.exports = factory(require('leaflet')); + } else { + // Assume Leaflet is loaded into global object L already + factory(L); + } +}(this, function (L) { + 'use strict'; + + L.TileLayer.Provider = L.TileLayer.extend({ + initialize: function (arg, options) { + var providers = L.TileLayer.Provider.providers; + + var parts = arg.split('.'); + + var providerName = parts[0]; + var variantName = parts[1]; + + if (!providers[providerName]) { + throw 'No such provider (' + providerName + ')'; + } + + var provider = { + url: providers[providerName].url, + options: providers[providerName].options + }; + + // overwrite values in provider from variant. + if (variantName && 'variants' in providers[providerName]) { + if (!(variantName in providers[providerName].variants)) { + throw 'No such variant of ' + providerName + ' (' + variantName + ')'; + } + var variant = providers[providerName].variants[variantName]; + var variantOptions; + if (typeof variant === 'string') { + variantOptions = { + variant: variant + }; + } else { + variantOptions = variant.options; + } + provider = { + url: variant.url || provider.url, + options: L.Util.extend({}, provider.options, variantOptions) + }; + } + + // replace attribution placeholders with their values from toplevel provider attribution, + // recursively + var attributionReplacer = function (attr) { + if (attr.indexOf('{attribution.') === -1) { + return attr; + } + return attr.replace(/\{attribution.(\w*)\}/g, + function (match, attributionName) { + return attributionReplacer(providers[attributionName].options.attribution); + } + ); + }; + provider.options.attribution = attributionReplacer(provider.options.attribution); + + // Compute final options combining provider options with any user overrides + var layerOpts = L.Util.extend({}, provider.options, options); + L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts); + } + }); + + /** + * Definition of providers. + * see http://leafletjs.com/reference.html#tilelayer for options in the options map. + */ + + L.TileLayer.Provider.providers = { + OpenStreetMap: { + url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + options: { + maxZoom: 19, + attribution: + '© OpenStreetMap contributors' + }, + variants: { + Mapnik: {}, + DE: { + url: 'https://tile.openstreetmap.de/{z}/{x}/{y}.png', + options: { + maxZoom: 18 + } + }, + CH: { + url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', + options: { + maxZoom: 18, + bounds: [[45, 5], [48, 11]] + } + }, + France: { + url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', + options: { + maxZoom: 20, + attribution: '© OpenStreetMap France | {attribution.OpenStreetMap}' + } + }, + HOT: { + url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', + options: { + attribution: + '{attribution.OpenStreetMap}, ' + + 'Tiles style by Humanitarian OpenStreetMap Team ' + + 'hosted by OpenStreetMap France' + } + }, + BZH: { + url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', + options: { + attribution: '{attribution.OpenStreetMap}, Tiles courtesy of Breton OpenStreetMap Team', + bounds: [[46.2, -5.5], [50, 0.7]] + } + } + } + }, + MapTilesAPI: { + url: 'https://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}', + options: { + attribution: + '© MapTiles API, {attribution.OpenStreetMap}', + variant: 'en/map/v1', + // Get your own MapTiles API access token here : https://www.maptilesapi.com/ + // NB : this is a demonstration key that comes with no guarantee and not to be used in production + apikey: '', + maxZoom: 19 + }, + variants: { + OSMEnglish: { + options: { + variant: 'en/map/v1' + } + }, + OSMFrancais: { + options: { + variant: 'fr/map/v1' + } + }, + OSMEspagnol: { + options: { + variant: 'es/map/v1' + } + } + } + }, + OpenSeaMap: { + url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', + options: { + attribution: 'Map data: © OpenSeaMap contributors' + } + }, + OPNVKarte: { + url: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', + options: { + maxZoom: 18, + attribution: 'Map memomaps.de CC-BY-SA, map data {attribution.OpenStreetMap}' + } + }, + OpenTopoMap: { + url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', + options: { + maxZoom: 17, + attribution: 'Map data: {attribution.OpenStreetMap}, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' + } + }, + OpenRailwayMap: { + url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', + options: { + maxZoom: 19, + attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenRailwayMap (CC-BY-SA)' + } + }, + OpenFireMap: { + url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png', + options: { + maxZoom: 19, + attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © OpenFireMap (CC-BY-SA)' + } + }, + SafeCast: { + url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', + options: { + maxZoom: 16, + attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © SafeCast (CC-BY-SA)' + } + }, + Stadia: { + url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}', + options: { + minZoom: 0, + maxZoom: 20, + attribution: + '© Stadia Maps ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'alidade_smooth', + ext: 'png' + }, + variants: { + AlidadeSmooth: 'alidade_smooth', + AlidadeSmoothDark: 'alidade_smooth_dark', + OSMBright: 'osm_bright', + Outdoors: 'outdoors', + StamenToner: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_toner' + } + }, + StamenTonerBackground: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_toner_background' + } + }, + StamenTonerLines: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_toner_lines' + } + }, + StamenTonerLabels: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_toner_labels' + } + }, + StamenTonerLite: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_toner_lite' + } + }, + StamenWatercolor: { + url: 'https://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}', + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_watercolor', + ext: 'jpg', + minZoom: 1, + maxZoom: 16 + } + }, + StamenTerrain: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_terrain', + minZoom: 0, + maxZoom: 18 + } + }, + StamenTerrainBackground: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_terrain_background', + minZoom: 0, + maxZoom: 18 + } + }, + StamenTerrainLabels: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_terrain_labels', + minZoom: 0, + maxZoom: 18 + } + }, + StamenTerrainLines: { + options: { + attribution: + '© Stadia Maps ' + + '© Stamen Design ' + + '© OpenMapTiles ' + + '{attribution.OpenStreetMap}', + variant: 'stamen_terrain_lines', + minZoom: 0, + maxZoom: 18 + } + } + } + }, + Thunderforest: { + url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}', + options: { + attribution: + '© Thunderforest, {attribution.OpenStreetMap}', + variant: 'cycle', + apikey: '', + maxZoom: 22 + }, + variants: { + OpenCycleMap: 'cycle', + Transport: { + options: { + variant: 'transport' + } + }, + TransportDark: { + options: { + variant: 'transport-dark' + } + }, + SpinalMap: { + options: { + variant: 'spinal-map' + } + }, + Landscape: 'landscape', + Outdoors: 'outdoors', + Pioneer: 'pioneer', + MobileAtlas: 'mobile-atlas', + Neighbourhood: 'neighbourhood' + } + }, + CyclOSM: { + url: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', + options: { + maxZoom: 20, + attribution: 'CyclOSM | Map data: {attribution.OpenStreetMap}' + } + }, + Jawg: { + url: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}', + options: { + attribution: + '© JawgMaps ' + + '{attribution.OpenStreetMap}', + minZoom: 0, + maxZoom: 22, + subdomains: 'abcd', + variant: 'jawg-terrain', + // Get your own Jawg access token here : https://www.jawg.io/lab/ + // NB : this is a demonstration key that comes with no guarantee + accessToken: '', + }, + variants: { + Streets: 'jawg-streets', + Terrain: 'jawg-terrain', + Sunny: 'jawg-sunny', + Dark: 'jawg-dark', + Light: 'jawg-light', + Matrix: 'jawg-matrix' + } + }, + MapBox: { + url: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}', + options: { + attribution: + '© Mapbox ' + + '{attribution.OpenStreetMap} ' + + 'Improve this map', + tileSize: 512, + maxZoom: 18, + zoomOffset: -1, + id: 'mapbox/streets-v11', + accessToken: '', + } + }, + MapTiler: { + url: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}', + options: { + attribution: + '© MapTiler © OpenStreetMap contributors', + variant: 'streets', + ext: 'png', + key: '', + tileSize: 512, + zoomOffset: -1, + minZoom: 0, + maxZoom: 21 + }, + variants: { + Streets: 'streets', + Basic: 'basic', + Bright: 'bright', + Pastel: 'pastel', + Positron: 'positron', + Hybrid: { + options: { + variant: 'hybrid', + ext: 'jpg' + } + }, + Toner: 'toner', + Topo: 'topo', + Voyager: 'voyager' + } + }, + TomTom: { + url: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}', + options: { + variant: 'basic', + maxZoom: 22, + attribution: + '© 1992 - ' + new Date().getFullYear() + ' TomTom. ', + subdomains: 'abcd', + style: 'main', + ext: 'png', + apikey: '', + }, + variants: { + Basic: 'basic', + Hybrid: 'hybrid', + Labels: 'labels' + } + }, + Esri: { + url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}', + options: { + variant: 'World_Street_Map', + attribution: 'Tiles © Esri' + }, + variants: { + WorldStreetMap: { + options: { + attribution: + '{attribution.Esri} — ' + + 'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012' + } + }, + DeLorme: { + options: { + variant: 'Specialty/DeLorme_World_Base_Map', + minZoom: 1, + maxZoom: 11, + attribution: '{attribution.Esri} — Copyright: ©2012 DeLorme' + } + }, + WorldTopoMap: { + options: { + variant: 'World_Topo_Map', + attribution: + '{attribution.Esri} — ' + + 'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' + } + }, + WorldImagery: { + options: { + variant: 'World_Imagery', + attribution: + '{attribution.Esri} — ' + + 'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' + } + }, + WorldTerrain: { + options: { + variant: 'World_Terrain_Base', + maxZoom: 13, + attribution: + '{attribution.Esri} — ' + + 'Source: USGS, Esri, TANA, DeLorme, and NPS' + } + }, + WorldShadedRelief: { + options: { + variant: 'World_Shaded_Relief', + maxZoom: 13, + attribution: '{attribution.Esri} — Source: Esri' + } + }, + WorldPhysical: { + options: { + variant: 'World_Physical_Map', + maxZoom: 8, + attribution: '{attribution.Esri} — Source: US National Park Service' + } + }, + OceanBasemap: { + options: { + variant: 'Ocean/World_Ocean_Base', + maxZoom: 13, + attribution: '{attribution.Esri} — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri' + } + }, + NatGeoWorldMap: { + options: { + variant: 'NatGeo_World_Map', + maxZoom: 16, + attribution: '{attribution.Esri} — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC' + } + }, + WorldGrayCanvas: { + options: { + variant: 'Canvas/World_Light_Gray_Base', + maxZoom: 16, + attribution: '{attribution.Esri} — Esri, DeLorme, NAVTEQ' + } + } + } + }, + OpenWeatherMap: { + url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}', + options: { + maxZoom: 19, + attribution: 'Map data © OpenWeatherMap', + apiKey: '', + opacity: 0.5 + }, + variants: { + Clouds: 'clouds', + CloudsClassic: 'clouds_cls', + Precipitation: 'precipitation', + PrecipitationClassic: 'precipitation_cls', + Rain: 'rain', + RainClassic: 'rain_cls', + Pressure: 'pressure', + PressureContour: 'pressure_cntr', + Wind: 'wind', + Temperature: 'temp', + Snow: 'snow' + } + }, + HERE: { + /* + * HERE maps, formerly Nokia maps. + * These basemaps are free, but you need an api id and app key. Please sign up at + * https://developer.here.com/plans + */ + url: + 'https://{s}.{base}.maps.api.here.com/maptile/2.1/' + + '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + + 'app_id={app_id}&app_code={app_code}&lg={language}', + options: { + attribution: + 'Map © 1987-' + new Date().getFullYear() + ' HERE', + subdomains: '1234', + mapID: 'newest', + 'app_id': '', + 'app_code': '', + base: 'base', + variant: 'normal.day', + maxZoom: 20, + type: 'maptile', + language: 'eng', + format: 'png8', + size: '256' + }, + variants: { + normalDay: 'normal.day', + normalDayCustom: 'normal.day.custom', + normalDayGrey: 'normal.day.grey', + normalDayMobile: 'normal.day.mobile', + normalDayGreyMobile: 'normal.day.grey.mobile', + normalDayTransit: 'normal.day.transit', + normalDayTransitMobile: 'normal.day.transit.mobile', + normalDayTraffic: { + options: { + variant: 'normal.traffic.day', + base: 'traffic', + type: 'traffictile' + } + }, + normalNight: 'normal.night', + normalNightMobile: 'normal.night.mobile', + normalNightGrey: 'normal.night.grey', + normalNightGreyMobile: 'normal.night.grey.mobile', + normalNightTransit: 'normal.night.transit', + normalNightTransitMobile: 'normal.night.transit.mobile', + reducedDay: 'reduced.day', + reducedNight: 'reduced.night', + basicMap: { + options: { + type: 'basetile' + } + }, + mapLabels: { + options: { + type: 'labeltile', + format: 'png' + } + }, + trafficFlow: { + options: { + base: 'traffic', + type: 'flowtile' + } + }, + carnavDayGrey: 'carnav.day.grey', + hybridDay: { + options: { + base: 'aerial', + variant: 'hybrid.day' + } + }, + hybridDayMobile: { + options: { + base: 'aerial', + variant: 'hybrid.day.mobile' + } + }, + hybridDayTransit: { + options: { + base: 'aerial', + variant: 'hybrid.day.transit' + } + }, + hybridDayGrey: { + options: { + base: 'aerial', + variant: 'hybrid.grey.day' + } + }, + hybridDayTraffic: { + options: { + variant: 'hybrid.traffic.day', + base: 'traffic', + type: 'traffictile' + } + }, + pedestrianDay: 'pedestrian.day', + pedestrianNight: 'pedestrian.night', + satelliteDay: { + options: { + base: 'aerial', + variant: 'satellite.day' + } + }, + terrainDay: { + options: { + base: 'aerial', + variant: 'terrain.day' + } + }, + terrainDayMobile: { + options: { + base: 'aerial', + variant: 'terrain.day.mobile' + } + } + } + }, + HEREv3: { + /* + * HERE maps API Version 3. + * These basemaps are free, but you need an API key. Please sign up at + * https://developer.here.com/plans + * Version 3 deprecates the app_id and app_code access in favor of apiKey + * + * Supported access methods as of 2019/12/21: + * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services + */ + url: + 'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' + + '{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' + + 'apiKey={apiKey}&lg={language}', + options: { + attribution: + 'Map © 1987-' + new Date().getFullYear() + ' HERE', + subdomains: '1234', + mapID: 'newest', + apiKey: '', + base: 'base', + variant: 'normal.day', + maxZoom: 20, + type: 'maptile', + language: 'eng', + format: 'png8', + size: '256' + }, + variants: { + normalDay: 'normal.day', + normalDayCustom: 'normal.day.custom', + normalDayGrey: 'normal.day.grey', + normalDayMobile: 'normal.day.mobile', + normalDayGreyMobile: 'normal.day.grey.mobile', + normalDayTransit: 'normal.day.transit', + normalDayTransitMobile: 'normal.day.transit.mobile', + normalNight: 'normal.night', + normalNightMobile: 'normal.night.mobile', + normalNightGrey: 'normal.night.grey', + normalNightGreyMobile: 'normal.night.grey.mobile', + normalNightTransit: 'normal.night.transit', + normalNightTransitMobile: 'normal.night.transit.mobile', + reducedDay: 'reduced.day', + reducedNight: 'reduced.night', + basicMap: { + options: { + type: 'basetile' + } + }, + mapLabels: { + options: { + type: 'labeltile', + format: 'png' + } + }, + trafficFlow: { + options: { + base: 'traffic', + type: 'flowtile' + } + }, + carnavDayGrey: 'carnav.day.grey', + hybridDay: { + options: { + base: 'aerial', + variant: 'hybrid.day' + } + }, + hybridDayMobile: { + options: { + base: 'aerial', + variant: 'hybrid.day.mobile' + } + }, + hybridDayTransit: { + options: { + base: 'aerial', + variant: 'hybrid.day.transit' + } + }, + hybridDayGrey: { + options: { + base: 'aerial', + variant: 'hybrid.grey.day' + } + }, + pedestrianDay: 'pedestrian.day', + pedestrianNight: 'pedestrian.night', + satelliteDay: { + options: { + base: 'aerial', + variant: 'satellite.day' + } + }, + terrainDay: { + options: { + base: 'aerial', + variant: 'terrain.day' + } + }, + terrainDayMobile: { + options: { + base: 'aerial', + variant: 'terrain.day.mobile' + } + } + } + }, + FreeMapSK: { + url: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg', + options: { + minZoom: 8, + maxZoom: 16, + subdomains: 'abcd', + bounds: [[47.204642, 15.996093], [49.830896, 22.576904]], + attribution: + '{attribution.OpenStreetMap}, visualization CC-By-SA 2.0 Freemap.sk' + } + }, + MtbMap: { + url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', + options: { + attribution: + '{attribution.OpenStreetMap} & USGS' + } + }, + CartoDB: { + url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png', + options: { + attribution: '{attribution.OpenStreetMap} © CARTO', + subdomains: 'abcd', + maxZoom: 20, + variant: 'light_all' + }, + variants: { + Positron: 'light_all', + PositronNoLabels: 'light_nolabels', + PositronOnlyLabels: 'light_only_labels', + DarkMatter: 'dark_all', + DarkMatterNoLabels: 'dark_nolabels', + DarkMatterOnlyLabels: 'dark_only_labels', + Voyager: 'rastertiles/voyager', + VoyagerNoLabels: 'rastertiles/voyager_nolabels', + VoyagerOnlyLabels: 'rastertiles/voyager_only_labels', + VoyagerLabelsUnder: 'rastertiles/voyager_labels_under' + } + }, + HikeBike: { + url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png', + options: { + maxZoom: 19, + attribution: '{attribution.OpenStreetMap}', + variant: 'hikebike' + }, + variants: { + HikeBike: {}, + HillShading: { + options: { + maxZoom: 15, + variant: 'hillshading' + } + } + } + }, + BasemapAT: { + url: 'https://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}', + options: { + maxZoom: 19, + attribution: 'Datenquelle: basemap.at', + type: 'normal', + format: 'png', + bounds: [[46.358770, 8.782379], [49.037872, 17.189532]], + variant: 'geolandbasemap' + }, + variants: { + basemap: { + options: { + maxZoom: 20, // currently only in Vienna + variant: 'geolandbasemap' + } + }, + grau: 'bmapgrau', + overlay: 'bmapoverlay', + terrain: { + options: { + variant: 'bmapgelaende', + type: 'grau', + format: 'jpeg' + } + }, + surface: { + options: { + variant: 'bmapoberflaeche', + type: 'grau', + format: 'jpeg' + } + }, + highdpi: { + options: { + variant: 'bmaphidpi', + format: 'jpeg' + } + }, + orthofoto: { + options: { + maxZoom: 20, // currently only in Vienna + variant: 'bmaporthofoto30cm', + format: 'jpeg' + } + } + } + }, + nlmaps: { + url: 'https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.png', + options: { + minZoom: 6, + maxZoom: 19, + bounds: [[50.5, 3.25], [54, 7.6]], + attribution: 'Kaartgegevens © Kadaster' + }, + variants: { + 'standaard': 'standaard', + 'pastel': 'pastel', + 'grijs': 'grijs', + 'water': 'water', + 'luchtfoto': { + 'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', + } + } + }, + NASAGIBS: { + url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}', + options: { + attribution: + 'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' + + '(ESDIS) with funding provided by NASA/HQ.', + bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]], + minZoom: 1, + maxZoom: 9, + format: 'jpg', + time: '', + tilematrixset: 'GoogleMapsCompatible_Level' + }, + variants: { + ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor', + ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367', + ViirsEarthAtNight2012: { + options: { + variant: 'VIIRS_CityLights_2012', + maxZoom: 8 + } + }, + ModisTerraLSTDay: { + options: { + variant: 'MODIS_Terra_Land_Surface_Temp_Day', + format: 'png', + maxZoom: 7, + opacity: 0.75 + } + }, + ModisTerraSnowCover: { + options: { + variant: 'MODIS_Terra_NDSI_Snow_Cover', + format: 'png', + maxZoom: 8, + opacity: 0.75 + } + }, + ModisTerraAOD: { + options: { + variant: 'MODIS_Terra_Aerosol', + format: 'png', + maxZoom: 6, + opacity: 0.75 + } + }, + ModisTerraChlorophyll: { + options: { + variant: 'MODIS_Terra_Chlorophyll_A', + format: 'png', + maxZoom: 7, + opacity: 0.75 + } + } + } + }, + NLS: { + // NLS maps are copyright National library of Scotland. + // http://maps.nls.uk/projects/api/index.html + // Please contact NLS for anything other than non-commercial low volume usage + // + // Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s + // z0-9 - 1:1m + // z10-11 - quarter inch (1:253440) + // z12-18 - one inch (1:63360) + url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg', + options: { + attribution: 'National Library of Scotland Historic Maps', + bounds: [[49.6, -12], [61.7, 3]], + minZoom: 1, + maxZoom: 18, + subdomains: '0123', + } + }, + JusticeMap: { + // Justice Map (http://www.justicemap.org/) + // Visualize race and income data for your community, county and country. + // Includes tools for data journalists, bloggers and community activists. + url: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png', + options: { + attribution: 'Justice Map', + // one of 'county', 'tract', 'block' + size: 'county', + // Bounds for USA, including Alaska and Hawaii + bounds: [[14, -180], [72, -56]] + }, + variants: { + income: 'income', + americanIndian: 'indian', + asian: 'asian', + black: 'black', + hispanic: 'hispanic', + multi: 'multi', + nonWhite: 'nonwhite', + white: 'white', + plurality: 'plural' + } + }, + GeoportailFrance: { + url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', + options: { + attribution: 'Geoportail France', + bounds: [[-75, -180], [81, 180]], + minZoom: 2, + maxZoom: 18, + // Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/ + // NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee + apikey: 'choisirgeoportail', + format: 'image/png', + style: 'normal', + variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' + }, + variants: { + plan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', + parcels: { + options: { + variant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS', + style: 'PCI vecteur', + maxZoom: 20 + } + }, + orthos: { + options: { + maxZoom: 19, + format: 'image/jpeg', + variant: 'ORTHOIMAGERY.ORTHOPHOTOS' + } + } + } + }, + OneMapSG: { + url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png', + options: { + variant: 'Default', + minZoom: 11, + maxZoom: 18, + bounds: [[1.56073, 104.11475], [1.16, 103.502]], + attribution: ' New OneMap | Map data © contributors, Singapore Land Authority' + }, + variants: { + Default: 'Default', + Night: 'Night', + Original: 'Original', + Grey: 'Grey', + LandLot: 'LandLot' + } + }, + USGS: { + url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', + options: { + maxZoom: 20, + attribution: 'Tiles courtesy of the U.S. Geological Survey' + }, + variants: { + USTopo: {}, + USImagery: { + url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}' + }, + USImageryTopo: { + url: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}' + } + } + }, + WaymarkedTrails: { + url: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png', + options: { + maxZoom: 18, + attribution: 'Map data: {attribution.OpenStreetMap} | Map style: © waymarkedtrails.org (CC-BY-SA)' + }, + variants: { + hiking: 'hiking', + cycling: 'cycling', + mtb: 'mtb', + slopes: 'slopes', + riding: 'riding', + skating: 'skating' + } + }, + OpenAIP: { + url: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}', + options: { + attribution: 'openAIP Data (CC-BY-NC-SA)', + ext: 'png', + minZoom: 4, + maxZoom: 14, + tms: true, + detectRetina: true, + subdomains: '12' + } + }, + OpenSnowMap: { + url: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png', + options: { + minZoom: 9, + maxZoom: 18, + attribution: 'Map data: {attribution.OpenStreetMap} & ODbL, © www.opensnowmap.org CC-BY-SA' + }, + variants: { + pistes: 'pistes', + } + }, + AzureMaps: { + url: + 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ + '&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+ + '&subscription-key={subscriptionKey}', + options: { + attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.', + apiVersion: '2.0', + variant: 'microsoft.imagery', + subscriptionKey: '', + language: 'en-US', + }, + variants: { + MicrosoftImagery: 'microsoft.imagery', + MicrosoftBaseDarkGrey: 'microsoft.base.darkgrey', + MicrosoftBaseRoad: 'microsoft.base.road', + MicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road', + MicrosoftTerraMain: 'microsoft.terra.main', + MicrosoftWeatherInfraredMain: { + url: + 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ + '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ + '&timeStamp={timeStamp}&language={language}' + + '&subscription-key={subscriptionKey}', + options: { + timeStamp: '2021-05-08T09:03:00Z', + attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', + variant: 'microsoft.weather.infrared.main', + }, + }, + MicrosoftWeatherRadarMain: { + url: + 'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+ + '&tilesetId={variant}&x={x}&y={y}&zoom={z}'+ + '&timeStamp={timeStamp}&language={language}' + + '&subscription-key={subscriptionKey}', + options: { + timeStamp: '2021-05-08T09:03:00Z', + attribution: 'See https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.', + variant: 'microsoft.weather.radar.main', + }, + } + }, + }, + SwissFederalGeoportal: { + url: 'https://wmts.geo.admin.ch/1.0.0/{variant}/default/current/3857/{z}/{x}/{y}.jpeg', + options: { + attribution: '© swisstopo', + minZoom: 2, + maxZoom: 18, + bounds: [[45.398181, 5.140242], [48.230651, 11.47757]] + }, + variants: { + NationalMapColor: 'ch.swisstopo.pixelkarte-farbe', + NationalMapGrey: 'ch.swisstopo.pixelkarte-grau', + SWISSIMAGE: { + options: { + variant: 'ch.swisstopo.swissimage', + maxZoom: 19 + } + } + } + } + }; + + L.tileLayer.provider = function (provider, options) { + return new L.TileLayer.Provider(provider, options); + }; + + return L; +})); diff --git a/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js b/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js new file mode 100644 index 0000000..82cd630 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leaflet-providers-plugin-2.2.1/leaflet-providers-plugin.js @@ -0,0 +1,3 @@ +LeafletWidget.methods.addProviderTiles = function(provider, layerId, group, options) { + this.layerManager.addLayer(L.tileLayer.provider(provider, options), "tile", layerId, group); +}; diff --git a/dev/articles/example_niveaux_nappes_api_files/leafletfix-1.0.0/leafletfix.css b/dev/articles/example_niveaux_nappes_api_files/leafletfix-1.0.0/leafletfix.css new file mode 100644 index 0000000..466d868 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/leafletfix-1.0.0/leafletfix.css @@ -0,0 +1,36 @@ +/* Work around CSS properties introduced on img by bootstrap */ +img.leaflet-tile { + padding: 0; + margin: 0; + border-radius: 0; + border: none; +} +.leaflet .info { + padding: 6px 8px; + font: 14px/16px Arial, Helvetica, sans-serif; + background: white; + background: rgba(255,255,255,0.8); + box-shadow: 0 0 15px rgba(0,0,0,0.2); + border-radius: 5px; +} +.leaflet .legend { + line-height: 18px; + color: #555; +} +.leaflet .legend svg text { + fill: #555; +} +.leaflet .legend svg line { + stroke: #555; +} +.leaflet .legend i { + width: 18px; + height: 18px; + margin-right: 4px; + opacity: 0.7; + display: inline-block; + vertical-align: top; + /*For IE 7*/ + zoom: 1; + *display: inline; +} diff --git a/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview-popup.css b/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview-popup.css new file mode 100644 index 0000000..ead6a8e --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview-popup.css @@ -0,0 +1,102 @@ +/* table class css */ +table.mapview-popup { + overflow: scroll; + width: auto; + height: auto; + border-collapse: collapse; +} + +/* +table.mapview-popup tr:first-child td { + background: #A8E6A8; +} +*/ + +table.mapview-popup tr:nth-child(even) { + background: #D1E0FF; +} + +table.mapview-popup tr:nth-child(odd) { + background: #ebf1ff; +} + +table.mapview-popup, th, td { + border-bottom: 1px solid #ffffff; +} + +/* +table.tab tr:hover { + background: #00ffff; +} +*/ + + +/* general leaflet popup css '*/ +.leaflet-popup-content { + margin: 1px 1px 1px 1px; + line-height: 1.5; + overflow-y: auto; + overflow-x: scoll; +} + +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: -20px; + padding: 3px 0 0 0; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + font-weight: bold; + color: #c3c3c3; + text-decoration: none; + background: transparent; +} + +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; +} + +.leaflet-popup-content-wrapper, .leaflet-popup-tip { + padding: 1px; + -webkit-border-radius: 0; + border-radius: 0; + background: #ffffff; /*#4c4c4c;*/ + box-shadow: 0 3px 14px rgba(0,0,0,0.4); +} + + +div::-webkit-scrollbar { + width: 5px; + height: 5px; +} +div::-webkit-scrollbar-button { + width: 0; + height: 0; +} +div::-webkit-scrollbar-thumb { + background: #666666; + border: 0 none #ffffff; + border-radius: 0; +} +div::-webkit-scrollbar-thumb:hover { + background: #333333; +} +div::-webkit-scrollbar-thumb:active { + background: #333333; +} +div::-webkit-scrollbar-track { + background: #e1e1e1; + border: 0 none #ffffff; + border-radius: 50px; +} +div::-webkit-scrollbar-track:hover { + background: #e1e1e1; +} +div::-webkit-scrollbar-track:active { + background: #e1e1e1; +} +div::-webkit-scrollbar-corner { + background: transparent; +} diff --git a/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview.css b/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview.css new file mode 100644 index 0000000..ac08791 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/mapviewCSS-0.0.1/mapview.css @@ -0,0 +1 @@ +.leaflet-control br {clear: both;} diff --git a/dev/articles/example_niveaux_nappes_api_files/proj4-2.6.2/proj4.min.js b/dev/articles/example_niveaux_nappes_api_files/proj4-2.6.2/proj4.min.js new file mode 100644 index 0000000..99865a5 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/proj4-2.6.2/proj4.min.js @@ -0,0 +1 @@ +!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):t.proj4=s()}(this,function(){"use strict";function k(t,s){if(t[s])return t[s];for(var i,a=Object.keys(t),h=s.toLowerCase().replace(H,""),e=-1;++eMath.PI&&(r-=2*Math.PI),h=Math.sin(o),n=Math.cos(o),e=h*h,{x:((a=i/Math.sqrt(1-s*e))+l)*n*Math.cos(r),y:(a+l)*n*Math.sin(r),z:(a*(1-s)+l)*h}}function c(t,s,i,a){var h,e,n,r,o,l,M,c,u,f,m,p,d,y=t.x,_=t.y,x=t.z?t.z:0,g=Math.sqrt(y*y+_*_),b=Math.sqrt(y*y+_*_+x*x);if(g/i<1e-12){if(p=0,b/i<1e-12)return d=-a,{x:t.x,y:t.y,z:t.z}}else p=Math.atan2(_,y);for(h=x/b,l=(e=g/b)*(1-s)*(n=1/Math.sqrt(1-s*(2-s)*e*e)),M=h*n,m=0;m++,r=s*(o=i/Math.sqrt(1-s*M*M))/(o+(d=g*l+x*M-o*(1-s*M*M))),f=(u=h*(n=1/Math.sqrt(1-r*(2-r)*e*e)))*l-(c=e*(1-r)*n)*M,l=c,M=u,1e-24=this.text.length)return;t=this.text[this.place++]}switch(this.state){case K:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},e.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if($.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},e.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=K)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=K,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},e.prototype.number=function(t){if(!tt.test(t)){if($.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},e.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},e.prototype.keyword=function(t){if(Y.test(t))this.word+=t;else{if("["===t){var s=[];return s.push(this.word),this.level++,null===this.root?this.root=s:this.currentObject.push(s),this.stack.push(this.currentObject),this.currentObject=s,void(this.state=K)}if(!$.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},e.prototype.neutral=function(t){if(Z.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(tt.test(t))return this.word=t,void(this.state=3);if(!$.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},e.prototype.output=function(){for(;this.placeD?Math.tan(i):0,c=Math.pow(M,2),u=Math.pow(c,2),f=1-this.es*Math.pow(h,2);n/=Math.sqrt(f);var m=Gt(i,h,e,this.en),p=this.a*(this.k0*n*(1+r/6*(1-c+o+r/20*(5-18*c+u+14*o-58*c*o+r/42*(61+179*u-u*c-479*c)))))+this.x0,d=this.a*(this.k0*(m-this.ml0+h*a*n/2*(1+r/12*(5-c+9*o+4*l+r/30*(61+u-58*c+270*o-330*c*o+r/56*(1385+543*u-u*c-3111*c))))))+this.y0}else{var y=e*Math.sin(a);if(Math.abs(Math.abs(y)-1)D?Math.tan(s):0,e=this.ep2*Math.pow(a,2),n=Math.pow(e,2),r=Math.pow(h,2),o=Math.pow(r,2),l=1-this.es*Math.pow(i,2),M=_*Math.sqrt(l)/this.k0,u=s-(l*=h)*(c=Math.pow(M,2))/(1-this.es)*.5*(1-c/12*(5+3*r-9*e*r+e-4*n-c/30*(61+90*r-252*e*r+45*o+46*e-c/56*(1385+3633*r+4095*o+1574*o*r)))),nt(this.long0+M*(1-c/6*(1+2*r+e-c/20*(5+28*r+24*o+8*e*r+6*e-c/42*(61+662*r+1320*o+720*o*r))))/a)):(u=z*et(x),0)):(p=.5*((m=Math.exp(_/this.k0))-1/m),d=this.lat0+x/this.k0,y=Math.cos(d),l=Math.sqrt((1-Math.pow(y,2))/(1+Math.pow(p,2))),u=Math.asin(l),x<0&&(u=-u),0==p&&0===y?0:nt(Math.atan2(p,y)+this.long0)),t.x=f,t.y=u,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]},is={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),s=t/(2-t),i=s;this.cgb[0]=s*(2+s*(-2/3+s*(s*(116/45+s*(26/45+-2854/675*s))-2))),this.cbg[0]=s*(s*(2/3+s*(4/3+s*(-82/45+s*(32/45+4642/4725*s))))-2),i*=s,this.cgb[1]=i*(7/3+s*(s*(-227/45+s*(2704/315+2323/945*s))-1.6)),this.cbg[1]=i*(5/3+s*(-16/15+s*(-13/9+s*(904/315+-1522/945*s)))),i*=s,this.cgb[2]=i*(56/15+s*(-136/35+s*(-1262/105+73814/2835*s))),this.cbg[2]=i*(-26/15+s*(34/21+s*(1.6+-12686/2835*s))),i*=s,this.cgb[3]=i*(4279/630+s*(-332/35+-399572/14175*s)),this.cbg[3]=i*(1237/630+s*(-24832/14175*s-2.4)),i*=s,this.cgb[4]=i*(4174/315+-144838/6237*s),this.cbg[4]=i*(-734/315+109598/31185*s),i*=s,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(s,2),this.Qn=this.k0/(1+s)*(1+i*(.25+i*(1/64+i/256))),this.utg[0]=s*(s*(2/3+s*(-37/96+s*(1/360+s*(81/512+-96199/604800*s))))-.5),this.gtu[0]=s*(.5+s*(-2/3+s*(5/16+s*(41/180+s*(-127/288+7891/37800*s))))),this.utg[1]=i*(-1/48+s*(-1/15+s*(437/1440+s*(-46/105+1118711/3870720*s)))),this.gtu[1]=i*(13/48+s*(s*(557/1440+s*(281/630+-1983433/1935360*s))-.6)),i*=s,this.utg[2]=i*(-17/480+s*(37/840+s*(209/4480+-5569/90720*s))),this.gtu[2]=i*(61/240+s*(-103/140+s*(15061/26880+167603/181440*s))),i*=s,this.utg[3]=i*(-4397/161280+s*(11/504+830251/7257600*s)),this.gtu[3]=i*(49561/161280+s*(-179/168+6601661/7257600*s)),i*=s,this.utg[4]=i*(-4583/161280+108847/3991680*s),this.gtu[4]=i*(34729/80640+-3418889/1995840*s),i*=s,this.utg[5]=-.03233083094085698*i,this.gtu[5]=.6650675310896665*i;var a=Tt(this.cbg,this.lat0);this.Zb=-this.Qn*(a+function(t,s){for(var i,a=2*Math.cos(s),h=t.length-1,e=t[h],n=0;0<=--h;)i=a*e-n+t[h],n=e,e=i;return Math.sin(s)*i}(this.gtu,2*a))},forward:function(t){var s=nt(t.x-this.long0),i=t.y,i=Tt(this.cbg,i),a=Math.sin(i),h=Math.cos(i),e=Math.sin(s),n=Math.cos(s);i=Math.atan2(a,n*h),s=Math.atan2(e*h,Rt(a,h*n)),s=Lt(Math.tan(s));var r,o,l=Dt(this.gtu,2*i,2*s);return i+=l[0],s+=l[1],o=Math.abs(s)<=2.623395162778?(r=this.a*(this.Qn*s)+this.x0,this.a*(this.Qn*i+this.Zb)+this.y0):r=1/0,t.x=r,t.y=o,t},inverse:function(t){var s,i,a,h,e,n,r,o=(t.x-this.x0)*(1/this.a),l=(t.y-this.y0)*(1/this.a);return l=(l-this.Zb)/this.Qn,o/=this.Qn,r=Math.abs(o)<=2.623395162778?(l+=(s=Dt(this.utg,2*l,2*o))[0],o+=s[1],o=Math.atan(zt(o)),i=Math.sin(l),a=Math.cos(l),h=Math.sin(o),e=Math.cos(o),l=Math.atan2(i*e,Rt(h,e*a)),o=Math.atan2(h,e*a),n=nt(o+this.long0),Tt(this.cgb,l)):n=1/0,t.x=n,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},as={init:function(){var t=function(t,s){if(void 0===t){if((t=Math.floor(30*(nt(s)+Math.PI)/Math.PI)+1)<0)return 0;if(60D?this.ns=Math.log(a/r)/Math.log(h/o):this.ns=s,isNaN(this.ns)&&(this.ns=s),this.f0=a/(this.ns*Math.pow(h,this.ns)),this.rh=this.a*this.f0*Math.pow(l,this.ns),this.title||(this.title="Lambert Conformal Conic"))},forward:function(t){var s=t.x,i=t.y;Math.abs(2*Math.abs(i)-Math.PI)<=D&&(i=et(i)*(z-2*D));var a,h,e=Math.abs(Math.abs(i)-z);if(DD?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var s=t.x,i=t.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var a=Vt(this.e3,this.sin_phi,this.cos_phi),h=this.a*Math.sqrt(this.c-this.ns0*a)/this.ns0,e=this.ns0*nt(s-this.long0),n=h*Math.sin(e)+this.x0,r=this.rh-h*Math.cos(e)+this.y0;return t.x=n,t.y=r,t},inverse:function(t){var s,i,a,h,e,n;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,a=0<=this.ns0?(s=Math.sqrt(t.x*t.x+t.y*t.y),1):(s=-Math.sqrt(t.x*t.x+t.y*t.y),-1),(h=0)!==s&&(h=Math.atan2(a*t.x,a*t.y)),a=s*this.ns0/this.a,n=this.sphere?Math.asin((this.c-a*a)/(2*this.ns0)):(i=(this.c-a*a)/this.ns0,this.phi1z(this.e3,i)),e=nt(h/this.ns0+this.long0),t.x=e,t.y=n,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,s){var i,a,h,e,n=Zt(.5*s);if(tMath.PI&&(a=Math.PI),i=(2*s+Math.sin(2*s))/Math.PI,12*z*this.a)return;return i=s/this.a,a=Math.sin(i),h=Math.cos(i),e=this.long0,Math.abs(s)<=D?n=this.lat0:(n=Zt(h*this.sin_p12+t.y*a*this.cos_p12/s),r=Math.abs(this.lat0)-z,e=nt(Math.abs(r)<=D?0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y):this.long0+Math.atan2(t.x*a,s*this.cos_p12*h-t.y*this.sin_p12*a))),t.x=e,t.y=n,t}return o=Ft(this.es),l=Qt(this.es),M=Wt(this.es),c=Xt(this.es),Math.abs(this.sin_p12-1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((u-s)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,-1*t.y))):Math.abs(this.sin_p12+1)<=D?(u=this.a*Ut(o,l,M,c,z),s=Math.sqrt(t.x*t.x+t.y*t.y),n=Kt((s-u)/this.a,o,l,M,c),e=nt(this.long0+Math.atan2(t.x,t.y))):(s=Math.sqrt(t.x*t.x+t.y*t.y),p=Math.atan2(t.x,t.y),f=Ht(this.a,this.e,this.sin_p12),d=Math.cos(p),_=-(y=this.e*this.cos_p12*d)*y/(1-this.es),x=3*this.es*(1-_)*this.sin_p12*this.cos_p12*d/(1-this.es),v=1-_*(b=(g=s/f)-_*(1+_)*Math.pow(g,3)/6-x*(1+3*_)*Math.pow(g,4)/24)*b/2-g*b*b*b/6,m=Math.asin(this.sin_p12*Math.cos(b)+this.cos_p12*Math.sin(b)*d),e=nt(this.long0+Math.asin(Math.sin(p)*Math.sin(b)/Math.cos(m))),w=Math.sin(m),n=Math.atan2((w-this.es*v*this.sin_p12)*Math.tan(m),w*(1-this.es))),t.x=e,t.y=n,t},names:["Azimuthal_Equidistant","aeqd"]},Ps={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var s,i,a,h=t.x,e=t.y,n=nt(h-this.long0),r=Math.sin(e),o=Math.cos(e),l=Math.cos(n);return(0<(s=this.sin_p14*r+this.cos_p14*o*l)||Math.abs(s)<=D)&&(i=this.a*o*Math.sin(n),a=this.y0+this.a*(this.cos_p14*r-this.sin_p14*o*l)),t.x=i,t.y=a,t},inverse:function(t){var s,i,a,h,e,n,r;return t.x-=this.x0,t.y-=this.y0,s=Math.sqrt(t.x*t.x+t.y*t.y),i=Zt(s/this.a),a=Math.sin(i),h=Math.cos(i),n=this.long0,Math.abs(s)<=D?r=this.lat0:(r=Zt(h*this.sin_p14+t.y*a*this.cos_p14/s),e=Math.abs(this.lat0)-z,n=Math.abs(e)<=D?nt(0<=this.lat0?this.long0+Math.atan2(t.x,-t.y):this.long0-Math.atan2(-t.x,t.y)):nt(this.long0+Math.atan2(t.x*a,s*this.cos_p14*h-t.y*this.sin_p14*a))),t.x=n,t.y=r,t},names:["ortho"]},Ss=1,Ns=2,ks=3,Es=4,qs=5,Is=6,Os=1,As=2,Gs=3,js=4,zs={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=z-U/2?this.face=qs:this.lat0<=-(z-U/2)?this.face=Is:Math.abs(this.long0)<=U?this.face=Ss:Math.abs(this.long0)<=z+U?this.face=0=Math.abs(t.y)?y.value=Os:0<=t.y&&t.y>=Math.abs(t.x)?(y.value=As,s-=z):t.x<0&&-t.x>=Math.abs(t.y)?(y.value=Gs,s=s<0?s+Q:s-Q):(y.value=js,s+=z),c=Q/12*Math.tan(s),e=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),n=Math.atan(e),(r=1-(a=Math.cos(s))*a*(h=Math.tan(i))*h*(1-Math.cos(Math.atan(1/Math.cos(n)))))<-1?r=-1:1a.y)--s;else{if(!(Ls[s+1][0]<=a.y))break;++s}var h=Ls[s],i=function(t,s,i,a){for(var h=s;a;--a){var e=t(h);if(h-=e,Math.abs(e)Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/dev/articles/example_niveaux_nappes_api_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css b/dev/articles/example_niveaux_nappes_api_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css new file mode 100644 index 0000000..c10d2f1 --- /dev/null +++ b/dev/articles/example_niveaux_nappes_api_files/rstudio_leaflet-1.3.1/rstudio_leaflet.css @@ -0,0 +1,41 @@ +.leaflet-tooltip.leaflet-tooltip-text-only, +.leaflet-tooltip.leaflet-tooltip-text-only:before, +.leaflet-tooltip.leaflet-tooltip-text-only:after { + background: none; + border: none; + box-shadow: none; +} + +.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-left { + margin-left: 5px; +} + +.leaflet-tooltip.leaflet-tooltip-text-only.leaflet-tooltip-right { + margin-left: -5px; +} + +.leaflet-tooltip:after { + border-right: 6px solid transparent; + /* right: -16px; */ +} + +.leaflet-popup-pane .leaflet-popup-tip-container { + /* when the tooltip container is clicked, it is closed */ + pointer-events: all; + /* tooltips should display the "hand" icon, just like .leaflet-interactive*/ + cursor: pointer; +} + +/* have the widget be displayed in the right 'layer' */ +.leaflet-map-pane { + z-index: auto; +} + +/* Add missing rule from leaflet for img. +This complete existing leaflet.css. +Fix for https://github.com/rstudio/rmarkdown/issues/1949 */ +.leaflet-container .leaflet-right-pane img, +.leaflet-container .leaflet-left-pane img { + max-width: none !important; + max-height: none !important; +} diff --git a/dev/articles/index.html b/dev/articles/index.html index a195bb3..b9470ce 100644 --- a/dev/articles/index.html +++ b/dev/articles/index.html @@ -32,11 +32,14 @@
  • Changelog @@ -63,10 +66,12 @@

    Articles

    All vignettes

    -
    Data extraction using the The API "qualité des cours d'eau"
    +
    Getting data from the API "qualité des cours d'eau"
    Performing queries on the 'Ecoulement' API
    +
    Performing queries on the 'niveaux_nappes' API
    +
  • diff --git a/dev/authors.html b/dev/authors.html index 7e0af6e..26b25df 100644 --- a/dev/authors.html +++ b/dev/authors.html @@ -32,11 +32,14 @@
  • Changelog diff --git a/dev/index.html b/dev/index.html index cc288a6..a34bd20 100644 --- a/dev/index.html +++ b/dev/index.html @@ -60,11 +60,14 @@
  • diff --git a/dev/news/index.html b/dev/news/index.html index bacd83e..c5d47b7 100644 --- a/dev/news/index.html +++ b/dev/news/index.html @@ -32,11 +32,14 @@
  • Changelog diff --git a/dev/pkgdown.yml b/dev/pkgdown.yml index f46865f..7fc8b84 100644 --- a/dev/pkgdown.yml +++ b/dev/pkgdown.yml @@ -4,7 +4,8 @@ pkgdown_sha: ~ articles: data_extraction_naiades: data_extraction_naiades.html example_ecoulement_api: example_ecoulement_api.html -last_built: 2024-02-21T16:07Z + example_niveaux_nappes_api: example_niveaux_nappes_api.html +last_built: 2024-02-22T10:25Z urls: reference: https://inrae.github.io/hubeau/reference article: https://inrae.github.io/hubeau/articles diff --git a/dev/reference/Rplot002.png b/dev/reference/Rplot002.png index f84bdb002cb51f8a5f7c824045320ef8d776496c..9423852871e54590f754696715153665b5a31e84 100644 GIT binary patch literal 12648 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 d<%UR9S^Jq>-+xtp`TJV|#3L
  • Changelog diff --git a/dev/reference/doApiQuery.html b/dev/reference/doApiQuery.html index 1c6c0df..05d2e37 100644 --- a/dev/reference/doApiQuery.html +++ b/dev/reference/doApiQuery.html @@ -33,11 +33,14 @@
  • Changelog diff --git a/dev/reference/get_ecoulement.html b/dev/reference/get_ecoulement.html index ae170d1..398983b 100644 --- a/dev/reference/get_ecoulement.html +++ b/dev/reference/get_ecoulement.html @@ -39,11 +39,14 @@
  • Changelog @@ -171,16 +174,16 @@

    Examples

    #> # A tibble: 336 × 4 #> code_station libelle_station date_observation libelle_ecoulement #> <chr> <chr> <chr> <chr> -#> 1 U2640003 Pont D7 à GERMIGNEY 2022-10-24 Ecoulement non vi… -#> 2 U2655034 ruisseau de la verine à Vau… 2022-10-24 Ecoulement visibl… -#> 3 U2640002 ruisseau de clairvent à Cha… 2022-10-24 Ecoulement visibl… -#> 4 U1084012 Ruisseau de la Serre à Sali… 2022-10-24 Ecoulement visibl… -#> 5 U1120011 ruisseau de la foret à Meno… 2022-10-24 Ecoulement visibl… -#> 6 U2722011 Rivière la Sablonne à Bouss… 2022-10-24 Ecoulement visibl… -#> 7 U2530001 La grabusse à Dampierre 2022-10-24 Ecoulement visibl… -#> 8 U2542013 Ruisseau l'Arne à Louvatange 2022-10-24 Ecoulement visibl… -#> 9 U2542012 Ruisseau des Vaux à Chateno… 2022-10-24 Ecoulement visibl… -#> 10 U2542011 Ruisseau Du Moulinot à Aman… 2022-10-24 Ecoulement visibl… +#> 1 U2655034 ruisseau de la verine à Vau… 2022-10-24 Ecoulement visibl… +#> 2 U2722011 Rivière la Sablonne à Bouss… 2022-10-24 Ecoulement visibl… +#> 3 U2530001 La grabusse à Dampierre 2022-10-24 Ecoulement visibl… +#> 4 U1084011 Ruisseau de la Vèze à Offla… 2022-10-24 Ecoulement visibl… +#> 5 U2722012 Rivière la Sablonne à Saint… 2022-10-24 Assec +#> 6 U2640004 Ruisseau le Froideau à Les … 2022-10-24 Ecoulement visibl… +#> 7 U3404032 Rivière la Seille à Domblans 2022-10-24 Ecoulement visibl… +#> 8 U3415031 La Brenne à Miery 2022-10-24 Ecoulement visibl… +#> 9 U3404031 Ruisseau le Dard à Baume-Le… 2022-10-24 Ecoulement visibl… +#> 10 V2430002 Rivière le Lison à Ravillol… 2022-10-24 Ecoulement visibl… #> # ℹ 326 more rows # }
  • diff --git a/dev/reference/get_hydrobio.html b/dev/reference/get_hydrobio.html index baf5276..f15b8ae 100644 --- a/dev/reference/get_hydrobio.html +++ b/dev/reference/get_hydrobio.html @@ -39,11 +39,14 @@
  • Changelog diff --git a/dev/reference/get_hydrometrie.html b/dev/reference/get_hydrometrie.html index 979b1f0..59bdc05 100644 --- a/dev/reference/get_hydrometrie.html +++ b/dev/reference/get_hydrometrie.html @@ -40,11 +40,14 @@
  • Changelog @@ -227,16 +230,16 @@

    Examples

    #> # A tibble: 30 × 14 #> code_site code_station date_obs_elab resultat_obs_elab date_prod code_statut #> <chr> <chr> <chr> <dbl> <chr> <int> -#> 1 H0203020 H020302002 2024-01-22 5172 2024-01-2… 4 -#> 2 H0203020 H020302002 2024-01-23 5196 2024-01-2… 4 -#> 3 H0203020 H020302002 2024-01-24 5034 2024-01-2… 4 -#> 4 H0203020 H020302002 2024-01-25 5313 2024-01-2… 4 -#> 5 H0203020 H020302002 2024-01-26 5489 2024-01-2… 4 -#> 6 H0203020 H020302002 2024-01-27 5622 2024-01-2… 4 -#> 7 H0203020 H020302002 2024-01-28 5736 2024-01-2… 4 -#> 8 H0203020 H020302002 2024-01-29 5732 2024-01-3… 4 -#> 9 H0203020 H020302002 2024-01-30 5604 2024-01-3… 4 -#> 10 H0203020 H020302002 2024-01-31 5388 2024-02-0… 4 +#> 1 H0203020 H020302002 2024-01-23 5196 2024-01-2… 4 +#> 2 H0203020 H020302002 2024-01-24 5034 2024-01-2… 4 +#> 3 H0203020 H020302002 2024-01-25 5313 2024-01-2… 4 +#> 4 H0203020 H020302002 2024-01-26 5489 2024-01-2… 4 +#> 5 H0203020 H020302002 2024-01-27 5622 2024-01-2… 4 +#> 6 H0203020 H020302002 2024-01-28 5736 2024-01-2… 4 +#> 7 H0203020 H020302002 2024-01-29 5732 2024-01-3… 4 +#> 8 H0203020 H020302002 2024-01-30 5604 2024-01-3… 4 +#> 9 H0203020 H020302002 2024-01-31 5388 2024-02-0… 4 +#> 10 H0203020 H020302002 2024-02-01 5153 2024-02-0… 4 #> # ℹ 20 more rows #> # ℹ 8 more variables: libelle_statut <chr>, code_methode <int>, #> # libelle_methode <chr>, code_qualification <int>, diff --git a/dev/reference/get_indicateurs_services.html b/dev/reference/get_indicateurs_services.html index 7753d4a..befe178 100644 --- a/dev/reference/get_indicateurs_services.html +++ b/dev/reference/get_indicateurs_services.html @@ -33,11 +33,14 @@
  • Changelog @@ -122,8 +125,8 @@

    Examples

    #> <chr> <chr> <int> <chr> <int> <dbl> <dbl> #> 1 10323 Romilly-su… 148782 eau potable 2018 1.91 1 #> 2 10323 Romilly-su… 148782 eau potable 2017 2.07 1 -#> 3 10323 Romilly-su… 148783 assainissem… 2017 NA NA -#> 4 10323 NA 148783 assainissem… 2017 NA NA +#> 3 10323 NA 148783 assainissem… 2017 NA NA +#> 4 10323 Romilly-su… 148783 assainissem… 2017 NA NA #> 5 10323 Romilly-su… 148782 eau potable 2016 2.18 1 #> 6 10323 Romilly-su… 148783 assainissem… 2016 NA NA #> 7 10323 NA 148783 assainissem… 2016 NA NA diff --git a/dev/reference/get_niveaux_nappes-2.png b/dev/reference/get_niveaux_nappes-2.png index ff55d6ba2cd9c02273458c2e0cc52545e59f147b..7a45222171622842d1401ff7bc1db1c29e5ad0f3 100644 GIT binary patch literal 34868 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�&#J!!GT=_W zadtD5(t$cm)VhGV_rl25l( z0QwO`MuT6!>Mqv!E%A4VL7JHKLb>tES7@^bOz;-V9I0Xy;Mx_^^7nsFcA#aovKjR% zr?{dIZG5gd<>2CLZq+P95kfXuSVaBIP3*LLu0e@;$7YVfKR2tbum~xVuIs1@ zg^o^vlCHYeB^Jm!*^!~3?sFqjS`3RnMWEID6@br<9eNyaVtvx$m^fnS?Gx zDuw<#08+1Sp_W)SlytM_XQNt|v`ONaI)dV!<1Po0vB;1lg<)|ftQOW*jv+6^VRXcy zjmZ)a+gM#^1fJT2!e`1FZ3fg@ceT!=M=k>mpo^!i(Y) z?|WPAPrHQUhG6lIg7(P@R|WO^Y^K)vaNlHC^Y7GM18lO#$qTbmA(2=OoOkAmns>Uw zcTPTWK}2fw0>zO4pXqeQHFz+D4nU@ILx%=gs2ZVN*!1L&o5-eT3?#C~YWoYs;r_;g zjiyiU>mU9>*geD1xTu?0y5#1q&Pa0g{ggzez*o4@y?~n|wyi==p%0Ah@vbu@x+Rg8QsE zQuEDi_?^BdHK)G&mjlDBf`N9klGj%SN6gpPx;5MrxFIRU(pb?`|Jp)c*SDV6qMLTg z>lqspiyTHhw6>h(pbe_dtgX&1wIkleTcNh(mYRL;W`F%)LKXRnw<;gP7uyDEAnjePXC05rDGHlL)Gj1J@Gu7d}t)BWkL4 zzd{#!s)<2}B-XGjcgocoID9yH(3yN^pmF3Y7rnQewPJ+}`e@XSXI`TC(m^o54W$CGE*d zd4G{FQ)ZAg`mpbsvXn9nA59s`V2+U}Xb5t~?{LG@sWvFTp^*7YME@9IQVmrQGk~Qt z>R!6;^XDrXGKr|vLg%M}#!iwQajD$XaO+rQ{ zGiH%ZRFe0-(+43VG8APWDXvrVU=5=$eoId7x^S=C`B?Gc7;iPztZWkIfqWfN<<=o`K}g%$wo9 zDc3%<^;>HxHp}m(tsJN|!)8c@{E2<4#@2vQ3cdw#K_ux26ZC7$J`FmW=S=(YV{8M$ zgI!JJF5YDi$~yBW`Pq$g{#VuI2TtYKK2zXhsiL0L&t8P9Q4*0&pC7|7<*AkrAB3cp zuTzcAQkv1S_G6v`6?MKeG&kfZZJtLReG}_01;0w!0NEmih|Tc8L{KuiOtYq9**D0SU zy^uQmDC#cu7|O^i9HsZ1ZU5@y{?b>Bq@!KJZ+C9%Wk5GWIteuQV+h!5h2L7f(?;YY zFS~}PWLd&{HNdlfas|7HQ*aK&kbH`TxMXab z?;~QwRrMQRs^J*_+?9O)dH79Bn0Nk>hHT`@6KJZWRl&(>zjS{6PeJqQ5~{sM$dyOE zTZw>zXNYZ<47r14<$0eGzxt&cz`tXdRsK^F;%(*;`K&dDL_&G)7sEucXs*Ns6>nX8`<43?6!J zZ(`LfN%4SjAp7N}U97@ghsy~q7;8|Js6Nvsn4=4iC6zEJ*Go+G`#Lmb8;ksG(+CP&h; z=Xd*7?{#rUt1zD_B%x9jl`WN4Vat-!m)49GXoz(kj7eQtEVeSQy}sJ1_yZ{Pg||}^t)~$n=%9P zIaXI@-zzB7#Ty!Z1*aYYMS@g>m+aHG*|%3XP<{h~!6|{kio*>?vj@OE2a+Yh#SqJz zceHS`1v*Y+5 zsyzD&*hEs4dL7S&H7H9z!1Qz&7ewHj4zcS9cKaHoFnN0M(iS&F=|>%uwOFF1Oqspc z&9h6t#@GK>9F%1g;GtIz&XLT_;-RU~QAxnSw##HFA|r7DGk9@u0AoEuY5M3!t761i zv3sf|;tjlc4ewab8T8Aw*=Y=EWF(!`k-i@#5Ey>A@q$23D6wNgi&7hh zmx8ne1kj-tQll^m@p2c@^`yUh@w>;4do}~_?M1<1oQW7cqF% z(4gWVME+hBIB(=&WT^HToE-WH)RkUb!lF<5vr9^{zXZ|&ZU+j_9DrO`1jqy&{J||x zU>=eCi}1iT!f-yJtHvLjWL6ecG`o96dZD0O4y02Df7$|@d22HcR!^yF@X;7iSoD2> zVhNx>;{X+!u0WB)iKY>BR3DV$7`w1jB|gI><_c7o-NrPr+M9W{0w$GqL-j2Y0!b)Q zz4qI~9D6RbW|=++$O;Nh|5b|wha5l!I}&T3C+aw&Oo=3>6>*@X{MnkQk`f86T=o5^ z*5Qi^$i7pOfXH!-ZfLFk%3Emd+<1*q=QT1rbNZ^gRLFfjzX?0zC6ML~E`J7nLZY9K zRWN_E)C6{>GwcU~K;GQ=!Z7FTG!SRv7}_w6P|hD19O?^mKOBb0!^*sV^#IC~>3RWw zx`%{g6R_S`mz!8=tc}otKlkmv;(_fK5M4{;Tv|2<8~hK-MSraBzYLK!Ce&k=?0tUW;^u;j*kmjnv<8it;KJYy_d*Lf3|Ch`&F55A~8scN7S=Ph)&MSHlb1JQSG;Fp2JsIN?yT(*R~?It&Ec z)d7~ewx|2s5)aZYgQ1HoyRD#{I}65hMwfSA@Llh>K%V_m$UKHkNM4tKl8mtnabHyS zhxttOnaj-w`MFNh&&J>tRlAH!OZ$h$S}v*AGk-fH*Lrz*$<%5O+}sx_#4Xgi^Ph-k zF2Ot#tCts4`3eoejPpFFK<<{7_Rk6_lIa8X03om3s)qqz7WxNNn z7H=~6rW`CqPHX8^9uV+UaLT=IvN zm0lnS$@XbtS5n@Cng(O+@Wqf@UPAr#KyM`oE;P+rx(p>oClu%b8236-6Oa0`Gm9s# z>R`cn7%EC~gDV;ua<`M!%0UblV7K+L16Ys;#NoCph+pn!Xzzd}9b28nzh4qVJ@g!b z<}GucLgQ-E1R+z?AMuX|ckhvy?#KzOLjPD8f?a*|7}&Q)Vh43B!FW@06mjY@6fRg} zCE8%6-&~Q~;bem(MFKkx&y$kt`UF&H_?QRiz_Qoq_9!yS39Du9+gzFK?XUt)r-*~> z=)wb6?CgUf`)n7gK;X-Zt-`Swyf3hEGcPO9zD!~UHXKTESI}^L%Xd}2Hsc~7+^1RF z))cqdQ2(^6I0K3fUPy63TSR7k@>P?mL0($kt*UBz^;QPFEiepHn^K=o==1Uq>s!@# zZLzCZZ!P`tL72{qOajC9=`+DMj+ZIbsCI^ik}G%Lp0Dx+fkEhhHK?K`3oE+jw8KXN zjHhgAx(~YzHWt-of|`*+uf76jgL7d)Ro|qaczO%C;%MZ`GpIe1@M!*@lt8W*8iS9= z{D_RqON{r=VH&|0;{Z!=AWG&yYr4xZFs#;8L~6F5@)1Zo#V@Ds2vW#>i$Gkzpb&V} zGev&iY9)~vqlbfmAYYO(rr%zv#Q&hy`oaYT9{+bdQ%20#pvoDm2!fCQ0S5h!1mx}r z`lO8b{`=`$-uod5f`v4d7z(= z=*>Hzg6g0Gs(BXfJ65aS&L5ryfQ8@M|N2F?88XqR${*{D4R^_6s{30W0=K+Oe%)#{ zk+eg|Q3h}ZZ!`F0gi`mhrQ%HqsI&;90eV8BU1!RWiQh}Ku2OE6x^nCHnIXlo3~bG* zm_xN75`)A)-CuNoTRr-FOz2SniY&Tw{_+Yn{DEe-XNz89~z?8dPfv=Q+T48=?rnw41UWj4#YkUQgBu$DI zlvFbqFEETmE{%dn0P^Vz^k_eTweQSy#$@l-SEP~O)l`*CP#^)QDgjVVJl(}Lp>7c5 zjtm%5Wo~?<9jYac5(l01#SptrVH+BIZa`i<9KbHp&?omgCWyMD0YmG%QQ1%_=((dO zj&dt>oj$?!hxTvp&vHNcJNm+9zSkC+cSWQ4EbhLOmYIC=>Ra^pKkmxDzu6+fbwc~b zDT0!Lf{y(4v*(~LYRy`n*j3da#=B1ql z**m9OjO5K)IOB#JQQ@syzFK!8bl2O|i9!$uUqREPva)niBJEq;ra`Xj>w|Oy%i+^YaL_Kqz-uWQv-dipXS4{oNJY&W%C20IxJg9s zNl!v2PtHbHagv3*MYEYkQN3B5IC{NQ_smp5k-fL&(zlFaL7ALSS5{hNA8U#Tgi>}R9JGxyv&K$PsUP1kvtmK&8f&B%8|M#V)Yc9`~AxxEA`s4}P{ z&{VD#d0=Nlx%+3GaqF>F?NqbA%+~@Ch{{rjAhjyIWUKK5x@TUxsN5%QFs%3?p&Zfw zVUR9YBfRA7XGLptyv5R{k5ew!drAjm&fm8_gkZ!bg z6ib<@zP8hF76U-v_k3ufvFfY%@(-$Im%^f#W&2lHpy2zmT0&42SG0ypkx+yCn;&s5 zHbcw!Z%@_U3<-g5pZw5RlrwAAv^ckTDAiP|&-OP+MWEpy%T3O&{K3K&AjqMgUhU`y z3IrVO%^(9n%vYX02@trXEFm&%Av@*X2X#$l&+;+V&$|)(5lY&SsUq0x7_pXp-RqIo z6Z%(}b?aFDm9g5wNavJ!&|=bYu)p$`OqmIhG{U!Ky8iHC1^dYdcZ>GQYcF-0bs&&y z=eYpnW~{dkt`?EwYY-Ny#Y;^ieD$8xVr$zeUXR97$Bk79^VD7w;I4}uthiXnW2#%V z#lClmRqv+6YjZ>QM-f*fC|46(Hhg?d{AdK*qI`U#lMn9S9w_m2CuieIk-KU09gVy# z=KOp36K;rudxqL%BYORxdEUey!Jzw=`K|jwLr&B~zQBmAmp{(C3v;j9mjivw9yBRl zbuT#ri58owJJeC{xW1IAF%Dqcj~u?ljegc#()2piVV!-gAyhFp+VI7)LYp*Hm$>(WvX|t?CXKMoL$skLzmH62L`)@ z#a%E-^Lt7q1Dx1F#H=*v_E$rI-zvz&D0iy_o3##iwDS*LYyKK@qS=xb^kcN#6jQ9J z@?TrVa(4VOKScS<%PQM`q%xHUb%d8ldnLv64!KqKK}ZXqDnP8)cR9R>2e_uJVby=g zW^$cJ!N#H44+`nXwS!SsL<^1TdiMcYvl`-rX@q`IM!$P%uPKP65iNMdVE(O+pe?5L z>Mr|MkUGE@bd|kzgJu}b4l&SdHeA|N@HN8?9JTQNiwe~FZ;a#!aAb4b6V~x#f@Pzs zyPYFr(d+{`8?ll_Jdo(=pM-}TlJtx$+ku;gPh_FRrNQE!&LDEF@BnY@sd#4ByV0d@ zG3D&4S?HV%5`d?T`rJ_8^})f%$MmlOpVgUmc~VTvk~!nG(HQ(?w}-Fi3(a1`=MC%T zsX<@~9p8#bU|i8X_inX>Wh-+g?lijgH{EPaZ;&h0v?0Rh+3}A(0g^%>Bd3PSQo~9n zY#P1$n+DS(c#C+={ff${^0Dj~udQ&u^``&(VE*A?IhLXhwUVtWLtCyM#8?z4hx07? z6=xUr5?%v?03B*L7e!+(Xx`O`tYns#-A|+a%6nR_j`T)j7FP(pzy7T7GFX46y#G9; zX0*y}IqR-QRXt{%XOQx=&sc1oWEJ%7)lQE|YkDYDH*DJw zWfhb&|0Z$!`djHDd%HJ&=Cq(!z?V4;j=v0D8ovpaAQa4#HS{uiBXhpEh~H)Z)N0+Ie}At)A>N^=U3zESBDAatP%2|<*I2#69w9}ol$gwTaZVv=tK>)d>x`J3h(IoNpADRgTl%BHV0OvQlTg$J_l%a6ZlYEco((* zfZ==bDQ&cZ4C^4!$h9tV?!22U9f{skv6onzN=57Az(C^WKpd@E42ZUF)JWQbVHz;w z3eT8(DSEnRu6=x}fKlHjpM7t#G#0=04BuQqY@HeXNwR9Hac*7C0m*&NBU_k&V^8oe z_fkyl#V(IOpthT0W_AS54!8|!7T+bzEG44Y(r=-AAhljeObNX)cKt*0WKz-S%N9vF z7NNv2qJUV0e;DSH1b=F{rOEAgT|$Ih7(s+iaDzhwBU7w&zKsXXc}5FbKO=fe?RSzR zCkr{w;zpEC!Bog;_%Es-4J10SW_{4t|H$*-9U{@m$f0~ND=HwC4e;7xvbjl#<-6St zJc0eJwTb;w!CRp}8NV}Srr{=N!D!_8{Jsl9QrGq-xxk`X7bH-p_>@G}t6`4qg<1rc zUia7waIIe3a0O3q{7%0O#!PK2Aj`L9L6-v5gRX(6`79B`8GRLL-PP7k)~RX;s0RAQ zvG9QdHPF$7As4V|Y1}E?m6NK|a`;BWko{y@%#hn=dLm$JigC;;$4q-zIMQfJJRCEn z>(9)qe#B_Na@rG>)UIPp+zQ5j2zJNy14F%Zrl_HB0e`70;*@%2VRPTYZXg(#A6Ax? zBx~ZD+g3d{ktLpeA3H{d9|3*y2p_nHZ+(VB;tAKl>#D~%?5B-js9UE2k-G69~^DVx=2f#Y##rJp%d zyqW4yWOBYk6-`c_G7a?m39Q_oSYwEbv1B#n1b7bhDI*& zMlpo`S49jGU#uUoEHd08_{d6~R}&d&DAWg2L`?3Dkgg?9)D7g9a)~#&V-)hR zLEN{w3Am*ln2jn^ltSx+?yOZdF5{%r73S4klb!POf2|>Nv#(|7B_XIfK|uBC(G8qt?CwtJ*CG{ zexd}Sn{~c*(5?EN50d14b~D$IC|Sw(8isH9Vku)-lcsR6%YXD2;2|DX(a{ewfB05N ze?l3sAE=%(w6TOBGUMS}ai|w{{8CQMC9a%Q%6_5Wl@92z+1P>QKjrk(b0|o(XoLOE zT5{ES@Y;3j{*iNh|FU(HD$Zb;)B9Q7$JBJ?Bfu%*bP0R47gfkxPvSW#i6rUxp!$6~ zu-Lpl<}-@1vi!QCRH_)HRtk!fScszO=8Jk5D`4VEI3MUJ5FBu@PO2g!7wmtT_Kr)f zj4L;cyH{68(R|Eq-`gz$8TrDmX`=wU6qo=Q4#A42t5BNXx*Q-)ow6e#7W`>DXY-9a zk6dHc({WPCu+@vRz|h?5T~LR3@jXd11@y5RcHxMQlb8p`M+QCE2 zNciGArXTtpzzZCaHfOX&n?9Oi+^Y&5d6BROPM94d$0s0Fg${ODr$Ass?aJ-+g0gk^ zGk{M+5La2<^uv?^2UNq?Z?78ccGmV<>LjpT#vL7Ft-;wCcyz!?6K*m+{~;Z89eKPw zzGB%yz2$Uz9v0md;R-C>D*e*q0fBeZBS>T`(C`bv^@3T9vV$;i?V{?L7;gJWkKVT3 zQeEzd;&n9G??^z^@O@bclncH!yF93Q0S^;to2s{&{gbN!wJ+l#S@~Cw~N&g(vX0O z=WTYZRk}ME{6Jgnj0;|XSUwMl#JBqPrG%s?j4q2u(QFt+cn~2QfA*$0^h0+BCM5J~ zx3{;2_n-GjmR4(epu3X@QR|#&I7fEBfEOGDSs2p1Tx{)twolaz+~*8?CN^eS#PJd6 zm9G=;9tmevweH_BQaxYTX;e5G0|MF+lLdQ+ps*zEvfqFXdR6^KuVl(~vWheP z7M4%ZeD+aCo7%aNf?aOD?SjfG`274n9%7*bCn1_|a`Q*gjx`Y&4aY{NHMIWKs(Jv7 z|6n&HK8Be_Hm$vD;vTl4UR7aaS7b-P$1Jp$LLd>@5f2md98jlX1mAM#j!h0JV|qE5 zJwTsCuv_;#&faU??_odtNk;e3rYHpe7DQJa*cr?@vj*%8wwGPme+(Jt#CrSCf7H*- zfj9je$)yKr4~sxZ!;`+tA|7+o4cF8LAP~e5@M1m~ZhDK>1UhQdy`(7hAKLwf_#f%m zg?|9pXTTW4+0y5YqBSCs^L6Bn6NqS-J@vIq-zxpbeL>&=^=b{e2`m4GtmQeA~Jk zM1&CXJn=ErLGOM$gd`836X01#_f70N`ykV|mah(33hQ-#K2t(hr!deiw&j5Y2coc0<7b?^UT55d`G8uYi-TUJi8aA<-dX4#$*fG(##q3{ z?t1|bJ`^VA%j830l>9${mdx{)n3_drMgBGc!XRd%GTzOA4*!n;4n}wd>SIV8AS%WI z!~X!`p(l{^?{S))yDb52*ntsT+WJNhqG;H|p|P8)lu2~zcH}||hMkAeE{${W5Ynw3 z%;L)og(?%mT`xD<56kw1--O|`qXY_=r6oW2_bW^3%?`|**254FvFz~O%yWX4>mA5| zDZx}liWz`zjA$V6@@qqUscr-D=!m_L>@_~5$i z8#|K6%7sB-@0v7r6pp{iodA2RpWoYXMidfy1n|PF7-llIk0_lw)-n1lr;Up#Pu?Wl z7Dft?$ULjL9RU!Mr`qvp!ay!Eq++W6Hto5m&+neEcf zN5V#h+i%nhru<3b8AB99miG~GWix}nCe!Z$;KEL$dfA${d=Un?37&65XycU8U*-hd z^=<%M8R`h0C%gKPzDn`cnTRjCVO%lOeGFhni!bQ%lp>v2*`+MZKmqPo$3m{U8{mHu zCD4~-6dB$19)K*NRl%-EcUBpFgT8=^2wux-8+x@|)+7NqTKyL@6Vtzkh4-brq zlW_y*1>KDjA$#IrEEHzXdbxEqp;TX0${P}|vlGZwRhuZq)RyKr*~s~Wo**H~u5SCi ztj)vUw@(=JuB)j|8yC-Xb3ReFBpOsrTFVCd&@LLf?nR;yk9|PLBf3Q66r4bWP$jc? zS7k4#Y%aySvFa0@etai7_!^LrQz>^kS}4R?*;w>U2Rwi& zQk9s%R?*AF|MRES{6reHcwYV16H9{x_6A*!B6_(98C$?d-9+9QjEnJE1;Tgi;V6&? zPY|#yW87?^@KwII1gcWMy6xK@vg=LW+H+(By=FVysU81D6GqyR!r%@M`|YW5IR~A{ z8c3N}D&Fk+&VSAN9c{H7;6MO2Et5KNbYUDwSw+pnbQn_>*Ae@jsU9O7lg! ziXKX3G21M+6LFb!yx2qpWE4PvZwY`0XT*6{GDX&`i023!+@2Jfzl#1yr-<;p&p11o5(&15`}Y=gvlDGLcR@yi#h5n1|D9lozJu~a z3Iq$FfmO+@*hAfTH( z93c((0^27(UU1+ z7_yyS?pGjnOVqzWOEFDEEgwhIno2O0{XNUyFW@y(_N zS$dmAF?}zEe3?s|q%cnbM#=>Yed0{;+lZra?y0%>9}bKQL{ZW#JH8EGfhI{x*tptPkPs9e>3G@Q%5&anjhY3OV%P>qUJ(H)J zZJ7a%ctF+z3uyW!5QPoc0q0>!u~!^W7|m~Qv*>cyjH}|jyDdnT%>+scG>?QP5OH#E zurd;Fu<<_nroxM)8cj12!k;BUS;YAEg~kc5#Y1QA2N@3Vfv%FYcZX;5vg|u>mO{-6 z961Zx&Q)R4^{PTsCi^BfPqZk*Y+=ucvG~|G%TNBs5#gQ zycImLiL*$b*=7i%POZ$_Ul-|>6bz;}OVb26JJkKMg)A_|(@+vO5qRs5(T`6Y1sOK5 zAQ+IvxE`U44qELwvQYa88~O70@_^dsLS+e>s((Yk3Nfzl6x`&+0-4@#2I4-@&IXxe z@Lu=}PMB=Vyob4(kZ-|I&vlIw*e@;PwlO$TT6X6)5&m3{~ZSBOx(#$OQK9Hx#9ev2$-<+n(C6 zP!DQQ6i$wHfa?FjmhFqj0CXDy@X7(KNx31Ob8jyh_)B1~lZD#2^>JNIYZPi6Nb4?& zse^P#X#N8$TS?&!q#7YcUF$FKG%>B_ym{EaJt@-b42#pkpCPr$Wk5YvKkVMV?vWs5 z8RJ2K&w>{CPo<;V|FO@A|E_p00m~)4Vn1XXuoArC%C1~?D{v*W#`v)YgQ~s{K^^fY zAsSvS-lY>3H@FjY++!*(t|eyd@Z$DZBN0vY7rPd0nQnnrPUSQmbc7**N?1d5qo#k^ zfyO8C?84$r_nHsPItojgAq~*N;3I3go8YtYG3fZ;HN% z2A-XtW9|%AntL5odHo^ubU=zPzj|joToz{Bn}d)=k6$QIh_BfzGPxi|d#EzRH- z*nN}PAHFI*7)AA0Am?Rf>h8#ny% zWnp+Wk88$71&PkOo`Kz6y5g(%4bkBN0yof3L~8EG4^I41_2q<6>tNi=K;zO8lvA`WJ(o- z_21)@8n7p(sI6>(i&3u9?gm7l20sH3h|mQ1s#=`3CDgUSSOX76+282v7>i*8{x9`?`)|c2QIOR|Cc(YAs$Vh%)O(*xo0b^H2G=KyYuqg_xtu*=@ zud0P5uQS^!DZcpYQsT-cDNQ%B1DLjIcTJ(RgJY?Uvco2CFQ2!6`L`MSr(M&i($Rh_ zv8v5u?{{+7?#+Wfe@2H%Xh$<|Otu-e#%$ge6k{+=t{~(GZP73@zB$qR=v3_py3mf{ z-YAH|Twyj@FpQs&uP$k!cM+;m7 zW6O{f1$&Ju6ZRe?uz3NiG5UG{HsM8o;NiDrTJ_qE7UMYF%uIwBNNCl}oP(9?elv2# zw{?DGwY*v=a_3!PJsYfZcju*+I*1GBxfGQLO<)I~gg=a@s)sGLPPA|;2f6N5aiue! z{$}A%+gfa(5vu>H1>mq>ZEnz&W$%4ND^wRc6MR293!fVgU8+wB;*BH+;|B-epBE6_ zhsiN(x2xPoKRQO#Z3nfrE`X6EsydB!Se#a)C73a)6YD!7?}u%7H@@9qar#U>E9-U( zg7tNfi>h$5B{ct%+~IdYGrH(zk+KGdVGjoYA7cw+MwoLU=vy{!>+@s z>6Q}OcT8)q3ncB_Z}I|QS6Lwx9c8q4c{E5!Y`Gj;+$`PgE8Y!j|-^~DdX_s8?y|`rHBER_DlBM>nreL~+ zo_2tjzhK)uK6j+K(#`bfY<*(R0OqwY&kP|2dp}IQJ6y){_ zyVRy_+WG2MVG)-e6v{`1;-AL^!vwLGD2~X!c z{Wm@p+~}s~Pm2>)*9ZmPjD(L3Ig0Cu`u7X}0iS_sEzkZE&Lk?FV+7qpXI+eG5`OCZA$%zQ}@41k1`kofSF8TeGAy< z#_J&Qv3cNM%=llp^S^t6)Tj;+hkp%pZBZ&hnl$yxwtj**-uxR8_(>RMg7!aoA$!zMy`eaN&C_^PwfQuCwX85dre{-(3;pKSlI^qKly?z&RU0 zX-;A5<9NA`U+I~YyL2=FBu6YabzHr$fi2x4n#l=ND%+tbxAm|GZZZlK>WJ>p7-yIs z#ugDqK-QwKc^Hy8TL!WaOZyz`Lh|r`+BJoMVbg={3$)+|YZE4LoML((#j4L`AE{=I zLSfr!)WjhGW*nJL1{R2q02vLcNEI>FPN5KV_Svlw5j8Nei*z6&0XVm^=l4L$!q#6c zBEpfovfn#sxD716Yd*ar`ym#yt#JNlDf0h}s&AR!bg+94&OAFxCkxqWy1-;^c z=KUB!m7Ak+B`1-dxSp}MHXsR$FVc%R3Bd#sxFg4dXvCK>n;K10nNbJgjeB4HH2wPe z?UsYa`8)~^!JW%PobgBs2-e$qE~a#9c2Bh_GGXM;GIKfsGfJ}V;E7P~1$ zb|FD~P{Mu81Rz4~spf!e%g9ip8c+L|EDYY()B$;GNRUZsee3|T5xrx=hodw>9bjN` zytIc`jq^JHY}X-ih3fvw!gsa1nJ8J7L0t^x<4>S^xOUS7EDVgQS)huhRW6%ymbxik zx}i%fG}#^nMYgn+c3v%&-$^;iijZ-@?)4h60Hd}9gfN(9=y z;(AfZ?+{3Z8&%VWeHON8DbK|hdznuBrEvJpdDi1%qS+X~w5@Y@KjM5>^6Fr>(G4Cb z&^i(CJ^mWT{v&AVD7%|}+020Uu$ZqAxaYS*SVkC%lO3lO&%iz5j?}3v+fm&D*bW-T zZ=z^zf8_3fObbTeB(GYwaV+UG!yk>Gd0u8*zV}E}LVL&rQ4mq+Nbr%G-5Yhcz~@ao zn9n&_0jyu|fLuSi5Z@Wr@$m@CB%YyliDX0}(7!r!*HYw{t@Qx z37&Q>3Hk>4`;TVYe$7wJ`+@|DZ4ymQ^+K&Q182OdHn1VQ*LGPyw*wT>V zrcxxWpt&~g5IszSTL0mw&po;JZfJ8%D64-^zk|@f)%~oilhFlA>}s;OM{9bT7wM?8 z2zDJW3Nr5VC?1YRP`aQ28kNM>3)C?w*_uT`V;Su-u@g8lW{nitSyLIgj>x8^zRTRH z(a;ElBH2zup4HLi$(bm_(8NvWj?i~ykK4MdnAF8|-LA43{-Q^WBof-@4|0~VCa39$ z*^@(JwSlvXU!KT0hkUy--i$SfdxN0hsACp}YdRZWb-autCW{WmgZK%gX=!E*9LVue zD|k4{AB#y5cC3P8HZ3aKgl6O~@L@eq{&7#O1=JoX_{@_AZ$+8up832G3hI>oHsVxw zoF+vY*36{ZE(QfC5RF&_`iP{hg8mDlDxSl^(<{s713P}i}=o0huJgCu%3#|^gBYBnmU zqi;RlT$P~Nih9WL5ACi!GmG7F)ADyOHbf2*-5%VVo*ix{4KlhDb6Yz$kL}PPtxZG> z#r0MYLW0a7x^rWcJoE=)X@<1RJb`|>YkpN>Xu?SJ*dIE8db1}a+?9=Pf5WwaGjdV4 zTl^;9Mt;nVNLGjmBk%PW8>x(|zc90mK%3d>RbLNsEMILo09D26ncaopNkeS3SM#`s zgq|D-4yR9nVhfpeNbjn4@unFXo;>C53bln|+RVCQyt6`PT(eH!Z>I)3YA|9XBws>C zf)1G6SbI-DP~A~=&xr^j`_K`Tx;))8iB2Tpvq&;Mo?U1z3JPlUP zqAq_1#M1OdW&H(a>X@l+XB5P!Z&fbl^8m((liNybp9qIU;wqVTWa9E~TWO~lhS)@}e&A-SKkMJ25EnM_cJf{p1Bmt+x+?^Y>#w#{eW6343y zn4$+hhzvuOl|(nggt(OJ#v2@Cv~j7$ zJQS^V`D^D>_E(UCLe*j1_wQ;axiwPao6GPHP}voE@o0tNTGtCeyJ{b;Va&$qnRJis zfIMyEB(FY^xXb7aVp!707?afs%fqz?I8L%h0vM4c@$8p$R^E{XvfhRZWW;1PU}Q$* zp;6Onz{Ehxn24JPHs{yr0=jUC$V;p>iInvbuPRxO0e~@(x{pycEtaMu6&LJiW1+`+ z{l!Vqm%6O?nGV$wM+V!QV{WsCk1uspaq8*jvPbrNC?D1Ei}>WZ*-^)-kw{wCp@djk zA0$obun7JVk|78WmZX`?A|gT#Y@5hzj$}Zy1sZrmm4y>4nnl&Ie=H3piaDOa|8j)* zd1V(<@8R5!$ny3?L+IWO{k|KqcwY(vW^=kY0 zg3aYKj`f%t(XVX6=xfcpFCjZFU)%G;=q;(ezrOtQQT-*gL-uu7b&J&w@458Lz8@d| z{OY51+Ih9#o*%rs@6xXp6*qpf_;t^{-z#eW+#sM_>;8J^cjWs-}V5{TjDnWU6JfpM(8~0^lu(^qT62G)0|0_ zRNkR@$F#K1D)j?o4g*7zT`Xu@Q~@+=RyR=5bZA7_?z@;l zD)^S#weYyKhO~*e6u#B9wHJyDO08NwmgeBC$U#L7t8hUE#LH#T{JQ1Zdj&Z-VIZ8x2!efSMFD%BVc{@^agWX z=k}?5pS#UQclwDV9!3j_t+xj|b>H1WwKcvr_@i&d zOUAW0)oIlcJa+oeVOaNRFiCTB*3$HI(;xly7q5c#-v^nHuv* z7H6XHR!Exft$!Mip}=vnj^G4|T7LvAt-N&SIw!RsTfQ>_e1%LdDlBc_)+!_vs|J(M}Hynp4z z@Cq(tv9YJ*Pw=GLQpT0=4#ffUwPnSu(w&^(YvF!x=3L9mw!EsEEprr?USz2C@>HZA zB2OtHHuT>2d40A_$TQz7GQ6WPh*FRHi>PizGdiAqFX4Hubr*JnO6|)YZ&2WgGge$!}fcZ<#9Tp_BPD>srAt+Sy5? zQ@iZAx>C7}Yd!hka~QJL{nRbSe&*M> zn{UFvaVS0Jg&A{5m2)%ROsne02-5R~MrO;De!o>~V(`_iu#Z71I#pRbeO|wK_ZFYN z{-7*_+S0C9W|7{0+B=*8B(#SwIG=`8p*`%ls*?5ovIF_|Da2ZVw*KJ(AjxD0hB9yE z)R(V?X>*p~Xo&hEF)jXsT6JtH=RvcSbCpmdxLh}N)LmqiW{_T;)(9S~l#C};LYK*{bBoq`hLq^hacf)n9>xn0J z`3wY(kV`zyyFhnEx!WN54-Lp`Xmo0r($6N2Cry$4K}jEg1fT5coHr}kd4c1UC1zdE z%N@x%Bpw_?#P3@vv_EOoFyqL~NW^O@*v8N*Qwt64aoP4V;R%D4@Xl3M4Kksr#i=t!uBNy_~u&ufO7J} z=PAS9Hj`oPuVKseyBWX=dh~J{GNwQ9Y($D!CGKR!Xxp@qTPx)CQ7KMqz5n`f#x+WD z46?d(=h@8@(SdJ@zvanHBX1;%LSU`&7MOve(+iIDvs0H3oRnR`Q|g&zcurH0XnRlS z({T4UUSm9gY4NM3f&LYfqP#g1nf!HD#?m}jc`HG2;MfOp3@+}2VK$7krY9ar6xEn{C<*!QN*+JJ`s_xfU7nv#Jkt#)dlGRfBpxoq{XjAPIft1~taM&z%LrF! zw%U@fE_Jn$TxL0lxo15)aCXx@t9+<>s-Tmw^p^^)C@zn^!AEF*a;52hatyTC3LZ91 zjE#M>i9d7r@l<-2+%%)3#FfJ|KY#15%7#6U8?X{g)37KLfZ)f#75}G!C?RK-VQUc!mY~vTj00cVHy=O&o z|N8EztU6Q6w{2n@IOB4b3>zK7&;RN`!$L6^>xfbx{a$=7p-G@4(p z7<;&C*7bS~zA}#17HN0z=A#0QP`cFZaF>iL> zfISTz7}80k$iPAZ>!vE2I!SH3WQpe08vg?KqQT7rGA7E8cSogLFShW*W;|7BS<#~H zy(2|sWs{gn6G;oFe4^0G##Mb1PGZ4;->i9=F0<-IcD(Q0ii z$|0BI*$1^buA8izsarh~W55q1c`{nSD&mH-KM5R9qOM(y_spSB&v%OZ_?W)q3c}6} zrTTn5I6ZqgQ%|BQCBl+2pdvN4WWLw%ExIU1(|fJni5v>nks@vyj1z{HWDI~8 zf19X{N62u*Vr=~@LrWlhi`v9nXBl30Tqi3?{!N@Qu>3Wtub#8#yv3po2X&)TQaJaWNqR? zTPmA*e2lzVhuW*go;PhPSQ(;w(mH|8d!jw&=1x#B9_ZCSjA>WaTm2-CQobD2&AM5X zZgg5sA24O04#I}sdA;{HIV5lEJ~0J&aN<5E6td27|C!Pa^~I(jpy_E)_B}<@Q_oTd zkG3lh7-WKf)_3kpu?UYzRQ4LXvKMk)%W8KBFPryCM%{Du{_aI;>RI=p(7g14sK?ln>q~Z1D(jf|Aknq*N!qhUEI;vVnW}mMVoqR3<>npirO*#`VIzs zdgBZ1#CVH(&wd*%31;5hsQFY@r@~n3mGH1PN$XHPcXnCktvC%ec|z&wTBaf`w{}X> z=0pcQ51v*aWyVJpRt+;tcV@_^g^P0w(|V-*a5&|zyMylLYb_aOrRj4aHX?m4b_HRR zx9;J_B#nagQhDYkPv*SMP4d^E`YJsUS}m7TE%vSr#M~iZcwad3?=Gh&tsZ|>pYjU5 z++%qxzb;n0CY3?q=IMGOAhot4?U2x0G3Hkj9jxj13;#+pZc+YpaE&D{QWhkFGQHBX zCl+zl{`0b;48Sl8wm=Rd*^gb8F*JTnD&%Mq$58pElJ6y`h;=QzQNO) z%XY@lXx!M4H23^>L@b8qG;I9zVGPRT$putN4$HZugtv5yi?X{;bU58+`B9;|C3u|-nb-*$zk(@AG-Ojr z;brP@r zX?M<#w*qHT;OJEZDlafuyuH`@g!UpLBve6d3hT)8Ryh-&Q z8f!}7S|!WH*EpnPry)m5o}gViwWx@K5>PWQ?Hht@nZCQoX@xd3;8bQqUuebwW*((wrA8|!?T{&2azsqwtIFWQ_dR}(!@d14JCsc)g) z;JC5WZ!rRsoEbAX84QHIJdBvQH~SeecBKQM+!zopKCFG_uQ93eK(@IZ{;_teZCB6n zSr^6Mzy}i)^vXwBD;$5kvd(RkGlicke$_TQIgdZf;ShsN>7J3^HX+<3C?^Pq3A$UueNp<6$v+x(OY@C z?hPd5{bb!|df~TR|1FC7^}cD&$X|1AG6&Kk<)$q&;m9iQ8-*VOB(|%XT>6pWpB3iQ z-86bv6h?4T&KnJXt(mb3P9%LXu){Z$ClMAQAzH`8gVtjZWxoG#)Aa42`o<)WJCUFE zHxf*gDztm+R9KFB)>@ns-jd8~m33ox+}%z;D-!TVTtv$ky5k*~6;Zus zz_-O@qavhiLQjC}Y?`mDTAaN};j%3Qg-PWH4+$!%AKh}-$Qu$Wot@Gp*V@xFavK}! z*~8ZUFrvB=e&Z}aSI(6*D{Xyxd*F4oRzh6xb44VtOVgrDQ2;UnIVV?ui0|@UMs(PZDYK33iFc6Xf@Zm zX1&4s>Mg~t(elSWD>bDVKKjO=jKVyxY6iOF_~7Va%Qv{N-qlGpBr0urc?U9Rz>ij# z(bL#(zLq@YxLG=MpP#NM*&m*6V_(qeviQ;QPMFp8tJMoxCAS!~{BWkB#wYwcL2yyd zDD82yR#X7gO(Bcbz52>vy9$*gGMw)EXlax6(8|gF@QARVz&G4ycre%P@tKW zXlw0xcdX-M-P;TC()J5b6?Tg1bJt(MPo%4Xy+1!@+o{U;p5d#DwAbz<-&&b{_vJe> zK|077R5_O`>gV1ON$F39XjHvWD4ozF9s(~*fToJeoJ%`a=+usq+Tk`5NWP^xLld<> zvt8l%bI+t!)Lh&Yby5#G1cAt{-xiuU;PhVoUK=a?Ou|Lhn65 z0zsu1s?s5lAOsNzgqjE;a8I1~UH5*tpYFOJ|EvW+Rye;?_SyS6`#k44JiTqKC&+(- z9|D00!f)L$gFtwLA&~vfzaIdfkYB%D0gnUD26{KZ6MSu5$47z39}jL>2S6Yaaoq2H zNwcf25Xeag{KnNg!5Q>PREn%?s?Ktsdd~GDcmCl&_YcpzvrZxd3(l?eZhmbmM+18I zJ)9i6_+dHi_5~-Q#S@Ar7dz8#Tbi1p>le;F`-dOBzOx&Qk3hnc@~>&(

    Wp*3!%NGzD@b0B}G1~+9Sa+L%u#}b}kt)fznqW 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 LxkUKI^WJ{}``V`b diff --git a/dev/reference/get_niveaux_nappes.html b/dev/reference/get_niveaux_nappes.html index 6f8f1d4..779c8d2 100644 --- a/dev/reference/get_niveaux_nappes.html +++ b/dev/reference/get_niveaux_nappes.html @@ -38,11 +38,14 @@

  • Changelog diff --git a/dev/reference/get_poisson.html b/dev/reference/get_poisson.html index 283c98d..14bd229 100644 --- a/dev/reference/get_poisson.html +++ b/dev/reference/get_poisson.html @@ -36,11 +36,14 @@
  • Changelog diff --git a/dev/reference/get_prelevements.html b/dev/reference/get_prelevements.html index 7d859ed..6622a67 100644 --- a/dev/reference/get_prelevements.html +++ b/dev/reference/get_prelevements.html @@ -38,11 +38,14 @@
  • Changelog diff --git a/dev/reference/get_qualite_eau_potable.html b/dev/reference/get_qualite_eau_potable.html index b74047b..2067369 100644 --- a/dev/reference/get_qualite_eau_potable.html +++ b/dev/reference/get_qualite_eau_potable.html @@ -47,11 +47,14 @@
  • Changelog diff --git a/dev/reference/get_qualite_nappes.html b/dev/reference/get_qualite_nappes.html index 4cf2312..e76bd0b 100644 --- a/dev/reference/get_qualite_nappes.html +++ b/dev/reference/get_qualite_nappes.html @@ -38,11 +38,14 @@
  • Changelog diff --git a/dev/reference/get_qualite_rivieres.html b/dev/reference/get_qualite_rivieres.html index e628cc3..c4ba138 100644 --- a/dev/reference/get_qualite_rivieres.html +++ b/dev/reference/get_qualite_rivieres.html @@ -46,11 +46,14 @@
  • Changelog diff --git a/dev/reference/get_temperature.html b/dev/reference/get_temperature.html index ab86975..237da0c 100644 --- a/dev/reference/get_temperature.html +++ b/dev/reference/get_temperature.html @@ -38,11 +38,14 @@
  • Changelog diff --git a/dev/reference/hubeau.html b/dev/reference/hubeau.html index 21499de..7091aab 100644 --- a/dev/reference/hubeau.html +++ b/dev/reference/hubeau.html @@ -148,11 +148,14 @@
  • Changelog @@ -271,20 +274,6 @@

    API "Température des cours d'eau" - -
    -

    Author

    -

    Maintainer: David Dorchies david.dorchies@inrae.fr (ORCID)

    -

    Other contributors:

  • Changelog @@ -116,7 +119,7 @@

    All functions

    Retrieve data from API "Température des cours d'eau"

    -

    hubeau-package hubeau

    +

    hubeau

    hubeau: A package for retrieving data on the French databases on water 'Hub'Eau'

    diff --git a/dev/reference/lists.html b/dev/reference/lists.html index e644027..04786f3 100644 --- a/dev/reference/lists.html +++ b/dev/reference/lists.html @@ -34,11 +34,14 @@

  • Changelog diff --git a/dev/sitemap.xml b/dev/sitemap.xml index 70420a1..212c258 100644 --- a/dev/sitemap.xml +++ b/dev/sitemap.xml @@ -15,6 +15,9 @@ https://inrae.github.io/hubeau/articles/example_ecoulement_api.html + + https://inrae.github.io/hubeau/articles/example_niveaux_nappes_api.html + https://inrae.github.io/hubeau/articles/index.html