API Reference

papermap.papermap Module

papermap.papermap.NAME: str = 'papermap'

Name of the application.

papermap.papermap.PAPER_SIZE_TO_DIMENSIONS_MAP: dict[str, tuple[int, int]] = {'a0': (841, 1189), 'a1': (594, 841), 'a2': (420, 594), 'a3': (297, 420), 'a4': (210, 297), 'a5': (148, 210), 'a6': (105, 148), 'a7': (74, 105), 'legal': (216, 356), 'letter': (216, 279)}

Map of paper size names to dimensions (width, height) in mm.

papermap.papermap.PAPER_SIZES = ('a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'letter', 'legal')

Tuple of available paper size names.

papermap.papermap.DEFAULT_PAPER_SIZE: str = 'a4'

Default paper size.

papermap.papermap.DEFAULT_SCALE: int = 25000

Default map scale.

papermap.papermap.DEFAULT_MARGIN: int = 10

Default margin in mm.

papermap.papermap.DEFAULT_BACKGROUND_COLOR: str = '#fff'

Default background color.

papermap.papermap.DEFAULT_GRID_SIZE: int = 1000

Default grid size in meters.

papermap.papermap.DEFAULT_AUTO_SCALE_PADDING: float = 5.0

Default padding (in mm, per side) between features and the image edge when auto_scale is enabled.

exception papermap.papermap.ScaleOutOfBoundsError

Bases: ValueError

Raised when the resolved zoom level is outside the tile provider’s bounds.

papermap.papermap.COMMON_SCALES: tuple[int, ...] = (500, 1000, 2500, 5000, 10000, 25000, 50000, 100000, 250000, 500000, 1000000, 2500000, 5000000, 10000000, 25000000, 50000000)

Common cartographic scales that auto_scale snaps up to.

class papermap.papermap.PaperMap(lat, lon, *, tile_provider_key='openstreetmap', api_key=None, paper_size='a4', use_landscape=False, margin_top=10, margin_right=10, margin_bottom=10, margin_left=10, scale=25000, dpi=300, background_color='#fff', add_grid=False, grid_size=1000, strict_download=False)

Bases: object

A paper map.

>>> from papermap import PaperMap
>>> pm = PaperMap(13.75889, 100.49722)
>>> pm.render()
>>> pm.save("Bangkok.pdf")
Parameters:
  • lat (float) – Latitude of the center of the map.

  • lon (float) – Longitude of the center of the map

  • tile_provider_key (dataclasses.InitVar[str]) – Tile provider key to serve as the base of the paper map. Defaults to openstreetmap.

  • api_key (str | None) – API key for the chosen tile provider (if applicable). Defaults to None.

  • size – Size of the paper map. Defaults to a4.

  • landscape – Use landscape orientation. Defaults to False.

  • margin_top (int) – Top margin (in mm). Defaults to 10.

  • margin_right (int) – Right margin (in mm). Defaults to 10.

  • margin_bottom (int) – Bottom margin (in mm). Defaults to 10.

  • margin_left (int) – Left margin (in mm). Defaults to 10.

  • scale (int) – Scale of the paper map. Defaults to 25000.

  • dpi (int) – Dots per inch. Defaults to 300.

  • background_color (str) – Background color of the paper map. Defaults to #fff.

  • add_grid (bool) – Add a coordinate grid overlay to the paper map. Defaults to False.

  • grid_size (int) – Size of the grid squares (if applicable, in meters). Defaults to 1000.

  • strict_download (bool) – Fail if any tiles cannot be downloaded. Defaults to False.

Raises:
classmethod from_utm(utm, **kwargs)

Create a paper map from Universal Transverse Mercator (UTM) coordinates.

Parameters:
  • utm (UTMCoordinate | str) – Either an UTMCoordinate object or a UTM string (e.g., “18N 583960E 4507523N”).

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centered on the converted coordinates.

Return type:

Self

Examples

>>> from papermap import PaperMap
>>> from papermap.geodesy import UTMCoordinate
>>> utm = UTMCoordinate(583960, 4507523, 18, "N")
>>> pm = PaperMap.from_utm(utm)
>>> pm.render()
>>> pm.save("map_from_utm.pdf")
classmethod from_mgrs(mgrs, **kwargs)

Create a paper map from Military Grid Reference System (MGRS) coordinates.

Parameters:
  • mgrs (MGRSCoordinate | str) – Either an MGRSCoordinate object or an MGRS string (e.g., “18TWK8395907523”).

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centered on the converted coordinates.

Raises:

ValueError – If the MGRS string is malformed.

Return type:

Self

Examples

>>> from papermap import PaperMap
>>> pm = PaperMap.from_mgrs("18TWK8395907523")
>>> pm.render()
>>> pm.save("map_from_mgrs.pdf")
>>> from papermap.geodesy import MGRSCoordinate
>>> mgrs = MGRSCoordinate(18, "T", "WK", 83959, 7523)
>>> pm = PaperMap.from_mgrs(mgrs)
classmethod from_ecef(ecef, **kwargs)

Create a paper map from Earth-Centered, Earth-Fixed (ECEF) Cartesian coordinates.

Parameters:
  • ecef (ECEFCoordinate) – ECEFCoordinate with x, y, z in meters.

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centered on the converted coordinates.

Return type:

Self

Examples

>>> from papermap import PaperMap
>>> from papermap.geodesy import ECEFCoordinate
>>> ecef = ECEFCoordinate(1334934, -4655474, 4137498)
>>> pm = PaperMap.from_ecef(ecef)
>>> pm.render()
>>> pm.save("map_from_ecef.pdf")
classmethod from_features(*features, auto_scale=False, padding=5.0, **kwargs)

Create a paper map centred on the geographic centre of the given feature(s).

The centre is the midpoint of the features’ bounding box (the midpoints of the min/max latitude and longitude across every coordinate referenced by the features). The features are also added to the new map and will be drawn when render() is called.

When auto_scale is True, the map scale is computed automatically so that the bounding box fits within the printable image area (paper size minus margins minus padding), then snapped up to the nearest common cartographic scale (see COMMON_SCALES). Passing auto_scale=True together with an explicit scale raises a ValueError.

Parameters:
  • features (CircleMarker | IconMarker | Line | Polygon) – One or more MapFeature instances.

  • auto_scale (bool) – If True, compute the scale automatically to fit the features. Defaults to False.

  • padding (float) – Padding between the features and the image edge, in mm per side. Only consulted when auto_scale is True. Defaults to 5.0.

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centred on the features’ bounding box, with the features added.

Raises:
  • ValueError – If no features are given.

  • ValueError – If none of the features contain any coordinates.

  • ValueError – If both auto_scale=True and scale are given.

  • ValueError – If auto_scale=True and the features have zero geographic extent along at least one axis.

  • ScaleOutOfBoundsError – If auto_scale=True and the computed scale is out of the tile provider’s zoom bounds.

Return type:

Self

Note

Features spanning the ±180° anti-meridian are not handled specially; the resulting centre may be on the opposite side of the world from where you expect.

Examples

>>> from papermap import PaperMap
>>> from papermap.features import CircleMarker, Line
>>> pm = PaperMap.from_features(
...     CircleMarker(40.7128, -74.0060),
...     Line([(40.71, -74.01), (40.72, -73.99)]),
...     auto_scale=True,
... )
>>> pm.render()
>>> pm.save("map_from_features.pdf")
classmethod from_geojson(geojson_source, style=None, *, auto_scale=False, padding=5.0, **kwargs)

Create a paper map centred on the geographic centre of GeoJSON geometries.

Parses geojson_source with papermap.features.geojson_to_features() and then delegates to from_features() to compute the centre (the midpoint of the parsed features’ bounding box) and to add the parsed features to the new map.

When auto_scale is True, the map scale is computed automatically so that the parsed features fit within the printable image area. See from_features() for details.

Parameters:
  • geojson_source (str | Path | dict[str, Any] | SupportsGeoInterface) – A path to a .geojson file, or a GeoJSON dict (or any object exposing __geo_interface__).

  • style (dict[str, Any] | None) – Default styling applied to every parsed feature. See papermap.features.geojson_to_features() for the supported keys and the precedence rules with simplestyle-spec properties.

  • auto_scale (bool) – If True, compute the scale automatically to fit the parsed features. Defaults to False.

  • padding (float) – Padding between the features and the image edge, in mm per side. Only consulted when auto_scale is True. Defaults to 5.0.

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centred on the parsed features’ bounding box, with the parsed features added.

Raises:
  • TypeError – If geojson_source is neither a path-like nor a dict nor exposes __geo_interface__.

  • ValueError – If geojson_source parses to no features (e.g. an empty FeatureCollection), or if the parsed features contain no coordinates.

  • ValueError – If both auto_scale=True and scale are given.

  • ValueError – If auto_scale=True and the parsed features have zero geographic extent along at least one axis.

Return type:

Self

Examples

>>> from papermap import PaperMap
>>> geojson = {
...     "type": "FeatureCollection",
...     "features": [
...         {
...             "type": "Feature",
...             "geometry": {
...                 "type": "Point",
...                 "coordinates": [-74.0060, 40.7128],
...             },
...             "properties": {},
...         }
...     ],
... }
>>> pm = PaperMap.from_geojson(geojson)
>>> pm.render()
>>> pm.save("map_from_geojson.pdf")
classmethod from_gpx(gpx_source, style=None, *, auto_scale=False, padding=5.0, **kwargs)

Create a paper map centred on the geographic centre of GPX geometries.

Parses gpx_source with papermap.gpx.gpx_to_features() and then delegates to from_features() to compute the centre (the midpoint of the parsed features’ bounding box) and to add the parsed features to the new map.

When auto_scale is True, the map scale is computed automatically so that the parsed features fit within the printable image area. See from_features() for details.

Reading GPX files from disk requires the optional gpx package. Install it with pip install papermap[gpx].

Parameters:
  • gpx_source (str | Path | SupportsGeoInterface) – A path to a .gpx file, or any object exposing __geo_interface__ (e.g. a gpx.GPX instance).

  • style (dict[str, Any] | None) – Default styling applied to every parsed feature. See papermap.features.geojson_to_features() for the supported keys.

  • auto_scale (bool) – If True, compute the scale automatically to fit the parsed features. Defaults to False.

  • padding (float) – Padding between the features and the image edge, in mm per side. Only consulted when auto_scale is True. Defaults to 5.0.

  • **kwargs (Any) – Additional keyword arguments to pass to PaperMap constructor.

Returns:

A new PaperMap instance centred on the parsed features’ bounding box, with the parsed features added.

Raises:
  • ImportError – If gpx_source is a path and the optional gpx package is not installed.

  • TypeError – If gpx_source is neither a path-like nor exposes __geo_interface__.

  • ValueError – If gpx_source parses to no features.

  • ValueError – If both auto_scale=True and scale are given.

  • ValueError – If auto_scale=True and the parsed features have zero geographic extent along at least one axis.

Return type:

Self

Examples

>>> from papermap import PaperMap
>>> pm = PaperMap.from_gpx("hike.gpx", auto_scale=True, padding=10)
>>> pm.render()
>>> pm.save("Hike.pdf")
latlon_to_pdf_mm(lat, lon)

Convert a geographic position to absolute PDF coordinates in mm.

Parameters:
  • lat (float) – Latitude.

  • lon (float) – Longitude.

Returns:

(x_mm, y_mm) measured from the page origin (top-left).

Return type:

tuple[float, float]

add_circle_marker(lat, lon, **kwargs)

Add a CircleMarker at the given position to the map.

Parameters:
  • lat (float) – Latitude of the marker centre.

  • lon (float) – Longitude of the marker centre.

  • **kwargs (Any) – Additional keyword arguments forwarded to CircleMarker.

Returns:

The newly added marker.

Return type:

CircleMarker

add_icon_marker(lat, lon, icon, **kwargs)

Add an IconMarker at the given position to the map.

Parameters:
  • lat (float) – Latitude of the anchor point.

  • lon (float) – Longitude of the anchor point.

  • icon (str | Path | Image) – Path to an image file or a PIL.Image.Image instance.

  • **kwargs (Any) – Additional keyword arguments forwarded to IconMarker.

Returns:

The newly added marker.

Return type:

IconMarker

add_line(coordinates, **kwargs)

Add a Line (polyline) to the map.

Parameters:
  • coordinates (Sequence[tuple[float, float]]) – Sequence of (lat, lon) pairs.

  • **kwargs (Any) – Additional keyword arguments forwarded to Line.

Returns:

The newly added line.

Return type:

Line

add_polygon(coordinates, **kwargs)

Add a Polygon to the map.

Parameters:
  • coordinates (Sequence[Sequence[tuple[float, float]]]) – Sequence of rings, where each ring is a sequence of (lat, lon) pairs. The first ring is the outer boundary; any subsequent rings are interior holes.

  • **kwargs (Any) – Additional keyword arguments forwarded to Polygon.

Returns:

The newly added polygon.

Return type:

Polygon

add_feature(feature)

Add a pre-constructed feature to the map.

Parameters:

feature (CircleMarker | IconMarker | Line | Polygon) – A CircleMarker, IconMarker, Line, or Polygon.

Returns:

The same feature, for chaining.

Return type:

CircleMarker | IconMarker | Line | Polygon

add_geojson(geojson_source, style=None)

Add geometries from a GeoJSON file or GeoJSON object (or any object implementing the __geo_interface__ protocol).

See papermap.features.geojson_to_features() for the supported GeoJSON types and the precedence rules for styling.

Parameters:
  • geojson_source (str | Path | dict[str, Any] | SupportsGeoInterface) – A path to a .geojson file, or a GeoJSON dict (or any object exposing __geo_interface__).

  • style (dict[str, Any] | None) – Default styling applied to every parsed feature.

Returns:

The list of features that were parsed and added to the map.

Return type:

list[CircleMarker | IconMarker | Line | Polygon]

add_gpx(gpx_source, style=None)

Add geometries from a GPX file or GPX object.

See papermap.gpx.gpx_to_features() for the parsing rules. Reading GPX files from disk requires the optional gpx package; install it with pip install papermap[gpx].

Parameters:
  • gpx_source (str | Path | SupportsGeoInterface) – A path to a .gpx file, or any object exposing __geo_interface__ (e.g. a gpx.GPX instance).

  • style (dict[str, Any] | None) – Default styling applied to every parsed feature.

Returns:

The list of features that were parsed and added to the map.

Return type:

list[CircleMarker | IconMarker | Line | Polygon]

compute_grid_coordinates()

Compute the UTM grid line positions and labels for the map overlay.

The map’s geographic centre is converted to UTM and snapped to the nearest 1km grid intersection. From there, line positions (in mm relative to the image’s top-left corner) are walked outward at grid_size_scaled intervals, and the matching kilometre labels are derived from the rounded UTM coordinates.

Returns:

A pair (easting_lines, northing_lines). Each list holds (position_mm, label) tuples, where position_mm is a Decimal distance from the top-left of the image area and label is the UTM coordinate in kilometres.

Return type:

tuple[list[tuple[Decimal, str]], list[tuple[Decimal, str]]]

render_grid()

Draw the UTM coordinate grid overlay onto the PDF, if enabled.

Does nothing when self.add_grid is False. When enabled, draws vertical (easting) and horizontal (northing) grid lines at the positions returned by compute_grid_coordinates() and labels each line with its UTM coordinate in kilometres.

render_features()

Draw all added geometries onto the PDF, clipped to the map area.

Features are rendered in the order they were added. Anything that falls outside the map’s image rectangle is clipped via fpdf.FPDF.rect_clip() so it cannot bleed into the page margins.

render_attribution_and_scale()

Draw the tile provider attribution and map scale on the PDF.

The text is anchored to the bottom-right of the image area.

download_tiles(num_retries=3, sleep_between_retries=None, strict=False)

Download all tile images for the map in parallel, with retries.

Tiles that have already been downloaded are skipped. Failed tiles are retried up to num_retries times. When strict is False and tiles still fail after all retries, a warning is emitted; when strict is True, a RuntimeError is raised instead.

Parameters:
  • num_retries (int) – Maximum number of retry passes before giving up.

  • sleep_between_retries (int | None) – Optional delay (in seconds) between retry passes.

  • strict (bool) – Raise on persistent failures instead of warning.

Raises:

RuntimeError – If strict is True and one or more tiles cannot be downloaded after num_retries retries.

render_base_layer()

Download all tiles and assemble the map image.

Tiles are downloaded in parallel (honouring self.strict_download), composited onto a scaled canvas, and then resampled down to the target image size in pixels. The result is stored on self.map_image for subsequent embedding in the PDF.

render()

Render the paper map, consisting of the map image, features (if any), grid (if applicable), attribution and scale.

save(file, title='papermap', author='papermap')

Save the paper map to a file.

Parameters:
  • file (str | Path) – The file to save the paper map to.

  • title (str) – The title of the PDF document. Defaults to PaperMap.

  • author (str) – The author of the PDF document. Defaults to PaperMap.

papermap.geodesy Module

Geodesy module for coordinate conversions.

This module provides functions for converting between different coordinate systems: - Geographic coordinates (latitude/longitude in WGS84) - UTM (Universal Transverse Mercator) coordinates - MGRS (Military Grid Reference System) coordinates - ECEF (Earth-Centered, Earth-Fixed) Cartesian coordinates

The implementations are based on well-established geodetic formulas, particularly: - Karney (2011) for high-accuracy Transverse Mercator projections - Bowring (1985) for efficient Cartesian to geographic conversions

References

Karney, C. F. (2011). Transverse Mercator with an accuracy of a few nanometers.

Journal of Geodesy, 85(8), 475-485. https://arxiv.org/abs/1002.1417v3

Bowring, B. R. (1985). The accuracy of geodetic latitude and height equations.

Survey Review, 28(218), 202-206.

Veness, C. Geodesy functions. https://github.com/chrisveness/geodesy

class papermap.geodesy.Ellipsoid(semi_major_axis, flattening)

Bases: object

A reference ellipsoid for geodetic calculations.

An ellipsoid is a mathematical model of the Earth’s shape, defined by its semi-major axis (equatorial radius) and flattening. Different ellipsoids are used for different regions and applications.

semi_major_axis

Semi-major axis (equatorial radius) in meters. This is the distance from the Earth’s center to the equator.

Type:

float

flattening

Flattening factor (dimensionless). This describes how much the ellipsoid deviates from a perfect sphere, defined as f = (a - b) / a where a is the semi-major axis and b is the semi-minor axis. A value of 0 indicates a perfect sphere.

Type:

float

property semi_minor_axis: float

Semi-minor axis (polar radius) in meters.

This is the distance from the Earth’s center to the poles, calculated as b = a × (1 - f).

Returns:

The semi-minor axis in meters.

papermap.geodesy.WGS_84_ELLIPSOID = Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805)

