diff --git a/map/slippy/index.html b/map/slippy/index.html index f0c4aee30..1da0b073a 100644 --- a/map/slippy/index.html +++ b/map/slippy/index.html @@ -7,7 +7,7 @@ - + diff --git a/map/test/3rd-party/index.html b/map/test/3rd-party/index.html new file mode 100644 index 000000000..afcc2b2e4 --- /dev/null +++ b/map/test/3rd-party/index.html @@ -0,0 +1,203 @@ + + + + + + OpenLayers - 3rd party + + + + + + + + + + + + + + + + + +
+
+

Useful 3rd party libraries

+

+ The libraries below provide additional functionality by extending OpenLayers or integrating well with it. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LibraryDescriptionMaintainer
OL-CesiumCesium integration library.OpenLayers
ol-mapbox-styleCreate OpenLayers maps from Mapbox Style objects.OpenLayers
OL-LayerSwitcherLayer control for OpenLayers.Matt Walker
OL-PopupBasic popup overlay for OpenLayers.Matt Walker
JSTSJavaScript Topology Suite.Björn Harrtell
OL-GeocoderGeocoder Nominatim for OpenLayers.Jonatas Walker
OL3-PhotonPhoton geocoder for OpenLayers.Thomas Gratier
ol-opencage-geosearchOpenCage GeoSearch for OpenLayers.OpenCage
OL-ContextMenuCustom Context Menu for OpenLayers.Jonatas Walker
OL-Google-MapsGoogle Maps integration library.Mapgears
OL3-PanZoomPanZoom and PanZoomBar controls for OpenLayers.Mapgears
OL-ExtMiscellaneous classes and functions for OpenLayers.Jean-Marc Viglino
OL3-Projection-SwitcherAn OpenLayers Control to switch between projections.NSIDC
OléIntegration of OpenLayers and Esri ArcGIS REST services.Boundless
React OpenLayersA minimal React wrapper of OpenLayers 3+ written in TypeScriptAllen Kim
GWT-OpenLayers 3+A GWT wrapper for OpenLayers 3+ written in JavaTino Desjardins
react-geoA set of geo related modules to use in combination with React, Ant Design UI and OpenLayersterrestris
ol-opacityA layer switcher control with opacity sliders for overlays.dayjournal
ol-gridA dynamic grid for OpenLayers - intended for use as part of advanced snapping controls.Symbioquine
vue3-openlayersvue3-openlayers is a components library that brings the power of OpenLayers to the Vue3 reactive world.Melih Altıntaş
ol-marker-featureThe OpenLayers Marker Feature plugin provides an easy way to add markers to a map and associate them with popups, e.g. using OL-Popup.Andreas Hocevar
OL STACSTAC support for OpenLayers. Automatically fills an OpenLayers LayerGroup with data extracted from various STAC entities, e.g. geometry and imagery.Matthias Mohr
+
+ +
+ + + + diff --git a/map/test/doc/errors/index.html b/map/test/doc/errors/index.html new file mode 100644 index 000000000..e6aa0d63d --- /dev/null +++ b/map/test/doc/errors/index.html @@ -0,0 +1,197 @@ + + + + + + OpenLayers - Errors + + + + + + + + + + + + + + + + + +
+

Errors

+

1

+

The view center is not defined.

+

2

+

The view resolution is not defined.

+

3

+

The view rotation is not defined.

+

4

+

image and src cannot be provided at the same time.

+

5

+

imgSize must be set when image is provided.

+

6

+

A defined and non-empty src or image must be provided.

+

7

+

format must be set when url is set.

+

8

+

Unknown serverType configured.

+

9

+

url must be configured or set using #setUrl().

+

10

+

The default geometryFunction can only handle ol/geom/Point geometries.

+

11

+

options.featureTypes must be an Array.

+

12

+

options.geometryName must also be provided when options.bbox is set.

+

13

+

Invalid corner. Valid corners are top-left, top-right, bottom-right and bottom-left.

+

14

+

Invalid color. Valid colors are all CSS colors.

+

15

+

Tried to get a value for a key that does not exist in the cache.

+

16

+

Tried to set a value for a key that is used already.

+

17

+

resolutions must be sorted in descending order.

+

18

+

Either origin or origins must be configured, never both.

+

19

+

Number of tileSizes and resolutions must be equal.

+

20

+

Number of origins and resolutions must be equal.

+

22

+

Either tileSize or tileSizes must be configured, never both.

+

24

+

Invalid extent or geometry provided as geometry.

+

25

+

Cannot fit empty extent provided as geometry.

+

26

+

Features for deletes must have an id set by the feature reader or ol.Feature#setId().

+

27

+

Features for updates must have an id set by the feature reader or ol.Feature#setId().

+

28

+

renderMode must be 'hybrid' or 'vector'.

+

30

+

The passed feature was already added to the source.

+

31

+

Tried to enqueue an element that was already added to the queue.

+

32

+

Transformation matrix cannot be inverted.

+

33

+

Invalid units. 'degrees', 'imperial', 'nautical', 'metric' or 'us' required.

+

34

+

Invalid geometry layout. Must be XY, XYZ, XYM or XYZM.

+

36

+

Unknown SRS type. Expected "name".

+

37

+

Unknown geometry type found. Expected 'Point', 'LineString', 'Polygon' or 'GeometryCollection'.

+

38

+

styleMapValue has an unknown type.

+

39

+

Unknown geometry type found. Expected 'GeometryCollection', 'MultiPoint', 'MultiLineString' or 'MultiPolygon'.

+

40

+

Expected feature to have a geometry.

+

41

+

Expected an ol.style.Style or an array of ol.style.Style.

+

43

+

Expected layers to be an array or an ol.Collection.

+

47

+

Expected controls to be an array or an ol.Collection.

+

48

+

Expected interactions to be an array or an ol.Collection.

+

49

+

Expected overlays to be an array or an ol.Collection.

+

50

+

Cannot determine Rest Service from url.

+

51

+

Either url or tileJSON options must be provided.

+

52

+

Unknown serverType configured.

+

53

+

Unknown tierSizeCalculation configured.

+

55

+

The {-y} placeholder requires a tile grid with extent.

+

56

+

mapBrowserEvent must originate from a pointer event.

+

57

+

At least 2 conditions are required.

+

58

+

Duplicate item added to a unique collection. For example, it may be that you tried to add the same layer to a map twice. Check for calls to map.addLayer() or other places where the map's layer collection is modified.

+

59

+

Invalid command found in the PBF. This indicates that the loaded vector tile may be corrupt.

+

60

+

Missing or invalid size.

+

61

+

Cannot determine IIIF Image API version from provided image information JSON.

+

62

+

A WebGLArrayBuffer must either be of type ELEMENT_ARRAY_BUFFER or ARRAY_BUFFER.

+

64

+

Layer opacity must be a number.

+

66

+

forEachFeatureAtCoordinate cannot be used on a WebGL layer if the hit detection logic has not been enabled.

+

67

+

A layer can only be added to the map once. Use either layer.setMap() or map.addLayer(), not both.

+

68

+

Data from this source can only be rendered if it has a projection compatible with the view projection.

+ +
+ + + + diff --git a/map/test/doc/faq.html b/map/test/doc/faq.html new file mode 100644 index 000000000..7c3a4c9f1 --- /dev/null +++ b/map/test/doc/faq.html @@ -0,0 +1,398 @@ + + + + + + OpenLayers - Frequently Asked Questions (FAQ) + + + + + + + + + + + + + + + + + +
+

Frequently Asked Questions (FAQ)

+

Certain questions arise more often than others when users ask for help. This +document tries to list some of the common questions that frequently get asked, +e.g. on Stack Overflow.

+

If you think a question (and naturally its answer) should be added here, feel +free to ping us or to send a pull request enhancing this document.

+

Table of contents:

+ +

What projection is OpenLayers using?

+

Every map that you'll create with OpenLayers will have a view, and every view +will have a projection. As the earth is three-dimensional and round but the 2D +view of a map isn't, we need a mathematical expression to represent it. Enter +projections.

+

There isn't only one projection, but there are many common ones. Each projection +has different properties, in that it accurately represents distances, angles or +areas. Certain projections are better suited for different regions in the world.

+

Back to the original question: OpenLayers is capable of dealing with most +projections. If you do not explicitly set one, your map is going to use our +default which is the Web Mercator projection (EPSG:3857). The same projection is +used e.g. for the maps of the OpenStreetMap-project and commercial products such +as Bing Maps or Google Maps.

+

This projection is a good choice if you want a map which shows the whole world, +and you may need to have this projection if you want to e.g. use the +OpenStreetMap or Bing tiles.

+

How do I change the projection of my map?

+

There is a good chance that you want to change the default projection of +OpenLayers to something more appropriate for your region or your specific data.

+

The projection of your map can be set through the view-property. Here are some +examples:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+
+// OpenLayers comes with support for the World Geodetic System 1984, EPSG:4326:
+const map = new Map({
+  view: new View({
+    projection: 'EPSG:4326'
+    // other view properties like map center etc.
+  })
+  // other properties for your map like layers etc.
+});
+
+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import proj4 from 'proj4';
+import {register} from 'ol/proj/proj4.js';
+import {get as getProjection} from 'ol/proj.js';
+
+// To use other projections, you have to register the projection in OpenLayers.
+// This can easily be done with [http://proj4js.org/](proj4)
+//
+// By default OpenLayers does not know about the EPSG:21781 (Swiss) projection.
+// So we create a projection instance for EPSG:21781 and pass it to
+// register to make it available to the library for lookup by its
+// code.
+proj4.defs('EPSG:21781',
+  '+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 ' +
+  '+x_0=600000 +y_0=200000 +ellps=bessel ' +
+  '+towgs84=660.077,13.551,369.344,2.484,1.783,2.939,5.66 +units=m +no_defs');
+register(proj4);
+const swissProjection = getProjection('EPSG:21781');
+
+// we can now use the projection:
+const map = new Map({
+  view: new View({
+    projection: swissProjection
+    // other view properties like map center etc.
+  })
+  // other properties for your map like layers etc.
+});
+
+

We recommend to lookup parameters of your projection (like the validity extent) +over at epsg.io.

+

Why is my map centered on the gulf of guinea (or africa, the ocean, null-island)?

+

If you have set a center in your map view, but don't see a real change in visual +output, chances are that you have provided the coordinates of the map center in +the wrong (a non-matching) projection.

+

As the default projection in OpenLayers is Web Mercator (see above), the +coordinates for the center have to be provided in that projection. Chances are +that your map looks like this:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+
+const washingtonLonLat = [-77.036667, 38.895];
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: washingtonLonLat,
+    zoom: 12
+  })
+});
+
+

Here [-77.036667, 38.895] is provided as the center of the view. But as Web +Mercator is a metric projection, you are currently telling OpenLayers that the +center shall be some meters (~77m and ~39m respectively) away from [0, 0]. In +the Web Mercator projection the coordinate is right in the gulf of guinea.

+

The solution is easy: Provide the coordinates projected into Web Mercator. +OpenLayers has some helpful utility methods to assist you:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const washingtonLonLat = [-77.036667, 38.895];
+const washingtonWebMercator = fromLonLat(washingtonLonLat);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: washingtonWebMercator,
+    zoom: 8
+  })
+});
+
+

The method fromLonLat() is available from version 3.5 onwards.

+

If you told OpenLayers about a custom projection (see above), you can use the +following method to transform a coordinate from WGS84 to your projection:

+
import {transform} from 'ol/proj.js';
+// assuming that OpenLayers knows about EPSG:21781, see above
+const swissCoord = transform([8.23, 46.86], 'EPSG:4326', 'EPSG:21781');
+
+

Why is the order of a coordinate [lon,lat], and not [lat,lon]?

+

Because of two different and incompatible conventions. Latitude and longitude +are normally given in that order. Maps are 2D representations/projections +of the earth's surface, with coordinates expressed in the x,y grid of the +Cartesian system. +As they are by convention drawn with west on the left and north at the top, +this means that x represents longitude, and y latitude. As stated above, +OpenLayers is designed to handle all projections, but the default view is in +projected Cartesian coordinates. It would make no sense to have duplicate +functions to handle coordinates in both the Cartesian x,y and lat,lon +systems, so the degrees of latitude and longitude should be entered as though +they were Cartesian, in other words, they are lon,lat.

+

If you have difficulty remembering which way round it is, use the language code +for English, en, as a mnemonic: East before North.

+

A practical example

+

So you want to center your map on a certain place on the earth and obviously you +need to have its coordinates for this. Let's assume you want your map centered +on Schladming, a beautiful place in Austria. Head over to the wikipedia +page for Schladming. In the top-right +corner there is a link to GeoHack, +which effectively tells you the coordinates are:

+
WGS84:
+47° 23′ 39″ N, 13° 41′ 21″ E
+47.394167, 13.689167
+
+

So the next step would be to put the decimal coordinates into an array and use +it as center:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const schladming = [47.394167, 13.689167]; // caution partner, read on...
+// since we are using OSM, we have to transform the coordinates...
+const schladmingWebMercator = fromLonLat(schladming);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: schladmingWebMercator,
+    zoom: 9
+  })
+});
+
+

Running the above example will possibly surprise you, since we are not centered +on Schladming, Austria, but instead on Abyan, a region in Yemen (possibly also a +nice place). So what happened?

+

Many people mix up the order of longitude and latitude in a coordinate array. +Don't worry if you get it wrong at first, many OpenLayers developers have to +think twice about whether to put the longitude or the latitude first when they +e.g. try to change the map center.

+

Ok, then let's flip the coordinates:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const schladming = [13.689167, 47.394167]; // longitude first, then latitude
+// since we are using OSM, we have to transform the coordinates...
+const schladmingWebMercator = fromLonLat(schladming);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: schladmingWebMercator,
+    zoom: 9
+  })
+});
+
+

Schladming is now correctly displayed in the center of the map.

+

So when you deal with EPSG:4326 coordinates in OpenLayers, put the longitude +first, and then the latitude. This behaviour is the same as we had in OpenLayers +2, and it actually makes sense because of the natural axis order in WGS84.

+

If you cannot remember the correct order, just have a look at the method name +we used: fromLonLat; even there we hint that we expect longitude +first, and then latitude.

+

Why aren't there any features in my source?

+

Suppose you want to load a KML file and display the contained features on the +map. Code like the following could be used:

+
import VectorLayer from 'ol/layer/Vector.js';
+import KMLSource from 'ol/source/KML.js';
+
+const vector = new VectorLayer({
+  source: new KMLSource({
+    projection: 'EPSG:3857',
+    url: 'data/kml/2012-02-10.kml'
+  })
+});
+
+

You may ask yourself how many features are in that KML, and try something like +the following:

+
import VectorLayer from 'ol/layer/Vector.js';
+import KMLSource from 'ol/source/KML.js';
+
+const vector = new VectorLayer({
+  source: new KMLSource({
+    projection: 'EPSG:3857',
+    url: 'data/kml/2012-02-10.kml'
+  })
+});
+const numFeatures = vector.getSource().getFeatures().length;
+console.log("Count right after construction: " + numFeatures);
+
+

This will log a count of 0 features to be in the source. This is because the +loading of the KML-file will happen in an asynchronous manner. To get the count +as soon as possible (right after the file has been fetched and the source has +been populated with features), you should use an event listener function on the +source:

+
vector.getSource().on('change', function(evt){
+  const source = evt.target;
+  if (source.getState() === 'ready') {
+    const numFeatures = source.getFeatures().length;
+    console.log("Count after change: " + numFeatures);
+  }
+});
+
+

This will correctly report the number of features, 1119 in that particular +case.

+

How do I force a re-render of the map?

+

Usually the map is automatically re-rendered, once a source changes (for example +when a remote source has loaded).

+

If you actually want to manually trigger a rendering, you could use

+
map.render();
+
+

...or its companion method

+
map.renderSync();
+
+

Why are my features not found?

+

You are using Map#forEachFeatureAtPixel or Map#hasFeatureAtPixel, but +it sometimes does not work for large icons or labels? The hit detection only +checks features that are within a certain distance of the given position. For large +icons, the actual geometry of a feature might be too far away and is not considered.

+

In this case, set the renderBuffer property of VectorLayer (the default value is 100px):

+
import VectorLayer from 'ol/layer/Vector.js';
+
+const vectorLayer = new VectorLayer({
+  ...
+  renderBuffer: 200
+});
+
+

The recommended value is the size of the largest symbol, line width or label.

+

Why is zooming or clicking in the map off/inaccurate?

+

OpenLayers does not update the map when the container element is resized. This can be caused by progressive updates +to CSS styles or manually resizing the map. When that happens, any interaction will become inaccurate: the map would zoom in and out, and end up not being centered on the pointer. This makes it hard to do certain interactions, e.g. selecting the desired feature.

+

There is currently no built-in way to react to element's size changes, as Resize Observer API is only implemented in Chrome.

+

There is however an easy to use polyfill:

+
import Map from 'ol/Map.js';
+import ResizeObserver from 'resize-observer-polyfill';
+
+const mapElement = document.querySelector('#map')
+const map = new Map({
+  target: mapElement
+})
+
+const sizeObserver = new ResizeObserver(() => {
+  map.updateSize()
+})
+sizeObserver.observe(mapElement)
+
+// called when the map is destroyed
+// sizeObserver.disconnect()
+
+ +
+ + + + diff --git a/map/test/doc/index.html b/map/test/doc/index.html new file mode 100644 index 000000000..d64369029 --- /dev/null +++ b/map/test/doc/index.html @@ -0,0 +1,91 @@ + + + + + + OpenLayers - Documentation + + + + + + + + + + + + + + + + + +
+

Documentation

+

If you're eager to get your first OpenLayers map on a page, dive into the quick start.

+

For a more in-depth overview of OpenLayers core concepts, check out the tutorials.

+

Make sure to also check out the OpenLayers workshop.

+

Find additional reference material in the API docs and examples.

+

Frequently Asked Questions (FAQ)

+

We have put together a document that lists Frequently Asked Questions (FAQ) and our answers. Common problems that may arise when using OpenLayers are explained there, and chances are you'll find an appropriate solution in this document.

+

More questions?

+

If you cannot find an answer in the documentation or the FAQ, you can search Stack Overflow. If you cannot find an answer there, ask a new question there, using the tag 'openlayers'.

+ +
+ + + + diff --git a/map/test/doc/quickstart.html b/map/test/doc/quickstart.html new file mode 100644 index 000000000..1de676c07 --- /dev/null +++ b/map/test/doc/quickstart.html @@ -0,0 +1,165 @@ + + + + + + OpenLayers - Quick Start + + + + + + + + + + + + + + + + + +
+

Quick Start

+

This primer shows you how to put a map on a web page. The development setup uses Node (14 or higher) and requires that you have git installed.

+

Set up a new project

+

The easiest way to start building a project with OpenLayers is to run npm create ol-app:

+
npm create ol-app my-app
+cd my-app
+npm start
+
+

The first command will create a directory called my-app (you can use a different name if you wish), install OpenLayers and a development server, and set up a basic app with index.html, main.js, and style.css files.

+

The second command (cd my-app) changes the working directory to your new my-app project so you can start working with it.

+

The third command (npm start) starts a development server so you can view your application in a browser while working on it. After running npm start, you'll see output that tells you the URL to open. Open http://localhost:5173/ (or whatever URL is displayed) to see your new application.

+

Exploring the parts

+

An OpenLayers application is composed of three basic parts:

+ +

The markup

+

Open the index.html file in a text editor. It should look something like this:

+
<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Quick Start</title>
+  </head>
+  <body>
+    <div id="map"></div>
+    <script type="module" src="./main.js"></script>
+  </body>
+</html>
+
+

The two important parts in the markup are the <div> element to contain the map and the <script> tag to pull in the JavaScript. The map container or target should be a block level element (like a <div>) and it must appear in the document before the <script> tag that initializes the map.

+

The script

+

Open the main.js file in a text editor. It should look something like this:

+
import './style.css';
+import Map from 'ol/Map.js';
+import OSM from 'ol/source/OSM.js';
+import TileLayer from 'ol/layer/Tile.js';
+import View from 'ol/View.js';
+
+const map = new Map({
+  target: 'map',
+  layers: [
+    new TileLayer({
+      source: new OSM(),
+    }),
+  ],
+  view: new View({
+    center: [0, 0],
+    zoom: 2,
+  }),
+});
+
+

OpenLayers is packaged as a collection of ES modules. The import lines are used to pull in the modules that your application needs. Take a look through the examples and API docs to understand which modules you might want to use.

+

The import './style.css'; line might be a bit unexpected. In this example, we're using Vite as a development server. Vite allows CSS to be imported from JavaScript modules. If you were using a different development server, you might include the style.css in a <link> tag in the index.html instead.

+

The main.js module serves as an entry point for your application. It initializes a new map, giving it a single layer with an OSM source and a view describing the center and zoom level. Read through the Basic Concepts tutorial to learn more about Map, View, Layer, and Source components.

+

The style

+

Open the style.css file in a text editor. It should look something like this:

+
@import "node_modules/ol/ol.css";
+
+html,
+body {
+  margin: 0;
+  height: 100%;
+}
+
+#map {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 100%;
+}
+
+

The first line imports the ol.css file that comes with the ol package (OpenLayers is published as the ol package in the npm registry). The ol package was installed in the npm create ol-app step above. If you were starting with an existing application instead of using npm create ol-app, you would install the package with npm install ol. The ol.css stylesheet includes styles for the elements that OpenLayers creates – things like buttons for zooming in and out.

+

The remaining rules in the style.css file make it so the <div id="map"> element that contains the map fills the entire page.

+

Deploying your app

+

You can make edits to the index.html, main.js, or style.css files and see the resulting change in your browser while running the development server (with npm start). After you have finished making edits, it is time to bundle or build your application so that it can be deployed as a static website (without needing to run a development server like Vite).

+

To build your application, run the following:

+
npm run build
+
+

This will create a dist directory with a new index.html and assets that make up your application. These dist files can be deployed with your production website.

+ +
+ + + + diff --git a/map/test/doc/tutorials/background.html b/map/test/doc/tutorials/background.html new file mode 100644 index 000000000..184405366 --- /dev/null +++ b/map/test/doc/tutorials/background.html @@ -0,0 +1,105 @@ + + + + + + OpenLayers - Background + + + + + + + + + + + + + + + + + +
+

Background

+

Overview

+

OpenLayers is a modular, high-performance, feature-packed library for displaying and interacting with maps and geospatial data.

+

The library comes with built-in support for a wide range of commercial and free image and vector tile sources, and the most popular open and proprietary vector data formats. With OpenLayers's map projection support, data can be in any projection.

+

Public API

+

OpenLayers is available as ol npm package, which provides all modules of the officially supported API.

+

Browser Support

+

OpenLayers runs on all modern browsers (with greater than 1% global usage). This includes Chrome, Firefox, Safari and Edge. For older browsers, polyfills will likely need to be added.

+

The library is intended for use on both desktop/laptop and mobile devices, and supports pointer and touch interactions.

+

Module and Naming Conventions

+

OpenLayers modules with CamelCase names provide classes as default exports, and may contain additional constants or functions as named exports:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+
+

Class hierarchies grouped by their parent are provided in a subfolder of the package, e.g. layer/.

+

For convenience, these are also available as named exports, e.g.

+
import {Map, View} from 'ol';
+import {Tile, Vector} from 'ol/layer.js';
+
+

In addition to these re-exported classes, modules with lowercase names also provide constants or functions as named exports:

+
import {getUid} from 'ol';
+import {fromLonLat} from 'ol/proj.js';
+
+ +
+ + + + diff --git a/map/test/doc/tutorials/concepts.html b/map/test/doc/tutorials/concepts.html new file mode 100644 index 000000000..3e75e9682 --- /dev/null +++ b/map/test/doc/tutorials/concepts.html @@ -0,0 +1,142 @@ + + + + + + OpenLayers - Basic Concepts + + + + + + + + + + + + + + + + + +
+

Basic Concepts

+

Map

+

The core component of OpenLayers is the map (from the ol/Map module). It is rendered to a target container (e.g. a div element on the web page that contains the map). All map properties can either be configured at construction time, or by using setter methods, e.g. setTarget().

+

The markup below could be used to create a <div> that contains your map.

+
<div id="map" style="width: 100%; height: 400px"></div>
+
+

The script below constructs a map that is rendered in the <div> above, using the map id of the element as a selector.

+
import Map from 'ol/Map.js';
+
+const map = new Map({target: 'map'});
+
+

View

+

The map is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of a ol/View instance.

+
import View from 'ol/View.js';
+
+map.setView(new View({
+  center: [0, 0],
+  zoom: 2,
+}));
+
+

A View also has a projection. The projection determines the coordinate system of the center and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units.

+

The zoom option is a convenient way to specify the map resolution. The available zoom levels are determined by maxZoom (default: 28), zoomFactor (default: 2) and maxResolution (default is calculated in such a way that the projection's validity extent fits in a 256x256 pixel tile). Starting at zoom level 0 with a resolution of maxResolution units per pixel, subsequent zoom levels are calculated by dividing the previous zoom level's resolution by zoomFactor, until zoom level maxZoom is reached.

+

Source

+

To get remote data for a layer, OpenLayers uses ol/source/Source subclasses. These are available for free and commercial map tile services like OpenStreetMap or Bing, for OGC sources like WMS or WMTS, and for vector data in formats like GeoJSON or KML.

+
import OSM from 'ol/source/OSM.js';
+
+const source = OSM();
+
+

Layer

+

A layer is a visual representation of data from a source. OpenLayers has four basic types of layers:

+ +
import TileLayer from 'ol/layer/Tile.js';
+
+// ...
+const layer = new TileLayer({source: source});
+map.addLayer(layer);
+
+

Putting it all together

+

The above snippets can be combined into a single script that renders a map with a single tile layer:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import OSM from 'ol/source/OSM.js';
+import TileLayer from 'ol/layer/Tile.js';
+
+new Map({
+  layers: [
+    new TileLayer({source: new OSM()}),
+  ],
+  view: new View({
+    center: [0, 0],
+    zoom: 2,
+  }),
+  target: 'map',
+});
+
+ +
+ + + + diff --git a/map/test/doc/tutorials/index.html b/map/test/doc/tutorials/index.html new file mode 100644 index 000000000..fe8df503e --- /dev/null +++ b/map/test/doc/tutorials/index.html @@ -0,0 +1,88 @@ + + + + + + OpenLayers - Tutorials + + + + + + + + + + + + + + + + + +
+

Tutorials

+ + +
+ + + + diff --git a/map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg b/map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg new file mode 100644 index 000000000..7e714f6cf Binary files /dev/null and b/map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg differ diff --git a/map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg b/map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg new file mode 100644 index 000000000..508dc4687 Binary files /dev/null and b/map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg differ diff --git a/map/test/doc/tutorials/raster-reprojection-resources/iterative-triangulation.png b/map/test/doc/tutorials/raster-reprojection-resources/iterative-triangulation.png new file mode 100644 index 000000000..fd84d3a8b Binary files /dev/null and b/map/test/doc/tutorials/raster-reprojection-resources/iterative-triangulation.png differ diff --git a/map/test/doc/tutorials/raster-reprojection.html b/map/test/doc/tutorials/raster-reprojection.html new file mode 100644 index 000000000..5f04051c7 --- /dev/null +++ b/map/test/doc/tutorials/raster-reprojection.html @@ -0,0 +1,187 @@ + + + + + + OpenLayers - Raster Reprojection + + + + + + + + + + + + + + + + + +
+

Raster Reprojection

+

OpenLayers has an ability to display raster data from WMS, WMTS, static images and many other sources in a different coordinate system than delivered from the server. +Transformation of the map projections of the image happens directly in a web browser. +The view in any Proj4js supported coordinate reference system is possible and previously incompatible layers can now be combined and overlaid.

+

Usage

+

The API usage is very simple. Just specify proper projection (e.g. using EPSG code) on ol/View:

+
import Map from 'ol/Map.js';
+import TileLayer from 'ol/layer/Tile.js';
+import TileWMS from 'ol/source/TileWMS.js';
+import View from 'ol/View.js';
+
+const map = new Map({
+  target: 'map',
+  view: new View({
+    projection: 'EPSG:3857', // here is the view projection
+    center: [0, 0],
+    zoom: 2,
+  }),
+  layers: [
+    new TileLayer({
+      source: new TileWMS({
+        projection: 'EPSG:4326', // here is the source projection
+        url: 'https://ahocevar.com/geoserver/wms',
+        params: {
+          'LAYERS': 'ne:NE1_HR_LC_SR_W_DR',
+        },
+      }),
+    }),
+  ],
+});
+
+

If a source (based on ol/source/TileImage or ol/source/Image) has a projection different from the current ol/View’s projection then the reprojection happens automatically under the hood.

+

Examples

+ +

Custom projection

+

The easiest way to use a custom projection is to add the Proj4js library to your project and then define the projection using a proj4 definition string. It can be installed with

+
npm install proj4
+
+

Following example shows definition of a British National Grid:

+
import proj4 from 'proj4';
+import {get as getProjection} from 'ol/proj.js';
+import {register} from 'ol/proj/proj4.js';
+
+proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
+    '+x_0=400000 +y_0=-100000 +ellps=airy ' +
+    '+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
+    '+units=m +no_defs');
+register(proj4);
+const proj27700 = getProjection('EPSG:27700');
+proj27700.setExtent([0, 0, 700000, 1300000]);
+
+

Change of the view projection

+

To switch the projection used to display the map you have to set a new ol/View with selected projection on the ol/Map:

+
map.setView(new View({
+  projection: 'EPSG:27700',
+  center: [400000, 650000],
+  zoom: 4,
+}));
+
+

TileGrid and Extents

+

When reprojection is needed, new tiles (in the target projection) are under the hood created from the original source tiles. +The TileGrid of the reprojected tiles is by default internally constructed using ol/tilegrid~getForProjection(projection). +The projection should have extent defined (see above) for this to work properly.

+

Alternatively, a custom target TileGrid can be constructed manually and set on the source instance using ol/source/TileImage~setTileGridForProjection(projection, tilegrid). +This TileGrid will then be used when reprojecting to the specified projection instead of creating the default one. +In certain cases, this can be used to optimize performance (by tweaking tile sizes) or visual quality (by specifying resolutions).

+

How it works

+

The reprojection process is based on triangles – the target raster is divided into a limited number of triangles with vertices transformed using ol/proj capabilities (proj4js is usually utilized to define custom transformations). +The reprojection of pixels inside the triangle is approximated with an affine transformation (with rendering hardware-accelerated by the canvas 2d context):

+How it works + +

This way we can support a wide range of projections from proj4js (or even custom transformation functions) on almost any hardware (with canvas 2d support) with a relatively small number of actual transformation calculations.

+

The precision of the reprojection is then limited by the number of triangles.

+

The reprojection process preserves transparency on the raster data supplied from the source (png or gif) and the gaps and no-data pixels generated by reprojection are automatically transparent.

+

Dynamic triangulation

+

The above image above shows a noticeable error (especially on the edges) when the original image (left; EPSG:27700) is transformed with only a limited number of triangles (right; EPSG:3857). +The error can be minimized by increasing the number of triangles used.

+

Since some transformations require a more detail triangulation network, the dynamic triangulation process automatically measures reprojection error and iteratively subdivides to meet a specific error threshold:

+Iterative triangulation + +

For debugging, rendering of the reprojection edges can be enabled by ol.source.TileImage#setRenderReprojectionEdges(true).

+

Advanced

+

Triangulation precision threshold

+

The default triangulation error threshold in pixels is given by ERROR_THRESHOLD (0.5 pixel). +In case a different threshold needs to be defined for different sources, the reprojectionErrorThreshold option can be passed when constructing the tile image source.

+

Limiting visibility of reprojected map by extent

+

The reprojection algorithm uses inverse transformation (from view projection to data projection). +For certain coordinate systems this can result in a "double occurrence" of the source data on a map. +For example, when reprojecting a map of Switzerland from EPSG:21781 to EPSG:3857, it is displayed twice: once at the proper place in Europe, but also in the Pacific Ocean near New Zealand, on the opposite side of the globe.

+Double occurrence of a reprojected map + +

Although this is mathematically correct behavior of the inverse transformation, visibility of the layer on multiple places is not expected by users. +A possible general solution would be to calculate the forward transformation for every vertex as well - but this would significantly decrease performance (especially for computationally expensive transformations).

+

Therefore a recommended workaround is to define a proper visibility extent on the ol.layer.Tile in the view projection. +Setting such a limit is demonstrated in the reprojection demo example.

+

Resolution calculation

+

When determining source tiles to load, the ideal source resolution needs to be calculated. +The ol/reproj~calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution) function calculates the ideal value in order to achieve pixel mapping as close as possible to 1:1 during reprojection, which is then used to select proper zoom level from the source.

+

It is, however, generally not practical to use the same source zoom level for the whole target zoom level -- different projections can have significantly different resolutions in different parts of the world (e.g. polar regions in EPSG:3857 vs EPSG:4326) and enforcing a single resolution for the whole zoom level would result in some tiles being scaled up/down, possibly requiring a huge number of source tiles to be loaded. +Therefore, the resolution mapping is calculated separately for each reprojected tile (in the middle of the tile extent).

+ +
+ + + + diff --git a/map/test/download/index.html b/map/test/download/index.html new file mode 100644 index 000000000..3d2fe3e77 --- /dev/null +++ b/map/test/download/index.html @@ -0,0 +1,139 @@ + + + + + + OpenLayers - Get the Code + + + + + + + + + + + + + + + + + +
+
+
+

The ol package

+
+

+ The recommended way to use OpenLayers is to work with the ol package. +

+

+ To add OpenLayers to an existing project, install the latest with npm: +

npm install ol
+

+

+ If you are starting a new project from scratch, see the quick start docs for more information. +

+
+
+
+

Hosted build for development

+
+

+ If you want to try out OpenLayers without downloading anything (not recommended for production), include the following in the head of your html page: +

<script src="https://cdn.jsdelivr.net/npm/ol@v9.1.0/dist/ol.js"></script>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v9.1.0/ol.css">
+
+

+

+ The full build of the library does not include all dependencies: the geotiff and ol-mapbox-style packages are omitted. If you use these, you'll need to add additional script tags. +

+
+
+
+

Downloads for the v9.1.0 release

+
+
+
+ + + + + + + + + + + + +
ArchiveDescription
v9.1.0-site.zipIncludes examples and documentation.
v9.1.0-package.zipIncludes sources and the full build of the library.
+

+ See the v9.1.0 release page for a changelog and any special upgrade notes. +

+

+ For archives of previous releases, see the complete list of releases. +

+
+
+
+ +
+ + + + diff --git a/map/test/favicon.ico b/map/test/favicon.ico new file mode 100644 index 000000000..bc4bafb6e Binary files /dev/null and b/map/test/favicon.ico differ diff --git a/map/test/index.html b/map/test/index.html new file mode 100644 index 000000000..754408934 --- /dev/null +++ b/map/test/index.html @@ -0,0 +1,204 @@ + + + + + + OpenLayers - Welcome + + + + + + + + + + + + + + + + + + +
+
+
+

A high-performance, feature-packed library for all your mapping needs.

+
+
+
+

Latest

+

OpenLayers v9.1.0 is here! Check out the docs and the examples to get started. The full distribution can be downloaded from the release page.

+
+
+
+

Overview

+
+
+
+

OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles, vector data and markers loaded from any source. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).

+
+
+
+

Features

+
+
+
+

Tiled Layers

+ tiled layers +

Pull tiles from OSM, Bing, MapBox, Stadia Maps, and any other XYZ source you can find. OGC mapping services and untiled layers also supported.

+
+
+

Vector Layers

+ vector layers +

Render vector data from GeoJSON, TopoJSON, KML, GML, Mapbox vector tiles, and other formats.

+
+
+
+
+

Cutting Edge, Fast & Mobile Ready

+ mobile ready +

Leverages Canvas 2D, WebGL, and all the latest greatness from HTML5. Mobile support out of the box. Build lightweight custom profiles with just the components you need.

+
+
+

Easy to Customize and Extend

+ customizable +

Style your map controls with straight-forward CSS. Hook into different levels of the API or use 3rd party libraries to customize and extend functionality.

+
+
+
+

Learn More

+
+
+
+ +

Quick Start

+
+

Seen enough already? Go here to get started.

+
+
+ +

Get the Code

+
+

Get the latest release or dig through the archives.

+
+
+
+
+ +

Tutorials

+
+

Spend time learning the basics and graduate up to advanced mapping techniques.

+
+
+ +

Workshop

+
+

Want to learn OpenLayers hands-on? Get started with the workshop.

+
+
+
+
+ +

API Docs

+
+

Browse through the API docs for details on code usage.

+
+
+
+

Older versions

+
+

In case you are not ready (yet) for the latest version of OpenLayers, we provide links to selected resources of older major versions of the software.

+ +

Please consider upgrading to benefit from the latest features and bug fixes. Get better performance and usability for free by using recent versions of OpenLayers.

+
+
+
+

Get Involved

+
+
+ + + +
+
+ + + + + + diff --git a/map/test/main.js b/map/test/main.js new file mode 100644 index 000000000..189183b79 --- /dev/null +++ b/map/test/main.js @@ -0,0 +1,3 @@ +!function(){"use strict";class t{constructor(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}}var e="propertychange";class i{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}}function n(t,e){return t>e?1:t0?r-1:r}return n-1}if(i>0){for(let i=1;i0)}removeEventListener(t,e){if(!this.listeners_)return;const i=this.listeners_[t];if(!i)return;const n=i.indexOf(e);-1!==n&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[n]=u,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t]))}}var m="change",y="error",_="contextmenu",x="click",v="dblclick",w="keydown",b="keypress",C="load",S="touchmove",E="wheel";function T(t,e,i,n,r){if(n&&n!==t&&(i=i.bind(n)),r){const n=i;i=function(){t.removeEventListener(e,i),n.apply(this,arguments)}}const s={target:t,type:e,listener:i};return t.addEventListener(e,i),s}function R(t,e,i,n){return T(t,e,i,n,!0)}function I(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),p(t))}class M extends f{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(m)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let r=0;r0;)this.pop()}extend(t){for(let e=0,i=t.length;ethis.getLength())throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e),this.array_.splice(t,0,e),this.updateLength_(),this.dispatchEvent(new bt(xt,e,t))}pop(){return this.removeAt(this.getLength()-1)}push(t){this.unique_&&this.assertUnique_(t);const e=this.getLength();return this.insertAt(e,t),this.getLength()}remove(t){const e=this.array_;for(let i=0,n=e.length;i=this.getLength())return;const e=this.array_[t];return this.array_.splice(t,1),this.updateLength_(),this.dispatchEvent(new bt(vt,e,t)),e}setAt(t,e){if(t>=this.getLength())return void this.insertAt(t,e);if(t<0)throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e,t);const i=this.array_[t];this.array_[t]=e,this.dispatchEvent(new bt(vt,i,t)),this.dispatchEvent(new bt(xt,e,t))}updateLength_(){this.set(wt,this.array_.length)}assertUnique_(t,e){for(let i=0,n=this.array_.length;i1?(i=r,n=s):l>0&&(i+=o*l,n+=a*l)}return zt(t,e,i,n)}function zt(t,e,i,n){const r=i-t,s=n-e;return r*r+s*s}function jt(t){return t*Math.PI/180}function Gt(t,e){const i=t%e;return i*e<0?i+e:i}function Nt(t,e,i){return t+i*(e-t)}function qt(t,e){const i=Math.pow(10,e);return Math.round(t*i)/i}function Wt(t,e){return Math.floor(qt(t,e))}function Xt(t,e){return Math.ceil(qt(t,e))}class Bt extends A{constructor(t){super(),this.on,this.once,this.un,this.background_=t.background;const e=Object.assign({},t);"object"==typeof t.properties&&(delete e.properties,Object.assign(e,t.properties)),e[St]=void 0!==t.opacity?t.opacity:1,At("number"==typeof e[St],"Layer opacity must be a number"),e[Et]=void 0===t.visible||t.visible,e[Rt]=t.zIndex,e[It]=void 0!==t.maxResolution?t.maxResolution:1/0,e[Mt]=void 0!==t.minResolution?t.minResolution:0,e[Ft]=void 0!==t.minZoom?t.minZoom:-1/0,e[kt]=void 0!==t.maxZoom?t.maxZoom:1/0,this.className_=void 0!==e.className?e.className:"ol-layer",delete e.className,this.setProperties(e),this.state_=null}getBackground(){return this.background_}getClassName(){return this.className_}getLayerState(t){const e=this.state_||{layer:this,managed:void 0===t||t},i=this.getZIndex();return e.opacity=Dt(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==i||e.managed?i:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e}getLayersArray(t){return k()}getLayerStatesArray(t){return k()}getExtent(){return this.get(Tt)}getMaxResolution(){return this.get(It)}getMinResolution(){return this.get(Mt)}getMinZoom(){return this.get(Ft)}getMaxZoom(){return this.get(kt)}getOpacity(){return this.get(St)}getSourceState(){return k()}getVisible(){return this.get(Et)}getZIndex(){return this.get(Rt)}setBackground(t){this.background_=t,this.changed()}setExtent(t){this.set(Tt,t)}setMaxResolution(t){this.set(It,t)}setMinResolution(t){this.set(Mt,t)}setMaxZoom(t){this.set(kt,t)}setMinZoom(t){this.set(Ft,t)}setOpacity(t){At("number"==typeof t,"Layer opacity must be a number"),this.set(St,t)}setVisible(t){this.set(Et,t)}setZIndex(t){this.set(Rt,t)}disposeInternal(){this.state_&&(this.state_.layer=null,this.state_=null),super.disposeInternal()}}var Vt="prerender",Yt="postrender",Zt="precompose",Ut="postcompose",$t="rendercomplete",Kt=0,Ht=1,Jt={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};const Qt=42,te=256,ee={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};class ie{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||ee[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}}const ne=6378137,re=Math.PI*ne,se=[-re,-re,re,re],oe=[-180,-85,180,85],ae=ne*Math.log(Math.tan(Math.PI/2));class le extends ie{constructor(t){super({code:t,units:"m",extent:se,global:!0,worldExtent:oe,getPointResolution:function(t,e){return t/Math.cosh(e[1]/ne)}})}}const he=[new le("EPSG:3857"),new le("EPSG:102100"),new le("EPSG:102113"),new le("EPSG:900913"),new le("http://www.opengis.net/def/crs/EPSG/0/3857"),new le("http://www.opengis.net/gml/srs/epsg.xml#3857")];function ue(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rae?i=ae:i<-ae&&(i=-ae),e[r+1]=i}return e}function ce(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rr&&(l|=xe.RIGHT),as&&(l|=xe.ABOVE),l===xe.UNKNOWN&&(l=xe.INTERSECTING),l}function Ie(){return[1/0,1/0,-1/0,-1/0]}function Me(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function ke(t){return Me(1/0,1/0,-1/0,-1/0,t)}function Fe(t,e){const i=t[0],n=t[1];return Me(i,n,i,n,e)}function Pe(t,e,i,n,r){return Oe(ke(r),t,e,i,n)}function Le(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Ae(t,e){return e[0]t[2]&&(t[2]=e[2]),e[1]t[3]&&(t[3]=e[3]),t}function De(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Oe(t,e,i,n,r){for(;ie[0]?n[0]=t[0]:n[0]=e[0],t[1]>e[1]?n[1]=t[1]:n[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Je(t){return t[2]1){const e=t[2]-t[0],i=t[3]-t[1];for(let s=0;s=i[2])){const e=Ke(i),r=Math.floor((n[0]-i[0])/e)*e;t[0]-=r,t[2]-=r}return t}function ei(t,e){let i=!0;for(let n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function ii(t,e){const i=Math.cos(e),n=Math.sin(e),r=t[0]*i-t[1]*n,s=t[1]*i+t[0]*n;return t[0]=r,t[1]=s,t}function ni(t,e){if(e.canWrapX()){const i=Ke(e.getExtent()),n=function(t,e,i){const n=e.getExtent();let r=0;e.canWrapX()&&(t[0]n[2])&&(i=i||Ke(n),r=Math.floor((t[0]-n[0])/i));return r}(t,e,i);n&&(t[0]-=n*i)}return t}const ri=6371008.8;function si(t,e,i){i=i||ri;const n=jt(t[1]),r=jt(e[1]),s=(r-n)/2,o=jt(e[0]-t[0])/2,a=Math.sin(s)*Math.sin(s)+Math.sin(o)*Math.sin(o)*Math.cos(n)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))}function oi(...t){console.warn(...t)}let ai=!0;function li(t){ai=!(void 0===t||t)}function hi(t,e){if(void 0!==e)for(let i=0,n=t.length;i=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(ai=!1,oi("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t}function Si(t,e){return t}function Ei(t,e){return t}var Ti,Ri,Ii;function Mi(t,e,i){return function(n,r,s,o,a){if(!n)return;if(!r&&!e)return n;const l=e?0:s[0]*r,h=e?0:s[1]*r,u=a?a[0]:0,c=a?a[1]:0;let d=t[0]+l/2+u,p=t[2]-l/2+u,g=t[1]+h/2+c,f=t[3]-h/2+c;d>p&&(d=(p+d)/2,p=d),g>f&&(g=(f+g)/2,f=g);let m=Dt(n[0],d,p),y=Dt(n[1],g,f);if(o&&i&&r){const t=30*r;m+=-t*Math.log(1+Math.max(0,d-n[0])/t)+t*Math.log(1+Math.max(0,n[0]-p)/t),y+=-t*Math.log(1+Math.max(0,g-n[1])/t)+t*Math.log(1+Math.max(0,n[1]-f)/t)}return[m,y]}}function ki(t){return t}function Fi(t,e,i,n){const r=Ke(e)/i[0],s=Ye(e)/i[1];return n?Math.min(t,Math.max(r,s)):Math.min(t,Math.min(r,s))}function Pi(t,e,i){let n=Math.min(t,e);return n*=Math.log(1+50*Math.max(0,t/e-1))/50+1,i&&(n=Math.max(n,i),n/=Math.log(1+50*Math.max(0,i/t-1))/50+1),Dt(n,i/2,2*e)}function Li(t,e,i,n,r){return i=void 0===i||i,function(s,o,a,l){if(void 0!==s){const o=n?Fi(t,n,a,r):t;return i&&l?Pi(s,o,e):Dt(s,e,o)}}}function Ai(t){if(void 0!==t)return 0}function Di(t){if(void 0!==t)return t}function Oi(t){return Math.pow(t,3)}function zi(t){return 1-Oi(1-t)}function ji(t){return 3*t*t-2*t*t*t}function Gi(t){return t}gi(he),gi(fe),Ti=he,Ri=ue,Ii=ce,fe.forEach((function(t){Ti.forEach((function(e){_e(t,e,Ri),_e(e,t,Ii)}))}));const Ni=new Array(6);function qi(t){return Xi(t,1,0,0,1,0,0)}function Wi(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=t[4],a=t[5],l=e[0],h=e[1],u=e[2],c=e[3],d=e[4],p=e[5];return t[0]=i*l+r*h,t[1]=n*l+s*h,t[2]=i*u+r*c,t[3]=n*u+s*c,t[4]=i*d+r*p+o,t[5]=n*d+s*p+a,t}function Xi(t,e,i,n,r,s,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=r,t[4]=s,t[5]=o,t}function Bi(t,e){const i=e[0],n=e[1];return e[0]=t[0]*i+t[2]*n+t[4],e[1]=t[1]*i+t[3]*n+t[5],e}function Vi(t,e,i){return Wi(t,Xi(Ni,e,0,0,i,0,0))}function Yi(t,e,i,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return t[0]=n*h,t[1]=r*l,t[2]=-n*l,t[3]=r*h,t[4]=o*n*h-a*n*l+e,t[5]=o*r*l+a*r*h+i,t}function Zi(t,e){const i=(n=e)[0]*n[3]-n[1]*n[2];var n;At(0!==i,"Transformation matrix cannot be inverted");const r=e[0],s=e[1],o=e[2],a=e[3],l=e[4],h=e[5];return t[0]=a/i,t[1]=-s/i,t[2]=-o/i,t[3]=r/i,t[4]=(o*h-a*l)/i,t[5]=-(r*h-s*l)/i,t}const Ui=[1e6,1e6,1e6,1e6,2,2];function $i(t){return"matrix("+t.map(((t,e)=>Math.round(t*Ui[e])/Ui[e])).join(", ")+")"}function Ki(t,e,i,n,r,s){s=s||[];let o=0;for(let a=e;a{if(!i)return this.getSimplifiedGeometry(e);const n=this.clone();return n.applyTransform(i),n.getSimplifiedGeometry(e)}))}simplifyTransformed(t,e){return this.simplifyTransformedInternal(this.getRevision(),t,e)}clone(){return k()}closestPointXY(t,e,i,n){return k()}containsXY(t,e){const i=this.getClosestPoint([t,e]);return i[0]===t&&i[1]===e}getClosestPoint(t,e){return e=e||[NaN,NaN],this.closestPointXY(t[0],t[1],e,1/0),e}intersectsCoordinate(t){return this.containsXY(t[0],t[1])}computeExtent(t){return k()}getExtent(t){if(this.extentRevision_!=this.getRevision()){const t=this.computeExtent(this.extent_);(isNaN(t[0])||isNaN(t[1]))&&ke(t),this.extentRevision_=this.getRevision()}return function(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t}(this.extent_,t)}rotate(t,e){k()}scale(t,e,i){k()}simplify(t){return this.getSimplifiedGeometry(t*t)}getSimplifiedGeometry(t){return k()}getType(){return k()}applyTransform(t){k()}intersectsExtent(t){return k()}translate(t,e){k()}transform(t,e){const i=di(t),n="tile-pixels"==i.getUnits()?function(t,n,r){const s=i.getExtent(),o=i.getWorldExtent(),a=Ye(o)/Ye(s);return Yi(Ji,o[0],o[3],a,-a,0,0,0),Ki(t,0,t.length,r,Ji,n),xi(i,e)(t,n,r)}:xi(i,e);return this.applyTransform(n),this}}class tn extends Qi{constructor(){super(),this.layout="XY",this.stride=2,this.flatCoordinates}computeExtent(t){return Pe(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinates(){return k()}getFirstCoordinate(){return this.flatCoordinates.slice(0,this.stride)}getFlatCoordinates(){return this.flatCoordinates}getLastCoordinate(){return this.flatCoordinates.slice(this.flatCoordinates.length-this.stride)}getLayout(){return this.layout}getSimplifiedGeometry(t){if(this.simplifiedGeometryRevision!==this.getRevision()&&(this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=this.getRevision()),t<0||0!==this.simplifiedGeometryMaxMinSquaredTolerance&&t<=this.simplifiedGeometryMaxMinSquaredTolerance)return this;const e=this.getSimplifiedGeometryInternal(t);return e.getFlatCoordinates().length1)c=i;else{if(d>0){for(let r=0;rr&&(r=a),s=i,o=n}return r}function on(t,e,i,n,r){for(let s=0,o=i.length;s0;){const i=h.pop(),s=h.pop();let o=0;const a=t[s],c=t[s+1],d=t[i],p=t[i+1];for(let e=s+n;eo&&(u=e,o=i)}o>r&&(l[(u-e)/n]=1,s+n0&&g>d)&&(p<0&&f0&&f>p)?(a=i,l=c):(s[o++]=a,s[o++]=l,h=a,u=l,a=i,l=c)}return s[o++]=a,s[o++]=l,o}function mn(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;ls&&(i-a)*(s-l)-(r-a)*(n-l)>0&&o++:n<=s&&(i-a)*(s-l)-(r-a)*(n-l)<0&&o--,a=i,l=n}return 0!==o}function Tn(t,e,i,n,r,s){if(0===i.length)return!1;if(!En(t,e,i[0],n,r,s))return!1;for(let e=1,o=i.length;e_&&(u=(c+d)/2,Tn(t,e,i,r,u,f)&&(y=u,_=n)),c=d}return isNaN(y)&&(y=s[o]),a?(a.push(y,f,_),a):[y,f,_]}function In(t,e,i,n,r){let s=[];for(let o=0,a=i.length;o=r[0]&&s[2]<=r[2]||(s[1]>=r[1]&&s[3]<=r[3]||Mn(t,e,i,n,(function(t,e){return function(t,e,i){let n=!1;const r=Re(t,e),s=Re(t,i);if(r===xe.INTERSECTING||s===xe.INTERSECTING)n=!0;else{const o=t[0],a=t[1],l=t[2],h=t[3],u=e[0],c=e[1],d=i[0],p=i[1],g=(p-c)/(d-u);let f,m;s&xe.ABOVE&&!(r&xe.ABOVE)&&(f=d-(p-h)/g,n=f>=o&&f<=l),n||!(s&xe.RIGHT)||r&xe.RIGHT||(m=p-(d-l)*g,n=m>=a&&m<=h),n||!(s&xe.BELOW)||r&xe.BELOW||(f=d-(p-a)/g,n=f>=o&&f<=l),n||!(s&xe.LEFT)||r&xe.LEFT||(m=p-(d-o)*g,n=m>=a&&m<=h)}return n}(r,t,e)})))))}function Fn(t,e,i,n,r){return!!kn(t,e,i,n,r)||(!!En(t,e,i,n,r[0],r[1])||(!!En(t,e,i,n,r[0],r[3])||(!!En(t,e,i,n,r[2],r[1])||!!En(t,e,i,n,r[2],r[3]))))}function Pn(t,e,i,n,r){if(!Fn(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(let e=1,s=i.length;e0}function Dn(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;sc&&p1&&"function"==typeof arguments[i-1]&&(e=arguments[i-1],--i);let n=0;for(;n0}getInteracting(){return this.hints_[Ht]>0}cancelAnimations(){let t;this.setHint(Kt,-this.hints_[Kt]);for(let e=0,i=this.animations_.length;e=0;--i){const n=this.animations_[i];let r=!0;for(let i=0,s=n.length;i0?o/s.duration:1;a>=1?(s.complete=!0,a=1):r=!1;const l=s.easing(a);if(s.sourceCenter){const t=s.sourceCenter[0],e=s.sourceCenter[1],i=s.targetCenter[0],n=s.targetCenter[1];this.nextCenter_=s.targetCenter;const r=t+l*(i-t),o=e+l*(n-e);this.targetCenter_=[r,o]}if(s.sourceResolution&&s.targetResolution){const t=1===l?s.targetResolution:s.sourceResolution+l*(s.targetResolution-s.sourceResolution);if(s.anchor){const e=this.getViewportSize_(this.getRotation()),i=this.constraints_.resolution(t,0,e,!0);this.targetCenter_=this.calculateCenterZoom(i,s.anchor)}this.nextResolution_=s.targetResolution,this.targetResolution_=t,this.applyTargetState_(!0)}if(void 0!==s.sourceRotation&&void 0!==s.targetRotation){const t=1===l?Gt(s.targetRotation+Math.PI,2*Math.PI)-Math.PI:s.sourceRotation+l*(s.targetRotation-s.sourceRotation);if(s.anchor){const e=this.constraints_.rotation(t,!0);this.targetCenter_=this.calculateCenterRotate(e,s.anchor)}this.nextRotation_=s.targetRotation,this.targetRotation_=t}if(this.applyTargetState_(!0),e=!0,!s.complete)break}if(r){this.animations_[i]=null,this.setHint(Kt,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;const t=n[0].callback;t&&Xn(t,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}calculateCenterRotate(t,e){let i;const n=this.getCenterInternal();var r,s;return void 0!==n&&(i=[n[0]-e[0],n[1]-e[1]],ii(i,t-this.getRotation()),s=e,(r=i)[0]+=+s[0],r[1]+=+s[1]),i}calculateCenterZoom(t,e){let i;const n=this.getCenterInternal(),r=this.getResolution();if(void 0!==n&&void 0!==r){i=[e[0]-t*(e[0]-n[0])/r,e[1]-t*(e[1]-n[1])/r]}return i}getViewportSize_(t){const e=this.viewportSize_;if(t){const i=e[0],n=e[1];return[Math.abs(i*Math.cos(t))+Math.abs(n*Math.sin(t)),Math.abs(i*Math.sin(t))+Math.abs(n*Math.cos(t))]}return e}setViewportSize(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)}getCenter(){const t=this.getCenterInternal();return t?bi(t,this.getProjection()):t}getCenterInternal(){return this.get(Jt.CENTER)}getConstraints(){return this.constraints_}getConstrainResolution(){return this.get("constrainResolution")}getHints(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()}calculateExtent(t){return Si(this.calculateExtentInternal(t),this.getProjection())}calculateExtentInternal(t){t=t||this.getViewportSizeMinusPadding_();const e=this.getCenterInternal();At(e,"The view center is not defined");const i=this.getResolution();At(void 0!==i,"The view resolution is not defined");const n=this.getRotation();return At(void 0!==n,"The view rotation is not defined"),Be(e,i,n,t)}getMaxResolution(){return this.maxResolution_}getMinResolution(){return this.minResolution_}getMaxZoom(){return this.getZoomForResolution(this.minResolution_)}setMaxZoom(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))}getMinZoom(){return this.getZoomForResolution(this.maxResolution_)}setMinZoom(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))}setConstrainResolution(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))}getProjection(){return this.projection_}getResolution(){return this.get(Jt.RESOLUTION)}getResolutions(){return this.resolutions_}getResolutionForExtent(t,e){return this.getResolutionForExtentInternal(Ei(t,this.getProjection()),e)}getResolutionForExtentInternal(t,e){e=e||this.getViewportSizeMinusPadding_();const i=Ke(t)/e[0],n=Ye(t)/e[1];return Math.max(i,n)}getResolutionForValueFunction(t){t=t||2;const e=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,n=Math.log(e/i)/Math.log(t);return function(i){return e/Math.pow(t,i*n)}}getRotation(){return this.get(Jt.ROTATION)}getValueForResolutionFunction(t){const e=Math.log(t||2),i=this.getConstrainedResolution(this.maxResolution_),n=this.minResolution_,r=Math.log(i/n)/e;return function(t){return Math.log(i/t)/e/r}}getViewportSizeMinusPadding_(t){let e=this.getViewportSize_(t);const i=this.padding_;return i&&(e=[e[0]-i[1]-i[3],e[1]-i[0]-i[2]]),e}getState(){const t=this.getProjection(),e=this.getResolution(),i=this.getRotation();let n=this.getCenterInternal();const r=this.padding_;if(r){const t=this.getViewportSizeMinusPadding_();n=Vn(n,this.getViewportSize_(),[t[0]/2+r[3],t[1]/2+r[0]],e,i)}return{center:n.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:i,zoom:this.getZoom()}}getViewStateAndExtent(){return{viewState:this.getState(),extent:this.calculateExtent()}}getZoom(){let t;const e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t}getZoomForResolution(t){let e,i,n=this.minZoom_||0;if(this.resolutions_){const s=r(this.resolutions_,t,1);n=s,e=this.resolutions_[s],i=s==this.resolutions_.length-1?2:e/this.resolutions_[s+1]}else e=this.maxResolution_,i=this.zoomFactor_;return n+Math.log(e/t)/Math.log(i)}getResolutionForZoom(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;const e=Dt(Math.floor(t),0,this.resolutions_.length-2),i=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(i,Dt(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)}fit(t,e){let i;if(At(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,"Invalid extent or geometry provided as `geometry`"),Array.isArray(t)){At(!Je(t),"Cannot fit empty extent provided as `geometry`");i=qn(Ei(t,this.getProjection()))}else if("Circle"===t.getType()){const e=Ei(t.getExtent(),this.getProjection());i=qn(e),i.rotate(this.getRotation(),We(e))}else i=t;this.fitInternal(i,e)}rotatedExtentForGeometry(t){const e=this.getRotation(),i=Math.cos(e),n=Math.sin(-e),r=t.getFlatCoordinates(),s=t.getStride();let o=1/0,a=1/0,l=-1/0,h=-1/0;for(let t=0,e=r.length;t=t.maxResolution)return!1;const n=e.zoom;return n>t.minZoom&&n<=t.maxZoom}var Zn=class extends Bt{constructor(t){const e=Object.assign({},t);delete e.source,super(e),this.on,this.once,this.un,this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,this.renderer_=null,this.sourceReady_=!1,this.rendered=!1,t.render&&(this.render=t.render),t.map&&this.setMap(t.map),this.addChangeListener(Pt,this.handleSourcePropertyChange_);const i=t.source?t.source:null;this.setSource(i)}getLayersArray(t){return(t=t||[]).push(this),t}getLayerStatesArray(t){return(t=t||[]).push(this.getLayerState()),t}getSource(){return this.get(Pt)||null}getRenderSource(){return this.getSource()}getSourceState(){const t=this.getSource();return t?t.getState():"undefined"}handleSourceChange_(){this.changed(),this.sourceReady_||"ready"!==this.getSource().getState()||(this.sourceReady_=!0,this.dispatchEvent("sourceready"))}handleSourcePropertyChange_(){this.sourceChangeKey_&&(I(this.sourceChangeKey_),this.sourceChangeKey_=null),this.sourceReady_=!1;const t=this.getSource();t&&(this.sourceChangeKey_=T(t,m,this.handleSourceChange_,this),"ready"===t.getState()&&(this.sourceReady_=!0,setTimeout((()=>{this.dispatchEvent("sourceready")}),0))),this.changed()}getFeatures(t){return this.renderer_?this.renderer_.getFeatures(t):Promise.resolve([])}getData(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null}isVisible(t){let e;const i=this.getMapInternal();let n;!t&&i&&(t=i.getView()),e=t instanceof Wn?{viewState:t.getState(),extent:t.calculateExtent()}:t,!e.layerStatesArray&&i&&(e.layerStatesArray=i.getLayerGroup().getLayerStatesArray()),n=e.layerStatesArray?e.layerStatesArray.find((t=>t.layer===this)):this.getLayerState();const r=this.getExtent();return Yn(n,e.viewState)&&(!r||He(r,e.extent))}getAttributions(t){if(!this.isVisible(t))return[];let e;const i=this.getSource();if(i&&(e=i.getAttributions()),!e)return[];let n=e(t instanceof Wn?t.getViewStateAndExtent():t);return Array.isArray(n)||(n=[n]),n}render(t,e){const i=this.getRenderer();return i.prepareFrame(t)?(this.rendered=!0,i.renderFrame(t,e)):null}unrender(){this.rendered=!1}getDeclutter(){}renderDeclutter(t,e){}renderDeferred(t){const e=this.getRenderer();e&&e.renderDeferred(t)}setMapInternal(t){t||this.unrender(),this.set(Lt,t)}getMapInternal(){return this.get(Lt)}setMap(t){this.mapPrecomposeKey_&&(I(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(I(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=T(t,Zt,(function(t){const e=t.frameState.layerStatesArray,i=this.getLayerState(!1);At(!e.some((function(t){return t.layer===i.layer})),"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both."),e.push(i)}),this),this.mapRenderKey_=T(this,m,t.render,t),this.changed())}setSource(t){this.set(Pt,t)}getRenderer(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_}hasRenderer(){return!!this.renderer_}createRenderer(){return null}disposeInternal(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),super.disposeInternal()}};function Un(t,e,i,n,r){$n(t,e,i||0,n||t.length-1,r||Hn)}function $n(t,e,i,n,r){for(;n>i;){if(n-i>600){var s=n-i+1,o=e-i+1,a=Math.log(s),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(s-l)/s)*(o-s/2<0?-1:1);$n(t,e,Math.max(i,Math.floor(e-o*l/s+h)),Math.min(n,Math.floor(e+(s-o)*l/s+h)),r)}var u=t[e],c=i,d=n;for(Kn(t,i,e),r(t[n],u)>0&&Kn(t,i,n);c0;)d--}0===r(t[i],u)?Kn(t,i,d):Kn(t,++d,n),d<=e&&(i=d+1),e<=d&&(n=d-1)}}function Kn(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function Hn(t,e){return te?1:0}let Jn=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const i=[];if(!hr(t,e))return i;const n=this.toBBox,r=[];for(;e;){for(let s=0;s=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(n,r,e)}_split(t,e){const i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const s=this._chooseSplitIndex(i,r,n),o=ur(i.children.splice(s,i.children.length-s));o.height=i.height,o.leaf=i.leaf,tr(i,this.toBBox),tr(o,this.toBBox),e?t[e-1].children.push(o):this._splitRoot(i,o)}_splitRoot(t,e){this.data=ur([t,e]),this.data.height=t.height+1,this.data.leaf=!1,tr(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let n,r=1/0,s=1/0;for(let o=e;o<=i-e;o++){const e=er(t,0,o,this.toBBox),a=er(t,o,i,this.toBBox),l=ar(e,a),h=sr(e)+sr(a);l=e;n--){const e=t.children[n];ir(o,t.leaf?r(e):e),a+=or(o)}return a}_adjustParentBBoxes(t,e,i){for(let n=i;n>=0;n--)ir(e[n],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():tr(t[i],this.toBBox)}};function Qn(t,e,i){if(!i)return e.indexOf(t);for(let n=0;n=t.minX&&e.maxY>=t.minY}function ur(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function cr(t,e,i,n,r){const s=[e,i];for(;s.length;){if((i=s.pop())-(e=s.pop())<=n)continue;const o=e+Math.ceil((i-e)/n/2)*n;Un(t,o,e,i,r),s.push(e,o,o,i)}}var dr={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};function pr(t){return t[0]>0&&t[1]>0}function gr(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}class fr{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=gr(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new fr({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return k()}getImage(t){return k()}getHitDetectionImage(){return k()}getPixelRatio(t){return 1}getImageState(){return k()}getImageSize(){return k()}getOrigin(){return k()}getSize(){return k()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=gr(t)}listenImageChange(t){k()}load(){k()}unlistenImageChange(t){k()}ready(){return Promise.resolve()}}var mr={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]},yr={name:"xyz",min:[0,0,0],channel:["X","Y","Z"],alias:["XYZ","ciexyz","cie1931"],whitepoint:{2:{A:[109.85,100,35.585],C:[98.074,100,118.232],D50:[96.422,100,82.521],D55:[95.682,100,92.149],D65:[95.045592705167,100,108.9057750759878],D75:[94.972,100,122.638],F2:[99.187,100,67.395],F7:[95.044,100,108.755],F11:[100.966,100,64.37],E:[100,100,100]},10:{A:[111.144,100,35.2],C:[97.285,100,116.145],D50:[96.72,100,81.427],D55:[95.799,100,90.926],D65:[94.811,100,107.304],D75:[94.416,100,120.641],F2:[103.28,100,69.026],F7:[95.792,100,107.687],F11:[103.866,100,65.627],E:[100,100,100]}}};yr.max=yr.whitepoint[2].D65,yr.rgb=function(t,e){e=e||yr.whitepoint[2].E;var i,n,r,s=t[0]/e[0],o=t[1]/e[1],a=t[2]/e[2];return n=-.96924363628087*s+1.87596750150772*o+.041555057407175*a,r=.055630079696993*s+-.20397695888897*o+1.056971514242878*a,i=(i=3.240969941904521*s+-1.537383177570093*o+-.498610760293*a)>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:r*=12.92,[255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1)),255*(r=Math.min(Math.max(0,r),1))]},mr.xyz=function(t,e){var i=t[0]/255,n=t[1]/255,r=t[2]/255,s=.21263900587151*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.71516867876775*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.072192315360733*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92),o=.019330818715591*i+.11919477979462*n+.95053215224966*r;return[(.41239079926595*i+.35758433938387*n+.18048078840183*r)*(e=e||yr.whitepoint[2].E)[0],s*e[1],o*e[2]]};var _r=yr,xr={name:"luv",min:[0,-134,-140],max:[100,224,122],channel:["lightness","u","v"],alias:["LUV","cieluv","cie1976"],xyz:function(t,e,i){var n,r,s,o,a,l,h,u,c;if(s=t[0],o=t[1],a=t[2],0===s)return[0,0,0];return e=e||"D65",i=i||2,n=o/(13*s)+4*(h=_r.whitepoint[i][e][0])/(h+15*(u=_r.whitepoint[i][e][1])+3*(c=_r.whitepoint[i][e][2]))||0,r=a/(13*s)+9*u/(h+15*u+3*c)||0,[9*(l=s>8?u*Math.pow((s+16)/116,3):u*s*.0011070564598794539)*n/(4*r)||0,l,l*(12-3*n-20*r)/(4*r)||0]}};_r.luv=function(t,e,i){var n,r,s,o,a,l,h,u,c,d,p;e=e||"D65",i=i||2,d=4*(h=_r.whitepoint[i][e][0])/(h+15*(u=_r.whitepoint[i][e][1])+3*(c=_r.whitepoint[i][e][2])),p=9*u/(h+15*u+3*c),n=4*(o=t[0])/(o+15*(a=t[1])+3*(l=t[2]))||0,r=9*a/(o+15*a+3*l)||0;var g=a/u;return[s=g<=.008856451679035631?903.2962962962961*g:116*Math.pow(g,1/3)-16,13*s*(n-d),13*s*(r-p)]};var vr={name:"lchuv",channel:["lightness","chroma","hue"],alias:["LCHuv","cielchuv"],min:[0,0,0],max:[100,100,360],luv:function(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]},xyz:function(t){return xr.xyz(vr.luv(t))}},wr=vr;function br(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}xr.lchuv=function(t){var e=t[0],i=t[1],n=t[2],r=Math.sqrt(i*i+n*n),s=360*Math.atan2(n,i)/2/Math.PI;return s<0&&(s+=360),[e,r,s]},_r.lchuv=function(t){return xr.lchuv(_r.luv(t))};var Cr=br({aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}),Sr={red:0,orange:60,yellow:120,green:180,blue:240,purple:300};var Er={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,i,n,r,s,o=t[0]/360,a=t[1]/100,l=t[2]/100,h=0;if(0===a)return[s=255*l,s,s];for(e=2*l-(i=l<.5?l*(1+a):l+a-l*a),r=[0,0,0];h<3;)(n=o+1/3*-(h-1))<0?n++:n>1&&n--,s=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,r[h++]=255*s;return r}};function Tr(t){var e;Array.isArray(t)&&t.raw&&(t=String.raw(...arguments)),t instanceof Number&&(t=+t);var i=function(t){var e,i,n=[],r=1;if("number"==typeof t)return{space:"rgb",values:[t>>>16,(65280&t)>>>8,255&t],alpha:1};if("number"==typeof t)return{space:"rgb",values:[t>>>16,(65280&t)>>>8,255&t],alpha:1};if(t=String(t).toLowerCase(),Cr[t])n=Cr[t].slice(),i="rgb";else if("transparent"===t)r=0,i="rgb",n=[0,0,0];else if("#"===t[0]){var s=t.slice(1),o=s.length;r=1,o<=4?(n=[parseInt(s[0]+s[0],16),parseInt(s[1]+s[1],16),parseInt(s[2]+s[2],16)],4===o&&(r=parseInt(s[3]+s[3],16)/255)):(n=[parseInt(s[0]+s[1],16),parseInt(s[2]+s[3],16),parseInt(s[4]+s[5],16)],8===o&&(r=parseInt(s[6]+s[7],16)/255)),n[0]||(n[0]=0),n[1]||(n[1]=0),n[2]||(n[2]=0),i="rgb"}else if(e=/^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\s*\(([^\)]*)\)/.exec(t)){var a=e[1],l="cmyk"===(i=a.replace(/a$/,""))?4:"gray"===i?1:3;n=e[2].trim().split(/\s*[,\/]\s*|\s+/),"color"===i&&(i=n.shift()),r=(n=n.map((function(t,e){if("%"===t[t.length-1])return t=parseFloat(t)/100,3===e?t:"rgb"===i?255*t:"h"===i[0]?100*t:"l"!==i[0]||e?"lab"===i?125*t:"lch"===i?e<2?150*t:360*t:"o"!==i[0]||e?"oklab"===i?.4*t:"oklch"===i?e<2?.4*t:360*t:t:t:100*t;if("h"===i[e]||2===e&&"h"===i[i.length-1]){if(void 0!==Sr[t])return Sr[t];if(t.endsWith("deg"))return parseFloat(t);if(t.endsWith("turn"))return 360*parseFloat(t);if(t.endsWith("grad"))return 360*parseFloat(t)/400;if(t.endsWith("rad"))return 180*parseFloat(t)/Math.PI}return"none"===t?0:parseFloat(t)}))).length>l?n.pop():1}else/[0-9](?:\s|\/|,)/.test(t)&&(n=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),i=t.match(/([a-z])/gi)?.join("")?.toLowerCase()||"rgb");return{space:i,values:n,alpha:r}}(t);if(!i.space)return[];const n="h"===i.space[0]?Er.min:mr.min,r="h"===i.space[0]?Er.max:mr.max;return(e=Array(3))[0]=Math.min(Math.max(i.values[0],n[0]),r[0]),e[1]=Math.min(Math.max(i.values[1],n[1]),r[1]),e[2]=Math.min(Math.max(i.values[2],n[2]),r[2]),"h"===i.space[0]&&(e=Er.rgb(e)),e.push(Math.min(Math.max(i.alpha,0),1)),e}mr.hsl=function(t){var e,i,n=t[0]/255,r=t[1]/255,s=t[2]/255,o=Math.min(n,r,s),a=Math.max(n,r,s),l=a-o;return a===o?e=0:n===a?e=(r-s)/l:r===a?e=2+(s-n)/l:s===a&&(e=4+(n-r)/l),(e=Math.min(60*e,360))<0&&(e+=360),i=(o+a)/2,[e,100*(a===o?0:i<=.5?l/(a+o):l/(2-a-o)),100*i]};const Rr=1024,Ir={};let Mr=0;function kr(t){if(4===t.length)return t;const e=t.slice();return e[3]=1,e}function Fr(t){const e=_r.lchuv(mr.xyz(t));return e[3]=t[3],e}function Pr(t){if(Ir.hasOwnProperty(t))return Ir[t];if(Mr>=Rr){let t=0;for(const e in Ir)0==(3&t++)&&(delete Ir[e],--Mr)}const e=Tr(t);if(4!==e.length)throw new Error('Failed to parse "'+t+'" as color');for(const i of e)if(isNaN(i))throw new Error('Failed to parse "'+t+'" as color');return Ar(e),Ir[t]=e,++Mr,e}function Lr(t){return Array.isArray(t)?t:Pr(t)}function Ar(t){return t[0]=Dt(t[0]+.5|0,0,255),t[1]=Dt(t[1]+.5|0,0,255),t[2]=Dt(t[2]+.5|0,0,255),t[3]=Dt(t[3],0,1),t}function Dr(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let n=t[2];n!=(0|n)&&(n=n+.5|0);return"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:Math.round(1e3*t[3])/1e3)+")"}class Or extends f{constructor(t,e,i,n){super(),this.extent=t,this.pixelRatio_=i,this.resolution=e,this.state="function"==typeof n?dr.IDLE:n,this.image_=null,this.loader="function"==typeof n?n:null}changed(){this.dispatchEvent(m)}getExtent(){return this.extent}getImage(){return this.image_}getPixelRatio(){return this.pixelRatio_}getResolution(){return this.resolution}getState(){return this.state}load(){if(this.state==dr.IDLE&&this.loader){this.state=dr.LOADING,this.changed();const t=this.getResolution(),e=Array.isArray(t)?t[0]:t;d((()=>this.loader(this.getExtent(),e,this.getPixelRatio()))).then((t=>{"image"in t&&(this.image_=t.image),"extent"in t&&(this.extent=t.extent),"resolution"in t&&(this.resolution=t.resolution),"pixelRatio"in t&&(this.pixelRatio_=t.pixelRatio),(t instanceof HTMLImageElement||t instanceof ImageBitmap||t instanceof HTMLCanvasElement||t instanceof HTMLVideoElement)&&(this.image_=t),this.state=dr.LOADED})).catch((t=>{this.state=dr.ERROR,console.error(t)})).finally((()=>this.changed()))}}setImage(t){this.image_=t}setResolution(t){this.resolution=t}}function zr(t,e){return e&&(t.src=e),t.src&&Y?new Promise(((e,i)=>t.decode().then((()=>e(t))).catch((n=>t.complete&&t.width?e(t):i(n))))):function(t,e){return new Promise(((i,n)=>{function r(){o(),i(t)}function s(){o(),n(new Error("Image load error"))}function o(){t.removeEventListener("load",r),t.removeEventListener("error",s)}t.addEventListener("load",r),t.addEventListener("error",s),e&&(t.src=e)}))}(t)}function jr(t,e,i){return e+":"+t+":"+(i?Lr(i):"null")}const Gr=new class{constructor(){this.cache_={},this.patternCache_={},this.cacheSize_=0,this.maxCacheSize_=32}clear(){this.cache_={},this.patternCache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const i=this.cache_[e];0!=(3&t++)||i.hasListener()||(delete this.cache_[e],delete this.patternCache_[e],--this.cacheSize_)}}}get(t,e,i){const n=jr(t,e,i);return n in this.cache_?this.cache_[n]:null}getPattern(t,e,i){const n=jr(t,e,i);return n in this.patternCache_?this.patternCache_[n]:null}set(t,e,i,n,r){const s=jr(t,e,i),o=s in this.cache_;this.cache_[s]=n,r&&(n.getImageState()===dr.IDLE&&n.load(),n.getImageState()===dr.LOADING?n.ready().then((()=>{this.patternCache_[s]=K().createPattern(n.getImage(1),"repeat")})):this.patternCache_[s]=K().createPattern(n.getImage(1),"repeat")),o||++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}};let Nr=null;class qr extends f{constructor(t,e,i,n,r){super(),this.hitDetectionImage_=null,this.image_=t,this.crossOrigin_=i,this.canvas_={},this.color_=r,this.imageState_=void 0===n?dr.IDLE:n,this.size_=t&&t.width&&t.height?[t.width,t.height]:null,this.src_=e,this.tainted_,this.ready_=null}initializeImage_(){this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)}isTainted_(){if(void 0===this.tainted_&&this.imageState_===dr.LOADED){Nr||(Nr=U(1,1,void 0,{willReadFrequently:!0})),Nr.drawImage(this.image_,0,0);try{Nr.getImageData(0,0,1,1),this.tainted_=!1}catch(t){Nr=null,this.tainted_=!0}}return!0===this.tainted_}dispatchChangeEvent_(){this.dispatchEvent(m)}handleImageError_(){this.imageState_=dr.ERROR,this.dispatchChangeEvent_()}handleImageLoad_(){this.imageState_=dr.LOADED,this.size_=[this.image_.width,this.image_.height],this.dispatchChangeEvent_()}getImage(t){return this.image_||this.initializeImage_(),this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_}getPixelRatio(t){return this.replaceColor_(t),this.canvas_[t]?t:1}getImageState(){return this.imageState_}getHitDetectionImage(){if(this.image_||this.initializeImage_(),!this.hitDetectionImage_)if(this.isTainted_()){const t=this.size_[0],e=this.size_[1],i=U(t,e);i.fillRect(0,0,t,e),this.hitDetectionImage_=i.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_}getSize(){return this.size_}getSrc(){return this.src_}load(){if(this.imageState_===dr.IDLE){this.image_||this.initializeImage_(),this.imageState_=dr.LOADING;try{void 0!==this.src_&&(this.image_.src=this.src_)}catch(t){this.handleImageError_()}this.image_ instanceof HTMLImageElement&&zr(this.image_,this.src_).then((t=>{this.image_=t,this.handleImageLoad_()})).catch(this.handleImageError_.bind(this))}}replaceColor_(t){if(!this.color_||this.canvas_[t]||this.imageState_!==dr.LOADED)return;const e=this.image_,i=document.createElement("canvas");i.width=Math.ceil(e.width*t),i.height=Math.ceil(e.height*t);const n=i.getContext("2d");n.scale(t,t),n.drawImage(e,0,0),n.globalCompositeOperation="multiply",n.fillStyle=function(t){return"string"==typeof t?t:Dr(t)}(this.color_),n.fillRect(0,0,i.width/t,i.height/t),n.globalCompositeOperation="destination-in",n.drawImage(e,0,0),this.canvas_[t]=i}ready(){return this.ready_||(this.ready_=new Promise((t=>{this.imageState_===dr.LOADED||this.imageState_===dr.ERROR?t():this.addEventListener(m,(function e(){this.imageState_!==dr.LOADED&&this.imageState_!==dr.ERROR||(this.removeEventListener(m,e),t())}))}))),this.ready_}}function Wr(t,e,i,n,r,s){let o=void 0===e?void 0:Gr.get(e,i,r);return o||(o=new qr(t,t instanceof HTMLImageElement?t.src||void 0:e,i,n,r),Gr.set(e,i,r,o,s)),s&&o&&!Gr.getPattern(e,i,r)&&Gr.set(e,i,r,o,s),o}function Xr(t){return t?Array.isArray(t)?Dr(t):"object"==typeof t&&"src"in t?function(t){if(!t.offset||!t.size)return Gr.getPattern(t.src,"anonymous",t.color);const e=t.src+":"+t.offset,i=Gr.getPattern(e,void 0,t.color);if(i)return i;const n=Gr.get(t.src,"anonymous",null);if(n.getImageState()!==dr.LOADED)return null;const r=U(t.size[0],t.size[1]);return r.drawImage(n.getImage(1),t.offset[0],t.offset[1],t.size[0],t.size[1],0,0,t.size[0],t.size[1]),Wr(r.canvas,e,void 0,dr.LOADED,t.color,!0),Gr.getPattern(e,void 0,t.color)}(t):t:null}const Br="10px sans-serif",Vr="#000",Yr="round",Zr=[],Ur="round",$r="#000",Kr="center",Hr="middle",Jr=[0,0,0,0],Qr=new A;let ts,es=null;const is={},ns=function(){const t="32px ",e=["monospace","serif"],i=e.length,n="wmytzilWMYTZIL@#/&?$%10";let r,s;function o(r,o,a){let l=!0;for(let h=0;hMath.max(e,os(t,i))),0);return i[e]=n,n}function ls(t,e,i,n,r,s,o,a,l,h,u){t.save(),1!==i&&(void 0===t.globalAlpha?t.globalAlpha=t=>t.globalAlpha*=i:t.globalAlpha*=i),e&&t.transform.apply(t,e),n.contextInstructions?(t.translate(l,h),t.scale(u[0],u[1]),function(t,e){const i=t.contextInstructions;for(let t=0,n=i.length;tthis.imageState_=dr.LOADED)),this.render()}clone(){const t=this.getScale(),e=new hs({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_,e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.createHitDetectionCanvas_(this.renderOptions_)),this.hitDetectionCanvas_}getImage(t){let e=this.canvases_[t];if(!e){const i=this.renderOptions_,n=U(i.size*t,i.size*t);this.draw_(i,n,t),e=n.canvas,this.canvases_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return this.imageState_}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||this.points_===1/0||"bevel"!==t&&"miter"!==t)return e;let n=this.radius_,r=void 0===this.radius2_?n:this.radius2_;if(n{this.patternImage_=null})),e.getImageState()===dr.IDLE&&e.load(),e.getImageState()===dr.LOADING&&(this.patternImage_=e)}this.color_=t}loading(){return!!this.patternImage_}ready(){return this.patternImage_?this.patternImage_.ready():Promise.resolve()}}class ds{constructor(t){t=t||{},this.color_=void 0!==t.color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new ds({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}class ps{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=ms,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new ps({geometry:t??void 0,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer()??void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=ms,this.geometry_=t}setZIndex(t){this.zIndex_=t}}let gs=null;function fs(t,e){if(!gs){const t=new cs({color:"rgba(255,255,255,0.4)"}),e=new ds({color:"#3399CC",width:1.25});gs=[new ps({image:new us({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return gs}function ms(t){return t.getGeometry()}var ys=ps;function _s(t,e,i,n){return void 0!==i&&void 0!==n?[i/t,n/e]:void 0!==i?i/t:void 0!==n?n/e:1}class xs extends fr{constructor(t){const e=void 0!==(t=t||{}).opacity?t.opacity:1,i=void 0!==t.rotation?t.rotation:0,n=void 0!==t.scale?t.scale:1,r=void 0!==t.rotateWithView&&t.rotateWithView;super({opacity:e,rotation:i,scale:n,displacement:void 0!==t.displacement?t.displacement:[0,0],rotateWithView:r,declutterMode:t.declutterMode}),this.anchor_=void 0!==t.anchor?t.anchor:[.5,.5],this.normalizedAnchor_=null,this.anchorOrigin_=void 0!==t.anchorOrigin?t.anchorOrigin:"top-left",this.anchorXUnits_=void 0!==t.anchorXUnits?t.anchorXUnits:"fraction",this.anchorYUnits_=void 0!==t.anchorYUnits?t.anchorYUnits:"fraction",this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null;const s=void 0!==t.img?t.img:null;let o,a=t.src;if(At(!(void 0!==a&&s),"`image` and `src` cannot be provided at the same time"),void 0!==a&&0!==a.length||!s||(a=s.src||P(s)),At(void 0!==a&&a.length>0,"A defined and non-empty `src` or `image` must be provided"),At(!((void 0!==t.width||void 0!==t.height)&&void 0!==t.scale),"`width` or `height` cannot be provided together with `scale`"),void 0!==t.src?o=dr.IDLE:void 0!==s&&(o=s instanceof HTMLImageElement?s.complete?s.src?dr.LOADED:dr.IDLE:dr.LOADING:dr.LOADED),this.color_=void 0!==t.color?Lr(t.color):null,this.iconImage_=Wr(s,a,this.crossOrigin_,o,this.color_),this.offset_=void 0!==t.offset?t.offset:[0,0],this.offsetOrigin_=void 0!==t.offsetOrigin?t.offsetOrigin:"top-left",this.origin_=null,this.size_=void 0!==t.size?t.size:null,void 0!==t.width||void 0!==t.height){let e,i;if(t.size)[e,i]=t.size;else{const n=this.getImage(1);if(n.width&&n.height)e=n.width,i=n.height;else if(n instanceof HTMLImageElement){this.initialOptions_=t;const e=()=>{if(this.unlistenImageChange(e),!this.initialOptions_)return;const i=this.iconImage_.getSize();this.setScale(_s(i[0],i[1],t.width,t.height))};return void this.listenImageChange(e)}}void 0!==e&&this.setScale(_s(e,i,t.width,t.height))}}clone(){let t,e,i;return this.initialOptions_?(e=this.initialOptions_.width,i=this.initialOptions_.height):(t=this.getScale(),t=Array.isArray(t)?t.slice():t),new xs({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:t,width:e,height:i,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const e=this.getSize();if("fraction"==this.anchorXUnits_||"fraction"==this.anchorYUnits_){if(!e)return null;t=this.anchor_.slice(),"fraction"==this.anchorXUnits_&&(t[0]*=e[0]),"fraction"==this.anchorYUnits_&&(t[1]*=e[1])}if("top-left"!=this.anchorOrigin_){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),"top-right"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[0]=-t[0]+e[0]),"bottom-left"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]-e[0]/i[0],t[1]+e[1]/i[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if("top-left"!=this.offsetOrigin_){const e=this.getSize(),i=this.iconImage_.getSize();if(!e||!i)return null;t=t.slice(),"top-right"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[0]=i[0]-e[0]-t[0]),"bottom-left"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[1]=i[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}getWidth(){const t=this.getScaleArray();return this.size_?this.size_[0]*t[0]:this.iconImage_.getImageState()==dr.LOADED?this.iconImage_.getSize()[0]*t[0]:void 0}getHeight(){const t=this.getScaleArray();return this.size_?this.size_[1]*t[1]:this.iconImage_.getImageState()==dr.LOADED?this.iconImage_.getSize()[1]*t[1]:void 0}setScale(t){delete this.initialOptions_,super.setScale(t)}listenImageChange(t){this.iconImage_.addEventListener(m,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(m,t)}ready(){return this.iconImage_.ready()}}class vs{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.scale_=t.scale,this.scaleArray_=gr(void 0!==t.scale?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.repeat_=t.repeat,this.textBaseline_=t.textBaseline,this.fill_=void 0!==t.fill?t.fill:new cs({color:"#333"}),this.maxAngle_=void 0!==t.maxAngle?t.maxAngle:Math.PI/4,this.placement_=void 0!==t.placement?t.placement:"point",this.overflow_=!!t.overflow,this.stroke_=void 0!==t.stroke?t.stroke:null,this.offsetX_=void 0!==t.offsetX?t.offsetX:0,this.offsetY_=void 0!==t.offsetY?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=void 0===t.padding?null:t.padding,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new vs({font:this.getFont(),placement:this.getPlacement(),repeat:this.getRepeat(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0,declutterMode:this.getDeclutterMode()})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getRepeat(){return this.repeat_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}getDeclutterMode(){return this.declutterMode_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRepeat(t){this.repeat_=t}setRotateWithView(t){this.rotateWithView_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=gr(void 0!==t?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}let ws=0;const bs=0,Cs=1<",GreaterThanOrEqualTo:">=",LessThan:"<",LessThanOrEqualTo:"<=",Multiply:"*",Divide:"/",Add:"+",Subtract:"-",Clamp:"clamp",Mod:"%",Pow:"^",Abs:"abs",Floor:"floor",Ceil:"ceil",Round:"round",Sin:"sin",Cos:"cos",Atan:"atan",Sqrt:"sqrt",Match:"match",Between:"between",Interpolate:"interpolate",Coalesce:"coalesce",Case:"case",In:"in",Number:"number",String:"string",Array:"array",Color:"color",Id:"id",Band:"band",Palette:"palette",ToString:"to-string"},Gs={[js.Get]:Vs((([t,e])=>void 0!==e?function(t){switch(t){case"string":return Es;case"color":return Ts;case"number":return Ss;case"boolean":return Cs;case"number[]":return Rs;default:throw new Error(`Unrecognized type hint: ${t}`)}}(e.value):Is),qs(1,2),(function(t,e){const i=zs(t[1],e);if(!(i instanceof As))throw new Error("Expected a literal argument for get operation");if("string"!=typeof i.value)throw new Error("Expected a string argument for get operation");if(e.properties.add(i.value),3===t.length){return[i,zs(t[2],e)]}return[i]})),[js.Var]:Vs((([t])=>t.type),qs(1,1),(function(t,e,i,n){const r=t[1];if("string"!=typeof r)throw new Error("Expected a string argument for var operation");if(e.variables.add(r),!("variables"in e.style)||void 0===e.style.variables[r])return[new As(Is,r)];const s=e.style.variables[r],o=zs(s,e);if(o.value=r,n&&!Ps(n,o.type))throw new Error(`The variable ${r} has type ${Fs(o.type)} but the following type was expected: ${Fs(n)}`);return[o]})),[js.Id]:Vs(Ss|Es,Ns,(function(t,e){e.featureId=!0})),[js.Concat]:Vs(Es,qs(2,1/0),Ws(Is)),[js.GeometryType]:Vs(Es,Ns,(function(t,e){e.geometryType=!0})),[js.Resolution]:Vs(Ss,Ns),[js.Zoom]:Vs(Ss,Ns),[js.Time]:Vs(Ss,Ns),[js.Any]:Vs(Cs,qs(2,1/0),Ws(Cs)),[js.All]:Vs(Cs,qs(2,1/0),Ws(Cs)),[js.Not]:Vs(Cs,qs(1,1),Ws(Cs)),[js.Equal]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.NotEqual]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.GreaterThan]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.GreaterThanOrEqualTo]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.LessThan]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.LessThanOrEqualTo]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.Multiply]:Vs((t=>{let e=Ss|Ts;for(let i=0;i{let e=Is;for(let i=1;i{let e=Is;for(let i=2;i{let e=Ts|Ss;for(let i=3;i{let e=Is;for(let i=1;i3===t.length||4===t.length?Rs|Ts:Rs),qs(1,1/0),Ws(Ss)),[js.Color]:Vs(Ts,qs(1,4),Ws(Ss)),[js.Band]:Vs(Ss,qs(1,3),Ws(Ss)),[js.Palette]:Vs(Ts,qs(2,2),(function(t,e){const i=zs(t[1],e,Ss);if(i.type!==Ss)throw new Error(`The first argument of palette must be an number, got ${Fs(i.type)} instead`);const n=t[2];if(!Array.isArray(n))throw new Error("The second argument of palette must be an array");const r=new Array(n.length);for(let t=0;te){throw new Error(`Expected ${e===1/0?`${t} or more`:`${t} to ${e}`} arguments for ${r}, got ${s}`)}}}function Ws(t){return function(e,i){const n=e[0],r=e.length-1,s=new Array(r);for(let o=0;o{for(let e=0;e{for(let e=0;et.properties[n];case js.Var:return t=>t.variables[n];default:throw new Error(`Unsupported accessor operator ${t.operator}`)}}(t);case js.Id:return t=>t.featureId;case js.GeometryType:return t=>t.geometryType;case js.Concat:{const e=t.args.map((t=>Us(t)));return t=>"".concat(...e.map((e=>e(t).toString())))}case js.Resolution:return t=>t.resolution;case js.Any:case js.All:case js.Between:case js.In:case js.Not:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{for(let e=0;e{for(let e=0;e{const e=r[0](t),i=r[1](t),n=r[2](t);return e>=i&&e<=n};case js.In:return t=>{const e=r[0](t);for(let i=1;i!r[0](t);default:throw new Error(`Unsupported logical operator ${i}`)}}(t);case js.Equal:case js.NotEqual:case js.LessThan:case js.LessThanOrEqualTo:case js.GreaterThan:case js.GreaterThanOrEqualTo:return function(t,e){const i=t.operator,n=Us(t.args[0]),r=Us(t.args[1]);switch(i){case js.Equal:return t=>n(t)===r(t);case js.NotEqual:return t=>n(t)!==r(t);case js.LessThan:return t=>n(t)n(t)<=r(t);case js.GreaterThan:return t=>n(t)>r(t);case js.GreaterThanOrEqualTo:return t=>n(t)>=r(t);default:throw new Error(`Unsupported comparison operator ${i}`)}}(t);case js.Multiply:case js.Divide:case js.Add:case js.Subtract:case js.Clamp:case js.Mod:case js.Pow:case js.Abs:case js.Floor:case js.Ceil:case js.Round:case js.Sin:case js.Cos:case js.Atan:case js.Sqrt:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{let e=1;for(let i=0;ir[0](t)/r[1](t);case js.Add:return t=>{let e=0;for(let i=0;ir[0](t)-r[1](t);case js.Clamp:return t=>{const e=r[0](t),i=r[1](t);if(en?n:e};case js.Mod:return t=>r[0](t)%r[1](t);case js.Pow:return t=>Math.pow(r[0](t),r[1](t));case js.Abs:return t=>Math.abs(r[0](t));case js.Floor:return t=>Math.floor(r[0](t));case js.Ceil:return t=>Math.ceil(r[0](t));case js.Round:return t=>Math.round(r[0](t));case js.Sin:return t=>Math.sin(r[0](t));case js.Cos:return t=>Math.cos(r[0](t));case js.Atan:return 2===n?t=>Math.atan2(r[0](t),r[1](t)):t=>Math.atan(r[0](t));case js.Sqrt:return t=>Math.sqrt(r[0](t));default:throw new Error(`Unsupported numeric operator ${i}`)}}(t);case js.Case:return function(t,e){const i=t.args.length,n=new Array(i);for(let e=0;e{for(let e=0;e{const e=n[0](t);for(let r=1;r{const e=n[0](t),r=n[1](t);let s,o;for(let a=2;a=r)return 2===a?l:h?Ks(e,r,s,o,i,l):$s(e,r,s,o,i,l);s=i,o=l}return o}}(t);case js.ToString:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{const i=r[0](e);return t.args[0].type===Ts?Dr(i):i.toString()};throw new Error(`Unsupported convert operator ${i}`)}(t);default:throw new Error(`Unsupported operator ${i}`)}}function $s(t,e,i,n,r,s){const o=r-i;if(0===o)return n;const a=e-i;return n+(1===t?a/o:(Math.pow(t,a)-1)/(Math.pow(t,o)-1))*(s-n)}function Ks(t,e,i,n,r,s){if(0===r-i)return n;const o=Fr(n),a=Fr(s);let l=a[2]-o[2];l>180?l-=360:l<-180&&(l+=360);return Ar(function(t){const e=_r.rgb(wr.xyz(t));return e[3]=t[3],e}([$s(t,e,i,o[0],r,a[0]),$s(t,e,i,o[1],r,a[1]),o[2]+$s(t,e,i,0,r,l),$s(t,e,i,n[3],r,s[3])]))}function Hs(t){return!0}function Js(t){const e=Os(),i=function(t,e){const i=t.length,n=new Array(i);for(let r=0;r4)throw new Error(`Expected a color with 3 or 4 values for ${e}`);return i}function vo(t,e){const i=mo(t,e);if(2!==i.length)throw new Error(`Expected an array of two numbers for ${e}`);return i}const wo="renderOrder";class bo extends Zn{constructor(t){t=t||{};const e=Object.assign({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,super(e),this.declutter_=t.declutter?String(t.declutter):void 0,this.renderBuffer_=void 0!==t.renderBuffer?t.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(t.style),this.updateWhileAnimating_=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.updateWhileInteracting_=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}getDeclutter(){return this.declutter_}getFeatures(t){return super.getFeatures(t)}getRenderBuffer(){return this.renderBuffer_}getRenderOrder(){return this.get(wo)}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}getUpdateWhileAnimating(){return this.updateWhileAnimating_}getUpdateWhileInteracting(){return this.updateWhileInteracting_}renderDeclutter(t,e){const i=this.getDeclutter();i in t.declutter==!1&&(t.declutter[i]=new Jn(9)),this.getRenderer().renderDeclutter(t,e)}setRenderOrder(t){this.set(wo,t)}setStyle(t){this.style_=function(t){if(void 0===t)return fs;if(!t)return null;if("function"==typeof t)return t;if(t instanceof ys)return t;if(!Array.isArray(t))return Qs([t]);if(0===t.length)return[];const e=t.length,i=t[0];if(i instanceof ys){const i=new Array(e);for(let n=0;n=0;--r){const s=g[r],c=s.layer;if(c.hasRenderer()&&Yn(s,h)&&o.call(a,c)){const r=c.getRenderer(),o=c.getSource();if(r&&o){const a=o.getWrapX()?d:t,h=u.bind(null,s.managed);y[0]=a[0]+p[n][0],y[1]=a[1]+p[n][1],l=r.forEachFeatureAtCoordinate(y,e,i,h,m)}if(l)return l}}if(0===m.length)return;const _=1/m.length;return m.forEach(((t,e)=>t.distanceSq+=e*_)),m.sort(((t,e)=>t.distanceSq-e.distanceSq)),m.some((t=>l=t.callback(t.feature,t.layer,t.geometry))),l}hasFeatureAtCoordinate(t,e,i,n,r,s){return void 0!==this.forEachFeatureAtCoordinate(t,e,i,n,l,this,r,s)}getMap(){return this.map_}renderFrame(t){k()}scheduleExpireIconCache(t){Gr.canExpireCache()&&t.postRenderFunctions.push(So)}}function So(t,e){Gr.expire()}class Eo extends t{constructor(t,e,i,n){super(t),this.inversePixelTransform=e,this.frameState=i,this.context=n}}class To extends Co{constructor(t){super(t),this.fontChangeListenerKey_=T(Qr,e,t.redrawText.bind(t)),this.element_=document.createElement("div");const i=this.element_.style;i.position="absolute",i.width="100%",i.height="100%",i.zIndex="0",this.element_.className=ot+" ol-layers";const n=t.getViewport();n.insertBefore(this.element_,n.firstChild||null),this.children_=[],this.renderedVisible_=!0}dispatchRenderEvent(t,e){const i=this.getMap();if(i.hasListener(t)){const n=new Eo(t,void 0,e);i.dispatchEvent(n)}}disposeInternal(){I(this.fontChangeListenerKey_),this.element_.parentNode.removeChild(this.element_),super.disposeInternal()}renderFrame(t){if(!t)return void(this.renderedVisible_&&(this.element_.style.display="none",this.renderedVisible_=!1));this.calculateMatrices2D(t),this.dispatchRenderEvent(Zt,t);const e=t.layerStatesArray.sort((function(t,e){return t.zIndex-e.zIndex}));e.some((t=>t.layer instanceof bo&&t.layer.getDeclutter()))&&(t.declutter={});const i=t.viewState;this.children_.length=0;const n=[];let r=null;for(let s=0,o=e.length;s=0;--i){const n=e[i],r=n.layer;r.getDeclutter()&&r.renderDeclutter(t,n)}e.forEach((e=>e.layer.renderDeferred(t)))}}class Ro extends t{constructor(t,e){super(t),this.layer=e}}const Io="layers";class Mo extends Bt{constructor(t){t=t||{};const e=Object.assign({},t);delete e.layers;let i=t.layers;super(e),this.on,this.once,this.un,this.layersListenerKeys_=[],this.listenerKeys_={},this.addChangeListener(Io,this.handleLayersChanged_),i?Array.isArray(i)?i=new Ct(i.slice(),{unique:!0}):At("function"==typeof i.getArray,"Expected `layers` to be an array or a `Collection`"):i=new Ct(void 0,{unique:!0}),this.setLayers(i)}handleLayerChange_(){this.changed()}handleLayersChanged_(){this.layersListenerKeys_.forEach(I),this.layersListenerKeys_.length=0;const t=this.getLayers();this.layersListenerKeys_.push(T(t,xt,this.handleLayersAdd_,this),T(t,vt,this.handleLayersRemove_,this));for(const t in this.listenerKeys_)this.listenerKeys_[t].forEach(I);p(this.listenerKeys_);const e=t.getArray();for(let t=0,i=e.length;t{this.clickTimeoutId_=void 0;const e=new Fo(Po.SINGLECLICK,this.map_,t);this.dispatchEvent(e)}),250)}updateActivePointers_(t){const e=t,i=e.pointerId;if(e.type==Po.POINTERUP||e.type==Po.POINTERCANCEL){delete this.trackedTouches_[i];for(const t in this.trackedTouches_)if(this.trackedTouches_[t].target!==e.target){delete this.trackedTouches_[t];break}}else e.type!=Po.POINTERDOWN&&e.type!=Po.POINTERMOVE||(this.trackedTouches_[i]=e);this.activePointers_=Object.values(this.trackedTouches_)}handlePointerUp_(t){this.updateActivePointers_(t);const e=new Fo(Po.POINTERUP,this.map_,t,void 0,void 0,this.activePointers_);this.dispatchEvent(e),this.emulateClicks_&&!e.defaultPrevented&&!this.dragging_&&this.isMouseActionButton_(t)&&this.emulateClick_(this.down_),0===this.activePointers_.length&&(this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.dragging_=!1,this.down_=null)}isMouseActionButton_(t){return 0===t.button}handlePointerDown_(t){this.emulateClicks_=0===this.activePointers_.length,this.updateActivePointers_(t);const e=new Fo(Po.POINTERDOWN,this.map_,t,void 0,void 0,this.activePointers_);if(this.dispatchEvent(e),this.down_=new PointerEvent(t.type,t),Object.defineProperty(this.down_,"target",{writable:!1,value:t.target}),0===this.dragListenerKeys_.length){const t=this.map_.getOwnerDocument();this.dragListenerKeys_.push(T(t,Po.POINTERMOVE,this.handlePointerMove_,this),T(t,Po.POINTERUP,this.handlePointerUp_,this),T(this.element_,Po.POINTERCANCEL,this.handlePointerUp_,this)),this.element_.getRootNode&&this.element_.getRootNode()!==t&&this.dragListenerKeys_.push(T(this.element_.getRootNode(),Po.POINTERUP,this.handlePointerUp_,this))}}handlePointerMove_(t){if(this.isMoving_(t)){this.updateActivePointers_(t),this.dragging_=!0;const e=new Fo(Po.POINTERDRAG,this.map_,t,this.dragging_,void 0,this.activePointers_);this.dispatchEvent(e)}}relayMoveEvent_(t){this.originalPointerMoveEvent_=t;const e=!(!this.down_||!this.isMoving_(t));this.dispatchEvent(new Fo(Po.POINTERMOVE,this.map_,t,e))}handleTouchMove_(t){const e=this.originalPointerMoveEvent_;e&&!e.defaultPrevented||"boolean"==typeof t.cancelable&&!0!==t.cancelable||t.preventDefault()}isMoving_(t){return this.dragging_||Math.abs(t.clientX-this.down_.clientX)>this.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_}disposeInternal(){this.relayedListenerKey_&&(I(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(S,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(I(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.element_=null,super.disposeInternal()}}const Oo=1/0;class zo{constructor(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}clear(){this.elements_.length=0,this.priorities_.length=0,p(this.queuedElements_)}dequeue(){const t=this.elements_,e=this.priorities_,i=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));const n=this.keyFunction_(i);return delete this.queuedElements_[n],i}enqueue(t){At(!(this.keyFunction_(t)in this.queuedElements_),"Tried to enqueue an `element` that was already added to the queue");const e=this.priorityFunction_(t);return e!=Oo&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)}getCount(){return this.elements_.length}getLeftChildIndex_(t){return 2*t+1}getRightChildIndex_(t){return 2*t+2}getParentIndex_(t){return t-1>>1}heapify_(){let t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)}isEmpty(){return 0===this.elements_.length}isKeyQueued(t){return t in this.queuedElements_}isQueued(t){return this.isKeyQueued(this.keyFunction_(t))}siftUp_(t){const e=this.elements_,i=this.priorities_,n=e.length,r=e[t],s=i[t],o=t;for(;t>1;){const r=this.getLeftChildIndex_(t),s=this.getRightChildIndex_(t),o=st;){const t=this.getParentIndex_(e);if(!(n[t]>s))break;i[e]=i[t],n[e]=n[t],e=t}i[e]=r,n[e]=s}reprioritize(){const t=this.priorityFunction_,e=this.elements_,i=this.priorities_;let n=0;const r=e.length;let s,o,a;for(o=0;o0;)n=this.dequeue()[0],r=n.getKey(),i=n.getState(),i!==jo.IDLE||r in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[r]=!0,++this.tilesLoading_,++s,n.load())}}var No=class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),render:t.render,target:t.target}),this.ulElement_=document.createElement("ul"),this.collapsed_=void 0===t.collapsed||t.collapsed,this.userCollapsed_=this.collapsed_,this.overrideCollapsible_=void 0!==t.collapsible,this.collapsible_=void 0===t.collapsible||t.collapsible,this.collapsible_||(this.collapsed_=!1);const e=void 0!==t.className?t.className:"ol-attribution",i=void 0!==t.tipLabel?t.tipLabel:"Attributions",n=void 0!==t.expandClassName?t.expandClassName:e+"-expand",r=void 0!==t.collapseLabel?t.collapseLabel:"›",s=void 0!==t.collapseClassName?t.collapseClassName:e+"-collapse";"string"==typeof r?(this.collapseLabel_=document.createElement("span"),this.collapseLabel_.textContent=r,this.collapseLabel_.className=s):this.collapseLabel_=r;const o=void 0!==t.label?t.label:"i";"string"==typeof o?(this.label_=document.createElement("span"),this.label_.textContent=o,this.label_.className=n):this.label_=o;const a=this.collapsible_&&!this.collapsed_?this.collapseLabel_:this.label_;this.toggleButton_=document.createElement("button"),this.toggleButton_.setAttribute("type","button"),this.toggleButton_.setAttribute("aria-expanded",String(!this.collapsed_)),this.toggleButton_.title=i,this.toggleButton_.appendChild(a),this.toggleButton_.addEventListener(x,this.handleClick_.bind(this),!1);const l=e+" "+ot+" "+lt+(this.collapsed_&&this.collapsible_?" "+ht:"")+(this.collapsible_?"":" ol-uncollapsible"),h=this.element;h.className=l,h.appendChild(this.toggleButton_),h.appendChild(this.ulElement_),this.renderedAttributions_=[],this.renderedVisible_=!0}collectSourceAttributions_(t){const e=Array.from(new Set(this.getMap().getAllLayers().flatMap((e=>e.getAttributions(t))))),i=!this.getMap().getAllLayers().some((t=>t.getSource()&&!1===t.getSource().getAttributionsCollapsible()));return this.overrideCollapsible_||this.setCollapsible(i),e}async updateElement_(t){if(!t)return void(this.renderedVisible_&&(this.element.style.display="none",this.renderedVisible_=!1));const e=await Promise.all(this.collectSourceAttributions_(t).map((t=>d((()=>t))))),i=e.length>0;if(this.renderedVisible_!=i&&(this.element.style.display=i?"":"none",this.renderedVisible_=i),!a(e,this.renderedAttributions_)){!function(t){for(;t.lastChild;)t.removeChild(t.lastChild)}(this.ulElement_);for(let t=0,i=e.length;t0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:zi}):t.setRotation(0))}render(t){const e=t.frameState;if(!e)return;const i=e.viewState.rotation;if(i!=this.rotation_){const t="rotate("+i+"rad)";if(this.autoHide_){const t=this.element.classList.contains(st);t||0!==i?t&&0!==i&&this.element.classList.remove(st):this.element.classList.add(st)}this.label_.style.transform=t}this.rotation_=i}};var Wo=class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target});const e=void 0!==t.className?t.className:"ol-zoom",i=void 0!==t.delta?t.delta:1,n=void 0!==t.zoomInClassName?t.zoomInClassName:e+"-in",r=void 0!==t.zoomOutClassName?t.zoomOutClassName:e+"-out",s=void 0!==t.zoomInLabel?t.zoomInLabel:"+",o=void 0!==t.zoomOutLabel?t.zoomOutLabel:"–",a=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",l=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=n,h.setAttribute("type","button"),h.title=a,h.appendChild("string"==typeof s?document.createTextNode(s):s),h.addEventListener(x,this.handleClick_.bind(this,i),!1);const u=document.createElement("button");u.className=r,u.setAttribute("type","button"),u.title=l,u.appendChild("string"==typeof o?document.createTextNode(o):o),u.addEventListener(x,this.handleClick_.bind(this,-i),!1);const c=e+" "+ot+" "+lt,d=this.element;d.className=c,d.appendChild(h),d.appendChild(u),this.duration_=void 0!==t.duration?t.duration:250}handleClick_(t,e){e.preventDefault(),this.zoomByDelta_(t)}zoomByDelta_(t){const e=this.getMap().getView();if(!e)return;const i=e.getZoom();if(void 0!==i){const n=e.getConstrainedZoom(i+t);this.duration_>0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:n,duration:this.duration_,easing:zi})):e.setZoom(n)}}};var Xo="active";class Bo extends A{constructor(t){super(),this.on,this.once,this.un,t&&t.handleEvent&&(this.handleEvent=t.handleEvent),this.map_=null,this.setActive(!0)}getActive(){return this.get(Xo)}getMap(){return this.map_}handleEvent(t){return!0}setActive(t){this.set(Xo,t)}setMap(t){this.map_=t}}function Vo(t,e,i,n){const r=t.getZoom();if(void 0===r)return;const s=t.getConstrainedZoom(r+e),o=t.getResolutionForZoom(s);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:o,anchor:i,duration:void 0!==n?n:250,easing:zi})}var Yo=class extends Bo{constructor(t){super(),t=t||{},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:250}handleEvent(t){let e=!1;if(t.type==Po.DBLCLICK){const i=t.originalEvent,n=t.map,r=t.coordinate,s=i.shiftKey?-this.delta_:this.delta_;Vo(n.getView(),s,r,this.duration_),i.preventDefault(),e=!0}return!e}};class Zo extends Bo{constructor(t){super(t=t||{}),t.handleDownEvent&&(this.handleDownEvent=t.handleDownEvent),t.handleDragEvent&&(this.handleDragEvent=t.handleDragEvent),t.handleMoveEvent&&(this.handleMoveEvent=t.handleMoveEvent),t.handleUpEvent&&(this.handleUpEvent=t.handleUpEvent),t.stopDown&&(this.stopDown=t.stopDown),this.handlingDownUpSequence=!1,this.targetPointers=[]}getPointerCount(){return this.targetPointers.length}handleDownEvent(t){return!1}handleDragEvent(t){}handleEvent(t){if(!t.originalEvent)return!0;let e=!1;if(this.updateTrackedPointers_(t),this.handlingDownUpSequence){if(t.type==Po.POINTERDRAG)this.handleDragEvent(t),t.originalEvent.preventDefault();else if(t.type==Po.POINTERUP){const e=this.handleUpEvent(t);this.handlingDownUpSequence=e&&this.targetPointers.length>0}}else if(t.type==Po.POINTERDOWN){const i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==Po.POINTERMOVE&&this.handleMoveEvent(t);return!e}handleMoveEvent(t){}handleUpEvent(t){return!1}stopDown(t){return t}updateTrackedPointers_(t){t.activePointers&&(this.targetPointers=t.activePointers)}}function Uo(t){const e=t.length;let i=0,n=0;for(let r=0;r0&&this.condition_(t)){const e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1}};class oa extends Zo{constructor(t){t=t||{},super({stopDown:h}),this.condition_=t.condition?t.condition:Ko,this.lastAngle_=void 0,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){if(!na(t))return;const e=t.map,i=e.getView();if(i.getConstraints().rotation===Ai)return;const n=e.getSize(),r=t.pixel,s=Math.atan2(n[1]/2-r[1],r[0]-n[0]/2);if(void 0!==this.lastAngle_){const t=s-this.lastAngle_;i.adjustRotationInternal(-t)}this.lastAngle_=s}handleUpEvent(t){if(!na(t))return!0;return t.map.getView().endInteraction(this.duration_),!1}handleDownEvent(t){if(!na(t))return!1;if(Qo(t)&&this.condition_(t)){return t.map.getView().beginInteraction(),this.lastAngle_=void 0,!0}return!1}}class aa extends i{constructor(t){super(),this.geometry_=null,this.element_=document.createElement("div"),this.element_.style.position="absolute",this.element_.style.pointerEvents="auto",this.element_.className="ol-box "+t,this.map_=null,this.startPixel_=null,this.endPixel_=null}disposeInternal(){this.setMap(null)}render_(){const t=this.startPixel_,e=this.endPixel_,i="px",n=this.element_.style;n.left=Math.min(t[0],e[0])+i,n.top=Math.min(t[1],e[1])+i,n.width=Math.abs(e[0]-t[0])+i,n.height=Math.abs(e[1]-t[1])+i}setMap(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);const t=this.element_.style;t.left="inherit",t.top="inherit",t.width="inherit",t.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)}setPixels(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()}createOrUpdateGeometry(){const t=this.startPixel_,e=this.endPixel_,i=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);i[4]=i[0].slice(),this.geometry_?this.geometry_.setCoordinates([i]):this.geometry_=new Nn([i])}getGeometry(){return this.geometry_}}const la="boxstart",ha="boxdrag",ua="boxend",ca="boxcancel";class da extends t{constructor(t,e,i){super(t),this.coordinate=e,this.mapBrowserEvent=i}}class pa extends Zo{constructor(t){super(),this.on,this.once,this.un,t=t||{},this.box_=new aa(t.className||"ol-dragbox"),this.minArea_=void 0!==t.minArea?t.minArea:64,t.onBoxEnd&&(this.onBoxEnd=t.onBoxEnd),this.startPixel_=null,this.condition_=t.condition?t.condition:Qo,this.boxEndCondition_=t.boxEndCondition?t.boxEndCondition:this.defaultBoxEndCondition}defaultBoxEndCondition(t,e,i){const n=i[0]-e[0],r=i[1]-e[1];return n*n+r*r>=this.minArea_}getGeometry(){return this.box_.getGeometry()}handleDragEvent(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new da(ha,t.coordinate,t))}handleUpEvent(t){this.box_.setMap(null);const e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new da(e?ua:ca,t.coordinate,t)),!1}handleDownEvent(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new da(la,t.coordinate,t)),!0)}onBoxEnd(t){}}var ga=class extends pa{constructor(t){super({condition:(t=t||{}).condition?t.condition:ea,className:t.className||"ol-dragzoom",minArea:t.minArea}),this.duration_=void 0!==t.duration?t.duration:200,this.out_=void 0!==t.out&&t.out}onBoxEnd(t){const e=this.getMap().getView();let i=this.getGeometry();if(this.out_){const t=e.rotatedExtentForGeometry(i),n=e.getResolutionForExtentInternal(t),r=e.getResolution()/n;i=i.clone(),i.scale(r*r)}e.fitInternal(i,{duration:this.duration_,easing:zi})}},fa="ArrowLeft",ma="ArrowUp",ya="ArrowRight",_a="ArrowDown";class xa extends Bo{constructor(t){super(),t=t||{},this.defaultCondition_=function(t){return ta(t)&&ia(t)},this.condition_=void 0!==t.condition?t.condition:this.defaultCondition_,this.duration_=void 0!==t.duration?t.duration:100,this.pixelDelta_=void 0!==t.pixelDelta?t.pixelDelta:128}handleEvent(t){let e=!1;if(t.type==w){const i=t.originalEvent,n=i.key;if(this.condition_(t)&&(n==_a||n==fa||n==ya||n==ma)){const r=t.map.getView(),s=r.getResolution()*this.pixelDelta_;let o=0,a=0;n==_a?a=-s:n==fa?o=-s:n==ya?o=s:a=s;const l=[o,a];ii(l,r.getRotation()),function(t,e,i){const n=t.getCenterInternal();if(n){const r=[n[0]+e[0],n[1]+e[1]];t.animateInternal({duration:void 0!==i?i:250,easing:Gi,center:t.getConstrainedCenter(r)})}}(r,l,this.duration_),i.preventDefault(),e=!0}}return!e}}var va=class extends Bo{constructor(t){super(),t=t||{},this.condition_=t.condition?t.condition:function(t){return!function(t){const e=t.originalEvent;return X?e.metaKey:e.ctrlKey}(t)&&ia(t)},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:100}handleEvent(t){let e=!1;if(t.type==w||t.type==b){const i=t.originalEvent,n=i.key;if(this.condition_(t)&&("+"===n||"-"===n)){const r=t.map,s="+"===n?this.delta_:-this.delta_;Vo(r.getView(),s,void 0,this.duration_),i.preventDefault(),e=!0}}return!e}};class wa{constructor(t,e,i){this.decay_=t,this.minVelocity_=e,this.delay_=i,this.points_=[],this.angle_=0,this.initialVelocity_=0}begin(){this.points_.length=0,this.angle_=0,this.initialVelocity_=0}update(t,e){this.points_.push(t,e,Date.now())}end(){if(this.points_.length<6)return!1;const t=Date.now()-this.delay_,e=this.points_.length-3;if(this.points_[e+2]0&&this.points_[i+2]>t;)i-=3;const n=this.points_[e+2]-this.points_[i+2];if(n<1e3/60)return!1;const r=this.points_[e]-this.points_[i],s=this.points_[e+1]-this.points_[i+1];return this.angle_=Math.atan2(s,r),this.initialVelocity_=Math.sqrt(r*r+s*s)/n,this.initialVelocity_>this.minVelocity_}getDistance(){return(this.minVelocity_-this.initialVelocity_)/this.decay_}getAngle(){return this.angle_}}var ba=class extends Bo{constructor(t){super(t=t||{}),this.totalDelta_=0,this.lastDelta_=0,this.maxDelta_=void 0!==t.maxDelta?t.maxDelta:1,this.duration_=void 0!==t.duration?t.duration:250,this.timeout_=void 0!==t.timeout?t.timeout:80,this.useAnchor_=void 0===t.useAnchor||t.useAnchor,this.constrainResolution_=void 0!==t.constrainResolution&&t.constrainResolution;const e=t.condition?t.condition:Jo;this.condition_=t.onFocusOnly?$o(Ho,e):e,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_,this.mode_=void 0,this.trackpadEventGap_=400,this.trackpadTimeoutId_,this.deltaPerZoom_=300}endInteraction_(){this.trackpadTimeoutId_=void 0;const t=this.getMap();if(!t)return;t.getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)}handleEvent(t){if(!this.condition_(t))return!0;if(t.type!==E)return!0;const e=t.map,i=t.originalEvent;let n;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==E&&(n=i.deltaY,q&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(n/=B),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(n*=40)),0===n)return!1;this.lastDelta_=n;const r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(n)<4?"trackpad":"wheel");const s=e.getView();if("trackpad"===this.mode_&&!s.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(s.getAnimating()&&s.cancelAnimations(),s.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),s.adjustZoom(-n/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=n;const o=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,e),o),!1}handleWheelZoom_(t){const e=t.getView();e.getAnimating()&&e.cancelAnimations();let i=-Dt(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(i=i?i>0?1:-1:0),Vo(e,i,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0}setMouseAnchor(t){this.useAnchor_=t,t||(this.lastAnchor_=null)}};class Ca extends Zo{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=h),super(e),this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.threshold_=void 0!==t.threshold?t.threshold:.3,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){let e=0;const i=this.targetPointers[0],n=this.targetPointers[1],r=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);if(void 0!==this.lastAngle_){const t=r-this.lastAngle_;this.rotationDelta_+=t,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=t}this.lastAngle_=r;const s=t.map,o=s.getView();o.getConstraints().rotation!==Ai&&(this.anchor_=s.getCoordinateFromPixelInternal(s.getEventPixel(Uo(this.targetPointers))),this.rotating_&&(s.render(),o.adjustRotationInternal(e,this.anchor_)))}handleUpEvent(t){if(this.targetPointers.length<2){return t.map.getView().endInteraction(this.duration_),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}}var Sa=class extends Zo{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=h),super(e),this.anchor_=null,this.duration_=void 0!==t.duration?t.duration:400,this.lastDistance_=void 0,this.lastScaleDelta_=1}handleDragEvent(t){let e=1;const i=this.targetPointers[0],n=this.targetPointers[1],r=i.clientX-n.clientX,s=i.clientY-n.clientY,o=Math.sqrt(r*r+s*s);void 0!==this.lastDistance_&&(e=this.lastDistance_/o),this.lastDistance_=o;const a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e),this.anchor_=a.getCoordinateFromPixelInternal(a.getEventPixel(Uo(this.targetPointers))),a.render(),l.adjustResolutionInternal(e,this.anchor_)}handleUpEvent(t){if(this.targetPointers.length<2){const e=t.map.getView(),i=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,i),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}};function Ea(t){t instanceof Zn?t.setMapInternal(null):t instanceof Mo&&t.getLayers().forEach(Ea)}function Ta(t,e){if(t instanceof Zn)t.setMapInternal(e);else if(t instanceof Mo){const i=t.getLayers().getArray();for(let t=0,n=i.length;tthis.updateSize())),this.controls=e.controls||function(t){t=t||{};const e=new Ct;return(void 0===t.zoom||t.zoom)&&e.push(new Wo(t.zoomOptions)),(void 0===t.rotate||t.rotate)&&e.push(new qo(t.rotateOptions)),(void 0===t.attribution||t.attribution)&&e.push(new No(t.attributionOptions)),e}(),this.interactions=e.interactions||function(t){t=t||{};const e=new Ct,i=new wa(-.005,.05,100);return(void 0===t.altShiftDragRotate||t.altShiftDragRotate)&&e.push(new oa),(void 0===t.doubleClickZoom||t.doubleClickZoom)&&e.push(new Yo({delta:t.zoomDelta,duration:t.zoomDuration})),(void 0===t.dragPan||t.dragPan)&&e.push(new sa({onFocusOnly:t.onFocusOnly,kinetic:i})),(void 0===t.pinchRotate||t.pinchRotate)&&e.push(new Ca),(void 0===t.pinchZoom||t.pinchZoom)&&e.push(new Sa({duration:t.zoomDuration})),(void 0===t.keyboard||t.keyboard)&&(e.push(new xa),e.push(new va({delta:t.zoomDelta,duration:t.zoomDuration}))),(void 0===t.mouseWheelZoom||t.mouseWheelZoom)&&e.push(new ba({onFocusOnly:t.onFocusOnly,duration:t.zoomDuration})),(void 0===t.shiftDragZoom||t.shiftDragZoom)&&e.push(new ga({duration:t.zoomDuration})),e}({onFocusOnly:!0}),this.overlays_=e.overlays,this.overlayIdIndex_={},this.renderer_=null,this.postRenderFunctions_=[],this.tileQueue_=new Go(this.getTilePriority.bind(this),this.handleTileChange_.bind(this)),this.addChangeListener(et,this.handleLayerGroupChanged_),this.addChangeListener(rt,this.handleViewChanged_),this.addChangeListener(it,this.handleSizeChanged_),this.addChangeListener(nt,this.handleTargetChanged_),this.setProperties(e.values);const i=this;!t.view||t.view instanceof Wn||t.view.then((function(t){i.setView(new Wn(t))})),this.controls.addEventListener(xt,(t=>{t.element.setMap(this)})),this.controls.addEventListener(vt,(t=>{t.element.setMap(null)})),this.interactions.addEventListener(xt,(t=>{t.element.setMap(this)})),this.interactions.addEventListener(vt,(t=>{t.element.setMap(null)})),this.overlays_.addEventListener(xt,(t=>{this.addOverlayInternal_(t.element)})),this.overlays_.addEventListener(vt,(t=>{const e=t.element.getId();void 0!==e&&delete this.overlayIdIndex_[e.toString()],t.element.setMap(null)})),this.controls.forEach((t=>{t.setMap(this)})),this.interactions.forEach((t=>{t.setMap(this)})),this.overlays_.forEach(this.addOverlayInternal_.bind(this))}addControl(t){this.getControls().push(t)}addInteraction(t){this.getInteractions().push(t)}addLayer(t){this.getLayerGroup().getLayers().push(t)}handleLayerAdd_(t){Ta(t.layer,this)}addOverlay(t){this.getOverlays().push(t)}addOverlayInternal_(t){const e=t.getId();void 0!==e&&(this.overlayIdIndex_[e.toString()]=t),t.setMap(this)}disposeInternal(){this.controls.clear(),this.interactions.clear(),this.overlays_.clear(),this.resizeObserver_.disconnect(),this.setTarget(null),super.disposeInternal()}forEachFeatureAtPixel(t,e,i){if(!this.frameState_||!this.renderer_)return;const n=this.getCoordinateFromPixelInternal(t),r=void 0!==(i=void 0!==i?i:{}).hitTolerance?i.hitTolerance:0,s=void 0!==i.layerFilter?i.layerFilter:l,o=!1!==i.checkWrapped;return this.renderer_.forEachFeatureAtCoordinate(n,this.frameState_,r,o,e,null,s,null)}getFeaturesAtPixel(t,e){const i=[];return this.forEachFeatureAtPixel(t,(function(t){i.push(t)}),e),i}getAllLayers(){const t=[];return function e(i){i.forEach((function(i){i instanceof Mo?e(i.getLayers()):t.push(i)}))}(this.getLayers()),t}hasFeatureAtPixel(t,e){if(!this.frameState_||!this.renderer_)return!1;const i=this.getCoordinateFromPixelInternal(t),n=void 0!==(e=void 0!==e?e:{}).layerFilter?e.layerFilter:l,r=void 0!==e.hitTolerance?e.hitTolerance:0,s=!1!==e.checkWrapped;return this.renderer_.hasFeatureAtCoordinate(i,this.frameState_,r,s,n,null)}getEventCoordinate(t){return this.getCoordinateFromPixel(this.getEventPixel(t))}getEventCoordinateInternal(t){return this.getCoordinateFromPixelInternal(this.getEventPixel(t))}getEventPixel(t){const e=this.viewport_.getBoundingClientRect(),i=this.getSize(),n=e.width/i[0],r=e.height/i[1],s="changedTouches"in t?t.changedTouches[0]:t;return[(s.clientX-e.left)/n,(s.clientY-e.top)/r]}getTarget(){return this.get(nt)}getTargetElement(){return this.targetElement_}getCoordinateFromPixel(t){return bi(this.getCoordinateFromPixelInternal(t),this.getView().getProjection())}getCoordinateFromPixelInternal(t){const e=this.frameState_;return e?Bi(e.pixelToCoordinateTransform,t.slice()):null}getControls(){return this.controls}getOverlays(){return this.overlays_}getOverlayById(t){const e=this.overlayIdIndex_[t.toString()];return void 0!==e?e:null}getInteractions(){return this.interactions}getLayerGroup(){return this.get(et)}setLayers(t){const e=this.getLayerGroup();if(t instanceof Ct)return void e.setLayers(t);const i=e.getLayers();i.clear(),i.extend(t)}getLayers(){return this.getLayerGroup().getLayers()}getLoadingOrNotReady(){const t=this.getLayerGroup().getLayerStatesArray();for(let e=0,i=t.length;e=0;i--){const n=e[i];if(n.getMap()!==this||!n.getActive()||!this.getTargetElement())continue;if(!n.handleEvent(t)||t.propagationStopped)break}}}handlePostRender(){const t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){let i=this.maxTilesLoading_,n=i;if(t){const e=t.viewHints;if(e[Kt]||e[Ht]){const e=Date.now()-t.time>8;i=e?0:8,n=e?0:2}}e.getTilesLoading(){this.postRenderTimeoutHandle_=void 0,this.handlePostRender()}),0))}setLayerGroup(t){const e=this.getLayerGroup();e&&this.handleLayerRemove_(new Ro("removelayer",e)),this.set(et,t)}setSize(t){this.set(it,t)}setTarget(t){this.set(nt,t)}setView(t){if(!t||t instanceof Wn)return void this.set(rt,t);this.set(rt,new Wn);const e=this;t.then((function(t){e.setView(new Wn(t))}))}updateSize(){const t=this.getTargetElement();let e;if(t){const i=getComputedStyle(t),n=t.offsetWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderRightWidth),r=t.offsetHeight-parseFloat(i.borderTopWidth)-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderBottomWidth);isNaN(n)||isNaN(r)||(e=[n,r],!pr(e)&&(t.offsetWidth||t.offsetHeight||t.getClientRects().length)&&oi("No map visible because the map container's width or height are 0."))}const i=this.getSize();!e||i&&a(e,i)||(this.setSize(e),this.updateViewportSize_(e))}updateViewportSize_(t){const e=this.getView();e&&e.setViewportSize(t)}};class Ia extends A{constructor(t){if(super(),this.on,this.once,this.un,this.id_=void 0,this.geometryName_="geometry",this.style_=null,this.styleFunction_=void 0,this.geometryChangeKey_=null,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),t)if("function"==typeof t.getSimplifiedGeometry){const e=t;this.setGeometry(e)}else{const e=t;this.setProperties(e)}}clone(){const t=new Ia(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());const e=this.getGeometry();e&&t.setGeometry(e.clone());const i=this.getStyle();return i&&t.setStyle(i),t}getGeometry(){return this.get(this.geometryName_)}getId(){return this.id_}getGeometryName(){return this.geometryName_}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}handleGeometryChange_(){this.changed()}handleGeometryChanged_(){this.geometryChangeKey_&&(I(this.geometryChangeKey_),this.geometryChangeKey_=null);const t=this.getGeometry();t&&(this.geometryChangeKey_=T(t,m,this.handleGeometryChange_,this)),this.changed()}setGeometry(t){this.set(this.geometryName_,t)}setStyle(t){this.style_=t,this.styleFunction_=t?function(t){if("function"==typeof t)return t;let e;if(Array.isArray(t))e=t;else{At("function"==typeof t.getZIndex,"Expected an `ol/style/Style` or an array of `ol/style/Style.js`");e=[t]}return function(){return e}}(t):void 0,this.changed()}setId(t){this.id_=t,this.changed()}setGeometryName(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()}}class Ma extends Qi{constructor(t){super(),this.geometries_=t,this.changeEventsKeys_=[],this.listenGeometriesChange_()}unlistenGeometriesChange_(){this.changeEventsKeys_.forEach(I),this.changeEventsKeys_.length=0}listenGeometriesChange_(){const t=this.geometries_;for(let e=0,i=t.length;et.clone()))}var Fa=Ma;function Pa(t,e,i,r,s,o,a){let l,h;const u=(i-e)/r;if(1===u)l=e;else if(2===u)l=e,h=s;else if(0!==u){let o=t[e],a=t[e+1],u=0;const c=[0];for(let n=e+r;n>1),s=+i(t[r],e),s<0?o=r+1:(a=r,l=!s);return l?o:~o}(c,d);p<0?(h=(d-c[-p-2])/(c[-p-1]-c[-p-2]),l=e+(-p-2)*r):l=e+p*r}a=a>1?a:2,o=o||new Array(a);for(let e=0;e>1;r{if(t===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),e&&this.simplifiedGeometry_.applyTransform(e);const i=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case"LineString":i.length=dn(i,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,t,i,0),n=[i.length];break;case"MultiLineString":n=[],i.length=pn(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,t,i,0,n);break;case"Polygon":n=[],i.length=mn(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(t),i,0,n)}return n&&(this.simplifiedGeometry_=new qa(this.type_,i,n,2,this.properties_,this.id_)),this.squaredTolerance_=t,this.simplifiedGeometry_})),this}}qa.prototype.getFlatCoordinates=qa.prototype.getOrientedFlatCoordinates;class Wa{constructor(t,e,i,n){this.minX=t,this.maxX=e,this.minY=i,this.maxY=n}contains(t){return this.containsXY(t[1],t[2])}containsTileRange(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY}containsXY(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY}equals(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY}extend(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)}getHeight(){return this.maxY-this.minY+1}getSize(){return[this.getWidth(),this.getHeight()]}getWidth(){return this.maxX-this.minX+1}intersects(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY}}function Xa(t,e,i,n,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=i,r.maxY=n,r):new Wa(t,e,i,n)}function Ba(t,e,i,n){return void 0!==n?(n[0]=t,n[1]=e,n[2]=i,n):[t,e,i]}function Va(t,e,i){return t+"/"+e+"/"+i}function Ya(t){return Va(t[0],t[1],t[2])}function Za(t){return t.split("/").map(Number)}const Ua=[0,0,0];var $a=class{constructor(t){let e;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,At(function(t,e,i){const r=e||n;return t.every((function(e,n){if(0===n)return!0;const s=r(t[n-1],e);return!(s>0||i&&0===s)}))}(this.resolutions_,((t,e)=>e-t),!0),"`resolutions` must be sorted in descending order"),!t.origins)for(let t=0,i=this.resolutions_.length-1;t{const n=new Wa(Math.min(0,t[0]),Math.max(t[0]-1,-1),Math.min(0,t[1]),Math.max(t[1]-1,-1));if(i){const t=this.getTileRangeForExtentAndZ(i,e);n.minX=Math.max(t.minX,n.minX),n.maxX=Math.min(t.maxX,n.maxX),n.minY=Math.max(t.minY,n.minY),n.maxY=Math.min(t.maxY,n.maxY)}return n})):i&&this.calculateTileRanges_(i)}forEachTileCoord(t,e,i){const n=this.getTileRangeForExtentAndZ(t,e);for(let t=n.minX,r=n.maxX;t<=r;++t)for(let r=n.minY,s=n.maxY;r<=s;++r)i([e,t,r])}forEachTileCoordParentTileRange(t,e,i,n){let r,s,o,a=null,l=t[0]-1;for(2===this.zoomFactor_?(s=t[1],o=t[2]):a=this.getTileCoordExtent(t,n);l>=this.minZoom;){if(void 0!==s&&void 0!==o?(s=Math.floor(s/2),o=Math.floor(o/2),r=Xa(s,s,o,o,i)):r=this.getTileRangeForExtentAndZ(a,l,i),e(l,r))return!0;--l}return!1}getExtent(){return this.extent_}getMaxZoom(){return this.maxZoom}getMinZoom(){return this.minZoom}getOrigin(t){return this.origin_?this.origin_:this.origins_[t]}getResolution(t){return this.resolutions_[t]}getResolutions(){return this.resolutions_}getTileCoordChildTileRange(t,e,i){if(t[0]this.maxZoom||ea&&(this.instructions.push([tl,a,h,t,i,yn,r]),this.hitDetectionInstructions.push([tl,a,h,t,n||i,yn,r]));break;case"Point":l=t.getFlatCoordinates(),this.coordinates.push(l[0],l[1]),h=this.coordinates.length,this.instructions.push([tl,a,h,t,i,void 0,r]),this.hitDetectionInstructions.push([tl,a,h,t,n||i,void 0,r])}this.endGeometry(e)}beginGeometry(t,e,i){this.beginGeometryInstruction1_=[Ka,e,0,t,i],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Ka,e,0,t,i],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;let e;t.reverse();const i=t.length;let n,r,o=-1;for(e=0;ethis.maxLineWidth&&(this.maxLineWidth=i.lineWidth,this.bufferedMaxExtent_=null)}else i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineDashOffset=void 0,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0}createFill(t){const e=t.fillStyle,i=[ol,e];return"string"!=typeof e&&i.push(t.fillPatternScale),i}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[al,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const i=t.fillStyle;"string"==typeof i&&t.currentFillStyle==i||(void 0!==i&&this.instructions.push(e.call(this,t)),t.currentFillStyle=i)}updateStrokeStyle(t,e){const i=t.strokeStyle,n=t.lineCap,r=t.lineDash,s=t.lineDashOffset,o=t.lineJoin,l=t.lineWidth,h=t.miterLimit;(t.currentStrokeStyle!=i||t.currentLineCap!=n||r!=t.currentLineDash&&!a(t.currentLineDash,r)||t.currentLineDashOffset!=s||t.currentLineJoin!=o||t.currentLineWidth!=l||t.currentMiterLimit!=h)&&(void 0!==i&&e.call(this,t),t.currentStrokeStyle=i,t.currentLineCap=n,t.currentLineDash=r,t.currentLineDashOffset=s,t.currentLineJoin=o,t.currentLineWidth=l,t.currentMiterLimit=h)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[nl,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=be(this.maxExtent),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;we(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}}var fl=class extends gl{constructor(t,e,i,n){super(t,e,i,n),this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.anchorX_=void 0,this.anchorY_=void 0,this.height_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.scale_=void 0,this.width_=void 0,this.declutterMode_=void 0,this.declutterImageWithText_=void 0}drawPoint(t,e,i){if(!this.image_||this.maxExtent&&!Se(this.maxExtent,t.getFlatCoordinates()))return;this.beginGeometry(t,e,i);const n=t.getFlatCoordinates(),r=t.getStride(),s=this.coordinates.length,o=this.appendFlatPointCoordinates(n,r);this.instructions.push([il,s,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([il,s,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}drawMultiPoint(t,e,i){if(!this.image_)return;this.beginGeometry(t,e,i);const n=t.getFlatCoordinates(),r=[];for(let e=0,i=n.length;e=t){const e=(t-a+c)/c,d=Nt(i,h,e),p=Nt(n,u,e);l.push(d,p),s.push(l),l=[d,p],a==t&&(o+=r),a=0}else if(a0&&s.push(l),s}function xl(t,e,i,n,r){let s,o,a,l,h,u,c,d,p,g,f=i,m=i,y=0,_=0,x=i;for(o=i;ot&&(_>y&&(y=_,f=x,m=o),_=0,x=o-r)),a=l,c=p,d=g),h=i,u=n}return _+=l,_>y?[x,o]:[f,m]}const vl={left:0,center:.5,right:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};const wl={Circle:yl,Default:gl,Image:fl,LineString:ml,Polygon:yl,Text:class extends gl{constructor(t,e,i,n){super(t,e,i,n),this.labels_=null,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.fillStates[Vr]={fillStyle:Vr},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_="",this.fillKey_="",this.strokeKey_="",this.declutterMode_=void 0,this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e,i){const n=this.textFillState_,r=this.textStrokeState_,s=this.textState_;if(""===this.text_||!s||!n&&!r)return;const o=this.coordinates;let a=o.length;const l=t.getType();let h=null,u=t.getStride();if("line"!==s.placement||"LineString"!=l&&"MultiLineString"!=l&&"Polygon"!=l&&"MultiPolygon"!=l){let n=s.overflow?null:[];switch(l){case"Point":case"MultiPoint":h=t.getFlatCoordinates();break;case"LineString":h=t.getFlatMidpoint();break;case"Circle":h=t.getCenter();break;case"MultiLineString":h=t.getFlatMidpoints(),u=2;break;case"Polygon":h=t.getFlatInteriorPoint(),s.overflow||n.push(h[2]/this.resolution),u=3;break;case"MultiPolygon":const e=t.getFlatInteriorPoints();h=[];for(let t=0,i=e.length;t{const n=o[2*(t+i)]===h[i*u]&&o[2*(t+i)+1]===h[i*u+1];return n||--t,n}))}this.saveTextStates_(),(s.backgroundFill||s.backgroundStroke)&&(this.setFillStrokeStyle(s.backgroundFill,s.backgroundStroke),s.backgroundFill&&this.updateFillStyle(this.state,this.createFill),s.backgroundStroke&&(this.updateStrokeStyle(this.state,this.applyStroke),this.hitDetectionInstructions.push(this.createStroke(this.state)))),this.beginGeometry(t,e,i);let c=s.padding;if(c!=Jr&&(s.scale[0]<0||s.scale[1]<0)){let t=s.padding[0],e=s.padding[1],i=s.padding[2],n=s.padding[3];s.scale[0]<0&&(e=-e,n=-n),s.scale[1]<0&&(t=-t,i=-i),c=[t,e,i,n]}const d=this.pixelRatio;this.instructions.push([il,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,this.declutterMode_,this.declutterImageWithText_,c==Jr?Jr:c.map((function(t){return t*d})),!!s.backgroundFill,!!s.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]);const p=1/d,g=this.state.fillStyle;s.backgroundFill&&(this.state.fillStyle=Vr,this.hitDetectionInstructions.push(this.createFill(this.state))),this.hitDetectionInstructions.push([il,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[p,p],NaN,this.declutterMode_,this.declutterImageWithText_,c,!!s.backgroundFill,!!s.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_?Vr:this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]),s.backgroundFill&&(this.state.fillStyle=g,this.hitDetectionInstructions.push(this.createFill(this.state))),this.endGeometry(e)}else{if(!He(this.maxExtent,t.getExtent()))return;let n;if(h=t.getFlatCoordinates(),"LineString"==l)n=[h.length];else if("MultiLineString"==l)n=t.getEnds();else if("Polygon"==l)n=t.getEnds().slice(0,1);else if("MultiPolygon"==l){const e=t.getEndss();n=[];for(let t=0,i=e.length;t{const s=this.loadedTileCallback.bind(this,i,n);return t.forEachLoadedTile(e,n,r,s)}}forEachFeatureAtCoordinate(t,e,i,n,r){}getLayer(){return this.layer_}handleFontsChanged(){}handleImageChange_(t){const e=t.target;e.getState()!==dr.LOADED&&e.getState()!==dr.ERROR||this.renderIfReadyAndVisible()}loadImage(t){let e=t.getState();return e!=dr.LOADED&&e!=dr.ERROR&&t.addEventListener(m,this.boundHandleImageChange_),e==dr.IDLE&&(t.load(),e=t.getState()),e==dr.LOADED}renderIfReadyAndVisible(){const t=this.getLayer();t&&t.getVisible()&&"ready"===t.getSourceState()&&t.changed()}renderDeferred(t){}disposeInternal(){delete this.layer_,super.disposeInternal()}}class Sl{constructor(){this.instructions_=[],this.zIndex=0,this.offset_=0,this.context_=new Proxy(CanvasRenderingContext2D.prototype,{get:(t,e)=>{if("function"==typeof K()[e])return this.instructions_[this.zIndex+this.offset_]||(this.instructions_[this.zIndex+this.offset_]=[]),this.instructions_[this.zIndex+this.offset_].push(e),this.pushMethodArgs_},set:(t,e,i)=>(this.instructions_[this.zIndex+this.offset_]||(this.instructions_[this.zIndex+this.offset_]=[]),this.instructions_[this.zIndex+this.offset_].push(e,i),!0)})}pushMethodArgs_=(...t)=>(this.instructions_[this.zIndex+this.offset_].push(t),this);getContext(){return this.context_}draw(t){this.instructions_.forEach((e=>{for(let i=0,n=e.length;it[2]}else R=v>E;const I=Math.PI,M=[],k=b+n===e;let F;if(m=0,y=C,d=t[e=b],p=t[e+1],k){_(),F=Math.atan2(p-f,d-g),R&&(F+=F>0?-I:I);const t=(E+v)/2,e=(T+w)/2;return M[0]=[t,e,(S-s)/2,F,r],M}for(let t=0,c=(r=r.replace(/\n/g," ")).length;t0?-I:I),void 0!==F){let t=v-F;if(t+=t>I?-2*I:t<-I?2*I:0,Math.abs(t)>o)return null}F=v;const w=t;let b=0;for(;t0&&t.push("\n",""),t.push(e,""),t}class jl{constructor(t,e,i,n,r){this.overlaps=i,this.pixelRatio=e,this.resolution=t,this.alignAndScaleFill_,this.instructions=n.instructions,this.coordinates=n.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=n.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=n.fillStates||{},this.strokeStates=n.strokeStates||{},this.textStates=n.textStates||{},this.widths_={},this.labels_={},this.zIndexContext_=r?new Sl:null}getZIndexContext(){return this.zIndexContext_}createLabel(t,e,i,n){const r=t+e+i+n;if(this.labels_[r])return this.labels_[r];const s=n?this.strokeStates[n]:null,o=i?this.fillStates[i]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],u=Array.isArray(t),c=a.justify?vl[a.justify]:Ol(Array.isArray(t)?t[0]:t,a.textAlign||Kr),d=n&&s.lineWidth?s.lineWidth:0,p=u?t:t.split("\n").reduce(zl,[]),{width:g,height:f,widths:m,heights:y,lineWidths:_}=function(t,e){const i=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,u=e.length;h<=u;h+=2){const c=e[h];if("\n"===c||h===u){s=Math.max(s,o),r.push(o),o=0,a+=l;continue}const d=e[h+1]||t.font,p=os(d,c);i.push(p),o+=p;const g=rs(d);n.push(g),l=Math.max(l,g)}return{width:s,height:a,widths:i,heights:n,lineWidths:r}}(a,p),x=g+d,v=[],w=(x+2)*h[0],b=(f+d)*h[1],C={width:w<0?Math.floor(w):Math.ceil(w),height:b<0?Math.floor(b):Math.ceil(b),contextInstructions:v};1==h[0]&&1==h[1]||v.push("scale",h),n&&(v.push("strokeStyle",s.strokeStyle),v.push("lineWidth",d),v.push("lineCap",s.lineCap),v.push("lineJoin",s.lineJoin),v.push("miterLimit",s.miterLimit),v.push("setLineDash",[s.lineDash]),v.push("lineDashOffset",s.lineDashOffset)),i&&v.push("fillStyle",o.fillStyle),v.push("textBaseline","middle"),v.push("textAlign","center");const S=.5-c;let E=c*x+S*d;const T=[],R=[];let I,M=0,k=0,F=0,P=0;for(let t=0,e=p.length;tt?t-l:r,x=s+h>e?e-h:s,v=p[3]+_*c[0]+p[1],w=p[0]+x*c[1]+p[2],b=m-p[3],C=y-p[0];let S;return(g||0!==u)&&(kl[0]=b,Ll[0]=b,kl[1]=C,Fl[1]=C,Fl[0]=b+v,Pl[0]=Fl[0],Pl[1]=C+w,Ll[1]=Pl[1]),0!==u?(S=Yi([1,0,0,1,0,0],i,n,1,1,u,-i,-n),Bi(S,kl),Bi(S,Fl),Bi(S,Pl),Bi(S,Ll),Me(Math.min(kl[0],Fl[0],Pl[0],Ll[0]),Math.min(kl[1],Fl[1],Pl[1],Ll[1]),Math.max(kl[0],Fl[0],Pl[0],Ll[0]),Math.max(kl[1],Fl[1],Pl[1],Ll[1]),Ml)):Me(Math.min(b,b+v),Math.min(C,C+w),Math.max(b,b+v),Math.max(C,C+w),Ml),d&&(m=Math.round(m),y=Math.round(y)),{drawImageX:m,drawImageY:y,drawImageW:_,drawImageH:x,originX:l,originY:h,declutterBox:{minX:Ml[0],minY:Ml[1],maxX:Ml[2],maxY:Ml[3],value:f},canvasTransform:S,scale:c}}replayImageOrLabel_(t,e,i,n,r,s,o){const a=!(!s&&!o),l=n.declutterBox,h=o?o[2]*n.scale[0]/2:0;return l.minX-h<=e[0]&&l.maxX+h>=0&&l.minY-h<=e[1]&&l.maxY+h>=0&&(a&&this.replayTextBackground_(t,kl,Fl,Pl,Ll,s,o),ls(t,n.canvasTransform,r,i,n.originX,n.originY,n.drawImageW,n.drawImageH,n.drawImageX,n.drawImageY,n.scale)),!0}fill_(t){const e=this.alignAndScaleFill_;if(e){const i=Bi(this.renderedTransform_,[0,0]),n=512*this.pixelRatio;t.save(),t.translate(i[0]%n,i[1]%n),1!==e&&t.scale(e,e),t.rotate(this.viewRotation_)}t.fill(),e&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6])}drawLabelWithPointPlacement_(t,e,i,n){const r=this.textStates[e],s=this.createLabel(t,e,n,i),o=this.strokeStates[i],a=this.pixelRatio,l=Ol(Array.isArray(t)?t[0]:t,r.textAlign||Kr),h=vl[r.textBaseline||Hr],u=o&&o.lineWidth?o.lineWidth:0;return{label:s,anchorX:l*(s.width/a-2*r.scale[0])+2*(.5-l)*u,anchorY:h*s.height/a+2*(.5-h)*u}}execute_(t,e,i,n,r,s,o,l){const h=this.zIndexContext_;let u;var c,d;this.pixelCoordinates_&&a(i,this.renderedTransform_)?u=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),u=Ki(this.coordinates,0,this.coordinates.length,2,i,this.pixelCoordinates_),c=this.renderedTransform_,d=i,c[0]=d[0],c[1]=d[1],c[2]=d[2],c[3]=d[3],c[4]=d[4],c[5]=d[5]);let p=0;const g=n.length;let f,m,y,_,x,v,w,b,C,S,E,T,R,I=0,M=0,k=0,F=null,P=null;const L=this.coordinateCache_,A=this.viewRotation_,D=Math.round(1e12*Math.atan2(-i[1],i[0]))/1e12,O={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:A},z=this.instructions!=n||this.overlaps?0:200;let j,G,N,q;for(;pz&&(this.fill_(t),M=0),k>z&&(t.stroke(),k=0),M||k||(t.beginPath(),x=NaN,v=NaN),++p;break;case Ja:I=i[1];const n=u[I],a=u[I+1],c=u[I+2]-n,d=u[I+3]-a,g=Math.sqrt(c*c+d*d);t.moveTo(n+g,a),t.arc(n,a,g,0,2*Math.PI,!0),++p;break;case Qa:t.closePath(),++p;break;case tl:I=i[1],f=i[2];const W=i[3],X=i[4],B=i[5];O.geometry=W,O.feature=j,p in L||(L[p]=[]);const V=L[p];B?B(u,I,f,2,V):(V[0]=u[I],V[1]=u[I+1],V.length=2),h&&(h.zIndex=i[6]),X(V,O),++p;break;case il:I=i[1],f=i[2],C=i[3],m=i[4],y=i[5];let Y=i[6];const Z=i[7],U=i[8],$=i[9],K=i[10];let H=i[11];const J=i[12];let Q=i[13];_=i[14]||"declutter";const tt=i[15];if(!C&&i.length>=20){S=i[19],E=i[20],T=i[21],R=i[22];const t=this.drawLabelWithPointPlacement_(S,E,T,R);C=t.label,i[3]=C;const e=i[23];m=(t.anchorX-e)*this.pixelRatio,i[4]=m;const n=i[24];y=(t.anchorY-n)*this.pixelRatio,i[5]=y,Y=C.height,i[6]=Y,Q=C.width,i[13]=Q}let et,it,nt,rt;i.length>25&&(et=i[25]),i.length>17?(it=i[16],nt=i[17],rt=i[18]):(it=Jr,nt=!1,rt=!1),K&&D?H+=A:K||D||(H-=A);let st=0;for(;I!Nl.includes(t)));class Wl{constructor(t,e,i,n,r,s,o){this.maxExtent_=t,this.overlaps_=n,this.pixelRatio_=i,this.resolution_=e,this.renderBuffer_=s,this.executorsByZIndex_={},this.hitDetectionContext_=null,this.hitDetectionTransform_=[1,0,0,1,0,0],this.renderedContext_=null,this.deferredZIndexContexts_={},this.createExecutors_(r,o)}clip(t,e){const i=this.getClipCoords(e);t.beginPath(),t.moveTo(i[0],i[1]),t.lineTo(i[2],i[3]),t.lineTo(i[4],i[5]),t.lineTo(i[6],i[7]),t.clip()}createExecutors_(t,e){for(const i in t){let n=this.executorsByZIndex_[i];void 0===n&&(n={},this.executorsByZIndex_[i]=n);const r=t[i];for(const t in r){const i=r[t];n[t]=new jl(this.resolution_,this.pixelRatio_,this.overlaps_,i,e)}}}hasExecutors(t){for(const e in this.executorsByZIndex_){const i=this.executorsByZIndex_[e];for(let e=0,n=t.length;ei)break;let a=n[o];a||(a=[],n[o]=a),a.push(4*((t+r)*e+(t+s))+3),r>0&&a.push(4*((t-r)*e+(t+s))+3),s>0&&(a.push(4*((t+r)*e+(t-s))+3),r>0&&a.push(4*((t-r)*e+(t-s))+3))}const r=[];for(let t=0,e=n.length;t0){if(!o||"Image"!==p&&"Text"!==p||o.includes(t)){const i=(d[n]-3)/4,o=r-i%a,l=r-(i/a|0),h=s(t,e,o*o+l*l);if(h)return h}u.clearRect(0,0,a,a);break}}const f=Object.keys(this.executorsByZIndex_).map(Number);let m,y,_,x,v;for(f.sort(n),m=f.length-1;m>=0;--m){const t=f[m].toString();for(_=this.executorsByZIndex_[t],y=Gl.length-1;y>=0;--y)if(p=Gl[y],x=_[p],void 0!==x&&(v=x.executeHitDetection(u,l,i,g,c),v))return v}}getClipCoords(t){const e=this.maxExtent_;if(!e)return null;const i=e[0],n=e[1],r=e[2],s=e[3],o=[i,n,i,s,r,s,r,n];return Ki(o,0,8,2,t,o),o}isEmpty(){return g(this.executorsByZIndex_)}execute(t,e,i,r,s,o,a){const l=Object.keys(this.executorsByZIndex_).map(Number);let h,u,c,d,p,g;for(l.sort(n),o=o||Gl,a&&l.reverse(),h=0,u=l.length;h{t.draw(this.renderedContext_),t.clear()}))}}const Xl={};var Bl=class extends pl{constructor(t,e,i,n,r,s,o){super(),this.context_=t,this.pixelRatio_=e,this.extent_=i,this.transform_=n,this.transformRotation_=n?qt(Math.atan2(n[1],n[0]),10):0,this.viewRotation_=r,this.squaredTolerance_=s,this.userTransform_=o,this.contextFillState_=null,this.contextStrokeState_=null,this.contextTextState_=null,this.fillState_=null,this.strokeState_=null,this.image_=null,this.imageAnchorX_=0,this.imageAnchorY_=0,this.imageHeight_=0,this.imageOpacity_=0,this.imageOriginX_=0,this.imageOriginY_=0,this.imageRotateWithView_=!1,this.imageRotation_=0,this.imageScale_=[0,0],this.imageWidth_=0,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=!1,this.textRotation_=0,this.textScale_=[0,0],this.textFillState_=null,this.textStrokeState_=null,this.textState_=null,this.pixelCoordinates_=[],this.tmpLocalTransform_=[1,0,0,1,0,0]}drawImages_(t,e,i,n){if(!this.image_)return;const r=Ki(t,e,i,n,this.transform_,this.pixelCoordinates_),s=this.context_,o=this.tmpLocalTransform_,a=s.globalAlpha;1!=this.imageOpacity_&&(s.globalAlpha=a*this.imageOpacity_);let l=this.imageRotation_;0===this.transformRotation_&&(l-=this.viewRotation_),this.imageRotateWithView_&&(l+=this.viewRotation_);for(let t=0,e=r.length;tt*this.pixelRatio_)),lineDashOffset:(r||0)*this.pixelRatio_,lineJoin:void 0!==s?s:Ur,lineWidth:(void 0!==o?o:1)*this.pixelRatio_,miterLimit:void 0!==a?a:10,strokeStyle:Xr(t||$r)}}else this.strokeState_=null}setImageStyle(t){let e;if(!t||!(e=t.getSize()))return void(this.image_=null);const i=t.getPixelRatio(this.pixelRatio_),n=t.getAnchor(),r=t.getOrigin();this.image_=t.getImage(this.pixelRatio_),this.imageAnchorX_=n[0]*i,this.imageAnchorY_=n[1]*i,this.imageHeight_=e[1]*i,this.imageOpacity_=t.getOpacity(),this.imageOriginX_=r[0],this.imageOriginY_=r[1],this.imageRotateWithView_=t.getRotateWithView(),this.imageRotation_=t.getRotation();const s=t.getScaleArray();this.imageScale_=[s[0]*this.pixelRatio_/i,s[1]*this.pixelRatio_/i],this.imageWidth_=e[0]*i}setTextStyle(t){if(t){const e=t.getFill();if(e){const t=e.getColor();this.textFillState_={fillStyle:Xr(t||Vr)}}else this.textFillState_=null;const i=t.getStroke();if(i){const t=i.getColor(),e=i.getLineCap(),n=i.getLineDash(),r=i.getLineDashOffset(),s=i.getLineJoin(),o=i.getWidth(),a=i.getMiterLimit();this.textStrokeState_={lineCap:void 0!==e?e:Yr,lineDash:n||Zr,lineDashOffset:r||0,lineJoin:void 0!==s?s:Ur,lineWidth:void 0!==o?o:1,miterLimit:void 0!==a?a:10,strokeStyle:Xr(t||$r)}}else this.textStrokeState_=null;const n=t.getFont(),r=t.getOffsetX(),s=t.getOffsetY(),o=t.getRotateWithView(),a=t.getRotation(),l=t.getScaleArray(),h=t.getText(),u=t.getTextAlign(),c=t.getTextBaseline();this.textState_={font:void 0!==n?n:Br,textAlign:void 0!==u?u:Kr,textBaseline:void 0!==c?c:Hr},this.text_=void 0!==h?Array.isArray(h)?h.reduce(((t,e,i)=>t+(i%2?" ":e)),""):h:"",this.textOffsetX_=void 0!==r?this.pixelRatio_*r:0,this.textOffsetY_=void 0!==s?this.pixelRatio_*s:0,this.textRotateWithView_=void 0!==o&&o,this.textRotation_=void 0!==a?a:0,this.textScale_=[this.pixelRatio_*l[0],this.pixelRatio_*l[1]]}else this.text_=""}};const Vl=.5;function Yl(t,e,i,r,s,o,a,l,h){const u=h?Si(s):s,c=U(t[0]*Vl,t[1]*Vl);c.imageSmoothingEnabled=!1;const d=c.canvas,p=new Bl(c,Vl,s,null,a,l,h?_i(wi,h):null),g=i.length,f=Math.floor(16777215/g),m={};for(let t=1;t<=g;++t){const e=i[t-1],n=e.getStyleFunction()||r;if(!n)continue;let s=n(e,o);if(!s)continue;Array.isArray(s)||(s=[s]);const a=(t*f).toString(16).padStart(7,"#00000");for(let t=0,i=s.length;t0;return c&&Promise.all(l).then((()=>r(null))),function(t,e,i,n,r,s,o){const a=i.getGeometryFunction()(e);if(!a)return;const l=a.simplifyTransformed(n,r),h=i.getRenderer();if(h)th(t,l,i,e,o);else{(0,$l[l.getType()])(t,l,i,e,o,s)}}(t,e,i,n,s,o,a),c}function th(t,e,i,n,r){if("GeometryCollection"==e.getType()){const s=e.getGeometries();for(let e=0,o=s.length;e{if(!this.hitDetectionImageData_&&!this.animatingOrInteracting_){const t=[this.context.canvas.width,this.context.canvas.height];Bi(this.pixelTransform,t);const e=this.renderedCenter_,i=this.renderedResolution_,n=this.renderedRotation_,r=this.renderedProjection_,s=this.wrappedRenderedExtent_,o=this.getLayer(),a=[],l=t[0]*Vl,h=t[1]*Vl;a.push(this.getRenderTransform(e,i,n,Vl,l,h,0).slice());const u=o.getSource(),c=r.getExtent();if(u.getWrapX()&&r.canWrapX()&&!Ee(c,s)){let t=s[0];const r=Ke(c);let o,u=0;for(;tc[2];)++u,o=r*u,a.push(this.getRenderTransform(e,i,n,Vl,l,h,o).slice()),t-=r}this.hitDetectionImageData_=Yl(t,a,this.renderedFeatures_,o.getStyleFunction(),s,i,n,Hl(i,this.renderedPixelRatio_),null)}e(Zl(t,this.renderedFeatures_,this.hitDetectionImageData_))}))}forEachFeatureAtCoordinate(t,e,i,n,r){if(!this.replayGroup_)return;const s=e.viewState.resolution,o=e.viewState.rotation,a=this.getLayer(),l={},h=function(t,e,i){const s=P(t),o=l[s];if(o){if(!0!==o&&iu=n.forEachFeatureAtCoordinate(t,s,o,i,h,d&&e.declutter[d]?e.declutter[d].all().map((t=>t.value)):null))),u}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&this.replayGroup_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}prepareFrame(t){const e=this.getLayer(),i=e.getSource();if(!i)return!1;const n=t.viewHints[Kt],r=t.viewHints[Ht],s=e.getUpdateWhileAnimating(),o=e.getUpdateWhileInteracting();if(this.ready&&!s&&n||!o&&r)return this.animatingOrInteracting_=!0,!0;this.animatingOrInteracting_=!1;const l=t.extent,h=t.viewState,u=h.projection,c=h.resolution,d=t.pixelRatio,p=e.getRevision(),g=e.getRenderBuffer();let f=e.getRenderOrder();void 0===f&&(f=Kl);const m=h.center.slice(),y=we(l,g*c),_=y.slice(),x=[y.slice()],v=u.getExtent();if(i.getWrapX()&&u.canWrapX()&&!Ee(v,t.extent)){const t=Ke(v),e=Math.max(Ke(y)/2,t);y[0]=v[0]-e,y[2]=v[2]+e,ni(m,u);const i=ti(x[0],u);i[0]v[0]&&i[2]>v[2]&&x.push([i[0]-t,i[1],i[2]-t,i[3]])}if(this.ready&&this.renderedResolution_==c&&this.renderedRevision_==p&&this.renderedRenderOrder_==f&&Ee(this.wrappedRenderedExtent_,y))return a(this.renderedExtent_,_)||(this.hitDetectionImageData_=null,this.renderedExtent_=_),this.renderedCenter_=m,this.replayGroupChanged=!1,!0;this.replayGroup_=null;const w=new bl(Jl(c,d),y,c,d);for(let t=0,e=x.length;t{let n;const r=t.getStyleFunction()||e.getStyleFunction();if(r&&(n=r(t,c)),n){const e=this.renderFeature(t,b,n,w,undefined,this.getLayer().getDeclutter(),i);C=C&&!e}},E=Si(y),T=i.getFeaturesInExtent(E);f&&T.sort(f);for(let t=0,e=T.length;t=200&&a.status<300){const t=e.getType();let n;"json"==t?n=JSON.parse(a.responseText):"text"==t?n=a.responseText:"xml"==t?(n=a.responseXML,n||(n=(new DOMParser).parseFromString(a.responseText,"application/xml"))):"arraybuffer"==t&&(n=a.response),n?s(e.readFeatures(n,{extent:i,featureProjection:r}),e.readProjection(n)):o()}else o()},a.onerror=o,a.send()}function yh(t,e){return function(i,n,r,s,o){const a=this;mh(t,e,i,n,r,(function(t,e){a.addFeatures(t),void 0!==s&&s(t)}),o||u)}}class _h extends t{constructor(t,e,i){super(t),this.feature=e,this.features=i}}var xh=class extends rh{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:!0,projection:void 0,state:"ready",wrapX:void 0===t.wrapX||t.wrapX}),this.on,this.once,this.un,this.loader_=u,this.format_=t.format,this.overlaps_=void 0===t.overlaps||t.overlaps,this.url_=t.url,void 0!==t.loader?this.loader_=t.loader:void 0!==this.url_&&(At(this.format_,"`format` must be set when `url` is set"),this.loader_=yh(this.url_,this.format_)),this.strategy_=void 0!==t.strategy?t.strategy:ph;const e=void 0===t.useSpatialIndex||t.useSpatialIndex;let i,n;this.featuresRtree_=e?new nh:null,this.loadedExtentsRtree_=new nh,this.loadingExtentsCount_=0,this.nullGeometryFeatures_={},this.idIndex_={},this.uidIndex_={},this.featureChangeKeys_={},this.featuresCollection_=null,Array.isArray(t.features)?n=t.features:t.features&&(i=t.features,n=i.getArray()),e||void 0!==i||(i=new Ct(n)),void 0!==n&&this.addFeaturesInternal(n),void 0!==i&&this.bindFeaturesCollection_(i)}addFeature(t){this.addFeatureInternal(t),this.changed()}addFeatureInternal(t){const e=P(t);if(!this.addToIndex_(e,t))return void(this.featuresCollection_&&this.featuresCollection_.remove(t));this.setupChangeEvents_(e,t);const i=t.getGeometry();if(i){const e=i.getExtent();this.featuresRtree_&&this.featuresRtree_.insert(e,t)}else this.nullGeometryFeatures_[e]=t;this.dispatchEvent(new _h(oh,t))}setupChangeEvents_(t,i){i instanceof qa||(this.featureChangeKeys_[t]=[T(i,m,this.handleFeatureChange_,this),T(i,e,this.handleFeatureChange_,this)])}addToIndex_(t,e){let i=!0;if(void 0!==e.getId()){const t=String(e.getId());if(t in this.idIndex_)if(e instanceof qa){const n=this.idIndex_[t];n instanceof qa?Array.isArray(n)?n.push(e):this.idIndex_[t]=[n,e]:i=!1}else i=!1;else this.idIndex_[t]=e}return i&&(At(!(t in this.uidIndex_),"The passed `feature` was already added to the source"),this.uidIndex_[t]=e),i}addFeatures(t){this.addFeaturesInternal(t),this.changed()}addFeaturesInternal(t){const e=[],i=[],n=[];for(let e=0,n=t.length;e{e||(e=!0,this.addFeature(t.element),e=!1)})),t.addEventListener(vt,(t=>{e||(e=!0,this.removeFeature(t.element),e=!1)})),this.featuresCollection_=t}clear(t){if(t){for(const t in this.featureChangeKeys_){this.featureChangeKeys_[t].forEach(I)}this.featuresCollection_||(this.featureChangeKeys_={},this.idIndex_={},this.uidIndex_={})}else if(this.featuresRtree_){const t=t=>{this.removeFeatureInternal(t)};this.featuresRtree_.forEach(t);for(const t in this.nullGeometryFeatures_)this.removeFeatureInternal(this.nullGeometryFeatures_[t])}this.featuresCollection_&&this.featuresCollection_.clear(),this.featuresRtree_&&this.featuresRtree_.clear(),this.nullGeometryFeatures_={};const e=new _h(lh);this.dispatchEvent(e),this.changed()}forEachFeature(t){if(this.featuresRtree_)return this.featuresRtree_.forEach(t);this.featuresCollection_&&this.featuresCollection_.forEach(t)}forEachFeatureAtCoordinateDirect(t,e){const i=[t[0],t[1],t[0],t[1]];return this.forEachFeatureInExtent(i,(function(i){const n=i.getGeometry();if(n instanceof qa||n.intersectsCoordinate(t))return e(i)}))}forEachFeatureInExtent(t,e){if(this.featuresRtree_)return this.featuresRtree_.forEachInExtent(t,e);this.featuresCollection_&&this.featuresCollection_.forEach(e)}forEachFeatureIntersectingExtent(t,e){return this.forEachFeatureInExtent(t,(function(i){const n=i.getGeometry();if(n instanceof qa||n.intersectsExtent(t)){const t=e(i);if(t)return t}}))}getFeaturesCollection(){return this.featuresCollection_}getFeatures(){let t;return this.featuresCollection_?t=this.featuresCollection_.getArray().slice(0):this.featuresRtree_&&(t=this.featuresRtree_.getAll(),g(this.nullGeometryFeatures_)||o(t,Object.values(this.nullGeometryFeatures_))),t}getFeaturesAtCoordinate(t){const e=[];return this.forEachFeatureAtCoordinateDirect(t,(function(t){e.push(t)})),e}getFeaturesInExtent(t,e){if(this.featuresRtree_){if(!(e&&e.canWrapX()&&this.getWrapX()))return this.featuresRtree_.getInExtent(t);const i=function(t,e){if(e.canWrapX()){const i=e.getExtent();if(!isFinite(t[0])||!isFinite(t[2]))return[[i[0],t[1],i[2],t[3]]];ti(t,e);const n=Ke(i);if(Ke(t)>n)return[[i[0],t[1],i[2],t[3]]];if(t[0]i[2])return[[t[0],t[1],i[2],t[3]],[i[0],t[1],t[2]-n,t[3]]]}return[t]}(t,e);return[].concat(...i.map((t=>this.featuresRtree_.getInExtent(t))))}return this.featuresCollection_?this.featuresCollection_.getArray().slice(0):[]}getClosestFeatureToCoordinate(t,e){const i=t[0],n=t[1];let r=null;const s=[NaN,NaN];let o=1/0;const a=[-1/0,-1/0,1/0,1/0];return e=e||l,this.featuresRtree_.forEachInExtent(a,(function(t){if(e(t)){const e=t.getGeometry(),l=o;if(o=e instanceof qa?0:e.closestPointXY(i,n,s,o),o{--this.loadingExtentsCount_,this.dispatchEvent(new _h(ch,void 0,t))}),(()=>{--this.loadingExtentsCount_,this.dispatchEvent(new _h(dh))})),n.insert(s,{extent:s.slice()}))}this.loading=!(this.loader_.length<4)&&this.loadingExtentsCount_>0}refresh(){this.clear(!0),this.loadedExtentsRtree_.clear(),super.refresh()}removeLoadedExtent(t){const e=this.loadedExtentsRtree_;let i;e.forEachInExtent(t,(function(e){if(Le(e.extent,t))return i=e,!0})),i&&e.remove(i)}removeFeatures(t){const e=[];for(let i=0,n=t.length;i0&&this.changed()}removeFeature(t){if(!t)return;this.removeFeatureInternal(t)&&this.changed()}removeFeatureInternal(t){const e=P(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t);const i=this.featureChangeKeys_[e];if(!i)return;i.forEach(I),delete this.featureChangeKeys_[e];const n=t.getId();return void 0!==n&&delete this.idIndex_[n.toString()],delete this.uidIndex_[e],this.hasListener(hh)&&this.dispatchEvent(new _h(hh,t)),t}removeFromIdIndex_(t){let e=!1;for(const i in this.idIndex_){const n=this.idIndex_[i];if(t instanceof qa&&Array.isArray(n)&&n.includes(t))n.splice(n.indexOf(t),1);else if(this.idIndex_[i]===t){delete this.idIndex_[i],e=!0;break}}return e}setLoader(t){this.loader_=t}setUrl(t){At(this.format_,"`format` must be set when `url` is set"),this.url_=t,this.setLoader(yh(t,this.format_))}};class vh extends Or{constructor(t,e,i,n,r){super(t,e,i,void 0!==r?dr.IDLE:dr.LOADED),this.loader_=void 0!==r?r:null,this.canvas_=n,this.error_=null}getError(){return this.error_}handleLoad_(t){t?(this.error_=t,this.state=dr.ERROR):this.state=dr.LOADED,this.changed()}load(){this.state==dr.IDLE&&(this.state=dr.LOADING,this.changed(),this.loader_(this.handleLoad_.bind(this)))}getImage(){return this.canvas_}}class wh extends f{constructor(t,e,i){super(),i=i||{},this.tileCoord=t,this.state=e,this.interimTile=null,this.key="",this.transition_=void 0===i.transition?250:i.transition,this.transitionStarts_={},this.interpolate=!!i.interpolate}changed(){this.dispatchEvent(m)}release(){this.state===jo.ERROR&&this.setState(jo.EMPTY)}getKey(){return this.key+"/"+this.tileCoord}getInterimTile(){let t=this.interimTile;if(!t)return this;do{if(t.getState()==jo.LOADED)return this.transition_=0,t;t=t.interimTile}while(t);return this}refreshInterimChain(){let t=this.interimTile;if(!t)return;let e=this;do{if(t.getState()==jo.LOADED){t.interimTile=null;break}t.getState()==jo.LOADING?e=t:t.getState()==jo.IDLE?e.interimTile=t.interimTile:e=t,t=e.interimTile}while(t)}getTileCoord(){return this.tileCoord}getState(){return this.state}setState(t){if(this.state!==jo.ERROR&&this.state>t)throw new Error("Tile load sequence violation");this.state=t,this.changed()}load(){k()}getAlpha(t,e){if(!this.transition_)return 1;let i=this.transitionStarts_[t];if(i){if(-1===i)return 1}else i=e,this.transitionStarts_[t]=i;const n=e-i+1e3/60;return n>=this.transition_?1:Oi(n/this.transition_)}inTransition(t){return!!this.transition_&&-1!==this.transitionStarts_[t]}endTransition(t){this.transition_&&(this.transitionStarts_[t]=-1)}}class bh extends wh{constructor(t,e,i,n,r,s){super(t,e,s),this.crossOrigin_=n,this.src_=i,this.key=i,this.image_=new Image,null!==n&&(this.image_.crossOrigin=n),this.unlisten_=null,this.tileLoadFunction_=r}getImage(){return this.image_}setImage(t){this.image_=t,this.state=jo.LOADED,this.unlistenImage_(),this.changed()}handleImageError_(){this.state=jo.ERROR,this.unlistenImage_(),this.image_=function(){const t=U(1,1);return t.fillStyle="rgba(0,0,0,0)",t.fillRect(0,0,1,1),t.canvas}(),this.changed()}handleImageLoad_(){const t=this.image_;t.naturalWidth&&t.naturalHeight?this.state=jo.LOADED:this.state=jo.EMPTY,this.unlistenImage_(),this.changed()}load(){this.state==jo.ERROR&&(this.state=jo.IDLE,this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)),this.state==jo.IDLE&&(this.state=jo.LOADING,this.changed(),this.tileLoadFunction_(this,this.src_),this.unlisten_=function(t,e,i){const n=t;let r=!0,s=!1,o=!1;const a=[R(n,C,(function(){o=!0,s||e()}))];return n.src&&Y?(s=!0,n.decode().then((function(){r&&e()})).catch((function(t){r&&(o?e():i())}))):a.push(R(n,y,i)),function(){r=!1,a.forEach(I)}}(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))}unlistenImage_(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}class Ch{constructor(t){this.highWaterMark=void 0!==t?t:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark}expireCache(t){for(;this.canExpireCache();)this.pop()}clear(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}containsKey(t){return this.entries_.hasOwnProperty(t)}forEach(t){let e=this.oldest_;for(;e;)t(e.value_,e.key_,this),e=e.newer}get(t,e){const i=this.entries_[t];return At(void 0!==i,"Tried to get a value for a key that does not exist in the cache"),i===this.newest_||(i===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(i.newer.older=i.older,i.older.newer=i.newer),i.newer=null,i.older=this.newest_,this.newest_.newer=i,this.newest_=i),i.value_}remove(t){const e=this.entries_[t];return At(void 0!==e,"Tried to get a value for a key that does not exist in the cache"),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_}getCount(){return this.count_}getKeys(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.key_;return t}getValues(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.value_;return t}peekLast(){return this.oldest_.value_}peekLastKey(){return this.oldest_.key_}peekFirstKey(){return this.newest_.key_}peek(t){return this.entries_[t]?.value_}pop(){const t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_}replace(t,e){this.get(t),this.entries_[t].value_=e}set(t,e){At(!(t in this.entries_),"Tried to set a value for a key that is used already");const i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_}setSize(t){this.highWaterMark=t}}class Sh extends Ch{clear(){for(;this.getCount()>0;)this.pop().release();super.clear()}expireCache(t){for(;this.canExpireCache();){if(this.peekLast().getKey()in t)break;this.pop().release()}}pruneExceptNewestZ(){if(0===this.getCount())return;const t=Za(this.peekFirstKey())[0];this.forEach((e=>{e.tileCoord[0]!==t&&(this.remove(Ya(e.tileCoord)),e.release())}))}}const Eh=[];class Th extends wh{constructor(t,e,i,n){super(t,e,{transition:0}),this.context_={},this.executorGroups={},this.loadingSourceTiles=0,this.hitDetectionImageData={},this.replayState_={},this.sourceTiles=[],this.errorTileKeys={},this.wantedResolution,this.getSourceTiles=n.bind(void 0,this),this.wrappedTileCoord=i}getContext(t){const e=P(t);return e in this.context_||(this.context_[e]=U(1,1,Eh)),this.context_[e]}hasContext(t){return P(t)in this.context_}getImage(t){return this.hasContext(t)?this.getContext(t).canvas:null}getReplayState(t){const e=P(t);return e in this.replayState_||(this.replayState_[e]={dirty:!1,renderedRenderOrder:null,renderedResolution:NaN,renderedRevision:-1,renderedTileResolution:NaN,renderedTileRevision:-1,renderedTileZ:-1}),this.replayState_[e]}load(){this.getSourceTiles()}release(){for(const t in this.context_){const e=this.context_[t];H(e),Eh.push(e.canvas),delete this.context_[t]}super.release()}}let Rh=class extends wh{constructor(t,e,i,n,r,s){super(t,e,s),this.extent=null,this.format_=n,this.features_=null,this.loader_,this.projection=null,this.resolution,this.tileLoadFunction_=r,this.url_=i,this.key=i}getFormat(){return this.format_}getFeatures(){return this.features_}load(){this.state==jo.IDLE&&(this.setState(jo.LOADING),this.tileLoadFunction_(this,this.url_),this.loader_&&this.loader_(this.extent,this.resolution,this.projection))}onLoad(t,e){this.setFeatures(t)}onError(){this.setState(jo.ERROR)}setFeatures(t){this.features_=t,this.setState(jo.LOADED)}setLoader(t){this.loader_=t}};function Ih(t,e){const i=/\{z\}/g,n=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(o,a,l){if(o)return t.replace(i,o[0].toString()).replace(n,o[1].toString()).replace(r,o[2].toString()).replace(s,(function(){const t=o[0],i=e.getFullTileRange(t);if(!i)throw new Error("The {-y} placeholder requires a tile grid with extent");return(i.getHeight()-o[2]-1).toString()}))}}function Mh(t,e){const i=t.length,n=new Array(i);for(let r=0;rAh({...t,geometry:e}))).flat();const n="MultiPolygon"===i.type?"Polygon":i.type;if("GeometryCollection"===n||"Circle"===n)throw new Error("Unsupported geometry type: "+n);const r=i.layout.length;return Ph(new qa(n,"Polygon"===n?function(t,e,i){return Array.isArray(e[0])?(On(t,0,e,i)||jn(t=t.slice(),0,e,i),t):(Dn(t,0,e,i)||zn(t=t.slice(),0,e,i),t)}(i.flatCoordinates,i.ends,r):i.flatCoordinates,i.ends?.flat(),r,t.properties||{},t.id).enableSimplifyTransformed(),!1,e)}function Dh(t,e){if(!t)return null;if(Array.isArray(t)){const i=t.map((t=>Dh(t,e)));return new Fa(i)}return Ph(new(0,Lh[t.type])(t.flatCoordinates,t.layout,t.ends),!1,e)}class Oh extends Fh{constructor(){super()}getType(){return"json"}readFeature(t,e){return this.readFeatureFromObject(zh(t),this.getReadOptions(t,e))}readFeatures(t,e){return this.readFeaturesFromObject(zh(t),this.getReadOptions(t,e))}readFeatureFromObject(t,e){return k()}readFeaturesFromObject(t,e){return k()}readGeometry(t,e){return this.readGeometryFromObject(zh(t),this.getReadOptions(t,e))}readGeometryFromObject(t,e){return k()}readProjection(t){return this.readProjectionFromObject(zh(t))}readProjectionFromObject(t){return k()}writeFeature(t,e){return JSON.stringify(this.writeFeatureObject(t,e))}writeFeatureObject(t,e){return k()}writeFeatures(t,e){return JSON.stringify(this.writeFeaturesObject(t,e))}writeFeaturesObject(t,e){return k()}writeGeometry(t,e){return JSON.stringify(this.writeGeometryObject(t,e))}writeGeometryObject(t,e){return k()}}function zh(t){if("string"==typeof t){const e=JSON.parse(t);return e||null}return null!==t?t:null}function jh(t,e){if(!t)return null;let i;switch(t.type){case"Point":i=function(t){const e=t.coordinates;return{type:"Point",flatCoordinates:e,layout:en(e.length)}}(t);break;case"LineString":i=function(t){const e=t.coordinates,i=e.flat();return{type:"LineString",flatCoordinates:i,ends:[i.length],layout:en(e[0]?.length||2)}}(t);break;case"Polygon":i=function(t){const e=t.coordinates,i=[],n=e[0]?.[0]?.length,r=un(i,0,e,n);return{type:"Polygon",flatCoordinates:i,ends:r,layout:en(n)}}(t);break;case"MultiPoint":i=function(t){const e=t.coordinates;return{type:"MultiPoint",flatCoordinates:e.flat(),layout:en(e[0]?.length||2)}}(t);break;case"MultiLineString":i=function(t){const e=t.coordinates,i=e[0]?.[0]?.length||2,n=[],r=un(n,0,e,i);return{type:"MultiLineString",flatCoordinates:n,ends:r,layout:en(i)}}(t);break;case"MultiPolygon":i=function(t){const e=t.coordinates,i=[],n=e[0]?.[0]?.[0].length||2,r=cn(i,0,e,n);return{type:"MultiPolygon",flatCoordinates:i,ends:r,layout:en(n)}}(t);break;case"GeometryCollection":i=function(t,e){const i=t.geometries.map((function(t){return jh(t)}));return i}(t);break;default:throw new Error("Unsupported GeoJSON type: "+t.type)}return i}function Gh(t,e){const i=(t=Ph(t,!0,e)).getType();let n;switch(i){case"Point":n=function(t,e){return{type:"Point",coordinates:t.getCoordinates()}}(t);break;case"LineString":n=function(t,e){return{type:"LineString",coordinates:t.getCoordinates()}}(t);break;case"Polygon":n=function(t,e){let i;e&&(i=e.rightHanded);return{type:"Polygon",coordinates:t.getCoordinates(i)}}(t,e);break;case"MultiPoint":n=function(t,e){return{type:"MultiPoint",coordinates:t.getCoordinates()}}(t);break;case"MultiLineString":n=function(t,e){return{type:"MultiLineString",coordinates:t.getCoordinates()}}(t);break;case"MultiPolygon":n=function(t,e){let i;e&&(i=e.rightHanded);return{type:"MultiPolygon",coordinates:t.getCoordinates(i)}}(t,e);break;case"GeometryCollection":n=function(t,e){e=Object.assign({},e),delete e.featureProjection;const i=t.getGeometriesArray().map((function(t){return Gh(t,e)}));return{type:"GeometryCollection",geometries:i}}(t,e);break;case"Circle":n={type:"GeometryCollection",geometries:[]};break;default:throw new Error("Unsupported geometry type: "+i)}return n}var Nh=class extends Oh{constructor(t){t=t||{},super(),this.dataProjection=di(t.dataProjection?t.dataProjection:"EPSG:4326"),t.featureProjection&&(this.defaultFeatureProjection=di(t.featureProjection)),t.featureClass&&(this.featureClass=t.featureClass),this.geometryName_=t.geometryName,this.extractGeometryName_=t.extractGeometryName,this.supportedMediaTypes=["application/geo+json","application/vnd.geo+json"]}readFeatureFromObject(t,e){let i=null;i="Feature"===t.type?t:{type:"Feature",geometry:t,properties:null};const n=jh(i.geometry);if(this.featureClass===qa)return Ah({geometry:n,id:i.id,properties:i.properties},e);const r=new Ia;return this.geometryName_?r.setGeometryName(this.geometryName_):this.extractGeometryName_&&i.geometry_name&&r.setGeometryName(i.geometry_name),r.setGeometry(Dh(n,e)),"id"in i&&r.setId(i.id),i.properties&&r.setProperties(i.properties,!0),r}readFeaturesFromObject(t,e){let i=null;if("FeatureCollection"===t.type){i=[];const n=t.features;for(let t=0,r=n.length;t=o.width)return null;const h=Ye(s),u=Math.floor(o.height*((s[3]-n[1])/h));return u<0||u>=o.height?null:this.getImageData(o,l,u)}renderFrame(t,e){const i=this.image_,n=i.getExtent(),r=i.getResolution(),[s,o]=Array.isArray(r)?r:[r,r],a=i.getPixelRatio(),l=t.layerStatesArray[t.layerIndex],h=t.pixelRatio,u=t.viewState,c=u.center,d=u.resolution,p=h*s/(d*a),g=h*o/(d*a),f=t.extent,m=u.resolution,y=u.rotation,_=Math.round(Ke(f)/m*h),x=Math.round(Ye(f)/m*h);Yi(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,y,-_/2,-x/2),Zi(this.inversePixelTransform,this.pixelTransform);const v=$i(this.pixelTransform);this.useContainer(e,v,this.getBackground(t));const w=this.getRenderContext(t),b=this.context.canvas;b.width!=_||b.height!=x?(b.width=_,b.height=x):this.containerReused||w.clearRect(0,0,_,x);let C=!1,S=!0;if(l.extent){const e=Ei(l.extent,u.projection);S=He(e,t.extent),C=S&&!Ee(e,t.extent),C&&this.clipUnrotated(w,t,e)}const E=i.getImage(),T=Yi(this.tempTransform,_/2,x/2,p,g,0,a*(n[0]-c[0])/s,a*(c[1]-n[3])/o);this.renderedResolution=o*h/a;const R=E.width*T[0],I=E.height*T[3];if(this.getLayer().getSource().getInterpolate()||(w.imageSmoothingEnabled=!1),this.preRender(w,t),S&&R>=.5&&I>=.5){const t=T[4],e=T[5],i=l.opacity;1!==i&&(w.save(),w.globalAlpha=i),w.drawImage(E,0,0,+E.width,+E.height,t,e,R,I),1!==i&&w.restore()}return this.postRender(this.context,t),C&&w.restore(),w.imageSmoothingEnabled=!0,v!==b.style.transform&&(b.style.transform=v),this.container}}var Xh=class extends qh{constructor(t){super(t)}createRenderer(){return new Wh(this)}getData(t){return super.getData(t)}},Bh={ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +read:function(t,e,i,n,r){var s,o,a=8*r-n-1,l=(1<>1,u=-7,c=i?r-1:0,d=i?-1:1,p=t[e+c];for(c+=d,s=p&(1<<-u)-1,p>>=-u,u+=a;u>0;s=256*s+t[e+c],c+=d,u-=8);for(o=s&(1<<-u)-1,s>>=-u,u+=n;u>0;o=256*o+t[e+c],c+=d,u-=8);if(0===s)s=1-h;else{if(s===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),s-=h}return(p?-1:1)*o*Math.pow(2,s-n)},write:function(t,e,i,n,r,s){var o,a,l,h=8*s-r-1,u=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:s-1,g=n?1:-1,f=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+c>=1?d/l:d*Math.pow(2,1-c))*l>=2&&(o++,l/=2),o+c>=u?(a=0,o=u):o+c>=1?(a=(e*l-1)*Math.pow(2,r),o+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,r),o=0));r>=8;t[i+p]=255&a,p+=g,a/=256,r-=8);for(o=o<0;t[i+p]=255&o,p+=g,o/=256,h-=8);t[i+p-g]|=128*f}},Vh=Zh,Yh=Bh;function Zh(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}Zh.Varint=0,Zh.Fixed64=1,Zh.Bytes=2,Zh.Fixed32=5;var Uh=4294967296,$h=1/Uh,Kh="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function Hh(t){return t.type===Zh.Bytes?t.readVarint()+t.pos:t.pos+1}function Jh(t,e,i){return i?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Qh(t,e,i){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));i.realloc(n);for(var r=i.pos-1;r>=t;r--)i.buf[r+n]=i.buf[r]}function tu(t,e){for(var i=0;i>>8,t[i+2]=e>>>16,t[i+3]=e>>>24}function cu(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}Zh.prototype={destroy:function(){this.buf=null},readFields:function(t,e,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&n,t(r,e,this),this.pos===s&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=hu(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=cu(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=hu(this.buf,this.pos)+hu(this.buf,this.pos+4)*Uh;return this.pos+=8,t},readSFixed64:function(){var t=hu(this.buf,this.pos)+cu(this.buf,this.pos+4)*Uh;return this.pos+=8,t},readFloat:function(){var t=Yh.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Yh.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,i,n=this.buf;return e=127&(i=n[this.pos++]),i<128?e:(e|=(127&(i=n[this.pos++]))<<7,i<128?e:(e|=(127&(i=n[this.pos++]))<<14,i<128?e:(e|=(127&(i=n[this.pos++]))<<21,i<128?e:function(t,e,i){var n,r,s=i.buf;if(r=s[i.pos++],n=(112&r)>>4,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<3,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<10,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<17,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<24,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(1&r)<<31,r<128)return Jh(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(i=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Kh?function(t,e,i){return Kh.decode(t.subarray(e,i))}(this.buf,e,t):function(t,e,i){var n="",r=e;for(;r239?4:l>223?3:l>191?2:1;if(r+u>i)break;1===u?l<128&&(h=l):2===u?128==(192&(s=t[r+1]))&&(h=(31&l)<<6|63&s)<=127&&(h=null):3===u?(s=t[r+1],o=t[r+2],128==(192&s)&&128==(192&o)&&((h=(15&l)<<12|(63&s)<<6|63&o)<=2047||h>=55296&&h<=57343)&&(h=null)):4===u&&(s=t[r+1],o=t[r+2],a=t[r+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&((h=(15&l)<<18|(63&s)<<12|(63&o)<<6|63&a)<=65535||h>=1114112)&&(h=null)),null===h?(h=65533,u=1):h>65535&&(h-=65536,n+=String.fromCharCode(h>>>10&1023|55296),h=56320|1023&h),n+=String.fromCharCode(h),r+=u}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==Zh.Bytes)return t.push(this.readVarint(e));var i=Hh(this);for(t=t||[];this.pos127;);else if(e===Zh.Bytes)this.pos=this.readVarint()+this.pos;else if(e===Zh.Fixed32)this.pos+=4;else{if(e!==Zh.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var i,n;t>=0?(i=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(i=~(-t%4294967296))?i=i+1|0:(i=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,i){i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos]=127&t}(i,0,e),function(t,e){var i=(7&t)<<4;if(e.buf[e.pos++]|=i|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,i){for(var n,r,s=0;s55295&&n<57344){if(!r){n>56319||s+1===e.length?(t[i++]=239,t[i++]=191,t[i++]=189):r=n;continue}if(n<56320){t[i++]=239,t[i++]=191,t[i++]=189,r=n;continue}n=r-55296<<10|n-56320|65536,r=null}else r&&(t[i++]=239,t[i++]=191,t[i++]=189,r=null);n<128?t[i++]=n:(n<2048?t[i++]=n>>6|192:(n<65536?t[i++]=n>>12|224:(t[i++]=n>>18|240,t[i++]=n>>12&63|128),t[i++]=n>>6&63|128),t[i++]=63&n|128)}return i}(this.buf,t,this.pos);var i=this.pos-e;i>=128&&Qh(e,i,this),this.pos=e-1,this.writeVarint(i),this.pos+=i},writeFloat:function(t){this.realloc(4),Yh.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Yh.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var i=0;i=128&&Qh(i,n,this),this.pos=i-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,i){this.writeTag(t,Zh.Bytes),this.writeRawMessage(e,i)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,tu,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,eu,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,ru,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,iu,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,nu,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,su,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,ou,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,au,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,lu,e)},writeBytesField:function(t,e){this.writeTag(t,Zh.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,Zh.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,Zh.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,Zh.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var du=br(Vh);class pu extends Fh{constructor(t){super(),t=t||{},this.dataProjection=new ie({code:"",units:"tile-pixels"}),this.featureClass_=t.featureClass?t.featureClass:qa,this.geometryName_=t.geometryName,this.layerName_=t.layerName?t.layerName:"layer",this.layers_=t.layers?t.layers:null,this.idProperty_=t.idProperty,this.supportedMediaTypes=["application/vnd.mapbox-vector-tile","application/x-protobuf"]}readRawGeometry_(t,e,i,n){t.pos=e.geometry;const r=t.readVarint()+t.pos;let s=1,o=0,a=0,l=0,h=0,u=0;for(;t.pos>3}if(o--,1===s||2===s)a+=t.readSVarint(),l+=t.readSVarint(),1===s&&h>u&&(n.push(h),u=h),i.push(a,l),h+=2;else{if(7!==s)throw new Error("Invalid command found in the PBF");h>u&&(i.push(i[u],i[u+1]),h+=2)}}h>u&&(n.push(h),u=h)}createFeature_(t,e,i){const n=e.type;if(0===n)return null;let r;const s=e.properties;let o;this.idProperty_?(o=s[this.idProperty_],delete s[this.idProperty_]):o=e.id,s[this.layerName_]=e.layer.name;const a=[],l=[];this.readRawGeometry_(t,e,a,l);const h=function(t,e){let i;1===t?i=1===e?"Point":"MultiPoint":2===t?i=1===e?"LineString":"MultiLineString":3===t&&(i="Polygon");return i}(n,l.length);if(this.featureClass_===qa)r=new this.featureClass_(h,a,l,2,s,o),r.transform(i.dataProjection);else{let t;if("Polygon"==h){const e=Gn(a,l);t=e.length>1?new Ga(a,"XY",e):new Nn(a,"XY",l)}else t="Point"===h?new Cn(a,"XY"):"LineString"===h?new Da(a,"XY"):"MultiPoint"===h?new za(a,"XY"):"MultiLineString"===h?new Oa(a,"XY",l):null;r=new(0,this.featureClass_),this.geometryName_&&r.setGeometryName(this.geometryName_);const e=Ph(t,!1,i);r.setGeometry(e),void 0!==o&&r.setId(o),r.setProperties(s,!0)}return r}getType(){return"arraybuffer"}readFeatures(t,e){const i=this.layers_,n=di((e=this.adaptOptions(e)).dataProjection);n.setWorldExtent(e.extent),e.dataProjection=n;const r=new du(t),s=r.readFields(gu,{}),o=[];for(const t in s){if(i&&!i.includes(t))continue;const a=s[t],l=a?[0,0,a.extent,a.extent]:null;n.setExtent(l);for(let t=0,i=a.length;t>3)?i.readString():2===t?i.readFloat():3===t?i.readDouble():4===t?i.readVarint64():5===t?i.readVarint():6===t?i.readSVarint():7===t?i.readBoolean():null;e.values.push(n)}}function mu(t,e,i){if(1==t)e.id=i.readVarint();else if(2==t){const t=i.readVarint()+i.pos;for(;i.pos=Ke(this.sourceProj_.getExtent()),this.sourceWorldWidth_=this.sourceProj_.getExtent()?Ke(this.sourceProj_.getExtent()):null,this.targetWorldWidth_=this.targetProj_.getExtent()?Ke(this.targetProj_.getExtent()):null;const l=Ue(i),h=$e(i),u=qe(i),c=Ne(i),d=this.transformInv_(l),p=this.transformInv_(h),g=this.transformInv_(u),f=this.transformInv_(c),m=10+(s?Math.max(0,Math.ceil(Math.log2(Ge(i)/(s*s*256*256)))):0);if(this.addQuad_(l,h,u,c,d,p,g,f,m),this.wrapsXInSource_){let t=1/0;this.triangles_.forEach((function(e,i,n){t=Math.min(t,e.source[0][0],e.source[1][0],e.source[2][0])})),this.triangles_.forEach((e=>{if(Math.max(e.source[0][0],e.source[1][0],e.source[2][0])-t>this.sourceWorldWidth_/2){const i=[[e.source[0][0],e.source[0][1]],[e.source[1][0],e.source[1][1]],[e.source[2][0],e.source[2][1]]];i[0][0]-t>this.sourceWorldWidth_/2&&(i[0][0]-=this.sourceWorldWidth_),i[1][0]-t>this.sourceWorldWidth_/2&&(i[1][0]-=this.sourceWorldWidth_),i[2][0]-t>this.sourceWorldWidth_/2&&(i[2][0]-=this.sourceWorldWidth_);const n=Math.min(i[0][0],i[1][0],i[2][0]);Math.max(i[0][0],i[1][0],i[2][0])-n.5&&u<1;let p=!1;if(l>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){p=Ke(ve([t,e,i,n]))/this.targetWorldWidth_>.25||p}!d&&this.sourceProj_.isGlobal()&&u&&(p=u>.25||p)}if(!p&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3])&&!He(h,this.maxSourceExtent_))return;let g=0;if(!(p||isFinite(r[0])&&isFinite(r[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)p=!0;else if(g=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(s[0])&&isFinite(s[1])?0:4)+(isFinite(o[0])&&isFinite(o[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1),1!=g&&2!=g&&4!=g&&8!=g)return;if(l>0){if(!p){const e=[(t[0]+i[0])/2,(t[1]+i[1])/2],n=this.transformInv_(e);let s;if(d){s=(Gt(r[0],c)+Gt(o[0],c))/2-Gt(n[0],c)}else s=(r[0]+o[0])/2-n[0];const a=(r[1]+o[1])/2-n[1];p=s*s+a*a>this.errorThresholdSquared_}if(p){if(Math.abs(t[0]-i[0])<=Math.abs(t[1]-i[1])){const h=[(e[0]+i[0])/2,(e[1]+i[1])/2],u=this.transformInv_(h),c=[(n[0]+t[0])/2,(n[1]+t[1])/2],d=this.transformInv_(c);this.addQuad_(t,e,h,c,r,s,u,d,l-1),this.addQuad_(c,h,i,n,d,u,o,a,l-1)}else{const h=[(t[0]+e[0])/2,(t[1]+e[1])/2],u=this.transformInv_(h),c=[(i[0]+n[0])/2,(i[1]+n[1])/2],d=this.transformInv_(c);this.addQuad_(t,h,c,n,r,u,d,a,l-1),this.addQuad_(h,e,i,c,u,s,o,d,l-1)}return}}if(d){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&g)&&this.addTriangle_(t,i,n,r,o,a),0==(14&g)&&this.addTriangle_(t,i,e,r,o,s),g&&(0==(13&g)&&this.addTriangle_(e,n,t,s,a,r),0==(7&g)&&this.addTriangle_(e,n,i,s,a,o))}calculateSourceExtent(){const t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,i,n){const r=e.source;De(t,r[0]),De(t,r[1]),De(t,r[2])})),t}getTriangles(){return this.triangles_}}let xu;const vu=[];function wu(t,e,i,n,r){t.beginPath(),t.moveTo(0,0),t.lineTo(e,i),t.lineTo(n,r),t.closePath(),t.save(),t.clip(),t.fillRect(0,0,Math.max(e,n)+1,Math.max(i,r)),t.restore()}function bu(t,e){return Math.abs(t[4*e]-210)>2||Math.abs(t[4*e+3]-191.25)>2}function Cu(t,e,i,n){const r=vi(i,e,t);let s=pi(e,n,i);const o=e.getMetersPerUnit();void 0!==o&&(s*=o);const a=t.getMetersPerUnit();void 0!==a&&(s/=a);const l=t.getExtent();if(!l||Se(l,r)){const e=pi(t,s,r)/s;isFinite(e)&&e>0&&(s/=e)}return s}function Su(t,e,i,n,r,s,o,a,l,h,u,c,d,p){const g=U(Math.round(i*t),Math.round(i*e),vu);if(c||(g.imageSmoothingEnabled=!1),0===l.length)return g.canvas;function f(t){return Math.round(t*i)/i}g.scale(i,i),g.globalCompositeOperation="lighter";const m=[1/0,1/0,-1/0,-1/0];let y;l.forEach((function(t,e,i){Ae(m,t.extent)}));const _=i/n,x=(c?1:1+Math.pow(2,-24))/_;if(!d||1!==l.length||0!==h){if(y=U(Math.round(Ke(m)*_),Math.round(Ye(m)*_),vu),c||(y.imageSmoothingEnabled=!1),r&&p){const t=(r[0]-m[0])*_,e=-(r[3]-m[3])*_,i=Ke(r)*_,n=Ye(r)*_;y.rect(t,e,i,n),y.clip()}l.forEach((function(t,e,i){const n=(t.extent[0]-m[0])*_,r=-(t.extent[3]-m[3])*_,s=Ke(t.extent)*_,o=Ye(t.extent)*_;t.image.width>0&&t.image.height>0&&y.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,c?n:Math.round(n),c?r:Math.round(r),c?s:Math.round(n+s)-Math.round(n),c?o:Math.round(r+o)-Math.round(r))}))}const v=Ue(o);return a.getTriangles().forEach((function(t,e,i){const n=t.source,r=t.target;let o=n[0][0],a=n[0][1],h=n[1][0],u=n[1][1],d=n[2][0],p=n[2][1];const _=f((r[0][0]-v[0])/s),w=f(-(r[0][1]-v[1])/s),b=f((r[1][0]-v[0])/s),C=f(-(r[1][1]-v[1])/s),S=f((r[2][0]-v[0])/s),E=f(-(r[2][1]-v[1])/s),T=o,R=a;o=0,a=0,h-=T,u-=R,d-=T,p-=R;const I=function(t){const e=t.length;for(let i=0;ir&&(r=e,n=s)}if(0===r)return null;const s=t[n];t[n]=t[i],t[i]=s;for(let n=i+1;n=0;n--){i[n]=t[n][e]/t[n][n];for(let r=n-1;r>=0;r--)t[r][e]-=t[r][n]*i[n]}return i}([[h,u,0,0,b-_],[d,p,0,0,S-_],[0,0,h,u,C-w],[0,0,d,p,E-w]]);if(!I)return;if(g.save(),g.beginPath(),function(){if(void 0===xu){const t=U(6,6,vu);t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",wu(t,4,5,4,0),wu(t,4,5,0,5);const e=t.getImageData(0,0,3,3).data;xu=bu(e,0)||bu(e,4)||bu(e,8),H(t),vu.push(t.canvas)}return xu}()||!c){g.moveTo(b,C);const t=4,e=_-b,i=w-C;for(let n=0;nthis.getImageInternal(t,e,i,r)),this.getInterpolate()),this.reprojectedRevision_=this.getRevision(),this.reprojectedImage_}getImageInternal(t,e,i,n){if(this.loader){const r=function(t,e,i,n){const r=e/i,s=We(t),o=Xt(Ke(t)/r,4),a=Xt(Ye(t)/r,4),l=Xt((n-1)*o/2,4),h=o+2*l,u=Xt((n-1)*a/2,4);return Be(s,r,0,[h,a+2*u])}(t,e,i,1),s=this.findNearestResolution(e);if(this.image&&(this.static_||this.wantedProjection_===n&&(this.wantedExtent_&&Ee(this.wantedExtent_,r)||Ee(this.image.getExtent(),r))&&(this.wantedResolution_&&Eu(this.wantedResolution_)===s||Eu(this.image.getResolution())===s)))return this.image;this.wantedProjection_=n,this.wantedExtent_=r,this.wantedResolution_=s,this.image=new Or(r,s,i,this.loader),this.image.addEventListener(m,this.handleImageChange.bind(this))}return this.image}handleImageChange(t){const e=t.target;let i;switch(e.getState()){case dr.LOADING:this.loading=!0,i=Ru;break;case dr.LOADED:this.loading=!1,i=Iu;break;case dr.ERROR:this.loading=!1,i=Mu;break;default:return}this.hasListener(i)&&this.dispatchEvent(new ku(i,e))}}var Pu="preload",Lu="useInterimTilesOnError";class Au extends Zn{constructor(t){t=t||{};const e=Object.assign({},t);delete e.preload,delete e.useInterimTilesOnError,super(e),this.on,this.once,this.un,this.setPreload(void 0!==t.preload?t.preload:0),this.setUseInterimTilesOnError(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}getPreload(){return this.get(Pu)}setPreload(t){this.set(Pu,t)}getUseInterimTilesOnError(){return this.get(Lu)}setUseInterimTilesOnError(t){this.set(Lu,t)}getData(t){return super.getData(t)}}class Du extends wh{constructor(t,e,i,n,r,s,o,a,l,h,u,c){super(r,jo.IDLE,c),this.renderEdges_=void 0!==u&&u,this.pixelRatio_=o,this.gutter_=a,this.canvas_=null,this.sourceTileGrid_=e,this.targetTileGrid_=n,this.wrappedTileCoord_=s||r,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0;const d=n.getTileCoordExtent(this.wrappedTileCoord_),p=this.targetTileGrid_.getExtent();let g=this.sourceTileGrid_.getExtent();const f=p?Ze(d,p):d;if(0===Ge(f))return void(this.state=jo.EMPTY);const m=t.getExtent();m&&(g=g?Ze(g,m):m);const y=n.getResolution(this.wrappedTileCoord_[0]),_=function(t,e,i,n){const r=We(i);let s=Cu(t,e,r,n);return(!isFinite(s)||s<=0)&&je(i,(function(i){return s=Cu(t,e,i,n),isFinite(s)&&s>0})),s}(t,i,f,y);if(!isFinite(_)||_<=0)return void(this.state=jo.EMPTY);const x=void 0!==h?h:.5;if(this.triangulation_=new _u(t,i,f,g,_*x,y),0===this.triangulation_.getTriangles().length)return void(this.state=jo.EMPTY);this.sourceZ_=e.getZForResolution(_);let v=this.triangulation_.calculateSourceExtent();if(g&&(t.canWrapX()?(v[1]=Dt(v[1],g[1],g[3]),v[3]=Dt(v[3],g[1],g[3])):v=Ze(v,g)),Ge(v)){const t=e.getTileRangeForExtentAndZ(v,this.sourceZ_);for(let e=t.minX;e<=t.maxX;e++)for(let i=t.minY;i<=t.maxY;i++){const t=l(this.sourceZ_,e,i,o);t&&this.sourceTiles_.push(t)}0===this.sourceTiles_.length&&(this.state=jo.EMPTY)}else this.state=jo.EMPTY}getImage(){return this.canvas_}reproject_(){const t=[];if(this.sourceTiles_.forEach((e=>{e&&e.getState()==jo.LOADED&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})})),this.sourceTiles_.length=0,0===t.length)this.state=jo.ERROR;else{const e=this.wrappedTileCoord_[0],i=this.targetTileGrid_.getTileSize(e),n="number"==typeof i?i:i[0],r="number"==typeof i?i:i[1],s=this.targetTileGrid_.getResolution(e),o=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=Su(n,r,this.pixelRatio_,o,this.sourceTileGrid_.getExtent(),s,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=jo.LOADED}this.changed()}load(){if(this.state==jo.IDLE){this.state=jo.LOADING,this.changed();let t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach((e=>{const i=e.getState();if(i==jo.IDLE||i==jo.LOADING){t++;const i=T(e,m,(function(n){const r=e.getState();r!=jo.LOADED&&r!=jo.ERROR&&r!=jo.EMPTY||(I(i),t--,0===t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(i)}})),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,i){t.getState()==jo.IDLE&&t.load()}))}}unlistenSources_(){this.sourcesListenerKeys_.forEach(I),this.sourcesListenerKeys_=null}release(){this.canvas_&&(H(this.canvas_.getContext("2d")),vu.push(this.canvas_),this.canvas_=null),super.release()}}class Ou extends Rl{constructor(t){super(t),this.extentChanged=!0,this.renderedExtent_=null,this.renderedPixelRatio,this.renderedProjection=null,this.renderedRevision,this.renderedTiles=[],this.newTiles_=!1,this.tmpExtent=[1/0,1/0,-1/0,-1/0],this.tmpTileRange_=new Wa(0,0,0,0)}isDrawableTile(t){const e=this.getLayer(),i=t.getState(),n=e.getUseInterimTilesOnError();return i==jo.LOADED||i==jo.EMPTY||i==jo.ERROR&&!n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState.projection,o=this.getLayer();let a=o.getSource().getTile(t,e,i,r,s);return a.getState()==jo.ERROR&&o.getUseInterimTilesOnError()&&o.getPreload()>0&&(this.newTiles_=!0),this.isDrawableTile(a)||(a=a.getInterimTile()),a}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=Bi(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!Se(r,n))return null;const s=e.pixelRatio,o=e.viewState.projection,a=e.viewState,l=i.getRenderSource(),h=l.getTileGridForProjection(a.projection),u=l.getTilePixelRatio(e.pixelRatio);for(let t=h.getZForResolution(a.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=l.getTile(t,e[1],e[2],s,o);if(!(i instanceof bh||i instanceof Du)||i instanceof Du&&i.getState()===jo.EMPTY)return null;if(i.getState()!==jo.LOADED)continue;const r=h.getOrigin(t),c=gr(h.getTileSize(t)),d=h.getResolution(t),p=Math.floor(u*((n[0]-r[0])/d-e[1]*c[0])),g=Math.floor(u*((r[1]-n[1])/d-e[2]*c[1])),f=Math.round(u*l.getGutterForProjection(a.projection));return this.getImageData(i.getImage(),p+f,g+f)}return null}loadedTileCallback(t,e,i){return!!this.isDrawableTile(i)&&super.loadedTileCallback(t,e,i)}prepareFrame(t){return!!this.getLayer().getSource()}renderFrame(t,e){const i=t.layerStatesArray[t.layerIndex],r=t.viewState,s=r.projection,o=r.resolution,a=r.center,l=r.rotation,h=t.pixelRatio,u=this.getLayer(),c=u.getSource(),d=c.getRevision(),p=c.getTileGridForProjection(s),g=p.getZForResolution(o,c.zDirection),f=p.getResolution(g);let m=t.extent;const y=t.viewState.resolution,_=c.getTilePixelRatio(h),x=Math.round(Ke(m)/y*h),v=Math.round(Ye(m)/y*h),w=i.extent&&Ei(i.extent);w&&(m=Ze(m,Ei(i.extent)));const b=f*x/2/_,C=f*v/2/_,S=[a[0]-b,a[1]-C,a[0]+b,a[1]+C],E=p.getTileRangeForExtentAndZ(m,g),T={};T[g]={};const R=this.createLoadedTileFinder(c,s,T),I=this.tmpExtent,M=this.tmpTileRange_;this.newTiles_=!1;const k=l?Ve(r.center,y,l,t.size):void 0;for(let e=E.minX;e<=E.maxX;++e)for(let n=E.minY;n<=E.maxY;++n){if(l&&!p.tileCoordIntersectsViewport([g,e,n],k))continue;const r=this.getTile(g,e,n,t);if(this.isDrawableTile(r)){const e=P(this);if(r.getState()==jo.LOADED){T[g][r.tileCoord.toString()]=r;let t=r.inTransition(e);t&&1!==i.opacity&&(r.endTransition(e),t=!1),this.newTiles_||!t&&this.renderedTiles.includes(r)||(this.newTiles_=!0)}if(1===r.getAlpha(e,t.time))continue}const s=p.getTileCoordChildTileRange(r.tileCoord,M,I);let o=!1;s&&(o=R(g+1,s)),o||p.forEachTileCoordParentTileRange(r.tileCoord,R,M,I)}const F=f/o*h/_;Yi(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,l,-x/2,-v/2);const L=$i(this.pixelTransform);this.useContainer(e,L,this.getBackground(t));const A=this.getRenderContext(t),D=this.context.canvas;Zi(this.inversePixelTransform,this.pixelTransform),Yi(this.tempTransform,x/2,v/2,F,F,0,-x/2,-v/2),D.width!=x||D.height!=v?(D.width=x,D.height=v):this.containerReused||A.clearRect(0,0,x,v),w&&this.clipUnrotated(A,t,w),c.getInterpolate()||(A.imageSmoothingEnabled=!1),this.preRender(A,t),this.renderedTiles.length=0;let O,z,j,G=Object.keys(T).map(Number);G.sort(n),1!==i.opacity||this.containerReused&&!c.getOpaque(t.viewState.projection)?(O=[],z=[]):G=G.reverse();for(let e=G.length-1;e>=0;--e){const i=G[e],n=c.getTilePixelSize(i,h,s),r=p.getResolution(i)/f,o=n[0]*r*F,a=n[1]*r*F,l=p.getTileCoordForCoordAndZ(Ue(S),i),u=p.getTileCoordExtent(l),d=Bi(this.tempTransform,[_*(u[0]-S[0])/f,_*(S[3]-u[3])/f]),m=_*c.getGutterForProjection(s),y=T[i];for(const e in y){const n=y[e],r=n.tileCoord,s=l[1]-r[1],h=Math.round(d[0]-(s-1)*o),u=l[2]-r[2],p=Math.round(d[1]-(u-1)*a),f=Math.round(d[0]-s*o),_=Math.round(d[1]-u*a),x=h-f,v=p-_,w=g===i,b=w&&1!==n.getAlpha(P(this),t.time);let C=!1;if(!b)if(O){j=[f,_,f+x,_,f+x,_+v,f,_+v];for(let t=0,e=O.length;t0?n:Math.max(s/i[0],r/i[1]);const o=e+1,a=new Array(o);for(let t=0;ti||i>e.getMaxZoom())return!1;const s=e.getFullTileRange(i);return!s||s.containsXY(n,r)}(t,i)?t:null}clear(){this.tileCache.clear()}refresh(){this.clear(),super.refresh()}updateCacheSize(t,e){const i=this.getTileCacheForProjection(e);t>i.highWaterMark&&(i.highWaterMark=t)}useTile(t,e,i,n){}};let Bu,Vu=!0;try{new ImageData(10,10)}catch(t){Vu=!1}function Yu(t){let e=!0;try{new ImageData(10,10)}catch(t){e=!1}function i(t,i,n){return e?new ImageData(t,i,n):{data:t,width:i,height:n}}return function(e){const n=e.buffers,r=e.meta,s=e.imageOps,o=e.width,a=e.height,l=n.length,h=n[0].byteLength;if(s){const e=new Array(l);for(let t=0;tthis._maxQueueLength;)this._queue.shift().callback(null,null)}_dispatch(){if(this._running||0===this._queue.length)return;const t=this._queue.shift();this._job=t;const e=t.inputs[0].width,i=t.inputs[0].height,n=t.inputs.map((function(t){return t.data.buffer})),r=this._workers.length;if(this._running=r,1===r)return void this._workers[0].postMessage({buffers:n,meta:t.meta,imageOps:this._imageOps,width:e,height:i},n);const s=t.inputs[0].data.length,o=4*Math.ceil(s/4/r);for(let s=0;sthis.getTileInternal(t,e,i,n,s)),this.reprojectionErrorThreshold_,this.renderReprojectionEdges_,this.tileOptions);return g.key=u,l?(g.interimTile=l,g.refreshInterimChain(),o.replace(h,g)):o.set(h,g),g}getTileInternal(t,e,i,n,r){let s=null;const o=Va(t,e,i),a=this.getKey();if(this.tileCache.containsKey(o)){if(s=this.tileCache.get(o),s.key!=a){const l=s;s=this.createTile_(t,e,i,n,r,a),l.getState()==jo.IDLE?s.interimTile=l.interimTile:s.interimTile=l,s.refreshInterimChain(),this.tileCache.replace(o,s)}}else s=this.createTile_(t,e,i,n,r,a),this.tileCache.set(o,s);return s}setRenderReprojectionEdges(t){if(this.renderReprojectionEdges_!=t){this.renderReprojectionEdges_=t;for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear();this.changed()}}setTileGridForProjection(t,e){const i=di(t);if(i){const t=P(i);t in this.tileGridForProjection||(this.tileGridForProjection[t]=e)}}clear(){super.clear();for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear()}}function ac(t,e){t.getImage().src=e}var lc=class extends oc{constructor(t){if(super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:di("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.tileJSON_=null,this.tileSize_=t.tileSize,t.url)if(t.jsonp)!function(t,e,i,n){const r=document.createElement("script"),s="olc_"+P(e);function o(){delete window[s],r.parentNode.removeChild(r)}r.async=!0,r.src=t+(t.includes("?")?"&":"?")+(n||"callback")+"="+s;const a=setTimeout((function(){o(),i&&i()}),1e4);window[s]=function(t){clearTimeout(a),o(),e(t)},document.head.appendChild(r)}(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else{if(!t.tileJSON)throw new Error("Either `url` or `tileJSON` options must be provided");this.handleTileJSONResponse(t.tileJSON)}}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTileJSON(){return this.tileJSON_}handleTileJSONResponse(t){const e=di("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=_i(e,i);n=Qe(t.bounds,r)}const r=qu(i),s=t.minzoom||0,o=Gu({extent:r,maxZoom:t.maxzoom||22,minZoom:s,tileSize:this.tileSize_});if(this.tileGrid=o,this.tileUrlFunction=Mh(t.tiles,o),t.attribution&&!this.getAttributions()){const e=void 0!==n?n:r;this.setAttributions((function(i){return He(e,i.extent)?[t.attribution]:null}))}this.tileJSON_=t,this.setState("ready")}handleTileJSONError(){this.setState("error")}};const hc={image:["Polygon","Circle","LineString","Image","Text"],hybrid:["Polygon","LineString"],vector:[]},uc={hybrid:["Image","Text","Default"],vector:["Polygon","Circle","LineString","Image","Text","Default"]};class cc extends Ou{constructor(t){super(t),this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this),this.renderedLayerRevision_,this.renderedPixelToCoordinateTransform_=null,this.renderedRotation_,this.renderedOpacity_=1,this.tmpTransform_=[1,0,0,1,0,0],this.tileClipContexts_=null}prepareTile(t,e,i){let n;const r=t.getState();return r!==jo.LOADED&&r!==jo.ERROR||(this.updateExecutorGroup_(t,e,i),this.tileImageNeedsRender_(t)&&(n=!0)),n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState,o=s.resolution,a=s.projection,l=this.getLayer(),h=l.getSource().getTile(t,e,i,r,a),u=n.viewHints,c=!(u[Kt]||u[Ht]);!c&&h.wantedResolution||(h.wantedResolution=o);return this.prepareTile(h,r,a)&&(c||Date.now()-n.time<8)&&"vector"!==l.getRenderMode()&&this.renderTileImage_(h,n),super.getTile(t,e,i,n)}isDrawableTile(t){const e=this.getLayer();return super.isDrawableTile(t)&&("vector"===e.getRenderMode()?P(e)in t.executorGroups:t.hasContext(e))}getTileImage(t){return t.getImage(this.getLayer())}prepareFrame(t){const e=this.getLayer().getRevision();return this.renderedLayerRevision_!==e&&(this.renderedLayerRevision_=e,this.renderedTiles.length=0),super.prepareFrame(t)}updateExecutorGroup_(t,e,i){const n=this.getLayer(),r=n.getRevision(),s=n.getRenderOrder()||null,o=t.wantedResolution,a=t.getReplayState(n);if(!a.dirty&&a.renderedResolution===o&&a.renderedRevision==r&&a.renderedRenderOrder==s)return;const l=n.getSource(),h=!!n.getDeclutter(),u=l.getTileGrid(),c=l.getTileGridForProjection(i).getTileCoordExtent(t.wrappedTileCoord),d=l.getSourceTiles(e,i,t),p=P(n);delete t.hitDetectionImageData[p],t.executorGroups[p]=[],a.dirty=!1;for(let i=0,r=d.length;i{const r=f?e.declutter[f].all().map((t=>t.value)):null;for(let e=0,a=n.length;e{const n=this.getLayer(),r=P(n),s=n.getSource(),o=this.renderedProjection,a=o.getExtent(),l=this.renderedResolution,h=s.getTileGridForProjection(o),u=Bi(this.renderedPixelToCoordinateTransform_,t.slice()),c=h.getTileCoordForCoordAndResolution(u,l);let d;for(let t=0,e=this.renderedTiles.length;t0)return void e([]);const p=Ue(h.getTileCoordExtent(d.wrappedTileCoord)),g=[(u[0]-p[0])/l,(p[1]-u[1])/l],f=d.getSourceTiles().reduce((function(t,e){return t.concat(e.getFeatures())}),[]);let m=d.hitDetectionImageData[r];if(!m){const t=gr(h.getTileSize(h.getZForResolution(l,s.zDirection))),e=this.renderedRotation_;m=Yl(t,[this.getRenderTransform(h.getTileCoordCenter(d.wrappedTileCoord),l,0,Vl,t[0]*Vl,t[1]*Vl,0)],f,n.getStyleFunction(),h.getTileCoordExtent(d.wrappedTileCoord),d.getReplayState(n).renderedResolution,e),d.hitDetectionImageData[r]=m}e(Zl(g,f,m))}))}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&void 0!==this.renderedLayerRevision_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}renderDeclutter(t,e){const i=this.context,n=i.globalAlpha;i.globalAlpha=e.opacity;const r=t.viewHints,s=!(r[Kt]||r[Ht]),o=this.renderedTiles;for(let e=0,i=o.length;e=0;--e)n[e].execute(this.context,[this.context.canvas.width,this.context.canvas.height],this.getTileRenderTransform(i,t),t.viewState.rotation,s,Nl,r?t.declutter[r]:void 0)}i.globalAlpha=n}renderDeferredInternal(t){const e=this.renderedTiles.reduce(((t,e,i)=>(e.executorGroups[P(this.getLayer())].forEach((e=>t.push({executorGroup:e,index:i}))),t)),[]),i=e.map((({executorGroup:t})=>t.getDeferredZIndexContexts()));i.map((t=>Object.keys(t))).flat().sort(n).map(Number).forEach((t=>{i.forEach(((i,n)=>{i[t]&&i[t].forEach((t=>{const{executorGroup:i,index:r}=e[n],s=i.getRenderedContext(),o=s.globalAlpha;s.globalAlpha=this.renderedOpacity_;const a=this.tileClipContexts_[r];a&&a.draw(s),t.draw(s),a&&s.restore(),s.globalAlpha=o,t.clear()}))}))}))}getTileRenderTransform(t,e){const i=e.pixelRatio,n=e.viewState,r=n.center,s=n.resolution,o=n.rotation,a=e.size,l=Math.round(a[0]*i),h=Math.round(a[1]*i),u=this.getLayer().getSource().getTileGridForProjection(e.viewState.projection),c=t.tileCoord,d=u.getTileCoordExtent(t.wrappedTileCoord),p=u.getTileCoordExtent(c,this.tmpExtent)[0]-d[0];return Wi(Vi(this.inversePixelTransform.slice(),1/i,1/i),this.getRenderTransform(r,s,o,i,l,h,p))}postRender(t,e){const i=e.viewHints,n=!(i[Kt]||i[Ht]);this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice(),this.renderedRotation_=e.viewState.rotation,this.renderedOpacity_=e.layerStatesArray[e.layerIndex].opacity;const r=this.getLayer(),s=r.getRenderMode(),o=t.globalAlpha;t.globalAlpha=this.renderedOpacity_;const a=r.getDeclutter(),l=a?uc[s].filter((t=>!Nl.includes(t))):uc[s],h=e.viewState,u=h.rotation,c=r.getSource(),d=c.getTileGridForProjection(h.projection).getZForResolution(h.resolution,c.zDirection),p=this.renderedTiles,g=[],f=[],m=[];let y=!0;for(let i=p.length-1;i>=0;--i){const s=p[i];y=y&&!s.getReplayState(r).dirty;const o=s.executorGroups[P(r)].filter((t=>t.hasExecutors(l)));if(0===o.length)continue;const h=this.getTileRenderTransform(s,e),c=s.tileCoord[0];let _=!1;const x=o[0].getClipCoords(h);let v,w=t;if(x){a&&(v=new Sl,w=v.getContext());for(let t=0,e=g.length;t{const n=function(t){const[e,i,n]=t.substring(t.lastIndexOf("/")+1,t.length).split(",").map(Number);return Va(e,i,n)}(e),r=i.peek(n);if(r){const e=r.sourceTiles;for(let i=0,n=e.length;i{const r=this.tileUrlFunction(n,t,e),s=this.sourceTileCache.containsKey(r)?this.sourceTileCache.get(r):new this.tileClass(n,r?jo.IDLE:jo.EMPTY,r,this.format_,this.tileLoadFunction);i.sourceTiles.push(s);const o=s.getState();if(o{this.handleTileChange(e);const n=s.getState();if(n===jo.LOADED||n===jo.ERROR){const e=s.getKey();e in i.errorTileKeys?s.getState()===jo.LOADED&&delete i.errorTileKeys[e]:i.loadingSourceTiles--,n===jo.ERROR?i.errorTileKeys[e]=!0:s.removeEventListener(m,t),0===i.loadingSourceTiles&&i.setState(g(i.errorTileKeys)?jo.LOADED:jo.ERROR)}};s.addEventListener(m,t),i.loadingSourceTiles++}o===jo.IDLE&&(s.extent=l.getTileCoordExtent(n),s.projection=e,s.resolution=l.getResolution(n[0]),this.sourceTileCache.set(r,s),s.load())})),i.loadingSourceTiles||i.setState(i.sourceTiles.some((t=>t.getState()===jo.ERROR))?jo.ERROR:jo.LOADED)}return i.sourceTiles}getTile(t,e,i,n,r){const s=Va(t,e,i),o=this.getKey();let a;if(this.tileCache.containsKey(s)&&(a=this.tileCache.get(s),a.key===o))return a;const l=[t,e,i];let h=this.getTileCoordForTileUrlFunction(l,r);const u=this.getTileGrid().getExtent(),c=this.getTileGridForProjection(r);if(h&&u){const e=c.getTileCoordExtent(h);we(e,-c.getResolution(t),e),He(u,e)||(h=null)}let d=!0;if(null!==h){const e=this.tileGrid,i=c.getResolution(t),s=e.getZForResolution(i,1),o=c.getTileCoordExtent(h);we(o,-i,o),e.forEachTileCoord(o,s,(t=>{d=d&&!this.tileUrlFunction(t,n,r)}))}const p=new Th(l,d?jo.EMPTY:jo.IDLE,h,this.getSourceTiles.bind(this,n,r));return p.key=o,a?(p.interimTile=a,p.refreshInterimChain(),this.tileCache.replace(s,p)):this.tileCache.set(s,p),p}getTileGridForProjection(t){const e=t.getCode();let i=this.tileGrids_[e];if(!i){const t=this.tileGrid,n=t.getResolutions().slice(),r=n.map((function(e,i){return t.getOrigin(i)})),s=n.map((function(e,i){return t.getTileSize(i)})),o=Qt+1;for(let t=n.length;t255?255:t}function xc(t){return t<0?0:t>1?1:t}function vc(t){return"%"===t[t.length-1]?_c(parseFloat(t)/100*255):_c(parseInt(t))}function wc(t){return"%"===t[t.length-1]?xc(parseFloat(t)/100):xc(parseFloat(t))}function bc(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}try{mc={}.parseCSSColor=function(t){var e,i=t.replace(/ /g,"").toLowerCase();if(i in yc)return yc[i].slice();if("#"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var n=i.indexOf("("),r=i.indexOf(")");if(-1!==n&&r+1===i.length){var s=i.substr(0,n),o=i.substr(n+1,r-(n+1)).split(","),a=1;switch(s){case"rgba":if(4!==o.length)return null;a=wc(o.pop());case"rgb":return 3!==o.length?null:[vc(o[0]),vc(o[1]),vc(o[2]),a];case"hsla":if(4!==o.length)return null;a=wc(o.pop());case"hsl":if(3!==o.length)return null;var l=(parseFloat(o[0])%360+360)%360/360,h=wc(o[1]),u=wc(o[2]),c=u<=.5?u*(h+1):u+h-u*h,d=2*u-c;return[_c(255*bc(d,c,l+1/3)),_c(255*bc(d,c,l)),_c(255*bc(d,c,l-1/3)),a];default:return null}}return null}}catch(t){}class Cc{constructor(t,e,i,n=1){this.r=t,this.g=e,this.b=i,this.a=n}static parse(t){if(!t)return;if(t instanceof Cc)return t;if("string"!=typeof t)return;const e=mc(t);return e?new Cc(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3]):void 0}toString(){const[t,e,i,n]=this.toArray();return`rgba(${Math.round(t)},${Math.round(e)},${Math.round(i)},${n})`}toArray(){const{r:t,g:e,b:i,a:n}=this;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*i/n,n]}toArray01(){const{r:t,g:e,b:i,a:n}=this;return 0===n?[0,0,0,0]:[t/n,e/n,i/n,n]}toArray01PremultipliedAlpha(){const{r:t,g:e,b:i,a:n}=this;return[t,e,i,n]}}Cc.black=new Cc(0,0,0,1),Cc.white=new Cc(1,1,1,1),Cc.transparent=new Cc(0,0,0,0),Cc.red=new Cc(1,0,0,1),Cc.blue=new Cc(0,0,1,1);var Sc=Cc;function Ec(t){return"object"==typeof t?["literal",t]:t}function Tc(t,e){let i=t.stops;if(!i)return function(t,e){const i=["get",t.property];if(void 0===t.default)return"string"===e.type?["string",i]:i;if("enum"===e.type)return["match",i,Object.keys(e.values),i,t.default];{const n=["color"===e.type?"to-color":e.type,i,Ec(t.default)];return"array"===e.type&&n.splice(1,0,e.value,e.length||null),n}}(t,e);const n=i&&"object"==typeof i[0][0],r=n||void 0!==t.property,s=n||!r;return i=i.map((t=>!r&&e.tokens&&"string"==typeof t[1]?[t[0],Lc(t[1])]:[t[0],Ec(t[1])])),n?function(t,e,i){const n={},r={},s=[];for(let e=0;e3&&e===t[t.length-2]||(n&&2===t.length||t.push(e),t.push(i))}function Pc(t,e){return t.type?t.type:e.expression.interpolated?"exponential":"interval"}function Lc(t){const e=["concat"],i=/{([^{}]+)}/g;let n=0;for(let r=i.exec(t);null!==r;r=i.exec(t)){const s=t.slice(n,i.lastIndex-r[0].length);n=i.lastIndex,s.length>0&&e.push(s),e.push(["get",r[1]])}if(1===e.length)return t;if(n`:"value"===t.itemType.kind?"array":`array<${e}>`}return t.kind}const Kc=[jc,Gc,Nc,qc,Wc,Yc,Xc,Uc(Bc),Zc];function Hc(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Hc(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(const t of Kc)if(!Hc(t,e))return null}return`Expected ${$c(t)} but found ${$c(e)} instead.`}function Jc(t,e){return e.some((e=>e.kind===t.kind))}function Qc(t,e){return e.some((e=>"null"===e?null===t:"array"===e?Array.isArray(t):"object"===e?t&&!Array.isArray(t)&&"object"==typeof t:e===typeof t))}class td{constructor(t,e,i){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=i,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(t,e){return this.collator.compare(t,e)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class ed{constructor(t,e,i,n,r){this.text=t.normalize?t.normalize():t,this.image=e,this.scale=i,this.fontStack=n,this.textColor=r}}class id{constructor(t){this.sections=t}static fromString(t){return new id([new ed(t,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((t=>0!==t.text.length||t.image&&0!==t.image.name.length))}static factory(t){return t instanceof id?t:id.fromString(t)}toString(){return 0===this.sections.length?"":this.sections.map((t=>t.text)).join("")}serialize(){const t=["format"];for(const e of this.sections){if(e.image){t.push(["image",e.image.name]);continue}t.push(e.text);const i={};e.fontStack&&(i["text-font"]=["literal",e.fontStack.split(",")]),e.scale&&(i["font-scale"]=e.scale),e.textColor&&(i["text-color"]=["rgba"].concat(e.textColor.toArray())),t.push(i)}return t}}class nd{constructor(t){this.name=t.name,this.available=t.available}toString(){return this.name}static fromString(t){return t?new nd({name:t,available:!1}):null}serialize(){return["image",this.name]}}function rd(t,e,i,n){if(!("number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof i&&i>=0&&i<=255)){return`Invalid rgba value [${("number"==typeof n?[t,e,i,n]:[t,e,i]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===n||"number"==typeof n&&n>=0&&n<=1?null:`Invalid rgba value [${[t,e,i,n].join(", ")}]: 'a' must be between 0 and 1.`}function sd(t){if(null===t)return!0;if("string"==typeof t)return!0;if("boolean"==typeof t)return!0;if("number"==typeof t)return!0;if(t instanceof Sc)return!0;if(t instanceof td)return!0;if(t instanceof id)return!0;if(t instanceof nd)return!0;if(Array.isArray(t)){for(const e of t)if(!sd(e))return!1;return!0}if("object"==typeof t){for(const e in t)if(!sd(t[e]))return!1;return!0}return!1}function od(t){if(null===t)return jc;if("string"==typeof t)return Nc;if("boolean"==typeof t)return qc;if("number"==typeof t)return Gc;if(t instanceof Sc)return Wc;if(t instanceof td)return Vc;if(t instanceof id)return Yc;if(t instanceof nd)return Zc;if(Array.isArray(t)){const e=t.length;let i;for(const e of t){const t=od(e);if(i){if(i===t)continue;i=Bc;break}i=t}return Uc(i||Bc,e)}return Xc}function ad(t){const e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof Sc||t instanceof id||t instanceof nd?t.toString():JSON.stringify(t)}class ld{constructor(t,e){this.type=t,this.value=e}static parse(t,e){if(2!==t.length)return e.error(`'literal' expression requires exactly one argument, but found ${t.length-1} instead.`);if(!sd(t[1]))return e.error("invalid value");const i=t[1];let n=od(i);const r=e.expectedType;return"array"!==n.kind||0!==n.N||!r||"array"!==r.kind||"number"==typeof r.N&&0!==r.N||(n=r),new ld(n,i)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Sc?["rgba"].concat(this.value.toArray()):this.value instanceof id?this.value.serialize():this.value}}var hd=ld;var ud=class{constructor(t){this.name="ExpressionEvaluationError",this.message=t}toJSON(){return this.message}};const cd={string:Nc,number:Gc,boolean:qc,object:Xc};class dd{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");let i,n=1;const r=t[0];if("array"===r){let r,s;if(t.length>2){const i=t[1];if("string"!=typeof i||!(i in cd)||"object"===i)return e.error('The item type argument of "array" must be one of string, number, boolean',1);r=cd[i],n++}else r=Bc;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);s=t[2],n++}i=Uc(r,s)}else i=cd[r];const s=[];for(;nt.outputDefined()))}serialize(){const t=this.type,e=[t.kind];if("array"===t.kind){const i=t.itemType;if("string"===i.kind||"number"===i.kind||"boolean"===i.kind){e.push(i.kind);const n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((t=>t.serialize())))}}var pd=dd;class gd{constructor(t){this.type=Yc,this.sections=t}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const i=t[1];if(!Array.isArray(i)&&"object"==typeof i)return e.error("First argument must be an image or text section.");const n=[];let r=!1;for(let i=1;i<=t.length-1;++i){const s=t[i];if(r&&"object"==typeof s&&!Array.isArray(s)){r=!1;let t=null;if(s["font-scale"]&&(t=e.parse(s["font-scale"],1,Gc),!t))return null;let i=null;if(s["text-font"]&&(i=e.parse(s["text-font"],1,Uc(Nc)),!i))return null;let o=null;if(s["text-color"]&&(o=e.parse(s["text-color"],1,Wc),!o))return null;const a=n[n.length-1];a.scale=t,a.font=i,a.textColor=o}else{const s=e.parse(t[i],1,Bc);if(!s)return null;const o=s.type.kind;if("string"!==o&&"value"!==o&&"null"!==o&&"resolvedImage"!==o)return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");r=!0,n.push({content:s,scale:null,font:null,textColor:null})}}return new gd(n)}evaluate(t){return new id(this.sections.map((e=>{const i=e.content.evaluate(t);return od(i)===Zc?new ed("",i,null,null,null):new ed(ad(i),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)})))}eachChild(t){for(const e of this.sections)t(e.content),e.scale&&t(e.scale),e.font&&t(e.font),e.textColor&&t(e.textColor)}outputDefined(){return!1}serialize(){const t=["format"];for(const e of this.sections){t.push(e.content.serialize());const i={};e.scale&&(i["font-scale"]=e.scale.serialize()),e.font&&(i["text-font"]=e.font.serialize()),e.textColor&&(i["text-color"]=e.textColor.serialize()),t.push(i)}return t}}class fd{constructor(t){this.type=Zc,this.input=t}static parse(t,e){if(2!==t.length)return e.error("Expected two arguments.");const i=e.parse(t[1],1,Nc);return i?new fd(i):e.error("No image name provided.")}evaluate(t){const e=this.input.evaluate(t),i=nd.fromString(e);return i&&t.availableImages&&(i.available=t.availableImages.indexOf(e)>-1),i}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const md={"to-boolean":qc,"to-color":Wc,"to-number":Gc,"to-string":Nc};class yd{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const i=t[0];if(("to-boolean"===i||"to-string"===i)&&2!==t.length)return e.error("Expected one argument.");const n=md[i],r=[];for(let i=1;i4?`Invalid rbga value ${JSON.stringify(e)}: expected an array containing either three or four numeric values.`:rd(e[0],e[1],e[2],e[3]),!i))return new Sc(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ud(i||`Could not parse color from value '${"string"==typeof e?e:String(JSON.stringify(e))}'`)}if("number"===this.type.kind){let e=null;for(const i of this.args){if(e=i.evaluate(t),null===e)return 0;const n=Number(e);if(!isNaN(n))return n}throw new ud(`Could not convert ${JSON.stringify(e)} to number.`)}return"formatted"===this.type.kind?id.fromString(ad(this.args[0].evaluate(t))):"resolvedImage"===this.type.kind?nd.fromString(ad(this.args[0].evaluate(t))):ad(this.args[0].evaluate(t))}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new gd([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new fd(this.args[0]).serialize();const t=[`to-${this.type.kind}`];return this.eachChild((e=>{t.push(e.serialize())})),t}}var _d=yd;const xd=["Unknown","Point","LineString","Polygon"];var vd=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?xd[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const t=this.featureDistanceData.center,e=this.featureDistanceData.scale,{x:i,y:n}=this.featureTileCoord,r=i*e-t[0],s=n*e-t[1];return this.featureDistanceData.bearing[0]*r+this.featureDistanceData.bearing[1]*s}return 0}parseColor(t){let e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Sc.parse(t)),e}};class wd{constructor(t,e,i,n){this.name=t,this.type=e,this._evaluate=i,this.args=n}evaluate(t){return this._evaluate(t,this.args)}eachChild(t){this.args.forEach(t)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((t=>t.serialize())))}static parse(t,e){const i=t[0],n=wd.definitions[i];if(!n)return e.error(`Unknown expression "${i}". If you wanted a literal array, use ["literal", [...]].`,0);const r=Array.isArray(n)?n[0]:n.type,s=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,o=s.filter((([e])=>!Array.isArray(e)||e.length===t.length-1));let a=null;for(const[n,s]of o){a=new Kd(e.registry,e.path,null,e.scope);const o=[];let l=!1;for(let e=1;e{return e=t,Array.isArray(e)?`(${e.map($c).join(", ")})`:`(${$c(e.type)}...)`;var e})).join(" | "),n=[];for(let i=1;i=e[2])&&(!(t[1]<=e[1])&&!(t[3]>=e[3])))}function Rd(t,e){const i=(180+t[0])/360;const n=(r=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360);var r;const s=Math.pow(2,e.z);return[Math.round(i*s*Sd),Math.round(n*s*Sd)]}function Id(t,e,i){const n=t[0]-e[0],r=t[1]-e[1],s=t[0]-i[0],o=t[1]-i[1];return n*o-s*r==0&&n*s<=0&&r*o<=0}function Md(t,e,i){return e[1]>t[1]!=i[1]>t[1]&&t[0]<(i[0]-e[0])*(t[1]-e[1])/(i[1]-e[1])+e[0]}function kd(t,e){let i=!1;for(let n=0,r=e.length;n0&&c<0||u<0&&c>0}function Ld(t,e,i,n){const r=[e[0]-t[0],e[1]-t[1]],s=[n[0]-i[0],n[1]-i[1]];return 0!=(o=s)[0]*(a=r)[1]-o[1]*a[0]&&!(!Pd(t,e,i,n)||!Pd(i,n,t,e));var o,a}function Ad(t,e,i){for(const n of i)for(let i=0;ii[2]){const e=.5*n;let r=t[0]-i[0]>e?-n:i[0]-t[0]>e?n:0;0===r&&(r=t[0]-i[2]>e?-n:i[2]-t[0]>e?n:0),t[0]+=r}Ed(e,t)}function Nd(t,e,i,n){const r=Math.pow(2,n.z)*Sd,s=[n.x*Sd,n.y*Sd],o=[];if(!t)return o;for(const n of t)for(const t of n){const n=[t.x+s[0],t.y+s[1]];Gd(n,e,i,r),o.push(n)}return o}function qd(t,e,i,n){const r=Math.pow(2,n.z)*Sd,s=[n.x*Sd,n.y*Sd],o=[];if(!t)return o;for(const i of t){const t=[];for(const n of i){const i=[n.x+s[0],n.y+s[1]];Ed(e,i),t.push(i)}o.push(t)}if(e[2]-e[0]<=r/2){!function(t){t[0]=t[1]=1/0,t[2]=t[3]=-1/0}(e);for(const t of o)for(const n of t)Gd(n,e,i,r)}return o}class Wd{constructor(t,e){this.type=qc,this.geojson=t,this.geometries=e}static parse(t,e){if(2!==t.length)return e.error(`'within' expression requires exactly one argument, but found ${t.length-1} instead.`);if(sd(t[1])){const e=t[1];if("FeatureCollection"===e.type)for(let t=0;t{e&&!Bd(t)&&(e=!1)})),e}function Vd(t){if(t instanceof bd&&"feature-state"===t.name)return!1;let e=!0;return t.eachChild((t=>{e&&!Vd(t)&&(e=!1)})),e}function Yd(t,e){if(t instanceof bd&&e.indexOf(t.name)>=0)return!1;let i=!0;return t.eachChild((t=>{i&&!Yd(t,e)&&(i=!1)})),i}class Zd{constructor(t,e){this.type=e.type,this.name=t,this.boundExpression=e}static parse(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");const i=t[1];return e.scope.has(i)?new Zd(i,e.scope.get(i)):e.error(`Unknown variable "${i}". Make sure "${i}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(t){return this.boundExpression.evaluate(t)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var Ud=Zd;class $d{constructor(t,e=[],i,n=new zc,r=[]){this.registry=t,this.path=e,this.key=e.map((t=>`[${t}]`)).join(""),this.scope=n,this.errors=r,this.expectedType=i}parse(t,e,i,n,r={}){return e?this.concat(e,i,n)._parse(t,r):this._parse(t,r)}_parse(t,e){function i(t,e,i){return"assert"===i?new pd(e,[t]):"coerce"===i?new _d(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const n=t[0];if("string"!=typeof n)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const r=this.registry[n];if(r){let n=r.parse(t,this);if(!n)return null;if(this.expectedType){const t=this.expectedType,r=n.type;if("string"!==t.kind&&"number"!==t.kind&&"boolean"!==t.kind&&"object"!==t.kind&&"array"!==t.kind||"value"!==r.kind)if("color"!==t.kind&&"formatted"!==t.kind&&"resolvedImage"!==t.kind||"value"!==r.kind&&"string"!==r.kind){if(this.checkSubtype(t,r))return null}else n=i(n,t,e.typeAnnotation||"coerce");else n=i(n,t,e.typeAnnotation||"assert")}if(!(n instanceof hd)&&"resolvedImage"!==n.type.kind&&Hd(n)){const t=new vd;try{n=new hd(n.type,n.evaluate(t))}catch(t){return this.error(t.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof t} instead.`)}concat(t,e,i){const n="number"==typeof t?this.path.concat(t):this.path,r=i?this.scope.concat(i):this.scope;return new $d(this.registry,n,e||null,r,this.errors)}error(t,...e){const i=`${this.key}${e.map((t=>`[${t}]`)).join("")}`;this.errors.push(new Dc(i,t))}checkSubtype(t,e){const i=Hc(t,e);return i&&this.error(i),i}}var Kd=$d;function Hd(t){if(t instanceof Ud)return Hd(t.boundExpression);if(t instanceof bd&&"error"===t.name)return!1;if(t instanceof Cd)return!1;if(t instanceof Xd)return!1;const e=t instanceof _d||t instanceof pd;let i=!0;return t.eachChild((t=>{i=e?i&&Hd(t):i&&t instanceof hd})),!!i&&(Bd(t)&&Yd(t,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function Jd(t,e){const i=t.length-1;let n,r,s=0,o=i,a=0;for(;s<=o;)if(a=Math.floor((s+o)/2),n=t[a],r=t[a+1],n<=e){if(a===i||ee))throw new ud("Input is not a number.");o=a-1}return 0}class Qd{constructor(t,e,i){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(const[t,e]of i)this.labels.push(t),this.outputs.push(e)}static parse(t,e){if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");const i=e.parse(t[1],1,Gc);if(!i)return null;const n=[];let r=null;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(let i=1;i=s)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',a);const h=e.parse(o,l,r);if(!h)return null;r=r||h.type,n.push([s,h])}return new Qd(r,i,n)}evaluate(t){const e=this.labels,i=this.outputs;if(1===e.length)return i[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return i[0].evaluate(t);const r=e.length;if(n>=e[r-1])return i[r-1].evaluate(t);return i[Jd(e,n)].evaluate(t)}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){const t=["step",this.input.serialize()];for(let e=0;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t}}var tp=Qd,ep=ip;function ip(t,e,i,n){this.cx=3*t,this.bx=3*(i-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=i,this.p2y=n}ip.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},ip.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},ip.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},ip.prototype.solveCurveX=function(t,e){var i,n,r,s,o;for(void 0===e&&(e=1e-6),r=t,o=0;o<8;o++){if(s=this.sampleCurveX(r)-t,Math.abs(s)(n=1))return n;for(;is?i=r:n=r,r=.5*(n-i)+i}return r},ip.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var np=fc(ep);function rp(t,e,i){return t*(1-i)+e*i}var sp=Object.freeze({__proto__:null,number:rp,color:function(t,e,i){return new Sc(rp(t.r,e.r,i),rp(t.g,e.g,i),rp(t.b,e.b,i),rp(t.a,e.a,i))},array:function(t,e,i){return t.map(((t,n)=>rp(t,e[n],i)))}});const op=.95047,ap=1,lp=1.08883,hp=4/29,up=6/29,cp=3*up*up,dp=up*up*up,pp=Math.PI/180,gp=180/Math.PI;function fp(t){return t>dp?Math.pow(t,1/3):t/cp+hp}function mp(t){return t>up?t*t*t:cp*(t-hp)}function yp(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function _p(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function xp(t){const e=_p(t.r),i=_p(t.g),n=_p(t.b),r=fp((.4124564*e+.3575761*i+.1804375*n)/op),s=fp((.2126729*e+.7151522*i+.072175*n)/ap);return{l:116*s-16,a:500*(r-s),b:200*(s-fp((.0193339*e+.119192*i+.9503041*n)/lp)),alpha:t.a}}function vp(t){let e=(t.l+16)/116,i=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=ap*mp(e),i=op*mp(i),n=lp*mp(n),new Sc(yp(3.2404542*i-1.5371385*e-.4985314*n),yp(-.969266*i+1.8760108*e+.041556*n),yp(.0556434*i-.2040259*e+1.0572252*n),t.alpha)}function wp(t,e,i){const n=e-t;return t+i*(n>180||n<-180?n-360*Math.round(n/360):n)}const bp={forward:xp,reverse:vp,interpolate:function(t,e,i){return{l:rp(t.l,e.l,i),a:rp(t.a,e.a,i),b:rp(t.b,e.b,i),alpha:rp(t.alpha,e.alpha,i)}}},Cp={forward:function(t){const{l:e,a:i,b:n}=xp(t),r=Math.atan2(n,i)*gp;return{h:r<0?r+360:r,c:Math.sqrt(i*i+n*n),l:e,alpha:t.a}},reverse:function(t){const e=t.h*pp,i=t.c;return vp({l:t.l,a:Math.cos(e)*i,b:Math.sin(e)*i,alpha:t.alpha})},interpolate:function(t,e,i){return{h:wp(t.h,e.h,i),c:rp(t.c,e.c,i),l:rp(t.l,e.l,i),alpha:rp(t.alpha,e.alpha,i)}}};class Sp{constructor(t,e,i,n,r){this.type=t,this.operator=e,this.interpolation=i,this.input=n,this.labels=[],this.outputs=[];for(const[t,e]of r)this.labels.push(t),this.outputs.push(e)}static interpolationFactor(t,e,i,n){let r=0;if("exponential"===t.name)r=Ep(e,t.base,i,n);else if("linear"===t.name)r=Ep(e,1,i,n);else if("cubic-bezier"===t.name){const s=t.controlPoints;r=new np(s[0],s[1],s[2],s[3]).solve(Ep(e,1,i,n))}return r}static parse(t,e){let[i,n,r,...s]=t;if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){const t=n[1];if("number"!=typeof t)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:t}}else{if("cubic-bezier"!==n[0])return e.error(`Unknown interpolation type ${String(n[0])}`,1,0);{const t=n.slice(1);if(4!==t.length||t.some((t=>"number"!=typeof t||t<0||t>1)))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:t}}}if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(r=e.parse(r,2,Gc),!r)return null;const o=[];let a=null;"interpolate-hcl"===i||"interpolate-lab"===i?a=Wc:e.expectedType&&"value"!==e.expectedType.kind&&(a=e.expectedType);for(let t=0;t=i)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',r);const h=e.parse(n,l,a);if(!h)return null;a=a||h.type,o.push([i,h])}return"number"===a.kind||"color"===a.kind||"array"===a.kind&&"number"===a.itemType.kind&&"number"==typeof a.N?new Sp(a,i,n,r,o):e.error(`Type ${$c(a)} is not interpolatable.`)}evaluate(t){const e=this.labels,i=this.outputs;if(1===e.length)return i[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return i[0].evaluate(t);const r=e.length;if(n>=e[r-1])return i[r-1].evaluate(t);const s=Jd(e,n),o=e[s],a=e[s+1],l=Sp.interpolationFactor(this.interpolation,n,o,a),h=i[s].evaluate(t),u=i[s+1].evaluate(t);return"interpolate"===this.operator?sp[this.type.kind.toLowerCase()](h,u,l):"interpolate-hcl"===this.operator?Cp.reverse(Cp.interpolate(Cp.forward(h),Cp.forward(u),l)):bp.reverse(bp.interpolate(bp.forward(h),bp.forward(u),l))}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){let t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const e=[this.operator,t,this.input.serialize()];for(let t=0;tHc(n,t.type)));return new Rp(s?Bc:i,r)}evaluate(t){let e,i=null,n=0;for(const r of this.args){if(n++,i=r.evaluate(t),i&&i instanceof nd&&!i.available&&(e||(e=i),i=null,n===this.args.length))return e;if(null!==i)break}return i}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){const t=["coalesce"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Ip=Rp;class Mp{constructor(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e}evaluate(t){return this.result.evaluate(t)}eachChild(t){for(const e of this.bindings)t(e[1]);t(this.result)}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found ${t.length-1} instead.`);const i=[];for(let n=1;n=i.length)throw new ud(`Array index out of bounds: ${e} > ${i.length-1}.`);if(e!==Math.floor(e))throw new ud(`Array index must be an integer, but found ${e} instead.`);return i[e]}eachChild(t){t(this.index),t(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var Pp=Fp;class Lp{constructor(t,e){this.type=qc,this.needle=t,this.haystack=e}static parse(t,e){if(3!==t.length)return e.error(`Expected 2 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Bc);return i&&n?Jc(i.type,[qc,Nc,Gc,jc,Bc])?new Lp(i,n):e.error(`Expected first argument to be of type boolean, string, number or null, but found ${$c(i.type)} instead`):null}evaluate(t){const e=this.needle.evaluate(t),i=this.haystack.evaluate(t);if(null==i)return!1;if(!Qc(e,["boolean","string","number","null"]))throw new ud(`Expected first argument to be of type boolean, string, number or null, but found ${$c(od(e))} instead.`);if(!Qc(i,["string","array"]))throw new ud(`Expected second argument to be of type array or string, but found ${$c(od(i))} instead.`);return i.indexOf(e)>=0}eachChild(t){t(this.needle),t(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var Ap=Lp;class Dp{constructor(t,e,i){this.type=Gc,this.needle=t,this.haystack=e,this.fromIndex=i}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Bc);if(!i||!n)return null;if(!Jc(i.type,[qc,Nc,Gc,jc,Bc]))return e.error(`Expected first argument to be of type boolean, string, number or null, but found ${$c(i.type)} instead`);if(4===t.length){const r=e.parse(t[3],3,Gc);return r?new Dp(i,n,r):null}return new Dp(i,n)}evaluate(t){const e=this.needle.evaluate(t),i=this.haystack.evaluate(t);if(!Qc(e,["boolean","string","number","null"]))throw new ud(`Expected first argument to be of type boolean, string, number or null, but found ${$c(od(e))} instead.`);if(!Qc(i,["string","array"]))throw new ud(`Expected second argument to be of type array or string, but found ${$c(od(i))} instead.`);if(this.fromIndex){const n=this.fromIndex.evaluate(t);return i.indexOf(e,n)}return i.indexOf(e)}eachChild(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const t=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),t]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Op=Dp;class zp{constructor(t,e,i,n,r,s){this.inputType=t,this.type=e,this.input=i,this.cases=n,this.outputs=r,this.otherwise=s}static parse(t,e){if(t.length<5)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if(t.length%2!=1)return e.error("Expected an even number of arguments.");let i,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);const r={},s=[];for(let o=2;oNumber.MAX_SAFE_INTEGER)return h.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof t&&Math.floor(t)!==t)return h.error("Numeric branch labels must be integer values.");if(i){if(h.checkSubtype(i,od(t)))return null}else i=od(t);if(void 0!==r[String(t)])return h.error("Branch labels must be unique.");r[String(t)]=s.length}const u=e.parse(l,o,n);if(!u)return null;n=n||u.type,s.push(u)}const o=e.parse(t[1],1,Bc);if(!o)return null;const a=e.parse(t[t.length-1],t.length-1,n);return a?"value"!==o.type.kind&&e.concat(1).checkSubtype(i,o.type)?null:new zp(i,n,o,r,s,a):null}evaluate(t){const e=this.input.evaluate(t);return(od(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)}eachChild(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["match",this.input.serialize()],e=Object.keys(this.cases).sort(),i=[],n={};for(const t of e){const e=n[this.cases[t]];void 0===e?(n[this.cases[t]]=i.length,i.push([this.cases[t],[t]])):i[e][1].push(t)}const r=t=>"number"===this.inputType.kind?Number(t):t;for(const[e,n]of i)1===n.length?t.push(r(n[0])):t.push(n.map(r)),t.push(this.outputs[e].serialize());return t.push(this.otherwise.serialize()),t}}var jp=zp;class Gp{constructor(t,e,i){this.type=t,this.branches=e,this.otherwise=i}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found only ${t.length-1}.`);if(t.length%2!=0)return e.error("Expected an odd number of arguments.");let i;e.expectedType&&"value"!==e.expectedType.kind&&(i=e.expectedType);const n=[];for(let r=1;re.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["case"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Np=Gp;class qp{constructor(t,e,i,n){this.type=t,this.input=e,this.beginIndex=i,this.endIndex=n}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Gc);if(!i||!n)return null;if(!Jc(i.type,[Uc(Bc),Nc,Bc]))return e.error(`Expected first argument to be of type array or string, but found ${$c(i.type)} instead`);if(4===t.length){const r=e.parse(t[3],3,Gc);return r?new qp(i.type,i,n,r):null}return new qp(i.type,i,n)}evaluate(t){const e=this.input.evaluate(t),i=this.beginIndex.evaluate(t);if(!Qc(e,["string","array"]))throw new ud(`Expected first argument to be of type array or string, but found ${$c(od(e))} instead.`);if(this.endIndex){const n=this.endIndex.evaluate(t);return e.slice(i,n)}return e.slice(i)}eachChild(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const t=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),t]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var Wp=qp;function Xp(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function Bp(t,e,i,n){return 0===n.compare(e,i)}function Vp(t,e,i){const n="=="!==t&&"!="!==t;return class r{constructor(t,e,i){this.type=qc,this.lhs=t,this.rhs=e,this.collator=i,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}static parse(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");const i=t[0];let s=e.parse(t[1],1,Bc);if(!s)return null;if(!Xp(i,s.type))return e.concat(1).error(`"${i}" comparisons are not supported for type '${$c(s.type)}'.`);let o=e.parse(t[2],2,Bc);if(!o)return null;if(!Xp(i,o.type))return e.concat(2).error(`"${i}" comparisons are not supported for type '${$c(o.type)}'.`);if(s.type.kind!==o.type.kind&&"value"!==s.type.kind&&"value"!==o.type.kind)return e.error(`Cannot compare types '${$c(s.type)}' and '${$c(o.type)}'.`);n&&("value"===s.type.kind&&"value"!==o.type.kind?s=new pd(o.type,[s]):"value"!==s.type.kind&&"value"===o.type.kind&&(o=new pd(s.type,[o])));let a=null;if(4===t.length){if("string"!==s.type.kind&&"string"!==o.type.kind&&"value"!==s.type.kind&&"value"!==o.type.kind)return e.error("Cannot use collator to compare non-string types.");if(a=e.parse(t[3],3,Vc),!a)return null}return new r(s,o,a)}evaluate(r){const s=this.lhs.evaluate(r),o=this.rhs.evaluate(r);if(n&&this.hasUntypedArgument){const e=od(s),i=od(o);if(e.kind!==i.kind||"string"!==e.kind&&"number"!==e.kind)throw new ud(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${e.kind}, ${i.kind}) instead.`)}if(this.collator&&!n&&this.hasUntypedArgument){const t=od(s),i=od(o);if("string"!==t.kind||"string"!==i.kind)return e(r,s,o)}return this.collator?i(r,s,o,this.collator.evaluate(r)):e(r,s,o)}eachChild(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)}outputDefined(){return!0}serialize(){const e=[t];return this.eachChild((t=>{e.push(t.serialize())})),e}}}const Yp=Vp("==",(function(t,e,i){return e===i}),Bp),Zp=Vp("!=",(function(t,e,i){return e!==i}),(function(t,e,i,n){return!Bp(0,e,i,n)})),Up=Vp("<",(function(t,e,i){return e",(function(t,e,i){return e>i}),(function(t,e,i,n){return n.compare(e,i)>0})),Kp=Vp("<=",(function(t,e,i){return e<=i}),(function(t,e,i,n){return n.compare(e,i)<=0})),Hp=Vp(">=",(function(t,e,i){return e>=i}),(function(t,e,i,n){return n.compare(e,i)>=0}));class Jp{constructor(t,e,i,n,r,s){this.type=Nc,this.number=t,this.locale=e,this.currency=i,this.unit=n,this.minFractionDigits=r,this.maxFractionDigits=s}static parse(t,e){if(3!==t.length)return e.error("Expected two arguments.");const i=e.parse(t[1],1,Gc);if(!i)return null;const n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");let r=null;if(n.locale&&(r=e.parse(n.locale,1,Nc),!r))return null;let s=null;if(n.currency&&(s=e.parse(n.currency,1,Nc),!s))return null;let o=null;if(n.unit&&(o=e.parse(n.unit,1,Nc),!o))return null;let a=null;if(n["min-fraction-digits"]&&(a=e.parse(n["min-fraction-digits"],1,Gc),!a))return null;let l=null;return n["max-fraction-digits"]&&(l=e.parse(n["max-fraction-digits"],1,Gc),!l)?null:new Jp(i,r,s,o,a,l)}evaluate(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(t):void 0,unit:this.unit?this.unit.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))}eachChild(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.unit&&t(this.unit),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.unit&&(t.unit=this.unit.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]}}class Qp{constructor(t){this.type=Gc,this.input=t}static parse(t,e){if(2!==t.length)return e.error(`Expected 1 argument, but found ${t.length-1} instead.`);const i=e.parse(t[1],1);return i?"array"!==i.type.kind&&"string"!==i.type.kind&&"value"!==i.type.kind?e.error(`Expected argument of type string or array, but found ${$c(i.type)} instead.`):new Qp(i):null}evaluate(t){const e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ud(`Expected value to be of type string or array, but found ${$c(od(e))} instead.`)}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){const t=["length"];return this.eachChild((e=>{t.push(e.serialize())})),t}}const tg={"==":Yp,"!=":Zp,">":$p,"<":Up,">=":Hp,"<=":Kp,array:pd,at:Pp,boolean:pd,case:Np,coalesce:Ip,collator:Cd,format:gd,image:fd,in:Ap,"index-of":Op,interpolate:Tp,"interpolate-hcl":Tp,"interpolate-lab":Tp,length:Qp,let:kp,literal:hd,match:jp,number:pd,"number-format":Jp,object:pd,slice:Wp,step:tp,string:pd,"to-boolean":_d,"to-color":_d,"to-number":_d,"to-string":_d,var:Ud,within:Xd};function eg(t,[e,i,n,r]){e=e.evaluate(t),i=i.evaluate(t),n=n.evaluate(t);const s=r?r.evaluate(t):1,o=rd(e,i,n,s);if(o)throw new ud(o);return new Sc(e/255*s,i/255*s,n/255*s,s)}function ig(t,e){return t in e}function ng(t,e){const i=e[t];return void 0===i?null:i}function rg(t){return{type:t}}bd.register(tg,{error:[{kind:"error"},[Nc],(t,[e])=>{throw new ud(e.evaluate(t))}],typeof:[Nc,[Bc],(t,[e])=>$c(od(e.evaluate(t)))],"to-rgba":[Uc(Gc,4),[Wc],(t,[e])=>e.evaluate(t).toArray()],rgb:[Wc,[Gc,Gc,Gc],eg],rgba:[Wc,[Gc,Gc,Gc,Gc],eg],has:{type:qc,overloads:[[[Nc],(t,[e])=>ig(e.evaluate(t),t.properties())],[[Nc,Xc],(t,[e,i])=>ig(e.evaluate(t),i.evaluate(t))]]},get:{type:Bc,overloads:[[[Nc],(t,[e])=>ng(e.evaluate(t),t.properties())],[[Nc,Xc],(t,[e,i])=>ng(e.evaluate(t),i.evaluate(t))]]},"feature-state":[Bc,[Nc],(t,[e])=>ng(e.evaluate(t),t.featureState||{})],properties:[Xc,[],t=>t.properties()],"geometry-type":[Nc,[],t=>t.geometryType()],id:[Bc,[],t=>t.id()],zoom:[Gc,[],t=>t.globals.zoom],pitch:[Gc,[],t=>t.globals.pitch||0],"distance-from-center":[Gc,[],t=>t.distanceFromCenter()],"heatmap-density":[Gc,[],t=>t.globals.heatmapDensity||0],"line-progress":[Gc,[],t=>t.globals.lineProgress||0],"sky-radial-progress":[Gc,[],t=>t.globals.skyRadialProgress||0],accumulated:[Bc,[],t=>void 0===t.globals.accumulated?null:t.globals.accumulated],"+":[Gc,rg(Gc),(t,e)=>{let i=0;for(const n of e)i+=n.evaluate(t);return i}],"*":[Gc,rg(Gc),(t,e)=>{let i=1;for(const n of e)i*=n.evaluate(t);return i}],"-":{type:Gc,overloads:[[[Gc,Gc],(t,[e,i])=>e.evaluate(t)-i.evaluate(t)],[[Gc],(t,[e])=>-e.evaluate(t)]]},"/":[Gc,[Gc,Gc],(t,[e,i])=>e.evaluate(t)/i.evaluate(t)],"%":[Gc,[Gc,Gc],(t,[e,i])=>e.evaluate(t)%i.evaluate(t)],ln2:[Gc,[],()=>Math.LN2],pi:[Gc,[],()=>Math.PI],e:[Gc,[],()=>Math.E],"^":[Gc,[Gc,Gc],(t,[e,i])=>Math.pow(e.evaluate(t),i.evaluate(t))],sqrt:[Gc,[Gc],(t,[e])=>Math.sqrt(e.evaluate(t))],log10:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))/Math.LN10],ln:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))],log2:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))/Math.LN2],sin:[Gc,[Gc],(t,[e])=>Math.sin(e.evaluate(t))],cos:[Gc,[Gc],(t,[e])=>Math.cos(e.evaluate(t))],tan:[Gc,[Gc],(t,[e])=>Math.tan(e.evaluate(t))],asin:[Gc,[Gc],(t,[e])=>Math.asin(e.evaluate(t))],acos:[Gc,[Gc],(t,[e])=>Math.acos(e.evaluate(t))],atan:[Gc,[Gc],(t,[e])=>Math.atan(e.evaluate(t))],min:[Gc,rg(Gc),(t,e)=>Math.min(...e.map((e=>e.evaluate(t))))],max:[Gc,rg(Gc),(t,e)=>Math.max(...e.map((e=>e.evaluate(t))))],abs:[Gc,[Gc],(t,[e])=>Math.abs(e.evaluate(t))],round:[Gc,[Gc],(t,[e])=>{const i=e.evaluate(t);return i<0?-Math.round(-i):Math.round(i)}],floor:[Gc,[Gc],(t,[e])=>Math.floor(e.evaluate(t))],ceil:[Gc,[Gc],(t,[e])=>Math.ceil(e.evaluate(t))],"filter-==":[qc,[Nc,Bc],(t,[e,i])=>t.properties()[e.value]===i.value],"filter-id-==":[qc,[Bc],(t,[e])=>t.id()===e.value],"filter-type-==":[qc,[Nc],(t,[e])=>t.geometryType()===e.value],"filter-<":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n{const i=t.id(),n=e.value;return typeof i==typeof n&&i":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n>r}],"filter-id->":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i>n}],"filter-<=":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n<=r}],"filter-id-<=":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i<=n}],"filter->=":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n>=r}],"filter-id->=":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i>=n}],"filter-has":[qc,[Bc],(t,[e])=>e.value in t.properties()],"filter-has-id":[qc,[],t=>null!==t.id()&&void 0!==t.id()],"filter-type-in":[qc,[Uc(Nc)],(t,[e])=>e.value.indexOf(t.geometryType())>=0],"filter-id-in":[qc,[Uc(Bc)],(t,[e])=>e.value.indexOf(t.id())>=0],"filter-in-small":[qc,[Nc,Uc(Bc)],(t,[e,i])=>i.value.indexOf(t.properties()[e.value])>=0],"filter-in-large":[qc,[Nc,Uc(Bc)],(t,[e,i])=>function(t,e,i,n){for(;i<=n;){const r=i+n>>1;if(e[r]===t)return!0;e[r]>t?n=r-1:i=r+1}return!1}(t.properties()[e.value],i.value,0,i.value.length-1)],all:{type:qc,overloads:[[[qc,qc],(t,[e,i])=>e.evaluate(t)&&i.evaluate(t)],[rg(qc),(t,e)=>{for(const i of e)if(!i.evaluate(t))return!1;return!0}]]},any:{type:qc,overloads:[[[qc,qc],(t,[e,i])=>e.evaluate(t)||i.evaluate(t)],[rg(qc),(t,e)=>{for(const i of e)if(i.evaluate(t))return!0;return!1}]]},"!":[qc,[qc],(t,[e])=>!e.evaluate(t)],"is-supported-script":[qc,[Nc],(t,[e])=>{const i=t.globals&&t.globals.isSupportedScript;return!i||i(e.evaluate(t))}],upcase:[Nc,[Nc],(t,[e])=>e.evaluate(t).toUpperCase()],downcase:[Nc,[Nc],(t,[e])=>e.evaluate(t).toLowerCase()],concat:[Nc,rg(Bc),(t,e)=>e.map((e=>ad(e.evaluate(t)))).join("")],"resolved-locale":[Nc,[Vc],(t,[e])=>e.evaluate(t).resolvedLocale()]});var sg=tg;function og(t){return{result:"success",value:t}}function ag(t){return{result:"error",value:t}}function lg(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}class hg{constructor(t,e){this.expression=t,this._warningHistory={},this._evaluator=new vd,this._defaultValue=e?function(t){return"color"===t.type&&(lg(t.default)||Array.isArray(t.default))?new Sc(0,0,0,0):"color"===t.type?Sc.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null}evaluateWithoutErrorHandling(t,e,i,n,r,s,o,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=i,this._evaluator.canonical=n||null,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=s,this._evaluator.featureTileCoord=o||null,this._evaluator.featureDistanceData=a||null,this.expression.evaluate(this._evaluator)}evaluate(t,e,i,n,r,s,o,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=i||null,this._evaluator.canonical=n||null,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=s||null,this._evaluator.featureTileCoord=o||null,this._evaluator.featureDistanceData=a||null;try{const t=this.expression.evaluate(this._evaluator);if(null==t||"number"==typeof t&&t!=t)return this._defaultValue;if(this._enumValues&&!(t in this._enumValues))throw new ud(`Expected value to be one of ${Object.keys(this._enumValues).map((t=>JSON.stringify(t))).join(", ")}, but found ${JSON.stringify(t)} instead.`);return t}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}}}function ug(t,e){const i=new Kd(sg,[],e?function(t){const e={color:Wc,string:Nc,number:Gc,enum:Nc,boolean:qc,formatted:Yc,resolvedImage:Zc};if("array"===t.type)return Uc(e[t.value]||Bc,t.length);return e[t.type]}(e):void 0),n=i.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?og(new hg(n,e)):ag(i.errors)}class cg{constructor(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!Vd(e.expression)}evaluateWithoutErrorHandling(t,e,i,n,r,s){return this._styleExpression.evaluateWithoutErrorHandling(t,e,i,n,r,s)}evaluate(t,e,i,n,r,s){return this._styleExpression.evaluate(t,e,i,n,r,s)}}class dg{constructor(t,e,i,n){this.kind=t,this.zoomStops=i,this._styleExpression=e,this.isStateDependent="camera"!==t&&!Vd(e.expression),this.interpolationType=n}evaluateWithoutErrorHandling(t,e,i,n,r,s){return this._styleExpression.evaluateWithoutErrorHandling(t,e,i,n,r,s)}evaluate(t,e,i,n,r,s){return this._styleExpression.evaluate(t,e,i,n,r,s)}interpolationFactor(t,e,i){return this.interpolationType?Tp.interpolationFactor(this.interpolationType,t,e,i):0}}function pg(t,e){if("error"===(t=ug(t,e)).result)return t;const i=t.value.expression,n=Bd(i);if(!n&&!function(t){return"data-driven"===t["property-type"]}(e))return ag([new Dc("","data expressions not supported")]);const r=Yd(i,["zoom","pitch","distance-from-center"]);if(!r&&!function(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}(e))return ag([new Dc("","zoom expressions not supported")]);const s=gg(i);if(!s&&!r)return ag([new Dc("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(s instanceof Dc)return ag([s]);if(s instanceof Tp&&!function(t){return!!t.expression&&t.expression.interpolated}(e))return ag([new Dc("",'"interpolate" expressions cannot be used with this property')]);if(!s)return og(new cg(n?"constant":"source",t.value));const o=s instanceof Tp?s.interpolation:void 0;return og(new dg(n?"camera":"composite",t.value,s.labels,o))}function gg(t){let e=null;if(t instanceof kp)e=gg(t.result);else if(t instanceof Ip){for(const i of t.args)if(e=gg(i),e)break}else(t instanceof tp||t instanceof Tp)&&t.input instanceof bd&&"zoom"===t.input.name&&(e=t);return e instanceof Dc||t.eachChild((t=>{const i=gg(t);i instanceof Dc?e=i:!e&&i?e=new Dc("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):e&&i&&e!==i&&(e=new Dc("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),e}function fg(t){if(Array.isArray(t))return t.map(fg);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){const e={};for(const i in t)e[i]=fg(t[i]);return e}return function(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}(t)}var mg={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function yg(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":return t.length>=3&&("string"!=typeof t[1]||Array.isArray(t[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(const e of t.slice(1))if(!yg(e)&&"boolean"!=typeof e)return!1;return!0;default:return!0}}function _g(t,e="fill"){if(null==t)return{filter:()=>!0,needGeometry:!1,needFeature:!1};yg(t)||(t=Eg(t));const i=t;let n=!0;try{n=function(t){if(!wg(t))return t;let e=fg(t);return vg(e),e=xg(e),e}(i)}catch(t){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(i,null,2)}\n `)}const r=mg[`filter_${e}`],s=ug(n,r);let o=null;if("error"===s.result)throw new Error(s.value.map((t=>`${t.key}: ${t.message}`)).join(", "));o=(t,e,i)=>s.value.evaluate(t,e,{},i);let a=null,l=null;if(n!==i){const t=ug(i,r);if("error"===t.result)throw new Error(t.value.map((t=>`${t.key}: ${t.message}`)).join(", "));a=(e,i,n,r,s)=>t.value.evaluate(e,i,{},n,void 0,void 0,r,s),l=!Bd(t.value.expression)}return{filter:o,dynamicFilter:a||void 0,needGeometry:Sg(n),needFeature:!!l}}function xg(t){if(!Array.isArray(t))return t;const e=function(t){if(bg.has(t[0]))for(let e=1;exg(t)))}function vg(t){let e=!1;const i=[];if("case"===t[0]){for(let n=1;n",">=","<","<=","to-boolean"]);function Cg(t,e){return te?1:0}function Sg(t){if(!Array.isArray(t))return!1;if("within"===t[0])return!0;for(let e=1;e"===e||"<="===e||">="===e?Tg(t[1],t[2],e):"any"===e?(i=t.slice(1),["any"].concat(i.map(Eg))):"all"===e?["all"].concat(t.slice(1).map(Eg)):"none"===e?["all"].concat(t.slice(1).map(Eg).map(Mg)):"in"===e?Rg(t[1],t.slice(2)):"!in"===e?Mg(Rg(t[1],t.slice(2))):"has"===e?Ig(t[1]):"!has"===e?Mg(Ig(t[1])):"within"!==e||t}function Tg(t,e,i){switch(t){case"$type":return[`filter-type-${i}`,e];case"$id":return[`filter-id-${i}`,e];default:return[`filter-${i}`,t,e]}}function Rg(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some((t=>typeof t!=typeof e[0]))?["filter-in-large",t,["literal",e.sort(Cg)]]:["filter-in-small",t,["literal",e]]}}function Ig(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Mg(t){return["!",t]}var kg=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function Fg(t,e){const i={};for(const e in t)"ref"!==e&&(i[e]=t[e]);return kg.forEach((t=>{t in e&&(i[t]=e[t])})),i}function Pg(t){t=t.slice();const e=Object.create(null);for(let i=0;i1?h[h.length-2].toLowerCase():"";if(u==c||u==c.replace("-","")||d+"-"+u==c){r=Lg[c],h.pop(),d&&c.startsWith(d)&&h.pop();break}}"number"==typeof u&&(r=u);var p=h.join(Ag).replace("Klokantech Noto Sans","Noto Sans");-1!==p.indexOf(Ag)&&(p='"'+p+'"'),o.push(p)}n=Og[t]=[s,r,o]}return n[0]+Ag+n[1]+Ag+e+"px"+(i?"/"+i:"")+Ag+n[2]}));const jg="https://api.mapbox.com";function Gg(t){const e="mapbox://";return 0!==t.indexOf(e)?"":t.slice(9)}function Ng(t,e){const i=Gg(t);if(!i)return decodeURI(new URL(t,location.href).href);const n="styles/";if(0!==i.indexOf(n))throw new Error(`unexpected style url: ${t}`);const r=i.slice(7);return`${jg}/styles/v1/${r}?&access_token=${e}`}function qg(t,e,i,n){const r=new URL(t,n),s=Gg(t);if(!s)return e?(r.searchParams.has(i)||r.searchParams.set(i,e),decodeURI(r.href)):decodeURI(r.href);if("mapbox.satellite"===s){return`https://api.mapbox.com/v4/${s}/{z}/{x}/{y}${window.devicePixelRatio>=1.5?"@2x":""}.webp?access_token=${e}`}return`https://{a-d}.tiles.mapbox.com/v4/${s}/{z}/{x}/{y}.vector.pbf?access_token=${e}`}const Wg={},Xg={};let Bg=0;function Vg(t){return t.id||(t.id=Bg++),t.id}function Yg(t){let e=Wg[t.id];return e||(e={},Wg[Vg(t)]=e),e}function Zg(t){return t*Math.PI/180}const Ug=function(){const t=[];for(let e=78271.51696402048;t.length<=24;e/=2)t.push(e);return t}(),$g=new $a({extent:di("EPSG:3857").getExtent(),resolutions:Ug});function Kg(t,e){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(t,e);const i=document.createElement("canvas");return i.width=t,i.height=e,i}function Hg(t,e){let i=0;const n=e.length;for(;ir)).then((t=>(t instanceof Request||(t=new Request(t)),t.headers.get("Accept")||t.headers.set("Accept","application/json"),n&&(n.request=t),fetch(t).then((function(t){return delete Jg[e],t.ok?t.json():Promise.reject(new Error("Error fetching source "+e))})).catch((function(t){return delete Jg[e],Promise.reject(new Error("Error fetching source "+e))})))));return Jg[e]=[r,s],s}function tf(t,e){if("string"!=typeof t)return Promise.resolve(t);if(!t.trim().startsWith("{"))return Qg("Style",t=Ng(t,e.accessToken),e);try{const e=JSON.parse(t);return Promise.resolve(e)}catch(t){return Promise.reject(t)}}const ef={};function nf(t,e,i={}){const n=[e,JSON.stringify(t)].toString();let r=ef[n];if(!r||i.transformRequest){let s;i.transformRequest&&(s=(t,e)=>{const n=i.transformRequest&&i.transformRequest(e,"Tiles")||e;if(t instanceof Rh)t.setLoader(((e,i,r)=>{d((()=>n)).then((i=>{fetch(i).then((t=>t.arrayBuffer())).then((i=>{const n=t.getFormat().readFeatures(i,{extent:e,featureProjection:r});t.setFeatures(n)})).catch((e=>t.setState(jo.ERROR)))}))}));else{const e=t.getImage();d((()=>n)).then((i=>{i instanceof Request?fetch(i).then((t=>t.blob())).then((t=>{const i=URL.createObjectURL(t);e.addEventListener("load",(()=>URL.revokeObjectURL(i))),e.addEventListener("error",(()=>URL.revokeObjectURL(i))),e.src=i})).catch((e=>t.setState(jo.ERROR))):e.src=i}))}});const o=t.url;if(o&&!t.tiles){const n=qg(o,i.accessToken,i.accessTokenParam||"access_token",e||location.href);if(o.startsWith("mapbox://"))r=Promise.resolve({tileJson:Object.assign({},t,{url:void 0,tiles:kh(n)}),tileLoadFunction:s});else{const t={};r=Qg("Source",n,i,t).then((function(e){return e.tiles=e.tiles.map((function(n){return"tms"===e.scheme&&(n=n.replace("{y}","{-y}")),qg(n,i.accessToken,i.accessTokenParam||"access_token",t.request.url)})),Promise.resolve({tileJson:e,tileLoadFunction:s})}))}}else t=Object.assign({},t,{tiles:t.tiles.map((function(n){return"tms"===t.scheme&&(n=n.replace("{y}","{-y}")),qg(n,i.accessToken,i.accessTokenParam||"access_token",e||location.href)}))}),r=Promise.resolve({tileJson:Object.assign({},t),tileLoadFunction:s});ef[n]=r}return r}function rf(t,e,i,n){const r=document.createElement("canvas"),s=[2*i*e.pixelRatio+e.width,2*i*e.pixelRatio+e.height];r.width=s[0],r.height=s[1];const o=r.getContext("2d");o.drawImage(t,e.x,e.y,e.width,e.height,i*e.pixelRatio,i*e.pixelRatio,e.width,e.height);const a=o.getImageData(0,0,s[0],s[1]);o.globalCompositeOperation="destination-over",o.fillStyle=`rgba(${255*n.r},${255*n.g},${255*n.b},${n.a})`;const l=a.data;for(let t=0,n=a.width;t0&&o.arc(t,r,i*e.pixelRatio,0,2*Math.PI)}return o.fill(),r}function sf(t,e,i){const n=Math.max(0,Math.min(1,(i-t)/(e-t)));return n*n*(3-2*n)}function of(t,e,i){const n=document.createElement("canvas");n.width=e.width,n.height=e.height;const r=n.getContext("2d");r.drawImage(t,e.x,e.y,e.width,e.height,0,0,e.width,e.height);const s=r.getImageData(0,0,e.width,e.height),o=s.data;for(let t=0,e=s.width;t0?(o[r+0]=Math.round(255*i.r*l),o[r+1]=Math.round(255*i.g*l),o[r+2]=Math.round(255*i.b*l),o[r+3]=Math.round(255*l)):o[r+3]=0}return r.putImageData(s,0,0),n}const af=Array(256).join(" ");function lf(t,e){if(e>=.05){let i="";const n=t.split("\n"),r=af.slice(0,Math.round(e/.1));for(let t=0,e=n.length;t0&&(i+="\n"),i+=n[t].split("").join(r);return i}return t}let hf;function uf(){return hf||(hf=Kg(1,1).getContext("2d")),hf}function cf(t,e){return uf().measureText(t).width+(t.length-1)*e}const df={};function pf(t,e,i,n){if(-1!==t.indexOf("\n")){const r=t.split("\n"),s=[];for(let t=0,o=r.length;t1){const t=uf();t.font=e;const r=t.measureText("M").width*i;let a="";const l=[];for(let t=0,e=o.length;t1;++t){const i=l[t];if(cf(i,n)<.35*r){const r=t>0?cf(l[t-1],n):1/0,s=t.7*r&&cf(s,n)<.6*r){const o=i.split(" "),a=o.pop();cf(a,n)<.2*r&&(l[t]=o.join(" "),l[t+1]=a+" "+s),e-=1}}s=l.join("\n")}else s=t;s=lf(s,n),df[r]=s}return s}const gf=/font-family: ?([^;]*);/,ff=/("|')/g;let mf;function yf(t){if(!mf){mf={};const t=document.styleSheets;for(let e=0,i=t.length;e`${t.key}: ${t.message}`)).join(", "));return i.value},Cf={},Sf={zoom:0};let Ef,Tf;function Rf(t,e,i,n,r,s,o){const a=t.id;s||(s={},console.warn("No functionCache provided to getValue()")),s[a]||(s[a]={});const l=s[a];if(!l[i]){let n=(t[e]||Cf)[i];const r=mg[`${e}_${t.type}`][i];void 0===n&&(n=r.default);let s=(h=n,Array.isArray(h)&&h.length>0&&"string"==typeof h[0]&&h[0]in sg);if(!s&&lg(n)&&(n=Tc(n,r),s=!0),s){const t=bf(n,r);l[i]=t.evaluate.bind(t)}else"color"==r.type&&(n=Sc.parse(n)),l[i]=function(){return n}}var h;return Sf.zoom=n,l[i](Sf,r,o)}function If(t,e,i,n,r){if(!Rf(t,"layout",`${n}-allow-overlap`,e,i,r))return"declutter";return Rf(t,"layout",`${n}-ignore-placement`,e,i,r)?"none":"obstacle"}function Mf(t,e,i,n,r){return r||console.warn("No filterCache provided to evaluateFilter()"),t in r||(r[t]=_g(e).filter),Sf.zoom=n,r[t](Sf,i)}function kf(t,e){if(t){if(0===t.a||0===e)return;const i=t.a;return e=void 0===e?1:e,0===i?"transparent":"rgba("+Math.round(255*t.r/i)+","+Math.round(255*t.g/i)+","+Math.round(255*t.b/i)+","+i*e+")"}return t}const Ff=/\{[^{}}]*\}/g;function Pf(t,e){return t.replace(Ff,(function(t){return e[t.slice(1,-1)]||""}))}const Lf={};function Af(t,e,i,n=Ug,r=void 0,s=void 0,o=void 0,a=void 0){if("string"==typeof e&&(e=JSON.parse(e)),8!=e.version)throw new Error("glStyle version 8 required.");let l,h,u;if(Lf[function(t,e){return Vg(t)+"."+P(e)}(e,t)]=Array.from(arguments),s)if("undefined"!=typeof Image){const e=new Image;let i;d((()=>s)).then((t=>{t instanceof Request?fetch(t).then((t=>t.blob())).then((t=>{i=URL.createObjectURL(t),e.src=i})).catch((()=>{})):(e.crossOrigin="anonymous",e.src=t,i&&URL.revokeObjectURL(i))})),e.onload=function(){l=e,h=[e.width,e.height],t.changed(),e.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const t=self;t.postMessage({action:"loadImage",src:s}),t.addEventListener("message",(function(t){"imageLoaded"===t.data.action&&t.data.src===s&&(l=t.data.image,h=[l.width,l.height])}))}const c=Pg(e.layers),p={},g=[],f={},m={},y=Yg(e),_=function(t){let e=Xg[t.id];return e||(e={},Xg[Vg(t)]=e),e}(e);let x;for(let t=0,n=c.length;t=R.maxzoom)continue;const F=R.filter;if(!F||Mf(I,F,S,x,_)){let n,c,g,_,I,F;const P=p.index;if(3==C&&("fill"==R.type||"fill-extrusion"==R.type))if(c=Rf(R,"paint",R.type+"-opacity",x,S,y,E),R.type+"-pattern"in k){const t=Rf(R,"paint",R.type+"-pattern",x,S,y,E);if(t){const e="string"==typeof t?Pf(t,d):t.toString();if(l&&r&&r[e]){++T,F=b[T],F&&F.getFill()&&!F.getStroke()&&!F.getText()||(F=new ys({fill:new cs}),b[T]=F),g=F.getFill(),F.setZIndex(P);const t=e+"."+c;let i=m[t];if(!i){const n=r[e],s=Kg(n.width,n.height),o=s.getContext("2d");o.globalAlpha=c,o.drawImage(l,n.x,n.y,n.width,n.height,0,0,n.width,n.height),i=o.createPattern(s,"repeat"),m[t]=i}g.setColor(i)}}}else n=kf(Rf(R,"paint",R.type+"-color",x,S,y,E),c),R.type+"-outline-color"in k&&(I=kf(Rf(R,"paint",R.type+"-outline-color",x,S,y,E),c)),I||(I=n),(n||I)&&(++T,F=b[T],(!F||n&&!F.getFill()||!n&&F.getFill()||I&&!F.getStroke()||!I&&F.getStroke()||F.getText())&&(F=new ys({fill:n?new cs:void 0,stroke:I?new ds:void 0}),b[T]=F),n&&(g=F.getFill(),g.setColor(n)),I&&(_=F.getStroke(),_.setColor(I),_.setWidth(.5)),F.setZIndex(P));if(1!=C&&"line"==R.type){n="line-pattern"in k?void 0:kf(Rf(R,"paint","line-color",x,S,y,E),Rf(R,"paint","line-opacity",x,S,y,E));const t=Rf(R,"paint","line-width",x,S,y,E);n&&t>0&&(++T,F=b[T],F&&F.getStroke()&&!F.getFill()&&!F.getText()||(F=new ys({stroke:new ds}),b[T]=F),_=F.getStroke(),_.setLineCap(Rf(R,"layout","line-cap",x,S,y,E)),_.setLineJoin(Rf(R,"layout","line-join",x,S,y,E)),_.setMiterLimit(Rf(R,"layout","line-miter-limit",x,S,y,E)),_.setColor(n),_.setWidth(t),_.setLineDash(k["line-dasharray"]?Rf(R,"paint","line-dasharray",x,S,y,E).map((function(e){return e*t})):null),F.setZIndex(P))}let L,A,D,O,z,j,G,N,q,W=!1,X=null,B=0;if((1==C||2==C)&&"icon-image"in M){const e=Rf(R,"layout","icon-image",x,S,y,E);if(e){let n;L="string"==typeof e?Pf(e,d):e.toString();const o=a?a(t,L):void 0;if(l&&r&&r[L]||o){const t=Rf(R,"layout","icon-rotation-alignment",x,S,y,E);if(2==C){const e=i.getGeometry();if(e.getFlatMidpoint||e.getFlatMidpoints){const i=e.getExtent();if(Math.sqrt(Math.max(Math.pow((i[2]-i[0])/s,2),Math.pow((i[3]-i[1])/s,2)))>150){const i="MultiLineString"===e.getType()?e.getFlatMidpoints():e.getFlatMidpoint();Tf||(Ef=[NaN,NaN],Tf=new qa("Point",Ef,[],2,{},void 0)),n=Tf,Ef[0]=i[0],Ef[1]=i[1];if("line"===Rf(R,"layout","symbol-placement",x,S,y,E)&&"map"===t){const t=e.getStride(),n=e.getFlatCoordinates();for(let e=0,r=n.length-t;e=l&&i[0]<=u&&i[1]>=h&&i[1]<=c){B=Math.atan2(s-a,o-r);break}}}}}}if(2!==C||n){const e=Rf(R,"layout","icon-size",x,S,y,E),i=void 0!==k["icon-color"]?Rf(R,"paint","icon-color",x,S,y,E):null;if(!i||0!==i.a){const n=Rf(R,"paint","icon-halo-color",x,S,y,E),s=Rf(R,"paint","icon-halo-width",x,S,y,E);let a=`${L}.${e}.${s}.${n}`;if(null!==i&&(a+=`.${i}`),A=f[a],!A){const c=If(R,x,S,"icon",y);let d;"icon-offset"in M&&(d=Rf(R,"layout","icon-offset",x,S,y,E).slice(0),d[0]*=e,d[1]*=-e);let p=i?[255*i.r,255*i.g,255*i.b,i.a]:void 0;if(o){const i={color:p,rotateWithView:"map"===t,displacement:d,declutterMode:c,scale:e};"string"==typeof o?i.src=o:(i.img=o,i.imgSize=[o.width,o.height]),A=new xs(i)}else{const o=r[L];let a,g,f;s?o.sdf?(a=rf(of(l,o,i||[0,0,0,1]),{x:0,y:0,width:o.width,height:o.height,pixelRatio:o.pixelRatio},s,n),p=void 0):a=rf(l,o,s,n):(o.sdf?(u||(u=of(l,{x:0,y:0,width:h[0],height:h[1]},{r:1,g:1,b:1,a:1})),a=u):a=l,g=[o.width,o.height],f=[o.x,o.y]),A=new xs({color:p,img:a,imgSize:h,size:g,offset:f,rotateWithView:"map"===t,scale:e/o.pixelRatio,displacement:d,declutterMode:c})}f[a]=A}}A&&(++T,F=b[T],F&&F.getImage()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F),F.setGeometry(n),A.setRotation(B+Zg(Rf(R,"layout","icon-rotate",x,S,y,E))),A.setOpacity(Rf(R,"paint","icon-opacity",x,S,y,E)),A.setAnchor(wf[Rf(R,"layout","icon-anchor",x,S,y,E)]),F.setImage(A),X=F.getText(),F.setText(void 0),F.setZIndex(P),W=!0,D=!1)}else D=!0}}}if(1==C&&"circle"===R.type){++T,F=b[T],F&&F.getImage()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F);const t="circle-radius"in k?Rf(R,"paint","circle-radius",x,S,y,E):5,e=kf(Rf(R,"paint","circle-stroke-color",x,S,y,E),Rf(R,"paint","circle-stroke-opacity",x,S,y,E)),i=Rf(R,"paint","circle-translate",x,S,y,E),n=kf(Rf(R,"paint","circle-color",x,S,y,E),Rf(R,"paint","circle-opacity",x,S,y,E)),r=Rf(R,"paint","circle-stroke-width",x,S,y,E),s=t+"."+e+"."+n+"."+r+"."+i[0]+"."+i[1];A=f[s],A||(A=new us({radius:t,displacement:[i[0],-i[1]],stroke:e&&r>0?new ds({width:r,color:e}):void 0,fill:n?new cs({color:n}):void 0,declutterMode:"none"}),f[s]=A),F.setImage(A),X=F.getText(),F.setText(void 0),F.setGeometry(void 0),F.setZIndex(P),W=!0}if("text-field"in M){G=Math.round(Rf(R,"layout","text-size",x,S,y,E));const t=Rf(R,"layout","text-font",x,S,y,E);j=Rf(R,"layout","text-line-height",x,S,y,E),z=zg(o?o(t,e.metadata?e.metadata["ol:webfonts"]:void 0):t,G,j),z.includes("sans-serif")||(z+=",sans-serif"),N=Rf(R,"layout","text-letter-spacing",x,S,y,E),q=Rf(R,"layout","text-max-width",x,S,y,E);const i=Rf(R,"layout","text-field",x,S,y,E);O="object"==typeof i&&i.sections?1===i.sections.length?i.toString():i.sections.reduce(((e,i,n)=>{const r=i.fontStack?i.fontStack.split(","):t,s=zg(o?o(r):r,G*(i.scale||1),j);let a=i.text;if("\n"===a)return e.push("\n",""),e;if(2!=C){a=pf(a,s,q,N).split("\n");for(let t=0,i=a.length;t0&&e.push("\n",""),e.push(a[t],s);return e}e.push(lf(a,N),s)}),[]):Pf(i,d).trim(),c=Rf(R,"paint","text-opacity",x,S,y,E)}if(O&&c&&!D){W||(++T,F=b[T],F&&F.getText()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F),F.setImage(void 0),F.setGeometry(void 0));const t=If(R,x,S,"text",y);F.getText()||F.setText(X),X=F.getText(),(!X||"getDeclutterMode"in X&&X.getDeclutterMode()!==t)&&(X=new vs({padding:[2,2,2,2],declutterMode:t}),F.setText(X));const e=Rf(R,"layout","text-transform",x,S,y,E);"uppercase"==e?O=Array.isArray(O)?O.map(((t,e)=>e%2?t:t.toUpperCase())):O.toUpperCase():"lowercase"==e&&(O=Array.isArray(O)?O.map(((t,e)=>e%2?t:t.toLowerCase())):O.toLowerCase());const i=Array.isArray(O)?O:2==C?lf(O,N):pf(O,z,q,N);X.setText(i),X.setFont(z),X.setRotation(Zg(Rf(R,"layout","text-rotate",x,S,y,E)));const n=Rf(R,"layout","text-anchor",x,S,y,E),r=W||1==C?"point":Rf(R,"layout","symbol-placement",x,S,y,E);let s;if("line-center"===r?(X.setPlacement("line"),s="center"):X.setPlacement(r),"line"===r&&"function"==typeof X.setRepeat){const t=Rf(R,"layout","symbol-spacing",x,S,y,E);X.setRepeat(2*t)}X.setOverflow("point"===r);let o=Rf(R,"paint","text-halo-width",x,S,y,E);const a=Rf(R,"layout","text-offset",x,S,y,E),l=Rf(R,"paint","text-translate",x,S,y,E);let h=0,u=0;if("point"==r){s="center",-1!==n.indexOf("left")?(s="left",u=o):-1!==n.indexOf("right")&&(s="right",u=-o);const t=Rf(R,"layout","text-rotation-alignment",x,S,y,E);X.setRotateWithView("map"==t)}else X.setMaxAngle(Zg(Rf(R,"layout","text-max-angle",x,S,y,E))*O.length/i.length),X.setRotateWithView(!1);X.setTextAlign(s);let d="middle";0==n.indexOf("bottom")?(d="bottom",h=-o-.5*(j-1)*G):0==n.indexOf("top")&&(d="top",h=o+.5*(j-1)*G),X.setTextBaseline(d);const p=Rf(R,"layout","text-justify",x,S,y,E);X.setJustify("auto"===p?void 0:p),X.setOffsetX(a[0]*G+u+l[0]),X.setOffsetY(a[1]*G+h+l[1]),w.setColor(kf(Rf(R,"paint","text-color",x,S,y,E),c)),X.setFill(w);const g=kf(Rf(R,"paint","text-halo-color",x,S,y,E),c);if(g&&o>0){v.setColor(g),o*=2;const t=.5*G;v.setWidth(o<=t?o:t),X.setStroke(v)}else X.setStroke(void 0);const f=Rf(R,"layout","text-padding",x,S,y,E),m=X.getPadding();f!==m[0]&&(m[0]=f,m[1]=f,m[2]=f,m[3]=f),F.setZIndex(P)}}}return T>-1?(b.length=T+1,b):void 0};return t.setStyle(C),t.set("mapbox-source",x),t.set("mapbox-layers",g),t.set("mapbox-featurestate",t.get("mapbox-featurestate")||{}),C}function Df(t,e){const i=t[0],n=i.width,r=i.height,s=i.data,o=new Uint8ClampedArray(s.length),a=2*e.resolution,l=n-1,h=r-1,u=[0,0,0,0],c=2*Math.PI,d=Math.PI/2,p=Math.PI*e.sunEl/180,g=Math.PI*e.sunAz/180,f=Math.cos(p),m=Math.sin(p),y=e.highlightColor,_=e.shadowColor,x=e.accentColor,v=e.encoding;let w,b,C,S,E,T,R,I,M,k,F,P,L,A,D,O,z,j,G,N,q,W;function X(t,e="mapbox"){return"mapbox"===e?.1*(256*t[0]*256+256*t[1]+t[2])-1e4:"terrarium"===e?256*t[0]+t[1]+t[2]/256-32768:void 0}for(b=0;b<=h;++b)for(E=0===b?0:b-1,T=b===h?h:b+1,w=0;w<=l;++w)C=0===w?0:w-1,S=w===l?l:w+1,R=4*(b*n+C),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],I=e.vert*X(u,v),R=4*(b*n+S),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],M=e.vert*X(u,v),k=(M-I)/a,R=4*(E*n+w),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],I=e.vert*X(u,v),R=4*(T*n+w),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],M=e.vert*X(u,v),F=(M-I)/a,L=Math.atan2(F,-k),L=L<0?d-L:L>d?c-L+d:d-L,P=Math.atan(Math.sqrt(k*k+F*F)),W=m*Math.cos(P)+f*Math.sin(P)*Math.cos(g-L),A=Math.cos(P),D=255*W,G=Math.min(Math.max(2*e.sunEl,0),1),N=1.875-1.75*e.opacity,q=.5!==e.opacity?d*((Math.pow(N,P)-1)/(Math.pow(N,d)-1)):P,z={r:(1-A)*x.r*G*255,g:(1-A)*x.g*G*255,b:(1-A)*x.b*G*255,a:(1-A)*x.a*G*255},O=Math.abs(((L+g)/Math.PI+.5)%2-1),j={r:(y.r*(1-O)+_.r*O)*D,g:(y.g*(1-O)+_.g*O)*D,b:(y.b*(1-O)+_.b*O)*D,a:(y.a*(1-O)+_.a*O)*D},R=4*(b*n+w),o[R]=z.r*(1-O)+j.r,o[R+1]=z.g*(1-O)+j.g,o[R+2]=z.b*(1-O)+j.b,o[R+3]=s[R+3]*e.opacity*G*Math.sin(q);return new ImageData(o,n,r)}function Of(t,e=512){return t.getExtent()?Gu({extent:t.getExtent(),tileSize:e,maxZoom:22}).getResolutions():Ug}function zf(t,e){if(!e.accessToken){e=Object.assign({},e);new URL(t).searchParams.forEach(((t,i)=>{e.accessToken=t,e.accessTokenParam=i}))}return e}function jf(t,e,i="",n={},r=void 0){let s,o,a,l,h=!0;return"string"==typeof i||Array.isArray(i)?l=i:(a=i,l=a.source||a.layers,n=a),"string"==typeof n?(s=n,a={}):(s=n.styleUrl,a=n),!1===a.updateSource&&(h=!1),r||(r=a.resolutions),s||"string"!=typeof e||e.trim().startsWith("{")||(s=e),s&&(s=s.startsWith("data:")?location.href:Ng(s,a.accessToken),a=zf(s,a)),new Promise((function(i,n){tf(e,a).then((function(e){if(8!=e.version)return n(new Error("glStyle version 8 required."));if(!(t instanceof ih||t instanceof dc))return n(new Error("Can only apply to VectorLayer or VectorTileLayer"));const u=t instanceof dc?"vector":"geojson";if(l?o=Array.isArray(l)?e.layers.find((function(t){return t.id===l[0]})).source:l:(o=Object.keys(e.sources).find((function(t){return e.sources[t].type===u})),l=o),!o)return n(new Error(`No ${u} source found in the glStyle.`));function c(){if(!h)return Promise.resolve();if(t instanceof dc)return Xf(e.sources[o],s,a).then((function(e){const i=t.getSource();if(i?e!==i&&(i.setTileUrlFunction(e.getTileUrlFunction()),"function"==typeof i.setUrls&&"function"==typeof e.getUrls&&i.setUrls(e.getUrls()),i.format_||(i.format_=e.format_),i.getAttributions()||i.setAttributions(e.getAttributions()),i.getTileLoadFunction()===gc&&i.setTileLoadFunction(e.getTileLoadFunction()),yi(i.getProjection(),e.getProjection())&&(i.tileGrid=e.getTileGrid())):t.setSource(e),!isFinite(t.getMaxResolution())&&!isFinite(t.getMinZoom())){const e=t.getSource().getTileGrid();t.setMaxResolution(e.getResolution(e.getMinZoom()))}}));const i=e.sources[o];let n=t.getSource();n&&n.get("mapbox-source")===i||(n=Yf(i,s,a));const r=t.getSource();return r?n!==r&&(r.getAttributions()||r.setAttributions(n.getAttributions()),r.format_||(r.format_=n.getFormat()),r.url_=n.getUrl()):t.setSource(n),Promise.resolve()}let d,p,g,f;function m(){if(f||e.sprite&&!p)f?(t.setStyle(f),c().then(i).catch(n)):n(new Error("Something went wrong trying to apply style."));else{if(a.projection&&!r){const t=di(a.projection).getUnits();"m"!==t&&(r=Ug.map((e=>e/ee[t])))}f=Af(t,e,l,r,p,g,xf,a.getImage),t.getStyle()?c().then(i).catch(n):n(new Error(`Nothing to show for source [${o}]`))}}if(e.sprite){const t=new URL(function(t,e,i){const n=Gg(t);if(!n)return decodeURI(new URL(t,i).href);const r="sprites/";if(0!==n.indexOf(r))throw new Error(`unexpected sprites url: ${t}`);const s=n.slice(8);return`${jg}/styles/v1/${s}/sprite?access_token=${e}`}(e.sprite,a.accessToken,s||location.href));d=window.devicePixelRatio>=1.5?.5:1;const i=.5==d?"@2x":"";let r=t.origin+t.pathname+i+".json"+t.search;new Promise((function(e,i){Qg("Sprite",r,a).then(e).catch((function(n){r=t.origin+t.pathname+".json"+t.search,Qg("Sprite",r,a).then(e).catch(i)}))})).then((function(e){if(void 0===e&&n(new Error("No sprites found.")),p=e,g=t.origin+t.pathname+i+".png"+t.search,a.transformRequest){const t=a.transformRequest(g,"SpriteImage")||g;(t instanceof Request||t instanceof Promise)&&(g=t)}m()})).catch((function(t){n(new Error(`Sprites cannot be loaded: ${r}: ${t.message}`))}))}else m()})).catch(n)}))}const Gf={};function Nf(t,e){let i;return t.some((function(t){if(t.id==e)return i=t.source,!0})),i}function qf(t,e,i){const n=new lc({tileJSON:e,tileSize:t.tileSize||e.tileSize||512}),r=n.getTileJSON(),s=n.getTileGrid(),o=di(i.projection||"EPSG:3857"),a=function(t,e){const i=t.bounds;if(i){const t=mi([i[0],i[1]],e),n=mi([i[2],i[3]],e);return[t[0],t[1],n[0],n[1]]}return di(e).getExtent()}(r,o),l=o.getExtent(),h=r.minzoom||0,u=r.maxzoom||22,c={attributions:n.getAttributions(),projection:o,tileGrid:new $a({origin:l?Ue(l):s.getOrigin(0),extent:a||s.getExtent(),minZoom:h,resolutions:Of(o,e.tileSize).slice(0,u+1),tileSize:s.getTileSize(0)})};return Array.isArray(r.tiles)?c.urls=r.tiles:c.url=r.tiles,c}function Wf(t,e,i){const n=document.createElement("div");return n.className="ol-mapbox-style-background",n.style.position="absolute",n.style.width="100%",n.style.height="100%",new Zn({source:new rh({}),render(r){const s=function(t,e,i,n){const r={id:t.id,type:t.type},s=t.layout||{},o=t.paint||{};r.paint=o;const a=Hg(e,i.resolutions||Ug);let l;const h=Rf(r,"paint","background-color",a,Gf,n);return void 0!==o["background-opacity"]&&(l=Rf(r,"paint","background-opacity",a,Gf,n)),"none"==s.visibility?void 0:kf(h,l)}(t,r.viewState.resolution,e,i);return n.style.backgroundColor=s,n}})}function Xf(t,e,i){return new Promise((function(n,r){nf(t,e,i).then((function({tileJson:e,tileLoadFunction:r}){const s=qf(t,e,i);s.tileLoadFunction=r,s.format=new pu,n(new pc(s))})).catch(r)}))}function Bf(t){return`{bbox-${(t?t.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function Vf(t,e,i){const n=new zu;return function(t,e,i){return new Promise((function(n,r){nf(t,e,i).then((function({tileJson:e,tileLoadFunction:r}){const s=new lc({interpolate:void 0===i.interpolate||i.interpolate,transition:0,crossOrigin:"anonymous",tileJSON:e});s.tileGrid=qf(t,e,i).tileGrid,i.projection&&(s.projection=di(i.projection));const o=s.getTileUrlFunction();r&&s.setTileLoadFunction(r),s.setTileUrlFunction((function(t,e,i){const n=Bf(i);let r=o(t,e,i);if(-1!=r.indexOf(n)){const e=s.getTileGrid().getTileCoordExtent(t);r=r.replace(n,e.toString())}return r})),s.set("mapbox-source",t),n(s)})).catch((function(t){r(t)}))}))}(t,e,i).then((function(t){n.setSource(t)})).catch((function(){n.setSource(void 0)})),n}function Yf(t,e,i){const n=i.projection?new Nh({dataProjection:i.projection}):new Nh,r=t.data,s={};if("string"==typeof r){const s=qg(r,i.accessToken,i.accessTokenParam||"access_token",e||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(s)){const e=(t,e,i)=>{const n=Bf(i);return s.replace(n,`${t.join(",")}`)},r=new xh({attributions:t.attribution,format:n,loader:(t,n,s,o,a)=>{Qg("GeoJSON","function"==typeof e?e(t,n,s):e,i).then((t=>{const e=r.getFormat().readFeatures(t,{featureProjection:s});r.addFeatures(e),o(e)})).catch((e=>{r.removeLoadedExtent(t),a()}))},strategy:gh});return r.set("mapbox-source",t),r}const o=new xh({attributions:t.attribution,format:n,url:s,loader:(t,e,n,r,a)=>{Qg("GeoJSON",s,i).then((t=>{const e=o.getFormat().readFeatures(t,{featureProjection:n});o.addFeatures(e),r(e)})).catch((e=>{o.removeLoadedExtent(t),a()}))}});return o}s.features=n.readFeatures(r,{featureProjection:"EPSG:3857"});const o=new xh(Object.assign({attributions:t.attribution,format:n},s));return o.set("mapbox-source",t),o}function Zf(t,e,i){let n=null;return function(r){t.paint&&"raster-opacity"in t.paint&&r.frameState.viewState.zoom!==n&&(n=r.frameState.viewState.zoom,delete i[t.id],function(t,e,i,n){const r=Rf(t,"paint","raster-opacity",i,Gf,n);e.setOpacity(r)}(t,e,n,i))}}function Uf(t,e,i,n){const r=Yg(t),s=t.layers,o=i.type,a=i.source||Nf(s,i.ref),l=t.sources[a];let h;if("background"==o)h=Wf(i,n,r);else if("vector"==l.type)h=function(t,e,i){const n=new dc({declutter:!0,visible:!1});return Xf(t,e,i).then((function(e){e.set("mapbox-source",t),n.setSource(e)})).catch((function(t){n.setSource(void 0)})),n}(l,e,n);else if("raster"==l.type)h=Vf(l,e,n),h.setVisible(!i.layout||"none"!==i.layout.visibility),h.on("prerender",Zf(i,h,r));else if("geojson"==l.type)h=function(t,e,i){return new ih({declutter:!0,source:Yf(t,e,i),visible:!1})}(l,e,n);else if("raster-dem"==l.type&&"hillshade"==i.type){const t=function(t,e,i){const n=Vf(t,e,i);return new Xh({source:new Ju({operationType:"image",operation:Df,sources:[n]})})}(l,e,n);h=t,t.getSource().on("beforeoperations",(function(t){const e=t.data;e.resolution=t.resolution;const s=Hg(t.resolution,n.resolutions||Ug);e.encoding=l.encoding,e.vert=5*Rf(i,"paint","hillshade-exaggeration",s,Gf,r),e.sunAz=Rf(i,"paint","hillshade-illumination-direction",s,Gf,r),e.sunEl=35,e.opacity=.3,e.highlightColor=Rf(i,"paint","hillshade-highlight-color",s,Gf,r),e.shadowColor=Rf(i,"paint","hillshade-shadow-color",s,Gf,r),e.accentColor=Rf(i,"paint","hillshade-accent-color",s,Gf,r)})),h.setVisible(!i.layout||"none"!==i.layout.visibility)}const u=a;return h&&h.set("mapbox-source",u),h}function $f(t,e,i,n){const r=[];let s=null;if(e instanceof Ra){if(s=e.getView(),!s.isDef()&&!s.getRotation()&&!s.getResolutions()){const t=n.projection?di(n.projection):s.getProjection();s=new Wn(Object.assign(s.getProperties(),{maxResolution:Ug[0]/ee[t.getUnits()],projection:n.projection||s.getProjection()})),e.setView(s)}"center"in t&&!s.getCenter()&&s.setCenter(mi(t.center,s.getProjection())),"zoom"in t&&void 0===s.getZoom()&&s.setResolution(Ug[0]/ee[s.getProjection().getUnits()]/Math.pow(2,t.zoom)),s.getCenter()&&void 0!==s.getZoom()||s.fit(s.getProjection().getExtent(),{nearest:!0,size:e.getSize()})}e.set("mapbox-style",t),e.set("mapbox-metadata",{styleUrl:i,options:n});const o=t.layers;let a,l,h,u=[];for(let s=0,c=o.length;s0||i>0)&&t.setMaxResolution(Math.min($g.getResolution(o),e.getResolution(i))+1e-9),a<24&&t.setMinResolution($g.getResolution(a)+1e-9)}}else o>0&&t.setMaxResolution($g.getResolution(o)+1e-9);u instanceof xh||u instanceof pc?jf(t,i,e,Object.assign({styleUrl:n},s)).then((function(){!function(t,e){function i(){const i=e.get("mapbox-style");if(!i)return;const n=Pg(i.layers),r=t.get("mapbox-layers"),s=n.filter((function(t){return r.includes(t.id)})).some((function(t){return!t.layout||!t.layout.visibility||"visible"===t.layout.visibility}));t.get("visible")!==s&&t.setVisible(s)}t.on("change",i),i()}(t,r),l()})).catch(h):l()}else h(new Error("Error accessing data for source "+t.get("mapbox-source")))};t.set("mapbox-layers",e);const c=r.getLayers();-1===c.getArray().indexOf(t)&&c.push(t),t.getSource()?u():t.once("change:source",u)}))}const Hf=[{center:[0,405e4],zoom:2},{center:[-10026264.955714773,3498225.377934253],zoom:12.3},{center:[-8120333.846364162,-5972314.327727663],zoom:10.15},{center:[12700564.586161729,2575397.3413926377],zoom:13.8},{center:[8976666.32253083,814262.3154676007],zoom:15.7},{center:[1284003.7367688504,5950927.737276901],zoom:11.19},{center:[-8468554.506387988,5696886.564463913],zoom:10.11},{center:[707717.3609533564,6361291.958635207],zoom:10.02},{center:[3345381.3050933336,-216864.19183635892],zoom:13.9},{center:[3318257.9642649507,-1786301.1175574847],zoom:6.1},{center:[19365301.097574536,-5033096.120372388],zoom:10.77},{center:[-13542913.807564376,5913315.884147839],zoom:11.59},{center:[9680854.2477813,3231923.470902604],zoom:8.06},{center:[-10341383.185823392,1826844.1155603195],zoom:9.27},{center:[3232422.751942559,5017252.706810253],zoom:12.25},{center:[-16373943.169136822,8651360.275919426],zoom:8.49},{center:[12475943.19806142,4172022.2635435928],zoom:9.91}],Jf=document.getElementById("map"),Qf=new Ra({target:Jf,view:new Wn(Hf[Math.random()*Hf.length|0])});Qf.addControl(new class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target}),this.on,this.once,this.un,this.keys_=void 0!==t.keys&&t.keys,this.source_=t.source,this.isInFullscreen_=!1,this.boundHandleMapTargetChange_=this.handleMapTargetChange_.bind(this),this.cssClassName_=void 0!==t.className?t.className:"ol-full-screen",this.documentListeners_=[],this.activeClassName_=void 0!==t.activeClassName?t.activeClassName.split(" "):[this.cssClassName_+"-true"],this.inactiveClassName_=void 0!==t.inactiveClassName?t.inactiveClassName.split(" "):[this.cssClassName_+"-false"];const e=void 0!==t.label?t.label:"⤢";this.labelNode_="string"==typeof e?document.createTextNode(e):e;const i=void 0!==t.labelActive?t.labelActive:"×";this.labelActiveNode_="string"==typeof i?document.createTextNode(i):i;const n=t.tipLabel?t.tipLabel:"Toggle full-screen";this.button_=document.createElement("button"),this.button_.title=n,this.button_.setAttribute("type","button"),this.button_.appendChild(this.labelNode_),this.button_.addEventListener(x,this.handleClick_.bind(this),!1),this.setClassName_(this.button_,this.isInFullscreen_),this.element.className=`${this.cssClassName_} ${ot} ${lt}`,this.element.appendChild(this.button_)}handleClick_(t){t.preventDefault(),this.handleFullScreen_()}handleFullScreen_(){const t=this.getMap();if(!t)return;const e=t.getOwnerDocument();if(mt(e))if(yt(e))!function(t){t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen&&t.webkitExitFullscreen()}(e);else{let i;i=this.source_?"string"==typeof this.source_?e.getElementById(this.source_):this.source_:t.getTargetElement(),this.keys_?function(t){t.webkitRequestFullscreen?t.webkitRequestFullscreen():_t(t)}(i):_t(i)}}handleFullScreenChange_(){const t=this.getMap();if(!t)return;const e=this.isInFullscreen_;this.isInFullscreen_=yt(t.getOwnerDocument()),e!==this.isInFullscreen_&&(this.setClassName_(this.button_,this.isInFullscreen_),this.isInFullscreen_?(J(this.labelActiveNode_,this.labelNode_),this.dispatchEvent(gt)):(J(this.labelNode_,this.labelActiveNode_),this.dispatchEvent(ft)),t.updateSize())}setClassName_(t,e){e?(t.classList.remove(...this.inactiveClassName_),t.classList.add(...this.activeClassName_)):(t.classList.remove(...this.activeClassName_),t.classList.add(...this.inactiveClassName_))}setMap(t){const e=this.getMap();e&&e.removeChangeListener(nt,this.boundHandleMapTargetChange_),super.setMap(t),this.handleMapTargetChange_(),t&&t.addChangeListener(nt,this.boundHandleMapTargetChange_)}handleMapTargetChange_(){const t=this.documentListeners_;for(let e=0,i=t.length;e + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/map/test/theme/img/logo-light.svg b/map/test/theme/img/logo-light.svg new file mode 100644 index 000000000..df941056a --- /dev/null +++ b/map/test/theme/img/logo-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/map/test/theme/img/popup.png b/map/test/theme/img/popup.png new file mode 100644 index 000000000..e8b15fb15 Binary files /dev/null and b/map/test/theme/img/popup.png differ diff --git a/map/test/theme/img/tiled-layers.png b/map/test/theme/img/tiled-layers.png new file mode 100644 index 000000000..6026a2a1b Binary files /dev/null and b/map/test/theme/img/tiled-layers.png differ diff --git a/map/test/theme/img/timeline.png b/map/test/theme/img/timeline.png new file mode 100644 index 000000000..64a9a119d Binary files /dev/null and b/map/test/theme/img/timeline.png differ diff --git a/map/test/theme/img/vector-layers.png b/map/test/theme/img/vector-layers.png new file mode 100644 index 000000000..36d08c77c Binary files /dev/null and b/map/test/theme/img/vector-layers.png differ diff --git a/map/test/theme/index.css b/map/test/theme/index.css new file mode 100644 index 000000000..cea3f1ff9 --- /dev/null +++ b/map/test/theme/index.css @@ -0,0 +1,50 @@ +#map { + position: relative; + height: 120px; +} + +#map:fullscreen { + height: 100%; +} + +#map:-webkit-full-screen { + height: 100%; + margin: 0; +} + +#tagline { + padding-left: 25%; + margin-bottom: 10px; +} + +#tagline p { + font-size: 150%; + font-style: italic; +} + +#news { + background-color: var(--ol-accent-background-color); + border-radius: 4px; + padding: 1rem 0 0; +} + +#news h1 { + margin: 0; +} + +img.thumb { + float: right; + margin-left: 10px; +} + +/* ol customizations */ + +.ol-overlaycontainer-stopevent { + opacity: 0; + transition: opacity 300ms ease; +} + +/* not done with :hover because the overlay blocks events and has no height */ +.over .ol-overlaycontainer-stopevent { + opacity: 1; +} diff --git a/map/test/theme/ol.css b/map/test/theme/ol.css new file mode 100644 index 000000000..62c2b6123 --- /dev/null +++ b/map/test/theme/ol.css @@ -0,0 +1,350 @@ +:root, +:host { + --ol-background-color: white; + --ol-accent-background-color: #F5F5F5; + --ol-subtle-background-color: rgba(128, 128, 128, 0.25); + --ol-partial-background-color: rgba(255, 255, 255, 0.75); + --ol-foreground-color: #333333; + --ol-subtle-foreground-color: #666666; + --ol-brand-color: #00AAFF; +} + +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 1.5px solid var(--ol-background-color); + background-color: var(--ol-partial-background-color); +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: var(--ol-partial-background-color); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} + +.ol-scale-line-inner { + border: 1px solid var(--ol-subtle-foreground-color); + border-top: none; + color: var(--ol-foreground-color); + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; + transition: all 0.25s; +} + +.ol-scale-bar { + position: absolute; + bottom: 8px; + left: 8px; +} + +.ol-scale-bar-inner { + display: flex; +} + +.ol-scale-step-marker { + width: 1px; + height: 15px; + background-color: var(--ol-foreground-color); + float: right; + z-index: 10; +} + +.ol-scale-step-text { + position: absolute; + bottom: -5px; + font-size: 10px; + z-index: 11; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-text { + position: absolute; + font-size: 12px; + text-align: center; + bottom: 25px; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-singlebar { + position: relative; + height: 10px; + z-index: 9; + box-sizing: border-box; + border: 1px solid var(--ol-foreground-color); +} + +.ol-scale-singlebar-even { + background-color: var(--ol-subtle-foreground-color); +} + +.ol-scale-singlebar-odd { + background-color: var(--ol-background-color); +} + +.ol-unsupported { + display: none; +} + +.ol-viewport, +.ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; +} + +.ol-viewport canvas { + all: unset; + overflow: hidden; +} + +.ol-viewport { + touch-action: pan-x pan-y; +} + +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} + +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} + +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} + +.ol-control { + position: absolute; + background-color: var(--ol-subtle-background-color); + border-radius: 4px; +} + +.ol-zoom { + top: .5em; + left: .5em; +} + +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} + +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} + +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} + +.ol-full-screen { + right: .5em; + top: .5em; +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: var(--ol-subtle-foreground-color); + font-weight: bold; + text-decoration: none; + font-size: inherit; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: var(--ol-background-color); + border: none; + border-radius: 2px; +} + +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} + +.ol-zoom-extent button { + line-height: 1.4em; +} + +.ol-compass { + display: block; + font-weight: normal; + will-change: transform; +} + +.ol-touch .ol-control button { + font-size: 1.5em; +} + +.ol-touch .ol-zoom-extent { + top: 5.5em; +} + +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + outline: 1px solid var(--ol-subtle-foreground-color); + color: var(--ol-foreground-color); +} + +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} + +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); + display: flex; + flex-flow: row-reverse; + align-items: center; +} + +.ol-attribution a { + color: var(--ol-subtle-foreground-color); + text-decoration: none; +} + +.ol-attribution ul { + margin: 0; + padding: 1px .5em; + color: var(--ol-foreground-color); + text-shadow: 0 0 2px var(--ol-background-color); + font-size: 12px; +} + +.ol-attribution li { + display: inline; + list-style: none; +} + +.ol-attribution li:not(:last-child):after { + content: " "; +} + +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} + +.ol-attribution button { + flex-shrink: 0; +} + +.ol-attribution.ol-collapsed ul { + display: none; +} + +.ol-attribution:not(.ol-collapsed) { + background: var(--ol-partial-background-color); +} + +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; +} + +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} + +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} + +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} + +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} + +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: block; +} + +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid var(--ol-subtle-foreground-color); + height: 150px; + width: 150px; +} + +.ol-overviewmap:not(.ol-collapsed) button { + bottom: 0; + left: 0; + position: absolute; +} + +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} + +.ol-overviewmap:not(.ol-collapsed) { + background: var(--ol-subtle-background-color); +} + +.ol-overviewmap-box { + border: 1.5px dotted var(--ol-subtle-foreground-color); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} diff --git a/map/test/theme/site.css b/map/test/theme/site.css new file mode 100644 index 000000000..66df2e974 --- /dev/null +++ b/map/test/theme/site.css @@ -0,0 +1,531 @@ +@import url(https://fonts.googleapis.com/css?family=Quattrocento+Sans:400,400italic,700); + +body { + font-family: 'Quattrocento Sans', sans-serif; + font-size: 16px; + color: var(--ol-foreground-color); + padding-top: 54px; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 700 +} + +h1, +.row h1 { + margin-top: 30px; + margin-bottom: 20px; +} + +h1.topic { + font-size: 1.5rem; + color: var(--ol-subtle-foreground-color); + text-transform: uppercase; +} + +code { + color: var(--ol-foreground-color); + background-color: var(--ol-accent-background-color); + padding: 0.2em 0.4em; + border-radius: 3px; +} + +a>code, +pre>code { + color: inherit; + background-color: initial; + padding: initial; + border-radius: initial; +} + +a { + color: var(--ol-brand-color); + text-decoration: none +} + +a :not(:first-child) { + color: var(--ol-foreground-color); +} + +a:hover, +a:focus { + color: var(--ol-brand-color); + text-decoration: underline; +} + +.navbar { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); + border: 0; + border-radius: 0; +} + +.navbar-brand { + color: var(--ol-background-color); + font-weight: bold; + font-size: 160%; + padding: 8px 0; +} + +.navbar-brand img { + height: 35px; + width: 35px; + vertical-align: middle; + margin-right: 5px; + display: inline-block; +} + +.navbar-dark .navbar-nav .nav-link { + color: var(--ol-background-color); +} + +.navbar-dark .navbar-nav .nav-link:hover { + color: var(--ol-brand-color); +} + +.navbar-brand:focus, +.navbar-brand:hover, +.nav-link:focus, +.nav-link:hover { + text-decoration: none; + color: var(--ol-brand-color); +} + +footer { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); + margin-top: 40px; + padding: 10px; + text-align: center; +} + +a.dropdown-item { + color: var(--ol-foreground-color); +} + +.dropdown-item.active, +.dropdown-item:hover { + color: var(--ol-brand-color); + text-decoration: none; + background-color: var(--ol-background-color); +} + +.navbar-nav>li>a { + color: var(--ol-background-color); +} + +.display-table { + display: table; +} + +.btn-link { + font-weight: 400; + color: var(--ol-subtle-foreground-color); + text-decoration: none; +} + +.btn-link:hover { + color: var(--ol-brand-color); + text-decoration: none; +} + +.version-form, +.navbar-form { + display: table-cell; + vertical-align: middle; +} + +.version-form { + color: var(--ol-foreground-color); +} + +#title { + margin-top: 1em; +} + +.badge-group { + display: inline-block; +} + +.badge-group>.badge:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.badge-group>.badge:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.badge-info { + background-color: var(--ol-subtle-foreground-color); +} + +a.badge-info:focus, +a.badge-info:hover { + background-color: var(--ol-foreground-color); + color: var(--ol-brand-color); + text-decoration: none; +} + +.tag-modal-toggle { + cursor: pointer; +} + +.modal-tag-example .modal-body { + padding: 0; +} + +.modal-tag-example .list-group-item:focus, +.modal-tag-example .list-group-item:hover, +.modal-tag-example .list-group-item:active { + background-color: var(--ol-background-color); + color: var(--ol-brand-color); +} + +.modal-tag-example .list-group-item.active { + background-color: var(--ol-subtle-foreground-color); + color: var(--ol-background-color); + border: none; +} + +#docs { + margin-top: 1em; +} + +ul.inline, +ol.inline { + margin-left: 0; + padding-left: 0; + list-style: none; +} + +ul.inline>li, +ol.inline>li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.map { + height: 400px; + width: 100%; + background: var(--ol-background-color); + margin-bottom: 10px; +} + +.ol-control { + line-height: normal; +} + +.ol-attribution.ol-logo-only, +.ol-attribution.ol-uncollapsible { + max-width: calc(100% - 3em); +} + +.iframe-info iframe { + width: 100%; +} + +.source-heading { + margin-top: 1em; + margin-bottom: 0; + padding-left: .6em; + font-weight: bold; +} + +#tags, +#shortdesc, +.hidden { + display: none; +} + +#api-links ul { + display: inline; +} + +#latest-check { + margin-top: -10px; + margin-bottom: 10px; +} + +/* START PRISM THEME */ + +/** + * VS theme by Andrew Lock (https://andrewlock.net) + * Inspired by Visual Studio syntax coloring + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #393A34; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + font-size: .9em; + line-height: 1.2em; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre>code[class*="language-"] { + font-size: 1em; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + background: #C1DEF1; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + background: #C1DEF1; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border: 1px solid #dddddd; + background-color: white; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .2em; + padding-top: 1px; + padding-bottom: 1px; + background: #f8f8f8; + border: 1px solid #dddddd; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #008000; + font-style: italic; +} + +.token.namespace { + opacity: .7; +} + +.token.string { + color: #A31515; +} + +.token.punctuation, +.token.operator { + color: #393A34; + /* no highlight */ +} + +.token.url, +.token.symbol, +.token.number, +.token.boolean, +.token.variable, +.token.constant, +.token.inserted { + color: #36acaa; +} + +.token.atrule, +.token.keyword, +.token.attr-value, +.language-autohotkey .token.selector, +.language-json .token.boolean, +.language-json .token.number, +code[class*="language-css"] { + color: #0000ff; +} + +.token.function { + color: #393A34; +} + +.token.deleted, +.language-autohotkey .token.tag { + color: #9a050f; +} + +.token.selector, +.language-autohotkey .token.keyword { + color: #00009f; +} + +.token.important { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.class-name, +.language-json .token.property { + color: #2B91AF; +} + +.token.tag, +.token.selector { + color: #800000; +} + +.token.attr-name, +.token.property, +.token.regex, +.token.entity { + color: #ff0000; +} + +.token.directive.tag .tag { + background: #ffff00; + color: #393A34; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right-color: #a5a5a5; +} + +.line-numbers .line-numbers-rows>span:before { + color: #2B91AF; +} + +/* overrides color-values for the Line Highlight plugin + * http://prismjs.com/plugins/line-highlight/ + */ +.line-highlight.line-highlight { + background: rgba(193, 222, 241, 0.2); + background: -webkit-linear-gradient(left, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0)); + background: linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0)); +} + +/* END PRISM THEME */ + +/* restyle prism copy button */ +div.code-toolbar { + position: relative; +} + +div.code-toolbar>.toolbar { + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition: opacity .2s ease-in-out; +} + +div.code-toolbar:hover>.toolbar, +div.code-toolbar:focus-within>.toolbar { + opacity: 1; +} + +div.code-toolbar>.toolbar button { + font-size: 16px; + color: var(--ol-subtle-foreground-color); + background-color: transparent; + box-shadow: none; + padding: .615rem .75rem; + border: none; +} + +div.code-toolbar>.toolbar button:hover, +div.code-toolbar>.toolbar button:focus { + color: var(--ol-brand-color); +} + +div.code-toolbar>.toolbar button:focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); +} + +div.code-toolbar>.toolbar button { + background-color: rgba(255, 255, 255, .625); + border-radius: 0 0 0 10px; + margin: 1px; +} +div.code-toolbar>.toolbar button:before { + font: var(--fa-font-solid); + font-size: 1.33333333em; + line-height: .75em; + content: "\f0ea"; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + margin-right: .184em; + vertical-align: middle; +} + +/* jarguar overrides for jsdoc */ +.navigation { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); +} + +.navigation li.item .subtitle { + color: var(--ol-background-color); +} + +.navigation li.item a:hover, +.navigation li.item .title a:hover { + color: var(--ol-brand-color); +} + +.main .subsection-title { + color: var(--ol-foreground-color); +} + +.main .nameContainer, +.main .nameContainer.inherited { + border-top-color: var(--ol-subtle-foreground-color); + color: var(--ol-foreground-color); +} + +.nameContainer .anchor:target+h4 { + background-color: inherit; +} + +@media (min-width: 1400px) { + .container { + max-width: 1140px; + } +} + +table.featureInfo { + caption-side: initial; +} diff --git a/map/test2/apikey b/map/test2/apikey new file mode 100644 index 000000000..ba93b7d3d --- /dev/null +++ b/map/test2/apikey @@ -0,0 +1 @@ +yBwA37PS2BsXxx7WM9Rr \ No newline at end of file diff --git a/map/test2/index.html b/map/test2/index.html new file mode 100644 index 000000000..022777581 --- /dev/null +++ b/map/test2/index.html @@ -0,0 +1,12 @@ + + + + + + Quick Start + + +
+ + + diff --git a/map/test2/main.js b/map/test2/main.js new file mode 100644 index 000000000..9f0e5dd47 --- /dev/null +++ b/map/test2/main.js @@ -0,0 +1,18 @@ +import './style.css'; +import Map from '/javascript/ol/Map.js'; +import OSM from '/javascript/ol/source/OSM.js'; +import TileLayer from '/javascript/ol/layer/Tile.js'; +import View from '/javascript/ol/View.js'; + +const map = new Map({ + target: 'map', + layers: [ + new TileLayer({ + source: new OSM(), + }), + ], + view: new View({ + center: [0, 0], + zoom: 2, + }), +}); diff --git a/map/test2/style.css b/map/test2/style.css new file mode 100644 index 000000000..4295e59d8 --- /dev/null +++ b/map/test2/style.css @@ -0,0 +1,14 @@ +@import "/javascript/ol/ol.css"; + +html, +body { + margin: 0; + height: 100%; +} + +#map { + position: absolute; + top: 0; + bottom: 0; + width: 100%; +}