diff --git a/_freeze/lectures/lesson-22-make_a_gif/execute-results/html.json b/_freeze/lectures/lesson-22-make_a_gif/execute-results/html.json new file mode 100644 index 0000000..1e72250 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "ab66888a136b77a103a9b6d7bf3de7e0", + "result": { + "markdown": "# Make a GIF \n\nIn this lesson we will use NAIP data to create a GIF showing vegetation change over Campus Point at UCSB. \n\n\nUCSB's [Cheadle Center for Biodiveristy and Ecologicla Restoration (CCBER)](https://www.ccber.ucsb.edu) manages multiple ecological restoration sites around the UCSB campus to protect and enhance native biodiveristy and preserve ecological function within urbanized areas. \nCampus Point is one of the areas managed by CCBER and has undergone multiple active restoration projects since 2005. \nIn particular, Campus Point is greatly covered by iceplant (*Carpobrotus edulis*), an inviasive succulent that competes with native plants by forming thick mats that cover large areas. \nIn the last few years CCBER has removed iceplant in Campus Point to replace it with native vegetation. \n\n\n\nWe will create a gif using NAIP imagery from 2016, 2018, and 2020 showing the vegetation change in this area. \n\nFirst, let's import the necessary libraries and functions. \nTo create the GIF we'll be using the [`geogif` library](https://geogif.readthedocs.io/en/latest/), which makes it simple to create gifs from `xarray.DataArrays`.\n\n::: {.cell execution_count=1}\n``` {.python .cell-code}\nimport pandas as pd\nimport geopandas as gpd\nimport matplotlib.pyplot as plt\n\nimport xarray as xr\nimport rioxarray as rioxr\nfrom shapely.geometry import box\n\nimport pystac_client\nimport planetary_computer\n\nfrom geogif import gif # to create gif\n```\n:::\n\n\n## Data search\n\nTo search for the NAIP data in the Microsoft Planetary Computer Catalog we will use a list of coordinates defining a bounding box around campus point. \nWe will also limit our search for items since 2016, when NAIP data resolution increased from 1m to 0.6m per pixel.\n\n::: {.cell execution_count=2}\n``` {.python .cell-code}\n# open catalog\ncatalog = pystac_client.Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\n# coords defining bbox around campus point\nbbox = [-119.84682486219316, 34.404860394049024, -119.84370917948988, 34.40632764289684]\n\n# search \nsearch = catalog.search(\n collections=[\"naip\"], \n bbox=bbox, \n datetime='2016/2023'\n)\n\n# get items from search\nitems = search.item_collection()\nprint(f'There are {len(items)} items in the search.')\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nThere are 3 items in the search.\n```\n:::\n:::\n\n\n## Prepare single raster\n\nThe NAIP data is available at the item's `'image'` asset:\n\n::: {.cell execution_count=3}\n``` {.python .cell-code}\nitem = items[0]\nsb = rioxr.open_rasterio(item.assets['image'].href)\nsb\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```{=html}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray (band: 4, y: 12500, x: 10580)>\n[529000000 values with dtype=uint8]\nCoordinates:\n  * band         (band) int64 1 2 3 4\n  * x            (x) float64 2.354e+05 2.354e+05 ... 2.418e+05 2.418e+05\n  * y            (y) float64 3.815e+06 3.815e+06 ... 3.807e+06 3.807e+06\n    spatial_ref  int64 0\nAttributes:\n    AREA_OR_POINT:             Area\n    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista\n    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)\n    TIFFTAG_SOFTWARE:          Trimble Germany GmbH\n    TIFFTAG_XRESOLUTION:       1\n    TIFFTAG_YRESOLUTION:       1\n    _FillValue:                0\n    scale_factor:              1.0\n    add_offset:                0.0
\n```\n:::\n:::\n\n\nThis rater is way bigger than our area of interest. \nTo verify this and then clip the raster, let's make a `gpd.GeoDataFrame` from the `bbox` coordinates:\n\n::: {.cell execution_count=4}\n``` {.python .cell-code}\n# bounding box as geodataframe\nbox_df = gpd.GeoDataFrame(geometry=[box(*bbox)],\n crs='epsg:4326') \n```\n:::\n\n\n::: {.cell execution_count=5}\n``` {.python .cell-code}\n# plot bounding box and raster extents\nfig, ax = plt.subplots()\ngpd.GeoDataFrame(geometry=[box(*sb.rio.bounds())],\n crs=sb.rio.crs).plot(ax=ax)\nbox_df.to_crs(sb.rio.crs).plot(ax=ax, color='red')\n```\n\n::: {.cell-output .cell-output-display execution_count=5}\n```\n\n```\n:::\n\n::: {.cell-output .cell-output-display}\n![](lesson-22-make_a_gif_files/figure-html/cell-6-output-2.png){width=401 height=425}\n:::\n:::\n\n\n::: {.cell execution_count=6}\n``` {.python .cell-code}\n# clip raster to bounding box\nsb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)\n```\n:::\n\n\nNAIP data has four bands, Red, Green, Blue, and Near-Infrared. \nTo make it easier to plot RGB images, let's select only the first three bands.\n\n::: {.cell execution_count=7}\n``` {.python .cell-code}\n# select red, green, blue bands and plot true color image.\nsb = sb.sel(band=[1,2,3])\nsb.plot.imshow()\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n```\n\n```\n:::\n\n::: {.cell-output .cell-output-display}\n![](lesson-22-make_a_gif_files/figure-html/cell-8-output-2.png){width=619 height=464}\n:::\n:::\n\n\n## Stack rasters\n\nOur goal is to use the `gif` function to create a gif with the three NAIP images over campus point. \n\nThe [`gif` documentation](https://geogif.readthedocs.io/en/latest/api.html) indicates that to do so we will need to put our images/rasters in a single `xarray.DataArray` with dimensions `(time, band, y, x)`. \nA single raster has the following dimensions:\n\n::: {.cell execution_count=8}\n``` {.python .cell-code}\nprint('dimensions: ', sb.dims)\nprint('shape: ', sb.shape)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\ndimensions: ('band', 'y', 'x')\nshape: (3, 285, 486)\n```\n:::\n:::\n\n\nTo create a single `xarray.DataArray` with a time dimensions we will stack the three rasters we obtained in our search. \nWe use a `for` loop to repeat the previous steps for each item in the search (access the item's `image` asset, clip, and select bands) and store each processed raster in a list `rasters`:\n\n::: {.cell execution_count=9}\n``` {.python .cell-code}\n# create a list with rasters\nrasters = []\nfor item in items:\n sb = rioxr.open_rasterio(item.assets['image'].href)\n sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)\n sb = sb.sel(band=[1,2,3])\n rasters.append(sb)\n```\n:::\n\n\nNext we use the `xarray.concat()` function to concatenate these rasters along a new dimensions we will call `time`:\n\n::: {.cell execution_count=10}\n``` {.python .cell-code}\n# concatenate rasters into single xarray.DataArray\nstack = xr.concat(rasters, dim='time')\nstack\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n```{=html}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>\narray([[[[108,  99,  87, ..., 134, 145, 150],\n         [110, 109, 101, ..., 123, 142, 150],\n         [ 99,  94,  94, ..., 136, 142, 152],\n         ...,\n         [ 37,  37,  37, ..., 150, 130, 158],\n         [ 36,  38,  37, ..., 158, 135, 137],\n         [ 37,  38,  38, ..., 151, 145, 116]],\n\n        [[113, 106,  94, ..., 136, 142, 147],\n         [113, 109, 107, ..., 128, 141, 148],\n         [109, 104, 105, ..., 136, 140, 148],\n         ...,\n         [ 58,  59,  60, ..., 161, 153, 167],\n         [ 56,  58,  59, ..., 173, 156, 158],\n         [ 58,  58,  59, ..., 166, 157, 137]],\n\n        [[ 88,  88,  85, ..., 120, 128, 131],\n         [ 87,  86,  84, ..., 113, 127, 133],\n         [ 85,  83,  83, ..., 120, 126, 133],\n         ...,\n...\n         ...,\n         [ 45,  46,  39, ...,  61,  64,  59],\n         [ 57,  64,  36, ...,  63,  55,  53],\n         [ 53,  57,  40, ...,  55,  50,  46]],\n\n        [[ 48,  47,  49, ...,  88,  92, 120],\n         [ 54,  49,  49, ...,  85, 112, 114],\n         [ 58,  53,  51, ...,  82, 112, 100],\n         ...,\n         [ 58,  58,  57, ...,  70,  76,  74],\n         [ 73,  70,  53, ...,  76,  70,  66],\n         [ 65,  69,  52, ...,  68,  59,  60]],\n\n        [[ 52,  52,  53, ...,  85,  99, 119],\n         [ 54,  51,  55, ...,  81, 109, 108],\n         [ 57,  52,  53, ...,  85, 106,  93],\n         ...,\n         [ 70,  68,  62, ...,  79,  79,  76],\n         [ 78,  75,  61, ...,  81,  72,  70],\n         [ 71,  77,  63, ...,  74,  66,  65]]]], dtype=uint8)\nCoordinates:\n  * band         (band) int64 1 2 3\n  * x            (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05\n  * y            (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06\n    spatial_ref  int64 0\nDimensions without coordinates: time\nAttributes:\n    AREA_OR_POINT:             Area\n    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista\n    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)\n    TIFFTAG_SOFTWARE:          Trimble Germany GmbH\n    TIFFTAG_XRESOLUTION:       1\n    TIFFTAG_YRESOLUTION:       1\n    scale_factor:              1.0\n    add_offset:                0.0\n    _FillValue:                0
\n```\n:::\n:::\n\n\nNotice our new dimension `time` does not have any coordinates associated to it. \nTo add coordinates to this dimensions we use the [`assign_coords()`](https://docs.xarray.dev/en/stable/generated/xarray.DataArray.assign_coords.html) method for `xarray.DataArray`. \n\nIt would be reasonable to use the year of collection of each raster (as a `timestamp`) as its coordinate on the `time` dimension. \nWe can see this year in the item's properties:\n\n::: {.cell execution_count=11}\n``` {.python .cell-code}\n# year of collection of an item \nitem = items[0]\nitem.properties['naip:year']\n```\n\n::: {.cell-output .cell-output-display execution_count=11}\n```\n'2020'\n```\n:::\n:::\n\n\n::: {.cell execution_count=12}\n``` {.python .cell-code}\n# convert strings to datetime\npd.to_datetime(item.properties['naip:year'])\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```\nTimestamp('2020-01-01 00:00:00')\n```\n:::\n:::\n\n\nTo get this timestamps for each year we can create a list using *list comprehension*:\n\n::: {.cell execution_count=13}\n``` {.python .cell-code}\ntimes = [pd.to_datetime(item.properties['naip:year']) for item in items]\ntimes\n```\n\n::: {.cell-output .cell-output-display execution_count=13}\n```\n[Timestamp('2020-01-01 00:00:00'),\n Timestamp('2018-01-01 00:00:00'),\n Timestamp('2016-01-01 00:00:00')]\n```\n:::\n:::\n\n\nAnd finally we assign these times as the coordinates and sort by the vlaues of time dimension:\n\n::: {.cell execution_count=14}\n``` {.python .cell-code}\nstack = stack.assign_coords(time=times).sortby(\"time\")\nstack\n```\n\n::: {.cell-output .cell-output-display execution_count=14}\n```{=html}\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>\narray([[[[ 54,  49,  52, ...,  96,  96, 122],\n         [ 59,  51,  55, ...,  90, 119, 112],\n         [ 65,  55,  55, ...,  91, 114,  98],\n         ...,\n         [ 45,  46,  39, ...,  61,  64,  59],\n         [ 57,  64,  36, ...,  63,  55,  53],\n         [ 53,  57,  40, ...,  55,  50,  46]],\n\n        [[ 48,  47,  49, ...,  88,  92, 120],\n         [ 54,  49,  49, ...,  85, 112, 114],\n         [ 58,  53,  51, ...,  82, 112, 100],\n         ...,\n         [ 58,  58,  57, ...,  70,  76,  74],\n         [ 73,  70,  53, ...,  76,  70,  66],\n         [ 65,  69,  52, ...,  68,  59,  60]],\n\n        [[ 52,  52,  53, ...,  85,  99, 119],\n         [ 54,  51,  55, ...,  81, 109, 108],\n         [ 57,  52,  53, ...,  85, 106,  93],\n         ...,\n...\n         ...,\n         [ 37,  37,  37, ..., 150, 130, 158],\n         [ 36,  38,  37, ..., 158, 135, 137],\n         [ 37,  38,  38, ..., 151, 145, 116]],\n\n        [[113, 106,  94, ..., 136, 142, 147],\n         [113, 109, 107, ..., 128, 141, 148],\n         [109, 104, 105, ..., 136, 140, 148],\n         ...,\n         [ 58,  59,  60, ..., 161, 153, 167],\n         [ 56,  58,  59, ..., 173, 156, 158],\n         [ 58,  58,  59, ..., 166, 157, 137]],\n\n        [[ 88,  88,  85, ..., 120, 128, 131],\n         [ 87,  86,  84, ..., 113, 127, 133],\n         [ 85,  83,  83, ..., 120, 126, 133],\n         ...,\n         [ 69,  69,  70, ..., 155, 148, 161],\n         [ 67,  69,  70, ..., 169, 151, 152],\n         [ 69,  70,  68, ..., 166, 156, 135]]]], dtype=uint8)\nCoordinates:\n  * band         (band) int64 1 2 3\n  * x            (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05\n  * y            (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06\n    spatial_ref  int64 0\n  * time         (time) datetime64[ns] 2016-01-01 2018-01-01 2020-01-01\nAttributes:\n    AREA_OR_POINT:             Area\n    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista\n    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)\n    TIFFTAG_SOFTWARE:          Trimble Germany GmbH\n    TIFFTAG_XRESOLUTION:       1\n    TIFFTAG_YRESOLUTION:       1\n    scale_factor:              1.0\n    add_offset:                0.0\n    _FillValue:                0
\n```\n:::\n:::\n\n\n## GIF\n\nGetting the rasters in the right format is the trickiest part of creating the GIF! Can you see the resotration areas?\n\n::: {.cell execution_count=15}\n``` {.python .cell-code}\n# create gif\n# fps = frames per second\n# adding to=\"campus_point.gif\" will save GIF\ngif(stack, fps = 0.5)\n```\n:::\n\n\n![](/images/campus_point.gif)\n\n", + "supporting": [ + "lesson-22-make_a_gif_files/figure-html" + ], + "filters": [], + "includes": { + "include-in-header": [ + "\n\n\n" + ] + } + } +} \ No newline at end of file diff --git a/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-6-output-2.png b/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-6-output-2.png new file mode 100644 index 0000000..f058dcb Binary files /dev/null and b/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-6-output-2.png differ diff --git a/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-8-output-2.png b/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-8-output-2.png new file mode 100644 index 0000000..5e42ae7 Binary files /dev/null and b/_freeze/lectures/lesson-22-make_a_gif/figure-html/cell-8-output-2.png differ diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.css b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.css new file mode 100644 index 0000000..94f1940 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.css @@ -0,0 +1,2018 @@ +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: +url("./bootstrap-icons.woff?2ab2cbbe07fcebb53bdaa7313bb290f2") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-1::before { content: "\f2a5"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-1::before { content: "\f68a"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-1::before { content: "\f68d"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-1::before { content: "\f690"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-1::before { content: "\f695"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-1::before { content: "\f698"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-mortorboard-fill::before { content: "\f6a2"; } +.bi-mortorboard::before { content: "\f6a3"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-1::before { content: "\f6b6"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash-1::before { content: "\f6c2"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport-1::before { content: "\f6e0"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-ssd-fill::before { content: "\f6ed"; } +.bi-ssd::before { content: "\f6ee"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt-1::before { content: "\f759"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls-1::before { content: "\f769"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-1::before { content: "\f794"; } +.bi-1-circle-fill-1::before { content: "\f795"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-1::before { content: "\f79a"; } +.bi-2-circle-fill-1::before { content: "\f79b"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-1::before { content: "\f7a0"; } +.bi-3-circle-fill-1::before { content: "\f7a1"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-1::before { content: "\f7a6"; } +.bi-4-circle-fill-1::before { content: "\f7a7"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-1::before { content: "\f7ac"; } +.bi-5-circle-fill-1::before { content: "\f7ad"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-1::before { content: "\f7b2"; } +.bi-6-circle-fill-1::before { content: "\f7b3"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-1::before { content: "\f7b8"; } +.bi-7-circle-fill-1::before { content: "\f7b9"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-1::before { content: "\f7be"; } +.bi-8-circle-fill-1::before { content: "\f7bf"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-1::before { content: "\f7c4"; } +.bi-9-circle-fill-1::before { content: "\f7c5"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-1::before { content: "\f7d8"; } +.bi-c-circle-fill-1::before { content: "\f7d9"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-1::before { content: "\f7e4"; } +.bi-cc-circle-fill-1::before { content: "\f7e5"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-1::before { content: "\f7f8"; } +.bi-h-circle-fill-1::before { content: "\f7f9"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-1::before { content: "\f802"; } +.bi-p-circle-fill-1::before { content: "\f803"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-1::before { content: "\f80c"; } +.bi-r-circle-fill-1::before { content: "\f80d"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.woff b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.woff new file mode 100644 index 0000000..18d21d4 Binary files /dev/null and b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap-icons.woff differ diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.css b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..a87b434 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #ffffff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #dee2e6;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222, 226, 230;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #ffffff}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#0d6efd;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f6f6f6;padding:.5rem;border:1px solid #dee2e6;border-radius:.25rem}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#9753b8;background-color:#f6f6f6;border-radius:.25rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:#6c757d}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid #9ba5ae}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #ffffff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #ffffff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #ffffff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;color-adjust:exact;-webkit-print-color-adjust:exact}.form-check-input[type=checkbox],.shiny-input-container .checkbox input[type=checkbox],.shiny-input-container .checkbox-inline input[type=checkbox],.shiny-input-container .radio input[type=checkbox],.shiny-input-container .radio-inline input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23ffffff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e")}.form-check-inline,.shiny-input-container .checkbox-inline,.shiny-input-container .radio-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-default{color:#000;background-color:#dee2e6;border-color:#dee2e6}.btn-default:hover{color:#000;background-color:#e3e6ea;border-color:#e1e5e9}.btn-check:focus+.btn-default,.btn-default:focus{color:#000;background-color:#e3e6ea;border-color:#e1e5e9;box-shadow:0 0 0 .25rem rgba(189,192,196,.5)}.btn-check:checked+.btn-default,.btn-check:active+.btn-default,.btn-default:active,.btn-default.active,.show>.btn-default.dropdown-toggle{color:#000;background-color:#e5e8eb;border-color:#e1e5e9}.btn-check:checked+.btn-default:focus,.btn-check:active+.btn-default:focus,.btn-default:active:focus,.btn-default.active:focus,.show>.btn-default.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(189,192,196,.5)}.btn-default:disabled,.btn-default.disabled{color:#000;background-color:#dee2e6;border-color:#dee2e6}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-default{color:#dee2e6;border-color:#dee2e6;background-color:rgba(0,0,0,0)}.btn-outline-default:hover{color:#000;background-color:#dee2e6;border-color:#dee2e6}.btn-check:focus+.btn-outline-default,.btn-outline-default:focus{box-shadow:0 0 0 .25rem rgba(222,226,230,.5)}.btn-check:checked+.btn-outline-default,.btn-check:active+.btn-outline-default,.btn-outline-default:active,.btn-outline-default.active,.btn-outline-default.dropdown-toggle.show{color:#000;background-color:#dee2e6;border-color:#dee2e6}.btn-check:checked+.btn-outline-default:focus,.btn-check:active+.btn-outline-default:focus,.btn-outline-default:active:focus,.btn-outline-default.active:focus,.btn-outline-default.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(222,226,230,.5)}.btn-outline-default:disabled,.btn-outline-default.disabled{color:#dee2e6;background-color:rgba(0,0,0,0)}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529;background-color:rgba(0,0,0,0)}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container-xxl,.navbar>.container-xl,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container,.navbar>.container-fluid{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:.25 0;font-size:1.25rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;-webkit-flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-light{background-color:#0d6efd}.navbar-light .navbar-brand{color:#fdfeff}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#fdfeff}.navbar-light .navbar-nav .nav-link{color:#fdfeff}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(253,254,255,.8)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(253,254,255,.75)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#fdfeff}.navbar-light .navbar-toggler{color:#fdfeff;border-color:rgba(253,254,255,0)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fdfeff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#fdfeff}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#fdfeff}.navbar-dark{background-color:#0d6efd}.navbar-dark .navbar-brand{color:#fdfeff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fdfeff}.navbar-dark .navbar-nav .nav-link{color:#fdfeff}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(253,254,255,.8)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(253,254,255,.75)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fdfeff}.navbar-dark .navbar-toggler{color:#fdfeff;border-color:rgba(253,254,255,0)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fdfeff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:#fdfeff}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fdfeff}.card{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0);border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{color:#595a5c;background-color:#f8f9fa;border-color:#f5f6f8}.alert-default .alert-link{color:#47484a}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;display:-webkit-flex;height:1rem;overflow:hidden;font-size:0.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{color:#595a5c;background-color:#f8f9fa}.list-group-item-default.list-group-item-action:hover,.list-group-item-default.list-group-item-action:focus{color:#595a5c;background-color:#dfe0e1}.list-group-item-default.list-group-item-action.active{color:#fff;background-color:#595a5c;border-color:#595a5c}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:0.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.toast-header .btn-close{margin-right:-0.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-0.5rem -0.5rem -0.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:1rem}.modal-footer{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[data-popper-placement^=top]{padding:.4rem 0}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-end,.bs-tooltip-auto[data-popper-placement^=right]{padding:0 .4rem}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[data-popper-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-start,.bs-tooltip-auto[data-popper-placement^=left]{padding:0 .4rem}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0 /* rtl:ignore */;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-0.5rem - 1px);width:.5rem;height:1rem}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-0.5rem - 1px)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-0.5rem - 1px);width:.5rem;height:1rem}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:rgba(0,0,0,0);border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-0.5rem;margin-right:-0.5rem;margin-bottom:-0.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-default{color:#dee2e6}.link-default:hover,.link-default:focus{color:#e5e8eb}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-default{border-color:#dee2e6 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#212529;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#212529}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:inline-block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,.table{caption-side:top;margin-bottom:1.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}div.ansi-escaped-output{font-family:monospace;display:block}/*! +* +* ansi colors from IPython notebook's +* +*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-fg{color:#282c36}.ansi-black-intense-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-fg{color:#b22b31}.ansi-red-intense-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-fg{color:#007427}.ansi-green-intense-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-fg{color:#b27d12}.ansi-yellow-intense-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-fg{color:#0065ca}.ansi-blue-intense-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-fg{color:#a03196}.ansi-magenta-intense-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-fg{color:#258f8f}.ansi-cyan-intense-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-fg{color:#a1a6b2}.ansi-white-intense-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #ffffff;--quarto-body-color: #212529;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:absolute;right:.5em;left:inherit;background-color:rgba(0,0,0,0)}:root{--mermaid-bg-color: #ffffff;--mermaid-edge-color: #6c757d;--mermaid-node-fg-color: #212529;--mermaid-fg-color: #212529;--mermaid-fg-color--lighter: #383f45;--mermaid-fg-color--lightest: #4e5862;--mermaid-font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, Liberation Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;--mermaid-label-bg-color: #ffffff;--mermaid-label-fg-color: #0d6efd;--mermaid-node-bg-color: rgba(13, 110, 253, 0.1);--mermaid-node-fg-color: #212529}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}pre.sourceCode:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}pre.sourceCode:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc( 850px - 3em )) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc( 850px - 3em )) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc( 850px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc( 850px - 3em )) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc( 1000px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc( 1000px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc( 1000px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc( 1250px - 3em )) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc( 1000px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc( 800px - 3em )) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc( 750px - 3em )) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;transform:translate3d(0, 0, 0);margin-bottom:1em}.zindex-content{z-index:998;transform:translate3d(0, 0, 0)}.zindex-modal{z-index:1055;transform:translate3d(0, 0, 0)}.zindex-over-content{z-index:999;transform:translate3d(0, 0, 0)}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside,.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside,.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside,.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;transform:translate3d(0, 0, 0)}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside,.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;transform:translate3d(0, 0, 0)}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{opacity:.9;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#5a6570}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,caption,.figure-caption{font-size:.9rem}.panel-caption,.figure-caption,figcaption{color:#5a6570}.table-caption,caption{color:#212529}.quarto-layout-cell[data-ref-parent] caption{color:#5a6570}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#5a6570;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:1em}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65);border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#5a6570}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f6f6f6;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.toc-left>*,.sidebar.margin-sidebar>*{padding-top:.5em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#0d6efd}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.sidebar .quarto-alternate-formats a,.sidebar .quarto-alternate-notebooks a{text-decoration:none}.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#0d6efd}.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem;font-weight:400;margin-bottom:.5rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2{margin-top:1rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul,.sidebar nav[role=doc-toc] ul{padding-left:0;list-style:none;font-size:.875rem;font-weight:300}.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #0d6efd;color:#0d6efd !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#0d6efd !important}kbd,.kbd{color:#212529;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}div.hanging-indent{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.table a{word-break:break-word}.table>thead{border-top-width:1px;border-top-color:#dee2e6;border-bottom:1px solid #9ba5ae}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout.callout-titled .callout-body{margin-top:.2em}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default div.callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default div.callout-body>:first-child{margin-top:.5em}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){margin-bottom:.5rem}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#0d6efd}div.callout-note.callout-style-default>.callout-header{background-color:#e7f1ff}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#198754}div.callout-tip.callout-style-default>.callout-header{background-color:#e8f3ee}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ffc107}div.callout-warning.callout-style-default>.callout-header{background-color:#fff9e6}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#fd7e14}div.callout-caution.callout-style-default>.callout-header{background-color:#fff2e8}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#dc3545}div.callout-important.callout-style-default>.callout-header{background-color:#fcebec}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#fafafa}#quarto-content .quarto-sidebar-toggle-title{color:#212529}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{color:#fefefe;background-color:#6c757d;border-color:#6c757d}.btn.btn-quarto:hover,div.cell-output-display .btn-quarto:hover{color:#fefefe;background-color:#828a91;border-color:#7b838a}.btn-check:focus+.btn.btn-quarto,.btn.btn-quarto:focus,.btn-check:focus+div.cell-output-display .btn-quarto,div.cell-output-display .btn-quarto:focus{color:#fefefe;background-color:#828a91;border-color:#7b838a;box-shadow:0 0 0 .25rem rgba(130,138,144,.5)}.btn-check:checked+.btn.btn-quarto,.btn-check:active+.btn.btn-quarto,.btn.btn-quarto:active,.btn.btn-quarto.active,.show>.btn.btn-quarto.dropdown-toggle,.btn-check:checked+div.cell-output-display .btn-quarto,.btn-check:active+div.cell-output-display .btn-quarto,div.cell-output-display .btn-quarto:active,div.cell-output-display .btn-quarto.active,.show>div.cell-output-display .btn-quarto.dropdown-toggle{color:#000;background-color:#899197;border-color:#7b838a}.btn-check:checked+.btn.btn-quarto:focus,.btn-check:active+.btn.btn-quarto:focus,.btn.btn-quarto:active:focus,.btn.btn-quarto.active:focus,.show>.btn.btn-quarto.dropdown-toggle:focus,.btn-check:checked+div.cell-output-display .btn-quarto:focus,.btn-check:active+div.cell-output-display .btn-quarto:focus,div.cell-output-display .btn-quarto:active:focus,div.cell-output-display .btn-quarto.active:focus,.show>div.cell-output-display .btn-quarto.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,144,.5)}.btn.btn-quarto:disabled,.btn.btn-quarto.disabled,div.cell-output-display .btn-quarto:disabled,div.cell-output-display .btn-quarto.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}nav.quarto-secondary-nav.color-navbar{background-color:#0d6efd;color:#fdfeff}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#fdfeff}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:0}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:var(--bs-font-monospace);color:#383f45;border:solid #383f45 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:var(--bs-font-monospace);color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;transform:translate3d(0, 0, 0)}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;transform:translate3d(0, 0, 0);margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table>thead{border-top-width:0}.table>:not(caption)>*:not(:last-child)>*{border-bottom-color:#d3d8dc;border-bottom-style:solid;border-bottom-width:1px}.table>:not(:first-child){border-top:1px solid #9ba5ae;border-bottom:1px solid inherit}.table tbody{border-bottom-color:#9ba5ae}a.external:after{display:inline-block;height:.75rem;width:.75rem;margin-bottom:.15em;margin-left:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file,.code-with-filename .code-with-filename-file pre{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file,.quarto-dark .code-with-filename .code-with-filename-file pre{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#fdfeff;background:#0d6efd}.quarto-title-banner .code-tools-button{color:#97cbff}.quarto-title-banner .code-tools-button:hover{color:#fdfeff}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr)}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-5px}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents a{color:#212529}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.7em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .description .abstract-title,#title-block-header.quarto-title-block.default .abstract .abstract-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:1fr 1fr}.quarto-title-tools-only{display:flex;justify-content:right}/*# sourceMappingURL=397ef2e52d54cf686e4908b90039e9db.css.map */ diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.js b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..cc0a255 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/bootstrap/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/clipboard/clipboard.min.js b/_freeze/lectures/lesson-22-make_a_gif/libs/clipboard/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",u.sheet.cssRules.length),u.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",u.sheet.cssRules.length),u.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',u.sheet.cssRules.length)),u=document.querySelectorAll("[id]"),t=[].map.call(u,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/popper.min.js b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/popper.min.js new file mode 100644 index 0000000..2269d66 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.4 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),o=1,i=1;if(r(e)&&t){var a=e.offsetHeight,f=e.offsetWidth;f>0&&(o=s(n.width)/f||1),a>0&&(i=s(n.height)/a||1)}return{width:n.width/o,height:n.height/i,top:n.top/i,right:n.right/o,bottom:n.bottom/i,left:n.left/o,x:n.left/o,y:n.top/i}}function c(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function u(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function l(e){return f(u(e)).left+c(e).scrollLeft}function d(e){return t(e).getComputedStyle(e)}function h(e){var t=d(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function m(e,n,o){void 0===o&&(o=!1);var i,a,d=r(n),m=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),v=u(n),g=f(e,m),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(d||!d&&!o)&&(("body"!==p(n)||h(v))&&(y=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:c(i)),r(n)?((b=f(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=l(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function v(e){var t=f(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function g(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||u(e)}function y(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:r(e)&&h(e)?e:y(g(e))}function b(e,n){var r;void 0===n&&(n=[]);var o=y(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],h(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(b(g(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function w(e){return r(e)&&"fixed"!==d(e).position?e.offsetParent:null}function O(e){for(var n=t(e),i=w(e);i&&x(i)&&"static"===d(i).position;)i=w(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===d(i).position)?n:i||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&r(e)&&"fixed"===d(e).position)return null;var n=g(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(p(n))<0;){var i=d(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var j="top",E="bottom",D="right",A="left",L="auto",P=[j,E,D,A],M="start",k="end",W="viewport",B="popper",H=P.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+k])}),[]),T=[].concat(P,[L]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+k])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function S(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function q(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function V(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function N(e,r){return r===W?V(function(e){var n=t(e),r=u(e),o=n.visualViewport,i=r.clientWidth,a=r.clientHeight,s=0,f=0;return o&&(i=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=o.offsetLeft,f=o.offsetTop)),{width:i,height:a,x:s+l(e),y:f}}(e)):n(r)?function(e){var t=f(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(r):V(function(e){var t,n=u(e),r=c(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+l(e),p=-r.scrollTop;return"rtl"===d(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:p}}(u(e)))}function I(e,t,o){var s="clippingParents"===t?function(e){var t=b(g(e)),o=["absolute","fixed"].indexOf(d(e).position)>=0&&r(e)?O(e):e;return n(o)?t.filter((function(e){return n(e)&&q(e,o)&&"body"!==p(e)})):[]}(e):[].concat(t),f=[].concat(s,[o]),c=f[0],u=f.reduce((function(t,n){var r=N(e,n);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),N(e,c));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function _(e){return e.split("-")[1]}function F(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function U(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?_(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case j:t={x:s,y:n.y-r.height};break;case E:t={x:s,y:n.y+n.height};break;case D:t={x:n.x+n.width,y:f};break;case A:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?F(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case M:t[c]=t[c]-(n[p]/2-r[p]/2);break;case k:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function z(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function X(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Y(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.boundary,s=void 0===a?"clippingParents":a,c=r.rootBoundary,p=void 0===c?W:c,l=r.elementContext,d=void 0===l?B:l,h=r.altBoundary,m=void 0!==h&&h,v=r.padding,g=void 0===v?0:v,y=z("number"!=typeof g?g:X(g,P)),b=d===B?"reference":B,x=e.rects.popper,w=e.elements[m?b:d],O=I(n(w)?w:w.contextElement||u(e.elements.popper),s,p),A=f(e.elements.reference),L=U({reference:A,element:x,strategy:"absolute",placement:i}),M=V(Object.assign({},x,L)),k=d===B?M:A,H={top:O.top-k.top+y.top,bottom:k.bottom-O.bottom+y.bottom,left:O.left-k.left+y.left,right:k.right-O.right+y.right},T=e.modifiersData.offset;if(d===B&&T){var R=T[i];Object.keys(H).forEach((function(e){var t=[D,E].indexOf(e)>=0?1:-1,n=[j,E].indexOf(e)>=0?"y":"x";H[e]+=R[n]*t}))}return H}var G={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[A,D].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function ae(e){return e.replace(/left|right|bottom|top/g,(function(e){return ie[e]}))}var se={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return se[e]}))}function ce(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?T:f,p=_(r),u=p?s?H:H.filter((function(e){return _(e)===p})):P,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=Y(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var pe={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,g=C(v),y=f||(g===v||!h?[ae(v)]:function(e){if(C(e)===L)return[];var t=ae(e);return[fe(e),t,fe(t)]}(v)),b=[v].concat(y).reduce((function(e,n){return e.concat(C(n)===L?ce(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,P=!0,k=b[0],W=0;W=0,S=R?"width":"height",q=Y(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),V=R?T?D:A:T?E:j;x[S]>w[S]&&(V=ae(V));var N=ae(V),I=[];if(i&&I.push(q[H]<=0),s&&I.push(q[V]<=0,q[N]<=0),I.every((function(e){return e}))){k=B,P=!1;break}O.set(B,I)}if(P)for(var F=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return k=t,"break"},U=h?3:1;U>0;U--){if("break"===F(U))break}t.placement!==k&&(t.modifiersData[r]._skip=!0,t.placement=k,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ue(e,t,n){return i(e,a(t,n))}var le={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,g=n.tetherOffset,y=void 0===g?0:g,b=Y(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=_(t.placement),L=!w,P=F(x),k="x"===P?"y":"x",W=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,q={x:0,y:0};if(W){if(s){var V,N="y"===P?j:A,I="y"===P?E:D,U="y"===P?"height":"width",z=W[P],X=z+b[N],G=z-b[I],J=m?-H[U]/2:0,K=w===M?B[U]:H[U],Q=w===M?-H[U]:-B[U],Z=t.elements.arrow,$=m&&Z?v(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=ue(0,B[U],$[U]),oe=L?B[U]/2-J-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=L?-B[U]/2+J+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&O(t.elements.arrow),se=ae?"y"===P?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(V=null==S?void 0:S[P])?V:0,ce=z+ie-fe,pe=ue(m?a(X,z+oe-fe-se):X,z,m?i(G,ce):G);W[P]=pe,q[P]=pe-z}if(c){var le,de="x"===P?j:A,he="x"===P?E:D,me=W[k],ve="y"===k?"height":"width",ge=me+b[de],ye=me-b[he],be=-1!==[j,A].indexOf(x),xe=null!=(le=null==S?void 0:S[k])?le:0,we=be?ge:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ye,je=m&&be?function(e,t,n){var r=ue(e,t,n);return r>n?n:r}(we,me,Oe):ue(m?we:ge,me,m?Oe:ye);W[k]=je,q[k]=je-me}t.modifiersData[r]=q}},requiresIfExists:["offset"]};var de={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=F(s),c=[A,D].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return z("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:X(e,P))}(o.padding,n),u=v(i),l="y"===f?j:A,d="y"===f?E:D,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],g=O(i),y=g?"y"===f?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],L=y/2-u[c]/2+b,M=ue(x,L,w),k=f;n.modifiersData[r]=((t={})[k]=M,t.centerOffset=M-L,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&q(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function he(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function me(e){return[j,D,E,A].some((function(t){return e[t]>=0}))}var ve={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=Y(t,{elementContext:"reference"}),s=Y(t,{altBoundary:!0}),f=he(a,r),c=he(s,o,i),p=me(f),u=me(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},ge=K({defaultModifiers:[Z,$,ne,re]}),ye=[Z,$,ne,re,oe,pe,le,de,ve],be=K({defaultModifiers:ye});e.applyStyles=re,e.arrow=de,e.computeStyles=ne,e.createPopper=be,e.createPopperLite=ge,e.defaultModifiers=ye,e.detectOverflow=Y,e.eventListeners=Z,e.flip=pe,e.hide=ve,e.offset=oe,e.popperGenerator=K,e.popperOffsets=$,e.preventOverflow=le,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/quarto-syntax-highlighting.css b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/quarto-syntax-highlighting.css new file mode 100644 index 0000000..d9fd98f --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/quarto-syntax-highlighting.css @@ -0,0 +1,203 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +pre > code.sourceCode > span { + color: #003B4F; +} + +code span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +code span.ot { + color: #003B4F; + font-style: inherit; +} + +code span.at { + color: #657422; + font-style: inherit; +} + +code span.ss { + color: #20794D; + font-style: inherit; +} + +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +code span.fu { + color: #4758AB; + font-style: inherit; +} + +code span.st { + color: #20794D; + font-style: inherit; +} + +code span.cf { + color: #003B4F; + font-style: inherit; +} + +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +code span.er { + color: #AD0000; + font-style: inherit; +} + +code span.bn { + color: #AD0000; + font-style: inherit; +} + +code span.al { + color: #AD0000; + font-style: inherit; +} + +code span.va { + color: #111111; + font-style: inherit; +} + +code span.bu { + font-style: inherit; +} + +code span.ex { + font-style: inherit; +} + +code span.pp { + color: #AD0000; + font-style: inherit; +} + +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +code span.vs { + color: #20794D; + font-style: inherit; +} + +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +code span.do { + color: #5E5E5E; + font-style: italic; +} + +code span.im { + color: #00769E; + font-style: inherit; +} + +code span.ch { + color: #20794D; + font-style: inherit; +} + +code span.dt { + color: #AD0000; + font-style: inherit; +} + +code span.fl { + color: #AD0000; + font-style: inherit; +} + +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +code span.cn { + color: #8f5902; + font-style: inherit; +} + +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +code span.dv { + color: #AD0000; + font-style: inherit; +} + +code span.kw { + color: #003B4F; + font-style: inherit; +} + +.prevent-inlining { + content: " { + // Find any conflicting margin elements and add margins to the + // top to prevent overlap + const marginChildren = window.document.querySelectorAll( + ".column-margin.column-container > * " + ); + + let lastBottom = 0; + for (const marginChild of marginChildren) { + if (marginChild.offsetParent !== null) { + // clear the top margin so we recompute it + marginChild.style.marginTop = null; + const top = marginChild.getBoundingClientRect().top + window.scrollY; + console.log({ + childtop: marginChild.getBoundingClientRect().top, + scroll: window.scrollY, + top, + lastBottom, + }); + if (top < lastBottom) { + const margin = lastBottom - top; + marginChild.style.marginTop = `${margin}px`; + } + const styles = window.getComputedStyle(marginChild); + const marginTop = parseFloat(styles["marginTop"]); + + console.log({ + top, + height: marginChild.getBoundingClientRect().height, + marginTop, + total: top + marginChild.getBoundingClientRect().height + marginTop, + }); + lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Recompute the position of margin elements anytime the body size changes + if (window.ResizeObserver) { + const resizeObserver = new window.ResizeObserver( + throttle(layoutMarginEls, 50) + ); + resizeObserver.observe(window.document.body); + } + + const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); + const sidebarEl = window.document.getElementById("quarto-sidebar"); + const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); + const marginSidebarEl = window.document.getElementById( + "quarto-margin-sidebar" + ); + // function to determine whether the element has a previous sibling that is active + const prevSiblingIsActiveLink = (el) => { + const sibling = el.previousElementSibling; + if (sibling && sibling.tagName === "A") { + return sibling.classList.contains("active"); + } else { + return false; + } + }; + + // fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior) + function fireSlideEnter(e) { + const event = window.document.createEvent("Event"); + event.initEvent("slideenter", true, true); + window.document.dispatchEvent(event); + } + const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); + tabs.forEach((tab) => { + tab.addEventListener("shown.bs.tab", fireSlideEnter); + }); + + // fire slideEnter for tabby tab activations (for htmlwidget resize behavior) + document.addEventListener("tabby", fireSlideEnter, false); + + // Track scrolling and mark TOC links as active + // get table of contents and sidebar (bail if we don't have at least one) + const tocLinks = tocEl + ? [...tocEl.querySelectorAll("a[data-scroll-target]")] + : []; + const makeActive = (link) => tocLinks[link].classList.add("active"); + const removeActive = (link) => tocLinks[link].classList.remove("active"); + const removeAllActive = () => + [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); + + // activate the anchor for a section associated with this TOC entry + tocLinks.forEach((link) => { + link.addEventListener("click", () => { + if (link.href.indexOf("#") !== -1) { + const anchor = link.href.split("#")[1]; + const heading = window.document.querySelector( + `[data-anchor-id=${anchor}]` + ); + if (heading) { + // Add the class + heading.classList.add("reveal-anchorjs-link"); + + // function to show the anchor + const handleMouseout = () => { + heading.classList.remove("reveal-anchorjs-link"); + heading.removeEventListener("mouseout", handleMouseout); + }; + + // add a function to clear the anchor when the user mouses out of it + heading.addEventListener("mouseout", handleMouseout); + } + } + }); + }); + + const sections = tocLinks.map((link) => { + const target = link.getAttribute("data-scroll-target"); + if (target.startsWith("#")) { + return window.document.getElementById(decodeURI(`${target.slice(1)}`)); + } else { + return window.document.querySelector(decodeURI(`${target}`)); + } + }); + + const sectionMargin = 200; + let currentActive = 0; + // track whether we've initialized state the first time + let init = false; + + const updateActiveLink = () => { + // The index from bottom to top (e.g. reversed list) + let sectionIndex = -1; + if ( + window.innerHeight + window.pageYOffset >= + window.document.body.offsetHeight + ) { + sectionIndex = 0; + } else { + sectionIndex = [...sections].reverse().findIndex((section) => { + if (section) { + return window.pageYOffset >= section.offsetTop - sectionMargin; + } else { + return false; + } + }); + } + if (sectionIndex > -1) { + const current = sections.length - sectionIndex - 1; + if (current !== currentActive) { + removeAllActive(); + currentActive = current; + makeActive(current); + if (init) { + window.dispatchEvent(sectionChanged); + } + init = true; + } + } + }; + + const inHiddenRegion = (top, bottom, hiddenRegions) => { + for (const region of hiddenRegions) { + if (top <= region.bottom && bottom >= region.top) { + return true; + } + } + return false; + }; + + const categorySelector = "header.quarto-title-block .quarto-category"; + const activateCategories = (href) => { + // Find any categories + // Surround them with a link pointing back to: + // #category=Authoring + try { + const categoryEls = window.document.querySelectorAll(categorySelector); + for (const categoryEl of categoryEls) { + const categoryText = categoryEl.textContent; + if (categoryText) { + const link = `${href}#category=${encodeURIComponent(categoryText)}`; + const linkEl = window.document.createElement("a"); + linkEl.setAttribute("href", link); + for (const child of categoryEl.childNodes) { + linkEl.append(child); + } + categoryEl.appendChild(linkEl); + } + } + } catch { + // Ignore errors + } + }; + function hasTitleCategories() { + return window.document.querySelector(categorySelector) !== null; + } + + function offsetRelativeUrl(url) { + const offset = getMeta("quarto:offset"); + return offset ? offset + url : url; + } + + function offsetAbsoluteUrl(url) { + const offset = getMeta("quarto:offset"); + const baseUrl = new URL(offset, window.location); + + const projRelativeUrl = url.replace(baseUrl, ""); + if (projRelativeUrl.startsWith("/")) { + return projRelativeUrl; + } else { + return "/" + projRelativeUrl; + } + } + + // read a meta tag value + function getMeta(metaName) { + const metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; + } + + async function findAndActivateCategories() { + const currentPagePath = offsetAbsoluteUrl(window.location.href); + const response = await fetch(offsetRelativeUrl("listings.json")); + if (response.status == 200) { + return response.json().then(function (listingPaths) { + const listingHrefs = []; + for (const listingPath of listingPaths) { + const pathWithoutLeadingSlash = listingPath.listing.substring(1); + for (const item of listingPath.items) { + if ( + item === currentPagePath || + item === currentPagePath + "index.html" + ) { + // Resolve this path against the offset to be sure + // we already are using the correct path to the listing + // (this adjusts the listing urls to be rooted against + // whatever root the page is actually running against) + const relative = offsetRelativeUrl(pathWithoutLeadingSlash); + const baseUrl = window.location; + const resolvedPath = new URL(relative, baseUrl); + listingHrefs.push(resolvedPath.pathname); + break; + } + } + } + + // Look up the tree for a nearby linting and use that if we find one + const nearestListing = findNearestParentListing( + offsetAbsoluteUrl(window.location.pathname), + listingHrefs + ); + if (nearestListing) { + activateCategories(nearestListing); + } else { + // See if the referrer is a listing page for this item + const referredRelativePath = offsetAbsoluteUrl(document.referrer); + const referrerListing = listingHrefs.find((listingHref) => { + const isListingReferrer = + listingHref === referredRelativePath || + listingHref === referredRelativePath + "index.html"; + return isListingReferrer; + }); + + if (referrerListing) { + // Try to use the referrer if possible + activateCategories(referrerListing); + } else if (listingHrefs.length > 0) { + // Otherwise, just fall back to the first listing + activateCategories(listingHrefs[0]); + } + } + }); + } + } + if (hasTitleCategories()) { + findAndActivateCategories(); + } + + const findNearestParentListing = (href, listingHrefs) => { + if (!href || !listingHrefs) { + return undefined; + } + // Look up the tree for a nearby linting and use that if we find one + const relativeParts = href.substring(1).split("/"); + while (relativeParts.length > 0) { + const path = relativeParts.join("/"); + for (const listingHref of listingHrefs) { + if (listingHref.startsWith(path)) { + return listingHref; + } + } + relativeParts.pop(); + } + + return undefined; + }; + + const manageSidebarVisiblity = (el, placeholderDescriptor) => { + let isVisible = true; + let elRect; + + return (hiddenRegions) => { + if (el === null) { + return; + } + + // Find the last element of the TOC + const lastChildEl = el.lastElementChild; + + if (lastChildEl) { + // Converts the sidebar to a menu + const convertToMenu = () => { + for (const child of el.children) { + child.style.opacity = 0; + child.style.overflow = "hidden"; + } + + nexttick(() => { + const toggleContainer = window.document.createElement("div"); + toggleContainer.style.width = "100%"; + toggleContainer.classList.add("zindex-over-content"); + toggleContainer.classList.add("quarto-sidebar-toggle"); + toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom + toggleContainer.id = placeholderDescriptor.id; + toggleContainer.style.position = "fixed"; + + const toggleIcon = window.document.createElement("i"); + toggleIcon.classList.add("quarto-sidebar-toggle-icon"); + toggleIcon.classList.add("bi"); + toggleIcon.classList.add("bi-caret-down-fill"); + + const toggleTitle = window.document.createElement("div"); + const titleEl = window.document.body.querySelector( + placeholderDescriptor.titleSelector + ); + if (titleEl) { + toggleTitle.append( + titleEl.textContent || titleEl.innerText, + toggleIcon + ); + } + toggleTitle.classList.add("zindex-over-content"); + toggleTitle.classList.add("quarto-sidebar-toggle-title"); + toggleContainer.append(toggleTitle); + + const toggleContents = window.document.createElement("div"); + toggleContents.classList = el.classList; + toggleContents.classList.add("zindex-over-content"); + toggleContents.classList.add("quarto-sidebar-toggle-contents"); + for (const child of el.children) { + if (child.id === "toc-title") { + continue; + } + + const clone = child.cloneNode(true); + clone.style.opacity = 1; + clone.style.display = null; + toggleContents.append(clone); + } + toggleContents.style.height = "0px"; + const positionToggle = () => { + // position the element (top left of parent, same width as parent) + if (!elRect) { + elRect = el.getBoundingClientRect(); + } + toggleContainer.style.left = `${elRect.left}px`; + toggleContainer.style.top = `${elRect.top}px`; + toggleContainer.style.width = `${elRect.width}px`; + }; + positionToggle(); + + toggleContainer.append(toggleContents); + el.parentElement.prepend(toggleContainer); + + // Process clicks + let tocShowing = false; + // Allow the caller to control whether this is dismissed + // when it is clicked (e.g. sidebar navigation supports + // opening and closing the nav tree, so don't dismiss on click) + const clickEl = placeholderDescriptor.dismissOnClick + ? toggleContainer + : toggleTitle; + + const closeToggle = () => { + if (tocShowing) { + toggleContainer.classList.remove("expanded"); + toggleContents.style.height = "0px"; + tocShowing = false; + } + }; + + // Get rid of any expanded toggle if the user scrolls + window.document.addEventListener( + "scroll", + throttle(() => { + closeToggle(); + }, 50) + ); + + // Handle positioning of the toggle + window.addEventListener( + "resize", + throttle(() => { + elRect = undefined; + positionToggle(); + }, 50) + ); + + window.addEventListener("quarto-hrChanged", () => { + elRect = undefined; + }); + + // Process the click + clickEl.onclick = () => { + if (!tocShowing) { + toggleContainer.classList.add("expanded"); + toggleContents.style.height = null; + tocShowing = true; + } else { + closeToggle(); + } + }; + }); + }; + + // Converts a sidebar from a menu back to a sidebar + const convertToSidebar = () => { + for (const child of el.children) { + child.style.opacity = 1; + child.style.overflow = null; + } + + const placeholderEl = window.document.getElementById( + placeholderDescriptor.id + ); + if (placeholderEl) { + placeholderEl.remove(); + } + + el.classList.remove("rollup"); + }; + + if (isReaderMode()) { + convertToMenu(); + isVisible = false; + } else { + // Find the top and bottom o the element that is being managed + const elTop = el.offsetTop; + const elBottom = + elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; + + if (!isVisible) { + // If the element is current not visible reveal if there are + // no conflicts with overlay regions + if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToSidebar(); + isVisible = true; + } + } else { + // If the element is visible, hide it if it conflicts with overlay regions + // and insert a placeholder toggle (or if we're in reader mode) + if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToMenu(); + isVisible = false; + } + } + } + } + }; + }; + + const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); + for (const tabEl of tabEls) { + const id = tabEl.getAttribute("data-bs-target"); + if (id) { + const columnEl = document.querySelector( + `${id} .column-margin, .tabset-margin-content` + ); + if (columnEl) + tabEl.addEventListener("shown.bs.tab", function (event) { + const el = event.srcElement; + if (el) { + const visibleCls = `${el.id}-margin-content`; + // walk up until we find a parent tabset + let panelTabsetEl = el.parentElement; + while (panelTabsetEl) { + if (panelTabsetEl.classList.contains("panel-tabset")) { + break; + } + panelTabsetEl = panelTabsetEl.parentElement; + } + + if (panelTabsetEl) { + const prevSib = panelTabsetEl.previousElementSibling; + if ( + prevSib && + prevSib.classList.contains("tabset-margin-container") + ) { + const childNodes = prevSib.querySelectorAll( + ".tabset-margin-content" + ); + for (const childEl of childNodes) { + if (childEl.classList.contains(visibleCls)) { + childEl.classList.remove("collapse"); + } else { + childEl.classList.add("collapse"); + } + } + } + } + } + + layoutMarginEls(); + }); + } + } + + // Manage the visibility of the toc and the sidebar + const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { + id: "quarto-toc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { + id: "quarto-sidebarnav-toggle", + titleSelector: ".title", + dismissOnClick: false, + }); + let tocLeftScrollVisibility; + if (leftTocEl) { + tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { + id: "quarto-lefttoc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + } + + // Find the first element that uses formatting in special columns + const conflictingEls = window.document.body.querySelectorAll( + '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' + ); + + // Filter all the possibly conflicting elements into ones + // the do conflict on the left or ride side + const arrConflictingEls = Array.from(conflictingEls); + const leftSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return false; + } + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + className.startsWith("column-") && + !className.endsWith("right") && + !className.endsWith("container") && + className !== "column-margin" + ); + }); + }); + const rightSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return true; + } + + const hasMarginCaption = Array.from(el.classList).find((className) => { + return className == "margin-caption"; + }); + if (hasMarginCaption) { + return true; + } + + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + !className.endsWith("container") && + className.startsWith("column-") && + !className.endsWith("left") + ); + }); + }); + + const kOverlapPaddingSize = 10; + function toRegions(els) { + return els.map((el) => { + const boundRect = el.getBoundingClientRect(); + const top = + boundRect.top + + document.documentElement.scrollTop - + kOverlapPaddingSize; + return { + top, + bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, + }; + }); + } + + let hasObserved = false; + const visibleItemObserver = (els) => { + let visibleElements = [...els]; + const intersectionObserver = new IntersectionObserver( + (entries, _observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + if (visibleElements.indexOf(entry.target) === -1) { + visibleElements.push(entry.target); + } + } else { + visibleElements = visibleElements.filter((visibleEntry) => { + return visibleEntry !== entry; + }); + } + }); + + if (!hasObserved) { + hideOverlappedSidebars(); + } + hasObserved = true; + }, + {} + ); + els.forEach((el) => { + intersectionObserver.observe(el); + }); + + return { + getVisibleEntries: () => { + return visibleElements; + }, + }; + }; + + const rightElementObserver = visibleItemObserver(rightSideConflictEls); + const leftElementObserver = visibleItemObserver(leftSideConflictEls); + + const hideOverlappedSidebars = () => { + marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); + sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); + if (tocLeftScrollVisibility) { + tocLeftScrollVisibility( + toRegions(leftElementObserver.getVisibleEntries()) + ); + } + }; + + window.quartoToggleReader = () => { + // Applies a slow class (or removes it) + // to update the transition speed + const slowTransition = (slow) => { + const manageTransition = (id, slow) => { + const el = document.getElementById(id); + if (el) { + if (slow) { + el.classList.add("slow"); + } else { + el.classList.remove("slow"); + } + } + }; + + manageTransition("TOC", slow); + manageTransition("quarto-sidebar", slow); + }; + const readerMode = !isReaderMode(); + setReaderModeValue(readerMode); + + // If we're entering reader mode, slow the transition + if (readerMode) { + slowTransition(readerMode); + } + highlightReaderToggle(readerMode); + hideOverlappedSidebars(); + + // If we're exiting reader mode, restore the non-slow transition + if (!readerMode) { + slowTransition(!readerMode); + } + }; + + const highlightReaderToggle = (readerMode) => { + const els = document.querySelectorAll(".quarto-reader-toggle"); + if (els) { + els.forEach((el) => { + if (readerMode) { + el.classList.add("reader"); + } else { + el.classList.remove("reader"); + } + }); + } + }; + + const setReaderModeValue = (val) => { + if (window.location.protocol !== "file:") { + window.localStorage.setItem("quarto-reader-mode", val); + } else { + localReaderMode = val; + } + }; + + const isReaderMode = () => { + if (window.location.protocol !== "file:") { + return window.localStorage.getItem("quarto-reader-mode") === "true"; + } else { + return localReaderMode; + } + }; + let localReaderMode = null; + + const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); + const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; + + // Walk the TOC and collapse/expand nodes + // Nodes are expanded if: + // - they are top level + // - they have children that are 'active' links + // - they are directly below an link that is 'active' + const walk = (el, depth) => { + // Tick depth when we enter a UL + if (el.tagName === "UL") { + depth = depth + 1; + } + + // It this is active link + let isActiveNode = false; + if (el.tagName === "A" && el.classList.contains("active")) { + isActiveNode = true; + } + + // See if there is an active child to this element + let hasActiveChild = false; + for (child of el.children) { + hasActiveChild = walk(child, depth) || hasActiveChild; + } + + // Process the collapse state if this is an UL + if (el.tagName === "UL") { + if (tocOpenDepth === -1 && depth > 1) { + el.classList.add("collapse"); + } else if ( + depth <= tocOpenDepth || + hasActiveChild || + prevSiblingIsActiveLink(el) + ) { + el.classList.remove("collapse"); + } else { + el.classList.add("collapse"); + } + + // untick depth when we leave a UL + depth = depth - 1; + } + return hasActiveChild || isActiveNode; + }; + + // walk the TOC and expand / collapse any items that should be shown + + if (tocEl) { + walk(tocEl, 0); + updateActiveLink(); + } + + // Throttle the scroll event and walk peridiocally + window.document.addEventListener( + "scroll", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 5) + ); + window.addEventListener( + "resize", + throttle(() => { + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 10) + ); + hideOverlappedSidebars(); + highlightReaderToggle(isReaderMode()); +}); + +// grouped tabsets +window.addEventListener("pageshow", (_event) => { + function getTabSettings() { + const data = localStorage.getItem("quarto-persistent-tabsets-data"); + if (!data) { + localStorage.setItem("quarto-persistent-tabsets-data", "{}"); + return {}; + } + if (data) { + return JSON.parse(data); + } + } + + function setTabSettings(data) { + localStorage.setItem( + "quarto-persistent-tabsets-data", + JSON.stringify(data) + ); + } + + function setTabState(groupName, groupValue) { + const data = getTabSettings(); + data[groupName] = groupValue; + setTabSettings(data); + } + + function toggleTab(tab, active) { + const tabPanelId = tab.getAttribute("aria-controls"); + const tabPanel = document.getElementById(tabPanelId); + if (active) { + tab.classList.add("active"); + tabPanel.classList.add("active"); + } else { + tab.classList.remove("active"); + tabPanel.classList.remove("active"); + } + } + + function toggleAll(selectedGroup, selectorsToSync) { + for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { + const active = selectedGroup === thisGroup; + for (const tab of tabs) { + toggleTab(tab, active); + } + } + } + + function findSelectorsToSyncByLanguage() { + const result = {}; + const tabs = Array.from( + document.querySelectorAll(`div[data-group] a[id^='tabset-']`) + ); + for (const item of tabs) { + const div = item.parentElement.parentElement.parentElement; + const group = div.getAttribute("data-group"); + if (!result[group]) { + result[group] = {}; + } + const selectorsToSync = result[group]; + const value = item.innerHTML; + if (!selectorsToSync[value]) { + selectorsToSync[value] = []; + } + selectorsToSync[value].push(item); + } + return result; + } + + function setupSelectorSync() { + const selectorsToSync = findSelectorsToSyncByLanguage(); + Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { + Object.entries(tabSetsByValue).forEach(([value, items]) => { + items.forEach((item) => { + item.addEventListener("click", (_event) => { + setTabState(group, value); + toggleAll(value, selectorsToSync[group]); + }); + }); + }); + }); + return selectorsToSync; + } + + const selectorsToSync = setupSelectorSync(); + for (const [group, selectedName] of Object.entries(getTabSettings())) { + const selectors = selectorsToSync[group]; + // it's possible that stale state gives us empty selections, so we explicitly check here. + if (selectors) { + toggleAll(selectedName, selectors); + } + } +}); + +function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; +} + +function nexttick(func) { + return setTimeout(func, 0); +} diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.css b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.css new file mode 100644 index 0000000..e6ae635 --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.umd.min.js b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.umd.min.js new file mode 100644 index 0000000..ca292be --- /dev/null +++ b/_freeze/lectures/lesson-22-make_a_gif/libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/_quarto.yml b/_quarto.yml index c675320..6984951 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -33,8 +33,8 @@ book: - lectures/lesson-10-merge-data.qmd - lectures/lesson-12-csv-to-geo.qmd - lectures/lesson-13-reproject-and-clip.qmd - #- lectures/lesson-13-standin.qmd - discussion-sections/ds3-earthquakes.qmd + - lectures/lesson-21-contextily-parquet.qmd - part: "Multi-dimensional data" chapters: - lectures/lesson-14-multidimensional-data.qmd @@ -47,7 +47,7 @@ book: - discussion-sections/ds4-landcover.qmd - lectures/lesson-18-STAC.qmd - discussion-sections/ds5-modis-ndvi.qmd - - lectures/lesson-21-contextily-parquet.qmd + - lectures/lesson-22-make_a_gif.qmd appendices: diff --git a/docs/appendices/gitignore_untrack.html b/docs/appendices/gitignore_untrack.html index 550a740..a3aec9d 100644 --- a/docs/appendices/gitignore_untrack.html +++ b/docs/appendices/gitignore_untrack.html @@ -254,6 +254,12 @@ 16  *Lab: Maps + + @@ -269,13 +275,13 @@ @@ -292,37 +298,37 @@ diff --git a/docs/appendices/set-pat.html b/docs/appendices/set-pat.html index f45f84f..f0c6c75 100644 --- a/docs/appendices/set-pat.html +++ b/docs/appendices/set-pat.html @@ -65,7 +65,7 @@ - + @@ -254,6 +254,12 @@ 16  *Lab: Maps + + @@ -269,13 +275,13 @@ @@ -292,37 +298,37 @@ @@ -681,8 +687,8 @@

diff --git a/docs/discussion-sections/ds4-landcover.html b/docs/discussion-sections/ds4-landcover.html index 6d196b2..e2136d5 100644 --- a/docs/discussion-sections/ds4-landcover.html +++ b/docs/discussion-sections/ds4-landcover.html @@ -7,7 +7,7 @@ -EDS 220 - Working with Environmental Datasets - 21  *Lab: land cover statistics +EDS 220 - Working with Environmental Datasets - 22  *Lab: land cover statistics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

25  Make a GIF

+
+ + + +
+ + + + +
+ + +
+ +

In this lesson we will use NAIP data to create a GIF showing vegetation change over Campus Point at UCSB.

+

UCSB’s Cheadle Center for Biodiveristy and Ecologicla Restoration (CCBER) manages multiple ecological restoration sites around the UCSB campus to protect and enhance native biodiveristy and preserve ecological function within urbanized areas. Campus Point is one of the areas managed by CCBER and has undergone multiple active restoration projects since 2005. In particular, Campus Point is greatly covered by iceplant (Carpobrotus edulis), an inviasive succulent that competes with native plants by forming thick mats that cover large areas. In the last few years CCBER has removed iceplant in Campus Point to replace it with native vegetation.

+

We will create a gif using NAIP imagery from 2016, 2018, and 2020 showing the vegetation change in this area.

+

First, let’s import the necessary libraries and functions. To create the GIF we’ll be using the geogif library, which makes it simple to create gifs from xarray.DataArrays.

+
+
import pandas as pd
+import geopandas as gpd
+import matplotlib.pyplot as plt
+
+import xarray as xr
+import rioxarray as rioxr
+from shapely.geometry import box
+
+import pystac_client
+import planetary_computer
+
+from geogif import gif  # to create gif
+
+ +
+

25.2 Prepare single raster

+

The NAIP data is available at the item’s 'image' asset:

+
+
item = items[0]
+sb = rioxr.open_rasterio(item.assets['image'].href)
+sb
+
+ +
+ + + + + + + + + + + + + + +
<xarray.DataArray (band: 4, y: 12500, x: 10580)>
+[529000000 values with dtype=uint8]
+Coordinates:
+  * band         (band) int64 1 2 3 4
+  * x            (x) float64 2.354e+05 2.354e+05 ... 2.418e+05 2.418e+05
+  * y            (y) float64 3.815e+06 3.815e+06 ... 3.807e+06 3.807e+06
+    spatial_ref  int64 0
+Attributes:
+    AREA_OR_POINT:             Area
+    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista
+    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)
+    TIFFTAG_SOFTWARE:          Trimble Germany GmbH
+    TIFFTAG_XRESOLUTION:       1
+    TIFFTAG_YRESOLUTION:       1
+    _FillValue:                0
+    scale_factor:              1.0
+    add_offset:                0.0
+
+
+

This rater is way bigger than our area of interest. To verify this and then clip the raster, let’s make a gpd.GeoDataFrame from the bbox coordinates:

+
+
# bounding box as geodataframe
+box_df = gpd.GeoDataFrame(geometry=[box(*bbox)],
+                 crs='epsg:4326') 
+
+
+
# plot bounding box and raster extents
+fig, ax = plt.subplots()
+gpd.GeoDataFrame(geometry=[box(*sb.rio.bounds())],
+                 crs=sb.rio.crs).plot(ax=ax)
+box_df.to_crs(sb.rio.crs).plot(ax=ax, color='red')
+
+
<Axes: >
+
+
+

+
+
+
+
# clip raster to bounding box
+sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)
+
+

NAIP data has four bands, Red, Green, Blue, and Near-Infrared. To make it easier to plot RGB images, let’s select only the first three bands.

+
+
# select red, green, blue bands and plot true color image.
+sb = sb.sel(band=[1,2,3])
+sb.plot.imshow()
+
+
<matplotlib.image.AxesImage at 0x153634610>
+
+
+

+
+
+
+
+

25.3 Stack rasters

+

Our goal is to use the gif function to create a gif with the three NAIP images over campus point.

+

The gif documentation indicates that to do so we will need to put our images/rasters in a single xarray.DataArray with dimensions (time, band, y, x). A single raster has the following dimensions:

+
+
print('dimensions: ', sb.dims)
+print('shape: ', sb.shape)
+
+
dimensions:  ('band', 'y', 'x')
+shape:  (3, 285, 486)
+
+
+

To create a single xarray.DataArray with a time dimensions we will stack the three rasters we obtained in our search. We use a for loop to repeat the previous steps for each item in the search (access the item’s image asset, clip, and select bands) and store each processed raster in a list rasters:

+
+
# create a list with rasters
+rasters = []
+for item in items:
+    sb = rioxr.open_rasterio(item.assets['image'].href)
+    sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)
+    sb = sb.sel(band=[1,2,3])
+    rasters.append(sb)
+
+

Next we use the xarray.concat() function to concatenate these rasters along a new dimensions we will call time:

+
+
# concatenate rasters into single xarray.DataArray
+stack = xr.concat(rasters, dim='time')
+stack
+
+ +
+ + + + + + + + + + + + + + +
<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>
+array([[[[108,  99,  87, ..., 134, 145, 150],
+         [110, 109, 101, ..., 123, 142, 150],
+         [ 99,  94,  94, ..., 136, 142, 152],
+         ...,
+         [ 37,  37,  37, ..., 150, 130, 158],
+         [ 36,  38,  37, ..., 158, 135, 137],
+         [ 37,  38,  38, ..., 151, 145, 116]],
+
+        [[113, 106,  94, ..., 136, 142, 147],
+         [113, 109, 107, ..., 128, 141, 148],
+         [109, 104, 105, ..., 136, 140, 148],
+         ...,
+         [ 58,  59,  60, ..., 161, 153, 167],
+         [ 56,  58,  59, ..., 173, 156, 158],
+         [ 58,  58,  59, ..., 166, 157, 137]],
+
+        [[ 88,  88,  85, ..., 120, 128, 131],
+         [ 87,  86,  84, ..., 113, 127, 133],
+         [ 85,  83,  83, ..., 120, 126, 133],
+         ...,
+...
+         ...,
+         [ 45,  46,  39, ...,  61,  64,  59],
+         [ 57,  64,  36, ...,  63,  55,  53],
+         [ 53,  57,  40, ...,  55,  50,  46]],
+
+        [[ 48,  47,  49, ...,  88,  92, 120],
+         [ 54,  49,  49, ...,  85, 112, 114],
+         [ 58,  53,  51, ...,  82, 112, 100],
+         ...,
+         [ 58,  58,  57, ...,  70,  76,  74],
+         [ 73,  70,  53, ...,  76,  70,  66],
+         [ 65,  69,  52, ...,  68,  59,  60]],
+
+        [[ 52,  52,  53, ...,  85,  99, 119],
+         [ 54,  51,  55, ...,  81, 109, 108],
+         [ 57,  52,  53, ...,  85, 106,  93],
+         ...,
+         [ 70,  68,  62, ...,  79,  79,  76],
+         [ 78,  75,  61, ...,  81,  72,  70],
+         [ 71,  77,  63, ...,  74,  66,  65]]]], dtype=uint8)
+Coordinates:
+  * band         (band) int64 1 2 3
+  * x            (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05
+  * y            (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06
+    spatial_ref  int64 0
+Dimensions without coordinates: time
+Attributes:
+    AREA_OR_POINT:             Area
+    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista
+    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)
+    TIFFTAG_SOFTWARE:          Trimble Germany GmbH
+    TIFFTAG_XRESOLUTION:       1
+    TIFFTAG_YRESOLUTION:       1
+    scale_factor:              1.0
+    add_offset:                0.0
+    _FillValue:                0
+
+
+

Notice our new dimension time does not have any coordinates associated to it. To add coordinates to this dimensions we use the assign_coords() method for xarray.DataArray.

+

It would be reasonable to use the year of collection of each raster (as a timestamp) as its coordinate on the time dimension. We can see this year in the item’s properties:

+
+
# year of collection of an item 
+item = items[0]
+item.properties['naip:year']
+
+
'2020'
+
+
+
+
# convert strings to datetime
+pd.to_datetime(item.properties['naip:year'])
+
+
Timestamp('2020-01-01 00:00:00')
+
+
+

To get this timestamps for each year we can create a list using list comprehension:

+
+
times = [pd.to_datetime(item.properties['naip:year']) for item in items]
+times
+
+
[Timestamp('2020-01-01 00:00:00'),
+ Timestamp('2018-01-01 00:00:00'),
+ Timestamp('2016-01-01 00:00:00')]
+
+
+

And finally we assign these times as the coordinates and sort by the vlaues of time dimension:

+
+
stack = stack.assign_coords(time=times).sortby("time")
+stack
+
+ +
+ + + + + + + + + + + + + + +
<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>
+array([[[[ 54,  49,  52, ...,  96,  96, 122],
+         [ 59,  51,  55, ...,  90, 119, 112],
+         [ 65,  55,  55, ...,  91, 114,  98],
+         ...,
+         [ 45,  46,  39, ...,  61,  64,  59],
+         [ 57,  64,  36, ...,  63,  55,  53],
+         [ 53,  57,  40, ...,  55,  50,  46]],
+
+        [[ 48,  47,  49, ...,  88,  92, 120],
+         [ 54,  49,  49, ...,  85, 112, 114],
+         [ 58,  53,  51, ...,  82, 112, 100],
+         ...,
+         [ 58,  58,  57, ...,  70,  76,  74],
+         [ 73,  70,  53, ...,  76,  70,  66],
+         [ 65,  69,  52, ...,  68,  59,  60]],
+
+        [[ 52,  52,  53, ...,  85,  99, 119],
+         [ 54,  51,  55, ...,  81, 109, 108],
+         [ 57,  52,  53, ...,  85, 106,  93],
+         ...,
+...
+         ...,
+         [ 37,  37,  37, ..., 150, 130, 158],
+         [ 36,  38,  37, ..., 158, 135, 137],
+         [ 37,  38,  38, ..., 151, 145, 116]],
+
+        [[113, 106,  94, ..., 136, 142, 147],
+         [113, 109, 107, ..., 128, 141, 148],
+         [109, 104, 105, ..., 136, 140, 148],
+         ...,
+         [ 58,  59,  60, ..., 161, 153, 167],
+         [ 56,  58,  59, ..., 173, 156, 158],
+         [ 58,  58,  59, ..., 166, 157, 137]],
+
+        [[ 88,  88,  85, ..., 120, 128, 131],
+         [ 87,  86,  84, ..., 113, 127, 133],
+         [ 85,  83,  83, ..., 120, 126, 133],
+         ...,
+         [ 69,  69,  70, ..., 155, 148, 161],
+         [ 67,  69,  70, ..., 169, 151, 152],
+         [ 69,  70,  68, ..., 166, 156, 135]]]], dtype=uint8)
+Coordinates:
+  * band         (band) int64 1 2 3
+  * x            (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05
+  * y            (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06
+    spatial_ref  int64 0
+  * time         (time) datetime64[ns] 2016-01-01 2018-01-01 2020-01-01
+Attributes:
+    AREA_OR_POINT:             Area
+    TIFFTAG_IMAGEDESCRIPTION:  OrthoVista
+    TIFFTAG_RESOLUTIONUNIT:    1 (unitless)
+    TIFFTAG_SOFTWARE:          Trimble Germany GmbH
+    TIFFTAG_XRESOLUTION:       1
+    TIFFTAG_YRESOLUTION:       1
+    scale_factor:              1.0
+    add_offset:                0.0
+    _FillValue:                0
+
+
+
+
+

25.4 GIF

+

Getting the rasters in the right format is the trickiest part of creating the GIF! Can you see the resotration areas?

+
+
# create gif
+# fps = frames per second
+# adding to="campus_point.gif" will save GIF
+gif(stack, fps = 0.5)
+
+

+ + +
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-6-output-2.png b/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-6-output-2.png new file mode 100644 index 0000000..f058dcb Binary files /dev/null and b/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-6-output-2.png differ diff --git a/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-8-output-2.png b/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-8-output-2.png new file mode 100644 index 0000000..5e42ae7 Binary files /dev/null and b/docs/lectures/lesson-22-make_a_gif_files/figure-html/cell-8-output-2.png differ diff --git a/docs/lectures/lesson-3-pandas-subsetting.html b/docs/lectures/lesson-3-pandas-subsetting.html index d20e470..f1018a0 100644 --- a/docs/lectures/lesson-3-pandas-subsetting.html +++ b/docs/lectures/lesson-3-pandas-subsetting.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/lectures/lesson-4-basic-plotting.html b/docs/lectures/lesson-4-basic-plotting.html index 2ea9b0a..62bde35 100644 --- a/docs/lectures/lesson-4-basic-plotting.html +++ b/docs/lectures/lesson-4-basic-plotting.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/lectures/lesson-5-updating-dataframes.html b/docs/lectures/lesson-5-updating-dataframes.html index 3759423..ddb2dba 100644 --- a/docs/lectures/lesson-5-updating-dataframes.html +++ b/docs/lectures/lesson-5-updating-dataframes.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/lectures/lesson-6-groupby.html b/docs/lectures/lesson-6-groupby.html index d63620a..6d63711 100644 --- a/docs/lectures/lesson-6-groupby.html +++ b/docs/lectures/lesson-6-groupby.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/lectures/lesson-7-time-series.html b/docs/lectures/lesson-7-time-series.html index 18be93d..455ecff 100644 --- a/docs/lectures/lesson-7-time-series.html +++ b/docs/lectures/lesson-7-time-series.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/lectures/lesson-8-vector-data.html b/docs/lectures/lesson-8-vector-data.html index 048f036..2f25e87 100644 --- a/docs/lectures/lesson-8-vector-data.html +++ b/docs/lectures/lesson-8-vector-data.html @@ -254,6 +254,12 @@ 16  *Lab: Maps + + @@ -269,13 +275,13 @@ @@ -292,37 +298,37 @@ diff --git a/docs/lectures/lesson-9-geopandas-intro.html b/docs/lectures/lesson-9-geopandas-intro.html index 26597b0..a048801 100644 --- a/docs/lectures/lesson-9-geopandas-intro.html +++ b/docs/lectures/lesson-9-geopandas-intro.html @@ -257,6 +257,12 @@ 16  *Lab: Maps + + @@ -272,13 +278,13 @@ @@ -295,37 +301,37 @@ diff --git a/docs/search.json b/docs/search.json index 6ffe9da..04f249f 100644 --- a/docs/search.json +++ b/docs/search.json @@ -706,334 +706,362 @@ "section": "16.3 Map", "text": "16.3 Map\nCreate a map of the earthquales of magnitude greater equal to 6.5 across the world in 2014. Color the points by the magnitude. This is an example of how it could look like:" }, + { + "objectID": "lectures/lesson-21-contextily-parquet.html#parquet-and-geoparquet", + "href": "lectures/lesson-21-contextily-parquet.html#parquet-and-geoparquet", + "title": "17  Parquet and contextily", + "section": "17.1 Parquet and GeoParquet", + "text": "17.1 Parquet and GeoParquet\nApache Parquet (or just parquet) is an open-source, column-oriented file format that makes it faster to retrieve data and uses less memory space to store tabular data. It is very popular for storing large amounts of data, instead of using, for example, CSV files.\n\nThe geospatial version of parquet for storing vector data is the GeoParquet data format. This format comes from the necessity to have an efficient, standardized data format to store and query big geospatial data efficiently. GeoParquet was first introduced in December 2022. Similarly to STAC, this is a new and ongoing effort to create standards in the geospatial analysis community given the rapid increase in geospatial data available." + }, + { + "objectID": "lectures/lesson-21-contextily-parquet.html#catalog-search", + "href": "lectures/lesson-21-contextily-parquet.html#catalog-search", + "title": "17  Parquet and contextily", + "section": "17.2 Catalog search", + "text": "17.2 Catalog search\nWe start by importing all the necessary libraries:\n\nimport geopandas as gpd\nimport matplotlib.pyplot as plt\n\n# for MPC's STAC catalog search\nimport pystac_client\nimport planetary_computer\n\nimport contextily as ctx #for adding basemaps\n\n\n\nThen we use the 2020 US Census Collection id, 'us-census', to look for the data in the MPC catalog. This collection has each tabular file as an item:\n\n# open MPC catalog\ncatalog = pystac_client.Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\n# search whole collection\nsearch = catalog.search(collections=[\"us-census\"])\n\n# retrieve items\nitems = {item.id: item for item in search.items()}\nlist(items)\n\n['2020-census-blocks-population',\n '2020-census-blocks-geo',\n '2020-cb_2020_us_vtd_500k',\n '2020-cb_2020_us_unsd_500k',\n '2020-cb_2020_us_ttract_500k',\n '2020-cb_2020_us_tract_500k',\n '2020-cb_2020_us_tbg_500k',\n '2020-cb_2020_us_state_500k',\n '2020-cb_2020_us_sldu_500k',\n '2020-cb_2020_us_sldl_500k',\n '2020-cb_2020_us_scsd_500k',\n '2020-cb_2020_us_region_500k',\n '2020-cb_2020_us_place_500k',\n '2020-cb_2020_us_nectadiv_500k',\n '2020-cb_2020_us_necta_500k',\n '2020-cb_2020_us_nation_5m',\n '2020-cb_2020_us_metdiv_500k',\n '2020-cb_2020_us_elsd_500k',\n '2020-cb_2020_us_division_500k',\n '2020-cb_2020_us_csa_500k',\n '2020-cb_2020_us_cousub_500k',\n '2020-cb_2020_us_county_within_cd116_500k',\n '2020-cb_2020_us_county_500k',\n '2020-cb_2020_us_concity_500k',\n '2020-cb_2020_us_cnecta_500k',\n '2020-cb_2020_us_cd116_500k',\n '2020-cb_2020_us_cbsa_500k',\n '2020-cb_2020_us_bg_500k',\n '2020-cb_2020_us_aitsn_500k',\n '2020-cb_2020_us_aiannh_500k',\n '2020-cb_2020_72_subbarrio_500k',\n '2020-cb_2020_02_anrc_500k']\n\n\nThis time we will access the item with the counties data:\n\nitem = items['2020-cb_2020_us_county_500k']\nitem\n\n\n\n\n\n\n \n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"2020-cb_2020_us_county_500k\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n datetime\n \"2021-08-01T00:00:00Z\"\n \n \n \n \n \n \n \n proj:epsg\n 4269\n \n \n \n \n \n \n \n table:columns\n [] 13 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"STATEFP\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"State FIPS Code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"COUNTYFP\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"County FIPS code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"COUNTYNS\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"AFFGEOID\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"American FactFinder summary level code + geovariant code + \"00US\" + GEOID\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n name\n \"GEOID\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Concatenation of State FIPS and county FIPS code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n name\n \"NAME\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"County name\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 6\n \n \n \n \n \n name\n \"NAMELSAD\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Name and Legal/statistical description\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 7\n \n \n \n \n \n name\n \"STUSPS\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"FIPS State Postal Code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 8\n \n \n \n \n \n name\n \"STATE_NAME\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 9\n \n \n \n \n \n name\n \"LSAD\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Legal/statistical classification\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 10\n \n \n \n \n \n name\n \"ALAND\"\n \n \n \n \n \n \n \n type\n \"int64\"\n \n \n \n \n \n \n \n description\n \"Current land area\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 11\n \n \n \n \n \n name\n \"AWATER\"\n \n \n \n \n \n \n \n type\n \"int64\"\n \n \n \n \n \n \n \n description\n \"Current water area\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 12\n \n \n \n \n \n name\n \"geometry\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"coordinates for County polygons\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n table:row_count\n 3234\n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census/items/2020-cb_2020_us_county_500k\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n data\n \n \n \n \n \n href\n \"abfs://us-census/2020/cb_2020_us_county_500k.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"Dataset root\"\n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"ai4edataeuwest\"\n \n \n \n \n \n \n \n credential\n \"st=2023-12-03T19%3A03%3A46Z&se=2023-12-04T19%3A48%3A46Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A00%3A13Z&ske=2023-12-11T19%3A00%3A13Z&sks=b&skv=2021-06-08&sig=%2B%2B5aJV0sbjqC2N4OR9hIv2svJZHbWiaV61rx7MdakJA%3D\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n 2\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 3\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/table/v1.2.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"us-census\"\n \n \n \n \n \n \n\n\n\nNotice each item has a single asset, 'data', that contains an URL to the GeoParquet file holding the information. Let’s access the item’s asset:\n\nasset = item.assets[\"data\"]\nasset\n\n\n\n\n\n\n \n \n \n \n \n \n href\n \"abfs://us-census/2020/cb_2020_us_county_500k.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"Dataset root\"\n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"ai4edataeuwest\"\n \n \n \n \n \n \n \n credential\n \"st=2023-12-03T19%3A03%3A46Z&se=2023-12-04T19%3A48%3A46Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A00%3A13Z&ske=2023-12-11T19%3A00%3A13Z&sks=b&skv=2021-06-08&sig=%2B%2B5aJV0sbjqC2N4OR9hIv2svJZHbWiaV61rx7MdakJA%3D\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"" + }, + { + "objectID": "lectures/lesson-21-contextily-parquet.html#opening-geoparquet", + "href": "lectures/lesson-21-contextily-parquet.html#opening-geoparquet", + "title": "17  Parquet and contextily", + "section": "17.3 Opening (Geo)Parquet", + "text": "17.3 Opening (Geo)Parquet\nTo open the parquet file we use the gpd.read_parquet() function using the asset’s URL pointing to the data.\n\ncounties = gpd.read_parquet(\n asset.href,\n # \n storage_options=asset.extra_fields[\"table:storage_options\"],\n)\n\nNow we have a regular geopandas.GeoDataFrame:\n\nprint(type(counties))\ncounties.head()\n\n<class 'geopandas.geodataframe.GeoDataFrame'>\n\n\n\n\n\n\n\n\n\nSTATEFP\nCOUNTYFP\nCOUNTYNS\nAFFGEOID\nGEOID\nNAME\nNAMELSAD\nSTUSPS\nSTATE_NAME\nLSAD\nALAND\nAWATER\ngeometry\n\n\n\n\n0\n21\n141\n00516917\n0500000US21141\n21141\nLogan\nLogan County\nKY\nKentucky\n06\n1430224002\n12479211\nPOLYGON ((-87.06037 36.68085, -87.06002 36.708...\n\n\n1\n36\n081\n00974139\n0500000US36081\n36081\nQueens\nQueens County\nNY\nNew York\n06\n281594050\n188444349\nPOLYGON ((-73.96262 40.73903, -73.96243 40.739...\n\n\n2\n34\n017\n00882278\n0500000US34017\n34017\nHudson\nHudson County\nNJ\nNew Jersey\n06\n119640822\n41836491\nMULTIPOLYGON (((-74.04220 40.69997, -74.03900 ...\n\n\n3\n34\n019\n00882228\n0500000US34019\n34019\nHunterdon\nHunterdon County\nNJ\nNew Jersey\n06\n1108086284\n24761598\nPOLYGON ((-75.19511 40.57969, -75.19466 40.581...\n\n\n4\n21\n147\n00516926\n0500000US21147\n21147\nMcCreary\nMcCreary County\nKY\nKentucky\n06\n1105416696\n10730402\nPOLYGON ((-84.77845 36.60329, -84.73068 36.665..." + }, + { + "objectID": "lectures/lesson-21-contextily-parquet.html#contextily", + "href": "lectures/lesson-21-contextily-parquet.html#contextily", + "title": "17  Parquet and contextily", + "section": "17.4 Contextily", + "text": "17.4 Contextily\nIn this section we will introduce the Python library contextily to add base maps.\nContextily retrieves tile maps from the internet and makes it possible to plot them alongside our vector data.\nExample\nWe want to plot the Santa Barbara county polygon together with a basemap.\n\nsb = counties[counties.NAME == \"Santa Barbara\"]\n\nAlthough contextily’s tiles can be reprojected to match the CRS of the vector data, it can be easier to reproject your data to EPSG 3857 instead. The CRS EPSG 3857 (Spherical Mercator / Web Mercator) is a projected coordinate system used for rendering maps online, including Google Maps and OpenStreetMap among others.\n\n# create axis with plot\nax = (sb.to_crs(epsg=3857)\n .plot(figsize=(7, 7), alpha=0.5, edgecolor=\"k\")\n )\n\n# add basemap from contextily\nctx.add_basemap(ax)\n\n# update axes\nax.set_title(\"Santa Barbara County\", fontdict={\"fontsize\": \"20\"})\nax.set_axis_off()\n\n\n\n\nBy default, contextily uses the OpenStreetMap HOT style. We can change basemaps by updating the source parameter in the add_basemap() function. For example:\n\n# create axis with plot\nax = (sb.to_crs(epsg=3857)\n .plot(figsize=(7, 7), alpha=0.5, edgecolor=\"k\")\n )\n\n# add NatGeo basemap from contextily\nctx.add_basemap(ax, source=ctx.providers.Esri.NatGeoWorldMap)\n\n# update axes\nax.set_title(\"Santa Barbara County\", fontdict={\"fontsize\": \"20\"})\nax.set_axis_off()\n\n\n\n\nChecking ctx.providers we can see the basemaps available:\n\nctx.providers\n\n\n \n \n \n \n xyzservices.Bunch\n 39 items\n \n \n \n \n \n \n OpenStreetMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n Mapnik xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.Mapnik\n \n \n \n urlhttps://tile.openstreetmap.org/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n DE xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.DE\n \n \n \n urlhttps://tile.openstreetmap.de/{z}/{x}/{y}.pngmax_zoom18html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n CH xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.CH\n \n \n \n urlhttps://tile.osm.ch/switzerland/{z}/{x}/{y}.pngmax_zoom18html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsbounds[[45, 5], [48, 11]]\n \n \n \n \n \n \n \n \n \n \n France xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.France\n \n \n \n urlhttps://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.pngmax_zoom20html_attribution© OpenStreetMap France | © OpenStreetMap contributorsattribution(C) OpenStreetMap France | (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n HOT xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.HOT\n \n \n \n urlhttps://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap Franceattribution(C) OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap France\n \n \n \n \n \n \n \n \n \n \n BZH xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.BZH\n \n \n \n urlhttps://tile.openstreetmap.bzh/br/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributors, Tiles courtesy of Breton OpenStreetMap Teamattribution(C) OpenStreetMap contributors, Tiles courtesy of Breton OpenStreetMap Teambounds[[46.2, -5.5], [50, 0.7]]\n \n \n \n \n \n \n \n \n \n \n BlackAndWhite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.BlackAndWhite\n \n \n \n urlhttp://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.pngmax_zoom18attribution(C) OpenStreetMap contributorshtml_attribution© OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n MapTilesAPI xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n OSMEnglish xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMEnglish\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvarianten/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n OSMFrancais xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMFrancais\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvariantfr/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n OSMEspagnol xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMEspagnol\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvariantes/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenSeaMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenSeaMap\n \n \n \n urlhttps://tiles.openseamap.org/seamark/{z}/{x}/{y}.pnghtml_attributionMap data: © OpenSeaMap contributorsattributionMap data: (C) OpenSeaMap contributors\n \n \n \n \n \n \n \n \n \n \n OPNVKarte xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OPNVKarte\n \n \n \n urlhttps://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.pngmax_zoom18html_attributionMap memomaps.de CC-BY-SA, map data © OpenStreetMap contributorsattributionMap memomaps.de CC-BY-SA, map data (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n OpenTopoMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenTopoMap\n \n \n \n urlhttps://{s}.tile.opentopomap.org/{z}/{x}/{y}.pngmax_zoom17html_attributionMap data: © OpenStreetMap contributors, SRTM | Map style: © OpenTopoMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors, SRTM | Map style: (C) OpenTopoMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n OpenRailwayMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenRailwayMap\n \n \n \n urlhttps://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.pngmax_zoom19html_attributionMap data: © OpenStreetMap contributors | Map style: © OpenRailwayMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) OpenRailwayMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n OpenFireMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenFireMap\n \n \n \n urlhttp://openfiremap.org/hytiles/{z}/{x}/{y}.pngmax_zoom19html_attributionMap data: © OpenStreetMap contributors | Map style: © OpenFireMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) OpenFireMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n SafeCast xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SafeCast\n \n \n \n urlhttps://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.pngmax_zoom16html_attributionMap data: © OpenStreetMap contributors | Map style: © SafeCast (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) SafeCast (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n Stadia xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 14 items\n \n \n \n \n \n \n AlidadeSmooth xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.AlidadeSmooth\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantalidade_smoothextpng\n \n \n \n \n \n \n \n \n \n \n AlidadeSmoothDark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.AlidadeSmoothDark\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantalidade_smooth_darkextpng\n \n \n \n \n \n \n \n \n \n \n OSMBright xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.OSMBright\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantosm_brightextpng\n \n \n \n \n \n \n \n \n \n \n Outdoors xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.Outdoors\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantoutdoorsextpng\n \n \n \n \n \n \n \n \n \n \n StamenToner xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenToner\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_tonerextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerBackground xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerBackground\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_backgroundextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLines xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLines\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_linesextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLabels\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_labelsextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLite\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_liteextpng\n \n \n \n \n \n \n \n \n \n \n StamenWatercolor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenWatercolor\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}min_zoom1max_zoom16html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_watercolorextjpg\n \n \n \n \n \n \n \n \n \n \n StamenTerrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrain\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrainextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainBackground xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainBackground\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_backgroundextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainLabels\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_labelsextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainLines xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainLines\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_linesextpng\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Thunderforest xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 9 items\n \n \n \n \n \n \n OpenCycleMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.OpenCycleMap\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantcycleapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Transport xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Transport\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvarianttransportapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n TransportDark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.TransportDark\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvarianttransport-darkapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n SpinalMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.SpinalMap\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantspinal-mapapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Landscape xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Landscape\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantlandscapeapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Outdoors xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Outdoors\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantoutdoorsapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Pioneer xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Pioneer\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantpioneerapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n MobileAtlas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.MobileAtlas\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantmobile-atlasapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Neighbourhood xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Neighbourhood\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantneighbourhoodapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n CyclOSM xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CyclOSM\n \n \n \n urlhttps://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.pngmax_zoom20html_attributionCyclOSM | Map data: © OpenStreetMap contributorsattributionCyclOSM | Map data: (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n Jawg xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 6 items\n \n \n \n \n \n \n Streets xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Streets\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-streetsaccessToken\n \n \n \n \n \n \n \n \n \n \n Terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Terrain\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-terrainaccessToken\n \n \n \n \n \n \n \n \n \n \n Sunny xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Sunny\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-sunnyaccessToken\n \n \n \n \n \n \n \n \n \n \n Dark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Dark\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-darkaccessToken\n \n \n \n \n \n \n \n \n \n \n Light xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Light\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-lightaccessToken\n \n \n \n \n \n \n \n \n \n \n Matrix xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Matrix\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-matrixaccessToken\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n MapBox xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapBox\n \n \n \n urlhttps://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}html_attribution© Mapbox © OpenStreetMap contributors Improve this mapattribution(C) Mapbox (C) OpenStreetMap contributors Improve this maptileSize512max_zoom18zoomOffset-1idmapbox/streets-v11accessToken\n \n \n \n \n \n \n \n \n \n \n MapTiler xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n Streets xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Streets\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantstreetsextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Basic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Basic\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbasicextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Bright xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Bright\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbrightextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Pastel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Pastel\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantpastelextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Positron xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Positron\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantpositronextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Hybrid xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Hybrid\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianthybridextjpgkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Toner xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Toner\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttonerextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Topo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Topo\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttopoextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Voyager xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Voyager\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantvoyagerextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Basic4326 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Basic4326\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbasic-4326extpngkeytileSize512zoomOffset-1min_zoom0max_zoom21crsEPSG:4326\n \n \n \n \n \n \n \n \n \n \n Outdoor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Outdoor\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantoutdoorextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Topographique xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Topographique\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttopographiqueextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Winter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Winter\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantwinterextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Satellite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Satellite\n \n \n \n urlhttps://api.maptiler.com/tiles/{variant}/{z}/{x}/{y}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantsatellite-v2extjpgkeymin_zoom0max_zoom20\n \n \n \n \n \n \n \n \n \n \n Terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Terrain\n \n \n \n urlhttps://api.maptiler.com/tiles/{variant}/{z}/{x}/{y}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantterrain-rgbextpngkeymin_zoom0max_zoom12\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TomTom xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n Basic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Basic\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}variantbasicmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n Hybrid xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Hybrid\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}varianthybridmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n Labels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Labels\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}variantlabelsmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Esri xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n WorldStreetMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldStreetMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Street_Maphtml_attributionTiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012attributionTiles (C) Esri -- Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012\n \n \n \n \n \n \n \n \n \n \n DeLorme xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.DeLorme\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantSpecialty/DeLorme_World_Base_Maphtml_attributionTiles © Esri — Copyright: ©2012 DeLormeattributionTiles (C) Esri -- Copyright: (C)2012 DeLormemin_zoom1max_zoom11\n \n \n \n \n \n \n \n \n \n \n WorldTopoMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldTopoMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Topo_Maphtml_attributionTiles © 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 CommunityattributionTiles (C) 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\n \n \n \n \n \n \n \n \n \n \n WorldImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldImagery\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Imageryhtml_attributionTiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User CommunityattributionTiles (C) Esri -- Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community\n \n \n \n \n \n \n \n \n \n \n WorldTerrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldTerrain\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Terrain_Basehtml_attributionTiles © Esri — Source: USGS, Esri, TANA, DeLorme, and NPSattributionTiles (C) Esri -- Source: USGS, Esri, TANA, DeLorme, and NPSmax_zoom13\n \n \n \n \n \n \n \n \n \n \n WorldShadedRelief xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldShadedRelief\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Shaded_Reliefhtml_attributionTiles © Esri — Source: EsriattributionTiles (C) Esri -- Source: Esrimax_zoom13\n \n \n \n \n \n \n \n \n \n \n WorldPhysical xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldPhysical\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Physical_Maphtml_attributionTiles © Esri — Source: US National Park ServiceattributionTiles (C) Esri -- Source: US National Park Servicemax_zoom8\n \n \n \n \n \n \n \n \n \n \n OceanBasemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.OceanBasemap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantOcean/World_Ocean_Basehtml_attributionTiles © Esri — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and EsriattributionTiles (C) Esri -- Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esrimax_zoom13\n \n \n \n \n \n \n \n \n \n \n NatGeoWorldMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.NatGeoWorldMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantNatGeo_World_Maphtml_attributionTiles © Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPCattributionTiles (C) Esri -- National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPCmax_zoom16\n \n \n \n \n \n \n \n \n \n \n WorldGrayCanvas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldGrayCanvas\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantCanvas/World_Light_Gray_Basehtml_attributionTiles © Esri — Esri, DeLorme, NAVTEQattributionTiles (C) Esri -- Esri, DeLorme, NAVTEQmax_zoom16\n \n \n \n \n \n \n \n \n \n \n ArcticImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticImagery\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Imagery/MapServer/tile/{z}/{y}/{x}variantArctic_Imageryhtml_attributionEarthstar GeographicsattributionEarthstar Geographicsmax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n ArcticOceanBase xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticOceanBase\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Ocean_Base/MapServer/tile/{z}/{y}/{x}variantArctic_Ocean_Basehtml_attributionTiles © 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 CommunityattributionTiles © 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 Communitymax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n ArcticOceanReference xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticOceanReference\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Ocean_Reference/MapServer/tile/{z}/{y}/{x}variantArctic_Ocean_Referencehtml_attributionTiles © 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 CommunityattributionTiles © 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 Communitymax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n AntarcticImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.AntarcticImagery\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Antarctic_Imagery/MapServer/tile/{z}/{y}/{x}variantAntarctic_Imageryhtml_attributionEarthstar GeographicsattributionEarthstar Geographicsmax_zoom24crsEPSG:3031bounds[[-9913957.327914657, -5730886.461772691], [9913957.327914657, 5730886.461773157]]\n \n \n \n \n \n \n \n \n \n \n AntarcticBasemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.AntarcticBasemap\n \n \n \n urlhttps://tiles.arcgis.com/tiles/C8EMgrsFcRFL6LrL/arcgis/rest/services/Antarctic_Basemap/MapServer/tile/{z}/{y}/{x}variantAntarctic_Basemaphtml_attributionImagery provided by NOAA National Centers for Environmental Information (NCEI); International Bathymetric Chart of the Southern Ocean (IBCSO); General Bathymetric Chart of the Oceans (GEBCO).attributionImagery provided by NOAA National Centers for Environmental Information (NCEI); International Bathymetric Chart of the Southern Ocean (IBCSO); General Bathymetric Chart of the Oceans (GEBCO).max_zoom9crsEPSG:3031bounds[[-4524583.19363305, -4524449.487765655], [4524449.4877656475, 4524583.193633042]]\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenWeatherMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 11 items\n \n \n \n \n \n \n Clouds xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Clouds\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantclouds\n \n \n \n \n \n \n \n \n \n \n CloudsClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.CloudsClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantclouds_cls\n \n \n \n \n \n \n \n \n \n \n Precipitation xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Precipitation\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantprecipitation\n \n \n \n \n \n \n \n \n \n \n PrecipitationClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.PrecipitationClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantprecipitation_cls\n \n \n \n \n \n \n \n \n \n \n Rain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Rain\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantrain\n \n \n \n \n \n \n \n \n \n \n RainClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.RainClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantrain_cls\n \n \n \n \n \n \n \n \n \n \n Pressure xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Pressure\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantpressure\n \n \n \n \n \n \n \n \n \n \n PressureContour xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.PressureContour\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantpressure_cntr\n \n \n \n \n \n \n \n \n \n \n Wind xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Wind\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantwind\n \n \n \n \n \n \n \n \n \n \n Temperature xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Temperature\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5varianttemp\n \n \n \n \n \n \n \n \n \n \n Snow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Snow\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantsnow\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HERE xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 30 items\n \n \n \n \n \n \n normalDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayCustom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayCustom\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.custommax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayGreyMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTransitMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTraffic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTraffic\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvariantnormal.traffic.daymax_zoom20typetraffictilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightGreyMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightTransitMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.reducedDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantreduced.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.reducedNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantreduced.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n basicMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.basicMap\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typebasetilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n mapLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.mapLabels\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typelabeltilelanguageengformatpngsize256\n \n \n \n \n \n \n \n \n \n \n trafficFlow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.trafficFlow\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvariantnormal.daymax_zoom20typeflowtilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n carnavDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.carnavDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantcarnav.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.grey.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTraffic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayTraffic\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvarianthybrid.traffic.daymax_zoom20typetraffictilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.pedestrianDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantpedestrian.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.pedestrianNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantpedestrian.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n satelliteDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.satelliteDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantsatellite.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.terrainDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantterrain.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.terrainDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantterrain.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HEREv3 xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 28 items\n \n \n \n \n \n \n normalDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayCustom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayCustom\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.custommax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayGreyMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayTransitMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightGreyMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightTransitMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.reducedDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantreduced.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.reducedNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantreduced.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n basicMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.basicMap\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typebasetilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n mapLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.mapLabels\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typelabeltilelanguageengformatpngsize256\n \n \n \n \n \n \n \n \n \n \n trafficFlow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.trafficFlow\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasetrafficvariantnormal.daymax_zoom20typeflowtilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n carnavDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.carnavDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantcarnav.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.grey.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.pedestrianDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantpedestrian.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.pedestrianNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantpedestrian.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n satelliteDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.satelliteDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantsatellite.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.terrainDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantterrain.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.terrainDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantterrain.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n FreeMapSK xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n FreeMapSK\n \n \n \n urlhttps://{s}.freemap.sk/T/{z}/{x}/{y}.jpegmin_zoom8max_zoom16subdomainsabcdbounds[[47.204642, 15.996093], [49.830896, 22.576904]]html_attribution© OpenStreetMap contributors, visualization CC-By-SA 2.0 Freemap.skattribution(C) OpenStreetMap contributors, visualization CC-By-SA 2.0 Freemap.sk\n \n \n \n \n \n \n \n \n \n \n MtbMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MtbMap\n \n \n \n urlhttp://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.pnghtml_attribution© OpenStreetMap contributors & USGSattribution(C) OpenStreetMap contributors & USGS\n \n \n \n \n \n \n \n \n \n \n CartoDB xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 10 items\n \n \n \n \n \n \n Positron xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.Positron\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_all\n \n \n \n \n \n \n \n \n \n \n PositronNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.PositronNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_nolabels\n \n \n \n \n \n \n \n \n \n \n PositronOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.PositronOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_only_labels\n \n \n \n \n \n \n \n \n \n \n DarkMatter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatter\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_all\n \n \n \n \n \n \n \n \n \n \n DarkMatterNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatterNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_nolabels\n \n \n \n \n \n \n \n \n \n \n DarkMatterOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatterOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_only_labels\n \n \n \n \n \n \n \n \n \n \n Voyager xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.Voyager\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager\n \n \n \n \n \n \n \n \n \n \n VoyagerNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_nolabels\n \n \n \n \n \n \n \n \n \n \n VoyagerOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_only_labels\n \n \n \n \n \n \n \n \n \n \n VoyagerLabelsUnder xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerLabelsUnder\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_labels_under\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HikeBike xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 2 items\n \n \n \n \n \n \n HikeBike xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HikeBike.HikeBike\n \n \n \n urlhttps://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsvarianthikebike\n \n \n \n \n \n \n \n \n \n \n HillShading xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HikeBike.HillShading\n \n \n \n urlhttps://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.pngmax_zoom15html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsvarianthillshading\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n BasemapAT xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n basemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.basemap\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom20html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantgeolandbasemap\n \n \n \n \n \n \n \n \n \n \n grau xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.grau\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapgrau\n \n \n \n \n \n \n \n \n \n \n overlay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.overlay\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapoverlay\n \n \n \n \n \n \n \n \n \n \n terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.terrain\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypegrauformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapgelaende\n \n \n \n \n \n \n \n \n \n \n surface xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.surface\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypegrauformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapoberflaeche\n \n \n \n \n \n \n \n \n \n \n highdpi xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.highdpi\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmaphidpi\n \n \n \n \n \n \n \n \n \n \n orthofoto xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.orthofoto\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom20html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmaporthofoto30cm\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n nlmaps xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n standaard xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.standaard\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantstandaard\n \n \n \n \n \n \n \n \n \n \n pastel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.pastel\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantpastel\n \n \n \n \n \n \n \n \n \n \n grijs xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.grijs\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantgrijs\n \n \n \n \n \n \n \n \n \n \n water xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.water\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantwater\n \n \n \n \n \n \n \n \n \n \n luchtfoto xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.luchtfoto\n \n \n \n urlhttps://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpegmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadaster\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n NASAGIBS xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n ModisTerraTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraTrueColorCR\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom9formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_CorrectedReflectance_TrueColor\n \n \n \n \n \n \n \n \n \n \n ModisTerraBands367CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraBands367CR\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom9formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_CorrectedReflectance_Bands367\n \n \n \n \n \n \n \n \n \n \n ViirsEarthAtNight2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ViirsEarthAtNight2012\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom8formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantVIIRS_CityLights_2012\n \n \n \n \n \n \n \n \n \n \n ModisTerraLSTDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraLSTDay\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom7formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Land_Surface_Temp_Dayopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraSnowCover xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraSnowCover\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom8formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_NDSI_Snow_Coveropacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraAOD xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraAOD\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom6formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Aerosolopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraChlorophyll xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraChlorophyll\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom7formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Chlorophyll_Aopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraBands721CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraBands721CR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_Bands721/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ModisAquaTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisAquaTrueColorCR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Aqua_CorrectedReflectance_TrueColor/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ModisAquaBands721CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisAquaBands721CR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Aqua_CorrectedReflectance_Bands721/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ViirsTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ViirsTrueColorCR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_SNPP_CorrectedReflectance_TrueColor/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n BlueMarble3413 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble3413\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3413/best/BlueMarble_NextGeneration/default/EPSG3413_500m/{z}/{y}/{x}.jpegmax_zoom5attributionImagery 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.html_attributionImagery 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.crsEPSG:3413\n \n \n \n \n \n \n \n \n \n \n BlueMarble3031 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble3031\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3031/best/BlueMarble_NextGeneration/default/EPSG3031_500m/{z}/{y}/{x}.jpegmax_zoom5attributionImagery 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.html_attributionImagery 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.crsEPSG:3031\n \n \n \n \n \n \n \n \n \n \n BlueMarble xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/BlueMarble_NextGeneration/default/EPSG3857_500m/{z}/{y}/{x}.jpegmax_zoom8attributionImagery 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.html_attributionImagery 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.\n \n \n \n \n \n \n \n \n \n \n ASTER_GDEM_Greyscale_Shaded_Relief xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ASTER_GDEM_Greyscale_Shaded_Relief\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/ASTER_GDEM_Greyscale_Shaded_Relief/default/GoogleMapsCompatible_Level12/{z}/{y}/{x}.jpgmax_zoom12attributionImagery 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.html_attributionImagery 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.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n NLS xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NLS\n \n \n \n urlhttps://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpghtml_attributionNational Library of Scotland Historic MapsattributionNational Library of Scotland Historic Mapsbounds[[49.6, -12], [61.7, 3]]min_zoom1max_zoom18subdomains0123statusbroken\n \n \n \n \n \n \n \n \n \n \n JusticeMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 9 items\n \n \n \n \n \n \n income xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.income\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantincomestatusbroken\n \n \n \n \n \n \n \n \n \n \n americanIndian xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.americanIndian\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantindianstatusbroken\n \n \n \n \n \n \n \n \n \n \n asian xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.asian\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantasianstatusbroken\n \n \n \n \n \n \n \n \n \n \n black xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.black\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantblackstatusbroken\n \n \n \n \n \n \n \n \n \n \n hispanic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.hispanic\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]varianthispanicstatusbroken\n \n \n \n \n \n \n \n \n \n \n multi xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.multi\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantmultistatusbroken\n \n \n \n \n \n \n \n \n \n \n nonWhite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.nonWhite\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantnonwhitestatusbroken\n \n \n \n \n \n \n \n \n \n \n white xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.white\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantwhitestatusbroken\n \n \n \n \n \n \n \n \n \n \n plurality xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.plurality\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantpluralstatusbroken\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GeoportailFrance xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 271 items\n \n \n \n \n \n \n plan xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.plan\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-85.0, -175.0], [85.0, 175.0]]min_zoom0max_zoom19apikeyessentielsformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.PLANIGNV2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n parcels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.parcels\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom19apikeyessentielsformatimage/pngstylenormalvariantCADASTRALPARCELS.PARCELLAIRE_EXPRESSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n orthos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.orthos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom21apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Adminexpress_cog_carto_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Adminexpress_cog_carto_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantADMINEXPRESS-COG-CARTO.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Adminexpress_cog_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Adminexpress_cog_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantADMINEXPRESS-COG.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Limites_administratives_express_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Limites_administratives_express_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantLIMITES_ADMINISTRATIVES_EXPRESS.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Slopes_Pac xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Slopes_Pac\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5446, -63.1614], [51.0991, 56.0018]]min_zoom0max_zoom15apikeyagricultureformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.SLOPES.PACTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hydrography_Bcae_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hydrography_Bcae_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom17apikeyagricultureformatimage/pngstylenormalvariantHYDROGRAPHY.BCAE.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2007 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2007\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2007TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2008 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2008\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2008TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2009 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2009\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2009TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Prairies_Sensibles_Bcae xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Prairies_Sensibles_Bcae\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenolegendvariantPRAIRIES.SENSIBLES.BCAETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Contour_Line xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Contour_Line\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom18apikeyaltimetrieformatimage/pngstylenormalvariantELEVATION.CONTOUR.LINETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Elevationgridcoverage_Shadow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Elevationgridcoverage_Shadow\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4069, -63.187], [50.9218, 55.8884]]min_zoom0max_zoom15apikeyaltimetrieformatimage/pngstyleestompage_grayscalevariantELEVATION.ELEVATIONGRIDCOVERAGE.SHADOWTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Elevationgridcoverage_Threshold xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Elevationgridcoverage_Threshold\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom3max_zoom17apikeyaltimetrieformatimage/pngstyleELEVATION.ELEVATIONGRIDCOVERAGE.THRESHOLDvariantELEVATION.ELEVATIONGRIDCOVERAGE.THRESHOLDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Level0 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Level0\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.51, -63.2529], [51.1388, 55.9472]]min_zoom6max_zoom18apikeyaltimetrieformatimage/pngstylenormalvariantELEVATION.LEVEL0TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Slopes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Slopes\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.5952, -178.206], [50.9308, 167.432]]min_zoom6max_zoom14apikeyaltimetrieformatimage/jpegstylenormalvariantELEVATION.SLOPESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevationgridcoverage_Highres_Quality xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevationgridcoverage_Highres_Quality\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyaltimetrieformatimage/pngstyleGraphe de source du RGE AltivariantELEVATIONGRIDCOVERAGE.HIGHRES.QUALITYTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Slopes_Mountain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Slopes_Mountain\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5446, -63.1614], [51.0991, 56.0018]]min_zoom0max_zoom17apikeyaltimetrieformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.SLOPES.MOUNTAINTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_1900typemaps xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_1900typemaps\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[48.4726, 1.62941], [49.1548, 3.0]]min_zoom10max_zoom15apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Bonne xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Bonne\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-0.49941, -55.9127], [7.88966, -50.0835]]min_zoom0max_zoom10apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.BONNETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Etatmajor10 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Etatmajor10\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[48.3847, 1.82682], [49.5142, 2.79738]]min_zoom6max_zoom16apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.ETATMAJOR10TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Etatmajor40 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Etatmajor40\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1844, -6.08889], [51.2745, 10.961]]min_zoom6max_zoom15apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.ETATMAJOR40TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Bduni_J1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Bduni_J1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeycartesformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.MAPS.BDUNI.J1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Overview xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Overview\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom1max_zoom8apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEWTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Scan50_1950 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Scan50_1950\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom3max_zoom15apikeycartesformatimage/jpegstyleSCAN50_1950variantGEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN50.1950TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Terrier_v1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Terrier_v1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2568, 8.36284], [43.1174, 9.75281]]min_zoom6max_zoom18apikeycartesformatimage/pngstylenolegendvariantGEOGRAPHICALGRIDSYSTEMS.TERRIER_V1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Terrier_v2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Terrier_v2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2568, 8.36284], [43.1174, 9.75282]]min_zoom6max_zoom18apikeycartesformatimage/pngstylenolegendvariantGEOGRAPHICALGRIDSYSTEMS.TERRIER_V2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha12_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha12_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA12_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha12_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha12_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA12_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CHA18TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA18_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA18_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC00R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC00_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC06R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC06R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CLC12RTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC12R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC12_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CLC18TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC18_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC18_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc90_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc90_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC90_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.1827, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC00TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC00R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC00_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.1827, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC06TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.2963, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC06RTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC06R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.0278, -5.91689], [51.2963, 11.0883]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC06R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.2963, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc90_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc90_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC90_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Dlt_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Dlt_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - type de forêtsvariantLANDCOVER.HR.DLT.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Dlt_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Dlt_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - type de forêtsvariantLANDCOVER.HR.DLT.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Gra_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Gra_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3925, -61.8133], [51.4949, 55.84]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - prairiesvariantLANDCOVER.HR.GRA.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Imd_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Imd_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5758, -62.3609], [51.4952, 56.1791]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux d'imperméabilisation des solsvariantLANDCOVER.HR.IMD.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Imd_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Imd_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5758, -62.3609], [51.4952, 56.1791]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux d'imperméabilisation des solsvariantLANDCOVER.HR.IMD.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Tcd_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Tcd_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux de couvert arborévariantLANDCOVER.HR.TCD.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Tcd_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Tcd_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux de couvert arborévariantLANDCOVER.HR.TCD.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Waw_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Waw_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - zones humides et surfaces en eaux permanentesvariantLANDCOVER.HR.WAW.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Areamanagement_Zfu xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Areamanagement_Zfu\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstylenormalvariantAREAMANAGEMENT.ZFUTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Areamanagement_Zus xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Areamanagement_Zus\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstylenormalvariantAREAMANAGEMENT.ZUSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Communes_Prioritydisctrict xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Communes_Prioritydisctrict\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeyeconomieformatimage/pngstylenormalvariantCOMMUNES.PRIORITYDISCTRICTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Dreal_Zonage_pinel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Dreal_Zonage_pinel\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[47.2719, -5.15012], [48.9064, -1.00687]]min_zoom6max_zoom18apikeyeconomieformatimage/pngstylenormalvariantDREAL.ZONAGE_PINELTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Enfants_0_17_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Enfants_0_17_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.ENFANTS.0.17.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Logements_Surface_Moyenne_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Logements_Surface_Moyenne_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.LOGEMENTS.SURFACE.MOYENNE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Niveau_De_Vie_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Niveau_De_Vie_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.NIVEAU.DE.VIE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Familles_Monoparentales_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Familles_Monoparentales_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.FAMILLES.MONOPARENTALES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_25_39_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_25_39_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.25.39.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_40_54_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_40_54_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.40.54.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_55_64_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_55_64_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.55.64.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Apres_1990_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Apres_1990_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.APRES.1990.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Avant_1945_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Avant_1945_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.AVANT.1945.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Collectifs_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Collectifs_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.COLLECTIFS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Construits_1945_1970_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Construits_1945_1970_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.CONSTRUITS.1945.1970.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Construits_1970_1990_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Construits_1970_1990_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.CONSTRUITS.1970.1990.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Sociaux_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Sociaux_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.SOCIAUX.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_1_Personne_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_1_Personne_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.1.PERSONNE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_5_Personnes_Ouplus_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_5_Personnes_Ouplus_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.5.PERSONNES.OUPLUS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Maison_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Maison_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.MAISON.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Pauvres_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Pauvres_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.PAUVRES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Proprietaires_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Proprietaires_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.PROPRIETAIRES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Plus_65_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Plus_65_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.PLUS.65.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Population xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Population\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.POPULATIONTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Debroussaillement xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Debroussaillement\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom18apikeyenvironnementformatimage/pngstylenolegendvariantDEBROUSSAILLEMENTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Forets_Publiques xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Forets_Publiques\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom3max_zoom16apikeyenvironnementformatimage/pngstyleFORETS PUBLIQUES ONFvariantFORETS.PUBLIQUESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystem_Dfci xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystem_Dfci\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEM.DFCITileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestareas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestareas\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTAREASTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestinventory_V1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestinventory_V1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTINVENTORY.V1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestinventory_V2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestinventory_V2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTINVENTORY.V2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Sylvoecoregions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Sylvoecoregions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.SYLVOECOREGIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Sylvoecoregions_Alluvium xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Sylvoecoregions_Alluvium\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.SYLVOECOREGIONS.ALLUVIUMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Apb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Apb\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APBTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Apg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Apg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Aphn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Aphn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APHNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Aplg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Aplg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenolegendvariantPROTECTEDAREAS.APLGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Bios xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Bios\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.BIOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Gp xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Gp\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.GPTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Inpg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Inpg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.INPGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Cdl_Parcels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Cdl_Parcels\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CDL.PARCELSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Cdl_Perimeter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Cdl_Perimeter\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CDL.PERIMETERTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Conservatoires xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Conservatoires\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CONSERVATOIRESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Rn_Perimeter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Rn_Perimeter\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom0max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.RN.PERIMETERTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pnm xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pnm\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pnr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pnr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Prsf xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Prsf\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeyenvironnementformatimage/pngstylePOINT RENCONTRE SECOURS FORETvariantPROTECTEDAREAS.PRSFTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Ramsar xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Ramsar\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RAMSARTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rb\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RBTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Ripn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Ripn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RIPNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom0max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rnc xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rnc\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNCTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rncf xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rncf\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNCFTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Sic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Sic\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.SICTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff1_Sea xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff1_Sea\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF1.SEATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff2_Sea xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff2_Sea\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF2.SEATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Zpr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Zpr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenolegendvariantPROTECTEDAREAS.ZPRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Zps xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Zps\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZPSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedsites_Mnhn_Reserves_regionales xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedsites_Mnhn_Reserves_regionales\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDSITES.MNHN.RESERVES-REGIONALESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.CONSTRUCTIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.COUVERTURETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.COUVERTURE.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGE.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGE.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Visu_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Visu_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.2815, -0.318517], [44.0543, 1.22575]]min_zoom6max_zoom18apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.VISU.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Visu_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Visu_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.2815, -0.321664], [44.1082, 1.22575]]min_zoom6max_zoom18apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.VISU.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hr_Orthoimagery_Orthophotos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hr_Orthoimagery_Orthophotos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [51.1124, 55.8464]]min_zoom6max_zoom19apikeyorthoformatimage/jpegstylenormalvariantHR.ORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophos_Restrictedareas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophos_Restrictedareas\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.9723, -178.309], [51.3121, 168.298]]min_zoom6max_zoom16apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOS.RESTRICTEDAREASTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Bdortho xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Bdortho\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.7643, -178.187], [51.1124, 168.19]]min_zoom6max_zoom18apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.BDORTHOTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Coast2000 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Coast2000\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.301, -5.21565], [51.1233, 2.60783]]min_zoom6max_zoom18apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.COAST2000TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ilesdunord xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ilesdunord\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[17.8626, -63.1986], [18.1701, -62.7828]]min_zoom0max_zoom19apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ILESDUNORDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -62.9717], [51.1124, 55.8464]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRCTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Pcrs_Lamb93 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Pcrs_Lamb93\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.6976, -3.80779], [48.8107, 6.92319]]min_zoom6max_zoom21apikeyorthoformatimage/jpegstylenormalvariantPCRS.LAMB93TileMatrixSetLAMB93_5cm_EPSGstatusbroken\n \n \n \n \n \n \n \n \n \n \n Thr_Orthoimagery_Orthophotos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Thr_Orthoimagery_Orthophotos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.4378, -6.92466], [51.9098, 11.4965]]min_zoom6max_zoom21apikeyorthoformatimage/jpegstylenormalvariantTHR.ORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_1950_1965 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_1950_1965\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -67.7214], [51.0945, 55.8464]]min_zoom3max_zoom18apikeyorthohistoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.1950-1965TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_1980_1995 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_1980_1995\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -2.37153], [49.7785, 9.67536]]min_zoom3max_zoom18apikeyorthohistoformatimage/pngstyleBDORTHOHISTORIQUEvariantORTHOIMAGERY.ORTHOPHOTOS.1980-1995TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -62.9717], [51.1124, 55.8464]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.5538, -3.74871], [50.3767, 7.17132]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.1508, -2.37153], [49.6341, 7.22637]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.20863], [51.0945, 8.25674]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3215, -3.74871], [50.1839, 9.66314]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -0.185295], [46.4137, 7.74363]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.19371], [51.1124, 8.25765]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -3.74871], [50.1928, 9.66314]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -2.68142], [49.4512, 7.74363]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom20apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [51.1124, 55.8464]]min_zoom6max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Socle_asp_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Socle_asp_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.SOCLE-ASP.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Urgence_Alex xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Urgence_Alex\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.8095, 7.07917], [44.1903, 7.64199]]min_zoom6max_zoom20apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.URGENCE.ALEXTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2000 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2000\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2000TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2000_2005 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2000_2005\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [64.0698, 55.8561]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2000-2005TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2001 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2001\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[4.47153, -61.2472], [50.3765, 7.23234]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2001TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[4.49867, -61.2472], [50.3765, 9.68861]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2002TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2003 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2003\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2003TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2004 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2004\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2004TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2005 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2005\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2005TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2006 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2006\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2006TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2006_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2006_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2006-2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2007 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2007\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2007TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2008 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2008\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2008TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2009 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2009\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2009TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2011_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2011_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.0945, 55.8561]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2011-2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [50.3856, 55.8464]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.20863], [51.1124, 8.25765]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -3.74871], [50.1928, 9.66314]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -2.68142], [49.4512, 7.74363]]min_zoom6max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3539, -53.2686], [50.6037, 55.5544]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.32, -54.1373], [50.6549, 55.8441]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1796], [51.1117, 55.8465]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4094, -63.1702], [51.0841, 55.8649]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4094, -63.1702], [51.1117, 55.8649]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-13.0169, -63.1724], [51.1117, 45.3136]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3733, -67.7132], [69.3108, 55.7216]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Rapideye_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Rapideye_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2014, -5.80725], [50.9218, 10.961]]min_zoom0max_zoom15apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.RAPIDEYE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Rapideye_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Rapideye_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.0227, -5.80725], [51.1752, 10.961]]min_zoom0max_zoom15apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.RAPIDEYE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[44.8809, 0.563585], [50.3879, 4.29191]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2013TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.8141], [51.106, 55.856]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.85], [51.1123, 55.8562]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.8534], [51.1123, 55.8562]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Bdcarto_etat_major_Niveau3 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Bdcarto_etat_major_Niveau3\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3263, -5.15012], [51.0938, 7.19384]]min_zoom6max_zoom16apikeysolformatimage/pngstylenormalvariantBDCARTO_ETAT-MAJOR.NIVEAU3TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Bdcarto_etat_major_Niveau4 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Bdcarto_etat_major_Niveau4\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeysolformatimage/pngstylenormalvariantBDCARTO_ETAT-MAJOR.NIVEAU4TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Buildings_Buildings xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Buildings_Buildings\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantBUILDINGS.BUILDINGSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalnames_Names xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalnames_Names\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantGEOGRAPHICALNAMES.NAMESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hydrography_Hydrography xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hydrography_Hydrography\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantHYDROGRAPHY.HYDROGRAPHYTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetwork_Commontransportelements_Markerpost xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetwork_Commontransportelements_Markerpost\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom10max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORK.COMMONTRANSPORTELEMENTS.MARKERPOSTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Railways xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Railways\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.RAILWAYSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Roads xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Roads\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.ROADSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Runways xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Runways\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.RUNWAYSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Utilityandgovernmentalservices_All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Utilityandgovernmentalservices_All\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [71.5841, 55.9259]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantUTILITYANDGOVERNMENTALSERVICES.ALLTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hedge_Hedge xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hedge_Hedge\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom7max_zoom18apikeytopographieformatimage/pngstylenormalvarianthedge.hedgeTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_1te xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_1te\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom4max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER 1TEvariantSECUROUTE.TE.1TETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_2te48 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_2te48\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER 2TE48variantSECUROUTE.TE.2TE48TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_All\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleTOUS LES FRANCHISSEMENTSvariantSECUROUTE.TE.ALLTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Oa xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Oa\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleAUTRES FRANCHISSEMENTSvariantSECUROUTE.TE.OATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Pn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Pn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleFRANCHISSEMENTS PASSAGE A NIVEAUvariantSECUROUTE.TE.PNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Pnd xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Pnd\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleFRANCHISSEMENTS PASSAGE A NIVEAU DIFFICILEvariantSECUROUTE.TE.PNDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te120 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te120\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE120variantSECUROUTE.TE.TE120TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te72 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te72\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE72variantSECUROUTE.TE.TE72TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te94 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te94\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE94variantSECUROUTE.TE.TE94TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Roads_Direction xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Roads_Direction\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom15max_zoom18apikeytransportsformatimage/pngstylenormalvariantTRANSPORTNETWORKS.ROADS.DIRECTIONTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transports_Drones_Restrictions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transports_Drones_Restrictions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom3max_zoom15apikeytransportsformatimage/pngstylenormalvariantTRANSPORTS.DRONES.RESTRICTIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OneMapSG xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n Default xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Default\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantDefaultmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Night xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Night\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantNightmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Original xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Original\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantOriginalmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Grey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Grey\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantGreymin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n LandLot xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.LandLot\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantLandLotmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n USGS xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n USTopo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USTopo\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n USImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USImagery\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n USImageryTopo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USImageryTopo\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n WaymarkedTrails xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 6 items\n \n \n \n \n \n \n hiking xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.hiking\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)varianthiking\n \n \n \n \n \n \n \n \n \n \n cycling xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.cycling\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantcycling\n \n \n \n \n \n \n \n \n \n \n mtb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.mtb\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantmtb\n \n \n \n \n \n \n \n \n \n \n slopes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.slopes\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantslopes\n \n \n \n \n \n \n \n \n \n \n riding xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.riding\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantriding\n \n \n \n \n \n \n \n \n \n \n skating xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.skating\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantskating\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenAIP xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenAIP\n \n \n \n urlhttps://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}html_attributionopenAIP Data (CC-BY-NC-SA)attributionopenAIP Data (CC-BY-NC-SA)extpngmin_zoom4max_zoom14tmsTruedetectRetinaTruesubdomains12\n \n \n \n \n \n \n \n \n \n \n OpenSnowMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 1 items\n \n \n \n \n \n \n pistes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenSnowMap.pistes\n \n \n \n urlhttps://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.pngmin_zoom9max_zoom18html_attributionMap data: © OpenStreetMap contributors & ODbL, © www.opensnowmap.org CC-BY-SAattributionMap data: (C) OpenStreetMap contributors & ODbL, (C) www.opensnowmap.org CC-BY-SAvariantpistes\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AzureMaps xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n MicrosoftImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftImagery\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.imagerysubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseDarkGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseDarkGrey\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.darkgreysubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseRoad xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseRoad\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.roadsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseHybridRoad xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseHybridRoad\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.hybrid.roadsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftTerraMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftTerraMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.terra.mainsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftWeatherInfraredMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftWeatherInfraredMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&timeStamp={timeStamp}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.apiVersion2.0variantmicrosoft.weather.infrared.mainsubscriptionKeylanguageen-UStimeStamp2021-05-08T09:03:00Z\n \n \n \n \n \n \n \n \n \n \n MicrosoftWeatherRadarMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftWeatherRadarMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&timeStamp={timeStamp}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.apiVersion2.0variantmicrosoft.weather.radar.mainsubscriptionKeylanguageen-UStimeStamp2021-05-08T09:03:00Z\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SwissFederalGeoportal xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 4 items\n \n \n \n \n \n \n NationalMapColor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.NationalMapColor\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18\n \n \n \n \n \n \n \n \n \n \n NationalMapGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.NationalMapGrey\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-grau/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18\n \n \n \n \n \n \n \n \n \n \n SWISSIMAGE xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.SWISSIMAGE\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom19\n \n \n \n \n \n \n \n \n \n \n JourneyThroughTime xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.JourneyThroughTime\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.zeitreihen/default/{time}/3857/{z}/{x}/{y}.pnghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18time18641231\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Gaode xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 2 items\n \n \n \n \n \n \n Normal xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Gaode.Normal\n \n \n \n urlhttp://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}max_zoom19attribution© Gaode.comhtml_attribution© Gaode.com\n \n \n \n \n \n \n \n \n \n \n Satellite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Gaode.Satellite\n \n \n \n urlhttp://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}max_zoom19attribution© Gaode.comhtml_attribution© Gaode.com\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Strava xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.All\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/all/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Ride xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Ride\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/ride/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Run xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Run\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/run/bluered/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Water xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Water\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/water/blue/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Winter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Winter\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/winter/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OrdnanceSurvey xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n Road xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Road\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Road_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Road_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Road_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Road_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Outdoor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Outdoor\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Outdoor_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Outdoor_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Outdoor_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Outdoor_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Light xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Light\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Light_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Light_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Light_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Light_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Leisure_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Leisure_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Leisure_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom5max_zoom_premium9bounds[[0, 0], [700000, 1300000]]" + }, + { + "objectID": "lectures/lesson-21-contextily-parquet.html#acknowledgements", + "href": "lectures/lesson-21-contextily-parquet.html#acknowledgements", + "title": "17  Parquet and contextily", + "section": "17.5 Acknowledgements", + "text": "17.5 Acknowledgements\nThis lesson was adapted from teh MPC’s notebook Accessing US Census data with the Planetary Compyter STAC API." + }, { "objectID": "lectures/lesson-14-multidimensional-data.html#introduction", "href": "lectures/lesson-14-multidimensional-data.html#introduction", - "title": "17  NetCDF", - "section": "17.1 Introduction", - "text": "17.1 Introduction\nEfficient and reproducible data analysis begins with choosing a proper format to store our data, particularly when working with large, complex, multi-dimensional datasets. Consider, for example, the following Earth System Data Cube from Mahecha et al. 2020, which measures nine environmental variables at high resolution across space and time. We can consider this dataset large (high-resolution means we have a big file), complex (multiple variables), and multi-dimensional (each variable is measured along three dimensions: latitude, longitude, and time). Additionally, necessary metadata must accompany the dataset to make it functional, such as units of measurement for variables, information about the authors, and processing software used.\n\n\n\nMahecha et al. 2020 . Visualization of the implemented Earth system data cube. The figure shows from the top left to bottom right the variables sensible heat (H), latent heat (LE), gross primary production (GPP), surface moisture (SM), land surface temperature (LST), air temperature (Tair), cloudiness (C), precipitation (P), and water vapour (V). The resolution in space is 0.25° and 8 d in time, and we are inspecting the time from May 2008 to May 2010; the spatial range is from 15° S to 60° N, and 10° E to 65° W.\n\n\nKeeping complex datasets in a format that facilitates access, processing, sharing, and archiving can be at least as important as which tools we use to analyze them. In this lesson, we will review a popuar format for working with multi-dimensional datasets called NetCDF. `" + "title": "18  NetCDF", + "section": "18.1 Introduction", + "text": "18.1 Introduction\nEfficient and reproducible data analysis begins with choosing a proper format to store our data, particularly when working with large, complex, multi-dimensional datasets. Consider, for example, the following Earth System Data Cube from Mahecha et al. 2020, which measures nine environmental variables at high resolution across space and time. We can consider this dataset large (high-resolution means we have a big file), complex (multiple variables), and multi-dimensional (each variable is measured along three dimensions: latitude, longitude, and time). Additionally, necessary metadata must accompany the dataset to make it functional, such as units of measurement for variables, information about the authors, and processing software used.\n\n\n\nMahecha et al. 2020 . Visualization of the implemented Earth system data cube. The figure shows from the top left to bottom right the variables sensible heat (H), latent heat (LE), gross primary production (GPP), surface moisture (SM), land surface temperature (LST), air temperature (Tair), cloudiness (C), precipitation (P), and water vapour (V). The resolution in space is 0.25° and 8 d in time, and we are inspecting the time from May 2008 to May 2010; the spatial range is from 15° S to 60° N, and 10° E to 65° W.\n\n\nKeeping complex datasets in a format that facilitates access, processing, sharing, and archiving can be at least as important as which tools we use to analyze them. In this lesson, we will review a popuar format for working with multi-dimensional datasets called NetCDF. `" }, { "objectID": "lectures/lesson-14-multidimensional-data.html#what-is-netcdf", "href": "lectures/lesson-14-multidimensional-data.html#what-is-netcdf", - "title": "17  NetCDF", - "section": "17.2 What is NetCDF", - "text": "17.2 What is NetCDF\nNetCDF (network Common Data Form) is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. NetCDF was initially developed at the Unidata Program Center and is supported on almost all platforms, and parsers exist for most scientific programming languages.\nThe NetCDF documentation outlines that this data format is desgined to be:\n\n\nSelf-describing: Information describing the data contents of the file is embedded within the data file itself. This means that there is a header describing the layout of the rest of the file and arbitrary file metadata.\nScalable: Small subsets of large datasets may be accessed efficiently through netCDF interfaces, even from remote servers.\nPortable: A NetCDF file is machine-independent i.e. it can be accessed by computers with different ways of storing integers, characters, and floating-point numbers.\nAppendable: Data may be appended to a properly structured NetCDF file without copying the dataset or redefining its structure.\nSharable: One writer and multiple readers may simultaneously access the same NetCDF file.\nArchivable: Access to all earlier forms of NetCDF data will be supported by current and future versions of the software." + "title": "18  NetCDF", + "section": "18.2 What is NetCDF", + "text": "18.2 What is NetCDF\nNetCDF (network Common Data Form) is a set of software libraries and self-describing, machine-independent data formats that support the creation, access, and sharing of array-oriented scientific data. NetCDF was initially developed at the Unidata Program Center and is supported on almost all platforms, and parsers exist for most scientific programming languages.\nThe NetCDF documentation outlines that this data format is desgined to be:\n\n\nSelf-describing: Information describing the data contents of the file is embedded within the data file itself. This means that there is a header describing the layout of the rest of the file and arbitrary file metadata.\nScalable: Small subsets of large datasets may be accessed efficiently through netCDF interfaces, even from remote servers.\nPortable: A NetCDF file is machine-independent i.e. it can be accessed by computers with different ways of storing integers, characters, and floating-point numbers.\nAppendable: Data may be appended to a properly structured NetCDF file without copying the dataset or redefining its structure.\nSharable: One writer and multiple readers may simultaneously access the same NetCDF file.\nArchivable: Access to all earlier forms of NetCDF data will be supported by current and future versions of the software." }, { "objectID": "lectures/lesson-14-multidimensional-data.html#data-model", "href": "lectures/lesson-14-multidimensional-data.html#data-model", - "title": "17  NetCDF", - "section": "17.3 Data Model", - "text": "17.3 Data Model\nThe NetCDF data model is the way that NetCDF organizes data. This lesson will follow the Classic NetCDF Data Model, which is at the core of all netCDF files. \nThe model consists of three key components: variables, dimensions, and attributes.\n\nVariables are N-dimensional arrays of data. We can think of these as varying/measured/dependent quantities.\nDimensions describe the axes of the data arrays. A dimension has a name and a length. We can think of these as the constant/fixed/independent quantities at which we measure the variables.\nAttributes are small notes or supplementary metadata to annotate a variable or the file as a whole.\n\n\n\n\nClassic NetCDF Data Model (NetCDF documentation)" + "title": "18  NetCDF", + "section": "18.3 Data Model", + "text": "18.3 Data Model\nThe NetCDF data model is the way that NetCDF organizes data. This lesson will follow the Classic NetCDF Data Model, which is at the core of all netCDF files. \nThe model consists of three key components: variables, dimensions, and attributes.\n\nVariables are N-dimensional arrays of data. We can think of these as varying/measured/dependent quantities.\nDimensions describe the axes of the data arrays. A dimension has a name and a length. We can think of these as the constant/fixed/independent quantities at which we measure the variables.\nAttributes are small notes or supplementary metadata to annotate a variable or the file as a whole.\n\n\n\n\nClassic NetCDF Data Model (NetCDF documentation)" }, { "objectID": "lectures/lesson-14-multidimensional-data.html#metadata-standards", "href": "lectures/lesson-14-multidimensional-data.html#metadata-standards", - "title": "17  NetCDF", - "section": "17.4 Metadata Standards", - "text": "17.4 Metadata Standards\nThe most commonly used metadata standard for geospatial data is the Climate and Forecast metadata standard, also called the CF conventions.\n\nThe CF conventions are specifically designed to promote the processing and sharing of files created with the NetCDF API. Principles of CF include self-describing data (no external tables needed for understanding), metadata equally readable by humans and software, minimum redundancy, and maximum simplicity. (CF conventions FAQ)\n\nThe CF conventions provide a unique standardized name and precise description of over 1,000 physical variables. To maximize the reusability of our data, it is best to include a variable’s standardized name as an attribute called standard_name. Variables should also include a units attribute. This attribute should be a string that can be recognized by UNIDATA’s UDUNITS package. In these links you can find:\n\na table with all of the CF convention’s standard names, and\na list of the units found in the UDUNITS database maintained by the North Carolina Institute for Climate Studies." + "title": "18  NetCDF", + "section": "18.4 Metadata Standards", + "text": "18.4 Metadata Standards\nThe most commonly used metadata standard for geospatial data is the Climate and Forecast metadata standard, also called the CF conventions.\n\nThe CF conventions are specifically designed to promote the processing and sharing of files created with the NetCDF API. Principles of CF include self-describing data (no external tables needed for understanding), metadata equally readable by humans and software, minimum redundancy, and maximum simplicity. (CF conventions FAQ)\n\nThe CF conventions provide a unique standardized name and precise description of over 1,000 physical variables. To maximize the reusability of our data, it is best to include a variable’s standardized name as an attribute called standard_name. Variables should also include a units attribute. This attribute should be a string that can be recognized by UNIDATA’s UDUNITS package. In these links you can find:\n\na table with all of the CF convention’s standard names, and\na list of the units found in the UDUNITS database maintained by the North Carolina Institute for Climate Studies." }, { "objectID": "lectures/lesson-14-multidimensional-data.html#acknowledgements", "href": "lectures/lesson-14-multidimensional-data.html#acknowledgements", - "title": "17  NetCDF", - "section": "17.5 Acknowledgements", - "text": "17.5 Acknowledgements\nThe NetCDF section in this lesson is adapted from the lesson I prepared for the Arctic Data Center’s course on scalable computing:\nS. Jeanette Clark, Matthew B. Jones, Samantha Csik, Carmen Galaz García, Bryce Mecum, Natasha Haycock-Chavez, Daphne Virlar-Knight, Juliet Cohen, Anna Liljedahl. 2023. Scalable and Computationally Reproducible Approaches to Arctic Research. Arctic Data Center. doi:10.18739/A2QF8JM2V" + "title": "18  NetCDF", + "section": "18.5 Acknowledgements", + "text": "18.5 Acknowledgements\nThe NetCDF section in this lesson is adapted from the lesson I prepared for the Arctic Data Center’s course on scalable computing:\nS. Jeanette Clark, Matthew B. Jones, Samantha Csik, Carmen Galaz García, Bryce Mecum, Natasha Haycock-Chavez, Daphne Virlar-Knight, Juliet Cohen, Anna Liljedahl. 2023. Scalable and Computationally Reproducible Approaches to Arctic Research. Arctic Data Center. doi:10.18739/A2QF8JM2V" }, { "objectID": "lectures/lesson-15-xarray.html#variables-dimensions-and-attributes", "href": "lectures/lesson-15-xarray.html#variables-dimensions-and-attributes", - "title": "18  xarray", - "section": "18.1 Variables, dimensions, and attributes", - "text": "18.1 Variables, dimensions, and attributes\nVariables, dimensions, and attributes refer to the same components of NetCDF files we reviewed in the previous section. The following is a concrete example of variables, dimensions, and attributes that will guide the rest of the section.\nImagine the following scenario:\nWe have a network of 25 weather stations. They are located in a square grid: starting at 30°0′N 60°0′E, there is a station every 10° North and every 10° East. Each station measures the air temperature at a set time for three days, starting on September 1st, 2022. On the first day, all stations record a temperature of 0°C. On the second day, all temperatures are 1°C, and on the third day, all temperatures are 2°C. What are the variables, dimensions and attributes for this data?\n\n\n\n\n\n\nAnswer\n\n\n\n\n\nVariables: There is a single variable being measured: temperature. The variable values can be represented as a 5x5x3 array, with constant values for each day.\nDimensions: This dataset has three dimensions: time, latitude, and longitude. Time indicates when the measurement happened, we can encode it as the dates 2022-09-01, 2022-09-02, and 2022-09-03. The pairs of latitude and longitude values indicate the positions of the weather stations. Latitude has values 30, 40, 50, 60, and 70, measured in degrees North. Longitude has values 60, 70, 80, 90, and 100, measured in degrees East.\n\nAttributes: Let’s divide these into attributes for the variable, the dimensions, and the whole dataset:\n\nVariable attributes:\n\nTemperature attributes:\n\nstandard_name: air_temperature\nunits: degree_C\n\n\nDimension attributes:\n\nTime attributes:\n\ndescription: date of measurement\n\nLatitude attributes:\n\nstandard_name: grid_latitude\nunits: degrees_N\n\nLongitude attributes:\n\nsatandard_name: grid_longitude\nunits: degree_E\n\n\nDataset attributes:\n\ntitle: Temperature Measurements at Weather Stations\nsummary: an example of NetCDF data format\n\n\n\n\n\nNow imagine we calculate the average temperature over time at each weather station, and we wish to incorporate this data into the same dataset. How will adding the average temperature data change the dataset’s variables, attributes, and dimensions?\n\n\n\n\n\n\nAnswer\n\n\n\n\n\nVariables: Now we are measuring two variables: temperature and average temperature. The temperature data stays the same. We can represent the average temperature as a single 5x5 array with value 1 at each cell.\nDimensions: This dataset still has three dimensions: time, latitude, and longitude. The temperature variable uses all three dimensions, and the average temperature variable only uses two (latitude and longitude). This is ok! The dataset’s dimensions are the union of the dimensions of all the variables in the dataset. Variables in the same dataset may have all, some, or no dimensions in common.\n\nAttributes: To begin with, we need to keep all the previous attributes. Notice that the dataset’s title is general enough that we don’t need to update it. The only update we need to do is add the attributes for our new average temperature variable:\n\nAverage temperature attributes:\n\nstandard_name: average_air_temperature\ndescription: average temperature over three days" + "title": "19  xarray", + "section": "19.1 Variables, dimensions, and attributes", + "text": "19.1 Variables, dimensions, and attributes\nVariables, dimensions, and attributes refer to the same components of NetCDF files we reviewed in the previous section. The following is a concrete example of variables, dimensions, and attributes that will guide the rest of the section.\nImagine the following scenario:\nWe have a network of 25 weather stations. They are located in a square grid: starting at 30°0′N 60°0′E, there is a station every 10° North and every 10° East. Each station measures the air temperature at a set time for three days, starting on September 1st, 2022. On the first day, all stations record a temperature of 0°C. On the second day, all temperatures are 1°C, and on the third day, all temperatures are 2°C. What are the variables, dimensions and attributes for this data?\n\n\n\n\n\n\nAnswer\n\n\n\n\n\nVariables: There is a single variable being measured: temperature. The variable values can be represented as a 5x5x3 array, with constant values for each day.\nDimensions: This dataset has three dimensions: time, latitude, and longitude. Time indicates when the measurement happened, we can encode it as the dates 2022-09-01, 2022-09-02, and 2022-09-03. The pairs of latitude and longitude values indicate the positions of the weather stations. Latitude has values 30, 40, 50, 60, and 70, measured in degrees North. Longitude has values 60, 70, 80, 90, and 100, measured in degrees East.\n\nAttributes: Let’s divide these into attributes for the variable, the dimensions, and the whole dataset:\n\nVariable attributes:\n\nTemperature attributes:\n\nstandard_name: air_temperature\nunits: degree_C\n\n\nDimension attributes:\n\nTime attributes:\n\ndescription: date of measurement\n\nLatitude attributes:\n\nstandard_name: grid_latitude\nunits: degrees_N\n\nLongitude attributes:\n\nsatandard_name: grid_longitude\nunits: degree_E\n\n\nDataset attributes:\n\ntitle: Temperature Measurements at Weather Stations\nsummary: an example of NetCDF data format\n\n\n\n\n\nNow imagine we calculate the average temperature over time at each weather station, and we wish to incorporate this data into the same dataset. How will adding the average temperature data change the dataset’s variables, attributes, and dimensions?\n\n\n\n\n\n\nAnswer\n\n\n\n\n\nVariables: Now we are measuring two variables: temperature and average temperature. The temperature data stays the same. We can represent the average temperature as a single 5x5 array with value 1 at each cell.\nDimensions: This dataset still has three dimensions: time, latitude, and longitude. The temperature variable uses all three dimensions, and the average temperature variable only uses two (latitude and longitude). This is ok! The dataset’s dimensions are the union of the dimensions of all the variables in the dataset. Variables in the same dataset may have all, some, or no dimensions in common.\n\nAttributes: To begin with, we need to keep all the previous attributes. Notice that the dataset’s title is general enough that we don’t need to update it. The only update we need to do is add the attributes for our new average temperature variable:\n\nAverage temperature attributes:\n\nstandard_name: average_air_temperature\ndescription: average temperature over three days" }, { "objectID": "lectures/lesson-15-xarray.html#xarray.dataarray", "href": "lectures/lesson-15-xarray.html#xarray.dataarray", - "title": "18  xarray", - "section": "18.2 xarray.DataArray", - "text": "18.2 xarray.DataArray\nThe xarray.DataArray is the primary data structure of the xarray package. It is an n-dimensional array with labeled dimensions. We can think of it as representing a single variable in the NetCDF data format: it holds the variable’s values, dimensions, and attributes.\nApart from variables, dimensions, and attributes, xarray introduces one more piece of information to keep track of a dataset’s content: in xarray each dimension has at least one set of coordinates. A dimension’s coordinates indicate the dimension’s values. We can think of the coordinate’s values as the tick labels along a dimension.\nFor example, in our previous exercise about temperature measured in weather stations, latitude is a dimension, and the latitude’s coordinates are 30, 40, 50, 60, and 70 because those are the latitude values at which we are collecting temperature data. In that same exercise, time is a dimension, and its coordinates are 2022-09-1, 2022-09-02, and 2022-09-03.\n\nHere you can read more about the xarray terminology.\n\n18.2.1 Create an xarray.DataArray\nLet’s suppose we want to make an xarray.DataArray that includes the information from our previous example about measuring temperature across three days. First, we import all the necessary libraries.\n\nimport os \nimport pandas as pd\nimport numpy as np\n\nimport xarray as xr # This is the package we'll explore\n\nVariable Values\nThe underlying data in the xarray.DataArray is a numpy.array that holds the variable values. So we can start by making a numpy.array with our mock temperature data:\n\n# values of a single variable at each point of the coords \ntemp_data = np.array([np.zeros((5,5)), \n np.ones((5,5)), \n np.ones((5,5))*2]).astype(int)\ntemp_data\n\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\n\n\nWe could think this is “all” we need to represent our data. But if we stopped at this point, we would need to\n\nremember that the numbers in this array represent the temperature in degrees Celsius (doesn’t seem too bad),\nremember that the first dimension of the array represents time, the second latitude and the third longitude (maybe ok), and\nkeep track of the range of values that time, latitude, and longitude take (not so good).\n\nKeeping track of all this information separately could quickly get messy and could make it challenging to share our data and analyses with others. This is what the netCDF data model and xarray aim to simplify. We can get data and its descriptors together in an xarray.DataArray by adding the dimensions over which the variable is being measured and including attributes that appropriately describe dimensions and variables.\nDimensions and Coordinates\nTo specify the dimensions of our upcoming xarray.DataArray, we must examine how we’ve constructed the numpy.array holding the temperature data. The diagram below shows how the dimensions of temp_data are ordered: the first dimension is time, the second is latitude, and the third is longitude.\n\nRemember that indexing in 2-dimensional numpy.arrays starts at the top-left corner of the array, and it is done by rows first and columns second (like matrices). This is why latitude is the second dimension and longitude the third. From the diagram, we can also see that the coordinates (values of each dimension) are as follows:\n\ntime coordinates are 2022-09-01, 2022-09-02, 2022-09-03\nlatitude coordinates are 70, 60, 50, 40, 30 (notice decreasing order)\nlongitude coordinates are 60, 70, 80, 90, 100 (notice increasing order)\n\nWe add the dimensions as a tuple of strings and coordinates as a dictionary:\n\n# names of the dimensions in the required order\ndims = ('time', 'lat', 'lon')\n\n# create coordinates to use for indexing along each dimension \ncoords = {'time' : pd.date_range(\"2022-09-01\", \"2022-09-03\"),\n 'lat' : np.arange(70, 20, -10),\n 'lon' : np.arange(60, 110, 10)} \n\nAttributes\nNext, we add the attributes (metadata) for our temperature data as a dictionary:\n\n# attributes (metadata) of the data array \nattrs = { 'title' : 'temperature across weather stations',\n 'standard_name' : 'air_temperature',\n 'units' : 'degree_c'}\n\nPutting It All Together\nFinally, we put all these pieces together (data, dimensions, coordinates, and attributes) to create an xarray.DataArray:\n\n# initialize xarray.DataArray\ntemp = xr.DataArray(data = temp_data, \n dims = dims,\n coords = coords,\n attrs = attrs)\ntemp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, lat: 5, lon: 5)>\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\nCoordinates:\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_cxarray.DataArraytime: 3lat: 5lon: 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2array([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Coordinates: (3)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03array(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')lat(lat)int6470 60 50 40 30array([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100array([ 60, 70, 80, 90, 100])Indexes: (3)timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (3)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_c\n\n\nWe can also update the variable’s attributes after creating the object. Notice that each of the coordinates is also an xarray.DataArray, so we can add attributes to them.\n\n# update attributes\ntemp.attrs['description'] = 'simple example of an xarray.DataArray'\n\n# add attributes to coordinates \ntemp.time.attrs = {'description':'date of measurement'}\n\ntemp.lat.attrs['standard_name']= 'grid_latitude'\ntemp.lat.attrs['units'] = 'degree_N'\n\ntemp.lon.attrs['standard_name']= 'grid_longitude'\ntemp.lon.attrs['units'] = 'degree_E'\ntemp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, lat: 5, lon: 5)>\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\nCoordinates:\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArraytime: 3lat: 5lon: 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2array([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Coordinates: (3)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])Indexes: (3)timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nAt this point, since we have a single variable, the dataset attributes and the variable attributes are the same.\n\n\n18.2.2 Subsetting\nTo select data from an xarray.DataArray we need to specify the subsets we want along each dimension. We can specify the data we need from each dimension either by relying on the dimension’s positions (dimension lookup by position) or by calling each dimension by its name (dimension lookup by name). Let’s see some examples.\nExample\nSuppose we want to know what was the temperature recorded by the weather station located at 40°0′N 80°0′E on September 1st, 2022.\nDimension lookup by position\nWhen we want to rely on the position of the dimensions in the xarray.DataArray, we need to remember that time is the first dimension, latitude is the second, and longitude the third.\nThen, we can then access the values along each dimension in two ways:\n\nby integer: the exact same as a np.array. Use the locator brackets [] and “simply” remember that ***:\n\n\n# access dimensions by position, then use integers for indexing\ntemp[0,3,2]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\n\nby label: same as pandas. We use the .loc[] locator to lookup a specific coordinate at each position (which represents a dimension):\n\n\n# access dimensions by position, then use labels for indexing\ntemp.loc['2022-09-01', 40, 80]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nFor datasets with dozens of dimensions, it can be confusing to remember which dimensions go where.\nDimension lookup by name\nWe can also use the dimension names to subset data, without the need to remember which dimensions goes where In this case, there are still two ways of selecting data along a dimension:\n\nby integer: we specify the integer location of the data we want along each dimension:\n\n\n# acess dimensions by name, then use integers for indexing\ntemp.isel(time=0, lon=2, lat=3)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\n\nby label: we use the coordinate values we want to get!\n\n\n# access dimensions by name, then use labels for indexing\ntemp.sel(time='2022-09-01', lat=40, lon=80)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nNotice that the result of this indexing is a 1x1 xarray.DataArray. This is because operations on an xarray.DataArray always return another xarray.DataArray. In particular, operations returning scalar values will also produce xarray objects, so we need to cast them as numbers manually. See xarray.DataArray.item.\n\nIndexing methods summary\n\n\n\n\n\n\n\n\nDimension lookup\nIndexing along dimension\nWhat to use\nExample\n\n\n\n\nBy position\nby integer\n[]\ntemp[0,3,2]\n\n\nBy position\nby label\n.loc[]\ntemp.loc['2022-09-01', 40, 80]\n\n\nBy name\nby integer\n.isel()\ntemp.isel(time=0, lon=2, lat=3)\n\n\nBy name\nby label\n.sel()\ntemp.sel(time='2022-09-01', lat=40, lon=80)\n\n\n\nMore about xarray indexing.\n\n\n18.2.3 Reduction\nxarray has implemented several methods to reduce an xarray.DataArray along any number of dimensions. One of the advantages of xarray.DataArray is that, if we choose to, it can carry over attributes when doing calculations. For example, we can calculate the average temperature at each weather station over time and obtain a new xarray.DataArray.\n\navg_temp = temp.mean(dim = 'time') \n# to keep attributes add keep_attrs = True\n\navg_temp.attrs = {'title':'average temperature over three days'}\navg_temp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (lat: 5, lon: 5)>\narray([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])\nCoordinates:\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: average temperature over three daysxarray.DataArraylat: 5lon: 51.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0array([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])Coordinates: (2)lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])Indexes: (2)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (1)title :average temperature over three days\n\n\nMore about xarray computations." + "title": "19  xarray", + "section": "19.2 xarray.DataArray", + "text": "19.2 xarray.DataArray\nThe xarray.DataArray is the primary data structure of the xarray package. It is an n-dimensional array with labeled dimensions. We can think of it as representing a single variable in the NetCDF data format: it holds the variable’s values, dimensions, and attributes.\nApart from variables, dimensions, and attributes, xarray introduces one more piece of information to keep track of a dataset’s content: in xarray each dimension has at least one set of coordinates. A dimension’s coordinates indicate the dimension’s values. We can think of the coordinate’s values as the tick labels along a dimension.\nFor example, in our previous exercise about temperature measured in weather stations, latitude is a dimension, and the latitude’s coordinates are 30, 40, 50, 60, and 70 because those are the latitude values at which we are collecting temperature data. In that same exercise, time is a dimension, and its coordinates are 2022-09-1, 2022-09-02, and 2022-09-03.\n\nHere you can read more about the xarray terminology.\n\n19.2.1 Create an xarray.DataArray\nLet’s suppose we want to make an xarray.DataArray that includes the information from our previous example about measuring temperature across three days. First, we import all the necessary libraries.\n\nimport os \nimport pandas as pd\nimport numpy as np\n\nimport xarray as xr # This is the package we'll explore\n\nVariable Values\nThe underlying data in the xarray.DataArray is a numpy.array that holds the variable values. So we can start by making a numpy.array with our mock temperature data:\n\n# values of a single variable at each point of the coords \ntemp_data = np.array([np.zeros((5,5)), \n np.ones((5,5)), \n np.ones((5,5))*2]).astype(int)\ntemp_data\n\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\n\n\nWe could think this is “all” we need to represent our data. But if we stopped at this point, we would need to\n\nremember that the numbers in this array represent the temperature in degrees Celsius (doesn’t seem too bad),\nremember that the first dimension of the array represents time, the second latitude and the third longitude (maybe ok), and\nkeep track of the range of values that time, latitude, and longitude take (not so good).\n\nKeeping track of all this information separately could quickly get messy and could make it challenging to share our data and analyses with others. This is what the netCDF data model and xarray aim to simplify. We can get data and its descriptors together in an xarray.DataArray by adding the dimensions over which the variable is being measured and including attributes that appropriately describe dimensions and variables.\nDimensions and Coordinates\nTo specify the dimensions of our upcoming xarray.DataArray, we must examine how we’ve constructed the numpy.array holding the temperature data. The diagram below shows how the dimensions of temp_data are ordered: the first dimension is time, the second is latitude, and the third is longitude.\n\nRemember that indexing in 2-dimensional numpy.arrays starts at the top-left corner of the array, and it is done by rows first and columns second (like matrices). This is why latitude is the second dimension and longitude the third. From the diagram, we can also see that the coordinates (values of each dimension) are as follows:\n\ntime coordinates are 2022-09-01, 2022-09-02, 2022-09-03\nlatitude coordinates are 70, 60, 50, 40, 30 (notice decreasing order)\nlongitude coordinates are 60, 70, 80, 90, 100 (notice increasing order)\n\nWe add the dimensions as a tuple of strings and coordinates as a dictionary:\n\n# names of the dimensions in the required order\ndims = ('time', 'lat', 'lon')\n\n# create coordinates to use for indexing along each dimension \ncoords = {'time' : pd.date_range(\"2022-09-01\", \"2022-09-03\"),\n 'lat' : np.arange(70, 20, -10),\n 'lon' : np.arange(60, 110, 10)} \n\nAttributes\nNext, we add the attributes (metadata) for our temperature data as a dictionary:\n\n# attributes (metadata) of the data array \nattrs = { 'title' : 'temperature across weather stations',\n 'standard_name' : 'air_temperature',\n 'units' : 'degree_c'}\n\nPutting It All Together\nFinally, we put all these pieces together (data, dimensions, coordinates, and attributes) to create an xarray.DataArray:\n\n# initialize xarray.DataArray\ntemp = xr.DataArray(data = temp_data, \n dims = dims,\n coords = coords,\n attrs = attrs)\ntemp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, lat: 5, lon: 5)>\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\nCoordinates:\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_cxarray.DataArraytime: 3lat: 5lon: 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2array([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Coordinates: (3)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03array(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')lat(lat)int6470 60 50 40 30array([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100array([ 60, 70, 80, 90, 100])Indexes: (3)timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (3)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_c\n\n\nWe can also update the variable’s attributes after creating the object. Notice that each of the coordinates is also an xarray.DataArray, so we can add attributes to them.\n\n# update attributes\ntemp.attrs['description'] = 'simple example of an xarray.DataArray'\n\n# add attributes to coordinates \ntemp.time.attrs = {'description':'date of measurement'}\n\ntemp.lat.attrs['standard_name']= 'grid_latitude'\ntemp.lat.attrs['units'] = 'degree_N'\n\ntemp.lon.attrs['standard_name']= 'grid_longitude'\ntemp.lon.attrs['units'] = 'degree_E'\ntemp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, lat: 5, lon: 5)>\narray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])\nCoordinates:\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArraytime: 3lat: 5lon: 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2array([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Coordinates: (3)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])Indexes: (3)timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nAt this point, since we have a single variable, the dataset attributes and the variable attributes are the same.\n\n\n19.2.2 Subsetting\nTo select data from an xarray.DataArray we need to specify the subsets we want along each dimension. We can specify the data we need from each dimension either by relying on the dimension’s positions (dimension lookup by position) or by calling each dimension by its name (dimension lookup by name). Let’s see some examples.\nExample\nSuppose we want to know what was the temperature recorded by the weather station located at 40°0′N 80°0′E on September 1st, 2022.\nDimension lookup by position\nWhen we want to rely on the position of the dimensions in the xarray.DataArray, we need to remember that time is the first dimension, latitude is the second, and longitude the third.\nThen, we can then access the values along each dimension in two ways:\n\nby integer: the exact same as a np.array. Use the locator brackets [] and “simply” remember that ***:\n\n\n# access dimensions by position, then use integers for indexing\ntemp[0,3,2]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\n\nby label: same as pandas. We use the .loc[] locator to lookup a specific coordinate at each position (which represents a dimension):\n\n\n# access dimensions by position, then use labels for indexing\ntemp.loc['2022-09-01', 40, 80]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nFor datasets with dozens of dimensions, it can be confusing to remember which dimensions go where.\nDimension lookup by name\nWe can also use the dimension names to subset data, without the need to remember which dimensions goes where In this case, there are still two ways of selecting data along a dimension:\n\nby integer: we specify the integer location of the data we want along each dimension:\n\n\n# acess dimensions by name, then use integers for indexing\ntemp.isel(time=0, lon=2, lat=3)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\n\nby label: we use the coordinate values we want to get!\n\n\n# access dimensions by name, then use labels for indexing\ntemp.sel(time='2022-09-01', lat=40, lon=80)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(0)\nCoordinates:\n time datetime64[ns] 2022-09-01\n lat int64 40\n lon int64 80\nAttributes:\n title: temperature across weather stations\n standard_name: air_temperature\n units: degree_c\n description: simple example of an xarray.DataArrayxarray.DataArray0array(0)Coordinates: (3)time()datetime64[ns]2022-09-01description :date of measurementarray('2022-09-01T00:00:00.000000000', dtype='datetime64[ns]')lat()int6440standard_name :grid_latitudeunits :degree_Narray(40)lon()int6480standard_name :grid_longitudeunits :degree_Earray(80)Indexes: (0)Attributes: (4)title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray\n\n\nNotice that the result of this indexing is a 1x1 xarray.DataArray. This is because operations on an xarray.DataArray always return another xarray.DataArray. In particular, operations returning scalar values will also produce xarray objects, so we need to cast them as numbers manually. See xarray.DataArray.item.\n\nIndexing methods summary\n\n\n\n\n\n\n\n\nDimension lookup\nIndexing along dimension\nWhat to use\nExample\n\n\n\n\nBy position\nby integer\n[]\ntemp[0,3,2]\n\n\nBy position\nby label\n.loc[]\ntemp.loc['2022-09-01', 40, 80]\n\n\nBy name\nby integer\n.isel()\ntemp.isel(time=0, lon=2, lat=3)\n\n\nBy name\nby label\n.sel()\ntemp.sel(time='2022-09-01', lat=40, lon=80)\n\n\n\nMore about xarray indexing.\n\n\n19.2.3 Reduction\nxarray has implemented several methods to reduce an xarray.DataArray along any number of dimensions. One of the advantages of xarray.DataArray is that, if we choose to, it can carry over attributes when doing calculations. For example, we can calculate the average temperature at each weather station over time and obtain a new xarray.DataArray.\n\navg_temp = temp.mean(dim = 'time') \n# to keep attributes add keep_attrs = True\n\navg_temp.attrs = {'title':'average temperature over three days'}\navg_temp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (lat: 5, lon: 5)>\narray([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])\nCoordinates:\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\nAttributes:\n title: average temperature over three daysxarray.DataArraylat: 5lon: 51.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0array([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])Coordinates: (2)lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])Indexes: (2)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))Attributes: (1)title :average temperature over three days\n\n\nMore about xarray computations." }, { "objectID": "lectures/lesson-15-xarray.html#xarray.dataset", "href": "lectures/lesson-15-xarray.html#xarray.dataset", - "title": "18  xarray", - "section": "18.3 xarray.DataSet", - "text": "18.3 xarray.DataSet\nAn xarray.DataSet resembles an in-memory representation of a NetCDF file and consists of multiple variables (each being an xarray.DataArray), with dimensions, coordinates, and attributes, forming a self-describing dataset. Attributes can be specific to each variable, each dimension, or they can describe the whole dataset. The variables in an xarray.DataSet can have the same dimensions, share some dimensions, or have no dimensions in common. Let’s see an example of this.\n\n18.3.1 Create an xarray.DataSet\nFollowing our previous example, we can create an xarray.DataSet by combining the temperature data with the average temperature data. We also add some attributes that now describe the whole dataset, not only each variable.\n\n# make dictionaries with variables and attributes\ndata_vars = {'avg_temp': avg_temp,\n 'temp': temp}\n\nattrs = {'title':'temperature data at weather stations: daily and and average',\n 'description':'simple example of an xarray.Dataset'}\n\n# create xarray.Dataset\ntemp_dataset = xr.Dataset( data_vars = data_vars,\n attrs = attrs)\n\nTake some time to click through the data viewer and read through the variables and metadata in the dataset. Notice the following:\n\ntemp_dataset is a dataset with three dimensions (time, latitude, and longitude),\ntemp is a variable that uses all three dimensions in the dataset, and\naveg_temp is a variable that only uses two dimensions (latitude and longitude).\n\n\ntemp_dataset\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (lat: 5, lon: 5, time: 3)\nCoordinates:\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\nData variables:\n avg_temp (lat, lon) float64 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0\n temp (time, lat, lon) int64 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2\nAttributes:\n title: temperature data at weather stations: daily and and average\n description: simple example of an xarray.Datasetxarray.DatasetDimensions:lat: 5lon: 5time: 3Coordinates: (3)lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')Data variables: (2)avg_temp(lat, lon)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0title :average temperature over three daysarray([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])temp(time, lat, lon)int640 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArrayarray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Indexes: (3)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))Attributes: (2)title :temperature data at weather stations: daily and and averagedescription :simple example of an xarray.Dataset\n\n\n\n\n18.3.2 Save and Reopen\nFinally, we want to save our dataset as a NetCDF file. To do this, specify the file path and use the .nc extension for the file name. Then save the dataset using the to_netcdf method with your file path. Opening NetCDF is similarly straightforward using xarray.open_dataset().\n\n# save file - don't forget the .nc extension!\ntemp_dataset.to_netcdf('temp_dataset.nc')\n\n# open to check:\ncheck = xr.open_dataset('temp_dataset.nc'\n)\ncheck\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (lat: 5, lon: 5, time: 3)\nCoordinates:\n * lat (lat) int32 70 60 50 40 30\n * lon (lon) int32 60 70 80 90 100\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\nData variables:\n avg_temp (lat, lon) float64 ...\n temp (time, lat, lon) int32 ...\nAttributes:\n title: temperature data at weather stations: daily and and average\n description: simple example of an xarray.Datasetxarray.DatasetDimensions:lat: 5lon: 5time: 3Coordinates: (3)lat(lat)int3270 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30], dtype=int32)lon(lon)int3260 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100], dtype=int32)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')Data variables: (2)avg_temp(lat, lon)float64...title :average temperature over three days[25 values with dtype=float64]temp(time, lat, lon)int32...title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray[75 values with dtype=int32]Indexes: (3)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int32', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int32', name='lon'))timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq=None))Attributes: (2)title :temperature data at weather stations: daily and and averagedescription :simple example of an xarray.Dataset" + "title": "19  xarray", + "section": "19.3 xarray.DataSet", + "text": "19.3 xarray.DataSet\nAn xarray.DataSet resembles an in-memory representation of a NetCDF file and consists of multiple variables (each being an xarray.DataArray), with dimensions, coordinates, and attributes, forming a self-describing dataset. Attributes can be specific to each variable, each dimension, or they can describe the whole dataset. The variables in an xarray.DataSet can have the same dimensions, share some dimensions, or have no dimensions in common. Let’s see an example of this.\n\n19.3.1 Create an xarray.DataSet\nFollowing our previous example, we can create an xarray.DataSet by combining the temperature data with the average temperature data. We also add some attributes that now describe the whole dataset, not only each variable.\n\n# make dictionaries with variables and attributes\ndata_vars = {'avg_temp': avg_temp,\n 'temp': temp}\n\nattrs = {'title':'temperature data at weather stations: daily and and average',\n 'description':'simple example of an xarray.Dataset'}\n\n# create xarray.Dataset\ntemp_dataset = xr.Dataset( data_vars = data_vars,\n attrs = attrs)\n\nTake some time to click through the data viewer and read through the variables and metadata in the dataset. Notice the following:\n\ntemp_dataset is a dataset with three dimensions (time, latitude, and longitude),\ntemp is a variable that uses all three dimensions in the dataset, and\naveg_temp is a variable that only uses two dimensions (latitude and longitude).\n\n\ntemp_dataset\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (lat: 5, lon: 5, time: 3)\nCoordinates:\n * lat (lat) int64 70 60 50 40 30\n * lon (lon) int64 60 70 80 90 100\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\nData variables:\n avg_temp (lat, lon) float64 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0\n temp (time, lat, lon) int64 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2\nAttributes:\n title: temperature data at weather stations: daily and and average\n description: simple example of an xarray.Datasetxarray.DatasetDimensions:lat: 5lon: 5time: 3Coordinates: (3)lat(lat)int6470 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30])lon(lon)int6460 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100])time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')Data variables: (2)avg_temp(lat, lon)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0title :average temperature over three daysarray([[1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1.]])temp(time, lat, lon)int640 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArrayarray([[[0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0]],\n\n [[1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1],\n [1, 1, 1, 1, 1]],\n\n [[2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2],\n [2, 2, 2, 2, 2]]])Indexes: (3)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int64', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int64', name='lon'))timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq='D'))Attributes: (2)title :temperature data at weather stations: daily and and averagedescription :simple example of an xarray.Dataset\n\n\n\n\n19.3.2 Save and Reopen\nFinally, we want to save our dataset as a NetCDF file. To do this, specify the file path and use the .nc extension for the file name. Then save the dataset using the to_netcdf method with your file path. Opening NetCDF is similarly straightforward using xarray.open_dataset().\n\n# save file - don't forget the .nc extension!\ntemp_dataset.to_netcdf('temp_dataset.nc')\n\n# open to check:\ncheck = xr.open_dataset('temp_dataset.nc'\n)\ncheck\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.Dataset>\nDimensions: (lat: 5, lon: 5, time: 3)\nCoordinates:\n * lat (lat) int32 70 60 50 40 30\n * lon (lon) int32 60 70 80 90 100\n * time (time) datetime64[ns] 2022-09-01 2022-09-02 2022-09-03\nData variables:\n avg_temp (lat, lon) float64 ...\n temp (time, lat, lon) int32 ...\nAttributes:\n title: temperature data at weather stations: daily and and average\n description: simple example of an xarray.Datasetxarray.DatasetDimensions:lat: 5lon: 5time: 3Coordinates: (3)lat(lat)int3270 60 50 40 30standard_name :grid_latitudeunits :degree_Narray([70, 60, 50, 40, 30], dtype=int32)lon(lon)int3260 70 80 90 100standard_name :grid_longitudeunits :degree_Earray([ 60, 70, 80, 90, 100], dtype=int32)time(time)datetime64[ns]2022-09-01 2022-09-02 2022-09-03description :date of measurementarray(['2022-09-01T00:00:00.000000000', '2022-09-02T00:00:00.000000000',\n '2022-09-03T00:00:00.000000000'], dtype='datetime64[ns]')Data variables: (2)avg_temp(lat, lon)float64...title :average temperature over three days[25 values with dtype=float64]temp(time, lat, lon)int32...title :temperature across weather stationsstandard_name :air_temperatureunits :degree_cdescription :simple example of an xarray.DataArray[75 values with dtype=int32]Indexes: (3)latPandasIndexPandasIndex(Index([70, 60, 50, 40, 30], dtype='int32', name='lat'))lonPandasIndexPandasIndex(Index([60, 70, 80, 90, 100], dtype='int32', name='lon'))timePandasIndexPandasIndex(DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-03'], dtype='datetime64[ns]', name='time', freq=None))Attributes: (2)title :temperature data at weather stations: daily and and averagedescription :simple example of an xarray.Dataset" }, { "objectID": "lectures/lesson-15-xarray.html#acknowledgements", "href": "lectures/lesson-15-xarray.html#acknowledgements", - "title": "18  xarray", - "section": "18.4 Acknowledgements", - "text": "18.4 Acknowledgements\nThis lesson is adapted from the NetCDF and xarray lesson I prepared for the Arctic Data Center’s course on scalable computing:\nS. Jeanette Clark, Matthew B. Jones, Samantha Csik, Carmen Galaz García, Bryce Mecum, Natasha Haycock-Chavez, Daphne Virlar-Knight, Juliet Cohen, Anna Liljedahl. 2023. Scalable and Computationally Reproducible Approaches to Arctic Research. Arctic Data Center. doi:10.18739/A2QF8JM2V" + "title": "19  xarray", + "section": "19.4 Acknowledgements", + "text": "19.4 Acknowledgements\nThis lesson is adapted from the NetCDF and xarray lesson I prepared for the Arctic Data Center’s course on scalable computing:\nS. Jeanette Clark, Matthew B. Jones, Samantha Csik, Carmen Galaz García, Bryce Mecum, Natasha Haycock-Chavez, Daphne Virlar-Knight, Juliet Cohen, Anna Liljedahl. 2023. Scalable and Computationally Reproducible Approaches to Arctic Research. Arctic Data Center. doi:10.18739/A2QF8JM2V" }, { "objectID": "lectures/lesson-17-rioxarray.html#data", "href": "lectures/lesson-17-rioxarray.html#data", - "title": "19  rioxarray", - "section": "19.1 Data", - "text": "19.1 Data\nThe raster files we will use today come from the US National Agriculture Imagery Program (NAIP). NAIP images are are high-resolution aerial images with four spectral bands: Red, Green, Blue and Near-infrared (NIR). The raster’s we’ll use today are from 2020.\nFor this lesson, I did some pre-processing of the data to separate the RGB bands from the NIR band and clipped a scene. The data was accessed and pre-processed at Microsoft’s Planetary Computer NAIP data repository." + "title": "20  rioxarray", + "section": "20.1 Data", + "text": "20.1 Data\nThe raster files we will use today come from the US National Agriculture Imagery Program (NAIP). NAIP images are are high-resolution aerial images with four spectral bands: Red, Green, Blue and Near-infrared (NIR). The raster’s we’ll use today are from 2020.\nFor this lesson, I did some pre-processing of the data to separate the RGB bands from the NIR band and clipped a scene. The data was accessed and pre-processed at Microsoft’s Planetary Computer NAIP data repository." }, { "objectID": "lectures/lesson-17-rioxarray.html#import-.tif", "href": "lectures/lesson-17-rioxarray.html#import-.tif", - "title": "19  rioxarray", - "section": "19.2 Import .tif", - "text": "19.2 Import .tif\nLet’s start by loading the libraries we’ll use:\n\nimport os\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nimport rioxarray as rioxr\n\nimport geopandas as gpd\nfrom shapely.geometry import Polygon\n\nThere are multiple ways of opening a ‘.tif’ file using xarray or rioxarray. Using the rioxarray.open_rasterio() function to open the ‘.tif’ file is a simple way to make sure all our geospatial data gets loaded correctly:\n\n# load NIR tif file\nnir_fp = os.path.join(os.getcwd(),'data','naip','nir.tif')\nnir = rioxr.open_rasterio(nir_fp)\nnir\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 3208, x: 2419)>\n[7760152 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1\n * x (x) float64 2.512e+05 2.512e+05 ... 2.527e+05 2.527e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 3208x: 2419...[7760152 values with dtype=uint8]Coordinates: (4)band(band)int641array([1])x(x)float642.512e+05 2.512e+05 ... 2.527e+05array([251219.1, 251219.7, 251220.3, ..., 252668.7, 252669.3, 252669.9])y(y)float643.813e+06 3.813e+06 ... 3.811e+06array([3812951.7, 3812951.1, 3812950.5, ..., 3811028.7, 3811028.1, 3811027.5])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251218.8 0.6000000000000072 0.0 3812952.0 0.0 -0.600000000000058array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([251219.09999999998, 251219.69999999998, 251220.3,\n 251220.89999999997, 251221.49999999997, 251222.09999999998,\n 251222.69999999998, 251223.3, 251223.89999999997,\n 251224.49999999997,\n ...\n 252664.5, 252665.1, 252665.69999999998,\n 252666.3, 252666.9, 252667.5,\n 252668.1, 252668.69999999998, 252669.3,\n 252669.9],\n dtype='float64', name='x', length=2419))yPandasIndexPandasIndex(Index([ 3812951.7, 3812951.1, 3812950.5,\n 3812949.9000000004, 3812949.3000000003, 3812948.7,\n 3812948.1, 3812947.5, 3812946.9000000004,\n 3812946.3000000003,\n ...\n 3811032.9, 3811032.3, 3811031.7,\n 3811031.1, 3811030.5, 3811029.9,\n 3811029.3, 3811028.7, 3811028.1,\n 3811027.5],\n dtype='float64', name='y', length=3208))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0" + "title": "20  rioxarray", + "section": "20.2 Import .tif", + "text": "20.2 Import .tif\nLet’s start by loading the libraries we’ll use:\n\nimport os\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nimport rioxarray as rioxr\n\nimport geopandas as gpd\nfrom shapely.geometry import Polygon\n\nThere are multiple ways of opening a ‘.tif’ file using xarray or rioxarray. Using the rioxarray.open_rasterio() function to open the ‘.tif’ file is a simple way to make sure all our geospatial data gets loaded correctly:\n\n# load NIR tif file\nnir_fp = os.path.join(os.getcwd(),'data','naip','nir.tif')\nnir = rioxr.open_rasterio(nir_fp)\nnir\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 3208, x: 2419)>\n[7760152 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1\n * x (x) float64 2.512e+05 2.512e+05 ... 2.527e+05 2.527e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 3208x: 2419...[7760152 values with dtype=uint8]Coordinates: (4)band(band)int641array([1])x(x)float642.512e+05 2.512e+05 ... 2.527e+05array([251219.1, 251219.7, 251220.3, ..., 252668.7, 252669.3, 252669.9])y(y)float643.813e+06 3.813e+06 ... 3.811e+06array([3812951.7, 3812951.1, 3812950.5, ..., 3811028.7, 3811028.1, 3811027.5])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251218.8 0.6000000000000072 0.0 3812952.0 0.0 -0.600000000000058array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([251219.09999999998, 251219.69999999998, 251220.3,\n 251220.89999999997, 251221.49999999997, 251222.09999999998,\n 251222.69999999998, 251223.3, 251223.89999999997,\n 251224.49999999997,\n ...\n 252664.5, 252665.1, 252665.69999999998,\n 252666.3, 252666.9, 252667.5,\n 252668.1, 252668.69999999998, 252669.3,\n 252669.9],\n dtype='float64', name='x', length=2419))yPandasIndexPandasIndex(Index([ 3812951.7, 3812951.1, 3812950.5,\n 3812949.9000000004, 3812949.3000000003, 3812948.7,\n 3812948.1, 3812947.5, 3812946.9000000004,\n 3812946.3000000003,\n ...\n 3811032.9, 3811032.3, 3811031.7,\n 3811031.1, 3811030.5, 3811029.9,\n 3811029.3, 3811028.7, 3811028.1,\n 3811027.5],\n dtype='float64', name='y', length=3208))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0" }, { "objectID": "lectures/lesson-17-rioxarray.html#xr.dataarray-exploration", "href": "lectures/lesson-17-rioxarray.html#xr.dataarray-exploration", - "title": "19  rioxarray", - "section": "19.3 xr.DataArray exploration", - "text": "19.3 xr.DataArray exploration\nFirst, let’s verify the raster we loaded is an xarray.DataArray:\n\ntype(nir)\n\nxarray.core.dataarray.DataArray\n\n\nNotice we see all the components of an xarray.DataArray: its dimensions (band, y, x), the coordiantes for each dimension, and some attributes. We can also directly access some of these attribues:\n\n# print shape and data type\nprint('shape: ', nir.shape)\nprint('data type: ', nir.dtype, '\\n')\n\nshape: (1, 3208, 2419)\ndata type: uint8 \n\n\n\nUsing the .values attribute we can get a quick view at the values at the corners in our data array.\n\nprint(type(nir.values))\nnir.values\n\n<class 'numpy.ndarray'>\n\n\narray([[[167, 164, 161, ..., 147, 152, 151],\n [170, 170, 168, ..., 151, 149, 154],\n [176, 177, 177, ..., 151, 151, 151],\n ...,\n [ 94, 88, 101, ..., 83, 88, 79],\n [108, 95, 103, ..., 92, 91, 75],\n [ 94, 90, 104, ..., 87, 88, 82]]], dtype=uint8)\n\n\nWe can also plot our data:\n\nnir.plot()\n\n<matplotlib.collections.QuadMesh at 0x10a80ce90>\n\n\n\n\n\nNotice the coordinates on the x and y axes. This map shows the light captured in the near-infrared spectrum by a sensor on a plane. Can you guess where this? If you guessed Santa Barbara downtown, you guessed right!" + "title": "20  rioxarray", + "section": "20.3 xr.DataArray exploration", + "text": "20.3 xr.DataArray exploration\nFirst, let’s verify the raster we loaded is an xarray.DataArray:\n\ntype(nir)\n\nxarray.core.dataarray.DataArray\n\n\nNotice we see all the components of an xarray.DataArray: its dimensions (band, y, x), the coordiantes for each dimension, and some attributes. We can also directly access some of these attribues:\n\n# print shape and data type\nprint('shape: ', nir.shape)\nprint('data type: ', nir.dtype, '\\n')\n\nshape: (1, 3208, 2419)\ndata type: uint8 \n\n\n\nUsing the .values attribute we can get a quick view at the values at the corners in our data array.\n\nprint(type(nir.values))\nnir.values\n\n<class 'numpy.ndarray'>\n\n\narray([[[167, 164, 161, ..., 147, 152, 151],\n [170, 170, 168, ..., 151, 149, 154],\n [176, 177, 177, ..., 151, 151, 151],\n ...,\n [ 94, 88, 101, ..., 83, 88, 79],\n [108, 95, 103, ..., 92, 91, 75],\n [ 94, 90, 104, ..., 87, 88, 82]]], dtype=uint8)\n\n\nWe can also plot our data:\n\nnir.plot()\n\n<matplotlib.collections.QuadMesh at 0x10a80ce90>\n\n\n\n\n\nNotice the coordinates on the x and y axes. This map shows the light captured in the near-infrared spectrum by a sensor on a plane. Can you guess where this? If you guessed Santa Barbara downtown, you guessed right!" }, { "objectID": "lectures/lesson-17-rioxarray.html#rio-accessor", "href": "lectures/lesson-17-rioxarray.html#rio-accessor", - "title": "19  rioxarray", - "section": "19.4 rio accessor", - "text": "19.4 rio accessor\nAn accessor in Python let’s us access a different set of properties of an object. In our case, we use the .rio accessor for xarray.DataArrays to access its raster properties. For example, its number of bands, height, width, spatial bounding box, and CRS:\n\n# check geospatial attributes\nprint('# bands: ', nir.rio.count)\nprint('height: ', nir.rio.height)\nprint('width: ', nir.rio.width, '\\n')\n\nprint('spatial bounding box: ')\nprint(nir.rio.bounds(), '\\n')\n\nprint('CRS: ', nir.rio.crs)\n\n# bands: 1\nheight: 3208\nwidth: 2419 \n\nspatial bounding box: \n(251218.8, 3811027.2, 252670.19999999998, 3812952.0) \n\nCRS: EPSG:26911\n\n\n\n\n\n\n\n\nOther accessors\n\n\n\nWe have used accessors before, for example the .str and .dt accessors in pandas." + "title": "20  rioxarray", + "section": "20.4 rio accessor", + "text": "20.4 rio accessor\nAn accessor in Python let’s us access a different set of properties of an object. In our case, we use the .rio accessor for xarray.DataArrays to access its raster properties. For example, its number of bands, height, width, spatial bounding box, and CRS:\n\n# check geospatial attributes\nprint('# bands: ', nir.rio.count)\nprint('height: ', nir.rio.height)\nprint('width: ', nir.rio.width, '\\n')\n\nprint('spatial bounding box: ')\nprint(nir.rio.bounds(), '\\n')\n\nprint('CRS: ', nir.rio.crs)\n\n# bands: 1\nheight: 3208\nwidth: 2419 \n\nspatial bounding box: \n(251218.8, 3811027.2, 252670.19999999998, 3812952.0) \n\nCRS: EPSG:26911\n\n\n\n\n\n\n\n\nOther accessors\n\n\n\nWe have used accessors before, for example the .str and .dt accessors in pandas." }, { "objectID": "lectures/lesson-17-rioxarray.html#multi-band-raster", "href": "lectures/lesson-17-rioxarray.html#multi-band-raster", - "title": "19  rioxarray", - "section": "19.5 Multi-band raster", - "text": "19.5 Multi-band raster\nLet’s now import the RGB raster:\n\n# open RGB raster\nrgb_fp = os.path.join(os.getcwd(),'data','naip','rgb.tif')\nrgb = rioxr.open_rasterio(rgb_fp)\nrgb\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 3, y: 3208, x: 2419)>\n[23280456 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1 2 3\n * x (x) float64 2.512e+05 2.512e+05 ... 2.527e+05 2.527e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 3y: 3208x: 2419...[23280456 values with dtype=uint8]Coordinates: (4)band(band)int641 2 3array([1, 2, 3])x(x)float642.512e+05 2.512e+05 ... 2.527e+05array([251219.1, 251219.7, 251220.3, ..., 252668.7, 252669.3, 252669.9])y(y)float643.813e+06 3.813e+06 ... 3.811e+06array([3812951.7, 3812951.1, 3812950.5, ..., 3811028.7, 3811028.1, 3811027.5])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251218.8 0.6000000000000072 0.0 3812952.0 0.0 -0.600000000000058array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([251219.09999999998, 251219.69999999998, 251220.3,\n 251220.89999999997, 251221.49999999997, 251222.09999999998,\n 251222.69999999998, 251223.3, 251223.89999999997,\n 251224.49999999997,\n ...\n 252664.5, 252665.1, 252665.69999999998,\n 252666.3, 252666.9, 252667.5,\n 252668.1, 252668.69999999998, 252669.3,\n 252669.9],\n dtype='float64', name='x', length=2419))yPandasIndexPandasIndex(Index([ 3812951.7, 3812951.1, 3812950.5,\n 3812949.9000000004, 3812949.3000000003, 3812948.7,\n 3812948.1, 3812947.5, 3812946.9000000004,\n 3812946.3000000003,\n ...\n 3811032.9, 3811032.3, 3811031.7,\n 3811031.1, 3811030.5, 3811029.9,\n 3811029.3, 3811028.7, 3811028.1,\n 3811027.5],\n dtype='float64', name='y', length=3208))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0\n\n\nNotice this raster has three bands, instead of one. This makes sense because we know these bands correspond tothe Red, Green and Blue bands of the image. We can also check this information by looking directly at the attributes:\n\nprint('rgb shape: ', rgb.shape)\nprint('rgb # bands: ', rgb.rio.count)\n\nrgb shape: (3, 3208, 2419)\nrgb # bands: 3\n\n\nLet’s check the geospatial data too:\n\n# check geospatial attributes\nprint('shape: ', rgb.shape)\nprint('data type: ', rgb.dtype)\nprint('# bands: ', rgb.rio.count)\nprint('CRS: ', rgb.rio.crs)\n\n# check if the CRSs of the rasters match\nprint( rgb.rio.crs == nir.rio.crs)\n\nshape: (3, 3208, 2419)\ndata type: uint8\n# bands: 3\nCRS: EPSG:26911\nTrue\n\n\nOn the last line we checked the nir and rgb rasters have the same ESPG:26911 CRS. This is a projected CRS.\n\nFinally, let’s plot this raster. Since it has three bands, we can plot it as an image using the .plot.imshow() method, which will interpret the three bands of the object as RGB.\n\n# parameters for plotting rasters\nsize = 6 # height in in of plot height\naspect = rgb.rio.width / rgb.rio.height # ratio of widht/height\n\n# plot three bands as RGB image\nrgb.plot.imshow(size=size, aspect=aspect)\n\n<matplotlib.image.AxesImage at 0x145989f10>" + "title": "20  rioxarray", + "section": "20.5 Multi-band raster", + "text": "20.5 Multi-band raster\nLet’s now import the RGB raster:\n\n# open RGB raster\nrgb_fp = os.path.join(os.getcwd(),'data','naip','rgb.tif')\nrgb = rioxr.open_rasterio(rgb_fp)\nrgb\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 3, y: 3208, x: 2419)>\n[23280456 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1 2 3\n * x (x) float64 2.512e+05 2.512e+05 ... 2.527e+05 2.527e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 3y: 3208x: 2419...[23280456 values with dtype=uint8]Coordinates: (4)band(band)int641 2 3array([1, 2, 3])x(x)float642.512e+05 2.512e+05 ... 2.527e+05array([251219.1, 251219.7, 251220.3, ..., 252668.7, 252669.3, 252669.9])y(y)float643.813e+06 3.813e+06 ... 3.811e+06array([3812951.7, 3812951.1, 3812950.5, ..., 3811028.7, 3811028.1, 3811027.5])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251218.8 0.6000000000000072 0.0 3812952.0 0.0 -0.600000000000058array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([251219.09999999998, 251219.69999999998, 251220.3,\n 251220.89999999997, 251221.49999999997, 251222.09999999998,\n 251222.69999999998, 251223.3, 251223.89999999997,\n 251224.49999999997,\n ...\n 252664.5, 252665.1, 252665.69999999998,\n 252666.3, 252666.9, 252667.5,\n 252668.1, 252668.69999999998, 252669.3,\n 252669.9],\n dtype='float64', name='x', length=2419))yPandasIndexPandasIndex(Index([ 3812951.7, 3812951.1, 3812950.5,\n 3812949.9000000004, 3812949.3000000003, 3812948.7,\n 3812948.1, 3812947.5, 3812946.9000000004,\n 3812946.3000000003,\n ...\n 3811032.9, 3811032.3, 3811031.7,\n 3811031.1, 3811030.5, 3811029.9,\n 3811029.3, 3811028.7, 3811028.1,\n 3811027.5],\n dtype='float64', name='y', length=3208))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0\n\n\nNotice this raster has three bands, instead of one. This makes sense because we know these bands correspond tothe Red, Green and Blue bands of the image. We can also check this information by looking directly at the attributes:\n\nprint('rgb shape: ', rgb.shape)\nprint('rgb # bands: ', rgb.rio.count)\n\nrgb shape: (3, 3208, 2419)\nrgb # bands: 3\n\n\nLet’s check the geospatial data too:\n\n# check geospatial attributes\nprint('shape: ', rgb.shape)\nprint('data type: ', rgb.dtype)\nprint('# bands: ', rgb.rio.count)\nprint('CRS: ', rgb.rio.crs)\n\n# check if the CRSs of the rasters match\nprint( rgb.rio.crs == nir.rio.crs)\n\nshape: (3, 3208, 2419)\ndata type: uint8\n# bands: 3\nCRS: EPSG:26911\nTrue\n\n\nOn the last line we checked the nir and rgb rasters have the same ESPG:26911 CRS. This is a projected CRS.\n\nFinally, let’s plot this raster. Since it has three bands, we can plot it as an image using the .plot.imshow() method, which will interpret the three bands of the object as RGB.\n\n# parameters for plotting rasters\nsize = 6 # height in in of plot height\naspect = rgb.rio.width / rgb.rio.height # ratio of widht/height\n\n# plot three bands as RGB image\nrgb.plot.imshow(size=size, aspect=aspect)\n\n<matplotlib.image.AxesImage at 0x145989f10>" }, { "objectID": "lectures/lesson-17-rioxarray.html#box-for-clipping", "href": "lectures/lesson-17-rioxarray.html#box-for-clipping", - "title": "19  rioxarray", - "section": "19.6 Box for clipping", - "text": "19.6 Box for clipping\nOur area of interest (aoi) for this lesson is a smaller region that includes only a few blocks around the NCEAS building. An easy way to obtain coordinates for such a region:\n\n\n\nScreenshot from geojson.io\n\n\n\ngo to https://geojson.io/ website,\nzoom in until you find the NCEAS building in Santa Barbara, it might help to change to ‘Satellite Streets’ view on the bottom left corner,\nclick on the rectangle icon on the right-side toolbar and draw a small region around the NCEAS buildng,\nthe geoJSON code representing this area will appear in the code box,\none option is two copy-paste this geoJSON into an empty text file and save such file with the .json extension, we could then read it in using geopandas\ninstead, we will create our region of index by just copy-pasting the list of points and storing it as a variable:\n\n\n# vertices of our aoi box\npoints = [[-119.70608227128903, 34.426300194372274],\n [-119.70608227128903, 34.42041139020533],\n [-119.6967885126002, 34.42041139020533],\n [-119.6967885126002, 34.426300194372274],\n [-119.70608227128903, 34.426300194372274]]\n\nWe can then create a new geopandas.GeoDataFrame:\n\n# create geodataframe with aoi \naoi = gpd.GeoDataFrame(geometry=[Polygon(points)],\n crs='epsg:4326')\naoi\n\n\n\n\n\n\n\n\ngeometry\n\n\n\n\n0\nPOLYGON ((-119.70608 34.42630, -119.70608 34.4...\n\n\n\n\n\n\n\nLet’s break this down a bit:\n\nfirst, we use the shapely’s Polygon() function to create a polygon from our points list.\nin [Polygon(points)] we put this polygon inside a list so we can form the geometry column of our new gpd.GeoDataFrame\nwe know all the geoJSON files have CRS equal to EPSG:4326/WGS 84, so we set the the CRS of our new gpd.GeoDataFrame to this." + "title": "20  rioxarray", + "section": "20.6 Box for clipping", + "text": "20.6 Box for clipping\nOur area of interest (aoi) for this lesson is a smaller region that includes only a few blocks around the NCEAS building. An easy way to obtain coordinates for such a region:\n\n\n\nScreenshot from geojson.io\n\n\n\ngo to https://geojson.io/ website,\nzoom in until you find the NCEAS building in Santa Barbara, it might help to change to ‘Satellite Streets’ view on the bottom left corner,\nclick on the rectangle icon on the right-side toolbar and draw a small region around the NCEAS buildng,\nthe geoJSON code representing this area will appear in the code box,\none option is two copy-paste this geoJSON into an empty text file and save such file with the .json extension, we could then read it in using geopandas\ninstead, we will create our region of index by just copy-pasting the list of points and storing it as a variable:\n\n\n# vertices of our aoi box\npoints = [[-119.70608227128903, 34.426300194372274],\n [-119.70608227128903, 34.42041139020533],\n [-119.6967885126002, 34.42041139020533],\n [-119.6967885126002, 34.426300194372274],\n [-119.70608227128903, 34.426300194372274]]\n\nWe can then create a new geopandas.GeoDataFrame:\n\n# create geodataframe with aoi \naoi = gpd.GeoDataFrame(geometry=[Polygon(points)],\n crs='epsg:4326')\naoi\n\n\n\n\n\n\n\n\ngeometry\n\n\n\n\n0\nPOLYGON ((-119.70608 34.42630, -119.70608 34.4...\n\n\n\n\n\n\n\nLet’s break this down a bit:\n\nfirst, we use the shapely’s Polygon() function to create a polygon from our points list.\nin [Polygon(points)] we put this polygon inside a list so we can form the geometry column of our new gpd.GeoDataFrame\nwe know all the geoJSON files have CRS equal to EPSG:4326/WGS 84, so we set the the CRS of our new gpd.GeoDataFrame to this." }, { "objectID": "lectures/lesson-17-rioxarray.html#clip-raster", "href": "lectures/lesson-17-rioxarray.html#clip-raster", - "title": "19  rioxarray", - "section": "19.7 Clip raster", - "text": "19.7 Clip raster\nRemember: if two geospatial sets will interact they need to be in the same CRS.\nIn our case, the aoi gpd.GeoDataFrame does not have the same CRS as the rasters:\n\n# check CRss\nprint('aoi CRS: ', aoi.crs)\nprint('nir CRS: ', nir.rio.crs)\nprint('rgb CRS: ', rgb.rio.crs)\n\naoi CRS: epsg:4326\nnir CRS: EPSG:26911\nrgb CRS: EPSG:26911\n\n\nSo let’s reproject:\n\n# reproject aoi to rgb crs\naoi = aoi.to_crs(rgb.rio.crs)\nprint('matched crs?', aoi.crs == rgb.rio.crs)\naoi.crs\n\nmatched crs? True\n\n\n<Projected CRS: EPSG:26911>\nName: NAD83 / UTM zone 11N\nAxis Info [cartesian]:\n- [east]: Easting (metre)\n- [north]: Northing (metre)\nArea of Use:\n- undefined\nCoordinate Operation:\n- name: UTM zone 11N\n- method: Transverse Mercator\nDatum: North American Datum 1983\n- Ellipsoid: GRS 1980\n- Prime Meridian: Greenwich\n\n\nAnd plot them together:\n\n# plot aoi outline and RGB raster together\nfig, ax = plt.subplots()\nfig.set_size_inches((size, size*aspect)) # reuse size and aspect\nrgb.plot.imshow(ax=ax)\naoi.plot(ax=ax, alpha=0.6)\n\n<Axes: title={'center': 'spatial_ref = 0'}, xlabel='x', ylabel='y'>\n\n\n\n\n\nTo clip the raster using the aoi polygon we use the .rio.clip_box() method:\n\n# clip rasters to aoi\nrgb_small = rgb.rio.clip_box(*aoi.total_bounds)\nnir_small = nir.rio.clip_box(*aoi.total_bounds)\n\nNotice a few things: - we had to use the .rio accessor to access the clip_box() method - similarly to the shapely.box() function we’ve used previously, .rio.clip_box() usual parameters are minx, miny, maxx, maxy. We are using the * asterisk as an unpacking operator to get these from the list aoi.total_bounds.\nLet’s check our clipped data:\n\n# check shape updates\nprint('original shape: ', rgb.shape)\nprint('reduced shape: ', rgb_small.shape)\n\n# plot with correct sizes\nsize = 4\naspect = rgb_small.rio.width/ rgb_small.rio.height\nrgb_small.plot.imshow(size=size, aspect=aspect)\n\noriginal shape: (3, 3208, 2419)\nreduced shape: (3, 1128, 1454)\n\n\n<matplotlib.image.AxesImage at 0x145c332d0>\n\n\n\n\n\n\n# check shape updates\nprint('original shape: ', nir.shape)\nprint('reduced shape: ', nir_small.shape)\n\nnir_small.plot()\n\noriginal shape: (1, 3208, 2419)\nreduced shape: (1, 1128, 1454)\n\n\n<matplotlib.collections.QuadMesh at 0x145d43890>" + "title": "20  rioxarray", + "section": "20.7 Clip raster", + "text": "20.7 Clip raster\nRemember: if two geospatial sets will interact they need to be in the same CRS.\nIn our case, the aoi gpd.GeoDataFrame does not have the same CRS as the rasters:\n\n# check CRss\nprint('aoi CRS: ', aoi.crs)\nprint('nir CRS: ', nir.rio.crs)\nprint('rgb CRS: ', rgb.rio.crs)\n\naoi CRS: epsg:4326\nnir CRS: EPSG:26911\nrgb CRS: EPSG:26911\n\n\nSo let’s reproject:\n\n# reproject aoi to rgb crs\naoi = aoi.to_crs(rgb.rio.crs)\nprint('matched crs?', aoi.crs == rgb.rio.crs)\naoi.crs\n\nmatched crs? True\n\n\n<Projected CRS: EPSG:26911>\nName: NAD83 / UTM zone 11N\nAxis Info [cartesian]:\n- [east]: Easting (metre)\n- [north]: Northing (metre)\nArea of Use:\n- undefined\nCoordinate Operation:\n- name: UTM zone 11N\n- method: Transverse Mercator\nDatum: North American Datum 1983\n- Ellipsoid: GRS 1980\n- Prime Meridian: Greenwich\n\n\nAnd plot them together:\n\n# plot aoi outline and RGB raster together\nfig, ax = plt.subplots()\nfig.set_size_inches((size, size*aspect)) # reuse size and aspect\nrgb.plot.imshow(ax=ax)\naoi.plot(ax=ax, alpha=0.6)\n\n<Axes: title={'center': 'spatial_ref = 0'}, xlabel='x', ylabel='y'>\n\n\n\n\n\nTo clip the raster using the aoi polygon we use the .rio.clip_box() method:\n\n# clip rasters to aoi\nrgb_small = rgb.rio.clip_box(*aoi.total_bounds)\nnir_small = nir.rio.clip_box(*aoi.total_bounds)\n\nNotice a few things: - we had to use the .rio accessor to access the clip_box() method - similarly to the shapely.box() function we’ve used previously, .rio.clip_box() usual parameters are minx, miny, maxx, maxy. We are using the * asterisk as an unpacking operator to get these from the list aoi.total_bounds.\nLet’s check our clipped data:\n\n# check shape updates\nprint('original shape: ', rgb.shape)\nprint('reduced shape: ', rgb_small.shape)\n\n# plot with correct sizes\nsize = 4\naspect = rgb_small.rio.width/ rgb_small.rio.height\nrgb_small.plot.imshow(size=size, aspect=aspect)\n\noriginal shape: (3, 3208, 2419)\nreduced shape: (3, 1128, 1454)\n\n\n<matplotlib.image.AxesImage at 0x145c332d0>\n\n\n\n\n\n\n# check shape updates\nprint('original shape: ', nir.shape)\nprint('reduced shape: ', nir_small.shape)\n\nnir_small.plot()\n\noriginal shape: (1, 3208, 2419)\nreduced shape: (1, 1128, 1454)\n\n\n<matplotlib.collections.QuadMesh at 0x145d43890>" }, { "objectID": "lectures/lesson-17-rioxarray.html#compute-ndvi", "href": "lectures/lesson-17-rioxarray.html#compute-ndvi", - "title": "19  rioxarray", - "section": "19.8 Compute NDVI", - "text": "19.8 Compute NDVI\nWe often want to combine values of and perform calculations on rasters to create a new output raster. In our case, we are interested in computing the Normalized Difference Vegetation Index (NDVI) over our area of interest. The NDVI is an index commonly used to check if an area has live green vegetation or not.\nAccording to the Earth Observing System > The results of the NDVI calculation range from -1 to 1. Negative values correspond to areas with water surfaces, manmade structures, rocks, clouds, snow; bare soil usually falls within 0.1-0.2 range; and plants will always have positive values between 0.2 and 1. Healthy, dense vegetation canopy should be above 0.5, and sparse vegetation will most likely fall within 0.2 to 0.5.\nThe NDVI is calculated using the NIR and red bands. The formula is\n\\(NDVI = \\frac{NIR - Red}{NIR + Red}.\\)\nFirst, we need to select the red band:\n\nred = rgb_small.sel(band=1)\nred\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 1128, x: 1454)>\n[1640112 values with dtype=uint8]\nCoordinates:\n band int64 1\n * x (x) float64 2.513e+05 2.513e+05 ... 2.522e+05 2.522e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.812e+06 3.812e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 1128x: 1454...[1640112 values with dtype=uint8]Coordinates: (4)band()int641array(1)x(x)float642.513e+05 2.513e+05 ... 2.522e+05axis :Xlong_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :metrearray([251303.1, 251303.7, 251304.3, ..., 252173.7, 252174.3, 252174.9])y(y)float643.813e+06 3.813e+06 ... 3.812e+06axis :Ylong_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :metrearray([3812746.5, 3812745.9, 3812745.3, ..., 3812071.5, 3812070.9, 3812070.3])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251302.8 0.600000000000012 0.0 3812746.8 0.0 -0.5999999999997521array(0)Indexes: (2)xPandasIndexPandasIndex(Index([251303.09999999998, 251303.69999999998, 251304.3,\n 251304.89999999997, 251305.49999999997, 251306.09999999998,\n 251306.69999999998, 251307.3, 251307.89999999997,\n 251308.49999999997,\n ...\n 252169.5, 252170.09999999998, 252170.69999999998,\n 252171.3, 252171.9, 252172.5,\n 252173.09999999998, 252173.69999999998, 252174.3,\n 252174.9],\n dtype='float64', name='x', length=1454))yPandasIndexPandasIndex(Index([ 3812746.5, 3812745.9000000004, 3812745.3000000003,\n 3812744.7, 3812744.1, 3812743.5,\n 3812742.9000000004, 3812742.3000000003, 3812741.7,\n 3812741.1,\n ...\n 3812075.7, 3812075.1, 3812074.5,\n 3812073.9, 3812073.3000000003, 3812072.7,\n 3812072.1, 3812071.5, 3812070.9,\n 3812070.3000000003],\n dtype='float64', name='y', length=1128))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0\n\n\nTo be able to perform the calculation successfully, we will need to udpate the data type of our rasters:\n\nred16 = red.astype('int16')\nnir16 = nir_small.astype('int16')\nprint('RED: original dtype:', rgb_small.dtype, '.... converted dtype:', red16.dtype)\nprint('NIR: original dtype:', nir.dtype, '.... converted dtype:', nir16.dtype)\n\nRED: original dtype: uint8 .... converted dtype: int16\nNIR: original dtype: uint8 .... converted dtype: int16\n\n\nWe can perform raster calculations using the same arithmetic we use for np.arrays (because, underneath it all, they are). So our NDVI calculation is as follows:\n\n# calculate and plot NDVI\nndvi = (nir16 - red16)/(nir16+red16)\nndvi.plot()\n\n<matplotlib.collections.QuadMesh at 0x145e5f290>\n\n\n\n\n\nRemember that plants will always have positive NDVI values between 0.2 and 1. Can you spot the Courthouse?\n\n\n\n\n\n\nWhy change the data type?\n\n\n\nThe uint8 (8-bit unsigned integer) is a very small data type that only holds integers from 0 up to 255. In particular, calculations don’t return what what we are used to when working with intgers (they’re done module 256):\n\nnp.uint8(150) + np.uint8(150)\n\n/var/folders/gm/chd1kps96_g7xdxyfw150wm80000gp/T/ipykernel_84845/1890984988.py:1: RuntimeWarning: overflow encountered in scalar add\n np.uint8(150) + np.uint8(150)\n\n\n44\n\n\nIn the NDVI formula we have to add NIR + Red. If both NIR and Red are very close to 255, when we add them, the calculation overflows the uint8 data type and we don’t get the expected results:\n\nx = (nir - red)/(nir + red)\nx.plot()\n\n<matplotlib.collections.QuadMesh at 0x145f49d10>\n\n\n\n\n\nThis is why we need to manually convert both rasters into int16, which will be big enough to hold all the numbers that appear in the calculations.\nNotice too, that when we performed the NDVI calculation we did not get any warning, although we were overflowing the computation at every cell of our array. This is can be an example of failing silently, where we don’t get any warnings about the errors in our computation. That’s why it’s so important to double-check our results!" + "title": "20  rioxarray", + "section": "20.8 Compute NDVI", + "text": "20.8 Compute NDVI\nWe often want to combine values of and perform calculations on rasters to create a new output raster. In our case, we are interested in computing the Normalized Difference Vegetation Index (NDVI) over our area of interest. The NDVI is an index commonly used to check if an area has live green vegetation or not.\nAccording to the Earth Observing System > The results of the NDVI calculation range from -1 to 1. Negative values correspond to areas with water surfaces, manmade structures, rocks, clouds, snow; bare soil usually falls within 0.1-0.2 range; and plants will always have positive values between 0.2 and 1. Healthy, dense vegetation canopy should be above 0.5, and sparse vegetation will most likely fall within 0.2 to 0.5.\nThe NDVI is calculated using the NIR and red bands. The formula is\n\\(NDVI = \\frac{NIR - Red}{NIR + Red}.\\)\nFirst, we need to select the red band:\n\nred = rgb_small.sel(band=1)\nred\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 1128, x: 1454)>\n[1640112 values with dtype=uint8]\nCoordinates:\n band int64 1\n * x (x) float64 2.513e+05 2.513e+05 ... 2.522e+05 2.522e+05\n * y (y) float64 3.813e+06 3.813e+06 ... 3.812e+06 3.812e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 1128x: 1454...[1640112 values with dtype=uint8]Coordinates: (4)band()int641array(1)x(x)float642.513e+05 2.513e+05 ... 2.522e+05axis :Xlong_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :metrearray([251303.1, 251303.7, 251304.3, ..., 252173.7, 252174.3, 252174.9])y(y)float643.813e+06 3.813e+06 ... 3.812e+06axis :Ylong_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :metrearray([3812746.5, 3812745.9, 3812745.3, ..., 3812071.5, 3812070.9, 3812070.3])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :251302.8 0.600000000000012 0.0 3812746.8 0.0 -0.5999999999997521array(0)Indexes: (2)xPandasIndexPandasIndex(Index([251303.09999999998, 251303.69999999998, 251304.3,\n 251304.89999999997, 251305.49999999997, 251306.09999999998,\n 251306.69999999998, 251307.3, 251307.89999999997,\n 251308.49999999997,\n ...\n 252169.5, 252170.09999999998, 252170.69999999998,\n 252171.3, 252171.9, 252172.5,\n 252173.09999999998, 252173.69999999998, 252174.3,\n 252174.9],\n dtype='float64', name='x', length=1454))yPandasIndexPandasIndex(Index([ 3812746.5, 3812745.9000000004, 3812745.3000000003,\n 3812744.7, 3812744.1, 3812743.5,\n 3812742.9000000004, 3812742.3000000003, 3812741.7,\n 3812741.1,\n ...\n 3812075.7, 3812075.1, 3812074.5,\n 3812073.9, 3812073.3000000003, 3812072.7,\n 3812072.1, 3812071.5, 3812070.9,\n 3812070.3000000003],\n dtype='float64', name='y', length=1128))Attributes: (3)AREA_OR_POINT :Areascale_factor :1.0add_offset :0.0\n\n\nTo be able to perform the calculation successfully, we will need to udpate the data type of our rasters:\n\nred16 = red.astype('int16')\nnir16 = nir_small.astype('int16')\nprint('RED: original dtype:', rgb_small.dtype, '.... converted dtype:', red16.dtype)\nprint('NIR: original dtype:', nir.dtype, '.... converted dtype:', nir16.dtype)\n\nRED: original dtype: uint8 .... converted dtype: int16\nNIR: original dtype: uint8 .... converted dtype: int16\n\n\nWe can perform raster calculations using the same arithmetic we use for np.arrays (because, underneath it all, they are). So our NDVI calculation is as follows:\n\n# calculate and plot NDVI\nndvi = (nir16 - red16)/(nir16+red16)\nndvi.plot()\n\n<matplotlib.collections.QuadMesh at 0x145e5f290>\n\n\n\n\n\nRemember that plants will always have positive NDVI values between 0.2 and 1. Can you spot the Courthouse?\n\n\n\n\n\n\nWhy change the data type?\n\n\n\nThe uint8 (8-bit unsigned integer) is a very small data type that only holds integers from 0 up to 255. In particular, calculations don’t return what what we are used to when working with intgers (they’re done module 256):\n\nnp.uint8(150) + np.uint8(150)\n\n/var/folders/gm/chd1kps96_g7xdxyfw150wm80000gp/T/ipykernel_84845/1890984988.py:1: RuntimeWarning: overflow encountered in scalar add\n np.uint8(150) + np.uint8(150)\n\n\n44\n\n\nIn the NDVI formula we have to add NIR + Red. If both NIR and Red are very close to 255, when we add them, the calculation overflows the uint8 data type and we don’t get the expected results:\n\nx = (nir - red)/(nir + red)\nx.plot()\n\n<matplotlib.collections.QuadMesh at 0x145f49d10>\n\n\n\n\n\nThis is why we need to manually convert both rasters into int16, which will be big enough to hold all the numbers that appear in the calculations.\nNotice too, that when we performed the NDVI calculation we did not get any warning, although we were overflowing the computation at every cell of our array. This is can be an example of failing silently, where we don’t get any warnings about the errors in our computation. That’s why it’s so important to double-check our results!" }, { "objectID": "lectures/lesson-19-dem.html#data", "href": "lectures/lesson-19-dem.html#data", - "title": "20  Raster manipulation I", - "section": "20.1 Data", - "text": "20.1 Data\n\nWe will use data from the Copernicus Digital Elevation Model (DEM). This dataset ris based on radar satellite data measuring the relative height of Earth’s surface. The Copernicus DEM is available at 30-meter and 90-meter resolution. The data prepared for this class is a tile of 1°x1° latitude/longitude form the Copernicus DEM at 90-meter resolution over the Grand Canyon in the US. Each pixel represents vertical units measured in meters. The data was accessed via the Microsoft’s Planetary Computer Copernicus DEM GLO-30 data repository\nClick here to access the Copernicus DEM complete product Handbook." + "title": "21  Raster manipulation I", + "section": "21.1 Data", + "text": "21.1 Data\n\nWe will use data from the Copernicus Digital Elevation Model (DEM). This dataset ris based on radar satellite data measuring the relative height of Earth’s surface. The Copernicus DEM is available at 30-meter and 90-meter resolution. The data prepared for this class is a tile of 1°x1° latitude/longitude form the Copernicus DEM at 90-meter resolution over the Grand Canyon in the US. Each pixel represents vertical units measured in meters. The data was accessed via the Microsoft’s Planetary Computer Copernicus DEM GLO-30 data repository\nClick here to access the Copernicus DEM complete product Handbook." }, { "objectID": "lectures/lesson-19-dem.html#import-data", "href": "lectures/lesson-19-dem.html#import-data", - "title": "20  Raster manipulation I", - "section": "20.2 Import data", - "text": "20.2 Import data\nLet’s start by loading the libraries we’ll use:\n\nimport os\nimport numpy as np\n\nimport geopandas as gpd\nimport xarray as xr\nimport rioxarray as rioxr\n\nfrom shapely import Point\nimport matplotlib.pyplot as plt\n\n\n\n\n\n\n\nExercise\n\n\n\n\nUse os to createa file path to the ‘grand_canyon_DEM.tif’ file and import the raster into a variable called gc.\nPlot the raster, check the CRS, and create a histogram with updated bin numbers.\n\n\n\n\n\n\n\n\n\nSolution\n\n\n\n\n\nLoading our dataset:\n\n# load Grand Canyon DEM data\ndata_path = os.path.join(os.getcwd(),'data','grand_canyon_DEM.tif')\ngc = rioxr.open_rasterio(data_path)\ngc\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 1200, x: 1200)>\n[1440000 values with dtype=float32]\nCoordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 1200x: 1200...[1440000 values with dtype=float32]Coordinates: (4)band(band)int641array([1])x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-113. , -112.999167, -112.998333, ..., -112.0025 , -112.001667,\n -112.000833])y(y)float6437.0 37.0 37.0 ... 36.0 36.0 36.0array([37. , 36.999167, 36.998333, ..., 36.0025 , 36.001667, 36.000833])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ -113.0, -112.99916666666667, -112.99833333333333,\n -112.9975, -112.99666666666667, -112.99583333333334,\n -112.995, -112.99416666666667, -112.99333333333334,\n -112.9925,\n ...\n -112.00833333333333, -112.0075, -112.00666666666666,\n -112.00583333333333, -112.005, -112.00416666666666,\n -112.00333333333333, -112.0025, -112.00166666666667,\n -112.00083333333333],\n dtype='float64', name='x', length=1200))yPandasIndexPandasIndex(Index([ 37.0, 36.99916666666667, 36.998333333333335,\n 36.9975, 36.99666666666667, 36.99583333333333,\n 36.995, 36.994166666666665, 36.99333333333333,\n 36.9925,\n ...\n 36.00833333333333, 36.0075, 36.00666666666667,\n 36.005833333333335, 36.005, 36.00416666666666,\n 36.00333333333333, 36.0025, 36.001666666666665,\n 36.00083333333333],\n dtype='float64', name='y', length=1200))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\nA brief exploration of our dataset:\n\n# exploratory plot\ngc.plot()\n\n<matplotlib.collections.QuadMesh at 0x149fbc790>\n\n\n\n\n\nGetting the coordinate reference system (CRS):\n\n# check the raster's CRS\ngc.rio.crs\n\nCRS.from_epsg(4326)\n\n\nCheck distribution of elevation values:\n\n# plot histogram of elevation values\n# get bin values output on \"disposable\" variable _ \n_ = gc.plot.hist(bins=50)\n\n\n\n\n\n\n\n\n\n\n_\n\n\n\nNotice in the previous line of code we used the underscore _ to capture the output of the histogram. The underscore _ is often used in Python to name a “disposable” variable we will not use in the future." + "title": "21  Raster manipulation I", + "section": "21.2 Import data", + "text": "21.2 Import data\nLet’s start by loading the libraries we’ll use:\n\nimport os\nimport numpy as np\n\nimport geopandas as gpd\nimport xarray as xr\nimport rioxarray as rioxr\n\nfrom shapely import Point\nimport matplotlib.pyplot as plt\n\n\n\n\n\n\n\nExercise\n\n\n\n\nUse os to createa file path to the ‘grand_canyon_DEM.tif’ file and import the raster into a variable called gc.\nPlot the raster, check the CRS, and create a histogram with updated bin numbers.\n\n\n\n\n\n\n\n\n\nSolution\n\n\n\n\n\nLoading our dataset:\n\n# load Grand Canyon DEM data\ndata_path = os.path.join(os.getcwd(),'data','grand_canyon_DEM.tif')\ngc = rioxr.open_rasterio(data_path)\ngc\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 1200, x: 1200)>\n[1440000 values with dtype=float32]\nCoordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 1200x: 1200...[1440000 values with dtype=float32]Coordinates: (4)band(band)int641array([1])x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-113. , -112.999167, -112.998333, ..., -112.0025 , -112.001667,\n -112.000833])y(y)float6437.0 37.0 37.0 ... 36.0 36.0 36.0array([37. , 36.999167, 36.998333, ..., 36.0025 , 36.001667, 36.000833])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ -113.0, -112.99916666666667, -112.99833333333333,\n -112.9975, -112.99666666666667, -112.99583333333334,\n -112.995, -112.99416666666667, -112.99333333333334,\n -112.9925,\n ...\n -112.00833333333333, -112.0075, -112.00666666666666,\n -112.00583333333333, -112.005, -112.00416666666666,\n -112.00333333333333, -112.0025, -112.00166666666667,\n -112.00083333333333],\n dtype='float64', name='x', length=1200))yPandasIndexPandasIndex(Index([ 37.0, 36.99916666666667, 36.998333333333335,\n 36.9975, 36.99666666666667, 36.99583333333333,\n 36.995, 36.994166666666665, 36.99333333333333,\n 36.9925,\n ...\n 36.00833333333333, 36.0075, 36.00666666666667,\n 36.005833333333335, 36.005, 36.00416666666666,\n 36.00333333333333, 36.0025, 36.001666666666665,\n 36.00083333333333],\n dtype='float64', name='y', length=1200))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\nA brief exploration of our dataset:\n\n# exploratory plot\ngc.plot()\n\n<matplotlib.collections.QuadMesh at 0x149fbc790>\n\n\n\n\n\nGetting the coordinate reference system (CRS):\n\n# check the raster's CRS\ngc.rio.crs\n\nCRS.from_epsg(4326)\n\n\nCheck distribution of elevation values:\n\n# plot histogram of elevation values\n# get bin values output on \"disposable\" variable _ \n_ = gc.plot.hist(bins=50)\n\n\n\n\n\n\n\n\n\n\n_\n\n\n\nNotice in the previous line of code we used the underscore _ to capture the output of the histogram. The underscore _ is often used in Python to name a “disposable” variable we will not use in the future." }, { "objectID": "lectures/lesson-19-dem.html#dropping-a-dimension-squeeze-and-drop", "href": "lectures/lesson-19-dem.html#dropping-a-dimension-squeeze-and-drop", - "title": "20  Raster manipulation I", - "section": "20.3 Dropping a dimension: squeeze() and drop()", - "text": "20.3 Dropping a dimension: squeeze() and drop()\nNotice that our raster has an unnecessary extra dimension: band.\n\ngc\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 1200, x: 1200)>\narray([[[1539.077 , 1540.6287, ..., 1557.3568, 1552.1139],\n [1537.7278, 1538.4757, ..., 1559.02 , 1555.9811],\n ...,\n [1947.7771, 1943.48 , ..., 1956.2341, 1966.1176],\n [1938.799 , 1933.4049, ..., 2055.6274, 2039.6412]]], dtype=float32)\nCoordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 1200x: 12001.539e+03 1.541e+03 1.541e+03 ... 2.153e+03 2.056e+03 2.04e+03array([[[1539.077 , 1540.6287, ..., 1557.3568, 1552.1139],\n [1537.7278, 1538.4757, ..., 1559.02 , 1555.9811],\n ...,\n [1947.7771, 1943.48 , ..., 1956.2341, 1966.1176],\n [1938.799 , 1933.4049, ..., 2055.6274, 2039.6412]]], dtype=float32)Coordinates: (4)band(band)int641array([1])x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-113. , -112.999167, -112.998333, ..., -112.0025 , -112.001667,\n -112.000833])y(y)float6437.0 37.0 37.0 ... 36.0 36.0 36.0array([37. , 36.999167, 36.998333, ..., 36.0025 , 36.001667, 36.000833])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ -113.0, -112.99916666666667, -112.99833333333333,\n -112.9975, -112.99666666666667, -112.99583333333334,\n -112.995, -112.99416666666667, -112.99333333333334,\n -112.9925,\n ...\n -112.00833333333333, -112.0075, -112.00666666666666,\n -112.00583333333333, -112.005, -112.00416666666666,\n -112.00333333333333, -112.0025, -112.00166666666667,\n -112.00083333333333],\n dtype='float64', name='x', length=1200))yPandasIndexPandasIndex(Index([ 37.0, 36.99916666666667, 36.998333333333335,\n 36.9975, 36.99666666666667, 36.99583333333333,\n 36.995, 36.994166666666665, 36.99333333333333,\n 36.9925,\n ...\n 36.00833333333333, 36.0075, 36.00666666666667,\n 36.005833333333335, 36.005, 36.00416666666666,\n 36.00333333333333, 36.0025, 36.001666666666665,\n 36.00083333333333],\n dtype='float64', name='y', length=1200))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\nThis is making this datsets three-dimensional when it is not needed. We can clean this xarray.DataArray a bit by:\n\nusing the squeeze() method. If we don’t pass any parameters, then squeeze() gets rid of all dimensions with length one, and then\ngetting rid of the associated coordinates for this dimension. We can do this using the xarray.DataArray drop() method and specifying the name of the coordinates we want to remove, in this case ‘band’.\n\nLet’s do this:\n\n# original dimensions and coordinates\nprint(gc.dims, gc.coords,'\\n')\n\n# remove length 1 dimension (band)\ngc = gc.squeeze()\nprint(gc.dims, gc.coords,'\\n')\n\n# remove coordinates associated to band\ngc = gc.drop('band')\nprint(gc.dims, gc.coords)\n\n('band', 'y', 'x') Coordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0 \n\n('y', 'x') Coordinates:\n band int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0 \n\n('y', 'x') Coordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0" + "title": "21  Raster manipulation I", + "section": "21.3 Dropping a dimension: squeeze() and drop()", + "text": "21.3 Dropping a dimension: squeeze() and drop()\nNotice that our raster has an unnecessary extra dimension: band.\n\ngc\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 1, y: 1200, x: 1200)>\narray([[[1539.077 , 1540.6287, ..., 1557.3568, 1552.1139],\n [1537.7278, 1538.4757, ..., 1559.02 , 1555.9811],\n ...,\n [1947.7771, 1943.48 , ..., 1956.2341, 1966.1176],\n [1938.799 , 1933.4049, ..., 2055.6274, 2039.6412]]], dtype=float32)\nCoordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 1y: 1200x: 12001.539e+03 1.541e+03 1.541e+03 ... 2.153e+03 2.056e+03 2.04e+03array([[[1539.077 , 1540.6287, ..., 1557.3568, 1552.1139],\n [1537.7278, 1538.4757, ..., 1559.02 , 1555.9811],\n ...,\n [1947.7771, 1943.48 , ..., 1956.2341, 1966.1176],\n [1938.799 , 1933.4049, ..., 2055.6274, 2039.6412]]], dtype=float32)Coordinates: (4)band(band)int641array([1])x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-113. , -112.999167, -112.998333, ..., -112.0025 , -112.001667,\n -112.000833])y(y)float6437.0 37.0 37.0 ... 36.0 36.0 36.0array([37. , 36.999167, 36.998333, ..., 36.0025 , 36.001667, 36.000833])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ -113.0, -112.99916666666667, -112.99833333333333,\n -112.9975, -112.99666666666667, -112.99583333333334,\n -112.995, -112.99416666666667, -112.99333333333334,\n -112.9925,\n ...\n -112.00833333333333, -112.0075, -112.00666666666666,\n -112.00583333333333, -112.005, -112.00416666666666,\n -112.00333333333333, -112.0025, -112.00166666666667,\n -112.00083333333333],\n dtype='float64', name='x', length=1200))yPandasIndexPandasIndex(Index([ 37.0, 36.99916666666667, 36.998333333333335,\n 36.9975, 36.99666666666667, 36.99583333333333,\n 36.995, 36.994166666666665, 36.99333333333333,\n 36.9925,\n ...\n 36.00833333333333, 36.0075, 36.00666666666667,\n 36.005833333333335, 36.005, 36.00416666666666,\n 36.00333333333333, 36.0025, 36.001666666666665,\n 36.00083333333333],\n dtype='float64', name='y', length=1200))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\nThis is making this datsets three-dimensional when it is not needed. We can clean this xarray.DataArray a bit by:\n\nusing the squeeze() method. If we don’t pass any parameters, then squeeze() gets rid of all dimensions with length one, and then\ngetting rid of the associated coordinates for this dimension. We can do this using the xarray.DataArray drop() method and specifying the name of the coordinates we want to remove, in this case ‘band’.\n\nLet’s do this:\n\n# original dimensions and coordinates\nprint(gc.dims, gc.coords,'\\n')\n\n# remove length 1 dimension (band)\ngc = gc.squeeze()\nprint(gc.dims, gc.coords,'\\n')\n\n# remove coordinates associated to band\ngc = gc.drop('band')\nprint(gc.dims, gc.coords)\n\n('band', 'y', 'x') Coordinates:\n * band (band) int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0 \n\n('y', 'x') Coordinates:\n band int64 1\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0 \n\n('y', 'x') Coordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 37.0 37.0 37.0 37.0 ... 36.0 36.0 36.0 36.0\n spatial_ref int64 0" }, { "objectID": "lectures/lesson-19-dem.html#global-information", "href": "lectures/lesson-19-dem.html#global-information", - "title": "20  Raster manipulation I", - "section": "20.4 Global information", - "text": "20.4 Global information\nTo get a better sense of our raster data we can apply common numpy functions to extract information from the xarray.DataArray underlying np.array.\nFor example, we can get the maximum across all the xarray.DataArray’s values by using the max() method:\n\n# get the maximum elevation value (get an xarray.DataArray)\ngc.max()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(2808.8005, dtype=float32)\nCoordinates:\n spatial_ref int64 0xarray.DataArray2.809e+03array(2808.8005, dtype=float32)Coordinates: (1)spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (0)Attributes: (0)\n\n\nNotice that the output for this method is another xarray.DataArray. In general, methods that reduce or subset an xarray.DataArray will always return another xarray.DataArray. To extract the value from a 1x1 xarray.DataArray as a number we use the .item() method:\n\n# get the maximum elevation value as a number\ngc.max().item()\n\n2808.800537109375" + "title": "21  Raster manipulation I", + "section": "21.4 Global information", + "text": "21.4 Global information\nTo get a better sense of our raster data we can apply common numpy functions to extract information from the xarray.DataArray underlying np.array.\nFor example, we can get the maximum across all the xarray.DataArray’s values by using the max() method:\n\n# get the maximum elevation value (get an xarray.DataArray)\ngc.max()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray ()>\narray(2808.8005, dtype=float32)\nCoordinates:\n spatial_ref int64 0xarray.DataArray2.809e+03array(2808.8005, dtype=float32)Coordinates: (1)spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (0)Attributes: (0)\n\n\nNotice that the output for this method is another xarray.DataArray. In general, methods that reduce or subset an xarray.DataArray will always return another xarray.DataArray. To extract the value from a 1x1 xarray.DataArray as a number we use the .item() method:\n\n# get the maximum elevation value as a number\ngc.max().item()\n\n2808.800537109375" }, { "objectID": "lectures/lesson-19-dem.html#f-strings", "href": "lectures/lesson-19-dem.html#f-strings", - "title": "20  Raster manipulation I", - "section": "20.5 f-strings", - "text": "20.5 f-strings\nSo far we have printed variables using string concatenation inside the print() function. This means that we write commas between every string and variable we want to print, and then the print function concatenates these into a single string. For example:\n\n# minimum elevation\n# print via concatenation\nprint(\"Minimum elevation: \", gc.min().item())\n\nMinimum elevation: 528.0\n\n\nAnother popular way of mixing strings and variables in print statements is by creating an f-string which stands for “formatted string”. The simplest syntax for an f-string is:\nf\" some text {replace}\"\nwhere replace can be a variable, an expression, or a function or method call. For example:\n\n# f-string with mean elevation\nf\"Mean elevation: {gc.mean().item()}\"\n\n'Mean elevation: 1764.859375'\n\n\nWe just created a string replacing the value inside the curly brackets {}. Notice the computation is occurring in real time as the string gets made and there’s no need to define any extra variables.\nOne of the advantages of using f-strings is that they offer customization for formatting the output, without the need to use extra functions. For example, if we want to print the median value of our raster rounded to two decimals we can do:\n\n# median elevation, rounded to two decimals\n# print via f-string formatting\nprint(f\"Median elevation: {gc.median().item():.2f}\")\n\nMedian elevation: 1726.15\n\n\nSome extra resources about using f-string formatting: - Real Python - Python’s F-String for String Interpolation and Formatting - Python documentation- Format Specification Mini-Language" + "title": "21  Raster manipulation I", + "section": "21.5 f-strings", + "text": "21.5 f-strings\nSo far we have printed variables using string concatenation inside the print() function. This means that we write commas between every string and variable we want to print, and then the print function concatenates these into a single string. For example:\n\n# minimum elevation\n# print via concatenation\nprint(\"Minimum elevation: \", gc.min().item())\n\nMinimum elevation: 528.0\n\n\nAnother popular way of mixing strings and variables in print statements is by creating an f-string which stands for “formatted string”. The simplest syntax for an f-string is:\nf\" some text {replace}\"\nwhere replace can be a variable, an expression, or a function or method call. For example:\n\n# f-string with mean elevation\nf\"Mean elevation: {gc.mean().item()}\"\n\n'Mean elevation: 1764.859375'\n\n\nWe just created a string replacing the value inside the curly brackets {}. Notice the computation is occurring in real time as the string gets made and there’s no need to define any extra variables.\nOne of the advantages of using f-strings is that they offer customization for formatting the output, without the need to use extra functions. For example, if we want to print the median value of our raster rounded to two decimals we can do:\n\n# median elevation, rounded to two decimals\n# print via f-string formatting\nprint(f\"Median elevation: {gc.median().item():.2f}\")\n\nMedian elevation: 1726.15\n\n\nSome extra resources about using f-string formatting: - Real Python - Python’s F-String for String Interpolation and Formatting - Python documentation- Format Specification Mini-Language" }, { "objectID": "lectures/lesson-19-dem.html#aggregation-coarsen", "href": "lectures/lesson-19-dem.html#aggregation-coarsen", - "title": "20  Raster manipulation I", - "section": "20.6 Aggregation: coarsen()", - "text": "20.6 Aggregation: coarsen()\nLet’s go back to our raster. Rasters with high spatial resolution can offer great insight into fine-scale patterns, but can also be challenging to process due to their size. In these cases, it can be useful to use an aggregation method to spatially downsample and obtain a raster with a coarser resolution.\nTo spatially downsample an xarray.DataArray we use the coarsen() method followed by an aggreagator function. The general syntax to coarsen a 2-dimensional :\nxdataarray.coarsen(x=x_winside, y=y_winside).aggr()\nwhere:\n\nxdataarray is a 2-dimensional xarray.DataArray with dimensions x and y.\nx and y are the names dimensions of the xarray.DataArray (these could have other names like lon/lat)\nx_winside and y_winside are the dimensions of the window used to make the aggregation.\naggr() is an aggregator function, this is the function which will be applied to each window. Examples are min(), max(), sum() and mean().\n\nExample\nSuppose we want to coarsen our Grand Canyon elevation raster from 1200x1200 pixels to a raster of 60x60 pixels where by calculating the maximun at each window. Remember the windows are non-overlapping, so we will obtain one pixel per window. A quick division tells us that to got from 1200x1200 to 60x60 we will need to use a 20x20 window. The aggregator function on each of this window will be max(). Our call looks like this:\n\n# coarsen to a 60x60 raster calculating the maximum value in each window\ngc_coarse = gc.coarsen(x=20,y=20).max()\ngc_coarse\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 60, x: 60)>\narray([[1543.2703, 1536.2582, 1905.042 , ..., 1752.2424, 1870.8307,\n 1841.452 ],\n [1511.454 , 1548.8307, 1944.3944, ..., 1782.2041, 1881.2681,\n 1925.4775],\n [1508.7517, 1549.587 , 1666.655 , ..., 1762.2898, 1769.2545,\n 1974.3519],\n ...,\n [1944.1821, 1919.3833, 1891.5801, ..., 1898.1538, 1619.7513,\n 1548.6755],\n [1932.8036, 1924.7229, 1894.8312, ..., 1732.8718, 1707.6681,\n 1720.0978],\n [1948.1812, 1923.23 , 1898.333 , ..., 2224.2847, 2248.0986,\n 2272.8677]], dtype=float32)\nCoordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 36.99 36.98 36.96 36.94 ... 36.06 36.04 36.03 36.01\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 60x: 601.543e+03 1.536e+03 1.905e+03 ... 2.224e+03 2.248e+03 2.273e+03array([[1543.2703, 1536.2582, 1905.042 , ..., 1752.2424, 1870.8307,\n 1841.452 ],\n [1511.454 , 1548.8307, 1944.3944, ..., 1782.2041, 1881.2681,\n 1925.4775],\n [1508.7517, 1549.587 , 1666.655 , ..., 1762.2898, 1769.2545,\n 1974.3519],\n ...,\n [1944.1821, 1919.3833, 1891.5801, ..., 1898.1538, 1619.7513,\n 1548.6755],\n [1932.8036, 1924.7229, 1894.8312, ..., 1732.8718, 1707.6681,\n 1720.0978],\n [1948.1812, 1923.23 , 1898.333 , ..., 2224.2847, 2248.0986,\n 2272.8677]], dtype=float32)Coordinates: (3)x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-112.992083, -112.975417, -112.95875 , -112.942083, -112.925417,\n -112.90875 , -112.892083, -112.875417, -112.85875 , -112.842083,\n -112.825417, -112.80875 , -112.792083, -112.775417, -112.75875 ,\n -112.742083, -112.725417, -112.70875 , -112.692083, -112.675417,\n -112.65875 , -112.642083, -112.625417, -112.60875 , -112.592083,\n -112.575417, -112.55875 , -112.542083, -112.525417, -112.50875 ,\n -112.492083, -112.475417, -112.45875 , -112.442083, -112.425417,\n -112.40875 , -112.392083, -112.375417, -112.35875 , -112.342083,\n -112.325417, -112.30875 , -112.292083, -112.275417, -112.25875 ,\n -112.242083, -112.225417, -112.20875 , -112.192083, -112.175417,\n -112.15875 , -112.142083, -112.125417, -112.10875 , -112.092083,\n -112.075417, -112.05875 , -112.042083, -112.025417, -112.00875 ])y(y)float6436.99 36.98 36.96 ... 36.03 36.01array([36.992083, 36.975417, 36.95875 , 36.942083, 36.925417, 36.90875 ,\n 36.892083, 36.875417, 36.85875 , 36.842083, 36.825417, 36.80875 ,\n 36.792083, 36.775417, 36.75875 , 36.742083, 36.725417, 36.70875 ,\n 36.692083, 36.675417, 36.65875 , 36.642083, 36.625417, 36.60875 ,\n 36.592083, 36.575417, 36.55875 , 36.542083, 36.525417, 36.50875 ,\n 36.492083, 36.475417, 36.45875 , 36.442083, 36.425417, 36.40875 ,\n 36.392083, 36.375417, 36.35875 , 36.342083, 36.325417, 36.30875 ,\n 36.292083, 36.275417, 36.25875 , 36.242083, 36.225417, 36.20875 ,\n 36.192083, 36.175417, 36.15875 , 36.142083, 36.125417, 36.10875 ,\n 36.092083, 36.075417, 36.05875 , 36.042083, 36.025417, 36.00875 ])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (2)xPandasIndexPandasIndex(Index([-112.99208333333334, -112.97541666666669, -112.95875000000001,\n -112.94208333333331, -112.92541666666668, -112.90874999999998,\n -112.89208333333336, -112.87541666666664, -112.85874999999999,\n -112.8420833333333, -112.82541666666665, -112.80874999999999,\n -112.79208333333334, -112.77541666666666, -112.75875,\n -112.74208333333334, -112.72541666666669, -112.70875000000001,\n -112.69208333333331, -112.67541666666668, -112.65874999999998,\n -112.64208333333336, -112.62541666666664, -112.60874999999999,\n -112.5920833333333, -112.57541666666665, -112.55874999999999,\n -112.54208333333334, -112.52541666666666, -112.50875,\n -112.49208333333334, -112.47541666666669, -112.45875000000001,\n -112.44208333333331, -112.42541666666668, -112.40874999999998,\n -112.39208333333336, -112.37541666666664, -112.35874999999999,\n -112.3420833333333, -112.32541666666665, -112.30874999999999,\n -112.29208333333334, -112.27541666666666, -112.25875,\n -112.24208333333334, -112.22541666666669, -112.20875000000001,\n -112.19208333333331, -112.17541666666668, -112.15874999999998,\n -112.14208333333336, -112.12541666666664, -112.10874999999999,\n -112.0920833333333, -112.07541666666665, -112.05874999999999,\n -112.04208333333334, -112.02541666666666, -112.00875],\n dtype='float64', name='x'))yPandasIndexPandasIndex(Index([ 36.99208333333333, 36.97541666666667, 36.95875,\n 36.942083333333336, 36.92541666666666, 36.90875,\n 36.89208333333333, 36.87541666666666, 36.85875,\n 36.842083333333335, 36.82541666666667, 36.808749999999996,\n 36.79208333333334, 36.77541666666667, 36.758750000000006,\n 36.74208333333333, 36.72541666666667, 36.70875,\n 36.692083333333336, 36.67541666666666, 36.65875,\n 36.64208333333333, 36.62541666666666, 36.60875,\n 36.592083333333335, 36.57541666666667, 36.558749999999996,\n 36.54208333333334, 36.52541666666667, 36.508750000000006,\n 36.49208333333333, 36.47541666666667, 36.458749999999995,\n 36.442083333333336, 36.42541666666666, 36.40875,\n 36.39208333333333, 36.37541666666666, 36.35875,\n 36.342083333333335, 36.32541666666667, 36.308749999999996,\n 36.29208333333334, 36.27541666666667, 36.258750000000006,\n 36.24208333333333, 36.22541666666667, 36.208749999999995,\n 36.192083333333336, 36.17541666666666, 36.15875,\n 36.14208333333333, 36.12541666666666, 36.10875,\n 36.092083333333335, 36.07541666666667, 36.058749999999996,\n 36.04208333333334, 36.02541666666667, 36.008750000000006],\n dtype='float64', name='y'))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\n\n# inspect old and coarsened resolution\nprint(f\"old resolution: {gc.rio.width}x{gc.rio.height}\")\nprint(f\"coarse resolution: {gc_coarse.rio.width}x{gc_coarse.rio.height}\")\ngc_coarse.plot()\n\nold resolution: 1200x1200\ncoarse resolution: 60x60\n\n\n<matplotlib.collections.QuadMesh at 0x14aae6550>\n\n\n\n\n\n\n\n\n\n\n\nExercise\n\n\n\nDownsample the elevation raster into a 240x240 raster by taking the average over windows of the appropriate size.\nUse an f-string to check whether the spatial bounds of the rasters have changed.\n\n\n\n\n\n\n\n\nSolution\n\n\n\n\n\nDecrese resolution:\n\n# coarsen to a 240x240 raster calculating the mean in each window\ngc_coarse_mean = gc.coarsen(x=5,y=5).mean()\ngc_coarse_mean\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 240, x: 240)>\narray([[1535.3939, 1535.8931, 1532.352 , ..., 1625.2432, 1551.3588,\n 1563.1356],\n [1521.945 , 1521.6814, 1521.8566, ..., 1584.5142, 1627.8928,\n 1593.6633],\n [1509.4419, 1511.2308, 1509.6614, ..., 1609.3103, 1700.0897,\n 1650.7216],\n ...,\n [1932.3878, 1923.3806, 1905.713 , ..., 1738.6489, 1604.5614,\n 1512.9637],\n [1941.5138, 1928.9819, 1911.285 , ..., 2034.8147, 1858.8019,\n 1736.1644],\n [1938.8174, 1919.249 , 1919.581 , ..., 2261.3406, 2198.5483,\n 2007.7867]], dtype=float32)\nCoordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 36.99 36.99 36.99 ... 36.02 36.01 36.01 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 240x: 2401.535e+03 1.536e+03 1.532e+03 ... 2.261e+03 2.199e+03 2.008e+03array([[1535.3939, 1535.8931, 1532.352 , ..., 1625.2432, 1551.3588,\n 1563.1356],\n [1521.945 , 1521.6814, 1521.8566, ..., 1584.5142, 1627.8928,\n 1593.6633],\n [1509.4419, 1511.2308, 1509.6614, ..., 1609.3103, 1700.0897,\n 1650.7216],\n ...,\n [1932.3878, 1923.3806, 1905.713 , ..., 1738.6489, 1604.5614,\n 1512.9637],\n [1941.5138, 1928.9819, 1911.285 , ..., 2034.8147, 1858.8019,\n 1736.1644],\n [1938.8174, 1919.249 , 1919.581 , ..., 2261.3406, 2198.5483,\n 2007.7867]], dtype=float32)Coordinates: (3)x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-112.998333, -112.994167, -112.99 , ..., -112.010833, -112.006667,\n -112.0025 ])y(y)float6437.0 36.99 36.99 ... 36.01 36.0array([36.998333, 36.994167, 36.99 , ..., 36.010833, 36.006667, 36.0025 ])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (2)xPandasIndexPandasIndex(Index([-112.99833333333333, -112.99416666666666, -112.98999999999998,\n -112.98583333333333, -112.98166666666665, -112.9775,\n -112.97333333333333, -112.96916666666667, -112.965,\n -112.96083333333334,\n ...\n -112.03999999999999, -112.03583333333333, -112.03166666666667,\n -112.0275, -112.02333333333334, -112.01916666666666,\n -112.01500000000001, -112.01083333333334, -112.00666666666666,\n -112.00250000000001],\n dtype='float64', name='x', length=240))yPandasIndexPandasIndex(Index([36.998333333333335, 36.994166666666665, 36.99,\n 36.98583333333333, 36.98166666666667, 36.9775,\n 36.973333333333336, 36.969166666666666, 36.965,\n 36.96083333333333,\n ...\n 36.04, 36.03583333333333, 36.031666666666666,\n 36.0275, 36.02333333333333, 36.01916666666666,\n 36.015, 36.01083333333333, 36.00666666666667,\n 36.0025],\n dtype='float64', name='y', length=240))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\n\ngc_coarse_mean.plot()\n\n<matplotlib.collections.QuadMesh at 0x14ad3dfd0>\n\n\n\n\n\nCheck spatial bounds:\n\nprint(f\"old spatial bounds: {gc.rio.bounds()}\")\nprint(f\"coarse resolution: {gc_coarse_mean.rio.bounds}\")\ngc_coarse_mean.plot()\n\nold spatial bounds: (-113.00041666666667, 36.000416666666666, -112.00041666666667, 37.000416666666666)\ncoarse resolution: <bound method XRasterBase.bounds of <rioxarray.raster_array.RasterArray object at 0x14ad8a7d0>>\n\n\n<matplotlib.collections.QuadMesh at 0x14af33450>" + "title": "21  Raster manipulation I", + "section": "21.6 Aggregation: coarsen()", + "text": "21.6 Aggregation: coarsen()\nLet’s go back to our raster. Rasters with high spatial resolution can offer great insight into fine-scale patterns, but can also be challenging to process due to their size. In these cases, it can be useful to use an aggregation method to spatially downsample and obtain a raster with a coarser resolution.\nTo spatially downsample an xarray.DataArray we use the coarsen() method followed by an aggreagator function. The general syntax to coarsen a 2-dimensional :\nxdataarray.coarsen(x=x_winside, y=y_winside).aggr()\nwhere:\n\nxdataarray is a 2-dimensional xarray.DataArray with dimensions x and y.\nx and y are the names dimensions of the xarray.DataArray (these could have other names like lon/lat)\nx_winside and y_winside are the dimensions of the window used to make the aggregation.\naggr() is an aggregator function, this is the function which will be applied to each window. Examples are min(), max(), sum() and mean().\n\nExample\nSuppose we want to coarsen our Grand Canyon elevation raster from 1200x1200 pixels to a raster of 60x60 pixels where by calculating the maximun at each window. Remember the windows are non-overlapping, so we will obtain one pixel per window. A quick division tells us that to got from 1200x1200 to 60x60 we will need to use a 20x20 window. The aggregator function on each of this window will be max(). Our call looks like this:\n\n# coarsen to a 60x60 raster calculating the maximum value in each window\ngc_coarse = gc.coarsen(x=20,y=20).max()\ngc_coarse\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 60, x: 60)>\narray([[1543.2703, 1536.2582, 1905.042 , ..., 1752.2424, 1870.8307,\n 1841.452 ],\n [1511.454 , 1548.8307, 1944.3944, ..., 1782.2041, 1881.2681,\n 1925.4775],\n [1508.7517, 1549.587 , 1666.655 , ..., 1762.2898, 1769.2545,\n 1974.3519],\n ...,\n [1944.1821, 1919.3833, 1891.5801, ..., 1898.1538, 1619.7513,\n 1548.6755],\n [1932.8036, 1924.7229, 1894.8312, ..., 1732.8718, 1707.6681,\n 1720.0978],\n [1948.1812, 1923.23 , 1898.333 , ..., 2224.2847, 2248.0986,\n 2272.8677]], dtype=float32)\nCoordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 36.99 36.98 36.96 36.94 ... 36.06 36.04 36.03 36.01\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 60x: 601.543e+03 1.536e+03 1.905e+03 ... 2.224e+03 2.248e+03 2.273e+03array([[1543.2703, 1536.2582, 1905.042 , ..., 1752.2424, 1870.8307,\n 1841.452 ],\n [1511.454 , 1548.8307, 1944.3944, ..., 1782.2041, 1881.2681,\n 1925.4775],\n [1508.7517, 1549.587 , 1666.655 , ..., 1762.2898, 1769.2545,\n 1974.3519],\n ...,\n [1944.1821, 1919.3833, 1891.5801, ..., 1898.1538, 1619.7513,\n 1548.6755],\n [1932.8036, 1924.7229, 1894.8312, ..., 1732.8718, 1707.6681,\n 1720.0978],\n [1948.1812, 1923.23 , 1898.333 , ..., 2224.2847, 2248.0986,\n 2272.8677]], dtype=float32)Coordinates: (3)x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-112.992083, -112.975417, -112.95875 , -112.942083, -112.925417,\n -112.90875 , -112.892083, -112.875417, -112.85875 , -112.842083,\n -112.825417, -112.80875 , -112.792083, -112.775417, -112.75875 ,\n -112.742083, -112.725417, -112.70875 , -112.692083, -112.675417,\n -112.65875 , -112.642083, -112.625417, -112.60875 , -112.592083,\n -112.575417, -112.55875 , -112.542083, -112.525417, -112.50875 ,\n -112.492083, -112.475417, -112.45875 , -112.442083, -112.425417,\n -112.40875 , -112.392083, -112.375417, -112.35875 , -112.342083,\n -112.325417, -112.30875 , -112.292083, -112.275417, -112.25875 ,\n -112.242083, -112.225417, -112.20875 , -112.192083, -112.175417,\n -112.15875 , -112.142083, -112.125417, -112.10875 , -112.092083,\n -112.075417, -112.05875 , -112.042083, -112.025417, -112.00875 ])y(y)float6436.99 36.98 36.96 ... 36.03 36.01array([36.992083, 36.975417, 36.95875 , 36.942083, 36.925417, 36.90875 ,\n 36.892083, 36.875417, 36.85875 , 36.842083, 36.825417, 36.80875 ,\n 36.792083, 36.775417, 36.75875 , 36.742083, 36.725417, 36.70875 ,\n 36.692083, 36.675417, 36.65875 , 36.642083, 36.625417, 36.60875 ,\n 36.592083, 36.575417, 36.55875 , 36.542083, 36.525417, 36.50875 ,\n 36.492083, 36.475417, 36.45875 , 36.442083, 36.425417, 36.40875 ,\n 36.392083, 36.375417, 36.35875 , 36.342083, 36.325417, 36.30875 ,\n 36.292083, 36.275417, 36.25875 , 36.242083, 36.225417, 36.20875 ,\n 36.192083, 36.175417, 36.15875 , 36.142083, 36.125417, 36.10875 ,\n 36.092083, 36.075417, 36.05875 , 36.042083, 36.025417, 36.00875 ])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (2)xPandasIndexPandasIndex(Index([-112.99208333333334, -112.97541666666669, -112.95875000000001,\n -112.94208333333331, -112.92541666666668, -112.90874999999998,\n -112.89208333333336, -112.87541666666664, -112.85874999999999,\n -112.8420833333333, -112.82541666666665, -112.80874999999999,\n -112.79208333333334, -112.77541666666666, -112.75875,\n -112.74208333333334, -112.72541666666669, -112.70875000000001,\n -112.69208333333331, -112.67541666666668, -112.65874999999998,\n -112.64208333333336, -112.62541666666664, -112.60874999999999,\n -112.5920833333333, -112.57541666666665, -112.55874999999999,\n -112.54208333333334, -112.52541666666666, -112.50875,\n -112.49208333333334, -112.47541666666669, -112.45875000000001,\n -112.44208333333331, -112.42541666666668, -112.40874999999998,\n -112.39208333333336, -112.37541666666664, -112.35874999999999,\n -112.3420833333333, -112.32541666666665, -112.30874999999999,\n -112.29208333333334, -112.27541666666666, -112.25875,\n -112.24208333333334, -112.22541666666669, -112.20875000000001,\n -112.19208333333331, -112.17541666666668, -112.15874999999998,\n -112.14208333333336, -112.12541666666664, -112.10874999999999,\n -112.0920833333333, -112.07541666666665, -112.05874999999999,\n -112.04208333333334, -112.02541666666666, -112.00875],\n dtype='float64', name='x'))yPandasIndexPandasIndex(Index([ 36.99208333333333, 36.97541666666667, 36.95875,\n 36.942083333333336, 36.92541666666666, 36.90875,\n 36.89208333333333, 36.87541666666666, 36.85875,\n 36.842083333333335, 36.82541666666667, 36.808749999999996,\n 36.79208333333334, 36.77541666666667, 36.758750000000006,\n 36.74208333333333, 36.72541666666667, 36.70875,\n 36.692083333333336, 36.67541666666666, 36.65875,\n 36.64208333333333, 36.62541666666666, 36.60875,\n 36.592083333333335, 36.57541666666667, 36.558749999999996,\n 36.54208333333334, 36.52541666666667, 36.508750000000006,\n 36.49208333333333, 36.47541666666667, 36.458749999999995,\n 36.442083333333336, 36.42541666666666, 36.40875,\n 36.39208333333333, 36.37541666666666, 36.35875,\n 36.342083333333335, 36.32541666666667, 36.308749999999996,\n 36.29208333333334, 36.27541666666667, 36.258750000000006,\n 36.24208333333333, 36.22541666666667, 36.208749999999995,\n 36.192083333333336, 36.17541666666666, 36.15875,\n 36.14208333333333, 36.12541666666666, 36.10875,\n 36.092083333333335, 36.07541666666667, 36.058749999999996,\n 36.04208333333334, 36.02541666666667, 36.008750000000006],\n dtype='float64', name='y'))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\n\n# inspect old and coarsened resolution\nprint(f\"old resolution: {gc.rio.width}x{gc.rio.height}\")\nprint(f\"coarse resolution: {gc_coarse.rio.width}x{gc_coarse.rio.height}\")\ngc_coarse.plot()\n\nold resolution: 1200x1200\ncoarse resolution: 60x60\n\n\n<matplotlib.collections.QuadMesh at 0x14aae6550>\n\n\n\n\n\n\n\n\n\n\n\nExercise\n\n\n\nDownsample the elevation raster into a 240x240 raster by taking the average over windows of the appropriate size.\nUse an f-string to check whether the spatial bounds of the rasters have changed.\n\n\n\n\n\n\n\n\nSolution\n\n\n\n\n\nDecrese resolution:\n\n# coarsen to a 240x240 raster calculating the mean in each window\ngc_coarse_mean = gc.coarsen(x=5,y=5).mean()\ngc_coarse_mean\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (y: 240, x: 240)>\narray([[1535.3939, 1535.8931, 1532.352 , ..., 1625.2432, 1551.3588,\n 1563.1356],\n [1521.945 , 1521.6814, 1521.8566, ..., 1584.5142, 1627.8928,\n 1593.6633],\n [1509.4419, 1511.2308, 1509.6614, ..., 1609.3103, 1700.0897,\n 1650.7216],\n ...,\n [1932.3878, 1923.3806, 1905.713 , ..., 1738.6489, 1604.5614,\n 1512.9637],\n [1941.5138, 1928.9819, 1911.285 , ..., 2034.8147, 1858.8019,\n 1736.1644],\n [1938.8174, 1919.249 , 1919.581 , ..., 2261.3406, 2198.5483,\n 2007.7867]], dtype=float32)\nCoordinates:\n * x (x) float64 -113.0 -113.0 -113.0 ... -112.0 -112.0 -112.0\n * y (y) float64 37.0 36.99 36.99 36.99 ... 36.02 36.01 36.01 36.0\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Point\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayy: 240x: 2401.535e+03 1.536e+03 1.532e+03 ... 2.261e+03 2.199e+03 2.008e+03array([[1535.3939, 1535.8931, 1532.352 , ..., 1625.2432, 1551.3588,\n 1563.1356],\n [1521.945 , 1521.6814, 1521.8566, ..., 1584.5142, 1627.8928,\n 1593.6633],\n [1509.4419, 1511.2308, 1509.6614, ..., 1609.3103, 1700.0897,\n 1650.7216],\n ...,\n [1932.3878, 1923.3806, 1905.713 , ..., 1738.6489, 1604.5614,\n 1512.9637],\n [1941.5138, 1928.9819, 1911.285 , ..., 2034.8147, 1858.8019,\n 1736.1644],\n [1938.8174, 1919.249 , 1919.581 , ..., 2261.3406, 2198.5483,\n 2007.7867]], dtype=float32)Coordinates: (3)x(x)float64-113.0 -113.0 ... -112.0 -112.0array([-112.998333, -112.994167, -112.99 , ..., -112.010833, -112.006667,\n -112.0025 ])y(y)float6437.0 36.99 36.99 ... 36.01 36.0array([36.998333, 36.994167, 36.99 , ..., 36.010833, 36.006667, 36.0025 ])spatial_ref()int640crs_wkt :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314245179inverse_flattening :298.257223563reference_ellipsoid_name :WGS 84longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :WGS 84horizontal_datum_name :World Geodetic System 1984grid_mapping_name :latitude_longitudespatial_ref :GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]GeoTransform :-113.00041666666667 0.0008333333333333339 0.0 37.000416666666666 0.0 -0.0008333333333333339array(0)Indexes: (2)xPandasIndexPandasIndex(Index([-112.99833333333333, -112.99416666666666, -112.98999999999998,\n -112.98583333333333, -112.98166666666665, -112.9775,\n -112.97333333333333, -112.96916666666667, -112.965,\n -112.96083333333334,\n ...\n -112.03999999999999, -112.03583333333333, -112.03166666666667,\n -112.0275, -112.02333333333334, -112.01916666666666,\n -112.01500000000001, -112.01083333333334, -112.00666666666666,\n -112.00250000000001],\n dtype='float64', name='x', length=240))yPandasIndexPandasIndex(Index([36.998333333333335, 36.994166666666665, 36.99,\n 36.98583333333333, 36.98166666666667, 36.9775,\n 36.973333333333336, 36.969166666666666, 36.965,\n 36.96083333333333,\n ...\n 36.04, 36.03583333333333, 36.031666666666666,\n 36.0275, 36.02333333333333, 36.01916666666666,\n 36.015, 36.01083333333333, 36.00666666666667,\n 36.0025],\n dtype='float64', name='y', length=240))Attributes: (3)AREA_OR_POINT :Pointscale_factor :1.0add_offset :0.0\n\n\n\ngc_coarse_mean.plot()\n\n<matplotlib.collections.QuadMesh at 0x14ad3dfd0>\n\n\n\n\n\nCheck spatial bounds:\n\nprint(f\"old spatial bounds: {gc.rio.bounds()}\")\nprint(f\"coarse resolution: {gc_coarse_mean.rio.bounds}\")\ngc_coarse_mean.plot()\n\nold spatial bounds: (-113.00041666666667, 36.000416666666666, -112.00041666666667, 37.000416666666666)\ncoarse resolution: <bound method XRasterBase.bounds of <rioxarray.raster_array.RasterArray object at 0x14ad8a7d0>>\n\n\n<matplotlib.collections.QuadMesh at 0x14af33450>" }, { "objectID": "discussion-sections/ds4-landcover.html#land-cover-statistics", "href": "discussion-sections/ds4-landcover.html#land-cover-statistics", - "title": "21  *Lab: land cover statistics", - "section": "21.1 Land cover statistics", - "text": "21.1 Land cover statistics" + "title": "22  *Lab: land cover statistics", + "section": "22.1 Land cover statistics", + "text": "22.1 Land cover statistics" }, { "objectID": "discussion-sections/ds4-landcover.html#import-data", "href": "discussion-sections/ds4-landcover.html#import-data", - "title": "21  *Lab: land cover statistics", - "section": "21.2 Import data", - "text": "21.2 Import data\n\nImport the raster file and store it in a variable lulc. LULC stands for land use/land cover.\nImport the tabular data and store it in a variable class_names." + "title": "22  *Lab: land cover statistics", + "section": "22.2 Import data", + "text": "22.2 Import data\n\nImport the raster file and store it in a variable lulc. LULC stands for land use/land cover.\nImport the tabular data and store it in a variable class_names." }, { "objectID": "discussion-sections/ds4-landcover.html#raster-exploration", "href": "discussion-sections/ds4-landcover.html#raster-exploration", - "title": "21  *Lab: land cover statistics", - "section": "21.3 Raster exploration", - "text": "21.3 Raster exploration\nDiscuss with your team (at least) three methods to explore your raster and implement them." + "title": "22  *Lab: land cover statistics", + "section": "22.3 Raster exploration", + "text": "22.3 Raster exploration\nDiscuss with your team (at least) three methods to explore your raster and implement them." }, { "objectID": "discussion-sections/ds4-landcover.html#raster-reduction", "href": "discussion-sections/ds4-landcover.html#raster-reduction", - "title": "21  *Lab: land cover statistics", - "section": "21.4 Raster reduction", - "text": "21.4 Raster reduction\nHow many dimensions does lulc cover have? If needed, get rid of unnecessary dimensions and verify your result." + "title": "22  *Lab: land cover statistics", + "section": "22.4 Raster reduction", + "text": "22.4 Raster reduction\nHow many dimensions does lulc cover have? If needed, get rid of unnecessary dimensions and verify your result." }, { "objectID": "discussion-sections/ds4-landcover.html#percentage-of-area-covered-per-class", "href": "discussion-sections/ds4-landcover.html#percentage-of-area-covered-per-class", - "title": "21  *Lab: land cover statistics", - "section": "21.5 Percentage of area covered per class", - "text": "21.5 Percentage of area covered per class\n\n21.5.1 Pixels per class\nUse the numpy function np.unique() to get the number of pixels per class in lulc. HINT: check the np.unique() documentation to see what the return_counts parameter does and read the last example.\n\n\n21.5.2 Organize data\nCreate a data frame pix_counts with two columns: column one must be the code numbers for the pixels in lulc and column two must be the number of pixels corresponding to each code. HINT: check our class notes.\n\n\n21.5.3 Add class names\nUse the class_names data frame to add the class names to the codes in the pix_counts data frame. Store the resulting data frame as classes.\n\n\n21.5.4 Percentage covered\n\nStore the total number of pixels in lulc as a variable total_pixels without hard-coding any numbers. This means, calculate total_pixels from attributes of lulc.\nAdd the percentage of area covered by each class as a new column percentage to the classes data frame. Round the percentage to 8 decimal points. HINT: check our class notes.\nDiscuss with your team how would you check that the total number of pixels in the lulc raster is actually distributed across the classes dataframe. i.e. How would you check that you did not lose any pixel when counting the unique pixels per class or adding the class names? Make one such check." + "title": "22  *Lab: land cover statistics", + "section": "22.5 Percentage of area covered per class", + "text": "22.5 Percentage of area covered per class\n\n22.5.1 Pixels per class\nUse the numpy function np.unique() to get the number of pixels per class in lulc. HINT: check the np.unique() documentation to see what the return_counts parameter does and read the last example.\n\n\n22.5.2 Organize data\nCreate a data frame pix_counts with two columns: column one must be the code numbers for the pixels in lulc and column two must be the number of pixels corresponding to each code. HINT: check our class notes.\n\n\n22.5.3 Add class names\nUse the class_names data frame to add the class names to the codes in the pix_counts data frame. Store the resulting data frame as classes.\n\n\n22.5.4 Percentage covered\n\nStore the total number of pixels in lulc as a variable total_pixels without hard-coding any numbers. This means, calculate total_pixels from attributes of lulc.\nAdd the percentage of area covered by each class as a new column percentage to the classes data frame. Round the percentage to 8 decimal points. HINT: check our class notes.\nDiscuss with your team how would you check that the total number of pixels in the lulc raster is actually distributed across the classes dataframe. i.e. How would you check that you did not lose any pixel when counting the unique pixels per class or adding the class names? Make one such check." }, { "objectID": "discussion-sections/ds4-landcover.html#plot", "href": "discussion-sections/ds4-landcover.html#plot", - "title": "21  *Lab: land cover statistics", - "section": "21.6 Plot", - "text": "21.6 Plot\n\nCreate a horizontal bar plot showing the classes with more than 1% land cover in decreasing order (longest bar should be at the top). The names of the classes should be the tick labels of the vertical axis.\n✨🐍✨ Try redoing your plot as a one-liner, without creating any intermediate variables." + "title": "22  *Lab: land cover statistics", + "section": "22.6 Plot", + "text": "22.6 Plot\n\nCreate a horizontal bar plot showing the classes with more than 1% land cover in decreasing order (longest bar should be at the top). The names of the classes should be the tick labels of the vertical axis.\n✨🐍✨ Try redoing your plot as a one-liner, without creating any intermediate variables." }, { "objectID": "lectures/lesson-18-STAC.html#item-collection-and-catalog", "href": "lectures/lesson-18-STAC.html#item-collection-and-catalog", - "title": "22  STAC specification", - "section": "22.1 Item, Collection, and Catalog", - "text": "22.1 Item, Collection, and Catalog\nThe STAC item (or just item) is the building block of a STAC. An item is a GeoJSON feature with additional fields that make it easier to find the item as we look for data across catalogs.\nAn item holds two types of information:\n\nMetadata: The metadata for a STAC item includes core identifying information (such as id, geometry, bounding box, and date), and additional properties (for example, place of collection).\nAssets: Assets are links to the actual data of the item (for example, links to the spectral bands of a satellite image.)\n\nSTAC items can be grouped into STAC collections. For example, while a single satellite scene (at a single time and location) would constitue an item, scenes across time and location from the same satellite can be orgnanized in a collection. Finally, multiple collections can be organized into a single STAC catalog." + "title": "23  STAC specification", + "section": "23.1 Item, Collection, and Catalog", + "text": "23.1 Item, Collection, and Catalog\nThe STAC item (or just item) is the building block of a STAC. An item is a GeoJSON feature with additional fields that make it easier to find the item as we look for data across catalogs.\nAn item holds two types of information:\n\nMetadata: The metadata for a STAC item includes core identifying information (such as id, geometry, bounding box, and date), and additional properties (for example, place of collection).\nAssets: Assets are links to the actual data of the item (for example, links to the spectral bands of a satellite image.)\n\nSTAC items can be grouped into STAC collections. For example, while a single satellite scene (at a single time and location) would constitue an item, scenes across time and location from the same satellite can be orgnanized in a collection. Finally, multiple collections can be organized into a single STAC catalog." }, { "objectID": "lectures/lesson-18-STAC.html#api", "href": "lectures/lesson-18-STAC.html#api", - "title": "22  STAC specification", - "section": "22.2 API", - "text": "22.2 API\nTo request data from a catalog following the STAC standard we use an Application Programming Interface (API). We can think of an API as an intermediary tasked with sending our request for data to the data catalog and getting the response from the catalog back to us. The following is a nice real-life analogy:\n\n\n\nGeeks for geeks - What is an API?\n\n\nThe Python package to access APIs for STAC catalogs is pystac_client. Our goal in this lesson is to retrieve NAIP data from the MPC’s data catalog via its STAC API." + "title": "23  STAC specification", + "section": "23.2 API", + "text": "23.2 API\nTo request data from a catalog following the STAC standard we use an Application Programming Interface (API). We can think of an API as an intermediary tasked with sending our request for data to the data catalog and getting the response from the catalog back to us. The following is a nice real-life analogy:\n\n\n\nGeeks for geeks - What is an API?\n\n\nThe Python package to access APIs for STAC catalogs is pystac_client. Our goal in this lesson is to retrieve NAIP data from the MPC’s data catalog via its STAC API." }, { "objectID": "lectures/lesson-18-STAC.html#catalog", "href": "lectures/lesson-18-STAC.html#catalog", - "title": "22  STAC specification", - "section": "22.3 Catalog", - "text": "22.3 Catalog\n\nFirst, load the necessary packages:\n\nimport numpy as np\nimport geopandas as gpd\nimport rioxarray as rioxr\nimport matplotlib.pyplot as plt\n\nfrom shapely.geometry import Polygon\n\n# used to access STAC catalogs\nfrom pystac_client import Client\n# used to sign items from the MPC STAC catalog\nimport planetary_computer\n\n# ----- other libraries for nice ouputs\nfrom IPython.display import Image\n\n\n22.3.1 Access\nWe use the Client function from the pystac_client package to access the catalog:\n\n# access catalog\ncatalog = Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\nThe modifier parameter is needed to access the data in the MPC catalog.\n\n\n22.3.2 Exploration\nLet’s check out some of the catalog’s metadata:\n\n# metadata from the catalog\nprint('Title:', catalog.title)\nprint('Description:', catalog.description)\n\nTitle: Microsoft Planetary Computer STAC API\nDescription: Searchable spatiotemporal metadata describing Earth science datasets hosted by the Microsoft Planetary Computer\n\n\nWe can access its collections by using the get_collections() method:\n\ncatalog.get_collections()\n\n<generator object Client.get_collections at 0x1416d6ce0>\n\n\nNotice the output of get_collections() is a generator. This is a special kind of lazy object in Python over which you can loop over like a list. Unlike a list, the items in a generator do not exist in memory until you explicitely iterate over them or convert them to a list. Let’s try getting the collections from the catalog again:\n\n# get collections and print their names\ncollections = list(catalog.get_collections())\n\nprint('Number of collections:', len(collections))\n\nprint(\"Collections IDs (first 10):\")\nfor i in range(10):\n print('-', collections[i].id)\n\nNumber of collections: 122\nCollections IDs (first 10):\n- daymet-annual-pr\n- daymet-daily-hi\n- 3dep-seamless\n- 3dep-lidar-dsm\n- fia\n- sentinel-1-rtc\n- gridmet\n- daymet-annual-na\n- daymet-monthly-na\n- daymet-annual-hi" + "title": "23  STAC specification", + "section": "23.3 Catalog", + "text": "23.3 Catalog\n\nFirst, load the necessary packages:\n\nimport numpy as np\nimport geopandas as gpd\nimport rioxarray as rioxr\nimport matplotlib.pyplot as plt\n\nfrom shapely.geometry import Polygon\n\n# used to access STAC catalogs\nfrom pystac_client import Client\n# used to sign items from the MPC STAC catalog\nimport planetary_computer\n\n# ----- other libraries for nice ouputs\nfrom IPython.display import Image\n\n\n23.3.1 Access\nWe use the Client function from the pystac_client package to access the catalog:\n\n# access catalog\ncatalog = Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\nThe modifier parameter is needed to access the data in the MPC catalog.\n\n\n23.3.2 Exploration\nLet’s check out some of the catalog’s metadata:\n\n# metadata from the catalog\nprint('Title:', catalog.title)\nprint('Description:', catalog.description)\n\nTitle: Microsoft Planetary Computer STAC API\nDescription: Searchable spatiotemporal metadata describing Earth science datasets hosted by the Microsoft Planetary Computer\n\n\nWe can access its collections by using the get_collections() method:\n\ncatalog.get_collections()\n\n<generator object Client.get_collections at 0x1416d6ce0>\n\n\nNotice the output of get_collections() is a generator. This is a special kind of lazy object in Python over which you can loop over like a list. Unlike a list, the items in a generator do not exist in memory until you explicitely iterate over them or convert them to a list. Let’s try getting the collections from the catalog again:\n\n# get collections and print their names\ncollections = list(catalog.get_collections())\n\nprint('Number of collections:', len(collections))\n\nprint(\"Collections IDs (first 10):\")\nfor i in range(10):\n print('-', collections[i].id)\n\nNumber of collections: 122\nCollections IDs (first 10):\n- daymet-annual-pr\n- daymet-daily-hi\n- 3dep-seamless\n- 3dep-lidar-dsm\n- fia\n- sentinel-1-rtc\n- gridmet\n- daymet-annual-na\n- daymet-monthly-na\n- daymet-annual-hi" }, { "objectID": "lectures/lesson-18-STAC.html#collection", "href": "lectures/lesson-18-STAC.html#collection", - "title": "22  STAC specification", - "section": "22.4 Collection", - "text": "22.4 Collection\nThe NAIP catalog’s id is 'naip'. We can select a single collection for exploration using the get_child() method for the catalog and the collection id as the parameter:\n\nnaip_collection = catalog.get_child('naip')\nnaip_collection\n\n\n\n\n\n\n \n \n \n \n \n \n type\n \"Collection\"\n \n \n \n \n \n \n \n id\n \"naip\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n description\n \"The [National Agriculture Imagery Program](https://www.fsa.usda.gov/programs-and-services/aerial-photography/imagery-programs/naip-imagery/) (NAIP) provides U.S.-wide, high-resolution aerial imagery, with four spectral bands (R, G, B, IR). NAIP is administered by the [Aerial Field Photography Office](https://www.fsa.usda.gov/programs-and-services/aerial-photography/) (AFPO) within the [US Department of Agriculture](https://www.usda.gov/) (USDA). Data are captured at least once every three years for each state. This dataset represents NAIP data from 2010-present, in [cloud-optimized GeoTIFF](https://www.cogeo.org/) format.\n\"\n \n \n \n \n \n \n \n links\n [] 6 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"items\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"license\"\n \n \n \n \n \n \n \n href\n \"https://www.fsa.usda.gov/help/policies-and-links/\"\n \n \n \n \n \n \n \n title\n \"Public Domain\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"describedby\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/dataset/naip\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Human readable dataset overview and reference\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/item-assets/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/table/v1.2.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n item_assets\n \n \n \n \n \n image\n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n metadata\n \n \n \n \n \n type\n \"text/plain\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"metadata\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"FGDC Metdata\"\n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n msft:region\n \"westeurope\"\n \n \n \n \n \n \n \n msft:container\n \"naip\"\n \n \n \n \n \n \n \n msft:storage_account\n \"naipeuwest\"\n \n \n \n \n \n \n \n msft:short_description\n \"NAIP provides US-wide, high-resolution aerial imagery. This dataset includes NAIP images from 2010 to the present.\"\n \n \n \n \n \n \n \n title\n \"NAIP: National Agriculture Imagery Program\"\n \n \n \n \n \n \n \n extent\n \n \n \n \n \n spatial\n \n \n \n \n \n bbox\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 4 items\n \n \n \n \n \n \n \n 0\n -124.784\n \n \n \n \n \n \n \n \n \n \n \n 1\n 24.744\n \n \n \n \n \n \n \n \n \n \n \n 2\n -66.951\n \n \n \n \n \n \n \n \n \n \n \n 3\n 49.346\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n temporal\n \n \n \n \n \n interval\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"2010-01-01T00:00:00Z\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"2021-12-31T00:00:00Z\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n license\n \"proprietary\"\n \n \n \n \n \n \n \n keywords\n [] 7 items\n \n \n \n \n \n \n \n 0\n \"NAIP\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"Aerial\"\n \n \n \n \n \n \n \n \n \n \n \n 2\n \"Imagery\"\n \n \n \n \n \n \n \n \n \n \n \n 3\n \"USDA\"\n \n \n \n \n \n \n \n \n \n \n \n 4\n \"AFPO\"\n \n \n \n \n \n \n \n \n \n \n \n 5\n \"Agriculture\"\n \n \n \n \n \n \n \n \n \n \n \n 6\n \"United States\"\n \n \n \n \n \n \n \n \n \n \n \n \n providers\n [] 3 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"USDA Farm Service Agency\"\n \n \n \n \n \n \n \n roles\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"producer\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"licensor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://www.fsa.usda.gov/programs-and-services/aerial-photography/imagery-programs/naip-imagery/\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Esri\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"processor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://www.esri.com/\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Microsoft\"\n \n \n \n \n \n \n \n roles\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"host\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"processor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://planetarycomputer.microsoft.com\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n summaries\n \n \n \n \n \n gsd\n [] 2 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n description\n \"visible red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n description\n \"visible green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n description\n \"visible blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/naip.png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"NAIP thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geoparquet-items\n \n \n \n \n \n href\n \"abfs://items/naip.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"GeoParquet STAC items\"\n \n \n \n \n \n \n \n description\n \"Snapshot of the collection's STAC items exported to GeoParquet format.\"\n \n \n \n \n \n \n \n msft:partition_info\n \n \n \n \n \n is_partitioned\n True\n \n \n \n \n \n \n \n partition_frequency\n \"AS\"\n \n \n \n \n \n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"pcstacitems\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"stac-items\"" + "title": "23  STAC specification", + "section": "23.4 Collection", + "text": "23.4 Collection\nThe NAIP catalog’s id is 'naip'. We can select a single collection for exploration using the get_child() method for the catalog and the collection id as the parameter:\n\nnaip_collection = catalog.get_child('naip')\nnaip_collection\n\n\n\n\n\n\n \n \n \n \n \n \n type\n \"Collection\"\n \n \n \n \n \n \n \n id\n \"naip\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n description\n \"The [National Agriculture Imagery Program](https://www.fsa.usda.gov/programs-and-services/aerial-photography/imagery-programs/naip-imagery/) (NAIP) provides U.S.-wide, high-resolution aerial imagery, with four spectral bands (R, G, B, IR). NAIP is administered by the [Aerial Field Photography Office](https://www.fsa.usda.gov/programs-and-services/aerial-photography/) (AFPO) within the [US Department of Agriculture](https://www.usda.gov/) (USDA). Data are captured at least once every three years for each state. This dataset represents NAIP data from 2010-present, in [cloud-optimized GeoTIFF](https://www.cogeo.org/) format.\n\"\n \n \n \n \n \n \n \n links\n [] 6 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"items\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"license\"\n \n \n \n \n \n \n \n href\n \"https://www.fsa.usda.gov/help/policies-and-links/\"\n \n \n \n \n \n \n \n title\n \"Public Domain\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"describedby\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/dataset/naip\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Human readable dataset overview and reference\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/item-assets/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/table/v1.2.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n item_assets\n \n \n \n \n \n image\n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n metadata\n \n \n \n \n \n type\n \"text/plain\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"metadata\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"FGDC Metdata\"\n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n msft:region\n \"westeurope\"\n \n \n \n \n \n \n \n msft:container\n \"naip\"\n \n \n \n \n \n \n \n msft:storage_account\n \"naipeuwest\"\n \n \n \n \n \n \n \n msft:short_description\n \"NAIP provides US-wide, high-resolution aerial imagery. This dataset includes NAIP images from 2010 to the present.\"\n \n \n \n \n \n \n \n title\n \"NAIP: National Agriculture Imagery Program\"\n \n \n \n \n \n \n \n extent\n \n \n \n \n \n spatial\n \n \n \n \n \n bbox\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 4 items\n \n \n \n \n \n \n \n 0\n -124.784\n \n \n \n \n \n \n \n \n \n \n \n 1\n 24.744\n \n \n \n \n \n \n \n \n \n \n \n 2\n -66.951\n \n \n \n \n \n \n \n \n \n \n \n 3\n 49.346\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n temporal\n \n \n \n \n \n interval\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"2010-01-01T00:00:00Z\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"2021-12-31T00:00:00Z\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n license\n \"proprietary\"\n \n \n \n \n \n \n \n keywords\n [] 7 items\n \n \n \n \n \n \n \n 0\n \"NAIP\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"Aerial\"\n \n \n \n \n \n \n \n \n \n \n \n 2\n \"Imagery\"\n \n \n \n \n \n \n \n \n \n \n \n 3\n \"USDA\"\n \n \n \n \n \n \n \n \n \n \n \n 4\n \"AFPO\"\n \n \n \n \n \n \n \n \n \n \n \n 5\n \"Agriculture\"\n \n \n \n \n \n \n \n \n \n \n \n 6\n \"United States\"\n \n \n \n \n \n \n \n \n \n \n \n \n providers\n [] 3 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"USDA Farm Service Agency\"\n \n \n \n \n \n \n \n roles\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"producer\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"licensor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://www.fsa.usda.gov/programs-and-services/aerial-photography/imagery-programs/naip-imagery/\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Esri\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"processor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://www.esri.com/\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Microsoft\"\n \n \n \n \n \n \n \n roles\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"host\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"processor\"\n \n \n \n \n \n \n \n \n \n \n \n \n url\n \"https://planetarycomputer.microsoft.com\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n summaries\n \n \n \n \n \n gsd\n [] 2 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n description\n \"visible red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n description\n \"visible green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n description\n \"visible blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/naip.png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"NAIP thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geoparquet-items\n \n \n \n \n \n href\n \"abfs://items/naip.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"GeoParquet STAC items\"\n \n \n \n \n \n \n \n description\n \"Snapshot of the collection's STAC items exported to GeoParquet format.\"\n \n \n \n \n \n \n \n msft:partition_info\n \n \n \n \n \n is_partitioned\n True\n \n \n \n \n \n \n \n partition_frequency\n \"AS\"\n \n \n \n \n \n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"pcstacitems\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"stac-items\"" }, { "objectID": "lectures/lesson-18-STAC.html#catalog-search", "href": "lectures/lesson-18-STAC.html#catalog-search", - "title": "22  STAC specification", - "section": "22.5 Catalog search", - "text": "22.5 Catalog search\nWe can narrow down the search within the catalog by specifying a time range, an area of interest, and the collection name. The simplest ways to define the area of interest to look for data in the catalog are:\n\na GeoJSON-type dictionary with the coordinates of the bounding box,\nas a list [xmin, ymin, xmax, ymax] with the coordinate values defining the four corners of the bounding box.\n\nIn this lesson we will look for the NAIP scenes over Santa Barbara from 2018 to 2023. We’ll use the GeoJSON method to define the area of interest:\n\n# Temporal range of interest\ntime_range = \"2018-01-01/2023-01-01\"\n\n# NCEAS bounding box (as a GeoJSON)\nbbox = {\n \"type\": \"Polygon\",\n \"coordinates\":[\n [\n [-119.70608227128903, 34.426300194372274],\n [-119.70608227128903, 34.42041139020533],\n [-119.6967885126002, 34.42041139020533],\n [-119.6967885126002, 34.426300194372274],\n [-119.70608227128903, 34.426300194372274]\n ]\n ],\n}\n\n# catalog search\nsearch = catalog.search(\n collections = ['naip'],\n intersects = bbox,\n datetime = time_range)\nsearch\n\n<pystac_client.item_search.ItemSearch at 0x142144650>\n\n\nTo get the items found in the search (or check if there were any matches in the search) we use the item_collection() method:\n\nitems = search.item_collection()\nlen(items)\n\n2\n\n\nThis output tells us there were two items in the catalog that matched our search!\n\nitems\n\n\n\n\n\n \n \n \n \n \n \n type\n \"FeatureCollection\"\n \n \n \n \n \n \n \n features\n [] 2 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n gsd\n 0.6\n \n \n \n \n \n \n \n datetime\n \"2020-05-21T00:00:00Z\"\n \n \n \n \n \n \n \n naip:year\n \"2020\"\n \n \n \n \n \n \n \n proj:bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n 246930.0\n \n \n \n \n \n \n \n \n \n \n \n 1\n 3806808.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 253260.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 3814296.0\n \n \n \n \n \n \n \n \n \n \n \n \n proj:epsg\n 26911\n \n \n \n \n \n \n \n naip:state\n \"ca\"\n \n \n \n \n \n \n \n proj:shape\n [] 2 items\n \n \n \n \n \n \n \n 0\n 12480\n \n \n \n \n \n \n \n \n \n \n \n 1\n 10550\n \n \n \n \n \n \n \n \n \n \n \n \n proj:transform\n [] 9 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 246930.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 4\n -0.6\n \n \n \n \n \n \n \n \n \n \n \n 5\n 3814296.0\n \n \n \n \n \n \n \n \n \n \n \n 6\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 7\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 8\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.373269\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.685448\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.440724\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.754272\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.439192\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.752061\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.371741\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.373269\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 5 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items/ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/map?collection=naip&item=ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Map of item\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n image\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n tilejson\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"TileJSON with default rendering\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"tiles\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n rendered_preview\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"Rendered preview\"\n \n \n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"overview\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -119.754272\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.371741\n \n \n \n \n \n \n \n \n \n \n \n 2\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 3\n 34.440724\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/eo/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"naip\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n gsd\n 0.6\n \n \n \n \n \n \n \n datetime\n \"2018-07-24T00:00:00Z\"\n \n \n \n \n \n \n \n naip:year\n \"2018\"\n \n \n \n \n \n \n \n proj:bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n 246978.0\n \n \n \n \n \n \n \n \n \n \n \n 1\n 3806856.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 253212.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 3814248.0\n \n \n \n \n \n \n \n \n \n \n \n \n proj:epsg\n 26911\n \n \n \n \n \n \n \n naip:state\n \"ca\"\n \n \n \n \n \n \n \n proj:shape\n [] 2 items\n \n \n \n \n \n \n \n 0\n 12320\n \n \n \n \n \n \n \n \n \n \n \n 1\n 10390\n \n \n \n \n \n \n \n \n \n \n \n \n proj:transform\n [] 9 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 246978.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 4\n -0.6\n \n \n \n \n \n \n \n \n \n \n \n 5\n 3814248.0\n \n \n \n \n \n \n \n \n \n \n \n 6\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 7\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 8\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.37369\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.685956\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.44028\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.753736\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.438772\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.751554\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.372185\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.37369\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 5 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items/ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/map?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Map of item\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n image\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_060cm_2018/34119/m_3411935_sw_11_060_20180724_20190209.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n metadata\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_fgdc_2018/34119/m_3411935_sw_11_060_20180724.txt?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"text/plain\"\n \n \n \n \n \n \n \n title\n \"FGDC Metdata\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"metadata\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_060cm_2018/34119/m_3411935_sw_11_060_20180724_20190209.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n tilejson\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"TileJSON with default rendering\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"tiles\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n rendered_preview\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"Rendered preview\"\n \n \n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"overview\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -119.753736\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.372185\n \n \n \n \n \n \n \n \n \n \n \n 2\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 3\n 34.44028\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/eo/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"naip\"" + "title": "23  STAC specification", + "section": "23.5 Catalog search", + "text": "23.5 Catalog search\nWe can narrow down the search within the catalog by specifying a time range, an area of interest, and the collection name. The simplest ways to define the area of interest to look for data in the catalog are:\n\na GeoJSON-type dictionary with the coordinates of the bounding box,\nas a list [xmin, ymin, xmax, ymax] with the coordinate values defining the four corners of the bounding box.\n\nIn this lesson we will look for the NAIP scenes over Santa Barbara from 2018 to 2023. We’ll use the GeoJSON method to define the area of interest:\n\n# Temporal range of interest\ntime_range = \"2018-01-01/2023-01-01\"\n\n# NCEAS bounding box (as a GeoJSON)\nbbox = {\n \"type\": \"Polygon\",\n \"coordinates\":[\n [\n [-119.70608227128903, 34.426300194372274],\n [-119.70608227128903, 34.42041139020533],\n [-119.6967885126002, 34.42041139020533],\n [-119.6967885126002, 34.426300194372274],\n [-119.70608227128903, 34.426300194372274]\n ]\n ],\n}\n\n# catalog search\nsearch = catalog.search(\n collections = ['naip'],\n intersects = bbox,\n datetime = time_range)\nsearch\n\n<pystac_client.item_search.ItemSearch at 0x142144650>\n\n\nTo get the items found in the search (or check if there were any matches in the search) we use the item_collection() method:\n\nitems = search.item_collection()\nlen(items)\n\n2\n\n\nThis output tells us there were two items in the catalog that matched our search!\n\nitems\n\n\n\n\n\n \n \n \n \n \n \n type\n \"FeatureCollection\"\n \n \n \n \n \n \n \n features\n [] 2 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n gsd\n 0.6\n \n \n \n \n \n \n \n datetime\n \"2020-05-21T00:00:00Z\"\n \n \n \n \n \n \n \n naip:year\n \"2020\"\n \n \n \n \n \n \n \n proj:bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n 246930.0\n \n \n \n \n \n \n \n \n \n \n \n 1\n 3806808.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 253260.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 3814296.0\n \n \n \n \n \n \n \n \n \n \n \n \n proj:epsg\n 26911\n \n \n \n \n \n \n \n naip:state\n \"ca\"\n \n \n \n \n \n \n \n proj:shape\n [] 2 items\n \n \n \n \n \n \n \n 0\n 12480\n \n \n \n \n \n \n \n \n \n \n \n 1\n 10550\n \n \n \n \n \n \n \n \n \n \n \n \n proj:transform\n [] 9 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 246930.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 4\n -0.6\n \n \n \n \n \n \n \n \n \n \n \n 5\n 3814296.0\n \n \n \n \n \n \n \n \n \n \n \n 6\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 7\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 8\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.373269\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.685448\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.440724\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.754272\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.439192\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.752061\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.371741\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.373269\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 5 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items/ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/map?collection=naip&item=ca_m_3411935_sw_11_060_20200521\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Map of item\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n image\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n tilejson\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"TileJSON with default rendering\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"tiles\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n rendered_preview\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"Rendered preview\"\n \n \n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"overview\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -119.754272\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.371741\n \n \n \n \n \n \n \n \n \n \n \n 2\n -119.683292\n \n \n \n \n \n \n \n \n \n \n \n 3\n 34.440724\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/eo/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"naip\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n gsd\n 0.6\n \n \n \n \n \n \n \n datetime\n \"2018-07-24T00:00:00Z\"\n \n \n \n \n \n \n \n naip:year\n \"2018\"\n \n \n \n \n \n \n \n proj:bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n 246978.0\n \n \n \n \n \n \n \n \n \n \n \n 1\n 3806856.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 253212.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 3814248.0\n \n \n \n \n \n \n \n \n \n \n \n \n proj:epsg\n 26911\n \n \n \n \n \n \n \n naip:state\n \"ca\"\n \n \n \n \n \n \n \n proj:shape\n [] 2 items\n \n \n \n \n \n \n \n 0\n 12320\n \n \n \n \n \n \n \n \n \n \n \n 1\n 10390\n \n \n \n \n \n \n \n \n \n \n \n \n proj:transform\n [] 9 items\n \n \n \n \n \n \n \n 0\n 0.6\n \n \n \n \n \n \n \n \n \n \n \n 1\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 2\n 246978.0\n \n \n \n \n \n \n \n \n \n \n \n 3\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 4\n -0.6\n \n \n \n \n \n \n \n \n \n \n \n 5\n 3814248.0\n \n \n \n \n \n \n \n \n \n \n \n 6\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 7\n 0.0\n \n \n \n \n \n \n \n \n \n \n \n 8\n 1.0\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.37369\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.685956\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.44028\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.753736\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.438772\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.751554\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.372185\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.37369\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 5 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/naip/items/ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/map?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209\"\n \n \n \n \n \n \n \n type\n \"text/html\"\n \n \n \n \n \n \n \n title\n \"Map of item\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n image\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_060cm_2018/34119/m_3411935_sw_11_060_20180724_20190209.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/tiff; application=geotiff; profile=cloud-optimized\"\n \n \n \n \n \n \n \n title\n \"RGBIR COG tile\"\n \n \n \n \n \n \n \n eo:bands\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"Red\"\n \n \n \n \n \n \n \n common_name\n \"red\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"Green\"\n \n \n \n \n \n \n \n common_name\n \"green\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"Blue\"\n \n \n \n \n \n \n \n common_name\n \"blue\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"NIR\"\n \n \n \n \n \n \n \n common_name\n \"nir\"\n \n \n \n \n \n \n \n description\n \"near-infrared\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n metadata\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_fgdc_2018/34119/m_3411935_sw_11_060_20180724.txt?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"text/plain\"\n \n \n \n \n \n \n \n title\n \"FGDC Metdata\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"metadata\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n thumbnail\n \n \n \n \n \n href\n \"https://naipeuwest.blob.core.windows.net/naip/v002/ca/2018/ca_060cm_2018/34119/m_3411935_sw_11_060_20180724_20190209.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D\"\n \n \n \n \n \n \n \n type\n \"image/jpeg\"\n \n \n \n \n \n \n \n title\n \"Thumbnail\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"thumbnail\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n tilejson\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"TileJSON with default rendering\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"tiles\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n rendered_preview\n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20180724_20190209&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png\"\n \n \n \n \n \n \n \n type\n \"image/png\"\n \n \n \n \n \n \n \n title\n \"Rendered preview\"\n \n \n \n \n \n \n \n rel\n \"preview\"\n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"overview\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -119.753736\n \n \n \n \n \n \n \n \n \n \n \n 1\n 34.372185\n \n \n \n \n \n \n \n \n \n \n \n 2\n -119.683827\n \n \n \n \n \n \n \n \n \n \n \n 3\n 34.44028\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/eo/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"naip\"" }, { "objectID": "lectures/lesson-18-STAC.html#item", "href": "lectures/lesson-18-STAC.html#item", - "title": "22  STAC specification", - "section": "22.6 Item", - "text": "22.6 Item\n\n\nLet’s get the first item in the search:\n\n# get first item in the catalog search\nitem = items[0]\ntype(item)\n\npystac.item.Item\n\n\nRemember the STAC item is the core object in a STAC catalog. The item does not contain the data itself, but rather metadata and assets that contain links to access the actual data. Some of the metadata:\n\n# print item id and properties\nprint('id:' , item.id)\nitem.properties\n\nid: ca_m_3411935_sw_11_060_20200521\n\n\n{'gsd': 0.6,\n 'datetime': '2020-05-21T00:00:00Z',\n 'naip:year': '2020',\n 'proj:bbox': [246930.0, 3806808.0, 253260.0, 3814296.0],\n 'proj:epsg': 26911,\n 'naip:state': 'ca',\n 'proj:shape': [12480, 10550],\n 'proj:transform': [0.6, 0.0, 246930.0, 0.0, -0.6, 3814296.0, 0.0, 0.0, 1.0]}\n\n\nJust as the item properties, the item assets are given in a dictionary, with each value being a pystac.asset Let’s check the assets in the item:\n\nitem.assets\n\n{'image': <Asset href=https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D>,\n 'thumbnail': <Asset href=https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D>,\n 'tilejson': <Asset href=https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png>,\n 'rendered_preview': <Asset href=https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png>}\n\n\n\nfor key in item.assets.keys():\n print(key, '--', item.assets[key].title)\n\nimage -- RGBIR COG tile\nthumbnail -- Thumbnail\ntilejson -- TileJSON with default rendering\nrendered_preview -- Rendered preview\n\n\nNotice each asset has an href, which is a link to the data. For example, we can use the URL for the 'rendered_preview' asset to plot it:\n\n# plot rendered preview\nImage(url=item.assets['rendered_preview'].href, width=500)" + "title": "23  STAC specification", + "section": "23.6 Item", + "text": "23.6 Item\n\n\nLet’s get the first item in the search:\n\n# get first item in the catalog search\nitem = items[0]\ntype(item)\n\npystac.item.Item\n\n\nRemember the STAC item is the core object in a STAC catalog. The item does not contain the data itself, but rather metadata and assets that contain links to access the actual data. Some of the metadata:\n\n# print item id and properties\nprint('id:' , item.id)\nitem.properties\n\nid: ca_m_3411935_sw_11_060_20200521\n\n\n{'gsd': 0.6,\n 'datetime': '2020-05-21T00:00:00Z',\n 'naip:year': '2020',\n 'proj:bbox': [246930.0, 3806808.0, 253260.0, 3814296.0],\n 'proj:epsg': 26911,\n 'naip:state': 'ca',\n 'proj:shape': [12480, 10550],\n 'proj:transform': [0.6, 0.0, 246930.0, 0.0, -0.6, 3814296.0, 0.0, 0.0, 1.0]}\n\n\nJust as the item properties, the item assets are given in a dictionary, with each value being a pystac.asset Let’s check the assets in the item:\n\nitem.assets\n\n{'image': <Asset href=https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.tif?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D>,\n 'thumbnail': <Asset href=https://naipeuwest.blob.core.windows.net/naip/v002/ca/2020/ca_060cm_2020/34119/m_3411935_sw_11_060_20200521.200.jpg?st=2023-12-03T19%3A03%3A33Z&se=2023-12-04T19%3A48%3A33Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A02%3A28Z&ske=2023-12-11T19%3A02%3A28Z&sks=b&skv=2021-06-08&sig=80fOhiy86TLDabWsdOk4/TYeLUjrcBJHerCVcggpfP8%3D>,\n 'tilejson': <Asset href=https://planetarycomputer.microsoft.com/api/data/v1/item/tilejson.json?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png>,\n 'rendered_preview': <Asset href=https://planetarycomputer.microsoft.com/api/data/v1/item/preview.png?collection=naip&item=ca_m_3411935_sw_11_060_20200521&assets=image&asset_bidx=image%7C1%2C2%2C3&format=png>}\n\n\n\nfor key in item.assets.keys():\n print(key, '--', item.assets[key].title)\n\nimage -- RGBIR COG tile\nthumbnail -- Thumbnail\ntilejson -- TileJSON with default rendering\nrendered_preview -- Rendered preview\n\n\nNotice each asset has an href, which is a link to the data. For example, we can use the URL for the 'rendered_preview' asset to plot it:\n\n# plot rendered preview\nImage(url=item.assets['rendered_preview'].href, width=500)" }, { "objectID": "lectures/lesson-18-STAC.html#load-data", "href": "lectures/lesson-18-STAC.html#load-data", - "title": "22  STAC specification", - "section": "22.7 Load data", - "text": "22.7 Load data\nThe raster data in our current item is in the image asset. Again, we access this data via its URL. This time, we open it using rioxr.open_rasterio() directly:\n\nsb = rioxr.open_rasterio(item.assets['image'].href)\nsb\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 4, y: 12480, x: 10550)>\n[526656000 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1 2 3 4\n * x (x) float64 2.469e+05 2.469e+05 ... 2.533e+05 2.533e+05\n * y (y) float64 3.814e+06 3.814e+06 ... 3.807e+06 3.807e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n TIFFTAG_IMAGEDESCRIPTION: OrthoVista\n TIFFTAG_RESOLUTIONUNIT: 1 (unitless)\n TIFFTAG_SOFTWARE: Trimble Germany GmbH\n TIFFTAG_XRESOLUTION: 1\n TIFFTAG_YRESOLUTION: 1\n _FillValue: 0\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 4y: 12480x: 10550...[526656000 values with dtype=uint8]Coordinates: (4)band(band)int641 2 3 4array([1, 2, 3, 4])x(x)float642.469e+05 2.469e+05 ... 2.533e+05array([246930.3, 246930.9, 246931.5, ..., 253258.5, 253259.1, 253259.7])y(y)float643.814e+06 3.814e+06 ... 3.807e+06array([3814295.7, 3814295.1, 3814294.5, ..., 3806809.5, 3806808.9, 3806808.3])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :246930.0 0.6 0.0 3814296.0 0.0 -0.6array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3, 4], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ 246930.3, 246930.9, 246931.5,\n 246932.09999999998, 246932.69999999998, 246933.3,\n 246933.9, 246934.5, 246935.09999999998,\n 246935.69999999998,\n ...\n 253254.3, 253254.9, 253255.5,\n 253256.09999999998, 253256.69999999998, 253257.3,\n 253257.9, 253258.5, 253259.09999999998,\n 253259.69999999998],\n dtype='float64', name='x', length=10550))yPandasIndexPandasIndex(Index([ 3814295.7, 3814295.1, 3814294.5,\n 3814293.9000000004, 3814293.3000000003, 3814292.7,\n 3814292.1, 3814291.5, 3814290.9000000004,\n 3814290.3000000003,\n ...\n 3806813.7, 3806813.1, 3806812.5,\n 3806811.9000000004, 3806811.3000000003, 3806810.7,\n 3806810.1, 3806809.5, 3806808.9000000004,\n 3806808.3000000003],\n dtype='float64', name='y', length=12480))Attributes: (9)AREA_OR_POINT :AreaTIFFTAG_IMAGEDESCRIPTION :OrthoVistaTIFFTAG_RESOLUTIONUNIT :1 (unitless)TIFFTAG_SOFTWARE :Trimble Germany GmbHTIFFTAG_XRESOLUTION :1TIFFTAG_YRESOLUTION :1_FillValue :0scale_factor :1.0add_offset :0.0\n\n\nNotice this raster has four bands (red, green, blue, nir), so we cannot use the .plot.imshow() method directly (as this function only works when we have three bands). Thus we need select the bands we want to plot (RGB) before plotting:\n\n# plot raster with correct ratio\nsize = 6 # height in in of plot height\naspect = sb.rio.width / sb.rio.height \n# select R,G,B bands and plot\nsb.sel(band=[1,2,3]).plot.imshow(size=size, aspect=aspect)" + "title": "23  STAC specification", + "section": "23.7 Load data", + "text": "23.7 Load data\nThe raster data in our current item is in the image asset. Again, we access this data via its URL. This time, we open it using rioxr.open_rasterio() directly:\n\nsb = rioxr.open_rasterio(item.assets['image'].href)\nsb\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 4, y: 12480, x: 10550)>\n[526656000 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1 2 3 4\n * x (x) float64 2.469e+05 2.469e+05 ... 2.533e+05 2.533e+05\n * y (y) float64 3.814e+06 3.814e+06 ... 3.807e+06 3.807e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n TIFFTAG_IMAGEDESCRIPTION: OrthoVista\n TIFFTAG_RESOLUTIONUNIT: 1 (unitless)\n TIFFTAG_SOFTWARE: Trimble Germany GmbH\n TIFFTAG_XRESOLUTION: 1\n TIFFTAG_YRESOLUTION: 1\n _FillValue: 0\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 4y: 12480x: 10550...[526656000 values with dtype=uint8]Coordinates: (4)band(band)int641 2 3 4array([1, 2, 3, 4])x(x)float642.469e+05 2.469e+05 ... 2.533e+05array([246930.3, 246930.9, 246931.5, ..., 253258.5, 253259.1, 253259.7])y(y)float643.814e+06 3.814e+06 ... 3.807e+06array([3814295.7, 3814295.1, 3814294.5, ..., 3806809.5, 3806808.9, 3806808.3])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :246930.0 0.6 0.0 3814296.0 0.0 -0.6array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3, 4], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ 246930.3, 246930.9, 246931.5,\n 246932.09999999998, 246932.69999999998, 246933.3,\n 246933.9, 246934.5, 246935.09999999998,\n 246935.69999999998,\n ...\n 253254.3, 253254.9, 253255.5,\n 253256.09999999998, 253256.69999999998, 253257.3,\n 253257.9, 253258.5, 253259.09999999998,\n 253259.69999999998],\n dtype='float64', name='x', length=10550))yPandasIndexPandasIndex(Index([ 3814295.7, 3814295.1, 3814294.5,\n 3814293.9000000004, 3814293.3000000003, 3814292.7,\n 3814292.1, 3814291.5, 3814290.9000000004,\n 3814290.3000000003,\n ...\n 3806813.7, 3806813.1, 3806812.5,\n 3806811.9000000004, 3806811.3000000003, 3806810.7,\n 3806810.1, 3806809.5, 3806808.9000000004,\n 3806808.3000000003],\n dtype='float64', name='y', length=12480))Attributes: (9)AREA_OR_POINT :AreaTIFFTAG_IMAGEDESCRIPTION :OrthoVistaTIFFTAG_RESOLUTIONUNIT :1 (unitless)TIFFTAG_SOFTWARE :Trimble Germany GmbHTIFFTAG_XRESOLUTION :1TIFFTAG_YRESOLUTION :1_FillValue :0scale_factor :1.0add_offset :0.0\n\n\nNotice this raster has four bands (red, green, blue, nir), so we cannot use the .plot.imshow() method directly (as this function only works when we have three bands). Thus we need select the bands we want to plot (RGB) before plotting:\n\n# plot raster with correct ratio\nsize = 6 # height in in of plot height\naspect = sb.rio.width / sb.rio.height \n# select R,G,B bands and plot\nsb.sel(band=[1,2,3]).plot.imshow(size=size, aspect=aspect)" }, { "objectID": "lectures/lesson-18-STAC.html#exercise", "href": "lectures/lesson-18-STAC.html#exercise", - "title": "22  STAC specification", - "section": "22.8 Exercise", - "text": "22.8 Exercise\nThe 'cop-dem-glo-90' collection contains the Copernicus DEM at 90m resolution data (the data we previously used for the Grand Canyon).\n\nReuse the bbox for Santa Barbara to look for items in this collection.\nGet the first item in the search and check its assets.\nCheck the item’s rendered preview asset by clicking on it’s URL.\nOpen the item’s data using rioxarray." + "title": "23  STAC specification", + "section": "23.8 Exercise", + "text": "23.8 Exercise\nThe 'cop-dem-glo-90' collection contains the Copernicus DEM at 90m resolution data (the data we previously used for the Grand Canyon).\n\nReuse the bbox for Santa Barbara to look for items in this collection.\nGet the first item in the search and check its assets.\nCheck the item’s rendered preview asset by clicking on it’s URL.\nOpen the item’s data using rioxarray." }, { "objectID": "lectures/lesson-18-STAC.html#references", "href": "lectures/lesson-18-STAC.html#references", - "title": "22  STAC specification", - "section": "22.9 References", - "text": "22.9 References\nSTAC Documentation:\n\nThe STAC Specification\nRead a STAC Catalog Using PySTAC\n\nMicrosoft Planetary Computer Documentation - Reading Data from the STAC API" + "title": "23  STAC specification", + "section": "23.9 References", + "text": "23.9 References\nSTAC Documentation:\n\nThe STAC Specification\nRead a STAC Catalog Using PySTAC\n\nMicrosoft Planetary Computer Documentation - Reading Data from the STAC API" }, { "objectID": "discussion-sections/ds5-modis-ndvi.html#data-access", "href": "discussion-sections/ds5-modis-ndvi.html#data-access", - "title": "23  *Lab: STAC access", - "section": "23.1 Data access", - "text": "23.1 Data access\n\nOpen the MPC STAC catalog.\nCreate a search for data in the MODIS Vegetation Indices dataset (id = 'modis-13A1-061') from 2023 that intersects the box bounds:\n\n[-119.28376473993174, 35.561681976121605, -117.15965333370627, 36.65291223580975]\nThis list of coordinates is in the form [minx, miny, maxx, maxy] with epsg:4326 and describes a rectangular region around Sequoia National Park.\nHINT: You can use the list of coordinates directly in the catalog search without converting it to a JSON format.\n\nHow many items are in the search?" + "title": "24  *Lab: STAC access", + "section": "24.1 Data access", + "text": "24.1 Data access\n\nOpen the MPC STAC catalog.\nCreate a search for data in the MODIS Vegetation Indices dataset (id = 'modis-13A1-061') from 2023 that intersects the box bounds:\n\n[-119.28376473993174, 35.561681976121605, -117.15965333370627, 36.65291223580975]\nThis list of coordinates is in the form [minx, miny, maxx, maxy] with epsg:4326 and describes a rectangular region around Sequoia National Park.\nHINT: You can use the list of coordinates directly in the catalog search without converting it to a JSON format.\n\nHow many items are in the search?" }, { "objectID": "discussion-sections/ds5-modis-ndvi.html#examine-dates", "href": "discussion-sections/ds5-modis-ndvi.html#examine-dates", - "title": "23  *Lab: STAC access", - "section": "23.2 Examine Dates", - "text": "23.2 Examine Dates\n\nSelect the first item in the search as a variable item.\nRun item.properties. What kind of Python data structure is this? You can also check it using type.\nUse the 'datetime', 'start_datetime', and 'end_datetime' keys to print the datetime information of the item.\nThe 'datetime' value usually refers to the date of collection. Discuss with your team: why does this item does not have a datetime, but instead has start and end times? HINT: read the datset’s overview." + "title": "24  *Lab: STAC access", + "section": "24.2 Examine Dates", + "text": "24.2 Examine Dates\n\nSelect the first item in the search as a variable item.\nRun item.properties. What kind of Python data structure is this? You can also check it using type.\nUse the 'datetime', 'start_datetime', and 'end_datetime' keys to print the datetime information of the item.\nThe 'datetime' value usually refers to the date of collection. Discuss with your team: why does this item does not have a datetime, but instead has start and end times? HINT: read the datset’s overview." }, { "objectID": "discussion-sections/ds5-modis-ndvi.html#assets", "href": "discussion-sections/ds5-modis-ndvi.html#assets", - "title": "23  *Lab: STAC access", - "section": "23.3 Assets", - "text": "23.3 Assets\n\nCheck the item’s assets. What kind of Python structure is this?\nRun the following code in a cell\n\nfor key, asset in item.assets.items():\n print(key, '-', asset.title)\nHere, item.assets.items() returns the key-value pairs of the item.assets dictionary as tuples we can iterate over simultaneously.\n\nIdentify which key in item.assets has the 500m NDVI asset.\nOpen the 500m 16 days NDVI data using the href from the corresponding asset and rioxr.open_rasterio(). Store it as a variable named data." + "title": "24  *Lab: STAC access", + "section": "24.3 Assets", + "text": "24.3 Assets\n\nCheck the item’s assets. What kind of Python structure is this?\nRun the following code in a cell\n\nfor key, asset in item.assets.items():\n print(key, '-', asset.title)\nHere, item.assets.items() returns the key-value pairs of the item.assets dictionary as tuples we can iterate over simultaneously.\n\nIdentify which key in item.assets has the 500m NDVI asset.\nOpen the 500m 16 days NDVI data using the href from the corresponding asset and rioxr.open_rasterio(). Store it as a variable named data." }, { "objectID": "discussion-sections/ds5-modis-ndvi.html#rescaling", "href": "discussion-sections/ds5-modis-ndvi.html#rescaling", - "title": "23  *Lab: STAC access", - "section": "23.4 Rescaling", - "text": "23.4 Rescaling\n\nPlot the data raster. Discuss with your team the range of values in the raster and how these relate to the NDVI range.\nRun the following code:\n\nitem.assets[\"500m_16_days_NDVI\"].extra_fields[\"raster:bands\"]\nWhat kind of structure is this?\n\nExtract the scale value (0.0001) from the item using the previous code and store it in a variable named scale.\nMultiply the data raster by scale to get the actual NDVI values. Store the new raster as a variable ndvi.\nPlot ndvi using the colormap PiYG. HINT: cmap=\"PiYG\". This is a nice area to look at NDVI since we can see the transition in NDVI between the Sierra Nevada and Death Valley." + "title": "24  *Lab: STAC access", + "section": "24.4 Rescaling", + "text": "24.4 Rescaling\n\nPlot the data raster. Discuss with your team the range of values in the raster and how these relate to the NDVI range.\nRun the following code:\n\nitem.assets[\"500m_16_days_NDVI\"].extra_fields[\"raster:bands\"]\nWhat kind of structure is this?\n\nExtract the scale value (0.0001) from the item using the previous code and store it in a variable named scale.\nMultiply the data raster by scale to get the actual NDVI values. Store the new raster as a variable ndvi.\nPlot ndvi using the colormap PiYG. HINT: cmap=\"PiYG\". This is a nice area to look at NDVI since we can see the transition in NDVI between the Sierra Nevada and Death Valley." }, { - "objectID": "lectures/lesson-21-contextily-parquet.html#parquet-and-geoparquet", - "href": "lectures/lesson-21-contextily-parquet.html#parquet-and-geoparquet", - "title": "24  Parquet and contextily", - "section": "24.1 Parquet and GeoParquet", - "text": "24.1 Parquet and GeoParquet\nApache Parquet (or just parquet) is an open-source, column-oriented file format that makes it faster to retrieve data and uses less memory space to store tabular data. It is very popular for storing large amounts of data, instead of using, for example, CSV files.\n\nThe geospatial version of parquet for storing vector data is the GeoParquet data format. This format comes from the necessity to have an efficient, standardized data format to store and query big geospatial data efficiently. GeoParquet was first introduced in December 2022. Similarly to STAC, this is a new and ongoing effort to create standards in the geospatial analysis community given the rapid increase in geospatial data available." + "objectID": "lectures/lesson-22-make_a_gif.html#data-search", + "href": "lectures/lesson-22-make_a_gif.html#data-search", + "title": "25  Make a GIF", + "section": "25.1 Data search", + "text": "25.1 Data search\nTo search for the NAIP data in the Microsoft Planetary Computer Catalog we will use a list of coordinates defining a bounding box around campus point. We will also limit our search for items since 2016, when NAIP data resolution increased from 1m to 0.6m per pixel.\n\n# open catalog\ncatalog = pystac_client.Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\n# coords defining bbox around campus point\nbbox = [-119.84682486219316, 34.404860394049024, -119.84370917948988, 34.40632764289684]\n\n# search \nsearch = catalog.search(\n collections=[\"naip\"], \n bbox=bbox, \n datetime='2016/2023'\n)\n\n# get items from search\nitems = search.item_collection()\nprint(f'There are {len(items)} items in the search.')\n\nThere are 3 items in the search." }, { - "objectID": "lectures/lesson-21-contextily-parquet.html#catalog-search", - "href": "lectures/lesson-21-contextily-parquet.html#catalog-search", - "title": "24  Parquet and contextily", - "section": "24.2 Catalog search", - "text": "24.2 Catalog search\nWe start by importing all the necessary libraries:\n\nimport geopandas as gpd\nimport matplotlib.pyplot as plt\n\n# for MPC's STAC catalog search\nimport pystac_client\nimport planetary_computer\n\nimport contextily as ctx #for adding basemaps\n\n\n\nThen we use the 2020 US Census Collection id, 'us-census', to look for the data in the MPC catalog. This collection has each tabular file as an item:\n\n# open MPC catalog\ncatalog = pystac_client.Client.open(\n \"https://planetarycomputer.microsoft.com/api/stac/v1\",\n modifier=planetary_computer.sign_inplace,\n)\n\n# search whole collection\nsearch = catalog.search(collections=[\"us-census\"])\n\n# retrieve items\nitems = {item.id: item for item in search.items()}\nlist(items)\n\n['2020-census-blocks-population',\n '2020-census-blocks-geo',\n '2020-cb_2020_us_vtd_500k',\n '2020-cb_2020_us_unsd_500k',\n '2020-cb_2020_us_ttract_500k',\n '2020-cb_2020_us_tract_500k',\n '2020-cb_2020_us_tbg_500k',\n '2020-cb_2020_us_state_500k',\n '2020-cb_2020_us_sldu_500k',\n '2020-cb_2020_us_sldl_500k',\n '2020-cb_2020_us_scsd_500k',\n '2020-cb_2020_us_region_500k',\n '2020-cb_2020_us_place_500k',\n '2020-cb_2020_us_nectadiv_500k',\n '2020-cb_2020_us_necta_500k',\n '2020-cb_2020_us_nation_5m',\n '2020-cb_2020_us_metdiv_500k',\n '2020-cb_2020_us_elsd_500k',\n '2020-cb_2020_us_division_500k',\n '2020-cb_2020_us_csa_500k',\n '2020-cb_2020_us_cousub_500k',\n '2020-cb_2020_us_county_within_cd116_500k',\n '2020-cb_2020_us_county_500k',\n '2020-cb_2020_us_concity_500k',\n '2020-cb_2020_us_cnecta_500k',\n '2020-cb_2020_us_cd116_500k',\n '2020-cb_2020_us_cbsa_500k',\n '2020-cb_2020_us_bg_500k',\n '2020-cb_2020_us_aitsn_500k',\n '2020-cb_2020_us_aiannh_500k',\n '2020-cb_2020_72_subbarrio_500k',\n '2020-cb_2020_02_anrc_500k']\n\n\nThis time we will access the item with the counties data:\n\nitem = items['2020-cb_2020_us_county_500k']\nitem\n\n\n\n\n\n\n \n \n \n \n \n \n type\n \"Feature\"\n \n \n \n \n \n \n \n stac_version\n \"1.0.0\"\n \n \n \n \n \n \n \n id\n \"2020-cb_2020_us_county_500k\"\n \n \n \n \n \n \n \n properties\n \n \n \n \n \n datetime\n \"2021-08-01T00:00:00Z\"\n \n \n \n \n \n \n \n proj:epsg\n 4269\n \n \n \n \n \n \n \n table:columns\n [] 13 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n name\n \"STATEFP\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"State FIPS Code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n name\n \"COUNTYFP\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"County FIPS code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n name\n \"COUNTYNS\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n name\n \"AFFGEOID\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"American FactFinder summary level code + geovariant code + \"00US\" + GEOID\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n \n \n \n \n \n name\n \"GEOID\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Concatenation of State FIPS and county FIPS code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 5\n \n \n \n \n \n name\n \"NAME\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"County name\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 6\n \n \n \n \n \n name\n \"NAMELSAD\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Name and Legal/statistical description\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 7\n \n \n \n \n \n name\n \"STUSPS\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"FIPS State Postal Code\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 8\n \n \n \n \n \n name\n \"STATE_NAME\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 9\n \n \n \n \n \n name\n \"LSAD\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"Legal/statistical classification\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 10\n \n \n \n \n \n name\n \"ALAND\"\n \n \n \n \n \n \n \n type\n \"int64\"\n \n \n \n \n \n \n \n description\n \"Current land area\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 11\n \n \n \n \n \n name\n \"AWATER\"\n \n \n \n \n \n \n \n type\n \"int64\"\n \n \n \n \n \n \n \n description\n \"Current water area\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 12\n \n \n \n \n \n name\n \"geometry\"\n \n \n \n \n \n \n \n type\n \"byte_array\"\n \n \n \n \n \n \n \n description\n \"coordinates for County polygons\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n table:row_count\n 3234\n \n \n \n \n \n \n \n \n \n \n \n \n geometry\n \n \n \n \n \n type\n \"Polygon\"\n \n \n \n \n \n \n \n coordinates\n [] 1 items\n \n \n \n \n \n \n \n 0\n [] 5 items\n \n \n \n \n \n \n \n 0\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n [] 2 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n [] 2 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 4\n [] 2 items\n \n \n \n \n \n \n \n 0\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n links\n [] 4 items\n \n \n \n \n \n \n \n 0\n \n \n \n \n \n rel\n \"collection\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 1\n \n \n \n \n \n rel\n \"parent\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 2\n \n \n \n \n \n rel\n \"root\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1\"\n \n \n \n \n \n \n \n type\n \"application/json\"\n \n \n \n \n \n \n \n title\n \"Microsoft Planetary Computer STAC API\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 3\n \n \n \n \n \n rel\n \"self\"\n \n \n \n \n \n \n \n href\n \"https://planetarycomputer.microsoft.com/api/stac/v1/collections/us-census/items/2020-cb_2020_us_county_500k\"\n \n \n \n \n \n \n \n type\n \"application/geo+json\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n assets\n \n \n \n \n \n data\n \n \n \n \n \n href\n \"abfs://us-census/2020/cb_2020_us_county_500k.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"Dataset root\"\n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"ai4edataeuwest\"\n \n \n \n \n \n \n \n credential\n \"st=2023-12-03T19%3A03%3A46Z&se=2023-12-04T19%3A48%3A46Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A00%3A13Z&ske=2023-12-11T19%3A00%3A13Z&sks=b&skv=2021-06-08&sig=%2B%2B5aJV0sbjqC2N4OR9hIv2svJZHbWiaV61rx7MdakJA%3D\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbox\n [] 4 items\n \n \n \n \n \n \n \n 0\n -179.148909\n \n \n \n \n \n \n \n \n \n \n \n 1\n -14.548699\n \n \n \n \n \n \n \n \n \n \n \n 2\n 179.77847\n \n \n \n \n \n \n \n \n \n \n \n 3\n 71.365162\n \n \n \n \n \n \n \n \n \n \n \n \n stac_extensions\n [] 2 items\n \n \n \n \n \n \n \n 0\n \"https://stac-extensions.github.io/table/v1.2.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n 1\n \"https://stac-extensions.github.io/projection/v1.0.0/schema.json\"\n \n \n \n \n \n \n \n \n \n \n \n \n collection\n \"us-census\"\n \n \n \n \n \n \n\n\n\nNotice each item has a single asset, 'data', that contains an URL to the GeoParquet file holding the information. Let’s access the item’s asset:\n\nasset = item.assets[\"data\"]\nasset\n\n\n\n\n\n\n \n \n \n \n \n \n href\n \"abfs://us-census/2020/cb_2020_us_county_500k.parquet\"\n \n \n \n \n \n \n \n type\n \"application/x-parquet\"\n \n \n \n \n \n \n \n title\n \"Dataset root\"\n \n \n \n \n \n \n \n table:storage_options\n \n \n \n \n \n account_name\n \"ai4edataeuwest\"\n \n \n \n \n \n \n \n credential\n \"st=2023-12-03T19%3A03%3A46Z&se=2023-12-04T19%3A48%3A46Z&sp=rl&sv=2021-06-08&sr=c&skoid=c85c15d6-d1ae-42d4-af60-e2ca0f81359b&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2023-12-04T19%3A00%3A13Z&ske=2023-12-11T19%3A00%3A13Z&sks=b&skv=2021-06-08&sig=%2B%2B5aJV0sbjqC2N4OR9hIv2svJZHbWiaV61rx7MdakJA%3D\"\n \n \n \n \n \n \n \n \n \n \n \n \n roles\n [] 1 items\n \n \n \n \n \n \n \n 0\n \"data\"" + "objectID": "lectures/lesson-22-make_a_gif.html#prepare-single-raster", + "href": "lectures/lesson-22-make_a_gif.html#prepare-single-raster", + "title": "25  Make a GIF", + "section": "25.2 Prepare single raster", + "text": "25.2 Prepare single raster\nThe NAIP data is available at the item’s 'image' asset:\n\nitem = items[0]\nsb = rioxr.open_rasterio(item.assets['image'].href)\nsb\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (band: 4, y: 12500, x: 10580)>\n[529000000 values with dtype=uint8]\nCoordinates:\n * band (band) int64 1 2 3 4\n * x (x) float64 2.354e+05 2.354e+05 ... 2.418e+05 2.418e+05\n * y (y) float64 3.815e+06 3.815e+06 ... 3.807e+06 3.807e+06\n spatial_ref int64 0\nAttributes:\n AREA_OR_POINT: Area\n TIFFTAG_IMAGEDESCRIPTION: OrthoVista\n TIFFTAG_RESOLUTIONUNIT: 1 (unitless)\n TIFFTAG_SOFTWARE: Trimble Germany GmbH\n TIFFTAG_XRESOLUTION: 1\n TIFFTAG_YRESOLUTION: 1\n _FillValue: 0\n scale_factor: 1.0\n add_offset: 0.0xarray.DataArrayband: 4y: 12500x: 10580...[529000000 values with dtype=uint8]Coordinates: (4)band(band)int641 2 3 4array([1, 2, 3, 4])x(x)float642.354e+05 2.354e+05 ... 2.418e+05array([235428.3, 235428.9, 235429.5, ..., 241774.5, 241775.1, 241775.7])y(y)float643.815e+06 3.815e+06 ... 3.807e+06array([3814619.7, 3814619.1, 3814618.5, ..., 3807121.5, 3807120.9, 3807120.3])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :235428.0 0.6 0.0 3814620.0 0.0 -0.6array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3, 4], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([ 235428.3, 235428.9, 235429.5,\n 235430.09999999998, 235430.69999999998, 235431.3,\n 235431.9, 235432.5, 235433.09999999998,\n 235433.69999999998,\n ...\n 241770.3, 241770.9, 241771.5,\n 241772.09999999998, 241772.69999999998, 241773.3,\n 241773.9, 241774.5, 241775.09999999998,\n 241775.69999999998],\n dtype='float64', name='x', length=10580))yPandasIndexPandasIndex(Index([ 3814619.7, 3814619.1, 3814618.5,\n 3814617.9000000004, 3814617.3000000003, 3814616.7,\n 3814616.1, 3814615.5, 3814614.9000000004,\n 3814614.3000000003,\n ...\n 3807125.7, 3807125.1, 3807124.5,\n 3807123.9000000004, 3807123.3000000003, 3807122.7,\n 3807122.1, 3807121.5, 3807120.9000000004,\n 3807120.3000000003],\n dtype='float64', name='y', length=12500))Attributes: (9)AREA_OR_POINT :AreaTIFFTAG_IMAGEDESCRIPTION :OrthoVistaTIFFTAG_RESOLUTIONUNIT :1 (unitless)TIFFTAG_SOFTWARE :Trimble Germany GmbHTIFFTAG_XRESOLUTION :1TIFFTAG_YRESOLUTION :1_FillValue :0scale_factor :1.0add_offset :0.0\n\n\nThis rater is way bigger than our area of interest. To verify this and then clip the raster, let’s make a gpd.GeoDataFrame from the bbox coordinates:\n\n# bounding box as geodataframe\nbox_df = gpd.GeoDataFrame(geometry=[box(*bbox)],\n crs='epsg:4326') \n\n\n# plot bounding box and raster extents\nfig, ax = plt.subplots()\ngpd.GeoDataFrame(geometry=[box(*sb.rio.bounds())],\n crs=sb.rio.crs).plot(ax=ax)\nbox_df.to_crs(sb.rio.crs).plot(ax=ax, color='red')\n\n<Axes: >\n\n\n\n\n\n\n# clip raster to bounding box\nsb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)\n\nNAIP data has four bands, Red, Green, Blue, and Near-Infrared. To make it easier to plot RGB images, let’s select only the first three bands.\n\n# select red, green, blue bands and plot true color image.\nsb = sb.sel(band=[1,2,3])\nsb.plot.imshow()\n\n<matplotlib.image.AxesImage at 0x153634610>" }, { - "objectID": "lectures/lesson-21-contextily-parquet.html#opening-geoparquet", - "href": "lectures/lesson-21-contextily-parquet.html#opening-geoparquet", - "title": "24  Parquet and contextily", - "section": "24.3 Opening (Geo)Parquet", - "text": "24.3 Opening (Geo)Parquet\nTo open the parquet file we use the gpd.read_parquet() function using the asset’s URL pointing to the data.\n\ncounties = gpd.read_parquet(\n asset.href,\n # \n storage_options=asset.extra_fields[\"table:storage_options\"],\n)\n\nNow we have a regular geopandas.GeoDataFrame:\n\nprint(type(counties))\ncounties.head()\n\n<class 'geopandas.geodataframe.GeoDataFrame'>\n\n\n\n\n\n\n\n\n\nSTATEFP\nCOUNTYFP\nCOUNTYNS\nAFFGEOID\nGEOID\nNAME\nNAMELSAD\nSTUSPS\nSTATE_NAME\nLSAD\nALAND\nAWATER\ngeometry\n\n\n\n\n0\n21\n141\n00516917\n0500000US21141\n21141\nLogan\nLogan County\nKY\nKentucky\n06\n1430224002\n12479211\nPOLYGON ((-87.06037 36.68085, -87.06002 36.708...\n\n\n1\n36\n081\n00974139\n0500000US36081\n36081\nQueens\nQueens County\nNY\nNew York\n06\n281594050\n188444349\nPOLYGON ((-73.96262 40.73903, -73.96243 40.739...\n\n\n2\n34\n017\n00882278\n0500000US34017\n34017\nHudson\nHudson County\nNJ\nNew Jersey\n06\n119640822\n41836491\nMULTIPOLYGON (((-74.04220 40.69997, -74.03900 ...\n\n\n3\n34\n019\n00882228\n0500000US34019\n34019\nHunterdon\nHunterdon County\nNJ\nNew Jersey\n06\n1108086284\n24761598\nPOLYGON ((-75.19511 40.57969, -75.19466 40.581...\n\n\n4\n21\n147\n00516926\n0500000US21147\n21147\nMcCreary\nMcCreary County\nKY\nKentucky\n06\n1105416696\n10730402\nPOLYGON ((-84.77845 36.60329, -84.73068 36.665..." + "objectID": "lectures/lesson-22-make_a_gif.html#stack-rasters", + "href": "lectures/lesson-22-make_a_gif.html#stack-rasters", + "title": "25  Make a GIF", + "section": "25.3 Stack rasters", + "text": "25.3 Stack rasters\nOur goal is to use the gif function to create a gif with the three NAIP images over campus point.\nThe gif documentation indicates that to do so we will need to put our images/rasters in a single xarray.DataArray with dimensions (time, band, y, x). A single raster has the following dimensions:\n\nprint('dimensions: ', sb.dims)\nprint('shape: ', sb.shape)\n\ndimensions: ('band', 'y', 'x')\nshape: (3, 285, 486)\n\n\nTo create a single xarray.DataArray with a time dimensions we will stack the three rasters we obtained in our search. We use a for loop to repeat the previous steps for each item in the search (access the item’s image asset, clip, and select bands) and store each processed raster in a list rasters:\n\n# create a list with rasters\nrasters = []\nfor item in items:\n sb = rioxr.open_rasterio(item.assets['image'].href)\n sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds)\n sb = sb.sel(band=[1,2,3])\n rasters.append(sb)\n\nNext we use the xarray.concat() function to concatenate these rasters along a new dimensions we will call time:\n\n# concatenate rasters into single xarray.DataArray\nstack = xr.concat(rasters, dim='time')\nstack\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>\narray([[[[108, 99, 87, ..., 134, 145, 150],\n [110, 109, 101, ..., 123, 142, 150],\n [ 99, 94, 94, ..., 136, 142, 152],\n ...,\n [ 37, 37, 37, ..., 150, 130, 158],\n [ 36, 38, 37, ..., 158, 135, 137],\n [ 37, 38, 38, ..., 151, 145, 116]],\n\n [[113, 106, 94, ..., 136, 142, 147],\n [113, 109, 107, ..., 128, 141, 148],\n [109, 104, 105, ..., 136, 140, 148],\n ...,\n [ 58, 59, 60, ..., 161, 153, 167],\n [ 56, 58, 59, ..., 173, 156, 158],\n [ 58, 58, 59, ..., 166, 157, 137]],\n\n [[ 88, 88, 85, ..., 120, 128, 131],\n [ 87, 86, 84, ..., 113, 127, 133],\n [ 85, 83, 83, ..., 120, 126, 133],\n ...,\n...\n ...,\n [ 45, 46, 39, ..., 61, 64, 59],\n [ 57, 64, 36, ..., 63, 55, 53],\n [ 53, 57, 40, ..., 55, 50, 46]],\n\n [[ 48, 47, 49, ..., 88, 92, 120],\n [ 54, 49, 49, ..., 85, 112, 114],\n [ 58, 53, 51, ..., 82, 112, 100],\n ...,\n [ 58, 58, 57, ..., 70, 76, 74],\n [ 73, 70, 53, ..., 76, 70, 66],\n [ 65, 69, 52, ..., 68, 59, 60]],\n\n [[ 52, 52, 53, ..., 85, 99, 119],\n [ 54, 51, 55, ..., 81, 109, 108],\n [ 57, 52, 53, ..., 85, 106, 93],\n ...,\n [ 70, 68, 62, ..., 79, 79, 76],\n [ 78, 75, 61, ..., 81, 72, 70],\n [ 71, 77, 63, ..., 74, 66, 65]]]], dtype=uint8)\nCoordinates:\n * band (band) int64 1 2 3\n * x (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05\n * y (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\nDimensions without coordinates: time\nAttributes:\n AREA_OR_POINT: Area\n TIFFTAG_IMAGEDESCRIPTION: OrthoVista\n TIFFTAG_RESOLUTIONUNIT: 1 (unitless)\n TIFFTAG_SOFTWARE: Trimble Germany GmbH\n TIFFTAG_XRESOLUTION: 1\n TIFFTAG_YRESOLUTION: 1\n scale_factor: 1.0\n add_offset: 0.0\n _FillValue: 0xarray.DataArraytime: 3band: 3y: 285x: 486108 99 87 88 83 85 81 69 69 67 61 ... 90 86 73 74 83 85 75 71 74 66 65array([[[[108, 99, 87, ..., 134, 145, 150],\n [110, 109, 101, ..., 123, 142, 150],\n [ 99, 94, 94, ..., 136, 142, 152],\n ...,\n [ 37, 37, 37, ..., 150, 130, 158],\n [ 36, 38, 37, ..., 158, 135, 137],\n [ 37, 38, 38, ..., 151, 145, 116]],\n\n [[113, 106, 94, ..., 136, 142, 147],\n [113, 109, 107, ..., 128, 141, 148],\n [109, 104, 105, ..., 136, 140, 148],\n ...,\n [ 58, 59, 60, ..., 161, 153, 167],\n [ 56, 58, 59, ..., 173, 156, 158],\n [ 58, 58, 59, ..., 166, 157, 137]],\n\n [[ 88, 88, 85, ..., 120, 128, 131],\n [ 87, 86, 84, ..., 113, 127, 133],\n [ 85, 83, 83, ..., 120, 126, 133],\n ...,\n...\n ...,\n [ 45, 46, 39, ..., 61, 64, 59],\n [ 57, 64, 36, ..., 63, 55, 53],\n [ 53, 57, 40, ..., 55, 50, 46]],\n\n [[ 48, 47, 49, ..., 88, 92, 120],\n [ 54, 49, 49, ..., 85, 112, 114],\n [ 58, 53, 51, ..., 82, 112, 100],\n ...,\n [ 58, 58, 57, ..., 70, 76, 74],\n [ 73, 70, 53, ..., 76, 70, 66],\n [ 65, 69, 52, ..., 68, 59, 60]],\n\n [[ 52, 52, 53, ..., 85, 99, 119],\n [ 54, 51, 55, ..., 81, 109, 108],\n [ 57, 52, 53, ..., 85, 106, 93],\n ...,\n [ 70, 68, 62, ..., 79, 79, 76],\n [ 78, 75, 61, ..., 81, 72, 70],\n [ 71, 77, 63, ..., 74, 66, 65]]]], dtype=uint8)Coordinates: (4)band(band)int641 2 3array([1, 2, 3])x(x)float642.383e+05 2.383e+05 ... 2.386e+05axis :Xlong_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :metrearray([238316.7, 238317.3, 238317.9, ..., 238606.5, 238607.1, 238607.7])y(y)float643.811e+06 3.811e+06 ... 3.811e+06axis :Ylong_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :metrearray([3810885.3, 3810884.7, 3810884.1, ..., 3810716.1, 3810715.5, 3810714.9])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :238316.4 0.6 0.0 3810885.6 0.0 -0.599999999999672array(0)Indexes: (3)bandPandasIndexPandasIndex(Index([1, 2, 3], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([238316.69999999998, 238317.3, 238317.9,\n 238318.5, 238319.09999999998, 238319.69999999998,\n 238320.3, 238320.9, 238321.5,\n 238322.09999999998,\n ...\n 238602.3, 238602.9, 238603.5,\n 238604.09999999998, 238604.69999999998, 238605.3,\n 238605.9, 238606.5, 238607.09999999998,\n 238607.69999999998],\n dtype='float64', name='x', length=486))yPandasIndexPandasIndex(Index([3810885.3000000003, 3810884.7, 3810884.1,\n 3810883.5, 3810882.9000000004, 3810882.3000000003,\n 3810881.7, 3810881.1, 3810880.5,\n 3810879.9000000004,\n ...\n 3810720.3000000003, 3810719.7, 3810719.1,\n 3810718.5, 3810717.9000000004, 3810717.3000000003,\n 3810716.7, 3810716.1, 3810715.5,\n 3810714.9000000004],\n dtype='float64', name='y', length=285))Attributes: (9)AREA_OR_POINT :AreaTIFFTAG_IMAGEDESCRIPTION :OrthoVistaTIFFTAG_RESOLUTIONUNIT :1 (unitless)TIFFTAG_SOFTWARE :Trimble Germany GmbHTIFFTAG_XRESOLUTION :1TIFFTAG_YRESOLUTION :1scale_factor :1.0add_offset :0.0_FillValue :0\n\n\nNotice our new dimension time does not have any coordinates associated to it. To add coordinates to this dimensions we use the assign_coords() method for xarray.DataArray.\nIt would be reasonable to use the year of collection of each raster (as a timestamp) as its coordinate on the time dimension. We can see this year in the item’s properties:\n\n# year of collection of an item \nitem = items[0]\nitem.properties['naip:year']\n\n'2020'\n\n\n\n# convert strings to datetime\npd.to_datetime(item.properties['naip:year'])\n\nTimestamp('2020-01-01 00:00:00')\n\n\nTo get this timestamps for each year we can create a list using list comprehension:\n\ntimes = [pd.to_datetime(item.properties['naip:year']) for item in items]\ntimes\n\n[Timestamp('2020-01-01 00:00:00'),\n Timestamp('2018-01-01 00:00:00'),\n Timestamp('2016-01-01 00:00:00')]\n\n\nAnd finally we assign these times as the coordinates and sort by the vlaues of time dimension:\n\nstack = stack.assign_coords(time=times).sortby(\"time\")\nstack\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<xarray.DataArray (time: 3, band: 3, y: 285, x: 486)>\narray([[[[ 54, 49, 52, ..., 96, 96, 122],\n [ 59, 51, 55, ..., 90, 119, 112],\n [ 65, 55, 55, ..., 91, 114, 98],\n ...,\n [ 45, 46, 39, ..., 61, 64, 59],\n [ 57, 64, 36, ..., 63, 55, 53],\n [ 53, 57, 40, ..., 55, 50, 46]],\n\n [[ 48, 47, 49, ..., 88, 92, 120],\n [ 54, 49, 49, ..., 85, 112, 114],\n [ 58, 53, 51, ..., 82, 112, 100],\n ...,\n [ 58, 58, 57, ..., 70, 76, 74],\n [ 73, 70, 53, ..., 76, 70, 66],\n [ 65, 69, 52, ..., 68, 59, 60]],\n\n [[ 52, 52, 53, ..., 85, 99, 119],\n [ 54, 51, 55, ..., 81, 109, 108],\n [ 57, 52, 53, ..., 85, 106, 93],\n ...,\n...\n ...,\n [ 37, 37, 37, ..., 150, 130, 158],\n [ 36, 38, 37, ..., 158, 135, 137],\n [ 37, 38, 38, ..., 151, 145, 116]],\n\n [[113, 106, 94, ..., 136, 142, 147],\n [113, 109, 107, ..., 128, 141, 148],\n [109, 104, 105, ..., 136, 140, 148],\n ...,\n [ 58, 59, 60, ..., 161, 153, 167],\n [ 56, 58, 59, ..., 173, 156, 158],\n [ 58, 58, 59, ..., 166, 157, 137]],\n\n [[ 88, 88, 85, ..., 120, 128, 131],\n [ 87, 86, 84, ..., 113, 127, 133],\n [ 85, 83, 83, ..., 120, 126, 133],\n ...,\n [ 69, 69, 70, ..., 155, 148, 161],\n [ 67, 69, 70, ..., 169, 151, 152],\n [ 69, 70, 68, ..., 166, 156, 135]]]], dtype=uint8)\nCoordinates:\n * band (band) int64 1 2 3\n * x (x) float64 2.383e+05 2.383e+05 ... 2.386e+05 2.386e+05\n * y (y) float64 3.811e+06 3.811e+06 ... 3.811e+06 3.811e+06\n spatial_ref int64 0\n * time (time) datetime64[ns] 2016-01-01 2018-01-01 2020-01-01\nAttributes:\n AREA_OR_POINT: Area\n TIFFTAG_IMAGEDESCRIPTION: OrthoVista\n TIFFTAG_RESOLUTIONUNIT: 1 (unitless)\n TIFFTAG_SOFTWARE: Trimble Germany GmbH\n TIFFTAG_XRESOLUTION: 1\n TIFFTAG_YRESOLUTION: 1\n scale_factor: 1.0\n add_offset: 0.0\n _FillValue: 0xarray.DataArraytime: 3band: 3y: 285x: 48654 49 52 65 56 51 47 42 44 44 ... 91 112 134 125 163 167 166 156 135array([[[[ 54, 49, 52, ..., 96, 96, 122],\n [ 59, 51, 55, ..., 90, 119, 112],\n [ 65, 55, 55, ..., 91, 114, 98],\n ...,\n [ 45, 46, 39, ..., 61, 64, 59],\n [ 57, 64, 36, ..., 63, 55, 53],\n [ 53, 57, 40, ..., 55, 50, 46]],\n\n [[ 48, 47, 49, ..., 88, 92, 120],\n [ 54, 49, 49, ..., 85, 112, 114],\n [ 58, 53, 51, ..., 82, 112, 100],\n ...,\n [ 58, 58, 57, ..., 70, 76, 74],\n [ 73, 70, 53, ..., 76, 70, 66],\n [ 65, 69, 52, ..., 68, 59, 60]],\n\n [[ 52, 52, 53, ..., 85, 99, 119],\n [ 54, 51, 55, ..., 81, 109, 108],\n [ 57, 52, 53, ..., 85, 106, 93],\n ...,\n...\n ...,\n [ 37, 37, 37, ..., 150, 130, 158],\n [ 36, 38, 37, ..., 158, 135, 137],\n [ 37, 38, 38, ..., 151, 145, 116]],\n\n [[113, 106, 94, ..., 136, 142, 147],\n [113, 109, 107, ..., 128, 141, 148],\n [109, 104, 105, ..., 136, 140, 148],\n ...,\n [ 58, 59, 60, ..., 161, 153, 167],\n [ 56, 58, 59, ..., 173, 156, 158],\n [ 58, 58, 59, ..., 166, 157, 137]],\n\n [[ 88, 88, 85, ..., 120, 128, 131],\n [ 87, 86, 84, ..., 113, 127, 133],\n [ 85, 83, 83, ..., 120, 126, 133],\n ...,\n [ 69, 69, 70, ..., 155, 148, 161],\n [ 67, 69, 70, ..., 169, 151, 152],\n [ 69, 70, 68, ..., 166, 156, 135]]]], dtype=uint8)Coordinates: (5)band(band)int641 2 3array([1, 2, 3])x(x)float642.383e+05 2.383e+05 ... 2.386e+05axis :Xlong_name :x coordinate of projectionstandard_name :projection_x_coordinateunits :metrearray([238316.7, 238317.3, 238317.9, ..., 238606.5, 238607.1, 238607.7])y(y)float643.811e+06 3.811e+06 ... 3.811e+06axis :Ylong_name :y coordinate of projectionstandard_name :projection_y_coordinateunits :metrearray([3810885.3, 3810884.7, 3810884.1, ..., 3810716.1, 3810715.5, 3810714.9])spatial_ref()int640crs_wkt :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]semi_major_axis :6378137.0semi_minor_axis :6356752.314140356inverse_flattening :298.257222101reference_ellipsoid_name :GRS 1980longitude_of_prime_meridian :0.0prime_meridian_name :Greenwichgeographic_crs_name :NAD83horizontal_datum_name :North American Datum 1983projected_crs_name :NAD83 / UTM zone 11Ngrid_mapping_name :transverse_mercatorlatitude_of_projection_origin :0.0longitude_of_central_meridian :-117.0false_easting :500000.0false_northing :0.0scale_factor_at_central_meridian :0.9996spatial_ref :PROJCS[\"NAD83 / UTM zone 11N\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-117],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"26911\"]]GeoTransform :238316.4 0.6 0.0 3810885.6 0.0 -0.599999999999672array(0)time(time)datetime64[ns]2016-01-01 2018-01-01 2020-01-01array(['2016-01-01T00:00:00.000000000', '2018-01-01T00:00:00.000000000',\n '2020-01-01T00:00:00.000000000'], dtype='datetime64[ns]')Indexes: (4)bandPandasIndexPandasIndex(Index([1, 2, 3], dtype='int64', name='band'))xPandasIndexPandasIndex(Index([238316.69999999998, 238317.3, 238317.9,\n 238318.5, 238319.09999999998, 238319.69999999998,\n 238320.3, 238320.9, 238321.5,\n 238322.09999999998,\n ...\n 238602.3, 238602.9, 238603.5,\n 238604.09999999998, 238604.69999999998, 238605.3,\n 238605.9, 238606.5, 238607.09999999998,\n 238607.69999999998],\n dtype='float64', name='x', length=486))yPandasIndexPandasIndex(Index([3810885.3000000003, 3810884.7, 3810884.1,\n 3810883.5, 3810882.9000000004, 3810882.3000000003,\n 3810881.7, 3810881.1, 3810880.5,\n 3810879.9000000004,\n ...\n 3810720.3000000003, 3810719.7, 3810719.1,\n 3810718.5, 3810717.9000000004, 3810717.3000000003,\n 3810716.7, 3810716.1, 3810715.5,\n 3810714.9000000004],\n dtype='float64', name='y', length=285))timePandasIndexPandasIndex(DatetimeIndex(['2016-01-01', '2018-01-01', '2020-01-01'], dtype='datetime64[ns]', name='time', freq=None))Attributes: (9)AREA_OR_POINT :AreaTIFFTAG_IMAGEDESCRIPTION :OrthoVistaTIFFTAG_RESOLUTIONUNIT :1 (unitless)TIFFTAG_SOFTWARE :Trimble Germany GmbHTIFFTAG_XRESOLUTION :1TIFFTAG_YRESOLUTION :1scale_factor :1.0add_offset :0.0_FillValue :0" }, { - "objectID": "lectures/lesson-21-contextily-parquet.html#contextily", - "href": "lectures/lesson-21-contextily-parquet.html#contextily", - "title": "24  Parquet and contextily", - "section": "24.4 Contextily", - "text": "24.4 Contextily\nIn this section we will introduce the Python library contextily to add base maps.\nContextily retrieves tile maps from the internet and makes it possible to plot them alongside our vector data.\nExample\nWe want to plot the Santa Barbara county polygon together with a basemap.\n\nsb = counties[counties.NAME == \"Santa Barbara\"]\n\nAlthough contextily’s tiles can be reprojected to match the CRS of the vector data, it can be easier to reproject your data to EPSG 3857 instead. The CRS EPSG 3857 (Spherical Mercator / Web Mercator) is a projected coordinate system used for rendering maps online, including Google Maps and OpenStreetMap among others.\n\n# create axis with plot\nax = (sb.to_crs(epsg=3857)\n .plot(figsize=(7, 7), alpha=0.5, edgecolor=\"k\")\n )\n\n# add basemap from contextily\nctx.add_basemap(ax)\n\n# update axes\nax.set_title(\"Santa Barbara County\", fontdict={\"fontsize\": \"20\"})\nax.set_axis_off()\n\n\n\n\nBy default, contextily uses the OpenStreetMap HOT style. We can change basemaps by updating the source parameter in the add_basemap() function. For example:\n\n# create axis with plot\nax = (sb.to_crs(epsg=3857)\n .plot(figsize=(7, 7), alpha=0.5, edgecolor=\"k\")\n )\n\n# add NatGeo basemap from contextily\nctx.add_basemap(ax, source=ctx.providers.Esri.NatGeoWorldMap)\n\n# update axes\nax.set_title(\"Santa Barbara County\", fontdict={\"fontsize\": \"20\"})\nax.set_axis_off()\n\n\n\n\nChecking ctx.providers we can see the basemaps available:\n\nctx.providers\n\n\n \n \n \n \n xyzservices.Bunch\n 39 items\n \n \n \n \n \n \n OpenStreetMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n Mapnik xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.Mapnik\n \n \n \n urlhttps://tile.openstreetmap.org/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n DE xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.DE\n \n \n \n urlhttps://tile.openstreetmap.de/{z}/{x}/{y}.pngmax_zoom18html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n CH xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.CH\n \n \n \n urlhttps://tile.osm.ch/switzerland/{z}/{x}/{y}.pngmax_zoom18html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsbounds[[45, 5], [48, 11]]\n \n \n \n \n \n \n \n \n \n \n France xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.France\n \n \n \n urlhttps://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.pngmax_zoom20html_attribution© OpenStreetMap France | © OpenStreetMap contributorsattribution(C) OpenStreetMap France | (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n HOT xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.HOT\n \n \n \n urlhttps://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap Franceattribution(C) OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap France\n \n \n \n \n \n \n \n \n \n \n BZH xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.BZH\n \n \n \n urlhttps://tile.openstreetmap.bzh/br/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributors, Tiles courtesy of Breton OpenStreetMap Teamattribution(C) OpenStreetMap contributors, Tiles courtesy of Breton OpenStreetMap Teambounds[[46.2, -5.5], [50, 0.7]]\n \n \n \n \n \n \n \n \n \n \n BlackAndWhite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenStreetMap.BlackAndWhite\n \n \n \n urlhttp://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.pngmax_zoom18attribution(C) OpenStreetMap contributorshtml_attribution© OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n MapTilesAPI xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n OSMEnglish xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMEnglish\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvarianten/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n OSMFrancais xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMFrancais\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvariantfr/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n OSMEspagnol xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTilesAPI.OSMEspagnol\n \n \n \n urlhttps://maptiles.p.rapidapi.com/{variant}/{z}/{x}/{y}.png?rapidapi-key={apikey}html_attribution© MapTiles API, © OpenStreetMap contributorsattribution(C) MapTiles API, (C) OpenStreetMap contributorsvariantes/map/v1apikeymax_zoom19\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenSeaMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenSeaMap\n \n \n \n urlhttps://tiles.openseamap.org/seamark/{z}/{x}/{y}.pnghtml_attributionMap data: © OpenSeaMap contributorsattributionMap data: (C) OpenSeaMap contributors\n \n \n \n \n \n \n \n \n \n \n OPNVKarte xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OPNVKarte\n \n \n \n urlhttps://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.pngmax_zoom18html_attributionMap memomaps.de CC-BY-SA, map data © OpenStreetMap contributorsattributionMap memomaps.de CC-BY-SA, map data (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n OpenTopoMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenTopoMap\n \n \n \n urlhttps://{s}.tile.opentopomap.org/{z}/{x}/{y}.pngmax_zoom17html_attributionMap data: © OpenStreetMap contributors, SRTM | Map style: © OpenTopoMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors, SRTM | Map style: (C) OpenTopoMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n OpenRailwayMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenRailwayMap\n \n \n \n urlhttps://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.pngmax_zoom19html_attributionMap data: © OpenStreetMap contributors | Map style: © OpenRailwayMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) OpenRailwayMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n OpenFireMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenFireMap\n \n \n \n urlhttp://openfiremap.org/hytiles/{z}/{x}/{y}.pngmax_zoom19html_attributionMap data: © OpenStreetMap contributors | Map style: © OpenFireMap (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) OpenFireMap (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n SafeCast xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SafeCast\n \n \n \n urlhttps://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.pngmax_zoom16html_attributionMap data: © OpenStreetMap contributors | Map style: © SafeCast (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) SafeCast (CC-BY-SA)\n \n \n \n \n \n \n \n \n \n \n Stadia xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 14 items\n \n \n \n \n \n \n AlidadeSmooth xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.AlidadeSmooth\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantalidade_smoothextpng\n \n \n \n \n \n \n \n \n \n \n AlidadeSmoothDark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.AlidadeSmoothDark\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantalidade_smooth_darkextpng\n \n \n \n \n \n \n \n \n \n \n OSMBright xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.OSMBright\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantosm_brightextpng\n \n \n \n \n \n \n \n \n \n \n Outdoors xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.Outdoors\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) OpenMapTiles (C) OpenStreetMap contributorsvariantoutdoorsextpng\n \n \n \n \n \n \n \n \n \n \n StamenToner xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenToner\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_tonerextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerBackground xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerBackground\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_backgroundextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLines xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLines\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_linesextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLabels\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_labelsextpng\n \n \n \n \n \n \n \n \n \n \n StamenTonerLite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTonerLite\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom20html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_toner_liteextpng\n \n \n \n \n \n \n \n \n \n \n StamenWatercolor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenWatercolor\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}.{ext}min_zoom1max_zoom16html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_watercolorextjpg\n \n \n \n \n \n \n \n \n \n \n StamenTerrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrain\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrainextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainBackground xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainBackground\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_backgroundextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainLabels\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_labelsextpng\n \n \n \n \n \n \n \n \n \n \n StamenTerrainLines xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Stadia.StamenTerrainLines\n \n \n \n urlhttps://tiles.stadiamaps.com/tiles/{variant}/{z}/{x}/{y}{r}.{ext}min_zoom0max_zoom18html_attribution© Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributorsattribution(C) Stadia Maps (C) Stamen Design (C) OpenMapTiles (C) OpenStreetMap contributorsvariantstamen_terrain_linesextpng\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Thunderforest xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 9 items\n \n \n \n \n \n \n OpenCycleMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.OpenCycleMap\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantcycleapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Transport xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Transport\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvarianttransportapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n TransportDark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.TransportDark\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvarianttransport-darkapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n SpinalMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.SpinalMap\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantspinal-mapapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Landscape xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Landscape\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantlandscapeapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Outdoors xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Outdoors\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantoutdoorsapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Pioneer xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Pioneer\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantpioneerapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n MobileAtlas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.MobileAtlas\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantmobile-atlasapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n Neighbourhood xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Thunderforest.Neighbourhood\n \n \n \n urlhttps://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}html_attribution© Thunderforest, © OpenStreetMap contributorsattribution(C) Thunderforest, (C) OpenStreetMap contributorsvariantneighbourhoodapikeymax_zoom22\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n CyclOSM xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CyclOSM\n \n \n \n urlhttps://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.pngmax_zoom20html_attributionCyclOSM | Map data: © OpenStreetMap contributorsattributionCyclOSM | Map data: (C) OpenStreetMap contributors\n \n \n \n \n \n \n \n \n \n \n Jawg xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 6 items\n \n \n \n \n \n \n Streets xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Streets\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-streetsaccessToken\n \n \n \n \n \n \n \n \n \n \n Terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Terrain\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-terrainaccessToken\n \n \n \n \n \n \n \n \n \n \n Sunny xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Sunny\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-sunnyaccessToken\n \n \n \n \n \n \n \n \n \n \n Dark xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Dark\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-darkaccessToken\n \n \n \n \n \n \n \n \n \n \n Light xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Light\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-lightaccessToken\n \n \n \n \n \n \n \n \n \n \n Matrix xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Jawg.Matrix\n \n \n \n urlhttps://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}html_attribution© JawgMaps © OpenStreetMap contributorsattribution(C) **Jawg** Maps (C) OpenStreetMap contributorsmin_zoom0max_zoom22subdomainsabcdvariantjawg-matrixaccessToken\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n MapBox xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapBox\n \n \n \n urlhttps://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}html_attribution© Mapbox © OpenStreetMap contributors Improve this mapattribution(C) Mapbox (C) OpenStreetMap contributors Improve this maptileSize512max_zoom18zoomOffset-1idmapbox/streets-v11accessToken\n \n \n \n \n \n \n \n \n \n \n MapTiler xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n Streets xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Streets\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantstreetsextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Basic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Basic\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbasicextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Bright xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Bright\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbrightextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Pastel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Pastel\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantpastelextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Positron xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Positron\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantpositronextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Hybrid xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Hybrid\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianthybridextjpgkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Toner xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Toner\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttonerextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Topo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Topo\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttopoextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Voyager xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Voyager\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantvoyagerextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Basic4326 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Basic4326\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantbasic-4326extpngkeytileSize512zoomOffset-1min_zoom0max_zoom21crsEPSG:4326\n \n \n \n \n \n \n \n \n \n \n Outdoor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Outdoor\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantoutdoorextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Topographique xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Topographique\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvarianttopographiqueextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Winter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Winter\n \n \n \n urlhttps://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantwinterextpngkeytileSize512zoomOffset-1min_zoom0max_zoom21\n \n \n \n \n \n \n \n \n \n \n Satellite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Satellite\n \n \n \n urlhttps://api.maptiler.com/tiles/{variant}/{z}/{x}/{y}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantsatellite-v2extjpgkeymin_zoom0max_zoom20\n \n \n \n \n \n \n \n \n \n \n Terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MapTiler.Terrain\n \n \n \n urlhttps://api.maptiler.com/tiles/{variant}/{z}/{x}/{y}.{ext}?key={key}html_attribution© MapTiler © OpenStreetMap contributorsattribution(C) MapTiler (C) OpenStreetMap contributorsvariantterrain-rgbextpngkeymin_zoom0max_zoom12\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n TomTom xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n Basic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Basic\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}variantbasicmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n Hybrid xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Hybrid\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}varianthybridmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n Labels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n TomTom.Labels\n \n \n \n urlhttps://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}variantlabelsmax_zoom22html_attribution© 1992 - 2023 TomTom. attribution(C) 1992 - 2023 TomTom.subdomainsabcdstylemainextpngapikey\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Esri xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n WorldStreetMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldStreetMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Street_Maphtml_attributionTiles © Esri — Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012attributionTiles (C) Esri -- Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012\n \n \n \n \n \n \n \n \n \n \n DeLorme xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.DeLorme\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantSpecialty/DeLorme_World_Base_Maphtml_attributionTiles © Esri — Copyright: ©2012 DeLormeattributionTiles (C) Esri -- Copyright: (C)2012 DeLormemin_zoom1max_zoom11\n \n \n \n \n \n \n \n \n \n \n WorldTopoMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldTopoMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Topo_Maphtml_attributionTiles © 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 CommunityattributionTiles (C) 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\n \n \n \n \n \n \n \n \n \n \n WorldImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldImagery\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Imageryhtml_attributionTiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User CommunityattributionTiles (C) Esri -- Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community\n \n \n \n \n \n \n \n \n \n \n WorldTerrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldTerrain\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Terrain_Basehtml_attributionTiles © Esri — Source: USGS, Esri, TANA, DeLorme, and NPSattributionTiles (C) Esri -- Source: USGS, Esri, TANA, DeLorme, and NPSmax_zoom13\n \n \n \n \n \n \n \n \n \n \n WorldShadedRelief xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldShadedRelief\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Shaded_Reliefhtml_attributionTiles © Esri — Source: EsriattributionTiles (C) Esri -- Source: Esrimax_zoom13\n \n \n \n \n \n \n \n \n \n \n WorldPhysical xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldPhysical\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantWorld_Physical_Maphtml_attributionTiles © Esri — Source: US National Park ServiceattributionTiles (C) Esri -- Source: US National Park Servicemax_zoom8\n \n \n \n \n \n \n \n \n \n \n OceanBasemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.OceanBasemap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantOcean/World_Ocean_Basehtml_attributionTiles © Esri — Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and EsriattributionTiles (C) Esri -- Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esrimax_zoom13\n \n \n \n \n \n \n \n \n \n \n NatGeoWorldMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.NatGeoWorldMap\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantNatGeo_World_Maphtml_attributionTiles © Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPCattributionTiles (C) Esri -- National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPCmax_zoom16\n \n \n \n \n \n \n \n \n \n \n WorldGrayCanvas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.WorldGrayCanvas\n \n \n \n urlhttps://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}variantCanvas/World_Light_Gray_Basehtml_attributionTiles © Esri — Esri, DeLorme, NAVTEQattributionTiles (C) Esri -- Esri, DeLorme, NAVTEQmax_zoom16\n \n \n \n \n \n \n \n \n \n \n ArcticImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticImagery\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Imagery/MapServer/tile/{z}/{y}/{x}variantArctic_Imageryhtml_attributionEarthstar GeographicsattributionEarthstar Geographicsmax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n ArcticOceanBase xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticOceanBase\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Ocean_Base/MapServer/tile/{z}/{y}/{x}variantArctic_Ocean_Basehtml_attributionTiles © 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 CommunityattributionTiles © 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 Communitymax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n ArcticOceanReference xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.ArcticOceanReference\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Arctic_Ocean_Reference/MapServer/tile/{z}/{y}/{x}variantArctic_Ocean_Referencehtml_attributionTiles © 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 CommunityattributionTiles © 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 Communitymax_zoom24crsEPSG:5936bounds[[-2623285.8808999993, -2623285.8808999993], [6623285.8803, 6623285.8803]]\n \n \n \n \n \n \n \n \n \n \n AntarcticImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.AntarcticImagery\n \n \n \n urlhttp://server.arcgisonline.com/ArcGIS/rest/services/Polar/Antarctic_Imagery/MapServer/tile/{z}/{y}/{x}variantAntarctic_Imageryhtml_attributionEarthstar GeographicsattributionEarthstar Geographicsmax_zoom24crsEPSG:3031bounds[[-9913957.327914657, -5730886.461772691], [9913957.327914657, 5730886.461773157]]\n \n \n \n \n \n \n \n \n \n \n AntarcticBasemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Esri.AntarcticBasemap\n \n \n \n urlhttps://tiles.arcgis.com/tiles/C8EMgrsFcRFL6LrL/arcgis/rest/services/Antarctic_Basemap/MapServer/tile/{z}/{y}/{x}variantAntarctic_Basemaphtml_attributionImagery provided by NOAA National Centers for Environmental Information (NCEI); International Bathymetric Chart of the Southern Ocean (IBCSO); General Bathymetric Chart of the Oceans (GEBCO).attributionImagery provided by NOAA National Centers for Environmental Information (NCEI); International Bathymetric Chart of the Southern Ocean (IBCSO); General Bathymetric Chart of the Oceans (GEBCO).max_zoom9crsEPSG:3031bounds[[-4524583.19363305, -4524449.487765655], [4524449.4877656475, 4524583.193633042]]\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenWeatherMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 11 items\n \n \n \n \n \n \n Clouds xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Clouds\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantclouds\n \n \n \n \n \n \n \n \n \n \n CloudsClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.CloudsClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantclouds_cls\n \n \n \n \n \n \n \n \n \n \n Precipitation xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Precipitation\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantprecipitation\n \n \n \n \n \n \n \n \n \n \n PrecipitationClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.PrecipitationClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantprecipitation_cls\n \n \n \n \n \n \n \n \n \n \n Rain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Rain\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantrain\n \n \n \n \n \n \n \n \n \n \n RainClassic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.RainClassic\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantrain_cls\n \n \n \n \n \n \n \n \n \n \n Pressure xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Pressure\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantpressure\n \n \n \n \n \n \n \n \n \n \n PressureContour xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.PressureContour\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantpressure_cntr\n \n \n \n \n \n \n \n \n \n \n Wind xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Wind\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantwind\n \n \n \n \n \n \n \n \n \n \n Temperature xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Temperature\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5varianttemp\n \n \n \n \n \n \n \n \n \n \n Snow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenWeatherMap.Snow\n \n \n \n urlhttp://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}max_zoom19html_attributionMap data © OpenWeatherMapattributionMap data (C) OpenWeatherMapapiKeyopacity0.5variantsnow\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HERE xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 30 items\n \n \n \n \n \n \n normalDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayCustom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayCustom\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.custommax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayGreyMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTransitMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.day.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTraffic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalDayTraffic\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvariantnormal.traffic.daymax_zoom20typetraffictilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightGreyMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.normalNightTransitMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.night.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.reducedDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantreduced.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.reducedNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantreduced.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n basicMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.basicMap\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typebasetilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n mapLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.mapLabels\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantnormal.daymax_zoom20typelabeltilelanguageengformatpngsize256\n \n \n \n \n \n \n \n \n \n \n trafficFlow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.trafficFlow\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvariantnormal.daymax_zoom20typeflowtilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n carnavDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.carnavDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantcarnav.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayTransit\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayGrey\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvarianthybrid.grey.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTraffic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.hybridDayTraffic\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasetrafficvarianthybrid.traffic.daymax_zoom20typetraffictilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.pedestrianDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantpedestrian.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.pedestrianNight\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebasebasevariantpedestrian.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n satelliteDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.satelliteDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantsatellite.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.terrainDay\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantterrain.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HERE.terrainDayMobile\n \n \n \n urlhttps://{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}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapp_idapp_codebaseaerialvariantterrain.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HEREv3 xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 28 items\n \n \n \n \n \n \n normalDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayCustom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayCustom\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.custommax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayGreyMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalDayTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalDayTransitMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.day.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightGreyMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightGreyMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.grey.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n normalNightTransitMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.normalNightTransitMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.night.transit.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.reducedDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantreduced.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n reducedNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.reducedNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantreduced.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n basicMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.basicMap\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typebasetilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n mapLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.mapLabels\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantnormal.daymax_zoom20typelabeltilelanguageengformatpngsize256\n \n \n \n \n \n \n \n \n \n \n trafficFlow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.trafficFlow\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasetrafficvariantnormal.daymax_zoom20typeflowtilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n carnavDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.carnavDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantcarnav.day.greymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayTransit xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayTransit\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.day.transitmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n hybridDayGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.hybridDayGrey\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvarianthybrid.grey.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.pedestrianDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantpedestrian.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n pedestrianNight xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.pedestrianNight\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybasebasevariantpedestrian.nightmax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n satelliteDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.satelliteDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantsatellite.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.terrainDay\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantterrain.daymax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n terrainDayMobile xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HEREv3.terrainDayMobile\n \n \n \n urlhttps://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?apiKey={apiKey}&lg={language}html_attributionMap © 1987-2023 HEREattributionMap (C) 1987-2023 HEREsubdomains1234mapIDnewestapiKeybaseaerialvariantterrain.day.mobilemax_zoom20typemaptilelanguageengformatpng8size256\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n FreeMapSK xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n FreeMapSK\n \n \n \n urlhttps://{s}.freemap.sk/T/{z}/{x}/{y}.jpegmin_zoom8max_zoom16subdomainsabcdbounds[[47.204642, 15.996093], [49.830896, 22.576904]]html_attribution© OpenStreetMap contributors, visualization CC-By-SA 2.0 Freemap.skattribution(C) OpenStreetMap contributors, visualization CC-By-SA 2.0 Freemap.sk\n \n \n \n \n \n \n \n \n \n \n MtbMap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n MtbMap\n \n \n \n urlhttp://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.pnghtml_attribution© OpenStreetMap contributors & USGSattribution(C) OpenStreetMap contributors & USGS\n \n \n \n \n \n \n \n \n \n \n CartoDB xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 10 items\n \n \n \n \n \n \n Positron xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.Positron\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_all\n \n \n \n \n \n \n \n \n \n \n PositronNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.PositronNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_nolabels\n \n \n \n \n \n \n \n \n \n \n PositronOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.PositronOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantlight_only_labels\n \n \n \n \n \n \n \n \n \n \n DarkMatter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatter\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_all\n \n \n \n \n \n \n \n \n \n \n DarkMatterNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatterNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_nolabels\n \n \n \n \n \n \n \n \n \n \n DarkMatterOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.DarkMatterOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantdark_only_labels\n \n \n \n \n \n \n \n \n \n \n Voyager xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.Voyager\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager\n \n \n \n \n \n \n \n \n \n \n VoyagerNoLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerNoLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_nolabels\n \n \n \n \n \n \n \n \n \n \n VoyagerOnlyLabels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerOnlyLabels\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_only_labels\n \n \n \n \n \n \n \n \n \n \n VoyagerLabelsUnder xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n CartoDB.VoyagerLabelsUnder\n \n \n \n urlhttps://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.pnghtml_attribution© OpenStreetMap contributors © CARTOattribution(C) OpenStreetMap contributors (C) CARTOsubdomainsabcdmax_zoom20variantrastertiles/voyager_labels_under\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n HikeBike xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 2 items\n \n \n \n \n \n \n HikeBike xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HikeBike.HikeBike\n \n \n \n urlhttps://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.pngmax_zoom19html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsvarianthikebike\n \n \n \n \n \n \n \n \n \n \n HillShading xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n HikeBike.HillShading\n \n \n \n urlhttps://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.pngmax_zoom15html_attribution© OpenStreetMap contributorsattribution(C) OpenStreetMap contributorsvarianthillshading\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n BasemapAT xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n basemap xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.basemap\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom20html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantgeolandbasemap\n \n \n \n \n \n \n \n \n \n \n grau xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.grau\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapgrau\n \n \n \n \n \n \n \n \n \n \n overlay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.overlay\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatpngbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapoverlay\n \n \n \n \n \n \n \n \n \n \n terrain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.terrain\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypegrauformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapgelaende\n \n \n \n \n \n \n \n \n \n \n surface xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.surface\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypegrauformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmapoberflaeche\n \n \n \n \n \n \n \n \n \n \n highdpi xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.highdpi\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom19html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmaphidpi\n \n \n \n \n \n \n \n \n \n \n orthofoto xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n BasemapAT.orthofoto\n \n \n \n urlhttps://mapsneu.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}max_zoom20html_attributionDatenquelle: basemap.atattributionDatenquelle: basemap.attypenormalformatjpegbounds[[46.35877, 8.782379], [49.037872, 17.189532]]variantbmaporthofoto30cm\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n nlmaps xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n standaard xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.standaard\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantstandaard\n \n \n \n \n \n \n \n \n \n \n pastel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.pastel\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantpastel\n \n \n \n \n \n \n \n \n \n \n grijs xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.grijs\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantgrijs\n \n \n \n \n \n \n \n \n \n \n water xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.water\n \n \n \n urlhttps://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/{variant}/EPSG:3857/{z}/{x}/{y}.pngmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadastervariantwater\n \n \n \n \n \n \n \n \n \n \n luchtfoto xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n nlmaps.luchtfoto\n \n \n \n urlhttps://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpegmin_zoom6max_zoom19bounds[[50.5, 3.25], [54, 7.6]]html_attributionKaartgegevens © KadasterattributionKaartgegevens (C) Kadaster\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n NASAGIBS xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 15 items\n \n \n \n \n \n \n ModisTerraTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraTrueColorCR\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom9formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_CorrectedReflectance_TrueColor\n \n \n \n \n \n \n \n \n \n \n ModisTerraBands367CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraBands367CR\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom9formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_CorrectedReflectance_Bands367\n \n \n \n \n \n \n \n \n \n \n ViirsEarthAtNight2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ViirsEarthAtNight2012\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom8formatjpgtimetilematrixsetGoogleMapsCompatible_LevelvariantVIIRS_CityLights_2012\n \n \n \n \n \n \n \n \n \n \n ModisTerraLSTDay xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraLSTDay\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom7formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Land_Surface_Temp_Dayopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraSnowCover xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraSnowCover\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom8formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_NDSI_Snow_Coveropacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraAOD xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraAOD\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom6formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Aerosolopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraChlorophyll xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraChlorophyll\n \n \n \n urlhttps://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{max_zoom}/{z}/{y}/{x}.{format}html_attributionImagery 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.attributionImagery 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]]min_zoom1max_zoom7formatpngtimetilematrixsetGoogleMapsCompatible_LevelvariantMODIS_Terra_Chlorophyll_Aopacity0.75\n \n \n \n \n \n \n \n \n \n \n ModisTerraBands721CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisTerraBands721CR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_Bands721/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ModisAquaTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisAquaTrueColorCR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Aqua_CorrectedReflectance_TrueColor/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ModisAquaBands721CR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ModisAquaBands721CR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Aqua_CorrectedReflectance_Bands721/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n ViirsTrueColorCR xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ViirsTrueColorCR\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_SNPP_CorrectedReflectance_TrueColor/default/{time}/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpgmax_zoom9attributionImagery 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.html_attributionImagery 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.time\n \n \n \n \n \n \n \n \n \n \n BlueMarble3413 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble3413\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3413/best/BlueMarble_NextGeneration/default/EPSG3413_500m/{z}/{y}/{x}.jpegmax_zoom5attributionImagery 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.html_attributionImagery 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.crsEPSG:3413\n \n \n \n \n \n \n \n \n \n \n BlueMarble3031 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble3031\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3031/best/BlueMarble_NextGeneration/default/EPSG3031_500m/{z}/{y}/{x}.jpegmax_zoom5attributionImagery 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.html_attributionImagery 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.crsEPSG:3031\n \n \n \n \n \n \n \n \n \n \n BlueMarble xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.BlueMarble\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/BlueMarble_NextGeneration/default/EPSG3857_500m/{z}/{y}/{x}.jpegmax_zoom8attributionImagery 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.html_attributionImagery 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.\n \n \n \n \n \n \n \n \n \n \n ASTER_GDEM_Greyscale_Shaded_Relief xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NASAGIBS.ASTER_GDEM_Greyscale_Shaded_Relief\n \n \n \n urlhttps://gibs.earthdata.nasa.gov/wmts/epsg3857/best/ASTER_GDEM_Greyscale_Shaded_Relief/default/GoogleMapsCompatible_Level12/{z}/{y}/{x}.jpgmax_zoom12attributionImagery 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.html_attributionImagery 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.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n NLS xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n NLS\n \n \n \n urlhttps://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpghtml_attributionNational Library of Scotland Historic MapsattributionNational Library of Scotland Historic Mapsbounds[[49.6, -12], [61.7, 3]]min_zoom1max_zoom18subdomains0123statusbroken\n \n \n \n \n \n \n \n \n \n \n JusticeMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 9 items\n \n \n \n \n \n \n income xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.income\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantincomestatusbroken\n \n \n \n \n \n \n \n \n \n \n americanIndian xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.americanIndian\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantindianstatusbroken\n \n \n \n \n \n \n \n \n \n \n asian xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.asian\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantasianstatusbroken\n \n \n \n \n \n \n \n \n \n \n black xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.black\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantblackstatusbroken\n \n \n \n \n \n \n \n \n \n \n hispanic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.hispanic\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]varianthispanicstatusbroken\n \n \n \n \n \n \n \n \n \n \n multi xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.multi\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantmultistatusbroken\n \n \n \n \n \n \n \n \n \n \n nonWhite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.nonWhite\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantnonwhitestatusbroken\n \n \n \n \n \n \n \n \n \n \n white xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.white\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantwhitestatusbroken\n \n \n \n \n \n \n \n \n \n \n plurality xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n JusticeMap.plurality\n \n \n \n urlhttps://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.pnghtml_attributionJustice MapattributionJustice Mapsizecountybounds[[14, -180], [72, -56]]variantpluralstatusbroken\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n GeoportailFrance xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 271 items\n \n \n \n \n \n \n plan xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.plan\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-85.0, -175.0], [85.0, 175.0]]min_zoom0max_zoom19apikeyessentielsformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.PLANIGNV2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n parcels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.parcels\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom19apikeyessentielsformatimage/pngstylenormalvariantCADASTRALPARCELS.PARCELLAIRE_EXPRESSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n orthos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.orthos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom21apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Adminexpress_cog_carto_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Adminexpress_cog_carto_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantADMINEXPRESS-COG-CARTO.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Adminexpress_cog_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Adminexpress_cog_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantADMINEXPRESS-COG.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Limites_administratives_express_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Limites_administratives_express_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyadministratifformatimage/pngstylenormalvariantLIMITES_ADMINISTRATIVES_EXPRESS.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Slopes_Pac xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Slopes_Pac\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5446, -63.1614], [51.0991, 56.0018]]min_zoom0max_zoom15apikeyagricultureformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.SLOPES.PACTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hydrography_Bcae_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hydrography_Bcae_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom17apikeyagricultureformatimage/pngstylenormalvariantHYDROGRAPHY.BCAE.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture_Latest xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture_Latest\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE.LATESTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2007 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2007\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2007TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2008 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2008\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2008TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2009 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2009\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.419, -63.2635], [51.2203, 56.0237]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2009TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom0max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landuse_Agriculture2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landuse_Agriculture2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenormalvariantLANDUSE.AGRICULTURE2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Prairies_Sensibles_Bcae xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Prairies_Sensibles_Bcae\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyagricultureformatimage/pngstylenolegendvariantPRAIRIES.SENSIBLES.BCAETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Contour_Line xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Contour_Line\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom18apikeyaltimetrieformatimage/pngstylenormalvariantELEVATION.CONTOUR.LINETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Elevationgridcoverage_Shadow xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Elevationgridcoverage_Shadow\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4069, -63.187], [50.9218, 55.8884]]min_zoom0max_zoom15apikeyaltimetrieformatimage/pngstyleestompage_grayscalevariantELEVATION.ELEVATIONGRIDCOVERAGE.SHADOWTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Elevationgridcoverage_Threshold xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Elevationgridcoverage_Threshold\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom3max_zoom17apikeyaltimetrieformatimage/pngstyleELEVATION.ELEVATIONGRIDCOVERAGE.THRESHOLDvariantELEVATION.ELEVATIONGRIDCOVERAGE.THRESHOLDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Level0 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Level0\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.51, -63.2529], [51.1388, 55.9472]]min_zoom6max_zoom18apikeyaltimetrieformatimage/pngstylenormalvariantELEVATION.LEVEL0TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevation_Slopes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevation_Slopes\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.5952, -178.206], [50.9308, 167.432]]min_zoom6max_zoom14apikeyaltimetrieformatimage/jpegstylenormalvariantELEVATION.SLOPESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Elevationgridcoverage_Highres_Quality xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Elevationgridcoverage_Highres_Quality\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyaltimetrieformatimage/pngstyleGraphe de source du RGE AltivariantELEVATIONGRIDCOVERAGE.HIGHRES.QUALITYTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Slopes_Mountain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Slopes_Mountain\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5446, -63.1614], [51.0991, 56.0018]]min_zoom0max_zoom17apikeyaltimetrieformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.SLOPES.MOUNTAINTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_1900typemaps xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_1900typemaps\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[48.4726, 1.62941], [49.1548, 3.0]]min_zoom10max_zoom15apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Bonne xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Bonne\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-0.49941, -55.9127], [7.88966, -50.0835]]min_zoom0max_zoom10apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.BONNETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Etatmajor10 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Etatmajor10\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[48.3847, 1.82682], [49.5142, 2.79738]]min_zoom6max_zoom16apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.ETATMAJOR10TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Etatmajor40 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Etatmajor40\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1844, -6.08889], [51.2745, 10.961]]min_zoom6max_zoom15apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.ETATMAJOR40TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Bduni_J1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Bduni_J1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeycartesformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.MAPS.BDUNI.J1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Overview xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Overview\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom1max_zoom8apikeycartesformatimage/jpegstylenormalvariantGEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEWTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Maps_Scan50_1950 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Maps_Scan50_1950\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom3max_zoom15apikeycartesformatimage/jpegstyleSCAN50_1950variantGEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN50.1950TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Terrier_v1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Terrier_v1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2568, 8.36284], [43.1174, 9.75281]]min_zoom6max_zoom18apikeycartesformatimage/pngstylenolegendvariantGEOGRAPHICALGRIDSYSTEMS.TERRIER_V1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystems_Terrier_v2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystems_Terrier_v2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2568, 8.36284], [43.1174, 9.75282]]min_zoom6max_zoom18apikeycartesformatimage/pngstylenolegendvariantGEOGRAPHICALGRIDSYSTEMS.TERRIER_V2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha12_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha12_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA12_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha12_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha12_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA12_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CHA18TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CHA18_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Cha18_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Cha18_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CHA18_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC00R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC00_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC06R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC06R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CLC12RTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC12R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC12_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc12_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc12_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC12_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.4428, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.CLC18TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [47.1747, 55.9259]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.CLC18_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc18_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc18_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC18_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Clc90_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Clc90_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom0max_zoom16apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.CLC90_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.1827, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC00TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC00R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC00_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc00_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc00_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC00_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.1827, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC06TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.2963, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC06RTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC06R_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06r_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06r_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.0278, -5.91689], [51.2963, 11.0883]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC06R_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06_dom xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06_dom\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [16.6077, 55.9362]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - DOMvariantLANDCOVER.GRID.CLC06_DOMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc06_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc06_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom12apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC06_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4825, -61.9063], [51.2963, 55.9362]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land CovervariantLANDCOVER.GRID.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Grid_Clc90_fr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Grid_Clc90_fr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.1779, -5.68494], [51.1827, 10.8556]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - France métropolitainevariantLANDCOVER.GRID.CLC90_FRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Dlt_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Dlt_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - type de forêtsvariantLANDCOVER.HR.DLT.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Dlt_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Dlt_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - type de forêtsvariantLANDCOVER.HR.DLT.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Gra_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Gra_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3925, -61.8133], [51.4949, 55.84]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - prairiesvariantLANDCOVER.HR.GRA.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Imd_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Imd_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5758, -62.3609], [51.4952, 56.1791]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux d'imperméabilisation des solsvariantLANDCOVER.HR.IMD.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Imd_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Imd_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.5758, -62.3609], [51.4952, 56.1791]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux d'imperméabilisation des solsvariantLANDCOVER.HR.IMD.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Tcd_Clc12 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Tcd_Clc12\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux de couvert arborévariantLANDCOVER.HR.TCD.CLC12TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Tcd_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Tcd_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - taux de couvert arborévariantLANDCOVER.HR.TCD.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Hr_Waw_Clc15 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Hr_Waw_Clc15\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.572, -62.3602], [51.4949, 55.8441]]min_zoom0max_zoom13apikeyclcformatimage/pngstyleCORINE Land Cover - HR - zones humides et surfaces en eaux permanentesvariantLANDCOVER.HR.WAW.CLC15TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Areamanagement_Zfu xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Areamanagement_Zfu\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstylenormalvariantAREAMANAGEMENT.ZFUTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Areamanagement_Zus xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Areamanagement_Zus\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstylenormalvariantAREAMANAGEMENT.ZUSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Communes_Prioritydisctrict xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Communes_Prioritydisctrict\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeyeconomieformatimage/pngstylenormalvariantCOMMUNES.PRIORITYDISCTRICTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Dreal_Zonage_pinel xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Dreal_Zonage_pinel\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[47.2719, -5.15012], [48.9064, -1.00687]]min_zoom6max_zoom18apikeyeconomieformatimage/pngstylenormalvariantDREAL.ZONAGE_PINELTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Enfants_0_17_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Enfants_0_17_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.ENFANTS.0.17.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Logements_Surface_Moyenne_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Logements_Surface_Moyenne_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.LOGEMENTS.SURFACE.MOYENNE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Niveau_De_Vie_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Niveau_De_Vie_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.NIVEAU.DE.VIE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Familles_Monoparentales_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Familles_Monoparentales_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.FAMILLES.MONOPARENTALES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_25_39_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_25_39_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.25.39.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_40_54_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_40_54_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.40.54.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Individus_55_64_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Individus_55_64_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.INDIVIDUS.55.64.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Apres_1990_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Apres_1990_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.APRES.1990.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Avant_1945_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Avant_1945_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.AVANT.1945.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Collectifs_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Collectifs_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.COLLECTIFS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Construits_1945_1970_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Construits_1945_1970_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.CONSTRUITS.1945.1970.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Construits_1970_1990_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Construits_1970_1990_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.CONSTRUITS.1970.1990.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Logements_Sociaux_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Logements_Sociaux_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.LOGEMENTS.SOCIAUX.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_1_Personne_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_1_Personne_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.1.PERSONNE.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_5_Personnes_Ouplus_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_5_Personnes_Ouplus_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.5.PERSONNES.OUPLUS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Maison_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Maison_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.MAISON.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Pauvres_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Pauvres_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.PAUVRES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Menages_Proprietaires_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Menages_Proprietaires_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.MENAGES.PROPRIETAIRES.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Part_Plus_65_Ans_Secret xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Part_Plus_65_Ans_Secret\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.PART.PLUS.65.ANS.SECRETTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Insee_Filosofi_Population xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Insee_Filosofi_Population\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyeconomieformatimage/pngstyleINSEEvariantINSEE.FILOSOFI.POPULATIONTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Debroussaillement xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Debroussaillement\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom18apikeyenvironnementformatimage/pngstylenolegendvariantDEBROUSSAILLEMENTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Forets_Publiques xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Forets_Publiques\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom3max_zoom16apikeyenvironnementformatimage/pngstyleFORETS PUBLIQUES ONFvariantFORETS.PUBLIQUESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalgridsystem_Dfci xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalgridsystem_Dfci\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantGEOGRAPHICALGRIDSYSTEM.DFCITileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestareas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestareas\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTAREASTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestinventory_V1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestinventory_V1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTINVENTORY.V1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Forestinventory_V2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Forestinventory_V2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.FORESTINVENTORY.V2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Sylvoecoregions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Sylvoecoregions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.SYLVOECOREGIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Landcover_Sylvoecoregions_Alluvium xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Landcover_Sylvoecoregions_Alluvium\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantLANDCOVER.SYLVOECOREGIONS.ALLUVIUMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Apb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Apb\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APBTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Apg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Apg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Aphn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Aphn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.APHNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Aplg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Aplg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenolegendvariantPROTECTEDAREAS.APLGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Bios xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Bios\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.BIOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Gp xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Gp\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.GPTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Inpg xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Inpg\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.INPGTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Cdl_Parcels xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Cdl_Parcels\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CDL.PARCELSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Cdl_Perimeter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Cdl_Perimeter\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CDL.PERIMETERTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Conservatoires xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Conservatoires\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.CONSERVATOIRESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Mnhn_Rn_Perimeter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Mnhn_Rn_Perimeter\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom0max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.MNHN.RN.PERIMETERTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pnm xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pnm\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNMTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Pnr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Pnr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.PNRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Prsf xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Prsf\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeyenvironnementformatimage/pngstylePOINT RENCONTRE SECOURS FORETvariantPROTECTEDAREAS.PRSFTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Ramsar xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Ramsar\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RAMSARTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rb\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RBTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Ripn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Ripn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RIPNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom0max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rnc xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rnc\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNCTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Rncf xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Rncf\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.RNCFTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Sic xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Sic\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.SICTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff1 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff1\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF1TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff1_Sea xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff1_Sea\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF1.SEATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff2 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff2\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF2TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Znieff2_Sea xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Znieff2_Sea\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZNIEFF2.SEATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Zpr xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Zpr\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-53.6279, -63.3725], [51.3121, 82.645]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenolegendvariantPROTECTEDAREAS.ZPRTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedareas_Zps xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedareas_Zps\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDAREAS.ZPSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Protectedsites_Mnhn_Reserves_regionales xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Protectedsites_Mnhn_Reserves_regionales\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom16apikeyenvironnementformatimage/pngstylenormalvariantPROTECTEDSITES.MNHN.RESERVES-REGIONALESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.CONSTRUCTIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Constructions_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Constructions_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.CONSTRUCTIONS.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.COUVERTURETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.COUVERTURE.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Couverture_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Couverture_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.COUVERTURE.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGE.2002TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.366, -5.13902], [51.089, 9.55982]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenormalvariantOCSGE.USAGE.2014TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[14.2395, -61.6644], [51.0991, 9.57054]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Usage_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Usage_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.3043, -0.291052], [44.0864, 1.2122]]min_zoom6max_zoom16apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.USAGE.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Visu_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Visu_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.2815, -0.318517], [44.0543, 1.22575]]min_zoom6max_zoom18apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.VISU.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Ocsge_Visu_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Ocsge_Visu_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.2815, -0.321664], [44.1082, 1.22575]]min_zoom6max_zoom18apikeyocsgeformatimage/pngstylenolegendvariantOCSGE.VISU.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hr_Orthoimagery_Orthophotos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hr_Orthoimagery_Orthophotos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [51.1124, 55.8464]]min_zoom6max_zoom19apikeyorthoformatimage/jpegstylenormalvariantHR.ORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophos_Restrictedareas xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophos_Restrictedareas\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.9723, -178.309], [51.3121, 168.298]]min_zoom6max_zoom16apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOS.RESTRICTEDAREASTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Bdortho xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Bdortho\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-22.7643, -178.187], [51.1124, 168.19]]min_zoom6max_zoom18apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.BDORTHOTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Coast2000 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Coast2000\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.301, -5.21565], [51.1233, 2.60783]]min_zoom6max_zoom18apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.COAST2000TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ilesdunord xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ilesdunord\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[17.8626, -63.1986], [18.1701, -62.7828]]min_zoom0max_zoom19apikeyorthoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ILESDUNORDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -62.9717], [51.1124, 55.8464]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRCTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2023 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2023\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2023TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Pcrs_Lamb93 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Pcrs_Lamb93\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.6976, -3.80779], [48.8107, 6.92319]]min_zoom6max_zoom21apikeyorthoformatimage/jpegstylenormalvariantPCRS.LAMB93TileMatrixSetLAMB93_5cm_EPSGstatusbroken\n \n \n \n \n \n \n \n \n \n \n Thr_Orthoimagery_Orthophotos xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Thr_Orthoimagery_Orthophotos\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.4378, -6.92466], [51.9098, 11.4965]]min_zoom6max_zoom21apikeyorthoformatimage/jpegstylenormalvariantTHR.ORTHOIMAGERY.ORTHOPHOTOSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_1950_1965 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_1950_1965\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -67.7214], [51.0945, 55.8464]]min_zoom3max_zoom18apikeyorthohistoformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.1950-1965TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_1980_1995 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_1980_1995\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -2.37153], [49.7785, 9.67536]]min_zoom3max_zoom18apikeyorthohistoformatimage/pngstyleBDORTHOHISTORIQUEvariantORTHOIMAGERY.ORTHOPHOTOS.1980-1995TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_express_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_express_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -62.9717], [51.1124, 55.8464]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC-EXPRESS.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.5538, -3.74871], [50.3767, 7.17132]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.1508, -2.37153], [49.6341, 7.22637]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.20863], [51.0945, 8.25674]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3215, -3.74871], [50.1839, 9.66314]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -0.185295], [46.4137, 7.74363]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.19371], [51.1124, 8.25765]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -3.74871], [50.1928, 9.66314]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Irc_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Irc_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -2.68142], [49.4512, 7.74363]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.IRC.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_asp_pac2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_asp_pac2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-ASP_PAC2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom20apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Ortho_express_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Ortho_express_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [51.1124, 55.8464]]min_zoom6max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.ORTHO-EXPRESS.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Socle_asp_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Socle_asp_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.SOCLE-ASP.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos_Urgence_Alex xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos_Urgence_Alex\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[43.8095, 7.07917], [44.1903, 7.64199]]min_zoom6max_zoom20apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS.URGENCE.ALEXTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2000 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2000\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2000TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2000_2005 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2000_2005\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [64.0698, 55.8561]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2000-2005TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2001 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2001\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[4.47153, -61.2472], [50.3765, 7.23234]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2001TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2002 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2002\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[4.49867, -61.2472], [50.3765, 9.68861]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2002TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2003 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2003\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2003TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2004 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2004\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2004TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2005 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2005\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2005TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2006 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2006\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2006TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2006_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2006_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2006-2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2007 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2007\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2007TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2008 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2008\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.091, 55.8561]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2008TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2009 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2009\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2009TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2011_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2011_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -178.187], [51.0945, 55.8561]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2011-2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1607], [50.3856, 55.8464]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3163, -5.20863], [51.1124, 8.25765]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3125, -3.74871], [50.1928, 9.66314]]min_zoom6max_zoom18apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Orthophotos2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Orthophotos2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.9454, -2.68142], [49.4512, 7.74363]]min_zoom6max_zoom19apikeyorthohistoformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHOPHOTOS2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2012 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2012\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3539, -53.2686], [50.6037, 55.5544]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2012TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2013TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.32, -54.1373], [50.6549, 55.8441]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4013, -63.1796], [51.1117, 55.8465]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4094, -63.1702], [51.0841, 55.8649]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4094, -63.1702], [51.1117, 55.8649]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-13.0169, -63.1724], [51.1117, 45.3136]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom19apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Pleiades_2022 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Pleiades_2022\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.3733, -67.7132], [69.3108, 55.7216]]min_zoom0max_zoom18apikeysatelliteformatimage/pngstylenormalvariantORTHOIMAGERY.ORTHO-SAT.PLEIADES.2022TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Rapideye_2010 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Rapideye_2010\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2014, -5.80725], [50.9218, 10.961]]min_zoom0max_zoom15apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.RAPIDEYE.2010TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Rapideye_2011 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Rapideye_2011\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.0227, -5.80725], [51.1752, 10.961]]min_zoom0max_zoom15apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.RAPIDEYE.2011TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2013 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2013\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[44.8809, 0.563585], [50.3879, 4.29191]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2013TileMatrixSetPMstatusbroken\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2014 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2014\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-75.0, -179.5], [75.0, 179.5]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2014TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2015 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2015\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.8141], [51.106, 55.856]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2015TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2016 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2016\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.85], [51.1123, 55.8562]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2016TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2017 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2017\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4104, -61.8534], [51.1123, 55.8562]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2017TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2018 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2018\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2018TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2019 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2019\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2019TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2020 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2020\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2020TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Orthoimagery_Ortho_sat_Spot_2021 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Orthoimagery_Ortho_sat_Spot_2021\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.2593, -5.57103], [51.1123, 10.7394]]min_zoom0max_zoom17apikeysatelliteformatimage/jpegstylenormalvariantORTHOIMAGERY.ORTHO-SAT.SPOT.2021TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Bdcarto_etat_major_Niveau3 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Bdcarto_etat_major_Niveau3\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[42.3263, -5.15012], [51.0938, 7.19384]]min_zoom6max_zoom16apikeysolformatimage/pngstylenormalvariantBDCARTO_ETAT-MAJOR.NIVEAU3TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Bdcarto_etat_major_Niveau4 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Bdcarto_etat_major_Niveau4\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[41.3252, -5.15047], [51.0991, 9.57054]]min_zoom6max_zoom16apikeysolformatimage/pngstylenormalvariantBDCARTO_ETAT-MAJOR.NIVEAU4TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Buildings_Buildings xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Buildings_Buildings\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantBUILDINGS.BUILDINGSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Geographicalnames_Names xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Geographicalnames_Names\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantGEOGRAPHICALNAMES.NAMESTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hydrography_Hydrography xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hydrography_Hydrography\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantHYDROGRAPHY.HYDROGRAPHYTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetwork_Commontransportelements_Markerpost xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetwork_Commontransportelements_Markerpost\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom10max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORK.COMMONTRANSPORTELEMENTS.MARKERPOSTTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Railways xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Railways\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.RAILWAYSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Roads xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Roads\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.ROADSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Runways xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Runways\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4969, -63.9692], [71.5841, 55.9644]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantTRANSPORTNETWORKS.RUNWAYSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Utilityandgovernmentalservices_All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Utilityandgovernmentalservices_All\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [71.5841, 55.9259]]min_zoom6max_zoom18apikeytopographieformatimage/pngstylenormalvariantUTILITYANDGOVERNMENTALSERVICES.ALLTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Hedge_Hedge xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Hedge_Hedge\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom7max_zoom18apikeytopographieformatimage/pngstylenormalvarianthedge.hedgeTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_1te xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_1te\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom4max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER 1TEvariantSECUROUTE.TE.1TETileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_2te48 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_2te48\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER 2TE48variantSECUROUTE.TE.2TE48TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_All\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleTOUS LES FRANCHISSEMENTSvariantSECUROUTE.TE.ALLTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Oa xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Oa\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleAUTRES FRANCHISSEMENTSvariantSECUROUTE.TE.OATileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Pn xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Pn\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleFRANCHISSEMENTS PASSAGE A NIVEAUvariantSECUROUTE.TE.PNTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Pnd xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Pnd\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleFRANCHISSEMENTS PASSAGE A NIVEAU DIFFICILEvariantSECUROUTE.TE.PNDTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te120 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te120\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE120variantSECUROUTE.TE.TE120TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te72 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te72\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE72variantSECUROUTE.TE.TE72TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Securoute_Te_Te94 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Securoute_Te_Te94\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom6max_zoom17apikeytransportsformatimage/pngstyleRESEAU ROUTIER TE94variantSECUROUTE.TE.TE94TileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transportnetworks_Roads_Direction xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transportnetworks_Roads_Direction\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[-21.4756, -63.3725], [51.3121, 55.9259]]min_zoom15max_zoom18apikeytransportsformatimage/pngstylenormalvariantTRANSPORTNETWORKS.ROADS.DIRECTIONTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n Transports_Drones_Restrictions xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n GeoportailFrance.Transports_Drones_Restrictions\n \n \n \n urlhttps://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET={TileMatrixSet}&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}html_attributionGeoportail FranceattributionGeoportail Francebounds[[40.576, -9.88147], [51.4428, 11.6781]]min_zoom3max_zoom15apikeytransportsformatimage/pngstylenormalvariantTRANSPORTS.DRONES.RESTRICTIONSTileMatrixSetPM\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OneMapSG xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n Default xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Default\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantDefaultmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Night xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Night\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantNightmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Original xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Original\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantOriginalmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n Grey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.Grey\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantGreymin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n LandLot xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OneMapSG.LandLot\n \n \n \n urlhttps://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.pngvariantLandLotmin_zoom11max_zoom18bounds[[1.56073, 104.11475], [1.16, 103.502]]html_attribution New OneMap | Map data © contributors, Singapore Land Authorityattribution![](https://docs.onemap.sg/maps/images/oneMap64-01.png) New OneMap | Map data (C) contributors, Singapore Land Authority\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n USGS xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 3 items\n \n \n \n \n \n \n USTopo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USTopo\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n USImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USImagery\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n USImageryTopo xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n USGS.USImageryTopo\n \n \n \n urlhttps://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}max_zoom20html_attributionTiles courtesy of the U.S. Geological SurveyattributionTiles courtesy of the U.S. Geological Survey\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n WaymarkedTrails xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 6 items\n \n \n \n \n \n \n hiking xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.hiking\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)varianthiking\n \n \n \n \n \n \n \n \n \n \n cycling xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.cycling\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantcycling\n \n \n \n \n \n \n \n \n \n \n mtb xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.mtb\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantmtb\n \n \n \n \n \n \n \n \n \n \n slopes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.slopes\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantslopes\n \n \n \n \n \n \n \n \n \n \n riding xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.riding\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantriding\n \n \n \n \n \n \n \n \n \n \n skating xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n WaymarkedTrails.skating\n \n \n \n urlhttps://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.pngmax_zoom18html_attributionMap data: © OpenStreetMap contributors | Map style: © waymarkedtrails.org (CC-BY-SA)attributionMap data: (C) OpenStreetMap contributors | Map style: (C) waymarkedtrails.org (CC-BY-SA)variantskating\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OpenAIP xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenAIP\n \n \n \n urlhttps://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}html_attributionopenAIP Data (CC-BY-NC-SA)attributionopenAIP Data (CC-BY-NC-SA)extpngmin_zoom4max_zoom14tmsTruedetectRetinaTruesubdomains12\n \n \n \n \n \n \n \n \n \n \n OpenSnowMap xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 1 items\n \n \n \n \n \n \n pistes xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OpenSnowMap.pistes\n \n \n \n urlhttps://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.pngmin_zoom9max_zoom18html_attributionMap data: © OpenStreetMap contributors & ODbL, © www.opensnowmap.org CC-BY-SAattributionMap data: (C) OpenStreetMap contributors & ODbL, (C) www.opensnowmap.org CC-BY-SAvariantpistes\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n AzureMaps xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n MicrosoftImagery xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftImagery\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.imagerysubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseDarkGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseDarkGrey\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.darkgreysubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseRoad xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseRoad\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.roadsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftBaseHybridRoad xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftBaseHybridRoad\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.base.hybrid.roadsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftTerraMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftTerraMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile for details.apiVersion2.0variantmicrosoft.terra.mainsubscriptionKeylanguageen-US\n \n \n \n \n \n \n \n \n \n \n MicrosoftWeatherInfraredMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftWeatherInfraredMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&timeStamp={timeStamp}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.apiVersion2.0variantmicrosoft.weather.infrared.mainsubscriptionKeylanguageen-UStimeStamp2021-05-08T09:03:00Z\n \n \n \n \n \n \n \n \n \n \n MicrosoftWeatherRadarMain xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n AzureMaps.MicrosoftWeatherRadarMain\n \n \n \n urlhttps://atlas.microsoft.com/map/tile?api-version={apiVersion}&tilesetId={variant}&x={x}&y={y}&zoom={z}&timeStamp={timeStamp}&language={language}&subscription-key={subscriptionKey}html_attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.attributionSee https://docs.microsoft.com/en-us/rest/api/maps/render-v2/get-map-tile#uri-parameters for details.apiVersion2.0variantmicrosoft.weather.radar.mainsubscriptionKeylanguageen-UStimeStamp2021-05-08T09:03:00Z\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n SwissFederalGeoportal xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 4 items\n \n \n \n \n \n \n NationalMapColor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.NationalMapColor\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18\n \n \n \n \n \n \n \n \n \n \n NationalMapGrey xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.NationalMapGrey\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-grau/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18\n \n \n \n \n \n \n \n \n \n \n SWISSIMAGE xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.SWISSIMAGE\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom19\n \n \n \n \n \n \n \n \n \n \n JourneyThroughTime xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n SwissFederalGeoportal.JourneyThroughTime\n \n \n \n urlhttps://wmts.geo.admin.ch/1.0.0/ch.swisstopo.zeitreihen/default/{time}/3857/{z}/{x}/{y}.pnghtml_attributionswisstopoattribution© swisstopobounds[[45.398181, 5.140242], [48.230651, 11.47757]]min_zoom2max_zoom18time18641231\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Gaode xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 2 items\n \n \n \n \n \n \n Normal xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Gaode.Normal\n \n \n \n urlhttp://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}max_zoom19attribution© Gaode.comhtml_attribution© Gaode.com\n \n \n \n \n \n \n \n \n \n \n Satellite xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Gaode.Satellite\n \n \n \n urlhttp://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}max_zoom19attribution© Gaode.comhtml_attribution© Gaode.com\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Strava xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 5 items\n \n \n \n \n \n \n All xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.All\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/all/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Ride xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Ride\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/ride/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Run xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Run\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/run/bluered/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Water xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Water\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/water/blue/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n Winter xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n Strava.Winter\n \n \n \n urlhttps://heatmap-external-a.strava.com/tiles/winter/hot/{z}/{x}/{y}.pngmax_zoom15attributionMap tiles by Strava 2021html_attributionMap tiles by Strava 2021\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n OrdnanceSurvey xyzservices.Bunch\n \n \n \n \n \n \n xyzservices.Bunch\n 7 items\n \n \n \n \n \n \n Road xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Road\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Road_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Road_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Road_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Road_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Outdoor xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Outdoor\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Outdoor_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Outdoor_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Outdoor_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Outdoor_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Light xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Light\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Light_3857/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keymin_zoom7max_zoom16max_zoom_premium20bounds[[49.766807, -9.496386], [61.465189, 3.634745]]\n \n \n \n \n \n \n \n \n \n \n Light_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Light_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Light_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom9max_zoom_premium13bounds[[0, 0], [700000, 1300000]]\n \n \n \n \n \n \n \n \n \n \n Leisure_27700 xyzservices.TileProvider\n \n \n \n \n \n \n xyzservices.TileProvider\n OrdnanceSurvey.Leisure_27700\n \n \n \n urlhttps://api.os.uk/maps/raster/v1/zxy/Leisure_27700/{z}/{x}/{y}.png?key={key}html_attributionContains OS data © Crown copyright and database right 2023attributionContains OS data (C) Crown copyright and database right 2023keycrsEPSG:27700min_zoom0max_zoom5max_zoom_premium9bounds[[0, 0], [700000, 1300000]]" - }, - { - "objectID": "lectures/lesson-21-contextily-parquet.html#acknowledgements", - "href": "lectures/lesson-21-contextily-parquet.html#acknowledgements", - "title": "24  Parquet and contextily", - "section": "24.5 Acknowledgements", - "text": "24.5 Acknowledgements\nThis lesson was adapted from teh MPC’s notebook Accessing US Census data with the Planetary Compyter STAC API." + "objectID": "lectures/lesson-22-make_a_gif.html#gif", + "href": "lectures/lesson-22-make_a_gif.html#gif", + "title": "25  Make a GIF", + "section": "25.4 GIF", + "text": "25.4 GIF\nGetting the rasters in the right format is the trickiest part of creating the GIF! Can you see the resotration areas?\n\n# create gif\n# fps = frames per second\n# adding to=\"campus_point.gif\" will save GIF\ngif(stack, fps = 0.5)" }, { "objectID": "appendices/set-pat.html#context", diff --git a/images/campus_point.gif b/images/campus_point.gif new file mode 100644 index 0000000..ad510fc Binary files /dev/null and b/images/campus_point.gif differ diff --git a/lectures/lesson-22-make_a_gif.qmd b/lectures/lesson-22-make_a_gif.qmd new file mode 100644 index 0000000..a1e6971 --- /dev/null +++ b/lectures/lesson-22-make_a_gif.qmd @@ -0,0 +1,182 @@ +--- +jupyter: mpc-env-kernel +--- + +# Make a GIF + +In this lesson we will use NAIP data to create a GIF showing vegetation change over Campus Point at UCSB. + + +UCSB's [Cheadle Center for Biodiveristy and Ecologicla Restoration (CCBER)](https://www.ccber.ucsb.edu) manages multiple ecological restoration sites around the UCSB campus to protect and enhance native biodiveristy and preserve ecological function within urbanized areas. +Campus Point is one of the areas managed by CCBER and has undergone multiple active restoration projects since 2005. +In particular, Campus Point is greatly covered by iceplant (*Carpobrotus edulis*), an inviasive succulent that competes with native plants by forming thick mats that cover large areas. +In the last few years CCBER has removed iceplant in Campus Point to replace it with native vegetation. + + + +We will create a gif using NAIP imagery from 2016, 2018, and 2020 showing the vegetation change in this area. + +First, let's import the necessary libraries and functions. +To create the GIF we'll be using the [`geogif` library](https://geogif.readthedocs.io/en/latest/), which makes it simple to create gifs from `xarray.DataArrays`. + + +```{python} +import pandas as pd +import geopandas as gpd +import matplotlib.pyplot as plt + +import xarray as xr +import rioxarray as rioxr +from shapely.geometry import box + +import pystac_client +import planetary_computer + +from geogif import gif # to create gif +``` + +## Data search + +To search for the NAIP data in the Microsoft Planetary Computer Catalog we will use a list of coordinates defining a bounding box around campus point. +We will also limit our search for items since 2016, when NAIP data resolution increased from 1m to 0.6m per pixel. + +```{python} +# open catalog +catalog = pystac_client.Client.open( + "https://planetarycomputer.microsoft.com/api/stac/v1", + modifier=planetary_computer.sign_inplace, +) + +# coords defining bbox around campus point +bbox = [-119.84682486219316, 34.404860394049024, -119.84370917948988, 34.40632764289684] + +# search +search = catalog.search( + collections=["naip"], + bbox=bbox, + datetime='2016/2023' +) + +# get items from search +items = search.item_collection() +print(f'There are {len(items)} items in the search.') +``` + +## Prepare single raster + +The NAIP data is available at the item's `'image'` asset: + +```{python} +item = items[0] +sb = rioxr.open_rasterio(item.assets['image'].href) +sb +``` + +This rater is way bigger than our area of interest. +To verify this and then clip the raster, let's make a `gpd.GeoDataFrame` from the `bbox` coordinates: + +```{python} +# bounding box as geodataframe +box_df = gpd.GeoDataFrame(geometry=[box(*bbox)], + crs='epsg:4326') +``` + +```{python} +# plot bounding box and raster extents +fig, ax = plt.subplots() +gpd.GeoDataFrame(geometry=[box(*sb.rio.bounds())], + crs=sb.rio.crs).plot(ax=ax) +box_df.to_crs(sb.rio.crs).plot(ax=ax, color='red') +``` + +```{python} +# clip raster to bounding box +sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds) +``` + +NAIP data has four bands, Red, Green, Blue, and Near-Infrared. +To make it easier to plot RGB images, let's select only the first three bands. + +```{python} +# select red, green, blue bands and plot true color image. +sb = sb.sel(band=[1,2,3]) +sb.plot.imshow() +``` + +## Stack rasters + +Our goal is to use the `gif` function to create a gif with the three NAIP images over campus point. + +The [`gif` documentation](https://geogif.readthedocs.io/en/latest/api.html) indicates that to do so we will need to put our images/rasters in a single `xarray.DataArray` with dimensions `(time, band, y, x)`. +A single raster has the following dimensions: + +```{python} +print('dimensions: ', sb.dims) +print('shape: ', sb.shape) +``` + +To create a single `xarray.DataArray` with a time dimensions we will stack the three rasters we obtained in our search. +We use a `for` loop to repeat the previous steps for each item in the search (access the item's `image` asset, clip, and select bands) and store each processed raster in a list `rasters`: + +```{python} +# create a list with rasters +rasters = [] +for item in items: + sb = rioxr.open_rasterio(item.assets['image'].href) + sb = sb.rio.clip_box(*box_df.to_crs(sb.rio.crs).total_bounds) + sb = sb.sel(band=[1,2,3]) + rasters.append(sb) +``` + +Next we use the `xarray.concat()` function to concatenate these rasters along a new dimensions we will call `time`: + +```{python} +# concatenate rasters into single xarray.DataArray +stack = xr.concat(rasters, dim='time') +stack +``` + +Notice our new dimension `time` does not have any coordinates associated to it. +To add coordinates to this dimensions we use the [`assign_coords()`](https://docs.xarray.dev/en/stable/generated/xarray.DataArray.assign_coords.html) method for `xarray.DataArray`. + +It would be reasonable to use the year of collection of each raster (as a `timestamp`) as its coordinate on the `time` dimension. +We can see this year in the item's properties: + +```{python} +# year of collection of an item +item = items[0] +item.properties['naip:year'] +``` + +```{python} +# convert strings to datetime +pd.to_datetime(item.properties['naip:year']) +``` + +To get this timestamps for each year we can create a list using *list comprehension*: + +```{python} +times = [pd.to_datetime(item.properties['naip:year']) for item in items] +times +``` + +And finally we assign these times as the coordinates and sort by the vlaues of time dimension: + +```{python} +stack = stack.assign_coords(time=times).sortby("time") +stack +``` + +## GIF + +Getting the rasters in the right format is the trickiest part of creating the GIF! Can you see the resotration areas? + +```{python} +#| eval: false +# create gif +# fps = frames per second +# adding to="campus_point.gif" will save GIF +gif(stack, fps = 0.5) +``` + +![](/images/campus_point.gif) \ No newline at end of file