The WGS84 ellipsoid used by GPS and most modern mapping applications.

This is the default ellipsoid for all coordinate conversion functions.

papermap.geodesy.UTM_SCALE_FACTOR: float = 0.9996

UTM central meridian scale factor (dimensionless).

UTM uses a secant cylinder projection, meaning the cylinder intersects the Earth at two lines parallel to the central meridian. This scale factor (less than 1) reduces distortion across the zone by making the scale exact along those secant lines rather than at the central meridian.

papermap.geodesy.UTM_FALSE_EASTING: float = 500000.0

UTM false easting in meters.

All UTM easting values are offset by this amount to ensure they are always positive. The central meridian of each zone has an easting of exactly 500,000 meters.

papermap.geodesy.UTM_FALSE_NORTHING: float = 10000000.0

UTM false northing for the Southern Hemisphere in meters.

In the Southern Hemisphere, northing values are offset by this amount to avoid negative coordinates. The equator has a northing of 10,000,000 meters in the Southern Hemisphere and 0 meters in the Northern.

papermap.geodesy.MGRS_LATITUDE_BANDS: str = 'CDEFGHJKLMNPQRSTUVWXX'

MGRS latitude band letters.

These letters designate 8-degree latitude bands from 80°S to 84°N. Letters I and O are omitted to avoid confusion with digits 1 and 0. The band ‘X’ is repeated because it spans 12 degrees (72°N to 84°N) instead of the usual 8 degrees.

Band C: 80°S to 72°S Band D: 72°S to 64°S … Band X: 72°N to 84°N

papermap.geodesy.MGRS_COLUMN_LETTERS_SET1: str = 'ABCDEFGH'

100km column letters for UTM zones where (zone % 3) == 1.

papermap.geodesy.MGRS_COLUMN_LETTERS_SET2: str = 'JKLMNPQR'

100km column letters for UTM zones where (zone % 3) == 2.

papermap.geodesy.MGRS_COLUMN_LETTERS_SET3: str = 'STUVWXYZ'

100km column letters for UTM zones where (zone % 3) == 0.

papermap.geodesy.MGRS_ROW_LETTERS_ODD: str = 'ABCDEFGHJKLMNPQRSTUV'

100km row letters for odd UTM zones (1, 3, 5, …).

papermap.geodesy.MGRS_ROW_LETTERS_EVEN: str = 'FGHJKLMNPQRSTUVABCDE'

100km row letters for even UTM zones (2, 4, 6, …).

Note how this is offset by 5 letters from the odd zone pattern. This offset ensures that adjacent zones don’t have the same row letter at the same northing, reducing ambiguity.

class papermap.geodesy.LatLonCoordinate(lat, lon, height=None)

Bases: NamedTuple

A geographic coordinate in latitude and longitude.

lat

Latitude in degrees (-90 to 90). Positive values are north of the equator, negative values are south.

Type:

float

lon

Longitude in degrees (-180 to 180). Positive values are east of the Prime Meridian, negative values are west.

Type:

float

height

Height above the WGS84 ellipsoid in meters. Defaults to None.

Type:

float | None

class papermap.geodesy.UTMCoordinate(easting, northing, zone, hemisphere)

Bases: NamedTuple

A Universal Transverse Mercator (UTM) coordinate.

UTM divides the Earth into 60 longitudinal zones, each 6 degrees wide, numbered 1-60 starting from 180°W. Each zone uses a Transverse Mercator projection with its own central meridian.

easting

Distance east from the zone’s central meridian in meters. The central meridian has an easting of 500,000m (false easting).

Type:

float

northing

Distance north from the equator in meters. In the Southern Hemisphere, 10,000,000m is added (false northing) so all values are positive.

Type:

float

zone

UTM zone number (1-60).

Type:

int

hemisphere

‘N’ for Northern Hemisphere, ‘S’ for Southern Hemisphere.

Type:

str

class papermap.geodesy.MGRSCoordinate(zone, band, square, easting, northing)

Bases: NamedTuple

A Military Grid Reference System (MGRS) coordinate.

MGRS extends UTM by adding a two-letter 100km square identifier and providing a way to specify location to varying precision levels.

zone

UTM zone number (1-60).

Type:

int

band

Latitude band letter (C-X, excluding I and O).

Type:

str

square

Two-letter 100km grid square identifier.

Type:

str

easting

Easting within the 100km square in meters (0-99999).

Type:

float

northing

Northing within the 100km square in meters (0-99999).

Type:

float

class papermap.geodesy.ECEFCoordinate(x, y, z)

Bases: NamedTuple

An Earth-Centered, Earth-Fixed (ECEF) Cartesian coordinate.

ECEF is a 3D Cartesian coordinate system with: - Origin at the Earth’s center of mass - X-axis pointing towards the intersection of the Prime Meridian and Equator - Y-axis pointing towards 90°E longitude on the Equator - Z-axis pointing towards the North Pole

x

Distance along X-axis in meters.

Type:

float

y

Distance along Y-axis in meters.

Type:

float

z

Distance along Z-axis in meters.

Type:

float

papermap.geodesy.format_latlon(latlon, *, precision=5)

Format a geographic coordinate in latitude and longitude as a human-readable string.

Parameters:
  • latlon (LatLonCoordinate) – The geographic coordinate in latitude and longitude to format.

  • precision (int) – Number of digits for latitude/longitude (0-8). 0=111km, 1 = 11.1km, 2 = 1.11km, 3 = 111m, 4 = 11.1m, 5 = 1.11m, 6 = 111mm, 7 = 11.1mm, 8 = 1.11mm. Defaults to 5.

Returns:

A string in the format “40.7128, -74.0060”.

Return type:

str

papermap.geodesy.format_utm(utm)

Format a UTM coordinate as a human-readable string.

Parameters:

utm (UTMCoordinate) – The UTM coordinate to format.

Returns:

A string in the format “18N 583960E 4507523N”.

Return type:

str

papermap.geodesy.format_mgrs(mgrs, *, precision=5)

Format an MGRS coordinate as a string with specified precision.

Parameters:
  • mgrs (MGRSCoordinate) – The MGRS coordinate to format.

  • precision (int) – Number of digits for easting/northing (1-5). 1 = 10km, 2 = 1km, 3 = 100m, 4 = 10m, 5 = 1m. Defaults to 5.

Returns:

MGRS coordinate string at the specified precision.

Raises:

ValueError – If precision is not between 1 and 5.

Return type:

str

papermap.geodesy.format_ecef(ecef)

Format an ECEF coordinate as a string.

Parameters:

ecef (ECEFCoordinate) – The ECEF coordinate to format.

Returns:

A string in the format “(x, y, z)”.

Return type:

str

papermap.geodesy.wrap_angle(angle, limit)

Wraps an angle to [-limit, limit] range.

Parameters:
  • angle (float) – Angle in degrees.

  • limit (float) – Lower and upper limit in degrees.

Returns:

Angle wrapped to [-limit, limit] degrees range.

Return type:

float

papermap.geodesy.wrap_lat(lat)

Wraps latitude to [-90, 90] degrees range.

Parameters:

lat (float) – Latitude in degrees.

Returns:

Latitude wrapped to [-90, 90] degrees range.

Return type:

float

papermap.geodesy.wrap_lon(lon)

Wraps longitude to [-180, 180] degrees range.

Parameters:

lon (float) – Longitude in degrees.

Returns:

Longitude wrapped to [-180, 180] degrees range.

Return type:

float

papermap.geodesy.latlon_to_utm(lat, lon, *, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert geographic coordinates to UTM.

This function uses Karney’s (2011) series expansion of the Transverse Mercator projection, which achieves sub-millimeter accuracy anywhere on Earth. The algorithm uses a conformal mapping via a 6th-order Krüger series.

The conversion process: 1. Determine the UTM zone (with special cases for Norway/Svalbard) 2. Calculate the conformal latitude (τ’) using the ellipsoid eccentricity 3. Apply the forward Krüger series to get projected coordinates 4. Scale and offset to get final UTM easting/northing

Parameters:
  • lat (float) – Latitude in degrees (-80 to 84 for UTM coverage).

  • lon (float) – Longitude in degrees (-180 to 180).

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

UTMCoordinate with easting, northing, zone, and hemisphere.

Raises:

ValueError – If latitude is outside the UTM coverage area [-80, 84].

Return type:

UTMCoordinate

Examples

>>> utm = latlon_to_utm(40.7128, -74.0060)  # New York City
>>> print(utm)
UTMCoordinate(easting=583959.3723240846, northing=4507350.998243322, zone=18, hemisphere='N')
>>> utm = latlon_to_utm(-33.8688, 151.2093)  # Sydney
>>> print(format_utm(utm))
56S 334369E 6250948N
papermap.geodesy.utm_to_latlon(utm, *, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert UTM coordinates to geographic coordinates.

This function uses Karney’s (2011) inverse Transverse Mercator series to convert UTM coordinates (either as an UTMCoordinate object or a string) back to latitude/longitude with high accuracy.

The conversion process: 1. Remove false origins from easting/northing 2. Compute normalized conformal coordinates 3. Apply inverse Krüger series 4. Iteratively solve for geodetic latitude 5. Compute longitude from the conformal coordinates

Parameters:
  • utm (UTMCoordinate | str) – Either an UTMCoordinate object or a UTM string (e.g., “18N 583960E 4507523N”).

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

Tuple of (latitude, longitude) in degrees.

Raises:

ValueError – If the UTM string is malformed.

Return type:

LatLonCoordinate

Examples

>>> utm = UTMCoordinate(583960, 4507523, 18, "N")
>>> latlon = utm_to_latlon(utm)
>>> print(latlon)
LatLonCoordinate(lat=40.714349212461954, lon=-74.00596952683831, height=None)
>>> print(format_latlon(latlon))
40.71435, -74.00597
papermap.geodesy.latlon_to_mgrs(lat, lon, *, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert geographic coordinates to MGRS.

MGRS (Military Grid Reference System) is an alphanumeric version of UTM that provides a standardized way to express grid coordinates. It combines: - A Grid Zone Designator (e.g., “18T”) = UTM zone + latitude band - A 100km Square Identifier (e.g., “WK”) = two letters - Numerical coordinates within the square (e.g., “12345 67890”)

Parameters:
  • lat (float) – Latitude in degrees (-80 to 84).

  • lon (float) – Longitude in degrees (-180 to 180).

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

MGRSCoordinate object with zone, band, square, easting, and northing.

Return type:

MGRSCoordinate

Examples

>>> mgrs = latlon_to_mgrs(40.7128, -74.0060)
>>> print(mgrs)
MGRSCoordinate(zone=18, band='T', square='WL', easting=83959.37232408463, northing=7350.998243321665)
>>> mgrs = latlon_to_mgrs(40.7128, -74.0060)
>>> print(format_mgrs(mgrs))
18TWL8395907350
>>> mgrs = latlon_to_mgrs(40.7128, -74.0060, precision=3)
>>> print(format_mgrs(mgrs, precision=3))
18TWL839073
papermap.geodesy.mgrs_to_latlon(mgrs, *, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert MGRS coordinates to geographic coordinates.

This function converts an MGRS coordinate (either as an MGRSCoordinate object or a string) back to latitude/longitude. The conversion involves: 1. Parsing the MGRS components 2. Reconstructing UTM coordinates 3. Converting UTM to lat/lon

Parameters:
  • mgrs (MGRSCoordinate | str) – Either an MGRSCoordinate object or an MGRS string (e.g., “18TWK8395907523”).

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

Tuple of (latitude, longitude) in degrees.

Raises:

ValueError – If the MGRS string is malformed.

Return type:

LatLonCoordinate

Examples

>>> latlon = mgrs_to_latlon("18TWK8395907523")
>>> print(format_latlon(latlon))
39.81354, -74.01908
>>> mgrs = MGRSCoordinate(18, "T", "WK", 83959, 7523)
>>> lat, lon, _ = mgrs_to_latlon(mgrs)
>>> print(lat, lon)
39.81354433765199 -74.01908091495618
papermap.geodesy.latlon_to_ecef(lat, lon, *, height=0.0, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert geographic coordinates to Earth-Centered, Earth-Fixed (ECEF).

ECEF coordinates are a 3D Cartesian system with: - Origin at Earth’s center of mass - X-axis pointing to the intersection of Prime Meridian and Equator - Y-axis pointing to 90°E on the Equator - Z-axis pointing to the North Pole

The conversion accounts for the ellipsoidal shape of the Earth using the specified ellipsoid parameters.

The formulas used are: - x = (N + h) × cos(φ) × cos(λ) - y = (N + h) × cos(φ) × sin(λ) - z = (N × (1 - e²) + h) × sin(φ)

where: - N = a / sqrt(1 - e² × sin²(φ)) is the radius of curvature in the prime vertical (the distance from the surface to the minor axis along the normal to the ellipsoid) - a = semi-major axis - e = first eccentricity - h = height above ellipsoid - φ = latitude, λ = longitude

Parameters:
  • lat (float) – Latitude in degrees.

  • lon (float) – Longitude in degrees.

  • height (float) – Height above the ellipsoid in meters. Defaults to 0.

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

ECEFCoordinate with x, y, z in meters.

Return type:

ECEFCoordinate

Examples

>>> ecef = latlon_to_ecef(0, 0)  # On equator at prime meridian
>>> print(f"x={ecef.x:.0f}")
x=6378137
>>> ecef = latlon_to_ecef(90, 0)  # North Pole
>>> print(f"z={ecef.z:.0f}")
z=6356752
papermap.geodesy.ecef_to_latlon(ecef, *, ellipsoid=Ellipsoid(semi_major_axis=6378137.0, flattening=0.0033528106647474805))

Convert ECEF coordinates to geographic coordinates.

This function uses Bowring’s (1985) iterative method, which converges to full precision in just 2-3 iterations for typical coordinates.

The algorithm uses parametric latitude (β) as an intermediate step, which simplifies the iteration compared to direct methods.

The process: 1. Compute longitude directly from x and y: λ = atan2(y, x) 2. Iteratively refine parametric latitude β 3. Compute geodetic latitude from β 4. Compute height from the final values

Parameters:
  • ecef (ECEFCoordinate) – ECEFCoordinate with x, y, z in meters.

  • ellipsoid (Ellipsoid) – Reference ellipsoid for calculations. Defaults to WGS84.

Returns:

  • latitude is in degrees (-90 to 90)

  • longitude is in degrees (-180 to 180)

  • height is above the ellipsoid in meters

Return type:

Tuple of (latitude, longitude, height) where

Examples

>>> ecef = ECEFCoordinate(6378137, 0, 0)
>>> latlon = ecef_to_latlon(ecef)
>>> print(latlon)
LatLonCoordinate(lat=0.0, lon=0.0, height=0.0)
>>> print(f"{latlon.lat:.1f}, {latlon.lon:.1f}, {latlon.height:.1f}")
0.0, 0.0, 0.0

papermap.features Module

Map feature dataclasses and a GeoJSON parser.

Features are geometries — circle markers, icon markers, lines, and polygons — that are overlaid on the map’s base layer. They can be constructed directly from one of the dataclasses in this module, or parsed from a GeoJSON object (or any object implementing the __geo_interface__ protocol).

Coordinate ordering convention: all dataclass coordinates use (lat, lon) ordering, matching PaperMap and the geodesy helpers. The geojson_to_features() parser is the only place that swaps GeoJSON’s [lon, lat] order to the internal (lat, lon) form.

class papermap.features.CircleMarker(lat, lon, radius=2.0, stroke_color='#000', stroke_width=0.5, fill_color='#fff', opacity=1.0, stroke_opacity=None, fill_opacity=None)

Bases: object

A circular marker at a single geographic position.

Parameters:
  • lat (float) – Latitude of the marker centre.

  • lon (float) – Longitude of the marker centre.

  • radius (float) – Marker radius on paper, in mm. Defaults to 2.0.

  • stroke_color (str | None) – Outline colour as a CSS-style hex string, or None to omit the outline. Defaults to "#000".

  • stroke_width (float) – Outline width on paper, in mm. Defaults to 0.5.

  • fill_color (str | None) – Fill colour as a CSS-style hex string, or None to omit the fill. Defaults to "#fff".

  • opacity (float) – Overall opacity, in [0, 1]. Defaults to 1.0.

  • stroke_opacity (float | None) – Outline opacity. Defaults to opacity when None.

  • fill_opacity (float | None) – Fill opacity. Defaults to opacity when None.

class papermap.features.IconMarker(lat, lon, icon, width=5.0, height=None, anchor=(0.5, 1.0), opacity=1.0)

Bases: object

An image marker at a single geographic position.

The image is anchored to the geographic position via anchor, expressed as fractions of the icon width and height. The default (0.5, 1.0) anchors the bottom centre of the icon to the position, matching the typical map-pin convention.

Parameters:
  • lat (float) – Latitude of the anchor point.

  • lon (float) – Longitude of the anchor point.

  • icon (str | Path | Image.Image) – Path to an image file or a PIL.Image.Image instance.

  • width (float) – Rendered icon width on paper, in mm. Defaults to 5.0.

  • height (float | None) – Rendered icon height on paper, in mm. When None, the height is derived from width and the icon’s aspect ratio.

  • anchor (tuple[float, float]) – Anchor point within the icon as (x, y) fractions of the icon width and height. Defaults to (0.5, 1.0) (bottom centre).

  • opacity (float) – Opacity of the rendered icon, in [0, 1]. Defaults to 1.0.

class papermap.features.Line(coordinates, stroke_color='#000', stroke_width=0.5, opacity=1.0, stroke_opacity=None)

Bases: object

A polyline connecting two or more geographic positions.

Parameters:
  • coordinates (Sequence[tuple[float, float]]) – Sequence of (lat, lon) pairs. Must contain at least two positions.

  • stroke_color (str) – Stroke colour as a CSS-style hex string. Defaults to "#000".

  • stroke_width (float) – Stroke width on paper, in mm. Defaults to 0.5.

  • opacity (float) – Stroke opacity, in [0, 1]. Defaults to 1.0.

  • stroke_opacity (float | None) – Stroke opacity. Defaults to opacity when None.

class papermap.features.Polygon(coordinates, stroke_color='#000', stroke_width=0.5, fill_color=None, opacity=1.0, stroke_opacity=None, fill_opacity=None)

Bases: object

A polygon, optionally with interior holes.

Parameters:
  • coordinates (Sequence[Sequence[tuple[float, float]]]) – Sequence of rings, where each ring is a sequence of (lat, lon) pairs. The first ring is the outer boundary; any subsequent rings are interior holes.

  • stroke_color (str | None) – Outline colour as a CSS-style hex string, or None to omit the outline. Defaults to "#000".

  • stroke_width (float) – Outline width on paper, in mm. Defaults to 0.5.

  • fill_color (str | None) – Fill colour as a CSS-style hex string, or None for an unfilled polygon. Defaults to None.

  • opacity (float) – Overall opacity, in [0, 1]. Defaults to 1.0.

  • stroke_opacity (float | None) – Outline opacity. Defaults to opacity when None.

  • fill_opacity (float | None) – Fill opacity. Defaults to opacity when None.

Note

A polygon spanning the ±180° anti-meridian will draw across the entire map (the geometry is not auto-split). Pre-split such polygons before adding them.

papermap.features.MapFeature: TypeAlias = papermap.features.CircleMarker | papermap.features.IconMarker | papermap.features.Line | papermap.features.Polygon

Union type alias for any feature that can be rendered on the map.

papermap.features.iter_feature_coordinates(feature)

Yield every (lat, lon) coordinate referenced by a feature.

For CircleMarker and IconMarker, the marker’s single anchor position is yielded. For Line, every vertex is yielded. For Polygon, every vertex of every ring (outer boundary and holes) is yielded.

Parameters:

feature (MapFeature) – The feature to iterate over.

Yields:

(lat, lon) pairs, in the order they appear on the feature.

papermap.geojson Module

GeoJSON parsing — turn .geojson files (or GeoJSON objects) into map features.

The geojson_to_features() function accepts either a path to a GeoJSON file or a GeoJSON object (or any object implementing the __geo_interface__ protocol) and returns a flat list of MapFeature instances.

class papermap.geojson.SupportsGeoInterface(*args, **kwargs)

Bases: Protocol

Protocol for objects exposing the __geo_interface__ attribute.

papermap.geojson.geojson_to_features(geojson_source, style=None)

Convert a GeoJSON file path or a GeoJSON object to map features.

When parsing a Feature whose properties contain simplestyle-spec keys (stroke, stroke-width, stroke-opacity, fill, fill-opacity), those properties take precedence over style.

Parameters:
  • geojson_source (str | Path | dict[str, Any] | SupportsGeoInterface) – A path to a .geojson file (str or pathlib.Path), or a GeoJSON dict (or an object exposing the __geo_interface__ protocol).

  • style (dict[str, Any] | None) – Default styling applied to every parsed feature. Keys must match the corresponding dataclass fields (e.g. stroke_color, fill_color, stroke_width, opacity).

Returns:

A flat list of feature dataclasses. Points become CircleMarker, line strings become Line, and polygons become Polygon.

Raises:
  • TypeError – If the input is neither a path-like, nor a dict nor an object exposing __geo_interface__.

  • ValueError – If the object’s type field is missing or unrecognised.

Return type:

list[CircleMarker | IconMarker | Line | Polygon]

papermap.gpx Module

GPX parsing — turn .gpx files (or gpx.GPX objects) into map features.

The gpx_to_features() function accepts either a path to a GPX file or any object exposing the __geo_interface__ protocol (e.g. an instance from the gpx library) and returns a flat list of MapFeature instances by delegating to geojson_to_features().

GPX objects from the upstream gpx library expose a FeatureCollection via __geo_interface__:

  • Waypoints become Point features → CircleMarker.

  • Routes become LineString features → Line.

  • Tracks become MultiLineString features → one Line per track segment.

Reading GPX files from disk requires the optional gpx package. Install it with pip install papermap[gpx]. Parsing an already-loaded object that exposes __geo_interface__ does not require the optional package.

papermap.gpx.gpx_to_features(gpx_source, style=None)

Convert a GPX file path or GPX object to map features.

Parameters:
  • gpx_source (str | Path | SupportsGeoInterface) – A path to a .gpx file (str or pathlib.Path), or any object exposing the __geo_interface__ protocol (e.g. a gpx.GPX instance).

  • style (dict[str, Any] | None) – Default styling forwarded to geojson_to_features(). See that function for the supported keys.

Returns:

A flat list of feature dataclasses. Waypoints become CircleMarker, routes become Line, and each segment of each track becomes its own Line.

Raises:
  • ImportError – If gpx_source is a path and the optional gpx package is not installed.

  • TypeError – If gpx_source is neither a path-like nor an object exposing __geo_interface__.

Return type:

list[MapFeature]

papermap.tile Module

papermap.tile.TILE_SIZE: int = 256

Size (width/height) of map tiles in pixels.

class papermap.tile.Tile(x, y, zoom, bbox, image=None)

Bases: object

A tile from a tile provider.

Parameters:
  • x (int) – The x coordinate of the tile.

  • y (int) – The y coordinate of the tile.

  • zoom (int) – The zoom level of the tile.

  • bbox (tuple[int, int, int, int]) – The bounding box of the tile.

  • image (Image | None) – The image of the tile. Defaults to None.

property success: bool

Whether the tile was successfully downloaded or not.

papermap.tile_provider Module

class papermap.tile_provider.TileProvider(key, name, attribution, html_attribution, url_template, zoom_min, zoom_max, bounds=None, subdomains=None)

Bases: object

A tile provider.

Parameters:
  • key (str) – The key of the tile provider (fully lowercase with dashes instead of spaces).

  • name (str) – The name of the tile provider.

  • attribution (str) – The attribution of the tile provider.

  • html_attribution (str) – The HTML-version of the attribution (with hyperlinks).

  • url_template (str) – The URL template of the tile provider. Allowed placeholders are {x}, {y}, {z}, {s} and {a}, where {x} refers to the x coordinate of the tile, {y} refers to the y coordinate of the tile, {z} to the zoom level, {s} to the subdomain (optional) and {a} to the API key (optional). See https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_providers for more information.

  • zoom_min (int) – The minimum zoom level of the tile provider.

  • zoom_max (int) – The maximum zoom level of the tile provider.

  • bounds (tuple[float, float, float, float] | None) – The geographic bounds of the tile provider (min_lon, min_lat, max_lon, max_lat). Defaults to None.

  • subdomains (list[str | int | None] | None) – The subdomains of the tile provider. Defaults to None.

format_url_template(tile, api_key=None)

Format the URL template with the tile’s coordinates and zoom level.

Parameters:
  • tile (Tile) – The tile to format the URL template with.

  • api_key (str | None) – The API key to use. Defaults to None.

Returns:

The formatted URL template.

Return type:

str

papermap.tile_providers Subpackage

The tile_providers subpackage contains tile provider configurations organized by provider.

Tile provider configurations for various map providers.

This subpackage contains tile provider configurations organized by provider. All tile providers are aggregated and exported through this module.

Each provider module is expected to expose a module-level TILE_PROVIDERS: list[TileProvider] attribute. Modules are discovered automatically; adding a new module under papermap/tile_providers/ is sufficient to register its providers here.

Example

>>> from papermap.tile_providers import KEY_TO_TILE_PROVIDER, TILE_PROVIDERS
>>> osm = KEY_TO_TILE_PROVIDER["openstreetmap"]
>>> print(osm.name)
OpenStreetMap
Available providers:
  • OpenStreetMap (and regional variants)

  • OpenTopoMap

  • OpenSeaMap

  • Thunderforest (requires API key)

  • Esri

  • Stadia (including Stamen styles)

  • CartoDB (Carto)

  • Google Maps

  • HERE (requires API key)

  • USGS

  • NASA GIBS

  • Wikimedia

  • CyclOSM

  • Jawg (requires API key)

  • MapTiler (requires API key)

  • TomTom (requires API key)

  • BasemapAT (Austrian)

  • NLMaps (Dutch)

  • SwissFederalGeoportal

  • And many more miscellaneous providers

papermap.tile_providers.DEFAULT_TILE_PROVIDER_KEY: str = 'openstreetmap'

Default tile provider key.

papermap.tile_providers.KEY_TO_TILE_PROVIDER: dict[str, TileProvider] = {'alltrails': TileProvider(key='alltrails', name='AllTrails', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://alltrails.com/tiles/alltrailsOutdoors/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'basemapat': TileProvider(key='basemapat', name='BasemapAT', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-grau': TileProvider(key='basemapat-grau', name='BasemapAT Grau', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapgrau/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-highdpi': TileProvider(key='basemapat-highdpi', name='BasemapAT Highdpi', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmaphidpi/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-orthofoto': TileProvider(key='basemapat-orthofoto', name='BasemapAT Orthofoto', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-overlay': TileProvider(key='basemapat-overlay', name='BasemapAT Overlay', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-surface': TileProvider(key='basemapat-surface', name='BasemapAT Surface', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapoberflaeche/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'basemapat-terrain': TileProvider(key='basemapat-terrain', name='BasemapAT Terrain', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapgelaende/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), 'cartodb-darkmatter': TileProvider(key='cartodb-darkmatter', name='CartoDB DarkMatter', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-darkmatter-nolabels': TileProvider(key='cartodb-darkmatter-nolabels', name='CartoDB DarkMatterNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-darkmatter-onlylabels': TileProvider(key='cartodb-darkmatter-onlylabels', name='CartoDB DarkMatterOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-positron': TileProvider(key='cartodb-positron', name='CartoDB Positron', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-positronnolabels': TileProvider(key='cartodb-positronnolabels', name='CartoDB PositronNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-positrononlylabels': TileProvider(key='cartodb-positrononlylabels', name='CartoDB PositronOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-voyager': TileProvider(key='cartodb-voyager', name='CartoDB Voyager', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-voyager-labelsunder': TileProvider(key='cartodb-voyager-labelsunder', name='CartoDB VoyagerLabelsUnder', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-voyager-nolabels': TileProvider(key='cartodb-voyager-nolabels', name='CartoDB VoyagerNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cartodb-voyager-onlylabels': TileProvider(key='cartodb-voyager-onlylabels', name='CartoDB VoyagerOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'cyclosm': TileProvider(key='cyclosm', name='CyclOSM', attribution='Map data: © OpenStreetMap contributors. Map style: © CyclOSM (hosted by OpenStreetMap France)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.cyclosm.org/">CyclOSM</a> (hosted by <a href="https://openstreetmap.fr/">OpenStreetMap France</a>)', url_template='https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'esri-delorme': TileProvider(key='esri-delorme', name='Esri DeLorme', attribution='Tiles © Esri DeLorme', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> DeLorme', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=11, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-natgeoworldmap': TileProvider(key='esri-natgeoworldmap', name='Esri NatGeoWorldMap', attribution='Tiles © Esri Source: National Geographic, Esri, DeLorme, HERE, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, increment P Corp.', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: National Geographic, Esri, DeLorme, HERE, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, increment P Corp.', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-oceanbasemap': TileProvider(key='esri-oceanbasemap', name='Esri OceanBasemap', attribution='Tiles © Esri Source: Esri, GEBCO, NOAA, National Geographic, DeLorme, HERE, Geonames.org, and other contributors', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri, GEBCO, NOAA, National Geographic, DeLorme, HERE, Geonames.org, and other contributors', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldgraycanvas': TileProvider(key='esri-worldgraycanvas', name='Esri WorldGrayCanvas', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldimagery': TileProvider(key='esri-worldimagery', name='Esri WorldImagery', attribution='Tiles © Esri Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldphysical': TileProvider(key='esri-worldphysical', name='Esri WorldPhysical', attribution='Tiles © Esri Source: US National Park Service', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: US National Park Service', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldshadedrelief': TileProvider(key='esri-worldshadedrelief', name='Esri WorldShadedRelief', attribution='Tiles © Esri Source: Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldstreetmap': TileProvider(key='esri-worldstreetmap', name='Esri WorldStreetMap', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=17, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldterrain': TileProvider(key='esri-worldterrain', name='Esri WorldTerrain', attribution='Tiles © Esri Source: USGS, Esri, TANA, DeLorme, and NPS', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: USGS, Esri, TANA, DeLorme, and NPS', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'esri-worldtopomap': TileProvider(key='esri-worldtopomap', name='Esri WorldTopoMap', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'geofabrik-topo': TileProvider(key='geofabrik-topo', name='Geofabrik Topo', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='http://{s}.tile.geofabrik.de/15173cf79060ee4a66573954f6017ab0/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'google-maps': TileProvider(key='google-maps', name='Google Maps', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'google-maps-roads': TileProvider(key='google-maps-roads', name='Google Maps Roads', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'google-maps-satellite': TileProvider(key='google-maps-satellite', name='Google Maps Satellite', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'google-maps-satellite-hybrid': TileProvider(key='google-maps-satellite-hybrid', name='Google Maps Satellite Hybrid', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=y&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'google-maps-terrain': TileProvider(key='google-maps-terrain', name='Google Maps Terrain', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=t&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'google-maps-terrain-hybrid': TileProvider(key='google-maps-terrain-hybrid', name='Google Maps Terrain Hybrid', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), 'here-basicmap': TileProvider(key='here-basicmap', name='HERE basicMap', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-carnavdaygrey': TileProvider(key='here-carnavdaygrey', name='HERE carnavDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/carnav.day.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-hybridday': TileProvider(key='here-hybridday', name='HERE hybridDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-hybriddaygrey': TileProvider(key='here-hybriddaygrey', name='HERE hybridDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.grey.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-hybriddaymobile': TileProvider(key='here-hybriddaymobile', name='HERE hybridDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-hybriddaytransit': TileProvider(key='here-hybriddaytransit', name='HERE hybridDayTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-maplabels': TileProvider(key='here-maplabels', name='HERE mapLabels', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalday': TileProvider(key='here-normalday', name='HERE normalDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaycustom': TileProvider(key='here-normaldaycustom', name='HERE normalDayCustom', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.custom/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaygrey': TileProvider(key='here-normaldaygrey', name='HERE normalDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaygreymobile': TileProvider(key='here-normaldaygreymobile', name='HERE normalDayGreyMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.grey.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaymobile': TileProvider(key='here-normaldaymobile', name='HERE normalDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaytransit': TileProvider(key='here-normaldaytransit', name='HERE normalDayTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normaldaytransitmobile': TileProvider(key='here-normaldaytransitmobile', name='HERE normalDayTransitMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.transit.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnight': TileProvider(key='here-normalnight', name='HERE normalNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnightgrey': TileProvider(key='here-normalnightgrey', name='HERE normalNightGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnightgreymobile': TileProvider(key='here-normalnightgreymobile', name='HERE normalNightGreyMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.grey.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnightmobile': TileProvider(key='here-normalnightmobile', name='HERE normalNightMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnighttransit': TileProvider(key='here-normalnighttransit', name='HERE normalNightTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-normalnighttransitmobile': TileProvider(key='here-normalnighttransitmobile', name='HERE normalNightTransitMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.transit.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-pedestrianday': TileProvider(key='here-pedestrianday', name='HERE pedestrianDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/pedestrian.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-pedestriannight': TileProvider(key='here-pedestriannight', name='HERE pedestrianNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/pedestrian.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-reducedday': TileProvider(key='here-reducedday', name='HERE reducedDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/reduced.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-reducednight': TileProvider(key='here-reducednight', name='HERE reducedNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/reduced.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-satelliteday': TileProvider(key='here-satelliteday', name='HERE satelliteDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-terrainday': TileProvider(key='here-terrainday', name='HERE terrainDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/terrain.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-terraindaymobile': TileProvider(key='here-terraindaymobile', name='HERE terrainDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/terrain.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'here-trafficflow': TileProvider(key='here-trafficflow', name='HERE trafficFlow', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.traffic.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'hikebike': TileProvider(key='hikebike', name='HikeBike', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.wmflabs.org/hikebike/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-dark': TileProvider(key='jawg-dark', name='Jawg Dark', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-dark/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-light': TileProvider(key='jawg-light', name='Jawg Light', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-light/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-matrix': TileProvider(key='jawg-matrix', name='Jawg Matrix', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-matrix/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-streets': TileProvider(key='jawg-streets', name='Jawg Streets', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-streets/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-sunny': TileProvider(key='jawg-sunny', name='Jawg Sunny', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-sunny/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'jawg-terrain': TileProvider(key='jawg-terrain', name='Jawg Terrain', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-terrain/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'komoot': TileProvider(key='komoot', name='Komoot', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='http://{s}.tile.komoot.de/komoot-2/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'maptiler-basic': TileProvider(key='maptiler-basic', name='MapTiler Basic', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/basic-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-bright': TileProvider(key='maptiler-bright', name='MapTiler Bright', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/bright-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-hybrid': TileProvider(key='maptiler-hybrid', name='MapTiler Hybrid', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/hybrid/{z}/{x}/{y}.jpg?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-outdoor': TileProvider(key='maptiler-outdoor', name='MapTiler Outdoor', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/outdoor-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-pastel': TileProvider(key='maptiler-pastel', name='MapTiler Pastel', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/pastel/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-positron': TileProvider(key='maptiler-positron', name='MapTiler Positron', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/positron/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-satellite': TileProvider(key='maptiler-satellite', name='MapTiler Satellite', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/satellite-v2/{z}/{x}/{y}.jpg?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-streets': TileProvider(key='maptiler-streets', name='MapTiler Streets', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/streets-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-toner': TileProvider(key='maptiler-toner', name='MapTiler Toner', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/toner-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-topo': TileProvider(key='maptiler-topo', name='MapTiler Topo', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/topo-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'maptiler-winter': TileProvider(key='maptiler-winter', name='MapTiler Winter', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/winter-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'mapy-cz': TileProvider(key='mapy-cz', name='Mapy.cz', attribution='Map data: © OpenStreetMap contributors. Map style: © Seznam.cz', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.seznam.cz/">Seznam.cz</a>', url_template='https://m{s}.mapserver.mapy.cz/turist-m/{z}-{x}-{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), 'mtbmap': TileProvider(key='mtbmap', name='MtbMap', attribution='Map data: © OpenStreetMap contributors, USGS. Map style: © mtbmap.cz', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a> & USGS. Map style: © <a href="https://mtbmap.cz/">mtbmap.cz</a>', url_template='http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterraaod': TileProvider(key='nasagibs-modisterraaod', name='NASAGIBS ModisTerraAOD', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Aerosol/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=6, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterrabands367cr': TileProvider(key='nasagibs-modisterrabands367cr', name='NASAGIBS ModisTerraBands367CR', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_Bands367/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=9, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterrachlorophyll': TileProvider(key='nasagibs-modisterrachlorophyll', name='NASAGIBS ModisTerraChlorophyll', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Chlorophyll_A/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=7, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterralstday': TileProvider(key='nasagibs-modisterralstday', name='NASAGIBS ModisTerraLSTDay', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Land_Surface_Temp_Day/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=7, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterrasnowcover': TileProvider(key='nasagibs-modisterrasnowcover', name='NASAGIBS ModisTerraSnowCover', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_NDSI_Snow_Cover/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-modisterratruecolorcr': TileProvider(key='nasagibs-modisterratruecolorcr', name='NASAGIBS ModisTerraTrueColorCR', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_TrueColor/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=9, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nasagibs-viirsearthatnight2012': TileProvider(key='nasagibs-viirsearthatnight2012', name='NASAGIBS ViirsEarthAtNight2012', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_CityLights_2012/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nlmaps-grijs': TileProvider(key='nlmaps-grijs', name='NLMaps Grijs', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/grijs/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nlmaps-luchtfoto': TileProvider(key='nlmaps-luchtfoto', name='NLMaps Luchtfoto', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_orthoHR/EPSG:3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nlmaps-pastel': TileProvider(key='nlmaps-pastel', name='NLMaps Pastel', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/pastel/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nlmaps-standaard': TileProvider(key='nlmaps-standaard', name='NLMaps Standaard', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/standaard/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'nlmaps-water': TileProvider(key='nlmaps-water', name='NLMaps Water', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/water/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openaip': TileProvider(key='openaip', name='OpenAIP', attribution='© OpenAIP', html_attribution='© <a href="https://www.openaip.net/">OpenAIP</a>', url_template='https://api.tiles.openaip.net/api/data/openaip/{z}/{x}/{y}.png', zoom_min=4, zoom_max=14, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openfiremap': TileProvider(key='openfiremap', name='OpenFireMap', attribution='Map data: © OpenStreetMap contributors. Map style: © OpenFireMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="http://www.openfiremap.org/">OpenFireMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='http://openfiremap.org/hytiles/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openrailwaymap': TileProvider(key='openrailwaymap', name='OpenRailwayMap', attribution='Map data: © OpenStreetMap contributors. Map style: © OpenRailwayMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.openrailwaymap.org/">OpenRailwayMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'openseamap': TileProvider(key='openseamap', name='OpenSeaMap', attribution='Map data: © OpenSeaMap contributors', html_attribution='Map data: © <a href="https://www.openseamap.org/">OpenSeaMap contributors</a>', url_template='https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'opensnowmap': TileProvider(key='opensnowmap', name='OpenSnowMap', attribution='Map data: © OpenStreetMap contributors. Overlay: © OpenSnowMap', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://www.opensnowmap.org/">OpenSnowMap</a>', url_template='https://tiles.opensnowmap.org/pistes/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openstreetmap': TileProvider(key='openstreetmap', name='OpenStreetMap', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.openstreetmap.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openstreetmap-bzh': TileProvider(key='openstreetmap-bzh', name='OpenStreetMap BZH', attribution='Map data: © OpenStreetMap contributors. Tiles: © Breton OpenStreetMap Team', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Tiles: © <a href="https://www.openstreetmap.bzh/">Breton OpenStreetMap Team</a>', url_template='https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(-5.4, 46.2, -0.7, 48.9), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openstreetmap-ch': TileProvider(key='openstreetmap-ch', name='OpenStreetMap CH', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openstreetmap-de': TileProvider(key='openstreetmap-de', name='OpenStreetMap DE', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.openstreetmap.de/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'openstreetmap-france': TileProvider(key='openstreetmap-france', name='OpenStreetMap France', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'openstreetmap-hot': TileProvider(key='openstreetmap-hot', name='OpenStreetMap HOT', attribution='Map data: © OpenStreetMap contributors. Tiles style: © Humanitarian OpenStreetMap Team', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Tiles style: © <a href="https://www.hotosm.org/">Humanitarian OpenStreetMap Team</a>', url_template='https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'opentopomap': TileProvider(key='opentopomap', name='OpenTopoMap', attribution='Map data: © OpenStreetMap contributors, SRTM. Map style: © OpenTopoMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, <a href="https://www2.jpl.nasa.gov/srtm/">SRTM</a>. Map style: © <a href="https://opentopomap.org/">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=17, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'opnvkarte': TileProvider(key='opnvkarte', name='OPNVKarte', attribution='Map data: © OpenStreetMap contributors. Map style: © ÖPNVKarte', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.opnvkarte.de/">ÖPNVKarte</a>', url_template='https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'safecast': TileProvider(key='safecast', name='SafeCast', attribution='Map data: © OpenStreetMap contributors. Map style: © SafeCast', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://safecast.org/">SafeCast</a>', url_template='https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-alidadesmooth': TileProvider(key='stadia-alidadesmooth', name='Stadia AlidadeSmooth', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-alidasesatellite': TileProvider(key='stadia-alidasesatellite', name='Stadia AlidadeSatellite', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_satellite/{z}/{x}/{y}.jpg', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-alidasesmoothdark': TileProvider(key='stadia-alidasesmoothdark', name='Stadia AlidadeSmoothDark', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-osmbright': TileProvider(key='stadia-osmbright', name='Stadia OSMBright', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-outdoors': TileProvider(key='stadia-outdoors', name='Stadia Outdoors', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamenterrain': TileProvider(key='stadia-stamenterrain', name='Stadia StamenTerrain', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamenterrainbackground': TileProvider(key='stadia-stamenterrainbackground', name='Stadia StamenTerrainBackground', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_background/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamenterrainlabels': TileProvider(key='stadia-stamenterrainlabels', name='Stadia StamenTerrainLabels', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamenterrainlines': TileProvider(key='stadia-stamenterrainlines', name='Stadia StamenTerrainLines', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_lines/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamentoner': TileProvider(key='stadia-stamentoner', name='Stadia StamenToner', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamentonerbackground': TileProvider(key='stadia-stamentonerbackground', name='Stadia StamenTonerBackground', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_background/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamentonerlabels': TileProvider(key='stadia-stamentonerlabels', name='Stadia StamenTonerLabels', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamentonerlines': TileProvider(key='stadia-stamentonerlines', name='Stadia StamenTonerLines', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_lines/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamentonerlite': TileProvider(key='stadia-stamentonerlite', name='Stadia StamenTonerLite', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_lite/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'stadia-stamenwatercolor': TileProvider(key='stadia-stamenwatercolor', name='Stadia StamenWatercolor', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'swissfederalgeoportal-nationalmapcolor': TileProvider(key='swissfederalgeoportal-nationalmapcolor', name='SwissFederalGeoportal NationalMapColor', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'swissfederalgeoportal-nationalmapgrey': TileProvider(key='swissfederalgeoportal-nationalmapgrey', name='SwissFederalGeoportal NationalMapGrey', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-grau/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'swissfederalgeoportal-swissimage': TileProvider(key='swissfederalgeoportal-swissimage', name='SwissFederalGeoportal SWISSIMAGE', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=20, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), 'thunderforest-atlas': TileProvider(key='thunderforest-atlas', name='Thunderforest Atlas', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-landscape': TileProvider(key='thunderforest-landscape', name='Thunderforest Landscape', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-mobileatlas': TileProvider(key='thunderforest-mobileatlas', name='Thunderforest MobileAtlas', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-neighbourhood': TileProvider(key='thunderforest-neighbourhood', name='Thunderforest Neighbourhood', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-opencyclemap': TileProvider(key='thunderforest-opencyclemap', name='Thunderforest OpenCycleMap', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-outdoors': TileProvider(key='thunderforest-outdoors', name='Thunderforest Outdoors', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-pioneer': TileProvider(key='thunderforest-pioneer', name='Thunderforest Pioneer', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-spinalmap': TileProvider(key='thunderforest-spinalmap', name='Thunderforest SpinalMap', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-transport': TileProvider(key='thunderforest-transport', name='Thunderforest Transport', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'thunderforest-transport-dark': TileProvider(key='thunderforest-transport-dark', name='Thunderforest Transport Dark', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), 'tomtom-basic': TileProvider(key='tomtom-basic', name='TomTom Basic', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'tomtom-hybrid': TileProvider(key='tomtom-hybrid', name='TomTom Hybrid', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/hybrid/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'tomtom-labels': TileProvider(key='tomtom-labels', name='TomTom Labels', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/labels/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), 'usgs-usimagery': TileProvider(key='usgs-usimagery', name='USGS USImagery', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'usgs-usimagerytopo': TileProvider(key='usgs-usimagerytopo', name='USGS USImageryTopo', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'usgs-ustopo': TileProvider(key='usgs-ustopo', name='USGS USTopo', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-cycling': TileProvider(key='waymarkedtrails-cycling', name='Waymarked Trails Cycling', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://cycling.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-hiking': TileProvider(key='waymarkedtrails-hiking', name='Waymarked Trails Hiking', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://hiking.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-mtb': TileProvider(key='waymarkedtrails-mtb', name='Waymarked Trails MTB', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://mtb.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/mtb/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-riding': TileProvider(key='waymarkedtrails-riding', name='Waymarked Trails Riding', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://riding.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/riding/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-skating': TileProvider(key='waymarkedtrails-skating', name='Waymarked Trails Skating', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://skating.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/skating/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'waymarkedtrails-slopes': TileProvider(key='waymarkedtrails-slopes', name='Waymarked Trails Slopes', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://slopes.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/slopes/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), 'wikimedia': TileProvider(key='wikimedia', name='Wikimedia', attribution='Map data: © OpenStreetMap contributors. Map style: © Wikimedia Foundation', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://foundation.wikimedia.org/">Wikimedia Foundation</a>', url_template='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>)}

Map of tile provider keys to TileProvider instances.

papermap.tile_providers.TILE_PROVIDERS: list[TileProvider] = [TileProvider(key='basemapat', name='BasemapAT', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-grau', name='BasemapAT Grau', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapgrau/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-overlay', name='BasemapAT Overlay', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-terrain', name='BasemapAT Terrain', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapgelaende/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-surface', name='BasemapAT Surface', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmapoberflaeche/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-highdpi', name='BasemapAT Highdpi', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmaphidpi/normal/google3857/{z}/{y}/{x}.png', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='basemapat-orthofoto', name='BasemapAT Orthofoto', attribution='Basemap.at', html_attribution='<a href="https://basemap.at/">Basemap.at</a>', url_template='https://maps{s}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{z}/{y}/{x}.jpeg', zoom_min=0, zoom_max=19, bounds=(8.782379, 46.35877, 17.189532, 49.037872), subdomains=['', '1', '2', '3', '4'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-positron', name='CartoDB Positron', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-positronnolabels', name='CartoDB PositronNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-positrononlylabels', name='CartoDB PositronOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-darkmatter', name='CartoDB DarkMatter', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-darkmatter-nolabels', name='CartoDB DarkMatterNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-darkmatter-onlylabels', name='CartoDB DarkMatterOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/dark_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-voyager', name='CartoDB Voyager', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-voyager-nolabels', name='CartoDB VoyagerNoLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_nolabels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-voyager-onlylabels', name='CartoDB VoyagerOnlyLabels', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_only_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cartodb-voyager-labelsunder', name='CartoDB VoyagerLabelsUnder', attribution='© OpenStreetMap contributors, © CARTO', html_attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, © <a href="https://carto.com/attributions">CARTO</a>', url_template='https://{s}.basemaps.cartocdn.com/rastertiles/voyager_labels_under/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='cyclosm', name='CyclOSM', attribution='Map data: © OpenStreetMap contributors. Map style: © CyclOSM (hosted by OpenStreetMap France)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.cyclosm.org/">CyclOSM</a> (hosted by <a href="https://openstreetmap.fr/">OpenStreetMap France</a>)', url_template='https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldstreetmap', name='Esri WorldStreetMap', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=17, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-delorme', name='Esri DeLorme', attribution='Tiles © Esri DeLorme', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> DeLorme', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=11, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldtopomap', name='Esri WorldTopoMap', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldimagery', name='Esri WorldImagery', attribution='Tiles © Esri Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldterrain', name='Esri WorldTerrain', attribution='Tiles © Esri Source: USGS, Esri, TANA, DeLorme, and NPS', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: USGS, Esri, TANA, DeLorme, and NPS', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldshadedrelief', name='Esri WorldShadedRelief', attribution='Tiles © Esri Source: Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldphysical', name='Esri WorldPhysical', attribution='Tiles © Esri Source: US National Park Service', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: US National Park Service', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-oceanbasemap', name='Esri OceanBasemap', attribution='Tiles © Esri Source: Esri, GEBCO, NOAA, National Geographic, DeLorme, HERE, Geonames.org, and other contributors', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: Esri, GEBCO, NOAA, National Geographic, DeLorme, HERE, Geonames.org, and other contributors', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=13, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-natgeoworldmap', name='Esri NatGeoWorldMap', attribution='Tiles © Esri Source: National Geographic, Esri, DeLorme, HERE, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, increment P Corp.', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a> Source: National Geographic, Esri, DeLorme, HERE, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, increment P Corp.', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='esri-worldgraycanvas', name='Esri WorldGrayCanvas', attribution='Tiles © Esri', html_attribution='Tiles © <a href="https://www.esri.com/">Esri</a>', url_template='https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps', name='Google Maps', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps-satellite', name='Google Maps Satellite', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps-satellite-hybrid', name='Google Maps Satellite Hybrid', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=y&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps-terrain', name='Google Maps Terrain', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=t&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps-terrain-hybrid', name='Google Maps Terrain Hybrid', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='google-maps-roads', name='Google Maps Roads', attribution='Map data: © Google', html_attribution='Map data: © <a href="https://www.google.com/maps">Google</a>', url_template='https://mt{s}.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[0, 1, 2, 3], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalday', name='HERE normalDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaycustom', name='HERE normalDayCustom', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.custom/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaygrey', name='HERE normalDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaymobile', name='HERE normalDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaygreymobile', name='HERE normalDayGreyMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.grey.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaytransit', name='HERE normalDayTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normaldaytransitmobile', name='HERE normalDayTransitMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day.transit.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnight', name='HERE normalNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnightmobile', name='HERE normalNightMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnightgrey', name='HERE normalNightGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnightgreymobile', name='HERE normalNightGreyMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.grey.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnighttransit', name='HERE normalNightTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-normalnighttransitmobile', name='HERE normalNightTransitMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.night.transit.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-reducedday', name='HERE reducedDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/reduced.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-reducednight', name='HERE reducedNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/reduced.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-basicmap', name='HERE basicMap', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-maplabels', name='HERE mapLabels', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-trafficflow', name='HERE trafficFlow', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.traffic.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-carnavdaygrey', name='HERE carnavDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/carnav.day.grey/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-hybridday', name='HERE hybridDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-hybriddaymobile', name='HERE hybridDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-hybriddaytransit', name='HERE hybridDayTransit', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.day.transit/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-hybriddaygrey', name='HERE hybridDayGrey', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/hybrid.grey.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-pedestrianday', name='HERE pedestrianDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/pedestrian.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-pedestriannight', name='HERE pedestrianNight', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/pedestrian.night/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-satelliteday', name='HERE satelliteDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-terrainday', name='HERE terrainDay', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/terrain.day/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='here-terraindaymobile', name='HERE terrainDayMobile', attribution='Map data: © HERE', html_attribution='Map data: © <a href="https://www.here.com/">HERE</a>', url_template='https://{s}.aerial.maps.ls.hereapi.com/maptile/2.1/maptile/newest/terrain.day.mobile/{z}/{x}/{y}/256/png8?apiKey={a}', zoom_min=0, zoom_max=20, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-streets', name='Jawg Streets', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-streets/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-terrain', name='Jawg Terrain', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-terrain/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-sunny', name='Jawg Sunny', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-sunny/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-dark', name='Jawg Dark', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-dark/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-light', name='Jawg Light', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-light/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='jawg-matrix', name='Jawg Matrix', attribution='© Jawg Maps, © OpenStreetMap contributors', html_attribution='© <a href="https://www.jawg.io/">Jawg</a> Maps, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.jawg.io/jawg-matrix/{z}/{x}/{y}.png?access-token={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-streets', name='MapTiler Streets', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/streets-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-basic', name='MapTiler Basic', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/basic-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-bright', name='MapTiler Bright', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/bright-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-pastel', name='MapTiler Pastel', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/pastel/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-positron', name='MapTiler Positron', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/positron/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-hybrid', name='MapTiler Hybrid', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/hybrid/{z}/{x}/{y}.jpg?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-satellite', name='MapTiler Satellite', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/satellite-v2/{z}/{x}/{y}.jpg?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-toner', name='MapTiler Toner', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/toner-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-topo', name='MapTiler Topo', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/topo-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-winter', name='MapTiler Winter', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/winter-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='maptiler-outdoor', name='MapTiler Outdoor', attribution='© MapTiler, © OpenStreetMap contributors', html_attribution='© <a href="https://www.maptiler.com/copyright/">MapTiler</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://api.maptiler.com/maps/outdoor-v2/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=21, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='opnvkarte', name='OPNVKarte', attribution='Map data: © OpenStreetMap contributors. Map style: © ÖPNVKarte', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.opnvkarte.de/">ÖPNVKarte</a>', url_template='https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='mtbmap', name='MtbMap', attribution='Map data: © OpenStreetMap contributors, USGS. Map style: © mtbmap.cz', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a> & USGS. Map style: © <a href="https://mtbmap.cz/">mtbmap.cz</a>', url_template='http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='hikebike', name='HikeBike', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.wmflabs.org/hikebike/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='safecast', name='SafeCast', attribution='Map data: © OpenStreetMap contributors. Map style: © SafeCast', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://safecast.org/">SafeCast</a>', url_template='https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='geofabrik-topo', name='Geofabrik Topo', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='http://{s}.tile.geofabrik.de/15173cf79060ee4a66573954f6017ab0/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='mapy-cz', name='Mapy.cz', attribution='Map data: © OpenStreetMap contributors. Map style: © Seznam.cz', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.seznam.cz/">Seznam.cz</a>', url_template='https://m{s}.mapserver.mapy.cz/turist-m/{z}-{x}-{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=[1, 2, 3, 4], subdomains_cycle=<itertools.cycle object>), TileProvider(key='komoot', name='Komoot', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='http://{s}.tile.komoot.de/komoot-2/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='alltrails', name='AllTrails', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://alltrails.com/tiles/alltrailsOutdoors/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-hiking', name='Waymarked Trails Hiking', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://hiking.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-cycling', name='Waymarked Trails Cycling', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://cycling.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-mtb', name='Waymarked Trails MTB', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://mtb.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/mtb/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-slopes', name='Waymarked Trails Slopes', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://slopes.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/slopes/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-riding', name='Waymarked Trails Riding', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://riding.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/riding/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='waymarkedtrails-skating', name='Waymarked Trails Skating', attribution='Map data: © OpenStreetMap contributors. Overlay: © Waymarked Trails', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://skating.waymarkedtrails.org/">Waymarked Trails</a>', url_template='https://tile.waymarkedtrails.org/skating/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openaip', name='OpenAIP', attribution='© OpenAIP', html_attribution='© <a href="https://www.openaip.net/">OpenAIP</a>', url_template='https://api.tiles.openaip.net/api/data/openaip/{z}/{x}/{y}.png', zoom_min=4, zoom_max=14, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='opensnowmap', name='OpenSnowMap', attribution='Map data: © OpenStreetMap contributors. Overlay: © OpenSnowMap', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Overlay: © <a href="https://www.opensnowmap.org/">OpenSnowMap</a>', url_template='https://tiles.opensnowmap.org/pistes/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openrailwaymap', name='OpenRailwayMap', attribution='Map data: © OpenStreetMap contributors. Map style: © OpenRailwayMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://www.openrailwaymap.org/">OpenRailwayMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='openfiremap', name='OpenFireMap', attribution='Map data: © OpenStreetMap contributors. Map style: © OpenFireMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="http://www.openfiremap.org/">OpenFireMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='http://openfiremap.org/hytiles/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterratruecolorcr', name='NASAGIBS ModisTerraTrueColorCR', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_TrueColor/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=9, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterrabands367cr', name='NASAGIBS ModisTerraBands367CR', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_CorrectedReflectance_Bands367/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=9, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-viirsearthatnight2012', name='NASAGIBS ViirsEarthAtNight2012', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/VIIRS_CityLights_2012/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.jpg', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterralstday', name='NASAGIBS ModisTerraLSTDay', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Land_Surface_Temp_Day/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=7, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterrasnowcover', name='NASAGIBS ModisTerraSnowCover', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_NDSI_Snow_Cover/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=8, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterraaod', name='NASAGIBS ModisTerraAOD', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Aerosol/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=6, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nasagibs-modisterrachlorophyll', name='NASAGIBS ModisTerraChlorophyll', attribution='Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ', html_attribution='Imagery provided by services from the <a href="https://earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/gibs">GIBS</a>, operated by the NASA/GSFC/Earth Science Data and Information System (<a href="https://earthdata.nasa.gov/">ESDIS</a>) with funding provided by NASA/HQ', url_template='https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Chlorophyll_A/default/GoogleMapsCompatible_Level/{z}/{y}/{x}.png', zoom_min=0, zoom_max=7, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nlmaps-standaard', name='NLMaps Standaard', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/standaard/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nlmaps-pastel', name='NLMaps Pastel', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/pastel/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nlmaps-grijs', name='NLMaps Grijs', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/grijs/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nlmaps-water', name='NLMaps Water', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/water/EPSG:3857/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='nlmaps-luchtfoto', name='NLMaps Luchtfoto', attribution='Kaartgegevens © Kadaster', html_attribution='Kaartgegevens © <a href="https://www.kadaster.nl/">Kadaster</a>', url_template='https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_orthoHR/EPSG:3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=19, bounds=(3.37, 50.75, 7.21, 53.47), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openseamap', name='OpenSeaMap', attribution='Map data: © OpenSeaMap contributors', html_attribution='Map data: © <a href="https://www.openseamap.org/">OpenSeaMap contributors</a>', url_template='https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap', name='OpenStreetMap', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.openstreetmap.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap-de', name='OpenStreetMap DE', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.openstreetmap.de/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap-ch', name='OpenStreetMap CH', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tile.osm.ch/switzerland/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap-france', name='OpenStreetMap France', attribution='Map data: © OpenStreetMap contributors', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap-hot', name='OpenStreetMap HOT', attribution='Map data: © OpenStreetMap contributors. Tiles style: © Humanitarian OpenStreetMap Team', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Tiles style: © <a href="https://www.hotosm.org/">Humanitarian OpenStreetMap Team</a>', url_template='https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='openstreetmap-bzh', name='OpenStreetMap BZH', attribution='Map data: © OpenStreetMap contributors. Tiles: © Breton OpenStreetMap Team', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Tiles: © <a href="https://www.openstreetmap.bzh/">Breton OpenStreetMap Team</a>', url_template='https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=(-5.4, 46.2, -0.7, 48.9), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='opentopomap', name='OpenTopoMap', attribution='Map data: © OpenStreetMap contributors, SRTM. Map style: © OpenTopoMap (CC-BY-SA)', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>, <a href="https://www2.jpl.nasa.gov/srtm/">SRTM</a>. Map style: © <a href="https://opentopomap.org/">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', url_template='https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', zoom_min=0, zoom_max=17, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-alidadesmooth', name='Stadia AlidadeSmooth', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-alidasesmoothdark', name='Stadia AlidadeSmoothDark', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-alidasesatellite', name='Stadia AlidadeSatellite', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/alidade_satellite/{z}/{x}/{y}.jpg', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-osmbright', name='Stadia OSMBright', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-outdoors', name='Stadia Outdoors', attribution='© Stadia Maps, © OpenMapTiles, © OpenStreetMap contributors', html_attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a>, © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamentoner', name='Stadia StamenToner', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamentonerbackground', name='Stadia StamenTonerBackground', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_background/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamentonerlines', name='Stadia StamenTonerLines', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_lines/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamentonerlabels', name='Stadia StamenTonerLabels', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamentonerlite', name='Stadia StamenTonerLite', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_toner_lite/{z}/{x}/{y}.png', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamenwatercolor', name='Stadia StamenWatercolor', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg', zoom_min=0, zoom_max=16, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamenterrain', name='Stadia StamenTerrain', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamenterrainbackground', name='Stadia StamenTerrainBackground', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_background/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamenterrainlabels', name='Stadia StamenTerrainLabels', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_labels/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='stadia-stamenterrainlines', name='Stadia StamenTerrainLines', attribution='Map tiles by Stamen Design, under CC BY 4.0. Data by OpenStreetMap, under ODbL', html_attribution='Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Data by <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, under <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>', url_template='https://tiles.stadiamaps.com/tiles/stamen_terrain_lines/{z}/{x}/{y}.png', zoom_min=0, zoom_max=18, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='swissfederalgeoportal-nationalmapcolor', name='SwissFederalGeoportal NationalMapColor', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='swissfederalgeoportal-nationalmapgrey', name='SwissFederalGeoportal NationalMapGrey', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-grau/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=18, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='swissfederalgeoportal-swissimage', name='SwissFederalGeoportal SWISSIMAGE', attribution='© swisstopo', html_attribution='© <a href="https://www.swisstopo.admin.ch/">swisstopo</a>', url_template='https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeg', zoom_min=0, zoom_max=20, bounds=(5.140242, 45.398181, 11.47757, 48.230651), subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-opencyclemap', name='Thunderforest OpenCycleMap', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-transport', name='Thunderforest Transport', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-transport-dark', name='Thunderforest Transport Dark', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-spinalmap', name='Thunderforest SpinalMap', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-landscape', name='Thunderforest Landscape', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-outdoors', name='Thunderforest Outdoors', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-pioneer', name='Thunderforest Pioneer', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-mobileatlas', name='Thunderforest MobileAtlas', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-neighbourhood', name='Thunderforest Neighbourhood', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='thunderforest-atlas', name='Thunderforest Atlas', attribution='Maps © Thunderforest, Data © OpenStreetMap contributors', html_attribution='Maps © <a href="https://www.thunderforest.com/">Thunderforest</a>, Data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>', url_template='https://{s}.tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='tomtom-basic', name='TomTom Basic', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='tomtom-hybrid', name='TomTom Hybrid', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/hybrid/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='tomtom-labels', name='TomTom Labels', attribution='© TomTom', html_attribution='© <a href="https://tomtom.com/">TomTom</a>', url_template='https://{s}.api.tomtom.com/map/1/tile/labels/main/{z}/{x}/{y}.png?key={a}', zoom_min=0, zoom_max=22, bounds=None, subdomains=['a', 'b', 'c', 'd'], subdomains_cycle=<itertools.cycle object>), TileProvider(key='usgs-ustopo', name='USGS USTopo', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='usgs-usimagery', name='USGS USImagery', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='usgs-usimagerytopo', name='USGS USImageryTopo', attribution='Tiles courtesy of the U.S. Geological Survey', html_attribution='Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>', url_template='https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}', zoom_min=0, zoom_max=20, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>), TileProvider(key='wikimedia', name='Wikimedia', attribution='Map data: © OpenStreetMap contributors. Map style: © Wikimedia Foundation', html_attribution='Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>. Map style: © <a href="https://foundation.wikimedia.org/">Wikimedia Foundation</a>', url_template='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png', zoom_min=0, zoom_max=19, bounds=None, subdomains=None, subdomains_cycle=<itertools.cycle object>)]

List of all available TileProvider instances.

papermap.tile_providers.TILE_PROVIDER_KEYS = ['alltrails', 'basemapat', 'basemapat-grau', 'basemapat-highdpi', 'basemapat-orthofoto', 'basemapat-overlay', 'basemapat-surface', 'basemapat-terrain', 'cartodb-darkmatter', 'cartodb-darkmatter-nolabels', 'cartodb-darkmatter-onlylabels', 'cartodb-positron', 'cartodb-positronnolabels', 'cartodb-positrononlylabels', 'cartodb-voyager', 'cartodb-voyager-labelsunder', 'cartodb-voyager-nolabels', 'cartodb-voyager-onlylabels', 'cyclosm', 'esri-delorme', 'esri-natgeoworldmap', 'esri-oceanbasemap', 'esri-worldgraycanvas', 'esri-worldimagery', 'esri-worldphysical', 'esri-worldshadedrelief', 'esri-worldstreetmap', 'esri-worldterrain', 'esri-worldtopomap', 'geofabrik-topo', 'google-maps', 'google-maps-roads', 'google-maps-satellite', 'google-maps-satellite-hybrid', 'google-maps-terrain', 'google-maps-terrain-hybrid', 'here-basicmap', 'here-carnavdaygrey', 'here-hybridday', 'here-hybriddaygrey', 'here-hybriddaymobile', 'here-hybriddaytransit', 'here-maplabels', 'here-normalday', 'here-normaldaycustom', 'here-normaldaygrey', 'here-normaldaygreymobile', 'here-normaldaymobile', 'here-normaldaytransit', 'here-normaldaytransitmobile', 'here-normalnight', 'here-normalnightgrey', 'here-normalnightgreymobile', 'here-normalnightmobile', 'here-normalnighttransit', 'here-normalnighttransitmobile', 'here-pedestrianday', 'here-pedestriannight', 'here-reducedday', 'here-reducednight', 'here-satelliteday', 'here-terrainday', 'here-terraindaymobile', 'here-trafficflow', 'hikebike', 'jawg-dark', 'jawg-light', 'jawg-matrix', 'jawg-streets', 'jawg-sunny', 'jawg-terrain', 'komoot', 'maptiler-basic', 'maptiler-bright', 'maptiler-hybrid', 'maptiler-outdoor', 'maptiler-pastel', 'maptiler-positron', 'maptiler-satellite', 'maptiler-streets', 'maptiler-toner', 'maptiler-topo', 'maptiler-winter', 'mapy-cz', 'mtbmap', 'nasagibs-modisterraaod', 'nasagibs-modisterrabands367cr', 'nasagibs-modisterrachlorophyll', 'nasagibs-modisterralstday', 'nasagibs-modisterrasnowcover', 'nasagibs-modisterratruecolorcr', 'nasagibs-viirsearthatnight2012', 'nlmaps-grijs', 'nlmaps-luchtfoto', 'nlmaps-pastel', 'nlmaps-standaard', 'nlmaps-water', 'openaip', 'openfiremap', 'openrailwaymap', 'openseamap', 'opensnowmap', 'openstreetmap', 'openstreetmap-bzh', 'openstreetmap-ch', 'openstreetmap-de', 'openstreetmap-france', 'openstreetmap-hot', 'opentopomap', 'opnvkarte', 'safecast', 'stadia-alidadesmooth', 'stadia-alidasesatellite', 'stadia-alidasesmoothdark', 'stadia-osmbright', 'stadia-outdoors', 'stadia-stamenterrain', 'stadia-stamenterrainbackground', 'stadia-stamenterrainlabels', 'stadia-stamenterrainlines', 'stadia-stamentoner', 'stadia-stamentonerbackground', 'stadia-stamentonerlabels', 'stadia-stamentonerlines', 'stadia-stamentonerlite', 'stadia-stamenwatercolor', 'swissfederalgeoportal-nationalmapcolor', 'swissfederalgeoportal-nationalmapgrey', 'swissfederalgeoportal-swissimage', 'thunderforest-atlas', 'thunderforest-landscape', 'thunderforest-mobileatlas', 'thunderforest-neighbourhood', 'thunderforest-opencyclemap', 'thunderforest-outdoors', 'thunderforest-pioneer', 'thunderforest-spinalmap', 'thunderforest-transport', 'thunderforest-transport-dark', 'tomtom-basic', 'tomtom-hybrid', 'tomtom-labels', 'usgs-usimagery', 'usgs-usimagerytopo', 'usgs-ustopo', 'waymarkedtrails-cycling', 'waymarkedtrails-hiking', 'waymarkedtrails-mtb', 'waymarkedtrails-riding', 'waymarkedtrails-skating', 'waymarkedtrails-slopes', 'wikimedia']

List of tile provider keys.

papermap.utils Module

papermap.utils.C: int = 40075017

Earth’s equatorial circumference in meters.

papermap.utils.DEFAULT_DPI: int = 300

Default dots per inch.

papermap.utils.clip(val, lower, upper)

Clips a value to [lower, upper] range.

Parameters:
  • val (float) – The value.

  • lower (float) – The lower bound.

  • upper (float) – The upper bound.

Returns:

The value clipped to [lower, upper] range.

Return type:

float

papermap.utils.lon_to_x(lon, zoom)

Converts longitude to x (tile coordinate), given a zoom level.

Parameters:
  • lon (float) – The longitude.

  • zoom (int) – The zoom level.

Returns:

The x (tile coordinate).

Return type:

float

papermap.utils.x_to_lon(x, zoom)

Converts x (tile coordinate) to longitude, given a zoom level.

Parameters:
  • x (float) – The tile coordinate.

  • zoom (int) – The zoom level.

Returns:

The longitude.

Return type:

float

papermap.utils.lat_to_y(lat, zoom)

Converts latitude to y (tile coordinate), given a zoom level.

Parameters:
  • lat (float) – The latitude.

  • zoom (int) – The zoom level.

Returns:

The y (tile coordinate).

Return type:

float

papermap.utils.y_to_lat(y, zoom)

Converts y (tile coordinate) to latitude, given a zoom level.

Parameters:
  • y (float) – The tile coordinate.

  • zoom (int) – The zoom level.

Returns:

The latitude.

Return type:

float

papermap.utils.x_to_px(x, x_center, width, tile_size=256)

Convert x (tile coordinate) to pixels.

Parameters:
  • x (int) – The tile coordinate.

  • x_center (int) – Tile coordinate of the center tile.

  • width (int) – The image width.

  • tile_size (int) – The tile size. Defaults to 256.

Returns:

The pixels.

Return type:

int

papermap.utils.y_to_px(y, y_center, height, tile_size=256)

Convert y (tile coordinate) to pixel.

Parameters:
  • y (int) – The tile coordinate.

  • y_center (int) – Tile coordinate of the center tile.

  • height (int) – The image height.

  • tile_size (int) – The tile size. Defaults to 256.

Returns:

The pixels.

Return type:

int

papermap.utils.mm_to_px(mm, dpi=300)

Convert millimeters to pixels, given the dpi.

Parameters:
  • mm (float) – The millimeters.

  • dpi (int) – Dots per inch. Defaults to 300.

Returns:

The pixels.

Return type:

int

papermap.utils.px_to_mm(px, dpi=300)

Convert pixels to millimeters, given the dpi.

Parameters:
  • px (float) – The pixels.

  • dpi (int) – Dots per inch. Defaults to 300.

Returns:

The millimeters.

Return type:

float

papermap.utils.mm_to_pt(mm)

Convert millimeters to points.

Parameters:

mm (float) – The millimeters.

Returns:

The points.

Return type:

float

papermap.utils.pt_to_mm(pt)

Convert points to millimeters.

Parameters:

pt (float) – The points.

Returns:

The millimeters.

Return type:

float

papermap.utils.dd_to_dms(dd)

Convert Decimal Degrees (DD) to Degrees, Minutes, and Seconds (DMS).

Parameters:

dd (float) – The Decimal Degrees.

Returns:

The Degrees, Minutes, and Seconds.

Return type:

tuple[int, int, float]

papermap.utils.dms_to_dd(dms)

Convert Degrees, Minutes, and Seconds (DMS) to Decimal Degrees (DD).

Parameters:

dms (tuple[int, int, float]) – The Degrees, Minutes, and Seconds.

Returns:

The Decimal Degrees.

Return type:

float

papermap.utils.scale_to_zoom(scale, lat, dpi=300)

Compute the zoom level, given the latitude, scale and dpi.

Parameters:
  • scale (int) – The scale.

  • lat (float) – The latitude.

  • dpi (int) – Dots per inch. Defaults to 300.

Returns:

The zoom level.

Return type:

float

papermap.utils.zoom_to_scale(zoom, lat, dpi=300)

Compute the scale, given the latitude, zoom level and dpi.

Parameters:
  • zoom (float) – The zoom level (integer or fractional).

  • lat (float) – The latitude.

  • dpi (int) – Dots per inch. Defaults to 300.

Returns:

The scale.

Return type:

float

papermap.utils.get_string_formatting_arguments(s)

Extracts field names from a format string.

Parameters:

s (str) – A format string (e.g., “{name} is {age}”).

Returns:

List of field names found in the format string.

Return type:

list[str]

papermap.utils.is_out_of_bounds(test, bounds)

Checks if a bounding box exceeds the specified bounds.

Parameters:
  • test (dict[str, float]) – Bounding box with keys ‘lat_min’, ‘lat_max’, ‘lon_min’, ‘lon_max’.

  • bounds (dict[str, float]) – Reference bounds with the same keys.

Returns:

True if test exceeds bounds in any direction, False otherwise.

Return type:

bool

papermap.utils.drange(start, stop, step)

Yields Decimal values from start to stop with the given step size.

Parameters:
  • start (Decimal) – The first value to yield.

  • stop (Decimal) – The upper bound (exclusive).

  • step (Decimal) – The increment applied on each iteration.

Yields:

Decimal values in the range [start, stop) incremented by step.