{"version":3,"file":"ol.js","mappings":"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,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,EACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,OAAU,CACN,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,EACA,EACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,EACA,EACA,IACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,MAAS,CACL,IACA,GACA,GACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,GACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,MAAS,CACL,IACA,IACA,GACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,GACA,GACA,GAEJ,KAAQ,CACJ,EACA,IACA,IACA,GAEJ,SAAY,CACR,EACA,EACA,IACA,GAEJ,SAAY,CACR,EACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,GACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,EACA,IACA,EACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,EACA,IACA,GAEJ,eAAkB,CACd,GACA,IACA,GACA,GAEJ,WAAc,CACV,IACA,IACA,EACA,GAEJ,WAAc,CACV,IACA,GACA,IACA,GAEJ,QAAW,CACP,IACA,EACA,EACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,IACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,GACA,GACA,GACA,GAEJ,cAAiB,CACb,EACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,EACA,IACA,GAEJ,SAAY,CACR,IACA,GACA,IACA,GAEJ,YAAe,CACX,EACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,WAAc,CACV,GACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,YAAe,CACX,GACA,IACA,GACA,GAEJ,QAAW,CACP,IACA,EACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,KAAQ,CACJ,IACA,IACA,EACA,GAEJ,UAAa,CACT,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,MAAS,CACL,EACA,IACA,EACA,GAEJ,YAAe,CACX,IACA,IACA,GACA,GAEJ,KAAQ,CACJ,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,QAAW,CACP,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,GACA,GACA,GAEJ,OAAU,CACN,GACA,EACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,MAAS,CACL,IACA,IACA,IACA,GAEJ,SAAY,CACR,IACA,IACA,IACA,GAEJ,cAAiB,CACb,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,EACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,qBAAwB,CACpB,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,WAAc,CACV,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,UAAa,CACT,IACA,IACA,IACA,GAEJ,YAAe,CACX,IACA,IACA,IACA,GAEJ,cAAiB,CACb,GACA,IACA,IACA,GAEJ,aAAgB,CACZ,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,eAAkB,CACd,IACA,IACA,IACA,GAEJ,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","sources":["webpack://ol/webpack/universalModuleDefinition","webpack://ol/webpack/runtime/load script","webpack://ol/./node_modules/earcut/src/earcut.js","webpack://ol/./node_modules/ieee754/index.js","webpack://ol/./node_modules/lru-cache/index.js","webpack://ol/./node_modules/pbf/index.js","webpack://ol/./node_modules/rbush/rbush.min.js","webpack://ol/./node_modules/xml-utils/find-tag-by-name.js","webpack://ol/./node_modules/xml-utils/find-tags-by-name.js","webpack://ol/./node_modules/xml-utils/get-attribute.js","webpack://ol/./node_modules/xml-utils/index-of-match.js","webpack://ol/./node_modules/yallist/iterator.js","webpack://ol/./node_modules/yallist/yallist.js","webpack://ol/./node_modules/geotiff/dist-module/globals.js","webpack://ol/webpack/bootstrap","webpack://ol/webpack/runtime/define property getters","webpack://ol/webpack/runtime/ensure chunk","webpack://ol/webpack/runtime/get javascript chunk filename","webpack://ol/webpack/runtime/global","webpack://ol/webpack/runtime/hasOwnProperty shorthand","webpack://ol/webpack/runtime/make namespace object","webpack://ol/webpack/runtime/publicPath","webpack://ol/webpack/runtime/jsonp chunk loading","webpack://ol/./build/ol/util.js","webpack://ol/./build/ol/AssertionError.js","webpack://ol/./build/ol/events/Event.js","webpack://ol/./build/ol/ObjectEventType.js","webpack://ol/./build/ol/Disposable.js","webpack://ol/./build/ol/array.js","webpack://ol/./build/ol/functions.js","webpack://ol/./build/ol/obj.js","webpack://ol/./build/ol/events/Target.js","webpack://ol/./build/ol/events/EventType.js","webpack://ol/./build/ol/events.js","webpack://ol/./build/ol/Observable.js","webpack://ol/./build/ol/Object.js","webpack://ol/./build/ol/CollectionEventType.js","webpack://ol/./build/ol/Collection.js","webpack://ol/./build/ol/TileState.js","webpack://ol/./build/ol/easing.js","webpack://ol/./build/ol/Tile.js","webpack://ol/./build/ol/DataTile.js","webpack://ol/./build/ol/asserts.js","webpack://ol/./build/ol/Feature.js","webpack://ol/./build/ol/has.js","webpack://ol/./build/ol/transform.js","webpack://ol/./build/ol/extent/Relationship.js","webpack://ol/./build/ol/extent.js","webpack://ol/./build/ol/proj/Units.js","webpack://ol/./build/ol/proj/Projection.js","webpack://ol/./build/ol/proj/epsg3857.js","webpack://ol/./build/ol/proj/epsg4326.js","webpack://ol/./build/ol/proj/projections.js","webpack://ol/./build/ol/proj/transforms.js","webpack://ol/./build/ol/math.js","webpack://ol/./build/ol/string.js","webpack://ol/./build/ol/coordinate.js","webpack://ol/./build/ol/sphere.js","webpack://ol/./build/ol/proj.js","webpack://ol/./build/ol/geom/flat/transform.js","webpack://ol/./build/ol/geom/Geometry.js","webpack://ol/./build/ol/geom/SimpleGeometry.js","webpack://ol/./build/ol/geom/flat/closest.js","webpack://ol/./build/ol/geom/flat/deflate.js","webpack://ol/./build/ol/geom/flat/simplify.js","webpack://ol/./build/ol/geom/flat/inflate.js","webpack://ol/./build/ol/geom/flat/area.js","webpack://ol/./build/ol/geom/LinearRing.js","webpack://ol/./build/ol/geom/Point.js","webpack://ol/./build/ol/geom/flat/contains.js","webpack://ol/./build/ol/geom/flat/interiorpoint.js","webpack://ol/./build/ol/geom/flat/segments.js","webpack://ol/./build/ol/geom/flat/intersectsextent.js","webpack://ol/./build/ol/geom/flat/reverse.js","webpack://ol/./build/ol/geom/flat/orient.js","webpack://ol/./build/ol/geom/Polygon.js","webpack://ol/./build/ol/Geolocation.js","webpack://ol/./build/ol/ImageBase.js","webpack://ol/./build/ol/ImageState.js","webpack://ol/./build/ol/Image.js","webpack://ol/./build/ol/ImageCanvas.js","webpack://ol/./build/ol/dom.js","webpack://ol/./build/ol/ImageTile.js","webpack://ol/./build/ol/Kinetic.js","webpack://ol/./build/ol/color.js","webpack://ol/./build/ol/style/IconImageCache.js","webpack://ol/./build/ol/layer/Property.js","webpack://ol/./build/ol/layer/Base.js","webpack://ol/./build/ol/render/EventType.js","webpack://ol/./build/ol/layer/Layer.js","webpack://ol/./build/ol/renderer/Map.js","webpack://ol/./build/ol/render/Event.js","webpack://ol/./build/ol/css.js","webpack://ol/./build/ol/render/canvas.js","webpack://ol/./build/ol/renderer/Composite.js","webpack://ol/./build/ol/layer/Group.js","webpack://ol/./build/ol/MapEvent.js","webpack://ol/./build/ol/MapBrowserEvent.js","webpack://ol/./build/ol/MapBrowserEventType.js","webpack://ol/./build/ol/pointer/EventType.js","webpack://ol/./build/ol/MapBrowserEventHandler.js","webpack://ol/./build/ol/MapEventType.js","webpack://ol/./build/ol/MapProperty.js","webpack://ol/./build/ol/structs/PriorityQueue.js","webpack://ol/./build/ol/TileQueue.js","webpack://ol/./build/ol/ViewHint.js","webpack://ol/./build/ol/ViewProperty.js","webpack://ol/./build/ol/tilegrid/common.js","webpack://ol/./build/ol/centerconstraint.js","webpack://ol/./build/ol/resolutionconstraint.js","webpack://ol/./build/ol/rotationconstraint.js","webpack://ol/./build/ol/View.js","webpack://ol/./build/ol/control/Control.js","webpack://ol/./build/ol/control/Attribution.js","webpack://ol/./build/ol/control/Rotate.js","webpack://ol/./build/ol/control/Zoom.js","webpack://ol/./build/ol/control/defaults.js","webpack://ol/./build/ol/interaction/Property.js","webpack://ol/./build/ol/interaction/Interaction.js","webpack://ol/./build/ol/interaction/DoubleClickZoom.js","webpack://ol/./build/ol/interaction/Pointer.js","webpack://ol/./build/ol/events/condition.js","webpack://ol/./build/ol/interaction/DragPan.js","webpack://ol/./build/ol/interaction/DragRotate.js","webpack://ol/./build/ol/render/Box.js","webpack://ol/./build/ol/interaction/DragBox.js","webpack://ol/./build/ol/interaction/DragZoom.js","webpack://ol/./build/ol/events/KeyCode.js","webpack://ol/./build/ol/interaction/KeyboardPan.js","webpack://ol/./build/ol/interaction/KeyboardZoom.js","webpack://ol/./build/ol/interaction/MouseWheelZoom.js","webpack://ol/./build/ol/interaction/PinchRotate.js","webpack://ol/./build/ol/interaction/PinchZoom.js","webpack://ol/./build/ol/interaction/defaults.js","webpack://ol/./build/ol/size.js","webpack://ol/./build/ol/Map.js","webpack://ol/./build/ol/Overlay.js","webpack://ol/./build/ol/structs/LRUCache.js","webpack://ol/./build/ol/tilecoord.js","webpack://ol/./build/ol/TileCache.js","webpack://ol/./build/ol/TileRange.js","webpack://ol/./build/ol/VectorRenderTile.js","webpack://ol/./build/ol/VectorTile.js","webpack://ol/./build/ol/colorlike.js","webpack://ol/./build/ol/featureloader.js","webpack://ol/./build/ol/net.js","webpack://ol/./build/ol/loadingstrategy.js","webpack://ol/./build/ol/render/VectorContext.js","webpack://ol/./build/ol/render/canvas/Immediate.js","webpack://ol/./build/ol/renderer/vector.js","webpack://ol/./build/ol/render.js","webpack://ol/./build/ol/reproj.js","webpack://ol/./build/ol/tilegrid/TileGrid.js","webpack://ol/./build/ol/tilegrid.js","webpack://ol/./build/ol/tileurlfunction.js","webpack://ol/./build/ol/uri.js","webpack://ol/./build/ol/webgl.js","webpack://ol/./build/ol/xml.js","webpack://ol/./build/ol/webgl/Buffer.js","webpack://ol/./build/ol/webgl/ContextEventType.js","webpack://ol/./build/ol/webgl/PostProcessingPass.js","webpack://ol/./build/ol/vec/mat4.js","webpack://ol/./build/ol/webgl/Helper.js","webpack://ol/./build/ol/webgl/PaletteTexture.js","webpack://ol/./build/ol/webgl/RenderTarget.js","webpack://ol/./build/ol/reproj/Triangulation.js","webpack://ol/./build/ol/reproj/Tile.js","webpack://ol/./build/ol/reproj/common.js","webpack://ol/./build/ol/webgl/TileTexture.js","webpack://ol/./build/ol/renderer/Layer.js","webpack://ol/./build/ol/renderer/webgl/Layer.js","webpack://ol/./build/ol/renderer/webgl/TileLayer.js","webpack://ol/./build/ol/style/expressions.js","webpack://ol/./build/ol/webgl/ShaderBuilder.js","webpack://ol/./build/ol/tilegrid/WMTS.js","webpack://ol/./build/ol/style/Image.js","webpack://ol/./build/ol/style/RegularShape.js","webpack://ol/./build/ol/style/Circle.js","webpack://ol/./build/ol/style/Fill.js","webpack://ol/./build/ol/style/IconImage.js","webpack://ol/./build/ol/style/Icon.js","webpack://ol/./build/ol/style/Stroke.js","webpack://ol/./build/ol/style/Style.js","webpack://ol/./build/ol/style/Text.js","webpack://ol/./build/ol/style/flat.js","webpack://ol/./build/ol/structs/LinkedList.js","webpack://ol/./build/ol/structs/RBush.js","webpack://ol/./build/ol/source/TileEventType.js","webpack://ol/./build/ol/source/Source.js","webpack://ol/./build/ol/source/Tile.js","webpack://ol/./build/ol/source/UrlTile.js","webpack://ol/./build/ol/source/TileImage.js","webpack://ol/./build/ol/source/BingMaps.js","webpack://ol/./build/ol/source/XYZ.js","webpack://ol/./build/ol/source/CartoDB.js","webpack://ol/./build/ol/source/VectorEventType.js","webpack://ol/./build/ol/source/Vector.js","webpack://ol/./build/ol/source/Cluster.js","webpack://ol/./build/ol/source/DataTile.js","webpack://ol/./node_modules/geotiff/dist-module/compression/index.js","webpack://ol/./node_modules/geotiff/dist-module/pool.js","webpack://ol/./node_modules/@petamoriken/float16/src/helper/converter.mjs","webpack://ol/./node_modules/@petamoriken/float16/src/helper/is.mjs","webpack://ol/./node_modules/@petamoriken/float16/src/DataView.mjs","webpack://ol/./node_modules/geotiff/dist-module/resample.js","webpack://ol/./node_modules/geotiff/dist-module/geotiffimage.js","webpack://ol/./node_modules/geotiff/dist-module/rgb.js","webpack://ol/./node_modules/geotiff/dist-module/dataview64.js","webpack://ol/./node_modules/geotiff/dist-module/dataslice.js","webpack://ol/./node_modules/geotiff/dist-module/source/httputils.js","webpack://ol/./node_modules/geotiff/dist-module/source/basesource.js","webpack://ol/./node_modules/geotiff/dist-module/utils.js","webpack://ol/./node_modules/geotiff/dist-module/source/blockedsource.js","webpack://ol/./node_modules/geotiff/dist-module/source/client/base.js","webpack://ol/./node_modules/geotiff/dist-module/source/client/fetch.js","webpack://ol/./node_modules/geotiff/dist-module/source/client/xhr.js","webpack://ol/./node_modules/geotiff/dist-module/source/client/http.js","webpack://ol/./node_modules/geotiff/dist-module/source/remote.js","webpack://ol/./node_modules/geotiff/dist-module/source/filereader.js","webpack://ol/./node_modules/geotiff/dist-module/geotiff.js","webpack://ol/./build/ol/source/GeoTIFF.js","webpack://ol/./build/ol/source/Zoomify.js","webpack://ol/./build/ol/format/IIIFInfo.js","webpack://ol/./build/ol/source/IIIF.js","webpack://ol/./build/ol/reproj/Image.js","webpack://ol/./build/ol/source/Image.js","webpack://ol/./build/ol/source/ImageArcGISRest.js","webpack://ol/./build/ol/source/ImageCanvas.js","webpack://ol/./build/ol/source/ImageMapGuide.js","webpack://ol/./build/ol/source/ImageStatic.js","webpack://ol/./build/ol/source/wms.js","webpack://ol/./build/ol/source/ImageWMS.js","webpack://ol/./build/ol/source/ogcTileUtil.js","webpack://ol/./build/ol/source/OGCMapTile.js","webpack://ol/./build/ol/source/VectorTile.js","webpack://ol/./build/ol/source/OGCVectorTile.js","webpack://ol/./build/ol/source/OSM.js","webpack://ol/./build/ol/layer/BaseImage.js","webpack://ol/./build/ol/renderer/canvas/Layer.js","webpack://ol/./build/ol/renderer/canvas/ImageLayer.js","webpack://ol/./build/ol/layer/Image.js","webpack://ol/./build/ol/layer/TileProperty.js","webpack://ol/./build/ol/layer/BaseTile.js","webpack://ol/./build/ol/renderer/canvas/TileLayer.js","webpack://ol/./build/ol/layer/Tile.js","webpack://ol/./build/ol/source/Raster.js","webpack://ol/./build/ol/source/Stamen.js","webpack://ol/./build/ol/source/TileArcGISRest.js","webpack://ol/./build/ol/source/TileDebug.js","webpack://ol/./build/ol/source/TileJSON.js","webpack://ol/./build/ol/source/TileWMS.js","webpack://ol/./build/ol/source/UTFGrid.js","webpack://ol/./build/ol/source/WMTS.js","webpack://ol/./build/ol/source/common.js","webpack://ol/./build/ol/layer/BaseVector.js","webpack://ol/./build/ol/render/webgl/constants.js","webpack://ol/./build/ol/render/webgl/utils.js","webpack://ol/./build/ol/worker/webgl.js","webpack://ol/./build/ol/renderer/webgl/PointsLayer.js","webpack://ol/./build/ol/render/webgl/BatchRenderer.js","webpack://ol/./build/ol/render/webgl/LineStringBatchRenderer.js","webpack://ol/./build/ol/render/webgl/MixedGeometryBatch.js","webpack://ol/./build/ol/render/webgl/PointBatchRenderer.js","webpack://ol/./build/ol/render/webgl/PolygonBatchRenderer.js","webpack://ol/./build/ol/renderer/webgl/shaders.js","webpack://ol/./build/ol/renderer/webgl/VectorLayer.js","webpack://ol/./build/ol/render/canvas/Instruction.js","webpack://ol/./build/ol/render/canvas/Builder.js","webpack://ol/./build/ol/render/canvas/ImageBuilder.js","webpack://ol/./build/ol/render/canvas/LineStringBuilder.js","webpack://ol/./build/ol/render/canvas/PolygonBuilder.js","webpack://ol/./build/ol/geom/flat/straightchunk.js","webpack://ol/./build/ol/render/canvas/TextBuilder.js","webpack://ol/./build/ol/render/canvas/BuilderGroup.js","webpack://ol/./build/ol/geom/flat/textpath.js","webpack://ol/./build/ol/geom/flat/length.js","webpack://ol/./build/ol/render/canvas/Executor.js","webpack://ol/./build/ol/render/canvas/ExecutorGroup.js","webpack://ol/./build/ol/render/canvas/hitdetect.js","webpack://ol/./build/ol/renderer/canvas/VectorLayer.js","webpack://ol/./build/ol/renderer/canvas/VectorImageLayer.js","webpack://ol/./build/ol/renderer/canvas/VectorTileLayer.js","webpack://ol/./build/ol/geom/MultiPoint.js","webpack://ol/./build/ol/geom/flat/interpolate.js","webpack://ol/./build/ol/geom/LineString.js","webpack://ol/./build/ol/geom/MultiLineString.js","webpack://ol/./build/ol/geom/flat/center.js","webpack://ol/./build/ol/geom/MultiPolygon.js","webpack://ol/./build/ol/render/Feature.js","webpack://ol/./build/ol/layer/Vector.js","webpack://ol/./build/ol/geom/flat/geodesic.js","webpack://ol/./build/ol/layer/Graticule.js","webpack://ol/./build/ol/layer/Heatmap.js","webpack://ol/./build/ol/format/Feature.js","webpack://ol/./build/ol/format/MVT.js","webpack://ol/./build/ol/layer/VectorTile.js","webpack://ol/./build/ol/geom/GeometryCollection.js","webpack://ol/./build/ol/format/JSONFeature.js","webpack://ol/./build/ol/format/GeoJSON.js","webpack://ol/./node_modules/ol-mapbox-style/dist/index.js","webpack://ol/./build/ol/layer/MapboxVector.js","webpack://ol/./build/ol/layer/VectorImage.js","webpack://ol/./build/ol/layer/WebGLPoints.js","webpack://ol/./build/ol/layer/WebGLTile.js","webpack://ol/./build/ol/interaction/DragAndDrop.js","webpack://ol/./build/ol/interaction/DragRotateAndZoom.js","webpack://ol/./build/ol/geom/Circle.js","webpack://ol/./build/ol/interaction/Draw.js","webpack://ol/./build/ol/interaction/Extent.js","webpack://ol/./build/ol/interaction/Link.js","webpack://ol/./build/ol/interaction/Modify.js","webpack://ol/./build/ol/interaction/Select.js","webpack://ol/./build/ol/interaction/Snap.js","webpack://ol/./build/ol/interaction/Translate.js","webpack://ol/./build/ol/geom/flat/flip.js","webpack://ol/./build/ol/format/EsriJSON.js","webpack://ol/./build/ol/format/XMLFeature.js","webpack://ol/./build/ol/format/GMLBase.js","webpack://ol/./build/ol/format/xsd.js","webpack://ol/./build/ol/format/GML2.js","webpack://ol/./build/ol/format/GML3.js","webpack://ol/./build/ol/format/GML.js","webpack://ol/./build/ol/format/GML32.js","webpack://ol/./build/ol/format/GPX.js","webpack://ol/./build/ol/format/TextFeature.js","webpack://ol/./build/ol/format/IGC.js","webpack://ol/./build/ol/format/KML.js","webpack://ol/./build/ol/format/OSMXML.js","webpack://ol/./build/ol/format/XML.js","webpack://ol/./build/ol/format/xlink.js","webpack://ol/./build/ol/format/OWS.js","webpack://ol/./build/ol/format/Polyline.js","webpack://ol/./build/ol/format/TopoJSON.js","webpack://ol/./build/ol/format/filter/Filter.js","webpack://ol/./build/ol/format/filter/LogicalNary.js","webpack://ol/./build/ol/format/filter/And.js","webpack://ol/./build/ol/format/filter/Bbox.js","webpack://ol/./build/ol/format/filter/Spatial.js","webpack://ol/./build/ol/format/filter/Contains.js","webpack://ol/./build/ol/format/filter/DWithin.js","webpack://ol/./build/ol/format/filter/Disjoint.js","webpack://ol/./build/ol/format/filter/Comparison.js","webpack://ol/./build/ol/format/filter/During.js","webpack://ol/./build/ol/format/filter/ComparisonBinary.js","webpack://ol/./build/ol/format/filter/EqualTo.js","webpack://ol/./build/ol/format/filter/GreaterThan.js","webpack://ol/./build/ol/format/filter/GreaterThanOrEqualTo.js","webpack://ol/./build/ol/format/filter/Intersects.js","webpack://ol/./build/ol/format/filter/IsBetween.js","webpack://ol/./build/ol/format/filter/IsLike.js","webpack://ol/./build/ol/format/filter/IsNull.js","webpack://ol/./build/ol/format/filter/LessThan.js","webpack://ol/./build/ol/format/filter/LessThanOrEqualTo.js","webpack://ol/./build/ol/format/filter/Not.js","webpack://ol/./build/ol/format/filter/NotEqualTo.js","webpack://ol/./build/ol/format/filter/Or.js","webpack://ol/./build/ol/format/filter/ResourceId.js","webpack://ol/./build/ol/format/filter/Within.js","webpack://ol/./build/ol/format/filter.js","webpack://ol/./build/ol/format/WFS.js","webpack://ol/./build/ol/format/WKB.js","webpack://ol/./build/ol/format/WKT.js","webpack://ol/./build/ol/format/WMSCapabilities.js","webpack://ol/./build/ol/format/WMSGetFeatureInfo.js","webpack://ol/./build/ol/format/WMTSCapabilities.js","webpack://ol/./build/ol/control/FullScreen.js","webpack://ol/./build/ol/control/MousePosition.js","webpack://ol/./build/ol/control/OverviewMap.js","webpack://ol/./build/ol/control/ScaleLine.js","webpack://ol/./build/ol/control/ZoomSlider.js","webpack://ol/./build/ol/control/ZoomToExtent.js","webpack://ol/./build/index.js","webpack://ol/./build/ol/geom/flat/topology.js","webpack://ol/./build/ol/proj/proj4.js","webpack://ol/./build/ol/source.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ol\"] = factory();\n\telse\n\t\troot[\"ol\"] = factory();\n})(self, function() {\nreturn ","var inProgress = {};\nvar dataWebpackPrefix = \"ol:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n var filteredBridge = filterPoints(bridge, bridge.next);\n filterPoints(bridgeReverse, bridgeReverse.next);\n\n // Check if input node was removed by the filtering\n return outerNode === bridge ? filteredBridge : outerNode;\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n this.pos = 0;\n this.type = 0;\n this.length = this.buf.length;\n}\n\nPbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nvar TEXT_DECODER_MIN_LENGTH = 12;\nvar utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');\n\nPbf.prototype = {\n\n destroy: function() {\n this.buf = null;\n },\n\n // === READING =================================================================\n\n readFields: function(readField, result, end) {\n end = end || this.length;\n\n while (this.pos < end) {\n var val = this.readVarint(),\n tag = val >> 3,\n startPos = this.pos;\n\n this.type = val & 0x7;\n readField(tag, result, this);\n\n if (this.pos === startPos) this.skip(val);\n }\n return result;\n },\n\n readMessage: function(readField, result) {\n return this.readFields(readField, result, this.readVarint() + this.pos);\n },\n\n readFixed32: function() {\n var val = readUInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n readSFixed32: function() {\n var val = readInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n readFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readSFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readFloat: function() {\n var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n this.pos += 4;\n return val;\n },\n\n readDouble: function() {\n var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n this.pos += 8;\n return val;\n },\n\n readVarint: function(isSigned) {\n var buf = this.buf,\n val, b;\n\n b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n b = buf[this.pos]; val |= (b & 0x0f) << 28;\n\n return readVarintRemainder(val, isSigned, this);\n },\n\n readVarint64: function() { // for compatibility with v2.0.1\n return this.readVarint(true);\n },\n\n readSVarint: function() {\n var num = this.readVarint();\n return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n },\n\n readBoolean: function() {\n return Boolean(this.readVarint());\n },\n\n readString: function() {\n var end = this.readVarint() + this.pos;\n var pos = this.pos;\n this.pos = end;\n\n if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n // longer strings are fast with the built-in browser TextDecoder API\n return readUtf8TextDecoder(this.buf, pos, end);\n }\n // short strings are fast with our custom implementation\n return readUtf8(this.buf, pos, end);\n },\n\n readBytes: function() {\n var end = this.readVarint() + this.pos,\n buffer = this.buf.subarray(this.pos, end);\n this.pos = end;\n return buffer;\n },\n\n // verbose for performance reasons; doesn't affect gzipped size\n\n readPackedVarint: function(arr, isSigned) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readVarint(isSigned));\n return arr;\n },\n readPackedSVarint: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSVarint());\n return arr;\n },\n readPackedBoolean: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readBoolean());\n return arr;\n },\n readPackedFloat: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFloat());\n return arr;\n },\n readPackedDouble: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readDouble());\n return arr;\n },\n readPackedFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed32());\n return arr;\n },\n readPackedSFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed32());\n return arr;\n },\n readPackedFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed64());\n return arr;\n },\n readPackedSFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed64());\n return arr;\n },\n\n skip: function(val) {\n var type = val & 0x7;\n if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n else if (type === Pbf.Fixed32) this.pos += 4;\n else if (type === Pbf.Fixed64) this.pos += 8;\n else throw new Error('Unimplemented type: ' + type);\n },\n\n // === WRITING =================================================================\n\n writeTag: function(tag, type) {\n this.writeVarint((tag << 3) | type);\n },\n\n realloc: function(min) {\n var length = this.length || 16;\n\n while (length < this.pos + min) length *= 2;\n\n if (length !== this.length) {\n var buf = new Uint8Array(length);\n buf.set(this.buf);\n this.buf = buf;\n this.length = length;\n }\n },\n\n finish: function() {\n this.length = this.pos;\n this.pos = 0;\n return this.buf.subarray(0, this.length);\n },\n\n writeFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeSFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeSFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeVarint: function(val) {\n val = +val || 0;\n\n if (val > 0xfffffff || val < 0) {\n writeBigVarint(val, this);\n return;\n }\n\n this.realloc(4);\n\n this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = (val >>> 7) & 0x7f;\n },\n\n writeSVarint: function(val) {\n this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n },\n\n writeBoolean: function(val) {\n this.writeVarint(Boolean(val));\n },\n\n writeString: function(str) {\n str = String(str);\n this.realloc(str.length * 4);\n\n this.pos++; // reserve 1 byte for short string length\n\n var startPos = this.pos;\n // write the string directly to the buffer and see how much was written\n this.pos = writeUtf8(this.buf, str, this.pos);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeFloat: function(val) {\n this.realloc(4);\n ieee754.write(this.buf, val, this.pos, true, 23, 4);\n this.pos += 4;\n },\n\n writeDouble: function(val) {\n this.realloc(8);\n ieee754.write(this.buf, val, this.pos, true, 52, 8);\n this.pos += 8;\n },\n\n writeBytes: function(buffer) {\n var len = buffer.length;\n this.writeVarint(len);\n this.realloc(len);\n for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n },\n\n writeRawMessage: function(fn, obj) {\n this.pos++; // reserve 1 byte for short message length\n\n // write the message directly to the buffer and see how much was written\n var startPos = this.pos;\n fn(obj, this);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeMessage: function(tag, fn, obj) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeRawMessage(fn, obj);\n },\n\n writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); },\n writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); },\n writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); },\n writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); },\n writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); },\n writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); },\n writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); },\n writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n writeBytesField: function(tag, buffer) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeBytes(buffer);\n },\n writeFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFixed32(val);\n },\n writeSFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeSFixed32(val);\n },\n writeFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeFixed64(val);\n },\n writeSFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeSFixed64(val);\n },\n writeVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeVarint(val);\n },\n writeSVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeSVarint(val);\n },\n writeStringField: function(tag, str) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeString(str);\n },\n writeFloatField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFloat(val);\n },\n writeDoubleField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeDouble(val);\n },\n writeBooleanField: function(tag, val) {\n this.writeVarintField(tag, Boolean(val));\n }\n};\n\nfunction readVarintRemainder(l, s, p) {\n var buf = p.buf,\n h, b;\n\n b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n return pbf.type === Pbf.Bytes ?\n pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n if (isSigned) {\n return high * 0x100000000 + (low >>> 0);\n }\n\n return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n var low, high;\n\n if (val >= 0) {\n low = (val % 0x100000000) | 0;\n high = (val / 0x100000000) | 0;\n } else {\n low = ~(-val % 0x100000000);\n high = ~(-val / 0x100000000);\n\n if (low ^ 0xffffffff) {\n low = (low + 1) | 0;\n } else {\n low = 0;\n high = (high + 1) | 0;\n }\n }\n\n if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n throw new Error('Given varint doesn\\'t fit into 10 bytes');\n }\n\n pbf.realloc(10);\n\n writeBigVarintLow(low, high, pbf);\n writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos] = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n var lsb = (high & 0x07) << 4;\n\n pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n var extraLen =\n len <= 0x3fff ? 1 :\n len <= 0x1fffff ? 2 :\n len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n // if 1 byte isn't enough for encoding message length, shift the data to the right\n pbf.realloc(extraLen);\n for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }\nfunction writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }\nfunction writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }\nfunction writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }\nfunction writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }\nfunction writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n buf[pos] = val;\n buf[pos + 1] = (val >>> 8);\n buf[pos + 2] = (val >>> 16);\n buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n var str = '';\n var i = pos;\n\n while (i < end) {\n var b0 = buf[i];\n var c = null; // codepoint\n var bytesPerSequence =\n b0 > 0xEF ? 4 :\n b0 > 0xDF ? 3 :\n b0 > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence > end) break;\n\n var b1, b2, b3;\n\n if (bytesPerSequence === 1) {\n if (b0 < 0x80) {\n c = b0;\n }\n } else if (bytesPerSequence === 2) {\n b1 = buf[i + 1];\n if ((b1 & 0xC0) === 0x80) {\n c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n if (c <= 0x7F) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 3) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 4) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n b3 = buf[i + 3];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n if (c <= 0xFFFF || c >= 0x110000) {\n c = null;\n }\n }\n }\n\n if (c === null) {\n c = 0xFFFD;\n bytesPerSequence = 1;\n\n } else if (c > 0xFFFF) {\n c -= 0x10000;\n str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n c = 0xDC00 | c & 0x3FF;\n }\n\n str += String.fromCharCode(c);\n i += bytesPerSequence;\n }\n\n return str;\n}\n\nfunction readUtf8TextDecoder(buf, pos, end) {\n return utf8TextDecoder.decode(buf.subarray(pos, end));\n}\n\nfunction writeUtf8(buf, str, pos) {\n for (var i = 0, c, lead; i < str.length; i++) {\n c = str.charCodeAt(i); // code point\n\n if (c > 0xD7FF && c < 0xE000) {\n if (lead) {\n if (c < 0xDC00) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = c;\n continue;\n } else {\n c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n lead = null;\n }\n } else {\n if (c > 0xDBFF || (i + 1 === str.length)) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n } else {\n lead = c;\n }\n continue;\n }\n } else if (lead) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = null;\n }\n\n if (c < 0x80) {\n buf[pos++] = c;\n } else {\n if (c < 0x800) {\n buf[pos++] = c >> 0x6 | 0xC0;\n } else {\n if (c < 0x10000) {\n buf[pos++] = c >> 0xC | 0xE0;\n } else {\n buf[pos++] = c >> 0x12 | 0xF0;\n buf[pos++] = c >> 0xC & 0x3F | 0x80;\n }\n buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n }\n buf[pos++] = c & 0x3F | 0x80;\n }\n }\n return pos;\n}\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","const indexOfMatch = require(\"./index-of-match.js\");\n\nfunction findTagByName(xml, tagName, options) {\n const debug = (options && options.debug) || false;\n\n const startIndex = (options && options.startIndex) || 0;\n\n if (debug) console.log(\"starting findTagByName with\", tagName, \" and \", options);\n\n const start = indexOfMatch(xml, `\\<${tagName}[ \\>]`, startIndex);\n if (debug) console.log(\"start:\", start);\n if (start === -1) return undefined;\n\n const afterStart = xml.slice(start + tagName.length);\n let relativeEnd = indexOfMatch(afterStart, \"[ /]\" + tagName + \">\", 0);\n const selfClosing = relativeEnd === -1;\n\n if (selfClosing) {\n relativeEnd = indexOfMatch(afterStart, \"[ /]>\", 0);\n }\n\n const end = start + tagName.length + relativeEnd + 1 + (selfClosing ? 0 : tagName.length) + 1;\n if (debug) console.log(\"end:\", end);\n if (end === -1) return undefined;\n\n const outer = xml.slice(start, end);\n // tag is like urn:ogc:def:crs:EPSG::32617\n\n let inner;\n if (selfClosing) {\n inner = null;\n } else {\n inner = outer.slice(outer.indexOf(\">\") + 1, outer.lastIndexOf(\"<\"));\n }\n\n return { inner, outer, start, end };\n}\n\nmodule.exports = findTagByName;\n","const findTagByName = require(\"./find-tag-by-name.js\");\n\nfunction findTagsByName(xml, tagName, options) {\n const tags = [];\n const debug = (options && options.debug) || false;\n let startIndex = (options && options.startIndex) || 0;\n let tag;\n while ((tag = findTagByName(xml, tagName, { debug, startIndex }))) {\n startIndex = tag.end;\n tags.push(tag);\n }\n if (debug) console.log(\"findTagsByName found\", tags.length, \"tags\");\n return tags;\n}\n\nmodule.exports = findTagsByName;\n","function getAttribute(tag, attributeName, options) {\n const debug = (options && options.debug) || false;\n if (debug) console.log(\"getting \" + attributeName + \" in \" + tag);\n\n const xml = typeof tag === \"object\" ? tag.outer : tag;\n\n const pattern = `${attributeName}\\\\=\"\\([^\"]*\\)\"`;\n if (debug) console.log(\"pattern:\", pattern);\n\n const re = new RegExp(pattern);\n const match = re.exec(xml);\n if (debug) console.log(\"match:\", match);\n if (match) return match[1];\n}\n\nmodule.exports = getAttribute;\n","function indexOfMatch(xml, pattern, startIndex) {\n const re = new RegExp(pattern);\n const match = re.exec(xml.slice(startIndex));\n if (match) return startIndex + match.index;\n else return -1;\n}\n\nmodule.exports = indexOfMatch;\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","export const fieldTagNames = {\n // TIFF Baseline\n 0x013B: 'Artist',\n 0x0102: 'BitsPerSample',\n 0x0109: 'CellLength',\n 0x0108: 'CellWidth',\n 0x0140: 'ColorMap',\n 0x0103: 'Compression',\n 0x8298: 'Copyright',\n 0x0132: 'DateTime',\n 0x0152: 'ExtraSamples',\n 0x010A: 'FillOrder',\n 0x0121: 'FreeByteCounts',\n 0x0120: 'FreeOffsets',\n 0x0123: 'GrayResponseCurve',\n 0x0122: 'GrayResponseUnit',\n 0x013C: 'HostComputer',\n 0x010E: 'ImageDescription',\n 0x0101: 'ImageLength',\n 0x0100: 'ImageWidth',\n 0x010F: 'Make',\n 0x0119: 'MaxSampleValue',\n 0x0118: 'MinSampleValue',\n 0x0110: 'Model',\n 0x00FE: 'NewSubfileType',\n 0x0112: 'Orientation',\n 0x0106: 'PhotometricInterpretation',\n 0x011C: 'PlanarConfiguration',\n 0x0128: 'ResolutionUnit',\n 0x0116: 'RowsPerStrip',\n 0x0115: 'SamplesPerPixel',\n 0x0131: 'Software',\n 0x0117: 'StripByteCounts',\n 0x0111: 'StripOffsets',\n 0x00FF: 'SubfileType',\n 0x0107: 'Threshholding',\n 0x011A: 'XResolution',\n 0x011B: 'YResolution',\n\n // TIFF Extended\n 0x0146: 'BadFaxLines',\n 0x0147: 'CleanFaxData',\n 0x0157: 'ClipPath',\n 0x0148: 'ConsecutiveBadFaxLines',\n 0x01B1: 'Decode',\n 0x01B2: 'DefaultImageColor',\n 0x010D: 'DocumentName',\n 0x0150: 'DotRange',\n 0x0141: 'HalftoneHints',\n 0x015A: 'Indexed',\n 0x015B: 'JPEGTables',\n 0x011D: 'PageName',\n 0x0129: 'PageNumber',\n 0x013D: 'Predictor',\n 0x013F: 'PrimaryChromaticities',\n 0x0214: 'ReferenceBlackWhite',\n 0x0153: 'SampleFormat',\n 0x0154: 'SMinSampleValue',\n 0x0155: 'SMaxSampleValue',\n 0x022F: 'StripRowCounts',\n 0x014A: 'SubIFDs',\n 0x0124: 'T4Options',\n 0x0125: 'T6Options',\n 0x0145: 'TileByteCounts',\n 0x0143: 'TileLength',\n 0x0144: 'TileOffsets',\n 0x0142: 'TileWidth',\n 0x012D: 'TransferFunction',\n 0x013E: 'WhitePoint',\n 0x0158: 'XClipPathUnits',\n 0x011E: 'XPosition',\n 0x0211: 'YCbCrCoefficients',\n 0x0213: 'YCbCrPositioning',\n 0x0212: 'YCbCrSubSampling',\n 0x0159: 'YClipPathUnits',\n 0x011F: 'YPosition',\n\n // EXIF\n 0x9202: 'ApertureValue',\n 0xA001: 'ColorSpace',\n 0x9004: 'DateTimeDigitized',\n 0x9003: 'DateTimeOriginal',\n 0x8769: 'Exif IFD',\n 0x9000: 'ExifVersion',\n 0x829A: 'ExposureTime',\n 0xA300: 'FileSource',\n 0x9209: 'Flash',\n 0xA000: 'FlashpixVersion',\n 0x829D: 'FNumber',\n 0xA420: 'ImageUniqueID',\n 0x9208: 'LightSource',\n 0x927C: 'MakerNote',\n 0x9201: 'ShutterSpeedValue',\n 0x9286: 'UserComment',\n\n // IPTC\n 0x83BB: 'IPTC',\n\n // ICC\n 0x8773: 'ICC Profile',\n\n // XMP\n 0x02BC: 'XMP',\n\n // GDAL\n 0xA480: 'GDAL_METADATA',\n 0xA481: 'GDAL_NODATA',\n\n // Photoshop\n 0x8649: 'Photoshop',\n\n // GeoTiff\n 0x830E: 'ModelPixelScale',\n 0x8482: 'ModelTiepoint',\n 0x85D8: 'ModelTransformation',\n 0x87AF: 'GeoKeyDirectory',\n 0x87B0: 'GeoDoubleParams',\n 0x87B1: 'GeoAsciiParams',\n\n // LERC\n 0xC5F2: 'LercParameters',\n};\n\nexport const fieldTags = {};\nfor (const key in fieldTagNames) {\n if (fieldTagNames.hasOwnProperty(key)) {\n fieldTags[fieldTagNames[key]] = parseInt(key, 10);\n }\n}\n\nexport const fieldTagTypes = {\n 256: 'SHORT',\n 257: 'SHORT',\n 258: 'SHORT',\n 259: 'SHORT',\n 262: 'SHORT',\n 273: 'LONG',\n 274: 'SHORT',\n 277: 'SHORT',\n 278: 'LONG',\n 279: 'LONG',\n 282: 'RATIONAL',\n 283: 'RATIONAL',\n 284: 'SHORT',\n 286: 'SHORT',\n 287: 'RATIONAL',\n 296: 'SHORT',\n 297: 'SHORT',\n 305: 'ASCII',\n 306: 'ASCII',\n 338: 'SHORT',\n 339: 'SHORT',\n 513: 'LONG',\n 514: 'LONG',\n 1024: 'SHORT',\n 1025: 'SHORT',\n 2048: 'SHORT',\n 2049: 'ASCII',\n 3072: 'SHORT',\n 3073: 'ASCII',\n 33550: 'DOUBLE',\n 33922: 'DOUBLE',\n 34665: 'LONG',\n 34735: 'SHORT',\n 34737: 'ASCII',\n 42113: 'ASCII',\n};\n\nexport const arrayFields = [\n fieldTags.BitsPerSample,\n fieldTags.ExtraSamples,\n fieldTags.SampleFormat,\n fieldTags.StripByteCounts,\n fieldTags.StripOffsets,\n fieldTags.StripRowCounts,\n fieldTags.TileByteCounts,\n fieldTags.TileOffsets,\n fieldTags.SubIFDs,\n];\n\nexport const fieldTypeNames = {\n 0x0001: 'BYTE',\n 0x0002: 'ASCII',\n 0x0003: 'SHORT',\n 0x0004: 'LONG',\n 0x0005: 'RATIONAL',\n 0x0006: 'SBYTE',\n 0x0007: 'UNDEFINED',\n 0x0008: 'SSHORT',\n 0x0009: 'SLONG',\n 0x000A: 'SRATIONAL',\n 0x000B: 'FLOAT',\n 0x000C: 'DOUBLE',\n // IFD offset, suggested by https://owl.phy.queensu.ca/~phil/exiftool/standards.html\n 0x000D: 'IFD',\n // introduced by BigTIFF\n 0x0010: 'LONG8',\n 0x0011: 'SLONG8',\n 0x0012: 'IFD8',\n};\n\nexport const fieldTypes = {};\nfor (const key in fieldTypeNames) {\n if (fieldTypeNames.hasOwnProperty(key)) {\n fieldTypes[fieldTypeNames[key]] = parseInt(key, 10);\n }\n}\n\nexport const photometricInterpretations = {\n WhiteIsZero: 0,\n BlackIsZero: 1,\n RGB: 2,\n Palette: 3,\n TransparencyMask: 4,\n CMYK: 5,\n YCbCr: 6,\n\n CIELab: 8,\n ICCLab: 9,\n};\n\nexport const ExtraSamplesValues = {\n Unspecified: 0,\n Assocalpha: 1,\n Unassalpha: 2,\n};\n\nexport const LercParameters = {\n Version: 0,\n AddCompression: 1,\n};\n\nexport const LercAddCompression = {\n None: 0,\n Deflate: 1,\n};\n\nexport const geoKeyNames = {\n 1024: 'GTModelTypeGeoKey',\n 1025: 'GTRasterTypeGeoKey',\n 1026: 'GTCitationGeoKey',\n 2048: 'GeographicTypeGeoKey',\n 2049: 'GeogCitationGeoKey',\n 2050: 'GeogGeodeticDatumGeoKey',\n 2051: 'GeogPrimeMeridianGeoKey',\n 2052: 'GeogLinearUnitsGeoKey',\n 2053: 'GeogLinearUnitSizeGeoKey',\n 2054: 'GeogAngularUnitsGeoKey',\n 2055: 'GeogAngularUnitSizeGeoKey',\n 2056: 'GeogEllipsoidGeoKey',\n 2057: 'GeogSemiMajorAxisGeoKey',\n 2058: 'GeogSemiMinorAxisGeoKey',\n 2059: 'GeogInvFlatteningGeoKey',\n 2060: 'GeogAzimuthUnitsGeoKey',\n 2061: 'GeogPrimeMeridianLongGeoKey',\n 2062: 'GeogTOWGS84GeoKey',\n 3072: 'ProjectedCSTypeGeoKey',\n 3073: 'PCSCitationGeoKey',\n 3074: 'ProjectionGeoKey',\n 3075: 'ProjCoordTransGeoKey',\n 3076: 'ProjLinearUnitsGeoKey',\n 3077: 'ProjLinearUnitSizeGeoKey',\n 3078: 'ProjStdParallel1GeoKey',\n 3079: 'ProjStdParallel2GeoKey',\n 3080: 'ProjNatOriginLongGeoKey',\n 3081: 'ProjNatOriginLatGeoKey',\n 3082: 'ProjFalseEastingGeoKey',\n 3083: 'ProjFalseNorthingGeoKey',\n 3084: 'ProjFalseOriginLongGeoKey',\n 3085: 'ProjFalseOriginLatGeoKey',\n 3086: 'ProjFalseOriginEastingGeoKey',\n 3087: 'ProjFalseOriginNorthingGeoKey',\n 3088: 'ProjCenterLongGeoKey',\n 3089: 'ProjCenterLatGeoKey',\n 3090: 'ProjCenterEastingGeoKey',\n 3091: 'ProjCenterNorthingGeoKey',\n 3092: 'ProjScaleAtNatOriginGeoKey',\n 3093: 'ProjScaleAtCenterGeoKey',\n 3094: 'ProjAzimuthAngleGeoKey',\n 3095: 'ProjStraightVertPoleLongGeoKey',\n 3096: 'ProjRectifiedGridAngleGeoKey',\n 4096: 'VerticalCSTypeGeoKey',\n 4097: 'VerticalCitationGeoKey',\n 4098: 'VerticalDatumGeoKey',\n 4099: 'VerticalUnitsGeoKey',\n};\n\nexport const geoKeys = {};\nfor (const key in geoKeyNames) {\n if (geoKeyNames.hasOwnProperty(key)) {\n geoKeys[geoKeyNames[key]] = parseInt(key, 10);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".ol.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkol\"] = self[\"webpackChunkol\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","/**\n * @module ol/util\n */\n\n/**\n * @return {never} Any return.\n */\nexport function abstract() {\n throw new Error('Unimplemented abstract method.');\n}\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nlet uidCounter_ = 0;\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport const VERSION = '7.0.0';\n","/**\n * @module ol/AssertionError\n */\nimport {VERSION} from './util.js';\n\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nclass AssertionError extends Error {\n /**\n * @param {number} code Error code.\n */\n constructor(code) {\n const path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n const message =\n 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n\n super(message);\n\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n this.code = code;\n\n /**\n * @type {string}\n */\n this.name = 'AssertionError';\n\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n this.message = message;\n }\n}\n\nexport default AssertionError;\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n /**\n * Stop event propagation.\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\n\nexport default BaseEvent;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n\n/**\n * @typedef {'propertychange'} Types\n */\n","/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n constructor() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n\n /**\n * Clean up.\n */\n dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n }\n\n /**\n * Extension point for disposable objects.\n * @protected\n */\n disposeInternal() {}\n}\n\nexport default Disposable;\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || numberSafeCompareFunction;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n const n = arr.length;\n if (arr[0] <= target) {\n return 0;\n } else if (target <= arr[n - 1]) {\n return n - 1;\n } else {\n let i;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n } else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n } else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n } else if (arr[i] < target) {\n if (typeof direction === 'function') {\n if (direction(target, arr[i - 1], arr[i]) > 0) {\n return i - 1;\n } else {\n return i;\n }\n } else if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n } else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n let called = false;\n\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array} */\n let lastArgs;\n\n let lastThis;\n\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","/**\n * @module ol/obj\n */\n\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (const property in object) {\n delete object[property];\n }\n}\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n let property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport {VOID} from '../functions.js';\nimport {clear} from '../obj.js';\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends Disposable {\n /**\n * @param {*} [target] Default event target for dispatched events.\n */\n constructor(target) {\n super();\n\n /**\n * @private\n * @type {*}\n */\n this.eventTarget_ = target;\n\n /**\n * @private\n * @type {Object}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>}\n */\n this.listeners_ = null;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n addEventListener(type, listener) {\n if (!type || !listener) {\n return;\n }\n const listeners = this.listeners_ || (this.listeners_ = {});\n const listenersForType = listeners[type] || (listeners[type] = []);\n if (!listenersForType.includes(listener)) {\n listenersForType.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n dispatchEvent(event) {\n const isString = typeof event === 'string';\n const type = isString ? event : event.type;\n const listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n\n const evt = isString ? new Event(event) : /** @type {Event} */ (event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n const dispatching = this.dispatching_ || (this.dispatching_ = {});\n const pendingRemovals =\n this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n let propagate;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (\n listeners[i]\n ).handleEvent(evt);\n } else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (\n listeners[i]\n ).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n let pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.listeners_ && clear(this.listeners_);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n getListeners(type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n }\n\n /**\n * @param {string} [type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(type) {\n if (!this.listeners_) {\n return false;\n }\n return type\n ? type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n }\n}\n\nexport default Target;\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, thisArg, once) {\n if (thisArg && thisArg !== target) {\n listener = listener.bind(thisArg);\n }\n if (once) {\n const originalListener = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(this, arguments);\n };\n }\n const eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, thisArg) {\n return listen(target, type, listener, thisArg, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n","/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {listen, listenOnce, unlistenByKey} from './events.js';\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends EventTarget {\n constructor() {\n super();\n\n this.on =\n /** @type {ObservableOnSignature} */ (\n this.onInternal\n );\n\n this.once =\n /** @type {ObservableOnSignature} */ (\n this.onceInternal\n );\n\n this.un = /** @type {ObservableOnSignature} */ (this.unInternal);\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onInternal(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n } else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onceInternal(type, listener) {\n let key;\n if (Array.isArray(type)) {\n const len = type.length;\n key = new Array(len);\n for (let i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n } else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n unInternal(type, listener) {\n const key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n } else if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n } else {\n this.removeEventListener(type, listener);\n }\n }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n } else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\n\nexport default Observable;\n","/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport {getUid} from './util.js';\nimport {isEmpty} from './obj.js';\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nexport class ObjectEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nclass BaseObject extends Observable {\n /**\n * @param {Object} [values] An object with key-value pairs.\n */\n constructor(values) {\n super();\n\n /***\n * @type {ObjectOnSignature}\n */\n this.on;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.once;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.un;\n\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(this);\n\n /**\n * @private\n * @type {Object}\n */\n this.values_ = null;\n\n if (values !== undefined) {\n this.setProperties(values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return (this.values_ && Object.keys(this.values_)) || [];\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return (this.values_ && Object.assign({}, this.values_)) || {};\n }\n\n /**\n * @return {boolean} The object has properties.\n */\n hasProperties() {\n return !!this.values_;\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = `change:${key}`;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = ObjectEventType.PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n addChangeListener(key, listener) {\n this.addEventListener(`change:${key}`, listener);\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n removeChangeListener(key, listener) {\n this.removeEventListener(`change:${key}`, listener);\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n set(key, value, silent) {\n const values = this.values_ || (this.values_ = {});\n if (silent) {\n values[key] = value;\n } else {\n const oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n setProperties(values, silent) {\n for (const key in values) {\n this.set(key, values[key], silent);\n }\n }\n\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n applyProperties(source) {\n if (!source.values_) {\n return;\n }\n Object.assign(this.values_ || (this.values_ = {}), source.values_);\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [silent] Unset without triggering an event.\n * @api\n */\n unset(key, silent) {\n if (this.values_ && key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n\nexport default BaseObject;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n","/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n * @template T\n */\nexport class CollectionEvent extends Event {\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {T} element Element.\n * @param {number} index The index of the added or removed element.\n */\n constructor(type, element, index) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {T}\n * @api\n */\n this.element = element;\n\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n this.index = index;\n }\n}\n\n/***\n * @template T\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n /**\n * @param {Array} [array] Array.\n * @param {Options} [options] Collection options.\n */\n constructor(array, options) {\n super();\n\n /***\n * @type {CollectionOnSignature}\n */\n this.on;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.once;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.un;\n\n options = options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = array ? array : [];\n\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n\n this.updateLength_();\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return this.get(Property.LENGTH);\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (index < 0 || index > this.getLength()) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n );\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n if (index < 0 || index >= this.getLength()) {\n return undefined;\n }\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n )\n );\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index >= n) {\n this.insertAt(index, elem);\n return;\n }\n if (index < 0) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n )\n );\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n )\n );\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [except] Optional index to ignore.\n */\n assertUnique_(elem, except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== except) {\n throw new AssertionError(58);\n }\n }\n }\n}\n\nexport default Collection;\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n } else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n","/**\n * @module ol/Tile\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport TileState from './TileState.js';\nimport {abstract} from './util.js';\nimport {easeIn} from './easing.js';\n\n/**\n * A function that takes an {@link module:ol/Tile~Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n * tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState';\n *\n * source.setTileLoadFunction(function(tile, src) {\n * const xhr = new XMLHttpRequest();\n * xhr.responseType = 'blob';\n * xhr.addEventListener('loadend', function (evt) {\n * const data = this.response;\n * if (data !== undefined) {\n * tile.getImage().src = URL.createObjectURL(data);\n * } else {\n * tile.setState(TileState.ERROR);\n * }\n * });\n * xhr.addEventListener('error', function () {\n * tile.setState(TileState.ERROR);\n * });\n * xhr.open('GET', src);\n * xhr.send();\n * });\n * ```\n *\n * @typedef {function(Tile, string): void} LoadFunction\n * @api\n */\n\n/**\n * {@link module:ol/source/Tile~TileSource} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes an {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection~Projection} for the projection as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(import(\"./tilecoord.js\").TileCoord, number,\n * import(\"./proj/Projection.js\").default): (string|undefined)} UrlFunction\n * @api\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n * @api\n */\n\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nclass Tile extends EventTarget {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {Options} [options] Tile options.\n */\n constructor(tileCoord, state, options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n this.tileCoord = tileCoord;\n\n /**\n * @protected\n * @type {import(\"./TileState.js\").default}\n */\n this.state = state;\n\n /**\n * An \"interim\" tile for this tile. The interim tile may be used while this\n * one is loading, for \"smooth\" transitions when changing params/dimensions\n * on the source.\n * @type {Tile}\n */\n this.interimTile = null;\n\n /**\n * A key assigned to the tile. This is used by the tile source to determine\n * if this tile can effectively be used, or if a new tile should be created\n * and this one be used as an interim tile for this new tile.\n * @type {string}\n */\n this.key = '';\n\n /**\n * The duration for the opacity transition.\n * @type {number}\n */\n this.transition_ =\n options.transition === undefined ? 250 : options.transition;\n\n /**\n * Lookup of start times for rendering transitions. If the start time is\n * equal to -1, the transition is complete.\n * @type {Object}\n */\n this.transitionStarts_ = {};\n\n /**\n * @type {boolean}\n */\n this.interpolate = !!options.interpolate;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Called by the tile cache when the tile is removed from the cache due to expiry\n */\n release() {\n if (this.state === TileState.ERROR) {\n // to remove the `change` listener on this tile in `ol/TileQueue#handleTileChange`\n this.setState(TileState.EMPTY);\n }\n }\n\n /**\n * @return {string} Key.\n */\n getKey() {\n return this.key + '/' + this.tileCoord;\n }\n\n /**\n * Get the interim tile most suitable for rendering using the chain of interim\n * tiles. This corresponds to the most recent tile that has been loaded, if no\n * such tile exists, the original tile is returned.\n * @return {!Tile} Best tile for rendering.\n */\n getInterimTile() {\n if (!this.interimTile) {\n //empty chain\n return this;\n }\n let tile = this.interimTile;\n\n // find the first loaded tile and return it. Since the chain is sorted in\n // decreasing order of creation time, there is no need to search the remainder\n // of the list (all those tiles correspond to older requests and will be\n // cleaned up by refreshInterimChain)\n do {\n if (tile.getState() == TileState.LOADED) {\n // Show tile immediately instead of fading it in after loading, because\n // the interim tile is in place already\n this.transition_ = 0;\n return tile;\n }\n tile = tile.interimTile;\n } while (tile);\n\n // we can not find a better tile\n return this;\n }\n\n /**\n * Goes through the chain of interim tiles and discards sections of the chain\n * that are no longer relevant.\n */\n refreshInterimChain() {\n if (!this.interimTile) {\n return;\n }\n\n let tile = this.interimTile;\n\n /**\n * @type {Tile}\n */\n let prev = this;\n\n do {\n if (tile.getState() == TileState.LOADED) {\n //we have a loaded tile, we can discard the rest of the list\n //we would could abort any LOADING tile request\n //older than this tile (i.e. any LOADING tile following this entry in the chain)\n tile.interimTile = null;\n break;\n } else if (tile.getState() == TileState.LOADING) {\n //keep this LOADING tile any loaded tiles later in the chain are\n //older than this tile, so we're still interested in the request\n prev = tile;\n } else if (tile.getState() == TileState.IDLE) {\n //the head of the list is the most current tile, we don't need\n //to start any other requests for this chain\n prev.interimTile = tile.interimTile;\n } else {\n prev = tile;\n }\n tile = prev.interimTile;\n } while (tile);\n }\n\n /**\n * Get the tile coordinate for this tile.\n * @return {import(\"./tilecoord.js\").TileCoord} The tile coordinate.\n * @api\n */\n getTileCoord() {\n return this.tileCoord;\n }\n\n /**\n * @return {import(\"./TileState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n * the tile queue and will block other requests.\n * @param {import(\"./TileState.js\").default} state State.\n * @api\n */\n setState(state) {\n if (this.state !== TileState.ERROR && this.state > state) {\n throw new Error('Tile load sequence violation');\n }\n this.state = state;\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @abstract\n * @api\n */\n load() {\n abstract();\n }\n\n /**\n * Get the alpha value for rendering.\n * @param {string} id An id for the renderer.\n * @param {number} time The render frame time.\n * @return {number} A number between 0 and 1.\n */\n getAlpha(id, time) {\n if (!this.transition_) {\n return 1;\n }\n\n let start = this.transitionStarts_[id];\n if (!start) {\n start = time;\n this.transitionStarts_[id] = start;\n } else if (start === -1) {\n return 1;\n }\n\n const delta = time - start + 1000 / 60; // avoid rendering at 0\n if (delta >= this.transition_) {\n return 1;\n }\n return easeIn(delta / this.transition_);\n }\n\n /**\n * Determine if a tile is in an alpha transition. A tile is considered in\n * transition if tile.getAlpha() has not yet been called or has been called\n * and returned 1.\n * @param {string} id An id for the renderer.\n * @return {boolean} The tile is in transition.\n */\n inTransition(id) {\n if (!this.transition_) {\n return false;\n }\n return this.transitionStarts_[id] !== -1;\n }\n\n /**\n * Mark a transition as complete.\n * @param {string} id An id for the renderer.\n */\n endTransition(id) {\n if (this.transition_) {\n this.transitionStarts_[id] = -1;\n }\n }\n}\n\nexport default Tile;\n","/**\n * @module ol/DataTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\n/**\n * Data that can be used with a DataTile. For increased browser compatibility, use\n * Uint8Array instead of Uint8ClampedArray where possible.\n * @typedef {Uint8Array|Uint8ClampedArray|Float32Array|DataView} Data\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @property {function(): Promise} loader Data loader.\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n * @property {import('./size.js').Size} [size=[256, 256]] Tile size.\n * @api\n */\n\nclass DataTile extends Tile {\n /**\n * @param {Options} options Tile options.\n */\n constructor(options) {\n const state = TileState.IDLE;\n\n super(options.tileCoord, state, {\n transition: options.transition,\n interpolate: options.interpolate,\n });\n\n /**\n * @type {function(): Promise}\n * @private\n */\n this.loader_ = options.loader;\n\n /**\n * @type {Data}\n * @private\n */\n this.data_ = null;\n\n /**\n * @type {Error}\n * @private\n */\n this.error_ = null;\n\n /**\n * @type {import('./size.js').Size}\n * @private\n */\n this.size_ = options.size || [256, 256];\n }\n\n /**\n * Get the tile size.\n * @return {import('./size.js').Size} Tile size.\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * Get the data for the tile.\n * @return {Data} Tile data.\n * @api\n */\n getData() {\n return this.data_;\n }\n\n /**\n * Get any loading error.\n * @return {Error} Loading error.\n * @api\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Load not yet loaded URI.\n * @api\n */\n load() {\n if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) {\n return;\n }\n this.state = TileState.LOADING;\n this.changed();\n\n const self = this;\n this.loader_()\n .then(function (data) {\n self.data_ = data;\n self.state = TileState.LOADED;\n self.changed();\n })\n .catch(function (error) {\n self.error_ = error;\n self.state = TileState.ERROR;\n self.changed();\n });\n }\n}\n\nexport default DataTile;\n","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n","/**\n * @module ol/Feature\n */\nimport BaseObject from './Object.js';\nimport EventType from './events/EventType.js';\nimport {assert} from './asserts.js';\nimport {listen, unlistenByKey} from './events.js';\n\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} FeatureOnSignature\n */\n\n/***\n * @template Geometry\n * @typedef {Object & { geometry?: Geometry }} ObjectWithGeometry\n */\n\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object~BaseObject} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature. For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature';\n * import Polygon from 'ol/geom/Polygon';\n * import Point from 'ol/geom/Point';\n *\n * const feature = new Feature({\n * geometry: new Polygon(polyCoords),\n * labelPoint: new Point(labelCoords),\n * name: 'My Polygon',\n * });\n *\n * // get the polygon geometry\n * const poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * const point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n */\nclass Feature extends BaseObject {\n /**\n * @param {Geometry|ObjectWithGeometry} [geometryOrProperties]\n * You may pass a Geometry object directly, or an object literal containing\n * properties. If you pass an object literal, you may include a Geometry\n * associated with a `geometry` key.\n */\n constructor(geometryOrProperties) {\n super();\n\n /***\n * @type {FeatureOnSignature}\n */\n this.on;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.once;\n\n /***\n * @type {FeatureOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = undefined;\n\n /**\n * @type {string}\n * @private\n */\n this.geometryName_ = 'geometry';\n\n /**\n * User provided style.\n * @private\n * @type {import(\"./style/Style.js\").StyleLike}\n */\n this.style_ = null;\n\n /**\n * @private\n * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n */\n this.styleFunction_ = undefined;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.geometryChangeKey_ = null;\n\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n\n if (geometryOrProperties) {\n if (\n typeof (\n /** @type {?} */ (geometryOrProperties).getSimplifiedGeometry\n ) === 'function'\n ) {\n const geometry = /** @type {Geometry} */ (geometryOrProperties);\n this.setGeometry(geometry);\n } else {\n /** @type {Object} */\n const properties = geometryOrProperties;\n this.setProperties(properties);\n }\n }\n }\n\n /**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {Feature} The clone.\n * @api\n */\n clone() {\n const clone = /** @type {Feature} */ (\n new Feature(this.hasProperties() ? this.getProperties() : null)\n );\n clone.setGeometryName(this.getGeometryName());\n const geometry = this.getGeometry();\n if (geometry) {\n clone.setGeometry(/** @type {Geometry} */ (geometry.clone()));\n }\n const style = this.getStyle();\n if (style) {\n clone.setStyle(style);\n }\n return clone;\n }\n\n /**\n * Get the feature's default geometry. A feature may have any number of named\n * geometries. The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n * @return {Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\n getGeometry() {\n return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link module:ol/Feature~Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * Get the name of the feature's default geometry. By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n * for this feature.\n * @api\n */\n getGeometryName() {\n return this.geometryName_;\n }\n\n /**\n * Get the feature's style. Will return what was provided to the\n * {@link module:ol/Feature~Feature#setStyle} method.\n * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n * @api\n */\n getStyle() {\n return this.style_;\n }\n\n /**\n * Get the feature's style function.\n * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\n getStyleFunction() {\n return this.styleFunction_;\n }\n\n /**\n * @private\n */\n handleGeometryChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleGeometryChanged_() {\n if (this.geometryChangeKey_) {\n unlistenByKey(this.geometryChangeKey_);\n this.geometryChangeKey_ = null;\n }\n const geometry = this.getGeometry();\n if (geometry) {\n this.geometryChangeKey_ = listen(\n geometry,\n EventType.CHANGE,\n this.handleGeometryChange_,\n this\n );\n }\n this.changed();\n }\n\n /**\n * Set the default geometry for the feature. This will update the property\n * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n * @param {Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\n setGeometry(geometry) {\n this.set(this.geometryName_, geometry);\n }\n\n /**\n * Set the style for the feature to override the layer style. This can be a\n * single style object, an array of styles, or a function that takes a\n * resolution and returns an array of styles. To unset the feature style, call\n * `setStyle()` without arguments or a falsey value.\n * @param {import(\"./style/Style.js\").StyleLike} [style] Style for this feature.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setStyle(style) {\n this.style_ = style;\n this.styleFunction_ = !style ? undefined : createStyleFunction(style);\n this.changed();\n }\n\n /**\n * Set the feature id. The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the\n * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n setId(id) {\n this.id_ = id;\n this.changed();\n }\n\n /**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\n setGeometryName(name) {\n this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.geometryName_ = name;\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.handleGeometryChanged_();\n }\n}\n\n/**\n * Convert the provided object into a feature style function. Functions passed\n * through unchanged. Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array|!import(\"./style/Style.js\").default} obj\n * A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n if (typeof obj === 'function') {\n return obj;\n } else {\n /**\n * @type {Array}\n */\n let styles;\n if (Array.isArray(obj)) {\n styles = obj;\n } else {\n assert(typeof (/** @type {?} */ (obj).getZIndex) === 'function', 41); // Expected an `import(\"./style/Style.js\").Style` or an array of `import(\"./style/Style.js\").Style`\n const style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n styles = [style];\n }\n return function () {\n return styles;\n };\n }\n}\nexport default Feature;\n","/**\n * @module ol/has\n */\n\nconst ua =\n typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport const FIREFOX = ua.includes('firefox');\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.includes('safari') && !ua.includes('chrom');\n\n/**\n * https://bugs.webkit.org/show_bug.cgi?id=237906\n * @type {boolean}\n */\nexport const SAFARI_BUG_237906 =\n SAFARI &&\n (ua.includes('version/15.4') ||\n /cpu (os|iphone os) 15_4 like mac os x/.test(ua));\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.includes('webkit') && !ua.includes('edge');\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.includes('macintosh');\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO =\n typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport const WORKER_OFFSCREEN_CANVAS =\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport const IMAGE_DECODE =\n typeof Image !== 'undefined' && Image.prototype.decode;\n\n/**\n * @type {boolean}\n */\nexport const PASSIVE_EVENT_LISTENERS = (function () {\n let passive = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n } catch (error) {\n // passive not supported\n }\n return passive;\n})();\n","/**\n * @module ol/transform\n */\nimport {WORKER_OFFSCREEN_CANVAS} from './has.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {HTMLElement}\n * @private\n */\nlet transformStringDiv;\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString = 'matrix(' + mat.join(', ') + ')';\n if (WORKER_OFFSCREEN_CANVAS) {\n return transformString;\n }\n const node =\n transformStringDiv || (transformStringDiv = document.createElement('div'));\n node.style.transform = transformString;\n return node.style.transform;\n}\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n } else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n }\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n } else {\n return extent.slice();\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n } else {\n return [minX, minY, maxX, maxY];\n }\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n assert(false, 13); // Invalid corner\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n } else {\n return extent;\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n } else if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n } else if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj.get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4.register} function.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n let transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n","/**\n * @module ol/string\n */\n\n/**\n * @param {number} number Number to be formatted\n * @param {number} width The desired width\n * @param {number} [precision] Precision of the output string (i.e. number of decimal places)\n * @return {string} Formatted string\n */\nexport function padNumber(number, width, precision) {\n const numberString =\n precision !== undefined ? number.toFixed(precision) : '' + number;\n let decimal = numberString.indexOf('.');\n decimal = decimal === -1 ? numberString.length : decimal;\n return decimal > width\n ? numberString\n : new Array(1 + width - decimal).join('0') + numberString;\n}\n\n/**\n * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js\n * @param {string|number} v1 First version\n * @param {string|number} v2 Second version\n * @return {number} Value\n */\nexport function compareVersions(v1, v2) {\n const s1 = ('' + v1).split('.');\n const s2 = ('' + v2).split('.');\n\n for (let i = 0; i < Math.max(s1.length, s2.length); i++) {\n const n1 = parseInt(s1[i] || '0', 10);\n const n2 = parseInt(s2[i] || '0', 10);\n\n if (n1 > n2) {\n return 1;\n }\n if (n2 > n1) {\n return -1;\n }\n }\n\n return 0;\n}\n","/**\n * @module ol/coordinate\n */\nimport {getWidth} from './extent.js';\nimport {modulo, toFixed} from './math.js';\nimport {padNumber} from './string.js';\n\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n\n const x = x0 + (r * dx) / d;\n const y = y0 + (r * dy) / d;\n\n return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along =\n dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY();\n * const out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY(2);\n * const out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, fractionDigits);\n }\n );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, fractionDigits) {\n const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const decimals = fractionDigits || 0;\n\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = toFixed(x - deg * 3600 - min * 60, decimals);\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n let hdms = deg + '\\u00b0';\n if (min !== 0 || sec !== 0) {\n hdms += ' ' + padNumber(min, 2) + '\\u2032';\n }\n if (sec !== 0) {\n hdms += ' ' + padNumber(sec, 2, decimals) + '\\u2033';\n }\n if (normalizedDegrees !== 0) {\n hdms += ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n }\n\n return hdms;\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(fractionDigits))\n .replace('{y}', coordinate[1].toFixed(fractionDigits));\n } else {\n return '';\n }\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, fractionDigits) {\n if (coordinate) {\n return (\n degreesToStringHDMS('NS', coordinate[1], fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], fractionDigits)\n );\n } else {\n return '';\n }\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, fractionDigits) {\n return format(coordinate, '{x}, {y}', fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n const worldWidth = getWidth(projection.getExtent());\n const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, sourceExtentWidth) {\n const projectionExtent = projection.getExtent();\n let worldsAway = 0;\n if (\n projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])\n ) {\n sourceExtentWidth = sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor(\n (coordinate[0] - projectionExtent[0]) / sourceExtentWidth\n );\n }\n return worldsAway;\n}\n","/**\n * @module ol/sphere\n */\nimport {toDegrees, toRadians} from './math.js';\n\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the geometry. By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius. By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport const DEFAULT_RADIUS = 6371008.8;\n\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} [radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, radius) {\n radius = radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lat2 = toRadians(c2[1]);\n const deltaLatBy2 = (lat2 - lat1) / 2;\n const deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n const a =\n Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n Math.sin(deltaLonBy2) *\n Math.sin(deltaLonBy2) *\n Math.cos(lat1) *\n Math.cos(lat2);\n return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n let length = 0;\n for (let i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n length += getDistance(coordinates[i], coordinates[i + 1], radius);\n }\n return length;\n}\n\n/**\n * Get the spherical length of a geometry. This length is the sum of the\n * great circle distances between coordinates. For polygons, the length is\n * the sum of all rings. For points, the length is zero. For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [options] Options for the\n * length calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, options) {\n options = options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== 'GeometryCollection') {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let length = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case 'Point':\n case 'MultiPoint': {\n break;\n }\n case 'LineString':\n case 'LinearRing': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n length = getLengthInternal(coordinates, radius);\n break;\n }\n case 'MultiLineString':\n case 'Polygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n length += getLengthInternal(coordinates[i], radius);\n }\n break;\n }\n case 'MultiPolygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n for (j = 0, jj = coords.length; j < jj; ++j) {\n length += getLengthInternal(coords[j], radius);\n }\n }\n break;\n }\n case 'GeometryCollection': {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n length += getLength(geometries[i], options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return length;\n}\n\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n let area = 0;\n const len = coordinates.length;\n let x1 = coordinates[len - 1][0];\n let y1 = coordinates[len - 1][1];\n for (let i = 0; i < len; i++) {\n const x2 = coordinates[i][0];\n const y2 = coordinates[i][1];\n area +=\n toRadians(x2 - x1) *\n (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n x1 = x2;\n y1 = y2;\n }\n return (area * radius * radius) / 2.0;\n}\n\n/**\n * Get the spherical area of a geometry. This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [options] Options for the area\n * calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, options) {\n options = options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== 'GeometryCollection') {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let area = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case 'Point':\n case 'MultiPoint':\n case 'LineString':\n case 'MultiLineString':\n case 'LinearRing': {\n break;\n }\n case 'Polygon': {\n coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (\n geometry\n ).getCoordinates();\n area = Math.abs(getAreaInternal(coordinates[0], radius));\n for (i = 1, ii = coordinates.length; i < ii; ++i) {\n area -= Math.abs(getAreaInternal(coordinates[i], radius));\n }\n break;\n }\n case 'MultiPolygon': {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n area += Math.abs(getAreaInternal(coords[0], radius));\n for (j = 1, jj = coords.length; j < jj; ++j) {\n area -= Math.abs(getAreaInternal(coords[j], radius));\n }\n }\n break;\n }\n case 'GeometryCollection': {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n area += getArea(geometries[i], options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return area;\n}\n\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n * point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number} [radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, radius) {\n radius = radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lon1 = toRadians(c1[0]);\n const dByR = distance / radius;\n const lat = Math.asin(\n Math.sin(lat1) * Math.cos(dByR) +\n Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)\n );\n const lon =\n lon1 +\n Math.atan2(\n Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),\n Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)\n );\n return [toDegrees(lon), toDegrees(lat)];\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array, Array=, number=): Array} TransformFunction\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output, dimension) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output, dimension) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n return typeof projectionLike === 'string'\n ? getProj(/** @type {string} */ (projectionLike))\n : /** @type {Projection} */ (projectionLike) || null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326')\n );\n if (toEPSG4326 === identityTransform && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n } else if (typeof projection === 'string') {\n return get(projection);\n } else {\n return /** @type {Projection} */ (projection);\n }\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [output] Output.\n * @param {number} [dimension] Dimension.\n * @return {Array} Output.\n */\n function (input, output, dimension) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += dimension) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = dimension; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward)\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse)\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857'\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326'\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n } else {\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n * object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(\n sourceProjection,\n destinationProjection\n) {\n const sourceCode = sourceProjection.getCode();\n const destinationCode = destinationProjection.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods. This includes all API\n * methods except for those interacting with tile grids.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n // eslint-disable-next-line no-console\n console.warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.'\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(sourceProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[sourceUnits]) / METERS_PER_UNIT[userUnits]\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(destProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[userUnits]) / METERS_PER_UNIT[sourceUnits]\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326\n );\n}\n\naddCommon();\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport {abstract} from '../util.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createEmpty,\n createOrUpdateEmpty,\n getHeight,\n returnOrUpdate,\n} from '../extent.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from './flat/transform.js';\n\n/**\n * @typedef {'XY' | 'XYZ' | 'XYM' | 'XYZM'} GeometryLayout\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available.\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Circle'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, or `'Circle'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n constructor() {\n super();\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = createEmpty();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n this.simplifyTransformedInternal = memoizeOne(function (\n revision,\n squaredTolerance,\n transform\n ) {\n if (!transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n const clone = this.clone();\n clone.applyTransform(transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this.simplifyTransformedInternal(\n this.getRevision(),\n squaredTolerance,\n transform\n );\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n clone() {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n return abstract();\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n }\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, closestPoint) {\n closestPoint = closestPoint ? closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return abstract();\n }\n\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n getExtent(extent) {\n if (this.extentRevision_ != this.getRevision()) {\n const extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n abstract();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, sy, anchor) {\n abstract();\n }\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return abstract();\n }\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {Type} Geometry type.\n */\n getType() {\n return abstract();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n applyTransform(transformFn) {\n abstract();\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {\n return abstract();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n abstract();\n }\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n const sourceProj = getProjection(source);\n const transformFn =\n sourceProj.getUnits() == 'tile-pixels'\n ? function (inCoordinates, outCoordinates, stride) {\n const pixelExtent = sourceProj.getExtent();\n const projectedExtent = sourceProj.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0\n );\n transform2D(\n inCoordinates,\n 0,\n inCoordinates.length,\n stride,\n tmpTransform,\n outCoordinates\n );\n return getTransform(sourceProj, destination)(\n inCoordinates,\n outCoordinates,\n stride\n );\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n\nexport default Geometry;\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport {abstract} from '../util.js';\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport {rotate, scale, transform2D, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n constructor() {\n super();\n\n /**\n * @protected\n * @type {import(\"./Geometry.js\").GeometryLayout}\n */\n this.layout = 'XY';\n\n /**\n * @protected\n * @type {number}\n */\n this.stride = 2;\n\n /**\n * @protected\n * @type {Array}\n */\n this.flatCoordinates = null;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromFlatCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n extent\n );\n }\n\n /**\n * @abstract\n * @return {Array<*> | null} Coordinates.\n */\n getCoordinates() {\n return abstract();\n }\n\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n getFirstCoordinate() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getFlatCoordinates() {\n return this.flatCoordinates;\n }\n\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n getLastCoordinate() {\n return this.flatCoordinates.slice(\n this.flatCoordinates.length - this.stride\n );\n }\n\n /**\n * Return the {@link import(\"./Geometry.js\").GeometryLayout layout} of the geometry.\n * @return {import(\"./Geometry.js\").GeometryLayout} Layout.\n * @api\n */\n getLayout() {\n return this.layout;\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (\n squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)\n ) {\n return this;\n }\n\n const simplifiedGeometry =\n this.getSimplifiedGeometryInternal(squaredTolerance);\n const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n } else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n return this;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride;\n }\n\n /**\n * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n setFlatCoordinates(layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n }\n\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n setCoordinates(coordinates, layout) {\n abstract();\n }\n\n /**\n * @param {import(\"./Geometry.js\").GeometryLayout|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n setLayout(layout, coordinates, nesting) {\n /** @type {number} */\n let stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n } else {\n for (let i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = 'XY';\n this.stride = 2;\n return;\n } else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n rotate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n angle,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, sy, anchor) {\n if (sy === undefined) {\n sy = sx;\n }\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n scale(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n sx,\n sy,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n translate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n deltaX,\n deltaY,\n flatCoordinates\n );\n this.changed();\n }\n }\n}\n\n/**\n * @param {number} stride Stride.\n * @return {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n let layout;\n if (stride == 2) {\n layout = 'XY';\n } else if (stride == 3) {\n layout = 'XYZ';\n } else if (stride == 4) {\n layout = 'XYZM';\n }\n return /** @type {import(\"./Geometry.js\").GeometryLayout} */ (layout);\n}\n\n/**\n * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n let stride;\n if (layout == 'XY') {\n stride = 2;\n } else if (layout == 'XYZ' || layout == 'XYM') {\n stride = 3;\n } else if (layout == 'XYZM') {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, dest) {\n const flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n } else {\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n transform,\n dest\n );\n }\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(\n flatCoordinates,\n offset1,\n offset2,\n stride,\n x,\n y,\n closestPoint\n) {\n const x1 = flatCoordinates[offset1];\n const y1 = flatCoordinates[offset1 + 1];\n const dx = flatCoordinates[offset2] - x1;\n const dy = flatCoordinates[offset2 + 1] - y1;\n let offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n } else {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n } else if (t > 0) {\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(\n flatCoordinates[offset1 + i],\n flatCoordinates[offset2 + i],\n t\n );\n }\n closestPoint.length = stride;\n return;\n } else {\n offset = offset1;\n }\n }\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n const squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n ends,\n stride,\n max\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n endss,\n stride,\n max\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n) {\n if (offset == end) {\n return minSquaredDistance;\n }\n let i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[offset],\n flatCoordinates[offset + 1]\n );\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n let index = offset + stride;\n while (index < end) {\n assignClosest(\n flatCoordinates,\n index - stride,\n index,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n } else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(\n ((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0,\n 1\n );\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(\n flatCoordinates,\n end - stride,\n offset,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n) {\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n minSquaredDistance = assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = end;\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(\n flatCoordinates,\n offset,\n endss,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n) {\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n","/**\n * @module ol/geom/flat/deflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(\n flatCoordinates,\n offset,\n coordinates,\n stride\n) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n const coordinate = coordinates[i];\n for (let j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array} [ends] Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatess,\n stride,\n ends\n) {\n ends = ends ? ends : [];\n let i = 0;\n for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n const end = deflateCoordinates(\n flatCoordinates,\n offset,\n coordinatess[j],\n stride\n );\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>} [endss] Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss,\n stride,\n endss\n) {\n endss = endss ? endss : [];\n let i = 0;\n for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n const ends = deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss[j],\n stride,\n endss[i]\n );\n if (ends.length === 0) {\n ends[0] = offset;\n }\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/geom/flat/inflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array} [coordinates] Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinates\n) {\n coordinates = coordinates !== undefined ? coordinates : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>} [coordinatess] Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatess\n) {\n coordinatess = coordinatess !== undefined ? coordinatess : [];\n let i = 0;\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n const end = ends[j];\n coordinatess[i++] = inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinatess[i]\n );\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array>>} [coordinatesss]\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n coordinatesss\n) {\n coordinatesss = coordinatesss !== undefined ? coordinatesss : [];\n let i = 0;\n for (let j = 0, jj = endss.length; j < jj; ++j) {\n const ends = endss[j];\n coordinatesss[i++] =\n ends.length === 1 && ends[0] === offset\n ? []\n : inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatesss[i]\n );\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n","/**\n * @module ol/geom/flat/area\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n let twiceArea = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n twiceArea += y1 * x2 - x1 * y2;\n x1 = x2;\n y1 = y2;\n }\n return twiceArea / 2;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n let area = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n let area = 0;\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n","/**\n * @module ol/geom/LinearRing\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {douglasPeucker} from './flat/simplify.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {linearRing as linearRingArea} from './flat/area.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `layout` are also accepted.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n constructor(coordinates, layout) {\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n layout,\n /** @type {Array} */ (coordinates)\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n layout\n );\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n */\n clone() {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n maxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingArea(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return new LinearRing(simplifiedFlatCoordinates, 'XY');\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'LinearRing';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return false;\n }\n\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Point\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {containsXY, createOrUpdateFromCoordinate} from '../extent.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n constructor(coordinates, layout) {\n super();\n this.setCoordinates(coordinates, layout);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n */\n clone() {\n const point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[0],\n flatCoordinates[1]\n );\n if (squaredDistance < minSquaredDistance) {\n const stride = this.stride;\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n */\n getCoordinates() {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Point';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n }\n\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default Point;\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1]\n );\n }\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {linearRingsContainsXY} from './contains.js';\nimport {numberSafeCompareFunction} from '../../array.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n } else {\n return [pointX, y, maxSegmentLength];\n }\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters\n) {\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/geom/flat/segments\n */\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n let ret;\n offset += stride;\n for (; offset < end; offset += stride) {\n ret = callback(\n flatCoordinates.slice(offset - stride, offset),\n flatCoordinates.slice(offset, offset + stride)\n );\n if (ret) {\n return ret;\n }\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {\n containsExtent,\n createEmpty,\n extendFlatCoordinates,\n intersects,\n intersectsSegment,\n} from '../../extent.js';\nimport {forEach as forEachSegment} from './segments.js';\nimport {linearRingContainsExtent, linearRingContainsXY} from './contains.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const coordinatesExtent = extendFlatCoordinates(\n createEmpty(),\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(\n flatCoordinates,\n offset,\n end,\n stride,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n }\n );\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n if (\n intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)\n ) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[3]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[3]\n )\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsExtent(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n if (\n !intersectsLineString(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n extent\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)\n ) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (let i = 0; i < stride; ++i) {\n const tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to contruct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n if (!linearRingIsClockwise(flatCoordinates, offset, end, 2)) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/Polygon\n */\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {closestSquaredDistanceXY, getCenter} from '../extent.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {getInteriorPointOfArray} from './flat/interiorpoint.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {intersectsLinearRingArray} from './flat/intersectsextent.js';\nimport {linearRingsAreOriented, orientLinearRings} from './flat/orient.js';\nimport {linearRings as linearRingsArea} from './flat/area.js';\nimport {linearRingsContainsXY} from './flat/contains.js';\nimport {modulo} from '../math.js';\nimport {quantizeArray} from './flat/simplify.js';\nimport {offset as sphereOffset} from '../sphere.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n /**\n * @param {!Array>|!Array} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `layout` and `ends` are also accepted.)\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @param {Array} [ends] Ends (for internal use with flat coordinates).\n */\n constructor(coordinates, layout, ends) {\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointRevision_ = -1;\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.flatInteriorPoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (layout !== undefined && ends) {\n this.setFlatCoordinates(\n layout,\n /** @type {Array} */ (coordinates)\n );\n this.ends_ = ends;\n } else {\n this.setCoordinates(\n /** @type {Array>} */ (\n coordinates\n ),\n layout\n );\n }\n }\n\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n appendLinearRing(linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n */\n clone() {\n const polygon = new Polygon(\n this.flatCoordinates.slice(),\n this.layout,\n this.ends_.slice()\n );\n polygon.applyProperties(this);\n return polygon;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n arrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n return linearRingsContainsXY(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n x,\n y\n );\n }\n\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingsArea(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride\n );\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean} [right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @api\n */\n getCoordinates(right) {\n let flatCoordinates;\n if (right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, right);\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * @return {Array} Interior point.\n */\n getFlatInteriorPoint() {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n flatCenter,\n 0\n );\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\n }\n\n /**\n * Return an interior point of the polygon.\n * @return {Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoint() {\n return new Point(this.getFlatInteriorPoint(), 'XYM');\n }\n\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n getLinearRingCount() {\n return this.ends_.length;\n }\n\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {LinearRing|null} Linear ring.\n * @api\n */\n getLinearRing(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(\n this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1],\n this.ends_[index]\n ),\n this.layout\n );\n }\n\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n getLinearRings() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const linearRings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const linearRing = new LinearRing(\n flatCoordinates.slice(offset, end),\n layout\n );\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(\n this.orientedFlatCoordinates_,\n 0,\n this.ends_,\n this.stride\n );\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds\n );\n return new Polygon(simplifiedFlatCoordinates, 'XY', simplifiedEnds);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n */\n getType() {\n return 'Polygon';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLinearRingArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.ends_\n );\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\nexport default Polygon;\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices in meters.\n * @param {number} [n] Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number} [sphereRadius] Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, n, sphereRadius) {\n n = n ? n : 32;\n /** @type {Array} */\n const flatCoordinates = [];\n for (let i = 0; i < n; ++i) {\n extend(\n flatCoordinates,\n sphereOffset(center, radius, (2 * Math.PI * i) / n, sphereRadius)\n );\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const flatCoordinates = [\n minX,\n minY,\n minX,\n maxY,\n maxX,\n maxY,\n maxX,\n minY,\n minX,\n minY,\n ];\n return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number} [sides] Number of sides of the polygon. Default is 32.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, sides, angle) {\n sides = sides ? sides : 32;\n const stride = circle.getStride();\n const layout = circle.getLayout();\n const center = circle.getCenter();\n const arrayLength = stride * (sides + 1);\n const flatCoordinates = new Array(arrayLength);\n for (let i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (let j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n const ends = [flatCoordinates.length];\n const polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), angle);\n return polygon;\n}\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, angle) {\n const flatCoordinates = polygon.getFlatCoordinates();\n const stride = polygon.getStride();\n const sides = flatCoordinates.length / stride - 1;\n const startAngle = angle ? angle : 0;\n for (let i = 0; i <= sides; ++i) {\n const offset = i * stride;\n const angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n }\n polygon.changed();\n}\n","/**\n * @module ol/Geolocation\n */\nimport BaseEvent from './events/Event.js';\nimport BaseObject from './Object.js';\nimport EventType from './events/EventType.js';\nimport {circular as circularPolygon} from './geom/Polygon.js';\nimport {\n get as getProjection,\n getTransformFromProjections,\n identityTransform,\n} from './proj.js';\nimport {toRadians} from './math.js';\n\n/**\n * @enum {string}\n */\nconst Property = {\n ACCURACY: 'accuracy',\n ACCURACY_GEOMETRY: 'accuracyGeometry',\n ALTITUDE: 'altitude',\n ALTITUDE_ACCURACY: 'altitudeAccuracy',\n HEADING: 'heading',\n POSITION: 'position',\n PROJECTION: 'projection',\n SPEED: 'speed',\n TRACKING: 'tracking',\n TRACKING_OPTIONS: 'trackingOptions',\n};\n\n/**\n * @classdesc\n * Events emitted on Geolocation error.\n */\nclass GeolocationError extends BaseEvent {\n /**\n * @param {GeolocationPositionError} error error object.\n */\n constructor(error) {\n super(EventType.ERROR);\n\n /**\n * @type {number}\n */\n this.code = error.code;\n\n /**\n * @type {string}\n */\n this.message = error.message;\n }\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [tracking=false] Start Tracking right after\n * instantiation.\n * @property {PositionOptions} [trackingOptions] Tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position_options_interface.\n * @property {import(\"./proj.js\").ProjectionLike} [projection] The projection the position\n * is reported in.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:accuracy'|'change:accuracyGeometry'|'change:altitude'|\n * 'change:altitudeAccuracy'|'change:heading'|'change:position'|'change:projection'|'change:speed'|'change:tracking'|\n * 'change:trackingOptions'} GeolocationObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'error', GeolocationError, Return> &\n * import(\"./Observable\").CombinedOnSignature} GeolocationOnSignature\n */\n\n/**\n * @classdesc\n * Helper class for providing HTML5 Geolocation capabilities.\n * The [Geolocation API](https://www.w3.org/TR/geolocation-API/)\n * is used to locate a user's position.\n *\n * To get notified of position changes, register a listener for the generic\n * `change` event on your instance of {@link module:ol/Geolocation~Geolocation}.\n *\n * Example:\n *\n * const geolocation = new Geolocation({\n * // take the projection to use from the map's view\n * projection: view.getProjection()\n * });\n * // listen to changes in position\n * geolocation.on('change', function(evt) {\n * window.console.log(geolocation.getPosition());\n * });\n *\n * @fires module:ol/events/Event~BaseEvent#event:error\n * @api\n */\nclass Geolocation extends BaseObject {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.on;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.once;\n\n /***\n * @type {GeolocationOnSignature}\n */\n this.un;\n\n options = options || {};\n\n /**\n * The unprojected (EPSG:4326) device position.\n * @private\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.position_ = null;\n\n /**\n * @private\n * @type {import(\"./proj.js\").TransformFunction}\n */\n this.transform_ = identityTransform;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.watchId_ = undefined;\n\n this.addChangeListener(Property.PROJECTION, this.handleProjectionChanged_);\n this.addChangeListener(Property.TRACKING, this.handleTrackingChanged_);\n\n if (options.projection !== undefined) {\n this.setProjection(options.projection);\n }\n if (options.trackingOptions !== undefined) {\n this.setTrackingOptions(options.trackingOptions);\n }\n\n this.setTracking(options.tracking !== undefined ? options.tracking : false);\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.setTracking(false);\n super.disposeInternal();\n }\n\n /**\n * @private\n */\n handleProjectionChanged_() {\n const projection = this.getProjection();\n if (projection) {\n this.transform_ = getTransformFromProjections(\n getProjection('EPSG:4326'),\n projection\n );\n if (this.position_) {\n this.set(Property.POSITION, this.transform_(this.position_));\n }\n }\n }\n\n /**\n * @private\n */\n handleTrackingChanged_() {\n if ('geolocation' in navigator) {\n const tracking = this.getTracking();\n if (tracking && this.watchId_ === undefined) {\n this.watchId_ = navigator.geolocation.watchPosition(\n this.positionChange_.bind(this),\n this.positionError_.bind(this),\n this.getTrackingOptions()\n );\n } else if (!tracking && this.watchId_ !== undefined) {\n navigator.geolocation.clearWatch(this.watchId_);\n this.watchId_ = undefined;\n }\n }\n }\n\n /**\n * @private\n * @param {GeolocationPosition} position position event.\n */\n positionChange_(position) {\n const coords = position.coords;\n this.set(Property.ACCURACY, coords.accuracy);\n this.set(\n Property.ALTITUDE,\n coords.altitude === null ? undefined : coords.altitude\n );\n this.set(\n Property.ALTITUDE_ACCURACY,\n coords.altitudeAccuracy === null ? undefined : coords.altitudeAccuracy\n );\n this.set(\n Property.HEADING,\n coords.heading === null ? undefined : toRadians(coords.heading)\n );\n if (!this.position_) {\n this.position_ = [coords.longitude, coords.latitude];\n } else {\n this.position_[0] = coords.longitude;\n this.position_[1] = coords.latitude;\n }\n const projectedPosition = this.transform_(this.position_);\n this.set(Property.POSITION, projectedPosition);\n this.set(Property.SPEED, coords.speed === null ? undefined : coords.speed);\n const geometry = circularPolygon(this.position_, coords.accuracy);\n geometry.applyTransform(this.transform_);\n this.set(Property.ACCURACY_GEOMETRY, geometry);\n this.changed();\n }\n\n /**\n * @private\n * @param {GeolocationPositionError} error error object.\n */\n positionError_(error) {\n this.dispatchEvent(new GeolocationError(error));\n }\n\n /**\n * Get the accuracy of the position in meters.\n * @return {number|undefined} The accuracy of the position measurement in\n * meters.\n * @observable\n * @api\n */\n getAccuracy() {\n return /** @type {number|undefined} */ (this.get(Property.ACCURACY));\n }\n\n /**\n * Get a geometry of the position accuracy.\n * @return {?import(\"./geom/Polygon.js\").default} A geometry of the position accuracy.\n * @observable\n * @api\n */\n getAccuracyGeometry() {\n return /** @type {?import(\"./geom/Polygon.js\").default} */ (\n this.get(Property.ACCURACY_GEOMETRY) || null\n );\n }\n\n /**\n * Get the altitude associated with the position.\n * @return {number|undefined} The altitude of the position in meters above mean\n * sea level.\n * @observable\n * @api\n */\n getAltitude() {\n return /** @type {number|undefined} */ (this.get(Property.ALTITUDE));\n }\n\n /**\n * Get the altitude accuracy of the position.\n * @return {number|undefined} The accuracy of the altitude measurement in\n * meters.\n * @observable\n * @api\n */\n getAltitudeAccuracy() {\n return /** @type {number|undefined} */ (\n this.get(Property.ALTITUDE_ACCURACY)\n );\n }\n\n /**\n * Get the heading as radians clockwise from North.\n * Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`\n * is set to `true` in the tracking options.\n * @return {number|undefined} The heading of the device in radians from north.\n * @observable\n * @api\n */\n getHeading() {\n return /** @type {number|undefined} */ (this.get(Property.HEADING));\n }\n\n /**\n * Get the position of the device.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The current position of the device reported\n * in the current projection.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the projection associated with the position.\n * @return {import(\"./proj/Projection.js\").default|undefined} The projection the position is\n * reported in.\n * @observable\n * @api\n */\n getProjection() {\n return /** @type {import(\"./proj/Projection.js\").default|undefined} */ (\n this.get(Property.PROJECTION)\n );\n }\n\n /**\n * Get the speed in meters per second.\n * @return {number|undefined} The instantaneous speed of the device in meters\n * per second.\n * @observable\n * @api\n */\n getSpeed() {\n return /** @type {number|undefined} */ (this.get(Property.SPEED));\n }\n\n /**\n * Determine if the device location is being tracked.\n * @return {boolean} The device location is being tracked.\n * @observable\n * @api\n */\n getTracking() {\n return /** @type {boolean} */ (this.get(Property.TRACKING));\n }\n\n /**\n * Get the tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position-options.\n * @return {PositionOptions|undefined} PositionOptions as defined by\n * the [HTML5 Geolocation spec\n * ](https://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n getTrackingOptions() {\n return /** @type {PositionOptions|undefined} */ (\n this.get(Property.TRACKING_OPTIONS)\n );\n }\n\n /**\n * Set the projection to use for transforming the coordinates.\n * @param {import(\"./proj.js\").ProjectionLike} projection The projection the position is\n * reported in.\n * @observable\n * @api\n */\n setProjection(projection) {\n this.set(Property.PROJECTION, getProjection(projection));\n }\n\n /**\n * Enable or disable tracking.\n * @param {boolean} tracking Enable tracking.\n * @observable\n * @api\n */\n setTracking(tracking) {\n this.set(Property.TRACKING, tracking);\n }\n\n /**\n * Set the tracking options.\n * See http://www.w3.org/TR/geolocation-API/#position-options.\n * @param {PositionOptions} options PositionOptions as defined by the\n * [HTML5 Geolocation spec\n * ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n * @observable\n * @api\n */\n setTrackingOptions(options) {\n this.set(Property.TRACKING_OPTIONS, options);\n }\n}\n\nexport default Geolocation;\n","/**\n * @module ol/ImageBase\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {abstract} from './util.js';\n\n/**\n * @abstract\n */\nclass ImageBase extends EventTarget {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default} state State.\n */\n constructor(extent, resolution, pixelRatio, state) {\n super();\n\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = extent;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @protected\n * @type {number|undefined}\n */\n this.resolution = resolution;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state = state;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n getExtent() {\n return this.extent;\n }\n\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n */\n getImage() {\n return abstract();\n }\n\n /**\n * @return {number} PixelRatio.\n */\n getPixelRatio() {\n return this.pixelRatio_;\n }\n\n /**\n * @return {number} Resolution.\n */\n getResolution() {\n return /** @type {number} */ (this.resolution);\n }\n\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n load() {\n abstract();\n }\n}\n\nexport default ImageBase;\n","/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/Image\n */\nimport EventType from './events/EventType.js';\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\nimport {IMAGE_DECODE} from './has.js';\nimport {getHeight} from './extent.js';\nimport {listenOnce, unlistenByKey} from './events.js';\n\n/**\n * A function that takes an {@link module:ol/Image~ImageWrapper} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~ImageWrapper#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(ImageWrapper, string): void} LoadFunction\n * @api\n */\n\nclass ImageWrapper extends ImageBase {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|undefined} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {LoadFunction} imageLoadFunction Image load function.\n */\n constructor(\n extent,\n resolution,\n pixelRatio,\n src,\n crossOrigin,\n imageLoadFunction\n ) {\n super(extent, resolution, pixelRatio, ImageState.IDLE);\n\n /**\n * @private\n * @type {string}\n */\n this.src_ = src;\n\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}\n */\n this.image_ = new Image();\n if (crossOrigin !== null) {\n this.image_.crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state = ImageState.IDLE;\n\n /**\n * @private\n * @type {LoadFunction}\n */\n this.imageLoadFunction_ = imageLoadFunction;\n }\n\n /**\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n handleImageError_() {\n this.state = ImageState.ERROR;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Tracks successful image load.\n *\n * @private\n */\n handleImageLoad_() {\n if (this.resolution === undefined) {\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n this.state = ImageState.LOADED;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @api\n */\n load() {\n if (this.state == ImageState.IDLE || this.state == ImageState.ERROR) {\n this.state = ImageState.LOADING;\n this.changed();\n this.imageLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this)\n );\n }\n }\n\n /**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n */\n setImage(image) {\n this.image_ = image;\n this.resolution = getHeight(this.extent) / this.image_.height;\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n const img = /** @type {HTMLImageElement} */ (image);\n let listening = true;\n let decoding = false;\n let loaded = false;\n\n const listenerKeys = [\n listenOnce(img, EventType.LOAD, function () {\n loaded = true;\n if (!decoding) {\n loadHandler();\n }\n }),\n ];\n\n if (img.src && IMAGE_DECODE) {\n decoding = true;\n img\n .decode()\n .then(function () {\n if (listening) {\n loadHandler();\n }\n })\n .catch(function (error) {\n if (listening) {\n if (loaded) {\n loadHandler();\n } else {\n errorHandler();\n }\n }\n });\n } else {\n listenerKeys.push(listenOnce(img, EventType.ERROR, errorHandler));\n }\n\n return function unlisten() {\n listening = false;\n listenerKeys.forEach(unlistenByKey);\n };\n}\n\nexport default ImageWrapper;\n","/**\n * @module ol/ImageCanvas\n */\nimport ImageBase from './ImageBase.js';\nimport ImageState from './ImageState.js';\n\n/**\n * A function that is called to trigger asynchronous canvas drawing. It is\n * called with a \"done\" callback that should be called when drawing is done.\n * If any error occurs during drawing, the \"done\" callback should be called with\n * that error.\n *\n * @typedef {function(function(Error=): void): void} Loader\n */\n\nclass ImageCanvas extends ImageBase {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Loader} [loader] Optional loader function to\n * support asynchronous canvas drawing.\n */\n constructor(extent, resolution, pixelRatio, canvas, loader) {\n const state = loader !== undefined ? ImageState.IDLE : ImageState.LOADED;\n\n super(extent, resolution, pixelRatio, state);\n\n /**\n * Optional canvas loader function.\n * @type {?Loader}\n * @private\n */\n this.loader_ = loader !== undefined ? loader : null;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = canvas;\n\n /**\n * @private\n * @type {?Error}\n */\n this.error_ = null;\n }\n\n /**\n * Get any error associated with asynchronous rendering.\n * @return {?Error} Any error that occurred during rendering.\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Handle async drawing complete.\n * @param {Error} [err] Any error during drawing.\n * @private\n */\n handleLoad_(err) {\n if (err) {\n this.error_ = err;\n this.state = ImageState.ERROR;\n } else {\n this.state = ImageState.LOADED;\n }\n this.changed();\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.state == ImageState.IDLE) {\n this.state = ImageState.LOADING;\n this.changed();\n this.loader_(this.handleLoad_.bind(this));\n }\n }\n\n /**\n * @return {HTMLCanvasElement} Canvas element.\n */\n getImage() {\n return this.canvas_;\n }\n}\n\nexport default ImageCanvas;\n","import {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\n/**\n * @module ol/dom\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [width] Canvas width.\n * @param {number} [height] Canvas height.\n * @param {Array} [canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [settings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(width, height, canvasPool, settings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n let canvas;\n if (canvasPool && canvasPool.length) {\n canvas = canvasPool.shift();\n } else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(width || 300, height || 300);\n } else {\n canvas = document.createElement('canvas');\n }\n if (width) {\n canvas.width = width;\n }\n if (height) {\n canvas.height = height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (\n canvas.getContext('2d', settings)\n );\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D} context Context.\n */\nexport function releaseCanvas(context) {\n const canvas = context.canvas;\n canvas.width = 1;\n canvas.height = 1;\n context.clearRect(0, 0, 1, 1);\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove.\n * @return {Node|null} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n const oldChildren = node.childNodes;\n\n for (let i = 0; true; ++i) {\n const oldChild = oldChildren[i];\n const newChild = children[i];\n\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n","/**\n * @module ol/ImageTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {listenImage} from './Image.js';\n\nclass ImageTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options} [options] Tile options.\n */\n constructor(tileCoord, state, src, crossOrigin, tileLoadFunction, options) {\n super(tileCoord, state, options);\n\n /**\n * @private\n * @type {?string}\n */\n this.crossOrigin_ = crossOrigin;\n\n /**\n * Image URI\n *\n * @private\n * @type {string}\n */\n this.src_ = src;\n\n this.key = src;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.image_ = new Image();\n if (crossOrigin !== null) {\n this.image_.crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n }\n\n /**\n * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * Sets an HTML image element for this tile (may be a Canvas or preloaded Image).\n * @param {HTMLCanvasElement|HTMLImageElement} element Element.\n */\n setImage(element) {\n this.image_ = element;\n this.state = TileState.LOADED;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n handleImageError_() {\n this.state = TileState.ERROR;\n this.unlistenImage_();\n this.image_ = getBlankImage();\n this.changed();\n }\n\n /**\n * Tracks successful image load.\n *\n * @private\n */\n handleImageLoad_() {\n const image = /** @type {HTMLImageElement} */ (this.image_);\n if (image.naturalWidth && image.naturalHeight) {\n this.state = TileState.LOADED;\n } else {\n this.state = TileState.EMPTY;\n }\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n *\n * To retry loading tiles on failed requests, use a custom `tileLoadFunction`\n * that checks for error status codes and reloads only when the status code is\n * 408, 429, 500, 502, 503 and 504, and only when not too many retries have been\n * made already:\n *\n * ```js\n * const retryCodes = [408, 429, 500, 502, 503, 504];\n * const retries = {};\n * source.setTileLoadFunction((tile, src) => {\n * const image = tile.getImage();\n * fetch(src)\n * .then((response) => {\n * if (retryCodes.includes(response.status)) {\n * retries[src] = (retries[src] || 0) + 1;\n * if (retries[src] <= 3) {\n * setTimeout(() => tile.load(), retries[src] * 1000);\n * }\n * return Promise.reject();\n * }\n * return response.blob();\n * })\n * .then((blob) => {\n * const imageUrl = URL.createObjectURL(blob);\n * image.src = imageUrl;\n * setTimeout(() => URL.revokeObjectURL(imageUrl), 5000);\n * })\n * .catch(() => tile.setState(3)); // error\n * });\n * ```\n *\n * @api\n */\n load() {\n if (this.state == TileState.ERROR) {\n this.state = TileState.IDLE;\n this.image_ = new Image();\n if (this.crossOrigin_ !== null) {\n this.image_.crossOrigin = this.crossOrigin_;\n }\n }\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n this.tileLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this)\n );\n }\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nfunction getBlankImage() {\n const ctx = createCanvasContext2D(1, 1);\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return ctx.canvas;\n}\n\nexport default ImageTile;\n","/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n","/**\n * @module ol/color\n */\nimport {assert} from './asserts.js';\nimport {clamp} from './math.js';\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nconst HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nconst NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n } else {\n return toString(color);\n }\n}\n\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n const el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n const rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n } else {\n return '';\n }\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport const fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n\n /**\n * @const\n * @type {number}\n */\n const MAX_CACHE_SIZE = 1024;\n\n /**\n * @type {Object}\n */\n const cache = {};\n\n /**\n * @type {number}\n */\n let cacheSize = 0;\n\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n let color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n } else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n }\n );\n})();\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n } else {\n return fromString(color);\n }\n}\n\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n let r, g, b, a, color;\n\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n const n = s.length - 1; // number of hex digits\n let d; // number of digits per channel\n if (n <= 4) {\n d = 1;\n } else {\n d = 2;\n }\n const hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n } else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n } else if (s.startsWith('rgba(')) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n } else if (s.startsWith('rgb(')) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n } else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n const a = color[3] === undefined ? 1 : Math.round(color[3] * 100) / 100;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return HEX_COLOR_RE_.test(s) || s.startsWith('rgba(') || s.startsWith('rgb(');\n}\n","/**\n * @module ol/style/IconImageCache\n */\nimport {asString} from '../color.js';\n\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache.shared}.\n */\nclass IconImageCache {\n constructor() {\n /**\n * @type {!Object}\n * @private\n */\n this.cache_ = {};\n\n /**\n * @type {number}\n * @private\n */\n this.cacheSize_ = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.maxCacheSize_ = 32;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.cache_ = {};\n this.cacheSize_ = 0;\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.cacheSize_ > this.maxCacheSize_;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n expire() {\n if (this.canExpireCache()) {\n let i = 0;\n for (const key in this.cache_) {\n const iconImage = this.cache_[key];\n if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n delete this.cache_[key];\n --this.cacheSize_;\n }\n }\n }\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n get(src, crossOrigin, color) {\n const key = getKey(src, crossOrigin, color);\n return key in this.cache_ ? this.cache_[key] : null;\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n */\n set(src, crossOrigin, color, iconImage) {\n const key = getKey(src, crossOrigin, color);\n this.cache_[key] = iconImage;\n ++this.cacheSize_;\n }\n\n /**\n * Set the cache size of the icon cache. Default is `32`. Change this value when\n * your map uses more than 32 different icon images and you are not caching icon\n * styles on the application level.\n * @param {number} maxCacheSize Cache max size.\n * @api\n */\n setSize(maxCacheSize) {\n this.maxCacheSize_ = maxCacheSize;\n this.expire();\n }\n}\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n const colorString = color ? asString(color) : 'null';\n return crossOrigin + ':' + src + ':' + colorString;\n}\n\nexport default IconImageCache;\n\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport const shared = new IconImageCache();\n","/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n MAP: 'map',\n};\n","/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport {abstract} from '../util.js';\nimport {assert} from '../asserts.js';\nimport {clamp} from '../math.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = Object.assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n Object.assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: managed === undefined ? true : managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the visibility of the layer (`true` or `false`).\n * @return {boolean} The visibility of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. The default Z-index is 0.\n * @return {number} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [background] Background color.\n */\n setBackground(background) {\n this.background_ = background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 64); // Layer opacity must be a number\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n","/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered before layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n\n /**\n * Triggered after layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n","/**\n * @module ol/layer/Layer\n */\nimport BaseLayer from './Base.js';\nimport EventType from '../events/EventType.js';\nimport LayerProperty from './Property.js';\nimport RenderEventType from '../render/EventType.js';\nimport {assert} from '../asserts.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {function(import(\"../Map.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../Map.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * Components like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * [layer.setMap()]{@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @api\n */\nclass Layer extends BaseLayer {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n const baseOptions = Object.assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /***\n * @type {LayerOnSignature}\n */\n this.on;\n\n /***\n * @type {LayerOnSignature}\n */\n this.once;\n\n /***\n * @type {LayerOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n /**\n * @private\n * @type {RendererType}\n */\n this.renderer_ = null;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.rendered = false;\n\n // Overwrite default render method with a custom one\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n this.addChangeListener(\n LayerProperty.SOURCE,\n this.handleSourcePropertyChange_\n );\n\n const source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n this.setSource(source);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n array = array ? array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @param {Array} [states] Optional list of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(states) {\n states = states ? states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {SourceType|null} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n }\n\n /**\n * @return {SourceType|null} The source being rendered.\n */\n getRenderSource() {\n return this.getSource();\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? 'undefined' : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this\n );\n }\n this.changed();\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n if (!this.renderer_) {\n return new Promise((resolve) => resolve([]));\n }\n return this.renderer_.getFeatures(pixel);\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n if (!this.renderer_ || !this.rendered) {\n return null;\n }\n return this.renderer_.getData(pixel);\n }\n\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement} The rendered element.\n */\n render(frameState, target) {\n const layerRenderer = this.getRenderer();\n\n if (layerRenderer.prepareFrame(frameState)) {\n this.rendered = true;\n return layerRenderer.renderFrame(frameState, target);\n }\n }\n\n /**\n * Called when a layer is not visible during a map render.\n */\n unrender() {\n this.rendered = false;\n }\n\n /**\n * For use inside the library only.\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMapInternal(map) {\n if (!map) {\n this.unrender();\n }\n this.set(LayerProperty.MAP, map);\n }\n\n /**\n * For use inside the library only.\n * @return {import(\"../Map.js\").default|null} Map.\n */\n getMapInternal() {\n return this.get(LayerProperty.MAP);\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map~Map#addLayer} instead.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(\n map,\n RenderEventType.PRECOMPOSE,\n function (evt) {\n const renderEvent =\n /** @type {import(\"../render/Event.js\").default} */ (evt);\n const layerStatesArray = renderEvent.frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.\n assert(\n !layerStatesArray.some(function (arrayLayerState) {\n return arrayLayerState.layer === layerState.layer;\n }),\n 67\n );\n layerStatesArray.push(layerState);\n },\n this\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * Set the layer source.\n * @param {SourceType|null} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n\n /**\n * Get the renderer for this layer.\n * @return {RendererType|null} The layer renderer.\n */\n getRenderer() {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n }\n\n /**\n * @return {boolean} The layer has a renderer.\n */\n hasRenderer() {\n return !!this.renderer_;\n }\n\n /**\n * Create a renderer for this layer.\n * @return {RendererType} A layer renderer.\n * @protected\n */\n createRenderer() {\n return null;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.renderer_) {\n this.renderer_.dispose();\n delete this.renderer_;\n }\n\n this.setSource(null);\n super.disposeInternal();\n }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n const resolution = viewState.resolution;\n if (\n resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution\n ) {\n return false;\n }\n const zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n","/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {TRUE} from '../functions.js';\nimport {abstract} from '../util.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {getWidth} from '../extent.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {inView} from '../layer/Layer.js';\nimport {wrapX} from '../coordinate.js';\n\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n * @template T\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../Map.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1]\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../Map.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../Map.js\").default} map Map.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n","/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform} [inversePixelTransform] Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../Map.js\").FrameState} [frameState] Frame state.\n * @param {?(CanvasRenderingContext2D|WebGLRenderingContext)} [context] Context.\n */\n constructor(type, inversePixelTransform, frameState, context) {\n super(type);\n\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n this.inversePixelTransform = inversePixelTransform;\n\n /**\n * An object representing the current render frame state.\n * @type {import(\"../Map.js\").FrameState|undefined}\n * @api\n */\n this.frameState = frameState;\n\n /**\n * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n * the context will be the 2D rendering context. For WebGL layers, the context will be the WebGL\n * context.\n * @type {CanvasRenderingContext2D|WebGLRenderingContext|undefined}\n * @api\n */\n this.context = context;\n }\n}\n\nexport default RenderEvent;\n","/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(\n [\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n ].join(''),\n 'i'\n);\nconst fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport const getFontParameters = function (fontSpec) {\n const match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n const style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n const value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport {clear} from '../obj.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {getFontParameters} from '../css.js';\n\n/**\n * @typedef {'Circle' | 'Image' | 'LineString' | 'Polygon' | 'Text' | 'Default'} BuilderType\n */\n\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array} contextInstructions ContextInstructions.\n */\n\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n */\n\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {CanvasTextAlign} [textAlign] TextAlign.\n * @property {import(\"../style/Text.js\").TextJustify} [justify] Justify.\n * @property {CanvasTextBaseline} textBaseline TextBaseline.\n * @property {import(\"../style/Text.js\").TextPlacement} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array} [padding] Padding.\n */\n\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array} coordinates The array of all coordinates.\n * @property {!Object} [textStates] The text states (decluttering).\n * @property {!Object} [fillStates] The fill states (decluttering).\n * @property {!Object} [strokeStates] The stroke states (decluttering).\n */\n\n/**\n * @typedef {Object} DeclutterImageWithText\n */\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFont = '10px sans-serif';\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultFillStyle = '#000';\n\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport const defaultLineCap = 'round';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultLineDash = [];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineDashOffset = 0;\n\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport const defaultLineJoin = 'round';\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultMiterLimit = 10;\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultStrokeStyle = '#000';\n\n/**\n * @const\n * @type {CanvasTextAlign}\n */\nexport const defaultTextAlign = 'center';\n\n/**\n * @const\n * @type {CanvasTextBaseline}\n */\nexport const defaultTextBaseline = 'middle';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultPadding = [0, 0, 0, 0];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineWidth = 1;\n\n/**\n * @type {BaseObject}\n */\nexport const checkedFonts = new BaseObject();\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet measureContext = null;\n\n/**\n * @type {string}\n */\nlet measureFont;\n\n/**\n * @type {!Object}\n */\nexport const textHeights = {};\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport const registerFont = (function () {\n const retries = 100;\n const size = '32px ';\n const referenceFonts = ['monospace', 'serif'];\n const len = referenceFonts.length;\n const text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n let interval, referenceWidth;\n\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n let available = true;\n for (let i = 0; i < len; ++i) {\n const referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(\n fontStyle + ' ' + fontWeight + ' ' + size + referenceFont,\n text\n );\n if (fontFamily != referenceFont) {\n const width = measureTextWidth(\n fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont,\n text\n );\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n\n function check() {\n let done = true;\n const fonts = checkedFonts.getKeys();\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n const font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n } else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n\n return function (fontSpec) {\n const font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n const families = font.families;\n for (let i = 0, ii = families.length; i < ii; ++i) {\n const family = families[i];\n const key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport const measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n let measureElement;\n return function (fontSpec) {\n let height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n const font = getFontParameters(fontSpec);\n const metrics = measureText(fontSpec, 'Žg');\n const lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n } else {\n if (!measureElement) {\n measureElement = document.createElement('div');\n measureElement.innerHTML = 'M';\n measureElement.style.minHeight = '0';\n measureElement.style.maxHeight = 'none';\n measureElement.style.height = 'auto';\n measureElement.style.padding = '0';\n measureElement.style.border = 'none';\n measureElement.style.position = 'absolute';\n measureElement.style.display = 'block';\n measureElement.style.left = '-99999px';\n }\n measureElement.style.font = fontSpec;\n document.body.appendChild(measureElement);\n height = measureElement.offsetHeight;\n document.body.removeChild(measureElement);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n const width = text\n .split('\\n')\n .reduce((prev, curr) => Math.max(prev, measureTextWidth(font, curr)), 0);\n cache[text] = width;\n return width;\n}\n\n/**\n * @param {TextState} baseStyle Base style.\n * @param {Array} chunks Text chunks to measure.\n * @return {{width: number, height: number, widths: Array, heights: Array, lineWidths: Array}}} Text metrics.\n */\nexport function getTextDimensions(baseStyle, chunks) {\n const widths = [];\n const heights = [];\n const lineWidths = [];\n let width = 0;\n let lineWidth = 0;\n let height = 0;\n let lineHeight = 0;\n for (let i = 0, ii = chunks.length; i <= ii; i += 2) {\n const text = chunks[i];\n if (text === '\\n' || i === ii) {\n width = Math.max(width, lineWidth);\n lineWidths.push(lineWidth);\n lineWidth = 0;\n height += lineHeight;\n continue;\n }\n const font = chunks[i + 1] || baseStyle.font;\n const currentWidth = measureTextWidth(font, text);\n widths.push(currentWidth);\n lineWidth += currentWidth;\n const currentHeight = measureTextHeight(font);\n heights.push(currentHeight);\n lineHeight = Math.max(lineHeight, currentHeight);\n }\n return {width, height, widths, heights, lineWidths};\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(\n context,\n transform,\n opacity,\n labelOrImage,\n originX,\n originY,\n w,\n h,\n x,\n y,\n scale\n) {\n context.save();\n\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n\n if (/** @type {*} */ (labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n } else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n 0,\n 0,\n w,\n h\n );\n } else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n x,\n y,\n w * scale[0],\n h * scale[1]\n );\n }\n\n context.restore();\n}\n\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n const contextInstructions = label.contextInstructions;\n for (let i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(\n context,\n contextInstructions[i + 1]\n );\n } else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n","/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport {inView} from '../layer/Layer.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {replaceChildren} from '../dom.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText.bind(map)\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n /**\n * @type {Array}\n */\n const declutterLayers = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != 'ready' && sourceState != 'undefined')\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(\n /** @type {import(\"../layer/BaseVector.js\").default} */ (layer)\n );\n }\n }\n for (let i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n}\n\nexport default CompositeMapRenderer;\n","/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\nimport {getIntersection} from '../extent.js';\nimport {getUid} from '../util.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} EventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {EventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|Collection} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [options] Layer options.\n */\n constructor(options) {\n options = options || {};\n const baseOptions = /** @type {Options} */ (Object.assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(typeof (/** @type {?} */ (layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this)\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this)\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = collectionEvent.element;\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = collectionEvent.element;\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!Collection} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!Collection} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!Collection} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n array = array !== undefined ? array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If dest is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [dest] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(dest) {\n const states = dest !== undefined ? dest : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!dest && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return 'ready';\n }\n}\n\nexport default LayerGroup;\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {?import(\"./Map.js\").FrameState} [frameState] Frame state.\n */\n constructor(type, map, frameState) {\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {import(\"./Map.js\").default}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./Map.js\").FrameState}\n * @api\n */\n this.frameState = frameState !== undefined ? frameState : null;\n }\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nclass MapBrowserEvent extends MapEvent {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [dragging] Is the map currently being dragged?\n * @param {import(\"./Map.js\").FrameState} [frameState] Frame state.\n * @param {Array} [activePointers] Active pointers.\n */\n constructor(type, map, originalEvent, dragging, frameState, activePointers) {\n super(type, map, frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n this.originalEvent = originalEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n this.pixel_ = null;\n\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.coordinate_ = null;\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = dragging !== undefined ? dragging : false;\n\n /**\n * @type {Array|undefined}\n */\n this.activePointers = activePointers;\n }\n\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get pixel() {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n }\n set pixel(pixel) {\n this.pixel_ = pixel;\n }\n\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get coordinate() {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n }\n set coordinate(coordinate) {\n this.coordinate_ = coordinate;\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n preventDefault() {\n super.preventDefault();\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n stopPropagation() {\n super.stopPropagation();\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n }\n}\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n","/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {VOID} from './functions.js';\nimport {listen, unlistenByKey} from './events.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./Map.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {any}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayMoveEvent_,\n this\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n }.bind(this),\n 250\n );\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (\n event.type == MapBrowserEventType.POINTERDOWN ||\n event.type == MapBrowserEventType.POINTERMOVE\n ) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = Object.values(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n\n // Store a copy of the down event\n this.down_ = /** @type {PointerEvent} */ ({});\n for (const property in pointerEvent) {\n const value = pointerEvent[property];\n this.down_[property] = typeof value === 'function' ? VOID : value;\n }\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this\n )\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this\n )\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_,\n undefined,\n this.activePointers_\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n this.map_,\n pointerEvent,\n dragging\n )\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\n\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n if (state !== TileState.ERROR) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n let state, tile, tileKey;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n","/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n","/**\n * @module ol/tilegrid/common\n */\n\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport const DEFAULT_MAX_ZOOM = 42;\n\n/**\n * Default tile size.\n * @type {number}\n */\nexport const DEFAULT_TILE_SIZE = 256;\n","/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @param {Array} [centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, isMoving, centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = centerShift ? centerShift[0] : 0;\n const shiftY = centerShift ? centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n","/**\n * @module ol/resolutionconstraint\n */\nimport {clamp} from './math.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {linearFindNearest} from './array.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n smooth,\n maxExtent,\n showFullExtent\n) {\n smooth = smooth !== undefined ? smooth : true;\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [minResolution] Minimum resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent\n) {\n smooth = smooth !== undefined ? smooth : true;\n minResolution = minResolution !== undefined ? minResolution : 0;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent\n) {\n smooth = smooth !== undefined ? smooth : true;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent\n )\n : maxResolution;\n\n if (!smooth || !isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} [tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(tolerance) {\n tolerance = tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, isMoving) {\n if (isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n if (Math.abs(rotation) <= tolerance) {\n return 0;\n } else {\n return rotation;\n }\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {VOID} from './functions.js';\nimport {\n add as addCoordinate,\n equals as coordinatesEqual,\n equals,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {assert} from './asserts.js';\nimport {none as centerNone, createExtent} from './centerconstraint.js';\nimport {clamp, modulo} from './math.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {linearFindNearest} from './array.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center.\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [options] View options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n options = Object.assign({}, options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.projection) {\n disableCoordinateWarning();\n }\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = Object.assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenter();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return Object.assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = Object.assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection()\n );\n }\n if (options.anchor) {\n options = Object.assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection()\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this)\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(rotation) {\n const size = this.viewportSize_;\n if (rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)),\n Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation)),\n ];\n } else {\n return size;\n }\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(size) {\n this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(hints) {\n if (hints !== undefined) {\n hints[0] = this.hints_[0];\n hints[1] = this.hints_[1];\n return hints;\n } else {\n return this.hints_.slice();\n }\n }\n\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(size) {\n const extent = this.calculateExtentInternal(size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(size) {\n size = size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 1); // The view center is not defined\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n size\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, size) {\n size = size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(power) {\n power = power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(power) {\n const logPower = Math.log(power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(rotation) {\n let size = this.getViewportSize_(rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n } else {\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [options] Options.\n * @api\n */\n fit(geometryOrExtent, options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 24\n ); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection()\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [options] Options.\n */\n fitInternal(geometry, options) {\n options = options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation()\n )\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving\n );\n\n if (anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, anchor) {\n if (anchor) {\n anchor = fromUserCoordinate(anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n */\n adjustRotationInternal(delta, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving\n );\n if (anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(doNotCancelAnims, forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [duration] The animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n resolveConstraints(duration, resolutionDirection, anchor) {\n duration = duration !== undefined ? duration : 200;\n const direction = resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n endInteraction(duration, resolutionDirection, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.endInteractionInternal(duration, resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n endInteractionInternal(duration, resolutionDirection, anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n\n this.resolveConstraints(duration, resolutionDirection, anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n targetResolution || this.getResolution(),\n size\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, direction)\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, direction) {\n direction = direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor)\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n } else if (constrainRotation === false) {\n return rotationNone;\n } else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n } else {\n return rotationNone;\n }\n } else {\n return disable;\n }\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n","/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport {VOID} from '../functions.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {removeNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n removeNode(this.element);\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this)\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n","/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {equals} from '../array.js';\nimport {inView} from '../layer/Layer.js';\nimport {removeChildren, replaceNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [options] Attribution options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n const lookup = {};\n\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n const visibleAttributions = [];\n\n let collapsible = true;\n const layerStatesArray = frameState.layerStatesArray;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n\n const source = /** @type {import(\"../layer/Layer.js\").default} */ (\n layerState.layer\n ).getSource();\n if (!source) {\n continue;\n }\n\n const attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n\n const attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n\n if (Array.isArray(attributions)) {\n for (let j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n } else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n }\n\n /**\n * @private\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = this.collectSourceAttributions_(frameState);\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n","/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [options] Rotate options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [options] Zoom options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n","/**\n * @module ol/control/defaults\n */\nimport Attribution from './Attribution.js';\nimport Collection from '../Collection.js';\nimport Rotate from './Rotate.js';\nimport Zoom from './Zoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const controls = new Collection();\n\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n\n const attributionControl =\n options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n\n return controls;\n}\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport {easeOut, linear} from '../easing.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} InteractionOnSignature\n */\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n /**\n * @param {InteractionOptions} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {InteractionOnSignature}\n */\n this.on;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.once;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.un;\n\n if (options && options.handleEvent) {\n this.handleEvent = options.handleEvent;\n }\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n this.setActive(true);\n }\n\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n getActive() {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n }\n\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n return true;\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(active) {\n this.set(InteractionProperty.ACTIVE, active);\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n this.map_ = map;\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [duration] Duration.\n */\nexport function pan(view, delta, duration) {\n const currentCenter = view.getCenterInternal();\n if (currentCenter) {\n const center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: duration !== undefined ? duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] Anchor coordinate in the user projection.\n * @param {number} [duration] Duration.\n */\nexport function zoomByDelta(view, delta, anchor, duration) {\n const currentZoom = view.getZoom();\n\n if (currentZoom === undefined) {\n return;\n }\n\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n const newResolution = view.getResolutionForZoom(newZoom);\n\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: anchor,\n duration: duration !== undefined ? duration : 250,\n easing: easeOut,\n });\n}\n\nexport default Interaction;\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nclass PointerInteraction extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)\n );\n\n if (options.handleDownEvent) {\n this.handleDownEvent = options.handleDownEvent;\n }\n\n if (options.handleDragEvent) {\n this.handleDragEvent = options.handleDragEvent;\n }\n\n if (options.handleMoveEvent) {\n this.handleMoveEvent = options.handleMoveEvent;\n }\n\n if (options.handleUpEvent) {\n this.handleUpEvent = options.handleUpEvent;\n }\n\n if (options.stopDown) {\n this.stopDown = options.stopDown;\n }\n\n /**\n * @type {boolean}\n * @protected\n */\n this.handlingDownUpSequence = false;\n\n /**\n * @type {Array}\n * @protected\n */\n this.targetPointers = [];\n }\n\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n getPointerCount() {\n return this.targetPointers.length;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleDownEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleDragEvent(mapBrowserEvent) {}\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n\n let stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n const handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n } else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n const handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n }\n\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleMoveEvent(mapBrowserEvent) {}\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleUpEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n stopDown(handled) {\n return handled;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n updateTrackedPointers_(mapBrowserEvent) {\n if (mapBrowserEvent.activePointers) {\n this.targetPointers = mapBrowserEvent.activePointers;\n }\n }\n}\n\n/**\n * @param {Array} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n const length = pointerEvents.length;\n let clientX = 0;\n let clientY = 0;\n for (let i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return [clientX / length, clientY / length];\n}\n\nexport default PointerInteraction;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const activeElement = event.map.getOwnerDocument().activeElement;\n return targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return (\n tagName !== 'INPUT' &&\n tagName !== 'SELECT' &&\n tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable\n );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n","/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n all,\n focusWithTabindex,\n noModifierKeys,\n primaryAction,\n} from '../events/condition.js';\nimport {easeOut} from '../easing.js';\nimport {\n rotate as rotateCoordinate,\n scale as scaleCoordinate,\n} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super({\n stopDown: FALSE,\n });\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n this.kinetic_ = options.kinetic;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.lastCentroid = null;\n\n /**\n * @type {number}\n */\n this.lastPointersCount_;\n\n /**\n * @type {boolean}\n */\n this.panning_ = false;\n\n const condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {boolean}\n */\n this.noKinetic_ = false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n if (!this.panning_) {\n this.panning_ = true;\n this.getMap().getView().beginInteraction();\n }\n const targetPointers = this.targetPointers;\n const centroid = centroidFromPointers(targetPointers);\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n const delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n const map = mapBrowserEvent.map;\n const view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n } else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n const distance = this.kinetic_.getDistance();\n const angle = this.kinetic_.getAngle();\n const center = view.getCenterInternal();\n const centerpx = map.getPixelFromCoordinateInternal(center);\n const dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n } else {\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default DragPan;\n","/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n altShiftKeysOnly,\n mouseActionButton,\n mouseOnly,\n} from '../events/condition.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n stopDown: FALSE,\n });\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n const size = map.getSize();\n const offset = mapBrowserEvent.pixel;\n const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n const delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n\n if (\n mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)\n ) {\n const map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default DragRotate;\n","/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n /**\n * @param {string} className CSS class name.\n */\n constructor(className) {\n super();\n\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n this.geometry_ = null;\n\n /**\n * @type {HTMLDivElement}\n * @private\n */\n this.element_ = document.createElement('div');\n this.element_.style.position = 'absolute';\n this.element_.style.pointerEvents = 'auto';\n this.element_.className = 'ol-box ' + className;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.endPixel_ = null;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.setMap(null);\n }\n\n /**\n * @private\n */\n render_() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const px = 'px';\n const style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n const style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n setPixels(startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n }\n\n /**\n * Creates or updates the cached geometry.\n */\n createOrUpdateGeometry() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n const coordinates = pixels.map(\n this.map_.getCoordinateFromPixelInternal,\n this.map_\n );\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n } else {\n this.geometry_.setCoordinates([coordinates]);\n }\n }\n\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n getGeometry() {\n return this.geometry_;\n }\n}\n\nexport default RenderBox;\n","/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport {mouseActionButton} from '../events/condition.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n constructor(type, coordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.on;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.once;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.un;\n\n options = options ? options : {};\n\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n /**\n * @type {number}\n * @private\n */\n this.minArea_ = options.minArea !== undefined ? options.minArea : 64;\n\n if (options.onBoxEnd) {\n this.onBoxEnd = options.onBoxEnd;\n }\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : mouseActionButton;\n\n /**\n * @private\n * @type {EndCondition}\n */\n this.boxEndCondition_ = options.boxEndCondition\n ? options.boxEndCondition\n : this.defaultBoxEndCondition;\n }\n\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n const width = endPixel[0] - startPixel[0];\n const height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n }\n\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n getGeometry() {\n return this.box_.getGeometry();\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXDRAG,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n this.box_.setMap(null);\n\n const completeBox = this.boxEndCondition_(\n mapBrowserEvent,\n this.startPixel_,\n mapBrowserEvent.pixel\n );\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(\n new DragBoxEvent(\n completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXSTART,\n mapBrowserEvent.coordinate,\n mapBrowserEvent\n )\n );\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {}\n}\n\nexport default DragBox;\n","/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with an {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const condition = options.condition ? options.condition : shiftKeyOnly;\n\n super({\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n });\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n /**\n * @private\n * @type {boolean}\n */\n this.out_ = options.out !== undefined ? options.out : false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {\n const map = this.getMap();\n const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n let geometry = this.getGeometry();\n\n if (this.out_) {\n const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n const factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n }\n}\n\nexport default DragZoom;\n","/**\n * @module ol/events/KeyCode\n */\n\n/**\n * @enum {number}\n * @const\n */\nexport default {\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n};\n","/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {pan} from './Interaction.js';\nimport KeyCode from '../events/KeyCode.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport {rotate as rotateCoordinate} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n this.defaultCondition_ = function (mapBrowserEvent) {\n return (\n noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ =\n options.condition !== undefined\n ? options.condition\n : this.defaultCondition_;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardPan}\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const keyCode = keyEvent.keyCode;\n if (\n this.condition_(mapBrowserEvent) &&\n (keyCode == KeyCode.DOWN ||\n keyCode == KeyCode.LEFT ||\n keyCode == KeyCode.RIGHT ||\n keyCode == KeyCode.UP)\n ) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n let deltaX = 0,\n deltaY = 0;\n if (keyCode == KeyCode.DOWN) {\n deltaY = -mapUnitsDelta;\n } else if (keyCode == KeyCode.LEFT) {\n deltaX = -mapUnitsDelta;\n } else if (keyCode == KeyCode.RIGHT) {\n deltaX = mapUnitsDelta;\n } else {\n deltaY = mapUnitsDelta;\n }\n const delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardPan;\n","/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {targetNotEditable} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : targetNotEditable;\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {KeyboardZoom}\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (\n mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS\n ) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const charCode = keyEvent.charCode;\n if (\n this.condition_(mapBrowserEvent) &&\n (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))\n ) {\n const map = mapBrowserEvent.map;\n const delta =\n charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardZoom;\n","/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {clamp} from '../math.js';\n\n/**\n * @typedef {'trackpad' | 'wheel'} Mode\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)\n );\n\n /**\n * @private\n * @type {number}\n */\n this.totalDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.lastDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @private\n * @type {number}\n */\n this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n /**\n * @private\n * @type {boolean}\n */\n this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n\n const condition = options.condition ? options.condition : always;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {?import(\"../coordinate.js\").Coordinate}\n */\n this.lastAnchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.startTime_ = undefined;\n\n /**\n * @private\n * @type {?}\n */\n this.timeoutId_;\n\n /**\n * @private\n * @type {Mode|undefined}\n */\n this.mode_ = undefined;\n\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @type {number}\n */\n this.trackpadEventGap_ = 400;\n\n /**\n * @type {?}\n */\n this.trackpadTimeoutId_;\n\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n this.deltaPerZoom_ = 300;\n }\n\n /**\n * @private\n */\n endInteraction_() {\n this.trackpadTimeoutId_ = undefined;\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n view.endInteraction(\n undefined,\n this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0,\n this.lastAnchor_\n );\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const wheelEvent = /** @type {WheelEvent} */ (\n mapBrowserEvent.originalEvent\n );\n wheelEvent.preventDefault();\n\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.coordinate;\n }\n\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n let delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n\n if (delta === 0) {\n return false;\n } else {\n this.lastDelta_ = delta;\n }\n\n const now = Date.now();\n\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? 'trackpad' : 'wheel';\n }\n\n const view = map.getView();\n if (\n this.mode_ === 'trackpad' &&\n !(view.getConstrainResolution() || this.constrainResolution_)\n ) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n } else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(\n this.endInteraction_.bind(this),\n this.timeout_\n );\n view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n this.startTime_ = now;\n return false;\n }\n\n this.totalDelta_ += delta;\n\n const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(\n this.handleWheelZoom_.bind(this, map),\n timeLeft\n );\n\n return false;\n }\n\n /**\n * @private\n * @param {import(\"../Map.js\").default} map Map.\n */\n handleWheelZoom_(map) {\n const view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n let delta =\n -clamp(\n this.totalDelta_,\n -this.maxDelta_ * this.deltaPerZoom_,\n this.maxDelta_ * this.deltaPerZoom_\n ) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n }\n\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n setMouseAnchor(useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n }\n}\n\nexport default MouseWheelZoom;\n","/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotating_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.rotationDelta_ = 0.0;\n\n /**\n * @private\n * @type {number}\n */\n this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n let rotationDelta = 0.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n\n // angle between touches\n const angle = Math.atan2(\n touch1.clientY - touch0.clientY,\n touch1.clientX - touch0.clientX\n );\n\n if (this.lastAngle_ !== undefined) {\n const delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n const viewportPosition = map.getViewport().getBoundingClientRect();\n const centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default PinchRotate;\n","/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastDistance_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.lastScaleDelta_ = 1;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n */\n handleDragEvent(mapBrowserEvent) {\n let scaleDelta = 1.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n const dx = touch0.clientX - touch1.clientX;\n const dy = touch0.clientY - touch1.clientY;\n\n // distance between touches\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n\n // scale anchor point.\n const viewportPosition = map.getViewport().getBoundingClientRect();\n const centroid = centroidFromPointers(this.targetPointers);\n centroid[0] -= viewportPosition.left;\n centroid[1] -= viewportPosition.top;\n this.anchor_ = map.getCoordinateFromPixelInternal(centroid);\n\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n } else {\n return false;\n }\n }\n}\n\nexport default PinchZoom;\n","/**\n * @module ol/interaction/defaults\n */\nimport Collection from '../Collection.js';\nimport DoubleClickZoom from './DoubleClickZoom.js';\nimport DragPan from './DragPan.js';\nimport DragRotate from './DragRotate.js';\nimport DragZoom from './DragZoom.js';\nimport KeyboardPan from './KeyboardPan.js';\nimport KeyboardZoom from './KeyboardZoom.js';\nimport Kinetic from '../Kinetic.js';\nimport MouseWheelZoom from './MouseWheelZoom.js';\nimport PinchRotate from './PinchRotate.js';\nimport PinchZoom from './PinchZoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [options] Defaults options.\n * @return {Collection}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const interactions = new Collection();\n\n const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n const altShiftDragRotate =\n options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n\n const doubleClickZoom =\n options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(\n new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n })\n );\n }\n\n const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(\n new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n })\n );\n }\n\n const pinchRotate =\n options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n\n const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(\n new PinchZoom({\n duration: options.zoomDuration,\n })\n );\n }\n\n const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(\n new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n })\n );\n }\n\n const mouseWheelZoom =\n options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(\n new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n })\n );\n }\n\n const shiftDragZoom =\n options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(\n new DragZoom({\n duration: options.zoomDuration,\n })\n );\n }\n\n return interactions;\n}\n","/**\n * @module ol/size\n */\n\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, dest) {\n if (dest === undefined) {\n dest = [0, 0];\n }\n dest[0] = size[0] + 2 * num;\n dest[1] = size[1] + 2 * num;\n return dest;\n}\n\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, dest) {\n if (dest === undefined) {\n dest = [0, 0];\n }\n dest[0] = (size[0] * ratio + 0.5) | 0;\n dest[1] = (size[1] * ratio + 0.5) | 0;\n return dest;\n}\n\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, dest) {\n if (Array.isArray(size)) {\n return size;\n } else {\n if (dest === undefined) {\n dest = [size, size];\n } else {\n dest[0] = size;\n dest[1] = size;\n }\n return dest;\n }\n}\n","/**\n * @module ol/Map\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport EventType from './events/EventType.js';\nimport Layer from './layer/Layer.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {TRUE} from './functions.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {assert} from './asserts.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {defaults as defaultControls} from './control/defaults.js';\nimport {defaults as defaultInteractions} from './interaction/defaults.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport {getUid} from './util.js';\nimport {hasArea} from './size.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {removeNode} from './dom.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, ?FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map';\n * import View from 'ol/View';\n * import TileLayer from 'ol/layer/Tile';\n * import OSM from 'ol/source/OSM';\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM(),\n * }),\n * ],\n * target: 'map',\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends BaseObject {\n /**\n * @param {MapOptions} [options] Map options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /***\n * @type {MapEventHandler}\n */\n this.on;\n\n /***\n * @type {MapEventHandler}\n */\n this.once;\n\n /***\n * @type {MapEventHandler}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean|undefined}\n */\n this.renderComplete_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {*}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = this.animationDelay_.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || defaultControls();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions =\n optionsInternal.interactions ||\n defaultInteractions({\n onFocusOnly: true,\n });\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this)\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(event.element);\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n const id = event.element.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {Map}\n */\n function (control) {\n control.setMap(this);\n }.bind(this)\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {Map}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(this)\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n options\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through the `layerFilter` option.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewportPosition = this.viewport_.getBoundingClientRect();\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n const target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n } else {\n return null;\n }\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection()\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.pixelToCoordinateTransform,\n pixel.slice()\n );\n }\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = state.layer.getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection()\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2)\n );\n }\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [type] Type.\n */\n handleBrowserEvent(browserEvent, type) {\n type = type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_ === true) {\n if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState\n );\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADEND, this, frameState)\n );\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADSTART, this, frameState)\n );\n }\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const targetElement = this.getTargetElement();\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = new CompositeMapRenderer(this);\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this)\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n\n const defaultView = this.getOwnerDocument().defaultView;\n const keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this\n ),\n listen(defaultView, EventType.RESIZE, this.updateSize, this),\n ];\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_();\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * @private\n */\n animationDelay_() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size\n );\n }\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState)\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState)\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n this.hasListener(MapEventType.LOADSTART) ||\n this.hasListener(MapEventType.LOADEND) ||\n this.hasListener(RenderEventType.RENDERCOMPLETE)\n ? !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady()\n : undefined;\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n // eslint-disable-next-line\n console.warn(\n \"No map visible because the map container's width or height are 0.\"\n );\n }\n }\n }\n\n this.setSize(size);\n this.updateViewportSize_();\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n updateViewportSize_() {\n const view = this.getView();\n if (view) {\n let size = undefined;\n const computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({\n layers:\n /** @type {Collection|Array} */ (\n options.layers\n ),\n });\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n /** @type {Collection} */\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 47\n ); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = options.controls;\n }\n }\n\n /** @type {Collection} */\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 48\n ); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = options.interactions;\n }\n }\n\n /** @type {Collection} */\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 49\n ); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default Map;\n","/**\n * @module ol/Overlay\n */\nimport BaseObject from './Object.js';\nimport MapEventType from './MapEventType.js';\nimport {CLASS_SELECTABLE} from './css.js';\nimport {containsExtent} from './extent.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {outerHeight, outerWidth, removeChildren, removeNode} from './dom.js';\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n ELEMENT: 'element',\n MAP: 'map',\n OFFSET: 'offset',\n POSITION: 'position',\n POSITIONING: 'positioning',\n};\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n * 'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location. Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n * import Overlay from 'ol/Overlay';\n *\n * // ...\n * const popup = new Overlay({\n * element: document.getElementById('popup'),\n * });\n * popup.setPosition(coordinate);\n * map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends BaseObject {\n /**\n * @param {Options} options Overlay options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {OverlayOnSignature}\n */\n this.on;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.once;\n\n /***\n * @type {OverlayOnSignature}\n */\n this.un;\n\n /**\n * @protected\n * @type {Options}\n */\n this.options = options;\n\n /**\n * @protected\n * @type {number|string|undefined}\n */\n this.id = options.id;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.insertFirst =\n options.insertFirst !== undefined ? options.insertFirst : true;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = document.createElement('div');\n this.element.className =\n options.className !== undefined\n ? options.className\n : 'ol-overlay-container ' + CLASS_SELECTABLE;\n this.element.style.position = 'absolute';\n this.element.style.pointerEvents = 'auto';\n\n /**\n * @protected\n * @type {PanIntoViewOptions|undefined}\n */\n this.autoPan = options.autoPan === true ? {} : options.autoPan || undefined;\n\n /**\n * @protected\n * @type {{transform_: string,\n * visible: boolean}}\n */\n this.rendered = {\n transform_: '',\n visible: true,\n };\n\n /**\n * @protected\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.mapPostrenderListenerKey = null;\n\n this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n this.addChangeListener(Property.MAP, this.handleMapChanged);\n this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n\n if (options.element !== undefined) {\n this.setElement(options.element);\n }\n\n this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n this.setPositioning(options.positioning || 'top-left');\n\n if (options.position !== undefined) {\n this.setPosition(options.position);\n }\n }\n\n /**\n * Get the DOM element of this overlay.\n * @return {HTMLElement|undefined} The Element containing the overlay.\n * @observable\n * @api\n */\n getElement() {\n return /** @type {HTMLElement|undefined} */ (this.get(Property.ELEMENT));\n }\n\n /**\n * Get the overlay identifier which is set on constructor.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id;\n }\n\n /**\n * Get the map associated with this overlay.\n * @return {import(\"./Map.js\").default|null} The map that the\n * overlay is part of.\n * @observable\n * @api\n */\n getMap() {\n return /** @type {import(\"./Map.js\").default|null} */ (\n this.get(Property.MAP) || null\n );\n }\n\n /**\n * Get the offset of this overlay.\n * @return {Array} The offset.\n * @observable\n * @api\n */\n getOffset() {\n return /** @type {Array} */ (this.get(Property.OFFSET));\n }\n\n /**\n * Get the current position of this overlay.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n * anchored at.\n * @observable\n * @api\n */\n getPosition() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(Property.POSITION)\n );\n }\n\n /**\n * Get the current positioning of this overlay.\n * @return {Positioning} How the overlay is positioned\n * relative to its point on the map.\n * @observable\n * @api\n */\n getPositioning() {\n return /** @type {Positioning} */ (this.get(Property.POSITIONING));\n }\n\n /**\n * @protected\n */\n handleElementChanged() {\n removeChildren(this.element);\n const element = this.getElement();\n if (element) {\n this.element.appendChild(element);\n }\n }\n\n /**\n * @protected\n */\n handleMapChanged() {\n if (this.mapPostrenderListenerKey) {\n removeNode(this.element);\n unlistenByKey(this.mapPostrenderListenerKey);\n this.mapPostrenderListenerKey = null;\n }\n const map = this.getMap();\n if (map) {\n this.mapPostrenderListenerKey = listen(\n map,\n MapEventType.POSTRENDER,\n this.render,\n this\n );\n this.updatePixelPosition();\n const container = this.stopEvent\n ? map.getOverlayContainerStopEvent()\n : map.getOverlayContainer();\n if (this.insertFirst) {\n container.insertBefore(this.element, container.childNodes[0] || null);\n } else {\n container.appendChild(this.element);\n }\n this.performAutoPan();\n }\n }\n\n /**\n * @protected\n */\n render() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handleOffsetChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * @protected\n */\n handlePositionChanged() {\n this.updatePixelPosition();\n this.performAutoPan();\n }\n\n /**\n * @protected\n */\n handlePositioningChanged() {\n this.updatePixelPosition();\n }\n\n /**\n * Set the DOM element to be associated with this overlay.\n * @param {HTMLElement|undefined} element The Element containing the overlay.\n * @observable\n * @api\n */\n setElement(element) {\n this.set(Property.ELEMENT, element);\n }\n\n /**\n * Set the map to be associated with this overlay.\n * @param {import(\"./Map.js\").default|null} map The map that the\n * overlay is part of. Pass `null` to just remove the overlay from the current map.\n * @observable\n * @api\n */\n setMap(map) {\n this.set(Property.MAP, map);\n }\n\n /**\n * Set the offset for this overlay.\n * @param {Array} offset Offset.\n * @observable\n * @api\n */\n setOffset(offset) {\n this.set(Property.OFFSET, offset);\n }\n\n /**\n * Set the position for this overlay. If the position is `undefined` the\n * overlay is hidden.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n * is anchored at.\n * @observable\n * @api\n */\n setPosition(position) {\n this.set(Property.POSITION, position);\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary) using the configured autoPan parameters\n * @protected\n */\n performAutoPan() {\n if (this.autoPan) {\n this.panIntoView(this.autoPan);\n }\n }\n\n /**\n * Pan the map so that the overlay is entirely visible in the current viewport\n * (if necessary).\n * @param {PanIntoViewOptions} [panIntoViewOptions] Options for the pan action\n * @api\n */\n panIntoView(panIntoViewOptions) {\n const map = this.getMap();\n\n if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n return;\n }\n\n const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n const element = this.getElement();\n const overlayRect = this.getRect(element, [\n outerWidth(element),\n outerHeight(element),\n ]);\n\n panIntoViewOptions = panIntoViewOptions || {};\n\n const myMargin =\n panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n if (!containsExtent(mapRect, overlayRect)) {\n // the overlay is not completely inside the viewport, so pan the map\n const offsetLeft = overlayRect[0] - mapRect[0];\n const offsetRight = mapRect[2] - overlayRect[2];\n const offsetTop = overlayRect[1] - mapRect[1];\n const offsetBottom = mapRect[3] - overlayRect[3];\n\n const delta = [0, 0];\n if (offsetLeft < 0) {\n // move map to the left\n delta[0] = offsetLeft - myMargin;\n } else if (offsetRight < 0) {\n // move map to the right\n delta[0] = Math.abs(offsetRight) + myMargin;\n }\n if (offsetTop < 0) {\n // move map up\n delta[1] = offsetTop - myMargin;\n } else if (offsetBottom < 0) {\n // move map down\n delta[1] = Math.abs(offsetBottom) + myMargin;\n }\n\n if (delta[0] !== 0 || delta[1] !== 0) {\n const center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n map.getView().getCenterInternal()\n );\n const centerPx = map.getPixelFromCoordinateInternal(center);\n if (!centerPx) {\n return;\n }\n const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n\n const panOptions = panIntoViewOptions.animation || {};\n map.getView().animateInternal({\n center: map.getCoordinateFromPixelInternal(newCenterPx),\n duration: panOptions.duration,\n easing: panOptions.easing,\n });\n }\n }\n }\n\n /**\n * Get the extent of an element relative to the document\n * @param {HTMLElement} element The element.\n * @param {import(\"./size.js\").Size} size The size of the element.\n * @return {import(\"./extent.js\").Extent} The extent.\n * @protected\n */\n getRect(element, size) {\n const box = element.getBoundingClientRect();\n const offsetX = box.left + window.pageXOffset;\n const offsetY = box.top + window.pageYOffset;\n return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n }\n\n /**\n * Set the positioning for this overlay.\n * @param {Positioning} positioning how the overlay is\n * positioned relative to its point on the map.\n * @observable\n * @api\n */\n setPositioning(positioning) {\n this.set(Property.POSITIONING, positioning);\n }\n\n /**\n * Modify the visibility of the element.\n * @param {boolean} visible Element visibility.\n * @protected\n */\n setVisible(visible) {\n if (this.rendered.visible !== visible) {\n this.element.style.display = visible ? '' : 'none';\n this.rendered.visible = visible;\n }\n }\n\n /**\n * Update pixel position.\n * @protected\n */\n updatePixelPosition() {\n const map = this.getMap();\n const position = this.getPosition();\n if (!map || !map.isRendered() || !position) {\n this.setVisible(false);\n return;\n }\n\n const pixel = map.getPixelFromCoordinate(position);\n const mapSize = map.getSize();\n this.updateRenderedPosition(pixel, mapSize);\n }\n\n /**\n * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n * @protected\n */\n updateRenderedPosition(pixel, mapSize) {\n const style = this.element.style;\n const offset = this.getOffset();\n\n const positioning = this.getPositioning();\n\n this.setVisible(true);\n\n const x = Math.round(pixel[0] + offset[0]) + 'px';\n const y = Math.round(pixel[1] + offset[1]) + 'px';\n let posX = '0%';\n let posY = '0%';\n if (\n positioning == 'bottom-right' ||\n positioning == 'center-right' ||\n positioning == 'top-right'\n ) {\n posX = '-100%';\n } else if (\n positioning == 'bottom-center' ||\n positioning == 'center-center' ||\n positioning == 'top-center'\n ) {\n posX = '-50%';\n }\n if (\n positioning == 'bottom-left' ||\n positioning == 'bottom-center' ||\n positioning == 'bottom-right'\n ) {\n posY = '-100%';\n } else if (\n positioning == 'center-left' ||\n positioning == 'center-center' ||\n positioning == 'center-right'\n ) {\n posY = '-50%';\n }\n const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n if (this.rendered.transform_ != transform) {\n this.rendered.transform_ = transform;\n style.transform = transform;\n }\n }\n\n /**\n * returns the options this Overlay has been created with\n * @return {Options} overlay options\n */\n getOptions() {\n return this.options;\n }\n}\n\nexport default Overlay;\n","/**\n * @module ol/structs/LRUCache\n */\n\nimport {assert} from '../asserts.js';\n\n/**\n * @typedef {Object} Entry\n * @property {string} key_ Key.\n * @property {Object} newer Newer.\n * @property {Object} older Older.\n * @property {*} value_ Value.\n */\n\n/**\n * @classdesc\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n *\n * @fires import(\"../events/Event.js\").default\n * @template T\n */\nclass LRUCache {\n /**\n * @param {number} [highWaterMark] High water mark.\n */\n constructor(highWaterMark) {\n /**\n * Desired max cache size after expireCache(). If set to 0, no cache entries\n * will be pruned at all.\n * @type {number}\n */\n this.highWaterMark = highWaterMark !== undefined ? highWaterMark : 2048;\n\n /**\n * @private\n * @type {number}\n */\n this.count_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.entries_ = {};\n\n /**\n * @private\n * @type {?Entry}\n */\n this.oldest_ = null;\n\n /**\n * @private\n * @type {?Entry}\n */\n this.newest_ = null;\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.highWaterMark > 0 && this.getCount() > this.highWaterMark;\n }\n\n /**\n * Expire the cache.\n * @param {!Object} [keep] Keys to keep. To be implemented by subclasses.\n */\n expireCache(keep) {\n while (this.canExpireCache()) {\n this.pop();\n }\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.count_ = 0;\n this.entries_ = {};\n this.oldest_ = null;\n this.newest_ = null;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Contains key.\n */\n containsKey(key) {\n return this.entries_.hasOwnProperty(key);\n }\n\n /**\n * @param {function(T, string, LRUCache): ?} f The function\n * to call for every entry from the oldest to the newer. This function takes\n * 3 arguments (the entry value, the entry key and the LRUCache object).\n * The return value is ignored.\n */\n forEach(f) {\n let entry = this.oldest_;\n while (entry) {\n f(entry.value_, entry.key_, this);\n entry = entry.newer;\n }\n }\n\n /**\n * @param {string} key Key.\n * @param {*} [options] Options (reserved for subclasses).\n * @return {T} Value.\n */\n get(key, options) {\n const entry = this.entries_[key];\n assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n if (entry === this.newest_) {\n return entry.value_;\n } else if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (this.oldest_.newer);\n this.oldest_.older = null;\n } else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n entry.newer = null;\n entry.older = this.newest_;\n this.newest_.newer = entry;\n this.newest_ = entry;\n return entry.value_;\n }\n\n /**\n * Remove an entry from the cache.\n * @param {string} key The entry key.\n * @return {T} The removed entry.\n */\n remove(key) {\n const entry = this.entries_[key];\n assert(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache\n if (entry === this.newest_) {\n this.newest_ = /** @type {Entry} */ (entry.older);\n if (this.newest_) {\n this.newest_.newer = null;\n }\n } else if (entry === this.oldest_) {\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (this.oldest_) {\n this.oldest_.older = null;\n }\n } else {\n entry.newer.older = entry.older;\n entry.older.newer = entry.newer;\n }\n delete this.entries_[key];\n --this.count_;\n return entry.value_;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.count_;\n }\n\n /**\n * @return {Array} Keys.\n */\n getKeys() {\n const keys = new Array(this.count_);\n let i = 0;\n let entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n keys[i++] = entry.key_;\n }\n return keys;\n }\n\n /**\n * @return {Array} Values.\n */\n getValues() {\n const values = new Array(this.count_);\n let i = 0;\n let entry;\n for (entry = this.newest_; entry; entry = entry.older) {\n values[i++] = entry.value_;\n }\n return values;\n }\n\n /**\n * @return {T} Last value.\n */\n peekLast() {\n return this.oldest_.value_;\n }\n\n /**\n * @return {string} Last key.\n */\n peekLastKey() {\n return this.oldest_.key_;\n }\n\n /**\n * Get the key of the newest item in the cache. Throws if the cache is empty.\n * @return {string} The newest key.\n */\n peekFirstKey() {\n return this.newest_.key_;\n }\n\n /**\n * Return an entry without updating least recently used time.\n * @param {string} key Key.\n * @return {T} Value.\n */\n peek(key) {\n if (!this.containsKey(key)) {\n return undefined;\n }\n return this.entries_[key].value_;\n }\n\n /**\n * @return {T} value Value.\n */\n pop() {\n const entry = this.oldest_;\n delete this.entries_[entry.key_];\n if (entry.newer) {\n entry.newer.older = null;\n }\n this.oldest_ = /** @type {Entry} */ (entry.newer);\n if (!this.oldest_) {\n this.newest_ = null;\n }\n --this.count_;\n return entry.value_;\n }\n\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n replace(key, value) {\n this.get(key); // update `newest_`\n this.entries_[key].value_ = value;\n }\n\n /**\n * @param {string} key Key.\n * @param {T} value Value.\n */\n set(key, value) {\n assert(!(key in this.entries_), 16); // Tried to set a value for a key that is used already\n const entry = {\n key_: key,\n newer: null,\n older: this.newest_,\n value_: value,\n };\n if (!this.newest_) {\n this.oldest_ = entry;\n } else {\n this.newest_.newer = entry;\n }\n this.newest_ = entry;\n this.entries_[key] = entry;\n ++this.count_;\n }\n\n /**\n * Set a maximum number of entries for the cache.\n * @param {number} size Cache size.\n * @api\n */\n setSize(size) {\n this.highWaterMark = size;\n }\n}\n\nexport default LRUCache;\n","/**\n * @module ol/tilecoord\n */\n\n/**\n * An array of three numbers representing the location of a tile in a tile\n * grid. The order is `z` (zoom level), `x` (column), and `y` (row).\n * @typedef {Array} TileCoord\n * @api\n */\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {TileCoord} [tileCoord] Tile coordinate.\n * @return {TileCoord} Tile coordinate.\n */\nexport function createOrUpdate(z, x, y, tileCoord) {\n if (tileCoord !== undefined) {\n tileCoord[0] = z;\n tileCoord[1] = x;\n tileCoord[2] = y;\n return tileCoord;\n } else {\n return [z, x, y];\n }\n}\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nexport function getKeyZXY(z, x, y) {\n return z + '/' + x + '/' + y;\n}\n\n/**\n * Get the key for a tile coord.\n * @param {TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nexport function getKey(tileCoord) {\n return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n\n/**\n * Get the tile cache key for a tile key obtained through `tile.getKey()`.\n * @param {string} tileKey The tile key.\n * @return {string} The cache key.\n */\nexport function getCacheKeyForTileKey(tileKey) {\n const [z, x, y] = tileKey\n .substring(tileKey.lastIndexOf('/') + 1, tileKey.length)\n .split(',')\n .map(Number);\n return getKeyZXY(z, x, y);\n}\n\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {TileCoord} The tile coord.\n */\nexport function fromKey(key) {\n return key.split('/').map(Number);\n}\n\n/**\n * @param {TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nexport function hash(tileCoord) {\n return (tileCoord[1] << tileCoord[0]) + tileCoord[2];\n}\n\n/**\n * @param {TileCoord} tileCoord Tile coordinate.\n * @param {!import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nexport function withinExtentAndZ(tileCoord, tileGrid) {\n const z = tileCoord[0];\n const x = tileCoord[1];\n const y = tileCoord[2];\n\n if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n return false;\n }\n const tileRange = tileGrid.getFullTileRange(z);\n if (!tileRange) {\n return true;\n } else {\n return tileRange.containsXY(x, y);\n }\n}\n","/**\n * @module ol/TileCache\n */\nimport LRUCache from './structs/LRUCache.js';\nimport {fromKey, getKey} from './tilecoord.js';\n\nclass TileCache extends LRUCache {\n clear() {\n while (this.getCount() > 0) {\n this.pop().release();\n }\n super.clear();\n }\n\n /**\n * @param {!Object} usedTiles Used tiles.\n */\n expireCache(usedTiles) {\n while (this.canExpireCache()) {\n const tile = this.peekLast();\n if (tile.getKey() in usedTiles) {\n break;\n } else {\n this.pop().release();\n }\n }\n }\n\n /**\n * Prune all tiles from the cache that don't have the same z as the newest tile.\n */\n pruneExceptNewestZ() {\n if (this.getCount() === 0) {\n return;\n }\n const key = this.peekFirstKey();\n const tileCoord = fromKey(key);\n const z = tileCoord[0];\n this.forEach(\n function (tile) {\n if (tile.tileCoord[0] !== z) {\n this.remove(getKey(tile.tileCoord));\n tile.release();\n }\n }.bind(this)\n );\n }\n}\n\nexport default TileCache;\n","/**\n * @module ol/TileRange\n */\n\n/**\n * A representation of a contiguous block of tiles. A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nclass TileRange {\n /**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n */\n constructor(minX, maxX, minY, maxY) {\n /**\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\n contains(tileCoord) {\n return this.containsXY(tileCoord[1], tileCoord[2]);\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\n containsTileRange(tileRange) {\n return (\n this.minX <= tileRange.minX &&\n tileRange.maxX <= this.maxX &&\n this.minY <= tileRange.minY &&\n tileRange.maxY <= this.maxY\n );\n }\n\n /**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\n containsXY(x, y) {\n return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\n equals(tileRange) {\n return (\n this.minX == tileRange.minX &&\n this.minY == tileRange.minY &&\n this.maxX == tileRange.maxX &&\n this.maxY == tileRange.maxY\n );\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n */\n extend(tileRange) {\n if (tileRange.minX < this.minX) {\n this.minX = tileRange.minX;\n }\n if (tileRange.maxX > this.maxX) {\n this.maxX = tileRange.maxX;\n }\n if (tileRange.minY < this.minY) {\n this.minY = tileRange.minY;\n }\n if (tileRange.maxY > this.maxY) {\n this.maxY = tileRange.maxY;\n }\n }\n\n /**\n * @return {number} Height.\n */\n getHeight() {\n return this.maxY - this.minY + 1;\n }\n\n /**\n * @return {import(\"./size.js\").Size} Size.\n */\n getSize() {\n return [this.getWidth(), this.getHeight()];\n }\n\n /**\n * @return {number} Width.\n */\n getWidth() {\n return this.maxX - this.minX + 1;\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\n intersects(tileRange) {\n return (\n this.minX <= tileRange.maxX &&\n this.maxX >= tileRange.minX &&\n this.minY <= tileRange.maxY &&\n this.maxY >= tileRange.minY\n );\n }\n}\n\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange} [tileRange] TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n if (tileRange !== undefined) {\n tileRange.minX = minX;\n tileRange.maxX = maxX;\n tileRange.minY = minY;\n tileRange.maxY = maxY;\n return tileRange;\n } else {\n return new TileRange(minX, maxX, minY, maxY);\n }\n}\n\nexport default TileRange;\n","/**\n * @module ol/VectorRenderTile\n */\nimport Tile from './Tile.js';\nimport {createCanvasContext2D, releaseCanvas} from './dom.js';\nimport {getUid} from './util.js';\n\n/**\n * @typedef {Object} ReplayState\n * @property {boolean} dirty Dirty.\n * @property {null|import(\"./render.js\").OrderFunction} renderedRenderOrder RenderedRenderOrder.\n * @property {number} renderedTileRevision RenderedTileRevision.\n * @property {number} renderedResolution RenderedResolution.\n * @property {number} renderedRevision RenderedRevision.\n * @property {number} renderedTileResolution RenderedTileResolution.\n * @property {number} renderedTileZ RenderedTileZ.\n */\n\n/**\n * @type {Array}\n */\nconst canvasPool = [];\n\nclass VectorRenderTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {import(\"./tilecoord.js\").TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n * @param {function(VectorRenderTile):Array} getSourceTiles Function\n * to get source tiles for this tile.\n */\n constructor(tileCoord, state, urlTileCoord, getSourceTiles) {\n super(tileCoord, state, {transition: 0});\n\n /**\n * @private\n * @type {!Object}\n */\n this.context_ = {};\n\n /**\n * Executor groups by layer uid. Entries are read/written by the renderer.\n * @type {Object>}\n */\n this.executorGroups = {};\n\n /**\n * Executor groups for decluttering, by layer uid. Entries are read/written by the renderer.\n * @type {Object>}\n */\n this.declutterExecutorGroups = {};\n\n /**\n * Number of loading source tiles. Read/written by the source.\n * @type {number}\n */\n this.loadingSourceTiles = 0;\n\n /**\n * @type {Object}\n */\n this.hitDetectionImageData = {};\n\n /**\n * @private\n * @type {!Object}\n */\n this.replayState_ = {};\n\n /**\n * @type {Array}\n */\n this.sourceTiles = [];\n\n /**\n * @type {Object}\n */\n this.errorTileKeys = {};\n\n /**\n * @type {number}\n */\n this.wantedResolution;\n\n /**\n * @type {!function():Array}\n */\n this.getSourceTiles = getSourceTiles.bind(undefined, this);\n\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n this.wrappedTileCoord = urlTileCoord;\n }\n\n /**\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {CanvasRenderingContext2D} The rendering context.\n */\n getContext(layer) {\n const key = getUid(layer);\n if (!(key in this.context_)) {\n this.context_[key] = createCanvasContext2D(1, 1, canvasPool);\n }\n return this.context_[key];\n }\n\n /**\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {boolean} Tile has a rendering context for the given layer.\n */\n hasContext(layer) {\n return getUid(layer) in this.context_;\n }\n\n /**\n * Get the Canvas for this tile.\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage(layer) {\n return this.hasContext(layer) ? this.getContext(layer).canvas : null;\n }\n\n /**\n * @param {import(\"./layer/Layer.js\").default} layer Layer.\n * @return {ReplayState} The replay state.\n */\n getReplayState(layer) {\n const key = getUid(layer);\n if (!(key in this.replayState_)) {\n this.replayState_[key] = {\n dirty: false,\n renderedRenderOrder: null,\n renderedResolution: NaN,\n renderedRevision: -1,\n renderedTileResolution: NaN,\n renderedTileRevision: -1,\n renderedTileZ: -1,\n };\n }\n return this.replayState_[key];\n }\n\n /**\n * Load the tile.\n */\n load() {\n this.getSourceTiles();\n }\n\n /**\n * Remove from the cache due to expiry\n */\n release() {\n for (const key in this.context_) {\n const context = this.context_[key];\n releaseCanvas(context);\n canvasPool.push(context.canvas);\n delete this.context_[key];\n }\n super.release();\n }\n}\n\nexport default VectorRenderTile;\n","/**\n * @module ol/VectorTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\nclass VectorTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Data source url.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options} [options] Tile options.\n */\n constructor(tileCoord, state, src, format, tileLoadFunction, options) {\n super(tileCoord, state, options);\n\n /**\n * Extent of this tile; set by the source.\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = null;\n\n /**\n * @private\n * @type {import(\"./format/Feature.js\").default}\n */\n this.format_ = format;\n\n /**\n * @private\n * @type {Array}\n */\n this.features_ = null;\n\n /**\n * @private\n * @type {import(\"./featureloader.js\").FeatureLoader}\n */\n this.loader_;\n\n /**\n * Feature projection of this tile; set by the source.\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection = null;\n\n /**\n * Resolution of this tile; set by the source.\n * @type {number}\n */\n this.resolution;\n\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n\n /**\n * @private\n * @type {string}\n */\n this.url_ = src;\n\n this.key = src;\n }\n\n /**\n * Get the feature format assigned for reading this tile's features.\n * @return {import(\"./format/Feature.js\").default} Feature format.\n * @api\n */\n getFormat() {\n return this.format_;\n }\n\n /**\n * Get the features for this tile. Geometries will be in the view projection.\n * @return {Array} Features.\n * @api\n */\n getFeatures() {\n return this.features_;\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.setState(TileState.LOADING);\n this.tileLoadFunction_(this, this.url_);\n if (this.loader_) {\n this.loader_(this.extent, this.resolution, this.projection);\n }\n }\n }\n\n /**\n * Handler for successful tile load.\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data projection.\n */\n onLoad(features, dataProjection) {\n this.setFeatures(features);\n }\n\n /**\n * Handler for tile load errors.\n */\n onError() {\n this.setState(TileState.ERROR);\n }\n\n /**\n * Function for use in an {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n * Sets the features for the tile.\n * @param {Array} features Features.\n * @api\n */\n setFeatures(features) {\n this.features_ = features;\n this.setState(TileState.LOADED);\n }\n\n /**\n * Set the feature loader for reading this tile's features.\n * @param {import(\"./featureloader.js\").FeatureLoader} loader Feature loader.\n * @api\n */\n setLoader(loader) {\n this.loader_ = loader;\n }\n}\n\nexport default VectorTile;\n","/**\n * @module ol/colorlike\n */\nimport {toString} from './color.js';\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n } else {\n return color;\n }\n}\n","/**\n * @module ol/featureloader\n */\nimport {VOID} from './functions.js';\n\n/**\n *\n * @type {boolean}\n * @private\n */\nlet withCredentials = false;\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * load features.\n *\n * This function takes up to 5 arguments. These are an {@link module:ol/extent~Extent} representing\n * the area to be loaded, a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection~Projection} for the projection, an optional success callback that should get\n * the loaded features passed as an argument and an optional failure callback with no arguments. If\n * the callbacks are not used, the corresponding vector source will not fire `'featuresloadend'` and\n * `'featuresloaderror'` events. `this` within the function is bound to the\n * {@link module:ol/source/Vector~VectorSource} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n * import(\"./extent.js\").Extent,\n * number,\n * import(\"./proj/Projection.js\").default,\n * function(Array): void=,\n * function(): void=): void} FeatureLoader\n * @api\n */\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection~Projection} for the projection as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array, import(\"./proj/Projection.js\").default): void} success Success\n * Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n * Function called when loading failed.\n */\nexport function loadFeaturesXhr(\n url,\n format,\n extent,\n resolution,\n projection,\n success,\n failure\n) {\n const xhr = new XMLHttpRequest();\n xhr.open(\n 'GET',\n typeof url === 'function' ? url(extent, resolution, projection) : url,\n true\n );\n if (format.getType() == 'arraybuffer') {\n xhr.responseType = 'arraybuffer';\n }\n xhr.withCredentials = withCredentials;\n /**\n * @param {Event} event Event.\n * @private\n */\n xhr.onload = function (event) {\n // status will be 0 for file:// urls\n if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n const type = format.getType();\n /** @type {Document|Node|Object|string|undefined} */\n let source;\n if (type == 'json' || type == 'text') {\n source = xhr.responseText;\n } else if (type == 'xml') {\n source = xhr.responseXML;\n if (!source) {\n source = new DOMParser().parseFromString(\n xhr.responseText,\n 'application/xml'\n );\n }\n } else if (type == 'arraybuffer') {\n source = /** @type {ArrayBuffer} */ (xhr.response);\n }\n if (source) {\n success(\n /** @type {Array} */\n (\n format.readFeatures(source, {\n extent: extent,\n featureProjection: projection,\n })\n ),\n format.readProjection(source)\n );\n } else {\n failure();\n }\n } else {\n failure();\n }\n };\n /**\n * @private\n */\n xhr.onerror = failure;\n xhr.send();\n}\n\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array): void} [success] Success\n * Function called when loading succeeded.\n * @param {function(): void} [failure] Failure\n * Function called when loading failed.\n * @this {import(\"./source/Vector\").default}\n */\n return function (extent, resolution, projection, success, failure) {\n const source = /** @type {import(\"./source/Vector\").default} */ (this);\n loadFeaturesXhr(\n url,\n format,\n extent,\n resolution,\n projection,\n /**\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n * projection.\n */\n function (features, dataProjection) {\n source.addFeatures(features);\n if (success !== undefined) {\n success(features);\n }\n },\n /* FIXME handle error */ failure ? failure : VOID\n );\n };\n}\n\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n withCredentials = xhrWithCredentials;\n}\n","/**\n * @module ol/net\n */\nimport {getUid} from './util.js';\n\n/**\n * Simple JSONP helper. Supports error callbacks and a custom callback param.\n * The error callback will be called when no JSONP is executed after 10 seconds.\n *\n * @param {string} url Request url. A 'callback' query parameter will be\n * appended.\n * @param {Function} callback Callback on success.\n * @param {Function} [errback] Callback on error.\n * @param {string} [callbackParam] Custom query parameter for the JSONP\n * callback. Default is 'callback'.\n */\nexport function jsonp(url, callback, errback, callbackParam) {\n const script = document.createElement('script');\n const key = 'olc_' + getUid(callback);\n function cleanup() {\n delete window[key];\n script.parentNode.removeChild(script);\n }\n script.async = true;\n script.src =\n url +\n (url.includes('?') ? '&' : '?') +\n (callbackParam || 'callback') +\n '=' +\n key;\n const timer = setTimeout(function () {\n cleanup();\n if (errback) {\n errback();\n }\n }, 10000);\n window[key] = function (data) {\n clearTimeout(timer);\n cleanup();\n callback(data);\n };\n document.head.appendChild(script);\n}\n\nexport class ResponseError extends Error {\n /**\n * @param {XMLHttpRequest} response The XHR object.\n */\n constructor(response) {\n const message = 'Unexpected response status: ' + response.status;\n super(message);\n\n /**\n * @type {string}\n */\n this.name = 'ResponseError';\n\n /**\n * @type {XMLHttpRequest}\n */\n this.response = response;\n }\n}\n\nexport class ClientError extends Error {\n /**\n * @param {XMLHttpRequest} client The XHR object.\n */\n constructor(client) {\n super('Failed to issue request');\n\n /**\n * @type {string}\n */\n this.name = 'ClientError';\n\n /**\n * @type {XMLHttpRequest}\n */\n this.client = client;\n }\n}\n\n/**\n * @param {string} url The URL.\n * @return {Promise} A promise that resolves to the JSON response.\n */\nexport function getJSON(url) {\n return new Promise(function (resolve, reject) {\n /**\n * @param {ProgressEvent} event The load event.\n */\n function onLoad(event) {\n const client = event.target;\n // status will be 0 for file:// urls\n if (!client.status || (client.status >= 200 && client.status < 300)) {\n let data;\n try {\n data = JSON.parse(client.responseText);\n } catch (err) {\n const message = 'Error parsing response text as JSON: ' + err.message;\n reject(new Error(message));\n return;\n }\n resolve(data);\n return;\n }\n\n reject(new ResponseError(client));\n }\n\n /**\n * @param {ProgressEvent} event The error event.\n */\n function onError(event) {\n reject(new ClientError(event.target));\n }\n\n const client = new XMLHttpRequest();\n client.addEventListener('load', onLoad);\n client.addEventListener('error', onError);\n client.open('GET', url);\n client.setRequestHeader('Accept', 'application/json');\n client.send();\n });\n}\n\n/**\n * @param {string} base The base URL.\n * @param {string} url The potentially relative URL.\n * @return {string} The full URL.\n */\nexport function resolveUrl(base, url) {\n if (url.includes('://')) {\n return url;\n }\n return new URL(url, base).href;\n}\n\nlet originalXHR;\nexport function overrideXHR(xhr) {\n if (typeof XMLHttpRequest !== 'undefined') {\n originalXHR = XMLHttpRequest;\n }\n global.XMLHttpRequest = xhr;\n}\n\nexport function restoreXHR() {\n global.XMLHttpRequest = originalXHR;\n}\n","/**\n * @module ol/loadingstrategy\n */\n\nimport {fromUserExtent, fromUserResolution, toUserExtent} from './proj.js';\n\n/**\n * Strategy function for loading all features with a single request.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n * @api\n */\nexport function all(extent, resolution) {\n return [[-Infinity, -Infinity, Infinity, Infinity]];\n}\n\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n * @api\n */\nexport function bbox(extent, resolution) {\n return [extent];\n}\n\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {function(import(\"./extent.js\").Extent, number, import(\"./proj.js\").Projection): Array} Loading strategy.\n * @api\n */\nexport function tile(tileGrid) {\n return (\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj.js\").Projection} projection Projection.\n * @return {Array} Extents.\n */\n function (extent, resolution, projection) {\n const z = tileGrid.getZForResolution(\n fromUserResolution(resolution, projection)\n );\n const tileRange = tileGrid.getTileRangeForExtentAndZ(\n fromUserExtent(extent, projection),\n z\n );\n /** @type {Array} */\n const extents = [];\n /** @type {import(\"./tilecoord.js\").TileCoord} */\n const tileCoord = [z, 0, 0];\n for (\n tileCoord[1] = tileRange.minX;\n tileCoord[1] <= tileRange.maxX;\n ++tileCoord[1]\n ) {\n for (\n tileCoord[2] = tileRange.minY;\n tileCoord[2] <= tileRange.maxY;\n ++tileCoord[2]\n ) {\n extents.push(\n toUserExtent(tileGrid.getTileCoordExtent(tileCoord), projection)\n );\n }\n }\n return extents;\n }\n );\n}\n","/**\n * @module ol/render/VectorContext\n */\n\n/**\n * @classdesc\n * Context for drawing geometries. A vector context is available on render\n * events and does not need to be constructed directly.\n * @api\n */\nclass VectorContext {\n /**\n * Render a geometry with a custom renderer.\n *\n * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {Function} renderer Renderer.\n * @param {Function} hitDetectionRenderer Renderer.\n */\n drawCustom(geometry, feature, renderer, hitDetectionRenderer) {}\n\n /**\n * Render a geometry.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry The geometry to render.\n */\n drawGeometry(geometry) {}\n\n /**\n * Set the rendering style.\n *\n * @param {import(\"../style/Style.js\").default} style The rendering style.\n */\n setStyle(style) {}\n\n /**\n * @param {import(\"../geom/Circle.js\").default} circleGeometry Circle geometry.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n drawCircle(circleGeometry, feature) {}\n\n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n */\n drawFeature(feature, style) {}\n\n /**\n * @param {import(\"../geom/GeometryCollection.js\").default} geometryCollectionGeometry Geometry collection.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n drawGeometryCollection(geometryCollectionGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/LineString.js\").default|import(\"./Feature.js\").default} lineStringGeometry Line string geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawLineString(lineStringGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"./Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawMultiLineString(multiLineStringGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"./Feature.js\").default} multiPointGeometry MultiPoint geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawMultiPoint(multiPointGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawMultiPolygon(multiPolygonGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/Point.js\").default|import(\"./Feature.js\").default} pointGeometry Point geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawPoint(pointGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/Polygon.js\").default|import(\"./Feature.js\").default} polygonGeometry Polygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawPolygon(polygonGeometry, feature) {}\n\n /**\n * @param {import(\"../geom/SimpleGeometry.js\").default|import(\"./Feature.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n drawText(geometry, feature) {}\n\n /**\n * @param {import(\"../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n setFillStrokeStyle(fillStyle, strokeStyle) {}\n\n /**\n * @param {import(\"../style/Image.js\").default} imageStyle Image style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [declutterImageWithText] Shared data for combined decluttering with a text style.\n */\n setImageStyle(imageStyle, declutterImageWithText) {}\n\n /**\n * @param {import(\"../style/Text.js\").default} textStyle Text style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [declutterImageWithText] Shared data for combined decluttering with an image style.\n */\n setTextStyle(textStyle, declutterImageWithText) {}\n}\n\nexport default VectorContext;\n","/**\n * @module ol/render/canvas/Immediate\n */\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol/geom/flat/transform~transform2D?\n\nimport VectorContext from '../VectorContext.js';\nimport {asColorLike} from '../../colorlike.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../../transform.js';\nimport {\n defaultFillStyle,\n defaultFont,\n defaultLineCap,\n defaultLineDash,\n defaultLineDashOffset,\n defaultLineJoin,\n defaultLineWidth,\n defaultMiterLimit,\n defaultStrokeStyle,\n defaultTextAlign,\n defaultTextBaseline,\n} from '../canvas.js';\nimport {equals} from '../../array.js';\nimport {intersects} from '../../extent.js';\nimport {transform2D} from '../../geom/flat/transform.js';\nimport {transformGeom2D} from '../../geom/SimpleGeometry.js';\n\n/**\n * @classdesc\n * A concrete subclass of {@link module:ol/render/VectorContext~VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link module:ol/render/Event~RenderEvent} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n */\nclass CanvasImmediateRenderer extends VectorContext {\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {number} [squaredTolerance] Optional squared tolerance for simplification.\n * @param {import(\"../../proj.js\").TransformFunction} [userTransform] Transform from user to view projection.\n */\n constructor(\n context,\n pixelRatio,\n extent,\n transform,\n viewRotation,\n squaredTolerance,\n userTransform\n ) {\n super();\n\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n this.context_ = context;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n this.extent_ = extent;\n\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n this.transform_ = transform;\n\n /**\n * @private\n * @type {number}\n */\n this.viewRotation_ = viewRotation;\n\n /**\n * @private\n * @type {number}\n */\n this.squaredTolerance_ = squaredTolerance;\n\n /**\n * @private\n * @type {import(\"../../proj.js\").TransformFunction}\n */\n this.userTransform_ = userTransform;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n this.contextFillState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n this.contextStrokeState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n this.contextTextState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n this.fillState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n this.strokeState_ = null;\n\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n this.image_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.imageAnchorX_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.imageAnchorY_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.imageHeight_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.imageOpacity_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.imageOriginX_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.imageOriginY_ = 0;\n\n /**\n * @private\n * @type {boolean}\n */\n this.imageRotateWithView_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.imageRotation_ = 0;\n\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n this.imageScale_ = [0, 0];\n\n /**\n * @private\n * @type {number}\n */\n this.imageWidth_ = 0;\n\n /**\n * @private\n * @type {string}\n */\n this.text_ = '';\n\n /**\n * @private\n * @type {number}\n */\n this.textOffsetX_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.textOffsetY_ = 0;\n\n /**\n * @private\n * @type {boolean}\n */\n this.textRotateWithView_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.textRotation_ = 0;\n\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n this.textScale_ = [0, 0];\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n this.textFillState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n this.textStrokeState_ = null;\n\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n this.textState_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.pixelCoordinates_ = [];\n\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n this.tmpLocalTransform_ = createTransform();\n }\n\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n drawImages_(flatCoordinates, offset, end, stride) {\n if (!this.image_) {\n return;\n }\n const pixelCoordinates = transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n this.transform_,\n this.pixelCoordinates_\n );\n const context = this.context_;\n const localTransform = this.tmpLocalTransform_;\n const alpha = context.globalAlpha;\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha * this.imageOpacity_;\n }\n let rotation = this.imageRotation_;\n if (this.imageRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (let i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n const x = pixelCoordinates[i] - this.imageAnchorX_;\n const y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n if (\n rotation !== 0 ||\n this.imageScale_[0] != 1 ||\n this.imageScale_[1] != 1\n ) {\n const centerX = x + this.imageAnchorX_;\n const centerY = y + this.imageAnchorY_;\n composeTransform(\n localTransform,\n centerX,\n centerY,\n 1,\n 1,\n rotation,\n -centerX,\n -centerY\n );\n context.setTransform.apply(context, localTransform);\n context.translate(centerX, centerY);\n context.scale(this.imageScale_[0], this.imageScale_[1]);\n context.drawImage(\n this.image_,\n this.imageOriginX_,\n this.imageOriginY_,\n this.imageWidth_,\n this.imageHeight_,\n -this.imageAnchorX_,\n -this.imageAnchorY_,\n this.imageWidth_,\n this.imageHeight_\n );\n context.setTransform(1, 0, 0, 1, 0, 0);\n } else {\n context.drawImage(\n this.image_,\n this.imageOriginX_,\n this.imageOriginY_,\n this.imageWidth_,\n this.imageHeight_,\n x,\n y,\n this.imageWidth_,\n this.imageHeight_\n );\n }\n }\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha;\n }\n }\n\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n drawText_(flatCoordinates, offset, end, stride) {\n if (!this.textState_ || this.text_ === '') {\n return;\n }\n if (this.textFillState_) {\n this.setContextFillState_(this.textFillState_);\n }\n if (this.textStrokeState_) {\n this.setContextStrokeState_(this.textStrokeState_);\n }\n this.setContextTextState_(this.textState_);\n const pixelCoordinates = transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n this.transform_,\n this.pixelCoordinates_\n );\n const context = this.context_;\n let rotation = this.textRotation_;\n if (this.textRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (; offset < end; offset += stride) {\n const x = pixelCoordinates[offset] + this.textOffsetX_;\n const y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n if (\n rotation !== 0 ||\n this.textScale_[0] != 1 ||\n this.textScale_[1] != 1\n ) {\n context.translate(x - this.textOffsetX_, y - this.textOffsetY_);\n context.rotate(rotation);\n context.translate(this.textOffsetX_, this.textOffsetY_);\n context.scale(this.textScale_[0], this.textScale_[1]);\n if (this.textStrokeState_) {\n context.strokeText(this.text_, 0, 0);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, 0, 0);\n }\n context.setTransform(1, 0, 0, 1, 0, 0);\n } else {\n if (this.textStrokeState_) {\n context.strokeText(this.text_, x, y);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, x, y);\n }\n }\n }\n }\n\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} close Close.\n * @private\n * @return {number} end End.\n */\n moveToLineTo_(flatCoordinates, offset, end, stride, close) {\n const context = this.context_;\n const pixelCoordinates = transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n this.transform_,\n this.pixelCoordinates_\n );\n context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n let length = pixelCoordinates.length;\n if (close) {\n length -= 2;\n }\n for (let i = 2; i < length; i += 2) {\n context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n }\n if (close) {\n context.closePath();\n }\n return end;\n }\n\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\n drawRings_(flatCoordinates, offset, ends, stride) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(\n flatCoordinates,\n offset,\n ends[i],\n stride,\n true\n );\n }\n return offset;\n }\n\n /**\n * Render a circle geometry into the canvas. Rendering is immediate and uses\n * the current fill and stroke styles.\n *\n * @param {import(\"../../geom/Circle.js\").default} geometry Circle geometry.\n * @api\n */\n drawCircle(geometry) {\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.fillState_ || this.strokeState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n const pixelCoordinates = transformGeom2D(\n geometry,\n this.transform_,\n this.pixelCoordinates_\n );\n const dx = pixelCoordinates[2] - pixelCoordinates[0];\n const dy = pixelCoordinates[3] - pixelCoordinates[1];\n const radius = Math.sqrt(dx * dx + dy * dy);\n const context = this.context_;\n context.beginPath();\n context.arc(\n pixelCoordinates[0],\n pixelCoordinates[1],\n radius,\n 0,\n 2 * Math.PI\n );\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n this.drawText_(geometry.getCenter(), 0, 2, 2);\n }\n }\n\n /**\n * Set the rendering style. Note that since this is an immediate rendering API,\n * any `zIndex` on the provided style will be ignored.\n *\n * @param {import(\"../../style/Style.js\").default} style The rendering style.\n * @api\n */\n setStyle(style) {\n this.setFillStrokeStyle(style.getFill(), style.getStroke());\n this.setImageStyle(style.getImage());\n this.setTextStyle(style.getText());\n }\n\n /**\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n */\n setTransform(transform) {\n this.transform_ = transform;\n }\n\n /**\n * Render a geometry into the canvas. Call\n * {@link module:ol/render/canvas/Immediate~CanvasImmediateRenderer#setStyle renderer.setStyle()} first to set the rendering style.\n *\n * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry to render.\n * @api\n */\n drawGeometry(geometry) {\n const type = geometry.getType();\n switch (type) {\n case 'Point':\n this.drawPoint(\n /** @type {import(\"../../geom/Point.js\").default} */ (geometry)\n );\n break;\n case 'LineString':\n this.drawLineString(\n /** @type {import(\"../../geom/LineString.js\").default} */ (geometry)\n );\n break;\n case 'Polygon':\n this.drawPolygon(\n /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry)\n );\n break;\n case 'MultiPoint':\n this.drawMultiPoint(\n /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry)\n );\n break;\n case 'MultiLineString':\n this.drawMultiLineString(\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n geometry\n )\n );\n break;\n case 'MultiPolygon':\n this.drawMultiPolygon(\n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry)\n );\n break;\n case 'GeometryCollection':\n this.drawGeometryCollection(\n /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (\n geometry\n )\n );\n break;\n case 'Circle':\n this.drawCircle(\n /** @type {import(\"../../geom/Circle.js\").default} */ (geometry)\n );\n break;\n default:\n }\n }\n\n /**\n * Render a feature into the canvas. Note that any `zIndex` on the provided\n * style will be ignored - features are rendered immediately in the order that\n * this method is called. If you need `zIndex` support, you should be using an\n * {@link module:ol/layer/Vector~VectorLayer} instead.\n *\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @param {import(\"../../style/Style.js\").default} style Style.\n * @api\n */\n drawFeature(feature, style) {\n const geometry = style.getGeometryFunction()(feature);\n if (!geometry || !intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n this.setStyle(style);\n this.drawGeometry(geometry);\n }\n\n /**\n * Render a GeometryCollection to the canvas. Rendering is immediate and\n * uses the current styles appropriate for each geometry in the collection.\n *\n * @param {import(\"../../geom/GeometryCollection.js\").default} geometry Geometry collection.\n */\n drawGeometryCollection(geometry) {\n const geometries = geometry.getGeometriesArray();\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n this.drawGeometry(geometries[i]);\n }\n }\n\n /**\n * Render a Point geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} geometry Point geometry.\n */\n drawPoint(geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Point.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n const flatCoordinates = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n }\n\n /**\n * Render a MultiPoint geometry into the canvas. Rendering is immediate and\n * uses the current style.\n *\n * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} geometry MultiPoint geometry.\n */\n drawMultiPoint(geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n const flatCoordinates = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n }\n\n /**\n * Render a LineString into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} geometry LineString geometry.\n */\n drawLineString(geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/LineString.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n const context = this.context_;\n const flatCoordinates = geometry.getFlatCoordinates();\n context.beginPath();\n this.moveToLineTo_(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n geometry.getStride(),\n false\n );\n context.stroke();\n }\n if (this.text_ !== '') {\n const flatMidpoint = geometry.getFlatMidpoint();\n this.drawText_(flatMidpoint, 0, 2, 2);\n }\n }\n\n /**\n * Render a MultiLineString geometry into the canvas. Rendering is immediate\n * and uses the current style.\n *\n * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} geometry MultiLineString geometry.\n */\n drawMultiLineString(geometry) {\n if (this.squaredTolerance_) {\n geometry =\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n const geometryExtent = geometry.getExtent();\n if (!intersects(this.extent_, geometryExtent)) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n const context = this.context_;\n const flatCoordinates = geometry.getFlatCoordinates();\n let offset = 0;\n const ends = /** @type {Array} */ (geometry.getEnds());\n const stride = geometry.getStride();\n context.beginPath();\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(\n flatCoordinates,\n offset,\n ends[i],\n stride,\n false\n );\n }\n context.stroke();\n }\n if (this.text_ !== '') {\n const flatMidpoints = geometry.getFlatMidpoints();\n this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n }\n }\n\n /**\n * Render a Polygon geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} geometry Polygon geometry.\n */\n drawPolygon(geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Polygon.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n const context = this.context_;\n context.beginPath();\n this.drawRings_(\n geometry.getOrientedFlatCoordinates(),\n 0,\n /** @type {Array} */ (geometry.getEnds()),\n geometry.getStride()\n );\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n const flatInteriorPoint = geometry.getFlatInteriorPoint();\n this.drawText_(flatInteriorPoint, 0, 2, 2);\n }\n }\n\n /**\n * Render MultiPolygon geometry into the canvas. Rendering is immediate and\n * uses the current style.\n * @param {import(\"../../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n */\n drawMultiPolygon(geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n geometry.simplifyTransformed(\n this.squaredTolerance_,\n this.userTransform_\n )\n );\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n const context = this.context_;\n const flatCoordinates = geometry.getOrientedFlatCoordinates();\n let offset = 0;\n const endss = geometry.getEndss();\n const stride = geometry.getStride();\n context.beginPath();\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n offset = this.drawRings_(flatCoordinates, offset, ends, stride);\n }\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n const flatInteriorPoints = geometry.getFlatInteriorPoints();\n this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n }\n }\n\n /**\n * @param {import(\"../canvas.js\").FillState} fillState Fill state.\n * @private\n */\n setContextFillState_(fillState) {\n const context = this.context_;\n const contextFillState = this.contextFillState_;\n if (!contextFillState) {\n context.fillStyle = fillState.fillStyle;\n this.contextFillState_ = {\n fillStyle: fillState.fillStyle,\n };\n } else {\n if (contextFillState.fillStyle != fillState.fillStyle) {\n contextFillState.fillStyle = fillState.fillStyle;\n context.fillStyle = fillState.fillStyle;\n }\n }\n }\n\n /**\n * @param {import(\"../canvas.js\").StrokeState} strokeState Stroke state.\n * @private\n */\n setContextStrokeState_(strokeState) {\n const context = this.context_;\n const contextStrokeState = this.contextStrokeState_;\n if (!contextStrokeState) {\n context.lineCap = strokeState.lineCap;\n context.setLineDash(strokeState.lineDash);\n context.lineDashOffset = strokeState.lineDashOffset;\n context.lineJoin = strokeState.lineJoin;\n context.lineWidth = strokeState.lineWidth;\n context.miterLimit = strokeState.miterLimit;\n context.strokeStyle = strokeState.strokeStyle;\n this.contextStrokeState_ = {\n lineCap: strokeState.lineCap,\n lineDash: strokeState.lineDash,\n lineDashOffset: strokeState.lineDashOffset,\n lineJoin: strokeState.lineJoin,\n lineWidth: strokeState.lineWidth,\n miterLimit: strokeState.miterLimit,\n strokeStyle: strokeState.strokeStyle,\n };\n } else {\n if (contextStrokeState.lineCap != strokeState.lineCap) {\n contextStrokeState.lineCap = strokeState.lineCap;\n context.lineCap = strokeState.lineCap;\n }\n if (!equals(contextStrokeState.lineDash, strokeState.lineDash)) {\n context.setLineDash(\n (contextStrokeState.lineDash = strokeState.lineDash)\n );\n }\n if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n contextStrokeState.lineDashOffset = strokeState.lineDashOffset;\n context.lineDashOffset = strokeState.lineDashOffset;\n }\n if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n contextStrokeState.lineJoin = strokeState.lineJoin;\n context.lineJoin = strokeState.lineJoin;\n }\n if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n contextStrokeState.lineWidth = strokeState.lineWidth;\n context.lineWidth = strokeState.lineWidth;\n }\n if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n contextStrokeState.miterLimit = strokeState.miterLimit;\n context.miterLimit = strokeState.miterLimit;\n }\n if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n contextStrokeState.strokeStyle = strokeState.strokeStyle;\n context.strokeStyle = strokeState.strokeStyle;\n }\n }\n }\n\n /**\n * @param {import(\"../canvas.js\").TextState} textState Text state.\n * @private\n */\n setContextTextState_(textState) {\n const context = this.context_;\n const contextTextState = this.contextTextState_;\n const textAlign = textState.textAlign\n ? textState.textAlign\n : defaultTextAlign;\n if (!contextTextState) {\n context.font = textState.font;\n context.textAlign = textAlign;\n context.textBaseline = textState.textBaseline;\n this.contextTextState_ = {\n font: textState.font,\n textAlign: textAlign,\n textBaseline: textState.textBaseline,\n };\n } else {\n if (contextTextState.font != textState.font) {\n contextTextState.font = textState.font;\n context.font = textState.font;\n }\n if (contextTextState.textAlign != textAlign) {\n contextTextState.textAlign = textAlign;\n context.textAlign = textAlign;\n }\n if (contextTextState.textBaseline != textState.textBaseline) {\n contextTextState.textBaseline = textState.textBaseline;\n context.textBaseline = textState.textBaseline;\n }\n }\n }\n\n /**\n * Set the fill and stroke style for subsequent draw operations. To clear\n * either fill or stroke styles, pass null for the appropriate parameter.\n *\n * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n setFillStrokeStyle(fillStyle, strokeStyle) {\n if (!fillStyle) {\n this.fillState_ = null;\n } else {\n const fillStyleColor = fillStyle.getColor();\n this.fillState_ = {\n fillStyle: asColorLike(\n fillStyleColor ? fillStyleColor : defaultFillStyle\n ),\n };\n }\n if (!strokeStyle) {\n this.strokeState_ = null;\n } else {\n const strokeStyleColor = strokeStyle.getColor();\n const strokeStyleLineCap = strokeStyle.getLineCap();\n const strokeStyleLineDash = strokeStyle.getLineDash();\n const strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n const strokeStyleLineJoin = strokeStyle.getLineJoin();\n const strokeStyleWidth = strokeStyle.getWidth();\n const strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n const lineDash = strokeStyleLineDash\n ? strokeStyleLineDash\n : defaultLineDash;\n this.strokeState_ = {\n lineCap:\n strokeStyleLineCap !== undefined\n ? strokeStyleLineCap\n : defaultLineCap,\n lineDash:\n this.pixelRatio_ === 1\n ? lineDash\n : lineDash.map((n) => n * this.pixelRatio_),\n lineDashOffset:\n (strokeStyleLineDashOffset\n ? strokeStyleLineDashOffset\n : defaultLineDashOffset) * this.pixelRatio_,\n lineJoin:\n strokeStyleLineJoin !== undefined\n ? strokeStyleLineJoin\n : defaultLineJoin,\n lineWidth:\n (strokeStyleWidth !== undefined\n ? strokeStyleWidth\n : defaultLineWidth) * this.pixelRatio_,\n miterLimit:\n strokeStyleMiterLimit !== undefined\n ? strokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(\n strokeStyleColor ? strokeStyleColor : defaultStrokeStyle\n ),\n };\n }\n }\n\n /**\n * Set the image style for subsequent draw operations. Pass null to remove\n * the image style.\n *\n * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n */\n setImageStyle(imageStyle) {\n let imageSize;\n if (!imageStyle || !(imageSize = imageStyle.getSize())) {\n this.image_ = null;\n return;\n }\n const imagePixelRatio = imageStyle.getPixelRatio(this.pixelRatio_);\n const imageAnchor = imageStyle.getAnchor();\n const imageOrigin = imageStyle.getOrigin();\n this.image_ = imageStyle.getImage(this.pixelRatio_);\n this.imageAnchorX_ = imageAnchor[0] * imagePixelRatio;\n this.imageAnchorY_ = imageAnchor[1] * imagePixelRatio;\n this.imageHeight_ = imageSize[1] * imagePixelRatio;\n this.imageOpacity_ = imageStyle.getOpacity();\n this.imageOriginX_ = imageOrigin[0];\n this.imageOriginY_ = imageOrigin[1];\n this.imageRotateWithView_ = imageStyle.getRotateWithView();\n this.imageRotation_ = imageStyle.getRotation();\n const imageScale = imageStyle.getScaleArray();\n this.imageScale_ = [\n (imageScale[0] * this.pixelRatio_) / imagePixelRatio,\n (imageScale[1] * this.pixelRatio_) / imagePixelRatio,\n ];\n this.imageWidth_ = imageSize[0] * imagePixelRatio;\n }\n\n /**\n * Set the text style for subsequent draw operations. Pass null to\n * remove the text style.\n *\n * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n */\n setTextStyle(textStyle) {\n if (!textStyle) {\n this.text_ = '';\n } else {\n const textFillStyle = textStyle.getFill();\n if (!textFillStyle) {\n this.textFillState_ = null;\n } else {\n const textFillStyleColor = textFillStyle.getColor();\n this.textFillState_ = {\n fillStyle: asColorLike(\n textFillStyleColor ? textFillStyleColor : defaultFillStyle\n ),\n };\n }\n const textStrokeStyle = textStyle.getStroke();\n if (!textStrokeStyle) {\n this.textStrokeState_ = null;\n } else {\n const textStrokeStyleColor = textStrokeStyle.getColor();\n const textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n const textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n const textStrokeStyleLineDashOffset =\n textStrokeStyle.getLineDashOffset();\n const textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n const textStrokeStyleWidth = textStrokeStyle.getWidth();\n const textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n this.textStrokeState_ = {\n lineCap:\n textStrokeStyleLineCap !== undefined\n ? textStrokeStyleLineCap\n : defaultLineCap,\n lineDash: textStrokeStyleLineDash\n ? textStrokeStyleLineDash\n : defaultLineDash,\n lineDashOffset: textStrokeStyleLineDashOffset\n ? textStrokeStyleLineDashOffset\n : defaultLineDashOffset,\n lineJoin:\n textStrokeStyleLineJoin !== undefined\n ? textStrokeStyleLineJoin\n : defaultLineJoin,\n lineWidth:\n textStrokeStyleWidth !== undefined\n ? textStrokeStyleWidth\n : defaultLineWidth,\n miterLimit:\n textStrokeStyleMiterLimit !== undefined\n ? textStrokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(\n textStrokeStyleColor ? textStrokeStyleColor : defaultStrokeStyle\n ),\n };\n }\n const textFont = textStyle.getFont();\n const textOffsetX = textStyle.getOffsetX();\n const textOffsetY = textStyle.getOffsetY();\n const textRotateWithView = textStyle.getRotateWithView();\n const textRotation = textStyle.getRotation();\n const textScale = textStyle.getScaleArray();\n const textText = textStyle.getText();\n const textTextAlign = textStyle.getTextAlign();\n const textTextBaseline = textStyle.getTextBaseline();\n this.textState_ = {\n font: textFont !== undefined ? textFont : defaultFont,\n textAlign:\n textTextAlign !== undefined ? textTextAlign : defaultTextAlign,\n textBaseline:\n textTextBaseline !== undefined\n ? textTextBaseline\n : defaultTextBaseline,\n };\n this.text_ =\n textText !== undefined\n ? Array.isArray(textText)\n ? textText.reduce((acc, t, i) => (acc += i % 2 ? ' ' : t), '')\n : textText\n : '';\n this.textOffsetX_ =\n textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;\n this.textOffsetY_ =\n textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;\n this.textRotateWithView_ =\n textRotateWithView !== undefined ? textRotateWithView : false;\n this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n this.textScale_ = [\n this.pixelRatio_ * textScale[0],\n this.pixelRatio_ * textScale[1],\n ];\n }\n }\n}\n\nexport default CanvasImmediateRenderer;\n","/**\n * @module ol/renderer/vector\n */\nimport ImageState from '../ImageState.js';\nimport {getUid} from '../util.js';\n\n/**\n * Feature callback. The callback will be called with three arguments. The first\n * argument is one {@link module:ol/Feature~Feature feature} or {@link module:ol/render/Feature~RenderFeature render feature}\n * at the pixel, the second is the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. The third is the {@link module:ol/geom/SimpleGeometry~SimpleGeometry} of the feature. For features\n * with a GeometryCollection geometry, it will be the first detected geometry from the collection.\n * @template T\n * @typedef {function(import(\"../Feature.js\").FeatureLike, import(\"../layer/Layer.js\").default, import(\"../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n\n/**\n * Tolerance for geometry simplification in device pixels.\n * @type {number}\n */\nconst SIMPLIFY_TOLERANCE = 0.5;\n\n/**\n * @const\n * @type {Object}\n */\nconst GEOMETRY_RENDERERS = {\n 'Point': renderPointGeometry,\n 'LineString': renderLineStringGeometry,\n 'Polygon': renderPolygonGeometry,\n 'MultiPoint': renderMultiPointGeometry,\n 'MultiLineString': renderMultiLineStringGeometry,\n 'MultiPolygon': renderMultiPolygonGeometry,\n 'GeometryCollection': renderGeometryCollectionGeometry,\n 'Circle': renderCircleGeometry,\n};\n\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature1 Feature 1.\n * @param {import(\"../Feature.js\").FeatureLike} feature2 Feature 2.\n * @return {number} Order.\n */\nexport function defaultOrder(feature1, feature2) {\n return parseInt(getUid(feature1), 10) - parseInt(getUid(feature2), 10);\n}\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nexport function getSquaredTolerance(resolution, pixelRatio) {\n const tolerance = getTolerance(resolution, pixelRatio);\n return tolerance * tolerance;\n}\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nexport function getTolerance(resolution, pixelRatio) {\n return (SIMPLIFY_TOLERANCE * resolution) / pixelRatio;\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderCircleGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const fillStyle = style.getFill();\n const strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n const circleReplay = builderGroup.getBuilder(style.getZIndex(), 'Circle');\n circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n circleReplay.drawCircle(geometry, feature);\n }\n const textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n const textReplay = (declutterBuilderGroup || builderGroup).getBuilder(\n style.getZIndex(),\n 'Text'\n );\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Transform from user to view projection.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n * @return {boolean} `true` if style is loading.\n */\nexport function renderFeature(\n replayGroup,\n feature,\n style,\n squaredTolerance,\n listener,\n transform,\n declutterBuilderGroup\n) {\n let loading = false;\n const imageStyle = style.getImage();\n if (imageStyle) {\n const imageState = imageStyle.getImageState();\n if (imageState == ImageState.LOADED || imageState == ImageState.ERROR) {\n imageStyle.unlistenImageChange(listener);\n } else {\n if (imageState == ImageState.IDLE) {\n imageStyle.load();\n }\n imageStyle.listenImageChange(listener);\n loading = true;\n }\n }\n renderFeatureInternal(\n replayGroup,\n feature,\n style,\n squaredTolerance,\n transform,\n declutterBuilderGroup\n );\n\n return loading;\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderFeatureInternal(\n replayGroup,\n feature,\n style,\n squaredTolerance,\n transform,\n declutterBuilderGroup\n) {\n const geometry = style.getGeometryFunction()(feature);\n if (!geometry) {\n return;\n }\n const simplifiedGeometry = geometry.simplifyTransformed(\n squaredTolerance,\n transform\n );\n const renderer = style.getRenderer();\n if (renderer) {\n renderGeometry(replayGroup, simplifiedGeometry, style, feature);\n } else {\n const geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];\n geometryRenderer(\n replayGroup,\n simplifiedGeometry,\n style,\n feature,\n declutterBuilderGroup\n );\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\nfunction renderGeometry(replayGroup, geometry, style, feature) {\n if (geometry.getType() == 'GeometryCollection') {\n const geometries =\n /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (let i = 0, ii = geometries.length; i < ii; ++i) {\n renderGeometry(replayGroup, geometries[i], style, feature);\n }\n return;\n }\n const replay = replayGroup.getBuilder(style.getZIndex(), 'Default');\n replay.drawCustom(\n /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geometry),\n feature,\n style.getRenderer(),\n style.getHitDetectionRenderer()\n );\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderGeometryCollectionGeometry(\n replayGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const geometries = geometry.getGeometriesArray();\n let i, ii;\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n const geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];\n geometryRenderer(\n replayGroup,\n geometries[i],\n style,\n feature,\n declutterBuilderGroup\n );\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/LineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderLineStringGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const strokeStyle = style.getStroke();\n if (strokeStyle) {\n const lineStringReplay = builderGroup.getBuilder(\n style.getZIndex(),\n 'LineString'\n );\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawLineString(geometry, feature);\n }\n const textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n const textReplay = (declutterBuilderGroup || builderGroup).getBuilder(\n style.getZIndex(),\n 'Text'\n );\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiLineStringGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const strokeStyle = style.getStroke();\n if (strokeStyle) {\n const lineStringReplay = builderGroup.getBuilder(\n style.getZIndex(),\n 'LineString'\n );\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawMultiLineString(geometry, feature);\n }\n const textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n const textReplay = (declutterBuilderGroup || builderGroup).getBuilder(\n style.getZIndex(),\n 'Text'\n );\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiPolygonGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const fillStyle = style.getFill();\n const strokeStyle = style.getStroke();\n if (strokeStyle || fillStyle) {\n const polygonReplay = builderGroup.getBuilder(style.getZIndex(), 'Polygon');\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawMultiPolygon(geometry, feature);\n }\n const textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n const textReplay = (declutterBuilderGroup || builderGroup).getBuilder(\n style.getZIndex(),\n 'Text'\n );\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Point.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderPointGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const imageStyle = style.getImage();\n const textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n let declutterImageWithText;\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n let imageBuilderGroup = builderGroup;\n if (declutterBuilderGroup) {\n const declutterMode = imageStyle.getDeclutterMode();\n if (declutterMode !== 'none') {\n imageBuilderGroup = declutterBuilderGroup;\n if (declutterMode === 'obstacle') {\n // draw in non-declutter group:\n const imageReplay = builderGroup.getBuilder(\n style.getZIndex(),\n 'Image'\n );\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawPoint(geometry, feature);\n } else if (textStyle && textStyle.getText()) {\n declutterImageWithText = {};\n }\n }\n }\n const imageReplay = imageBuilderGroup.getBuilder(\n style.getZIndex(),\n 'Image'\n );\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n let textBuilderGroup = builderGroup;\n if (declutterBuilderGroup) {\n textBuilderGroup = declutterBuilderGroup;\n }\n const textReplay = textBuilderGroup.getBuilder(style.getZIndex(), 'Text');\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiPointGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const imageStyle = style.getImage();\n const textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n let declutterImageWithText;\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n let imageBuilderGroup = builderGroup;\n if (declutterBuilderGroup) {\n const declutterMode = imageStyle.getDeclutterMode();\n if (declutterMode !== 'none') {\n imageBuilderGroup = declutterBuilderGroup;\n if (declutterMode === 'obstacle') {\n // draw in non-declutter group:\n const imageReplay = builderGroup.getBuilder(\n style.getZIndex(),\n 'Image'\n );\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawMultiPoint(geometry, feature);\n } else if (textStyle && textStyle.getText()) {\n declutterImageWithText = {};\n }\n }\n }\n const imageReplay = imageBuilderGroup.getBuilder(\n style.getZIndex(),\n 'Image'\n );\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawMultiPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n let textBuilderGroup = builderGroup;\n if (declutterBuilderGroup) {\n textBuilderGroup = declutterBuilderGroup;\n }\n const textReplay = textBuilderGroup.getBuilder(style.getZIndex(), 'Text');\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Polygon.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderPolygonGeometry(\n builderGroup,\n geometry,\n style,\n feature,\n declutterBuilderGroup\n) {\n const fillStyle = style.getFill();\n const strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n const polygonReplay = builderGroup.getBuilder(style.getZIndex(), 'Polygon');\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawPolygon(geometry, feature);\n }\n const textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n const textReplay = (declutterBuilderGroup || builderGroup).getBuilder(\n style.getZIndex(),\n 'Text'\n );\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n","/**\n * @module ol/render\n */\nimport CanvasImmediateRenderer from './render/canvas/Immediate.js';\nimport {DEVICE_PIXEL_RATIO} from './has.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n multiply as multiplyTransform,\n scale as scaleTransform,\n} from './transform.js';\nimport {getSquaredTolerance} from './renderer/vector.js';\nimport {getTransformFromProjections, getUserProjection} from './proj.js';\n\n/**\n * @typedef {Object} State\n * @property {CanvasRenderingContext2D} context Canvas context that the layer is being rendered to.\n * @property {import(\"./Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"./geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} pixelRatio Pixel ratio used by the layer renderer.\n * @property {number} resolution Resolution that the render batch was created and optimized for.\n * This is not the view's resolution that is being rendered.\n * @property {number} rotation Rotation of the rendered layer in radians.\n */\n\n/**\n * A function to be used when sorting features before rendering.\n * It takes two instances of {@link module:ol/Feature~Feature} or\n * {@link module:ol/render/Feature~RenderFeature} and returns a `{number}`.\n *\n * @typedef {function(import(\"./Feature.js\").FeatureLike, import(\"./Feature.js\").FeatureLike):number} OrderFunction\n */\n\n/**\n * @typedef {Object} ToContextOptions\n * @property {import(\"./size.js\").Size} [size] Desired size of the canvas in css\n * pixels. When provided, both canvas and css size will be set according to the\n * `pixelRatio`. If not provided, the current canvas and css sizes will not be\n * altered.\n * @property {number} [pixelRatio=window.devicePixelRatio] Pixel ratio (canvas\n * pixel to css pixel ratio) for the canvas.\n */\n\n/**\n * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries\n * to the context's canvas.\n *\n * The units for geometry coordinates are css pixels relative to the top left\n * corner of the canvas element.\n * ```js\n * import {toContext} from 'ol/render';\n * import Fill from 'ol/style/Fill';\n * import Polygon from 'ol/geom/Polygon';\n *\n * const canvas = document.createElement('canvas');\n * const render = toContext(\n * canvas.getContext('2d'),\n * {size: [100, 100]}\n * );\n * render.setFillStrokeStyle(new Fill({ color: blue }));\n * render.drawPolygon(\n * new Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]])\n * );\n * ```\n *\n * @param {CanvasRenderingContext2D} context Canvas context.\n * @param {ToContextOptions} [options] Options.\n * @return {CanvasImmediateRenderer} Canvas Immediate.\n * @api\n */\nexport function toContext(context, options) {\n const canvas = context.canvas;\n options = options ? options : {};\n const pixelRatio = options.pixelRatio || DEVICE_PIXEL_RATIO;\n const size = options.size;\n if (size) {\n canvas.width = size[0] * pixelRatio;\n canvas.height = size[1] * pixelRatio;\n canvas.style.width = size[0] + 'px';\n canvas.style.height = size[1] + 'px';\n }\n const extent = [0, 0, canvas.width, canvas.height];\n const transform = scaleTransform(createTransform(), pixelRatio, pixelRatio);\n return new CanvasImmediateRenderer(context, pixelRatio, extent, transform, 0);\n}\n\n/**\n * Gets a vector context for drawing to the event's canvas.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @return {CanvasImmediateRenderer} Vector context.\n * @api\n */\nexport function getVectorContext(event) {\n if (!(event.context instanceof CanvasRenderingContext2D)) {\n throw new Error('Only works for render events from Canvas 2D layers');\n }\n\n // canvas may be at a different pixel ratio than frameState.pixelRatio\n const canvasPixelRatio = event.inversePixelTransform[0];\n const frameState = event.frameState;\n const transform = multiplyTransform(\n event.inversePixelTransform.slice(),\n frameState.coordinateToPixelTransform\n );\n const squaredTolerance = getSquaredTolerance(\n frameState.viewState.resolution,\n canvasPixelRatio\n );\n let userTransform;\n const userProjection = getUserProjection();\n if (userProjection) {\n userTransform = getTransformFromProjections(\n userProjection,\n frameState.viewState.projection\n );\n }\n\n return new CanvasImmediateRenderer(\n event.context,\n canvasPixelRatio,\n frameState.extent,\n transform,\n frameState.viewState.rotation,\n squaredTolerance,\n userTransform\n );\n}\n\n/**\n * Gets the pixel of the event's canvas context from the map viewport's CSS pixel.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @param {import(\"./pixel.js\").Pixel} pixel CSS pixel relative to the top-left\n * corner of the map viewport.\n * @return {import(\"./pixel.js\").Pixel} Pixel on the event's canvas context.\n * @api\n */\nexport function getRenderPixel(event, pixel) {\n return applyTransform(event.inversePixelTransform, pixel.slice(0));\n}\n","/**\n * @module ol/reproj\n */\nimport {\n containsCoordinate,\n createEmpty,\n extend,\n forEachCorner,\n getCenter,\n getHeight,\n getTopLeft,\n getWidth,\n} from './extent.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {getPointResolution, transform} from './proj.js';\nimport {solveLinearSystem} from './math.js';\n\nlet brokenDiagonalRendering_;\n\n/**\n * @type {Array}\n */\nexport const canvasPool = [];\n\n/**\n * This draws a small triangle into a canvas by setting the triangle as the clip region\n * and then drawing a (too large) rectangle\n *\n * @param {CanvasRenderingContext2D} ctx The context in which to draw the triangle\n * @param {number} u1 The x-coordinate of the second point. The first point is 0,0.\n * @param {number} v1 The y-coordinate of the second point.\n * @param {number} u2 The x-coordinate of the third point.\n * @param {number} v2 The y-coordinate of the third point.\n */\nfunction drawTestTriangle(ctx, u1, v1, u2, v2) {\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(u1, v1);\n ctx.lineTo(u2, v2);\n ctx.closePath();\n ctx.save();\n ctx.clip();\n ctx.fillRect(0, 0, Math.max(u1, u2) + 1, Math.max(v1, v2));\n ctx.restore();\n}\n\n/**\n * Given the data from getImageData, see if the right values appear at the provided offset.\n * Returns true if either the color or transparency is off\n *\n * @param {Uint8ClampedArray} data The data returned from getImageData\n * @param {number} offset The pixel offset from the start of data.\n * @return {boolean} true if the diagonal rendering is broken\n */\nfunction verifyBrokenDiagonalRendering(data, offset) {\n // the values ought to be close to the rgba(210, 0, 0, 0.75)\n return (\n Math.abs(data[offset * 4] - 210) > 2 ||\n Math.abs(data[offset * 4 + 3] - 0.75 * 255) > 2\n );\n}\n\n/**\n * Determines if the current browser configuration can render triangular clip regions correctly.\n * This value is cached so the function is only expensive the first time called.\n * Firefox on Windows (as of now) does not if HWA is enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1606976\n * Chrome works, and everything seems to work on OSX and Android. This function caches the\n * result. I suppose that it is conceivably possible that a browser might flip modes while the app is\n * running, but lets hope not.\n *\n * @return {boolean} true if the Diagonal Rendering is broken.\n */\nfunction isBrokenDiagonalRendering() {\n if (brokenDiagonalRendering_ === undefined) {\n const ctx = document.createElement('canvas').getContext('2d');\n ctx.globalCompositeOperation = 'lighter';\n ctx.fillStyle = 'rgba(210, 0, 0, 0.75)';\n drawTestTriangle(ctx, 4, 5, 4, 0);\n drawTestTriangle(ctx, 4, 5, 0, 5);\n const data = ctx.getImageData(0, 0, 3, 3).data;\n brokenDiagonalRendering_ =\n verifyBrokenDiagonalRendering(data, 0) ||\n verifyBrokenDiagonalRendering(data, 4) ||\n verifyBrokenDiagonalRendering(data, 8);\n }\n\n return brokenDiagonalRendering_;\n}\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./coordinate.js\").Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceResolution(\n sourceProj,\n targetProj,\n targetCenter,\n targetResolution\n) {\n const sourceCenter = transform(targetCenter, targetProj, sourceProj);\n\n // calculate the ideal resolution of the source data\n let sourceResolution = getPointResolution(\n targetProj,\n targetResolution,\n targetCenter\n );\n\n const targetMetersPerUnit = targetProj.getMetersPerUnit();\n if (targetMetersPerUnit !== undefined) {\n sourceResolution *= targetMetersPerUnit;\n }\n const sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n if (sourceMetersPerUnit !== undefined) {\n sourceResolution /= sourceMetersPerUnit;\n }\n\n // Based on the projection properties, the point resolution at the specified\n // coordinates may be slightly different. We need to reverse-compensate this\n // in order to achieve optimal results.\n\n const sourceExtent = sourceProj.getExtent();\n if (!sourceExtent || containsCoordinate(sourceExtent, sourceCenter)) {\n const compensationFactor =\n getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n sourceResolution;\n if (isFinite(compensationFactor) && compensationFactor > 0) {\n sourceResolution /= compensationFactor;\n }\n }\n\n return sourceResolution;\n}\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceExtentResolution(\n sourceProj,\n targetProj,\n targetExtent,\n targetResolution\n) {\n const targetCenter = getCenter(targetExtent);\n let sourceResolution = calculateSourceResolution(\n sourceProj,\n targetProj,\n targetCenter,\n targetResolution\n );\n\n if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n forEachCorner(targetExtent, function (corner) {\n sourceResolution = calculateSourceResolution(\n sourceProj,\n targetProj,\n corner,\n targetResolution\n );\n return isFinite(sourceResolution) && sourceResolution > 0;\n });\n }\n\n return sourceResolution;\n}\n\n/**\n * @typedef {Object} ImageExtent\n * @property {import(\"./extent.js\").Extent} extent Extent.\n * @property {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.\n */\n\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {import(\"./extent.js\").Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent.\n * @param {import(\"./reproj/Triangulation.js\").default} triangulation Calculated triangulation.\n * @param {Array} sources Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean} [renderEdges] Render reprojection edges.\n * @param {boolean} [interpolate] Use linear interpolation when resampling.\n * @return {HTMLCanvasElement} Canvas with reprojected data.\n */\nexport function render(\n width,\n height,\n pixelRatio,\n sourceResolution,\n sourceExtent,\n targetResolution,\n targetExtent,\n triangulation,\n sources,\n gutter,\n renderEdges,\n interpolate\n) {\n const context = createCanvasContext2D(\n Math.round(pixelRatio * width),\n Math.round(pixelRatio * height),\n canvasPool\n );\n\n if (!interpolate) {\n context.imageSmoothingEnabled = false;\n }\n\n if (sources.length === 0) {\n return context.canvas;\n }\n\n context.scale(pixelRatio, pixelRatio);\n\n function pixelRound(value) {\n return Math.round(value * pixelRatio) / pixelRatio;\n }\n\n context.globalCompositeOperation = 'lighter';\n\n const sourceDataExtent = createEmpty();\n sources.forEach(function (src, i, arr) {\n extend(sourceDataExtent, src.extent);\n });\n\n const canvasWidthInUnits = getWidth(sourceDataExtent);\n const canvasHeightInUnits = getHeight(sourceDataExtent);\n const stitchContext = createCanvasContext2D(\n Math.round((pixelRatio * canvasWidthInUnits) / sourceResolution),\n Math.round((pixelRatio * canvasHeightInUnits) / sourceResolution)\n );\n\n if (!interpolate) {\n stitchContext.imageSmoothingEnabled = false;\n }\n\n const stitchScale = pixelRatio / sourceResolution;\n\n sources.forEach(function (src, i, arr) {\n const xPos = src.extent[0] - sourceDataExtent[0];\n const yPos = -(src.extent[3] - sourceDataExtent[3]);\n const srcWidth = getWidth(src.extent);\n const srcHeight = getHeight(src.extent);\n\n // This test should never fail -- but it does. Need to find a fix the upstream condition\n if (src.image.width > 0 && src.image.height > 0) {\n stitchContext.drawImage(\n src.image,\n gutter,\n gutter,\n src.image.width - 2 * gutter,\n src.image.height - 2 * gutter,\n xPos * stitchScale,\n yPos * stitchScale,\n srcWidth * stitchScale,\n srcHeight * stitchScale\n );\n }\n });\n\n const targetTopLeft = getTopLeft(targetExtent);\n\n triangulation.getTriangles().forEach(function (triangle, i, arr) {\n /* Calculate affine transform (src -> dst)\n * Resulting matrix can be used to transform coordinate\n * from `sourceProjection` to destination pixels.\n *\n * To optimize number of context calls and increase numerical stability,\n * we also do the following operations:\n * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n * here before solving the linear system so [ui, vi] are pixel coordinates.\n *\n * Src points: xi, yi\n * Dst points: ui, vi\n * Affine coefficients: aij\n *\n * | x0 y0 1 0 0 0 | |a00| |u0|\n * | x1 y1 1 0 0 0 | |a01| |u1|\n * | x2 y2 1 0 0 0 | x |a02| = |u2|\n * | 0 0 0 x0 y0 1 | |a10| |v0|\n * | 0 0 0 x1 y1 1 | |a11| |v1|\n * | 0 0 0 x2 y2 1 | |a12| |v2|\n */\n const source = triangle.source;\n const target = triangle.target;\n let x0 = source[0][0],\n y0 = source[0][1];\n let x1 = source[1][0],\n y1 = source[1][1];\n let x2 = source[2][0],\n y2 = source[2][1];\n // Make sure that everything is on pixel boundaries\n const u0 = pixelRound((target[0][0] - targetTopLeft[0]) / targetResolution);\n const v0 = pixelRound(\n -(target[0][1] - targetTopLeft[1]) / targetResolution\n );\n const u1 = pixelRound((target[1][0] - targetTopLeft[0]) / targetResolution);\n const v1 = pixelRound(\n -(target[1][1] - targetTopLeft[1]) / targetResolution\n );\n const u2 = pixelRound((target[2][0] - targetTopLeft[0]) / targetResolution);\n const v2 = pixelRound(\n -(target[2][1] - targetTopLeft[1]) / targetResolution\n );\n\n // Shift all the source points to improve numerical stability\n // of all the subsequent calculations. The [x0, y0] is used here.\n // This is also used to simplify the linear system.\n const sourceNumericalShiftX = x0;\n const sourceNumericalShiftY = y0;\n x0 = 0;\n y0 = 0;\n x1 -= sourceNumericalShiftX;\n y1 -= sourceNumericalShiftY;\n x2 -= sourceNumericalShiftX;\n y2 -= sourceNumericalShiftY;\n\n const augmentedMatrix = [\n [x1, y1, 0, 0, u1 - u0],\n [x2, y2, 0, 0, u2 - u0],\n [0, 0, x1, y1, v1 - v0],\n [0, 0, x2, y2, v2 - v0],\n ];\n const affineCoefs = solveLinearSystem(augmentedMatrix);\n if (!affineCoefs) {\n return;\n }\n\n context.save();\n context.beginPath();\n\n if (isBrokenDiagonalRendering() || !interpolate) {\n // Make sure that all lines are horizontal or vertical\n context.moveTo(u1, v1);\n // This is the diagonal line. Do it in 4 steps\n const steps = 4;\n const ud = u0 - u1;\n const vd = v0 - v1;\n for (let step = 0; step < steps; step++) {\n // Go horizontally\n context.lineTo(\n u1 + pixelRound(((step + 1) * ud) / steps),\n v1 + pixelRound((step * vd) / (steps - 1))\n );\n // Go vertically\n if (step != steps - 1) {\n context.lineTo(\n u1 + pixelRound(((step + 1) * ud) / steps),\n v1 + pixelRound(((step + 1) * vd) / (steps - 1))\n );\n }\n }\n // We are almost at u0r, v0r\n context.lineTo(u2, v2);\n } else {\n context.moveTo(u1, v1);\n context.lineTo(u0, v0);\n context.lineTo(u2, v2);\n }\n\n context.clip();\n\n context.transform(\n affineCoefs[0],\n affineCoefs[2],\n affineCoefs[1],\n affineCoefs[3],\n u0,\n v0\n );\n\n context.translate(\n sourceDataExtent[0] - sourceNumericalShiftX,\n sourceDataExtent[3] - sourceNumericalShiftY\n );\n\n context.scale(\n sourceResolution / pixelRatio,\n -sourceResolution / pixelRatio\n );\n\n context.drawImage(stitchContext.canvas, 0, 0);\n context.restore();\n });\n\n if (renderEdges) {\n context.save();\n\n context.globalCompositeOperation = 'source-over';\n context.strokeStyle = 'black';\n context.lineWidth = 1;\n\n triangulation.getTriangles().forEach(function (triangle, i, arr) {\n const target = triangle.target;\n const u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n const v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n const u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n const v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n const u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n const v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n context.beginPath();\n context.moveTo(u1, v1);\n context.lineTo(u0, v0);\n context.lineTo(u2, v2);\n context.closePath();\n context.stroke();\n });\n\n context.restore();\n }\n return context.canvas;\n}\n","/**\n * @module ol/tilegrid/TileGrid\n */\nimport TileRange, {\n createOrUpdate as createOrUpdateTileRange,\n} from '../TileRange.js';\nimport {DEFAULT_TILE_SIZE} from './common.js';\nimport {assert} from '../asserts.js';\nimport {ceil, clamp, floor} from '../math.js';\nimport {createOrUpdate, getTopLeft} from '../extent.js';\nimport {createOrUpdate as createOrUpdateTileCoord} from '../tilecoord.js';\nimport {intersectsLinearRing} from '../geom/flat/intersectsextent.js';\nimport {isSorted, linearFindNearest} from '../array.js';\nimport {toSize} from '../size.js';\n\n/**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\nconst tmpTileCoord = [0, 0, 0];\n\n/**\n * Number of decimal digits to consider in integer values when rounding.\n * @type {number}\n */\nconst DECIMALS = 5;\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles outside this\n * extent will be requested by {@link module:ol/source/Tile~TileSource} sources. When no `origin` or\n * `origins` are configured, the `origin` will be set to the top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e. where the `x`\n * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and downwards. If not\n * specified, `extent` or `origins` must be provided.\n * @property {Array} [origins] Tile grid origins, i.e. where\n * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * origin. Tile coordinates increase left to right and downwards. If not specified, `extent` or\n * `origin` must be provided.\n * @property {!Array} resolutions Resolutions. The array index of each resolution needs\n * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions\n * array will have a length of `maxZoom + 1`.\n * @property {Array} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. If specified the values\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent\n * for which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * Default is `[256, 256]`.\n * @property {Array} [tileSizes] Tile sizes. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * tile size.\n */\n\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n * @api\n */\nclass TileGrid {\n /**\n * @param {Options} options Tile grid options.\n */\n constructor(options) {\n /**\n * @protected\n * @type {number}\n */\n this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;\n\n /**\n * @private\n * @type {!Array}\n */\n this.resolutions_ = options.resolutions;\n assert(\n isSorted(\n this.resolutions_,\n function (a, b) {\n return b - a;\n },\n true\n ),\n 17\n ); // `resolutions` must be sorted in descending order\n\n // check if we've got a consistent zoom factor and origin\n let zoomFactor;\n if (!options.origins) {\n for (let i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n if (!zoomFactor) {\n zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n } else {\n if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n zoomFactor = undefined;\n break;\n }\n }\n }\n }\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.zoomFactor_ = zoomFactor;\n\n /**\n * @protected\n * @type {number}\n */\n this.maxZoom = this.resolutions_.length - 1;\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate|null}\n */\n this.origin_ = options.origin !== undefined ? options.origin : null;\n\n /**\n * @private\n * @type {Array}\n */\n this.origins_ = null;\n if (options.origins !== undefined) {\n this.origins_ = options.origins;\n assert(this.origins_.length == this.resolutions_.length, 20); // Number of `origins` and `resolutions` must be equal\n }\n\n const extent = options.extent;\n\n if (extent !== undefined && !this.origin_ && !this.origins_) {\n this.origin_ = getTopLeft(extent);\n }\n\n assert(\n (!this.origin_ && this.origins_) || (this.origin_ && !this.origins_),\n 18\n ); // Either `origin` or `origins` must be configured, never both\n\n /**\n * @private\n * @type {Array}\n */\n this.tileSizes_ = null;\n if (options.tileSizes !== undefined) {\n this.tileSizes_ = options.tileSizes;\n assert(this.tileSizes_.length == this.resolutions_.length, 19); // Number of `tileSizes` and `resolutions` must be equal\n }\n\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.tileSize_ =\n options.tileSize !== undefined\n ? options.tileSize\n : !this.tileSizes_\n ? DEFAULT_TILE_SIZE\n : null;\n assert(\n (!this.tileSize_ && this.tileSizes_) ||\n (this.tileSize_ && !this.tileSizes_),\n 22\n ); // Either `tileSize` or `tileSizes` must be configured, never both\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = extent !== undefined ? extent : null;\n\n /**\n * @private\n * @type {Array}\n */\n this.fullTileRanges_ = null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.tmpSize_ = [0, 0];\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.tmpExtent_ = [0, 0, 0, 0];\n\n if (options.sizes !== undefined) {\n this.fullTileRanges_ = options.sizes.map(function (size, z) {\n const tileRange = new TileRange(\n Math.min(0, size[0]),\n Math.max(size[0] - 1, -1),\n Math.min(0, size[1]),\n Math.max(size[1] - 1, -1)\n );\n if (extent) {\n const restrictedTileRange = this.getTileRangeForExtentAndZ(extent, z);\n tileRange.minX = Math.max(restrictedTileRange.minX, tileRange.minX);\n tileRange.maxX = Math.min(restrictedTileRange.maxX, tileRange.maxX);\n tileRange.minY = Math.max(restrictedTileRange.minY, tileRange.minY);\n tileRange.maxY = Math.min(restrictedTileRange.maxY, tileRange.maxY);\n }\n return tileRange;\n }, this);\n } else if (extent) {\n this.calculateTileRanges_(extent);\n }\n }\n\n /**\n * Call a function with each tile coordinate for a given extent and zoom level.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} zoom Integer zoom level.\n * @param {function(import(\"../tilecoord.js\").TileCoord): void} callback Function called with each tile coordinate.\n * @api\n */\n forEachTileCoord(extent, zoom, callback) {\n const tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n for (let i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n for (let j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n callback([zoom, i, j]);\n }\n }\n }\n\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {function(number, import(\"../TileRange.js\").default): boolean} callback Callback.\n * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary import(\"../extent.js\").Extent object.\n * @return {boolean} Callback succeeded.\n */\n forEachTileCoordParentTileRange(\n tileCoord,\n callback,\n tempTileRange,\n tempExtent\n ) {\n let tileRange, x, y;\n let tileCoordExtent = null;\n let z = tileCoord[0] - 1;\n if (this.zoomFactor_ === 2) {\n x = tileCoord[1];\n y = tileCoord[2];\n } else {\n tileCoordExtent = this.getTileCoordExtent(tileCoord, tempExtent);\n }\n while (z >= this.minZoom) {\n if (this.zoomFactor_ === 2) {\n x = Math.floor(x / 2);\n y = Math.floor(y / 2);\n tileRange = createOrUpdateTileRange(x, x, y, y, tempTileRange);\n } else {\n tileRange = this.getTileRangeForExtentAndZ(\n tileCoordExtent,\n z,\n tempTileRange\n );\n }\n if (callback(z, tileRange)) {\n return true;\n }\n --z;\n }\n return false;\n }\n\n /**\n * Get the extent for this tile grid, if it was configured.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the maximum zoom level for the grid.\n * @return {number} Max zoom.\n * @api\n */\n getMaxZoom() {\n return this.maxZoom;\n }\n\n /**\n * Get the minimum zoom level for the grid.\n * @return {number} Min zoom.\n * @api\n */\n getMinZoom() {\n return this.minZoom;\n }\n\n /**\n * Get the origin for the grid at the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {import(\"../coordinate.js\").Coordinate} Origin.\n * @api\n */\n getOrigin(z) {\n if (this.origin_) {\n return this.origin_;\n } else {\n return this.origins_[z];\n }\n }\n\n /**\n * Get the resolution for the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {number} Resolution.\n * @api\n */\n getResolution(z) {\n return this.resolutions_[z];\n }\n\n /**\n * Get the list of resolutions for the tile grid.\n * @return {Array} Resolutions.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary import(\"../extent.js\").Extent object.\n * @return {import(\"../TileRange.js\").default|null} Tile range.\n */\n getTileCoordChildTileRange(tileCoord, tempTileRange, tempExtent) {\n if (tileCoord[0] < this.maxZoom) {\n if (this.zoomFactor_ === 2) {\n const minX = tileCoord[1] * 2;\n const minY = tileCoord[2] * 2;\n return createOrUpdateTileRange(\n minX,\n minX + 1,\n minY,\n minY + 1,\n tempTileRange\n );\n }\n const tileCoordExtent = this.getTileCoordExtent(\n tileCoord,\n tempExtent || this.tmpExtent_\n );\n return this.getTileRangeForExtentAndZ(\n tileCoordExtent,\n tileCoord[0] + 1,\n tempTileRange\n );\n }\n return null;\n }\n\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} z Integer zoom level.\n * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n * @return {import(\"../TileRange.js\").default|null} Tile range.\n */\n getTileRangeForTileCoordAndZ(tileCoord, z, tempTileRange) {\n if (z > this.maxZoom || z < this.minZoom) {\n return null;\n }\n\n const tileCoordZ = tileCoord[0];\n const tileCoordX = tileCoord[1];\n const tileCoordY = tileCoord[2];\n\n if (z === tileCoordZ) {\n return createOrUpdateTileRange(\n tileCoordX,\n tileCoordY,\n tileCoordX,\n tileCoordY,\n tempTileRange\n );\n }\n\n if (this.zoomFactor_) {\n const factor = Math.pow(this.zoomFactor_, z - tileCoordZ);\n const minX = Math.floor(tileCoordX * factor);\n const minY = Math.floor(tileCoordY * factor);\n if (z < tileCoordZ) {\n return createOrUpdateTileRange(minX, minX, minY, minY, tempTileRange);\n }\n\n const maxX = Math.floor(factor * (tileCoordX + 1)) - 1;\n const maxY = Math.floor(factor * (tileCoordY + 1)) - 1;\n return createOrUpdateTileRange(minX, maxX, minY, maxY, tempTileRange);\n }\n\n const tileCoordExtent = this.getTileCoordExtent(tileCoord, this.tmpExtent_);\n return this.getTileRangeForExtentAndZ(tileCoordExtent, z, tempTileRange);\n }\n\n /**\n * Get the extent for a tile range.\n * @param {number} z Integer zoom level.\n * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary import(\"../extent.js\").Extent object.\n * @return {import(\"../extent.js\").Extent} Extent.\n */\n getTileRangeExtent(z, tileRange, tempExtent) {\n const origin = this.getOrigin(z);\n const resolution = this.getResolution(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n const minX = origin[0] + tileRange.minX * tileSize[0] * resolution;\n const maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;\n const minY = origin[1] + tileRange.minY * tileSize[1] * resolution;\n const maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, tempExtent);\n }\n\n /**\n * Get a tile range for the given extent and integer zoom level.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} z Integer zoom level.\n * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary tile range object.\n * @return {import(\"../TileRange.js\").default} Tile range.\n */\n getTileRangeForExtentAndZ(extent, z, tempTileRange) {\n const tileCoord = tmpTileCoord;\n this.getTileCoordForXYAndZ_(extent[0], extent[3], z, false, tileCoord);\n const minX = tileCoord[1];\n const minY = tileCoord[2];\n this.getTileCoordForXYAndZ_(extent[2], extent[1], z, true, tileCoord);\n return createOrUpdateTileRange(\n minX,\n tileCoord[1],\n minY,\n tileCoord[2],\n tempTileRange\n );\n }\n\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {import(\"../coordinate.js\").Coordinate} Tile center.\n */\n getTileCoordCenter(tileCoord) {\n const origin = this.getOrigin(tileCoord[0]);\n const resolution = this.getResolution(tileCoord[0]);\n const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n return [\n origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution,\n ];\n }\n\n /**\n * Get the extent of a tile coordinate.\n *\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary extent object.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getTileCoordExtent(tileCoord, tempExtent) {\n const origin = this.getOrigin(tileCoord[0]);\n const resolution = this.getResolution(tileCoord[0]);\n const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n const minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n const minY = origin[1] - (tileCoord[2] + 1) * tileSize[1] * resolution;\n const maxX = minX + tileSize[0] * resolution;\n const maxY = minY + tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, tempExtent);\n }\n\n /**\n * Get the tile coordinate for the given map coordinate and resolution. This\n * method considers that coordinates that intersect tile boundaries should be\n * assigned the higher tile coordinate.\n *\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Destination import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @api\n */\n getTileCoordForCoordAndResolution(coordinate, resolution, opt_tileCoord) {\n return this.getTileCoordForXYAndResolution_(\n coordinate[0],\n coordinate[1],\n resolution,\n false,\n opt_tileCoord\n );\n }\n\n /**\n * Note that this method should not be called for resolutions that correspond\n * to an integer zoom level. Instead call the `getTileCoordForXYAndZ_` method.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} resolution Resolution (for a non-integer zoom level).\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Temporary import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @private\n */\n getTileCoordForXYAndResolution_(\n x,\n y,\n resolution,\n reverseIntersectionPolicy,\n opt_tileCoord\n ) {\n const z = this.getZForResolution(resolution);\n const scale = resolution / this.getResolution(z);\n const origin = this.getOrigin(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n let tileCoordX = (scale * (x - origin[0])) / resolution / tileSize[0];\n let tileCoordY = (scale * (origin[1] - y)) / resolution / tileSize[1];\n\n if (reverseIntersectionPolicy) {\n tileCoordX = ceil(tileCoordX, DECIMALS) - 1;\n tileCoordY = ceil(tileCoordY, DECIMALS) - 1;\n } else {\n tileCoordX = floor(tileCoordX, DECIMALS);\n tileCoordY = floor(tileCoordY, DECIMALS);\n }\n\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n }\n\n /**\n * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n * they should have separate implementations. This method is for integer zoom\n * levels. The other method should only be called for resolutions corresponding\n * to non-integer zoom levels.\n * @param {number} x Map x coordinate.\n * @param {number} y Map y coordinate.\n * @param {number} z Integer zoom level.\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Temporary import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @private\n */\n getTileCoordForXYAndZ_(x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n const origin = this.getOrigin(z);\n const resolution = this.getResolution(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n let tileCoordX = (x - origin[0]) / resolution / tileSize[0];\n let tileCoordY = (origin[1] - y) / resolution / tileSize[1];\n\n if (reverseIntersectionPolicy) {\n tileCoordX = ceil(tileCoordX, DECIMALS) - 1;\n tileCoordY = ceil(tileCoordY, DECIMALS) - 1;\n } else {\n tileCoordX = floor(tileCoordX, DECIMALS);\n tileCoordY = floor(tileCoordY, DECIMALS);\n }\n\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n }\n\n /**\n * Get a tile coordinate given a map coordinate and zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} z Zoom level.\n * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Destination import(\"../tilecoord.js\").TileCoord object.\n * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n * @api\n */\n getTileCoordForCoordAndZ(coordinate, z, opt_tileCoord) {\n return this.getTileCoordForXYAndZ_(\n coordinate[0],\n coordinate[1],\n z,\n false,\n opt_tileCoord\n );\n }\n\n /**\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {number} Tile resolution.\n */\n getTileCoordResolution(tileCoord) {\n return this.resolutions_[tileCoord[0]];\n }\n\n /**\n * Get the tile size for a zoom level. The type of the return value matches the\n * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n * get an {@link import(\"../size.js\").Size}, run the result through {@link module:ol/size.toSize}.\n * @param {number} z Z.\n * @return {number|import(\"../size.js\").Size} Tile size.\n * @api\n */\n getTileSize(z) {\n if (this.tileSize_) {\n return this.tileSize_;\n } else {\n return this.tileSizes_[z];\n }\n }\n\n /**\n * @param {number} z Zoom level.\n * @return {import(\"../TileRange.js\").default} Extent tile range for the specified zoom level.\n */\n getFullTileRange(z) {\n if (!this.fullTileRanges_) {\n return this.extent_\n ? this.getTileRangeForExtentAndZ(this.extent_, z)\n : null;\n } else {\n return this.fullTileRanges_[z];\n }\n }\n\n /**\n * @param {number} resolution Resolution.\n * @param {number|import(\"../array.js\").NearestDirectionFunction} [opt_direction]\n * If 0, the nearest resolution will be used.\n * If 1, the nearest higher resolution (lower Z) will be used. If -1, the\n * nearest lower resolution (higher Z) will be used. Default is 0.\n * Use a {@link module:ol/array~NearestDirectionFunction} for more precise control.\n *\n * For example to change tile Z at the midpoint of zoom levels\n * ```js\n * function(value, high, low) {\n * return value - low * Math.sqrt(high / low);\n * }\n * ```\n * @return {number} Z.\n * @api\n */\n getZForResolution(resolution, opt_direction) {\n const z = linearFindNearest(\n this.resolutions_,\n resolution,\n opt_direction || 0\n );\n return clamp(z, this.minZoom, this.maxZoom);\n }\n\n /**\n * The tile with the provided tile coordinate intersects the given viewport.\n * @param {import('../tilecoord.js').TileCoord} tileCoord Tile coordinate.\n * @param {Array} viewport Viewport as returned from {@link module:ol/extent.getRotatedViewport}.\n * @return {boolean} The tile with the provided tile coordinate intersects the given viewport.\n */\n tileCoordIntersectsViewport(tileCoord, viewport) {\n return intersectsLinearRing(\n viewport,\n 0,\n viewport.length,\n 2,\n this.getTileCoordExtent(tileCoord)\n );\n }\n\n /**\n * @param {!import(\"../extent.js\").Extent} extent Extent for this tile grid.\n * @private\n */\n calculateTileRanges_(extent) {\n const length = this.resolutions_.length;\n const fullTileRanges = new Array(length);\n for (let z = this.minZoom; z < length; ++z) {\n fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n }\n this.fullTileRanges_ = fullTileRanges;\n }\n}\n\nexport default TileGrid;\n","/**\n * @module ol/tilegrid\n */\nimport TileGrid from './tilegrid/TileGrid.js';\nimport {DEFAULT_MAX_ZOOM, DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {METERS_PER_UNIT, get as getProjection} from './proj.js';\nimport {\n containsCoordinate,\n createOrUpdate,\n getCorner,\n getHeight,\n getWidth,\n} from './extent.js';\nimport {toSize} from './size.js';\n\n/**\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {!TileGrid} Default tile grid for the\n * passed projection.\n */\nexport function getForProjection(projection) {\n let tileGrid = projection.getDefaultTileGrid();\n if (!tileGrid) {\n tileGrid = createForProjection(projection);\n projection.setDefaultTileGrid(tileGrid);\n }\n return tileGrid;\n}\n\n/**\n * @param {TileGrid} tileGrid Tile grid.\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {import(\"./tilecoord.js\").TileCoord} Tile coordinate.\n */\nexport function wrapX(tileGrid, tileCoord, projection) {\n const z = tileCoord[0];\n const center = tileGrid.getTileCoordCenter(tileCoord);\n const projectionExtent = extentFromProjection(projection);\n if (!containsCoordinate(projectionExtent, center)) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.ceil(\n (projectionExtent[0] - center[0]) / worldWidth\n );\n center[0] += worldWidth * worldsAway;\n return tileGrid.getTileCoordForCoordAndZ(center, z);\n } else {\n return tileCoord;\n }\n}\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} [maxZoom] Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {import(\"./extent.js\").Corner} [corner] Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForExtent(extent, maxZoom, tileSize, corner) {\n corner = corner !== undefined ? corner : 'top-left';\n\n const resolutions = resolutionsFromExtent(extent, maxZoom, tileSize);\n\n return new TileGrid({\n extent: extent,\n origin: getCorner(extent, corner),\n resolutions: resolutions,\n tileSize: tileSize,\n });\n}\n\n/**\n * @typedef {Object} XYZOptions\n * @property {import(\"./extent.js\").Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the\n * top-left corner of the extent. If `maxResolution` is not provided the zero level of the grid is defined by the resolution\n * at which one tile fits in the provided extent. If not provided, the extent of the EPSG:3857 projection is used.\n * @property {number} [maxResolution] Resolution at level zero.\n * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels\n * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {number|import(\"./size.js\").Size} [tileSize=[256, 256]] Tile size in pixels.\n */\n\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {XYZOptions} [options] Tile grid options.\n * @return {!TileGrid} Tile grid instance.\n * @api\n */\nexport function createXYZ(options) {\n const xyzOptions = options || {};\n\n const extent = xyzOptions.extent || getProjection('EPSG:3857').getExtent();\n\n const gridOptions = {\n extent: extent,\n minZoom: xyzOptions.minZoom,\n tileSize: xyzOptions.tileSize,\n resolutions: resolutionsFromExtent(\n extent,\n xyzOptions.maxZoom,\n xyzOptions.tileSize,\n xyzOptions.maxResolution\n ),\n };\n return new TileGrid(gridOptions);\n}\n\n/**\n * Create a resolutions array from an extent. A zoom factor of 2 is assumed.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} [maxZoom] Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {number} [maxResolution] Resolution at level zero.\n * @return {!Array} Resolutions array.\n */\nfunction resolutionsFromExtent(extent, maxZoom, tileSize, maxResolution) {\n maxZoom = maxZoom !== undefined ? maxZoom : DEFAULT_MAX_ZOOM;\n tileSize = toSize(tileSize !== undefined ? tileSize : DEFAULT_TILE_SIZE);\n\n const height = getHeight(extent);\n const width = getWidth(extent);\n\n maxResolution =\n maxResolution > 0\n ? maxResolution\n : Math.max(width / tileSize[0], height / tileSize[1]);\n\n const length = maxZoom + 1;\n const resolutions = new Array(length);\n for (let z = 0; z < length; ++z) {\n resolutions[z] = maxResolution / Math.pow(2, z);\n }\n return resolutions;\n}\n\n/**\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @param {number} [maxZoom] Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {import(\"./extent.js\").Corner} [corner] Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForProjection(projection, maxZoom, tileSize, corner) {\n const extent = extentFromProjection(projection);\n return createForExtent(extent, maxZoom, tileSize, corner);\n}\n\n/**\n * Generate a tile grid extent from a projection. If the projection has an\n * extent, it is used. If not, a global extent is assumed.\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\nexport function extentFromProjection(projection) {\n projection = getProjection(projection);\n let extent = projection.getExtent();\n if (!extent) {\n const half =\n (180 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit();\n extent = createOrUpdate(-half, -half, half, half);\n }\n return extent;\n}\n","/**\n * @module ol/tileurlfunction\n */\nimport {assert} from './asserts.js';\nimport {modulo} from './math.js';\nimport {hash as tileCoordHash} from './tilecoord.js';\n\n/**\n * @param {string} template Template.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplate(template, tileGrid) {\n const zRegEx = /\\{z\\}/g;\n const xRegEx = /\\{x\\}/g;\n const yRegEx = /\\{y\\}/g;\n const dashYRegEx = /\\{-y\\}/g;\n return (\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function (tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n } else {\n return template\n .replace(zRegEx, tileCoord[0].toString())\n .replace(xRegEx, tileCoord[1].toString())\n .replace(yRegEx, tileCoord[2].toString())\n .replace(dashYRegEx, function () {\n const z = tileCoord[0];\n const range = tileGrid.getFullTileRange(z);\n assert(range, 55); // The {-y} placeholder requires a tile grid with extent\n const y = range.getHeight() - tileCoord[2] - 1;\n return y.toString();\n });\n }\n }\n );\n}\n\n/**\n * @param {Array} templates Templates.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplates(templates, tileGrid) {\n const len = templates.length;\n const tileUrlFunctions = new Array(len);\n for (let i = 0; i < len; ++i) {\n tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);\n }\n return createFromTileUrlFunctions(tileUrlFunctions);\n}\n\n/**\n * @param {Array} tileUrlFunctions Tile URL Functions.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTileUrlFunctions(tileUrlFunctions) {\n if (tileUrlFunctions.length === 1) {\n return tileUrlFunctions[0];\n }\n return (\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function (tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n } else {\n const h = tileCoordHash(tileCoord);\n const index = modulo(h, tileUrlFunctions.length);\n return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n }\n }\n );\n}\n\n/**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nexport function nullTileUrlFunction(tileCoord, pixelRatio, projection) {\n return undefined;\n}\n\n/**\n * @param {string} url URL.\n * @return {Array} Array of urls.\n */\nexport function expandUrl(url) {\n const urls = [];\n let match = /\\{([a-z])-([a-z])\\}/.exec(url);\n if (match) {\n // char range\n const startCharCode = match[1].charCodeAt(0);\n const stopCharCode = match[2].charCodeAt(0);\n let charCode;\n for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n }\n return urls;\n }\n match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n if (match) {\n // number range\n const stop = parseInt(match[2], 10);\n for (let i = parseInt(match[1], 10); i <= stop; i++) {\n urls.push(url.replace(match[0], i.toString()));\n }\n return urls;\n }\n urls.push(url);\n return urls;\n}\n","/**\n * @module ol/uri\n */\n\n/**\n * Appends query parameters to a URI.\n *\n * @param {string} uri The original URI, which may already have query data.\n * @param {!Object} params An object where keys are URI-encoded parameter keys,\n * and the values are arbitrary types or arrays.\n * @return {string} The new URI.\n */\nexport function appendParams(uri, params) {\n const keyParams = [];\n // Skip any null or undefined parameter values\n Object.keys(params).forEach(function (k) {\n if (params[k] !== null && params[k] !== undefined) {\n keyParams.push(k + '=' + encodeURIComponent(params[k]));\n }\n });\n const qs = keyParams.join('&');\n // remove any trailing ? or &\n uri = uri.replace(/[?&]$/, '');\n // append ? or & depending on whether uri has existing parameters\n uri += uri.includes('?') ? '&' : '?';\n return uri + qs;\n}\n","/**\n * @module ol/webgl\n */\n\nimport {SAFARI_BUG_237906} from './has.js';\n\n/**\n * Constants taken from goog.webgl\n */\n\n/**\n * Used by {@link module:ol/webgl/Helper~WebGLHelper} for buffers containing vertices data, such as\n * position, color, texture coordinate, etc. These vertices are then referenced by an index buffer\n * to be drawn on screen (see {@link module:ol/webgl.ELEMENT_ARRAY_BUFFER}).\n * @const\n * @type {number}\n * @api\n */\nexport const ARRAY_BUFFER = 0x8892;\n\n/**\n * Used by {@link module:ol/webgl/Helper~WebGLHelper} for buffers containing indices data.\n * Index buffers are essentially lists of references to vertices defined in a vertex buffer\n * (see {@link module:ol/webgl.ARRAY_BUFFER}), and define the primitives (triangles) to be drawn.\n * @const\n * @type {number}\n * @api\n */\nexport const ELEMENT_ARRAY_BUFFER = 0x8893;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const STREAM_DRAW = 0x88e0;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const STATIC_DRAW = 0x88e4;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const DYNAMIC_DRAW = 0x88e8;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_BYTE = 0x1401;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_SHORT = 0x1403;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_INT = 0x1405;\n\n/**\n * @const\n * @type {number}\n */\nexport const FLOAT = 0x1406;\n\n/** end of goog.webgl constants\n */\n\n/**\n * @const\n * @type {Array}\n */\nconst CONTEXT_IDS = ['experimental-webgl', 'webgl', 'webkit-3d', 'moz-webgl'];\n\n/**\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Object} [attributes] Attributes.\n * @return {WebGLRenderingContext} WebGL rendering context.\n */\nexport function getContext(canvas, attributes) {\n attributes = Object.assign(\n {\n preserveDrawingBuffer: true,\n antialias: SAFARI_BUG_237906 ? false : true, // https://bugs.webkit.org/show_bug.cgi?id=237906\n },\n attributes\n );\n const ii = CONTEXT_IDS.length;\n for (let i = 0; i < ii; ++i) {\n try {\n const context = canvas.getContext(CONTEXT_IDS[i], attributes);\n if (context) {\n return /** @type {!WebGLRenderingContext} */ (context);\n }\n } catch (e) {\n // pass\n }\n }\n return null;\n}\n\n/**\n * @type {Array}\n */\nlet supportedExtensions;\n\n/**\n * @return {Array} List of supported WebGL extensions.\n */\nexport function getSupportedExtensions() {\n if (!supportedExtensions) {\n const canvas = document.createElement('canvas');\n const gl = getContext(canvas);\n if (gl) {\n supportedExtensions = gl.getSupportedExtensions();\n }\n }\n return supportedExtensions;\n}\n","/**\n * @module ol/xml\n */\nimport {extend} from './array.js';\n\n/**\n * When using {@link module:ol/xml.makeChildAppender} or\n * {@link module:ol/xml.makeSimpleNodeFactory}, the top `objectStack` item needs\n * to have this structure.\n * @typedef {Object} NodeStackItem\n * @property {Element} node Node.\n */\n\n/**\n * @typedef {function(Element, Array<*>): void} Parser\n */\n\n/**\n * @typedef {function(Element, *, Array<*>): void} Serializer\n */\n\n/**\n * @type {string}\n */\nexport const XML_SCHEMA_INSTANCE_URI =\n 'http://www.w3.org/2001/XMLSchema-instance';\n\n/**\n * @param {string} namespaceURI Namespace URI.\n * @param {string} qualifiedName Qualified name.\n * @return {Element} Node.\n */\nexport function createElementNS(namespaceURI, qualifiedName) {\n return getDocument().createElementNS(namespaceURI, qualifiedName);\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @return {string} All text content.\n * @api\n */\nexport function getAllTextContent(node, normalizeWhitespace) {\n return getAllTextContent_(node, normalizeWhitespace, []).join('');\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @param {Array} accumulator Accumulator.\n * @private\n * @return {Array} Accumulator.\n */\nexport function getAllTextContent_(node, normalizeWhitespace, accumulator) {\n if (\n node.nodeType == Node.CDATA_SECTION_NODE ||\n node.nodeType == Node.TEXT_NODE\n ) {\n if (normalizeWhitespace) {\n accumulator.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n } else {\n accumulator.push(node.nodeValue);\n }\n } else {\n let n;\n for (n = node.firstChild; n; n = n.nextSibling) {\n getAllTextContent_(n, normalizeWhitespace, accumulator);\n }\n }\n return accumulator;\n}\n\n/**\n * @param {Object} object Object.\n * @return {boolean} Is a document.\n */\nexport function isDocument(object) {\n return 'documentElement' in object;\n}\n\n/**\n * @param {Element} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @return {string} Value\n */\nexport function getAttributeNS(node, namespaceURI, name) {\n return node.getAttributeNS(namespaceURI, name) || '';\n}\n\n/**\n * Parse an XML string to an XML Document.\n * @param {string} xml XML.\n * @return {Document} Document.\n * @api\n */\nexport function parse(xml) {\n return new DOMParser().parseFromString(xml, 'application/xml');\n}\n\n/**\n * Make an array extender function for extending the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array<*>): (Array<*>|undefined)} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayExtender(valueReader, thisArg) {\n return (\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n thisArg !== undefined ? thisArg : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const array = /** @type {Array<*>} */ (\n objectStack[objectStack.length - 1]\n );\n extend(array, value);\n }\n }\n );\n}\n\n/**\n * Make an array pusher function for pushing to the array at the top of the\n * object stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayPusher(valueReader, thisArg) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n thisArg !== undefined ? thisArg : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const array = /** @type {Array<*>} */ (\n objectStack[objectStack.length - 1]\n );\n array.push(value);\n }\n }\n );\n}\n\n/**\n * Make an object stack replacer function for replacing the object at the\n * top of the stack.\n * @param {function(this: T, Node, Array<*>): *} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeReplacer(valueReader, thisArg) {\n return (\n /**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n thisArg !== undefined ? thisArg : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n objectStack[objectStack.length - 1] = value;\n }\n }\n );\n}\n\n/**\n * Make an object property pusher function for adding a property to the\n * object at the top of the stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [property] Property.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertyPusher(valueReader, property, thisArg) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n thisArg !== undefined ? thisArg : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const object = /** @type {!Object} */ (\n objectStack[objectStack.length - 1]\n );\n const name = property !== undefined ? property : node.localName;\n let array;\n if (name in object) {\n array = object[name];\n } else {\n array = [];\n object[name] = array;\n }\n array.push(value);\n }\n }\n );\n}\n\n/**\n * Make an object property setter function.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [property] Property.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertySetter(valueReader, property, thisArg) {\n return (\n /**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\n function (node, objectStack) {\n const value = valueReader.call(\n thisArg !== undefined ? thisArg : this,\n node,\n objectStack\n );\n if (value !== undefined) {\n const object = /** @type {!Object} */ (\n objectStack[objectStack.length - 1]\n );\n const name = property !== undefined ? property : node.localName;\n object[name] = value;\n }\n }\n );\n}\n\n/**\n * Create a serializer that appends nodes written by its `nodeWriter` to its\n * designated parent. The parent is the `node` of the\n * {@link module:ol/xml~NodeStackItem} at the top of the `objectStack`.\n * @param {function(this: T, Node, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [thisArg] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeChildAppender(nodeWriter, thisArg) {\n return function (node, value, objectStack) {\n nodeWriter.call(\n thisArg !== undefined ? thisArg : this,\n node,\n value,\n objectStack\n );\n const parent = /** @type {NodeStackItem} */ (\n objectStack[objectStack.length - 1]\n );\n const parentNode = parent.node;\n parentNode.appendChild(node);\n };\n}\n\n/**\n * Create a serializer that calls the provided `nodeWriter` from\n * {@link module:ol/xml.serialize}. This can be used by the parent writer to have the\n * `nodeWriter` called with an array of values when the `nodeWriter` was\n * designed to serialize a single item. An example would be a LineString\n * geometry writer, which could be reused for writing MultiLineString\n * geometries.\n * @param {function(this: T, Element, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [thisArg] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeArraySerializer(nodeWriter, thisArg) {\n let serializersNS, nodeFactory;\n return function (node, value, objectStack) {\n if (serializersNS === undefined) {\n serializersNS = {};\n const serializers = {};\n serializers[node.localName] = nodeWriter;\n serializersNS[node.namespaceURI] = serializers;\n nodeFactory = makeSimpleNodeFactory(node.localName);\n }\n serialize(serializersNS, nodeFactory, value, objectStack);\n };\n}\n\n/**\n * Create a node factory which can use the `keys` passed to\n * {@link module:ol/xml.serialize} or {@link module:ol/xml.pushSerializeAndPop} as node names,\n * or a fixed node name. The namespace of the created nodes can either be fixed,\n * or the parent namespace will be used.\n * @param {string} [fixedNodeName] Fixed node name which will be used for all\n * created nodes. If not provided, the 3rd argument to the resulting node\n * factory needs to be provided and will be the nodeName.\n * @param {string} [fixedNamespaceURI] Fixed namespace URI which will be used for\n * all created nodes. If not provided, the namespace of the parent node will\n * be used.\n * @return {function(*, Array<*>, string=): (Node|undefined)} Node factory.\n */\nexport function makeSimpleNodeFactory(fixedNodeName, fixedNamespaceURI) {\n return (\n /**\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [newNodeName] Node name.\n * @return {Node} Node.\n */\n function (value, objectStack, newNodeName) {\n const context = /** @type {NodeStackItem} */ (\n objectStack[objectStack.length - 1]\n );\n const node = context.node;\n let nodeName = fixedNodeName;\n if (nodeName === undefined) {\n nodeName = newNodeName;\n }\n\n const namespaceURI =\n fixedNamespaceURI !== undefined ? fixedNamespaceURI : node.namespaceURI;\n return createElementNS(namespaceURI, /** @type {string} */ (nodeName));\n }\n );\n}\n\n/**\n * A node factory that creates a node using the parent's `namespaceURI` and the\n * `nodeName` passed by {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop} to the node factory.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nexport const OBJECT_PROPERTY_NODE_FACTORY = makeSimpleNodeFactory();\n\n/**\n * Create an array of `values` to be used with {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as\n * `key` argument.\n * @param {Object} object Key-value pairs for the sequence. Keys can\n * be a subset of the `orderedKeys`.\n * @param {Array} orderedKeys Keys in the order of the sequence.\n * @return {Array<*>} Values in the order of the sequence. The resulting array\n * has the same length as the `orderedKeys` array. Values that are not\n * present in `object` will be `undefined` in the resulting array.\n */\nexport function makeSequence(object, orderedKeys) {\n const length = orderedKeys.length;\n const sequence = new Array(length);\n for (let i = 0; i < length; ++i) {\n sequence[i] = object[orderedKeys[i]];\n }\n return sequence;\n}\n\n/**\n * Create a namespaced structure, using the same values for each namespace.\n * This can be used as a starting point for versioned parsers, when only a few\n * values are version specific.\n * @param {Array} namespaceURIs Namespace URIs.\n * @param {T} structure Structure.\n * @param {Object} [structureNS] Namespaced structure to add to.\n * @return {Object} Namespaced structure.\n * @template T\n */\nexport function makeStructureNS(namespaceURIs, structure, structureNS) {\n structureNS = structureNS !== undefined ? structureNS : {};\n let i, ii;\n for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {\n structureNS[namespaceURIs[i]] = structure;\n }\n return structureNS;\n}\n\n/**\n * Parse a node using the parsers and object stack.\n * @param {Object>} parsersNS\n * Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [thisArg] The object to use as `this`.\n */\nexport function parseNode(parsersNS, node, objectStack, thisArg) {\n let n;\n for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n const parsers = parsersNS[n.namespaceURI];\n if (parsers !== undefined) {\n const parser = parsers[n.localName];\n if (parser !== undefined) {\n parser.call(thisArg, n, objectStack);\n }\n }\n }\n}\n\n/**\n * Push an object on top of the stack, parse and return the popped object.\n * @param {T} object Object.\n * @param {Object>} parsersNS\n * Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [thisArg] The object to use as `this`.\n * @return {T} Object.\n * @template T\n */\nexport function pushParseAndPop(object, parsersNS, node, objectStack, thisArg) {\n objectStack.push(object);\n parseNode(parsersNS, node, objectStack, thisArg);\n return /** @type {T} */ (objectStack.pop());\n}\n\n/**\n * Walk through an array of `values` and call a serializer for each value.\n * @param {Object>} serializersNS\n * Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n * Node factory. The `nodeFactory` creates the node whose namespace and name\n * will be used to choose a node writer from `serializersNS`. This\n * separation allows us to decide what kind of node to create, depending on\n * the value we want to serialize. An example for this would be different\n * geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n * of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array} [keys] Keys of the `values`. Will be passed to the\n * `nodeFactory`. This is used for serializing object literals where the\n * node name relates to the property key. The array length of `keys` has\n * to match the length of `values`. For serializing a sequence, `keys`\n * determines the order of the sequence.\n * @param {T} [thisArg] The object to use as `this` for the node factory and\n * serializers.\n * @template T\n */\nexport function serialize(\n serializersNS,\n nodeFactory,\n values,\n objectStack,\n keys,\n thisArg\n) {\n const length = (keys !== undefined ? keys : values).length;\n let value, node;\n for (let i = 0; i < length; ++i) {\n value = values[i];\n if (value !== undefined) {\n node = nodeFactory.call(\n thisArg !== undefined ? thisArg : this,\n value,\n objectStack,\n keys !== undefined ? keys[i] : undefined\n );\n if (node !== undefined) {\n serializersNS[node.namespaceURI][node.localName].call(\n thisArg,\n node,\n value,\n objectStack\n );\n }\n }\n }\n}\n\n/**\n * @param {O} object Object.\n * @param {Object>} serializersNS\n * Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n * Node factory. The `nodeFactory` creates the node whose namespace and name\n * will be used to choose a node writer from `serializersNS`. This\n * separation allows us to decide what kind of node to create, depending on\n * the value we want to serialize. An example for this would be different\n * geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n * of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array} [keys] Keys of the `values`. Will be passed to the\n * `nodeFactory`. This is used for serializing object literals where the\n * node name relates to the property key. The array length of `keys` has\n * to match the length of `values`. For serializing a sequence, `keys`\n * determines the order of the sequence.\n * @param {T} [thisArg] The object to use as `this` for the node factory and\n * serializers.\n * @return {O|undefined} Object.\n * @template O, T\n */\nexport function pushSerializeAndPop(\n object,\n serializersNS,\n nodeFactory,\n values,\n objectStack,\n keys,\n thisArg\n) {\n objectStack.push(object);\n serialize(serializersNS, nodeFactory, values, objectStack, keys, thisArg);\n return /** @type {O|undefined} */ (objectStack.pop());\n}\n\nlet xmlSerializer_ = undefined;\n\n/**\n * Register a XMLSerializer. Can be used to inject a XMLSerializer\n * where there is no globally available implementation.\n *\n * @param {XMLSerializer} xmlSerializer A XMLSerializer.\n * @api\n */\nexport function registerXMLSerializer(xmlSerializer) {\n xmlSerializer_ = xmlSerializer;\n}\n\n/**\n * @return {XMLSerializer} The XMLSerializer.\n */\nexport function getXMLSerializer() {\n if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') {\n xmlSerializer_ = new XMLSerializer();\n }\n return xmlSerializer_;\n}\n\nlet document_ = undefined;\n\n/**\n * Register a Document to use when creating nodes for XML serializations. Can be used\n * to inject a Document where there is no globally available implementation.\n *\n * @param {Document} document A Document.\n * @api\n */\nexport function registerDocument(document) {\n document_ = document;\n}\n\n/**\n * Get a document that should be used when creating nodes for XML serializations.\n * @return {Document} The document.\n */\nexport function getDocument() {\n if (document_ === undefined && typeof document !== 'undefined') {\n document_ = document.implementation.createDocument('', '', null);\n }\n return document_;\n}\n","/**\n * @module ol/webgl/Buffer\n */\nimport {\n ARRAY_BUFFER,\n DYNAMIC_DRAW,\n ELEMENT_ARRAY_BUFFER,\n STATIC_DRAW,\n STREAM_DRAW,\n} from '../webgl.js';\nimport {assert} from '../asserts.js';\n\n/**\n * Used to describe the intended usage for the data: `STATIC_DRAW`, `STREAM_DRAW`\n * or `DYNAMIC_DRAW`.\n * @enum {number}\n */\nexport const BufferUsage = {\n STATIC_DRAW: STATIC_DRAW,\n STREAM_DRAW: STREAM_DRAW,\n DYNAMIC_DRAW: DYNAMIC_DRAW,\n};\n\n/**\n * @classdesc\n * Object used to store an array of data as well as usage information for that data.\n * Stores typed arrays internally, either Float32Array or Uint16/32Array depending on\n * the buffer type (ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER) and available extensions.\n *\n * To populate the array, you can either use:\n * * A size using `#ofSize(buffer)`\n * * An `ArrayBuffer` object using `#fromArrayBuffer(buffer)`\n * * A plain array using `#fromArray(array)`\n *\n * Note:\n * See the documentation of [WebGLRenderingContext.bufferData](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData)\n * for more info on buffer usage.\n * @api\n */\nclass WebGLArrayBuffer {\n /**\n * @param {number} type Buffer type, either ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER.\n * @param {number} [usage] Intended usage, either `STATIC_DRAW`, `STREAM_DRAW` or `DYNAMIC_DRAW`.\n * Default is `DYNAMIC_DRAW`.\n */\n constructor(type, usage) {\n /**\n * @private\n * @type {Float32Array|Uint32Array}\n */\n this.array = null;\n\n /**\n * @private\n * @type {number}\n */\n this.type = type;\n\n assert(type === ARRAY_BUFFER || type === ELEMENT_ARRAY_BUFFER, 62);\n\n /**\n * @private\n * @type {number}\n */\n this.usage = usage !== undefined ? usage : BufferUsage.STATIC_DRAW;\n }\n\n /**\n * Populates the buffer with an array of the given size (all values will be zeroes).\n * @param {number} size Array size\n */\n ofSize(size) {\n this.array = new (getArrayClassForType(this.type))(size);\n }\n\n /**\n * Populates the buffer with an array of the given size.\n * @param {Array} array Numerical array\n */\n fromArray(array) {\n this.array = getArrayClassForType(this.type).from(array);\n }\n\n /**\n * Populates the buffer with a raw binary array buffer.\n * @param {ArrayBuffer} buffer Raw binary buffer to populate the array with. Note that this buffer must have been\n * initialized for the same typed array class.\n */\n fromArrayBuffer(buffer) {\n this.array = new (getArrayClassForType(this.type))(buffer);\n }\n\n /**\n * @return {number} Buffer type.\n */\n getType() {\n return this.type;\n }\n\n /**\n * Will return null if the buffer was not initialized\n * @return {Float32Array|Uint32Array} Array.\n */\n getArray() {\n return this.array;\n }\n\n /**\n * @return {number} Usage.\n */\n getUsage() {\n return this.usage;\n }\n\n /**\n * Will return 0 if the buffer is not initialized\n * @return {number} Array size\n */\n getSize() {\n return this.array ? this.array.length : 0;\n }\n}\n\n/**\n * Returns a typed array constructor based on the given buffer type\n * @param {number} type Buffer type, either ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER.\n * @return {Float32ArrayConstructor|Uint32ArrayConstructor} The typed array class to use for this buffer.\n */\nexport function getArrayClassForType(type) {\n switch (type) {\n case ARRAY_BUFFER:\n return Float32Array;\n case ELEMENT_ARRAY_BUFFER:\n return Uint32Array;\n default:\n return Float32Array;\n }\n}\n\nexport default WebGLArrayBuffer;\n","/**\n * @module ol/webgl/ContextEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LOST: 'webglcontextlost',\n RESTORED: 'webglcontextrestored',\n};\n","/**\n * @module ol/webgl/PostProcessingPass\n */\n\nimport {getUid} from '../util.js';\n\nconst DEFAULT_VERTEX_SHADER = `\n precision mediump float;\n \n attribute vec2 a_position;\n varying vec2 v_texCoord;\n varying vec2 v_screenCoord;\n \n uniform vec2 u_screenSize;\n \n void main() {\n v_texCoord = a_position * 0.5 + 0.5;\n v_screenCoord = v_texCoord * u_screenSize;\n gl_Position = vec4(a_position, 0.0, 1.0);\n }\n`;\n\nconst DEFAULT_FRAGMENT_SHADER = `\n precision mediump float;\n \n uniform sampler2D u_image;\n uniform float u_opacity;\n \n varying vec2 v_texCoord;\n \n void main() {\n gl_FragColor = texture2D(u_image, v_texCoord) * u_opacity;\n }\n`;\n\n/**\n * @typedef {Object} Options\n * @property {WebGLRenderingContext} webGlContext WebGL context; mandatory.\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas that will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} UniformInternalDescription\n * @property {import(\"./Helper\").UniformValue} value Value\n * @property {number} location Location\n * @property {WebGLTexture} [texture] Texture\n * @private\n */\n\n/**\n * @classdesc\n * This class is used to define Post Processing passes with custom shaders and uniforms.\n * This is used internally by {@link module:ol/webgl/Helper~WebGLHelper}.\n *\n * Please note that the final output on the DOM canvas is expected to have premultiplied alpha, which means that\n * a pixel which is 100% red with an opacity of 50% must have a color of (r=0.5, g=0, b=0, a=0.5).\n * Failing to provide pixel colors with premultiplied alpha will result in render anomalies.\n *\n * The default post-processing pass does *not* multiply color values with alpha value, it expects color values to be\n * premultiplied.\n *\n * Default shaders are shown hereafter:\n *\n * * Vertex shader:\n *\n * ```\n * precision mediump float;\n *\n * attribute vec2 a_position;\n * varying vec2 v_texCoord;\n * varying vec2 v_screenCoord;\n *\n * uniform vec2 u_screenSize;\n *\n * void main() {\n * v_texCoord = a_position * 0.5 + 0.5;\n * v_screenCoord = v_texCoord * u_screenSize;\n * gl_Position = vec4(a_position, 0.0, 1.0);\n * }\n * ```\n *\n * * Fragment shader:\n *\n * ```\n * precision mediump float;\n *\n * uniform sampler2D u_image;\n * uniform float u_opacity;\n *\n * varying vec2 v_texCoord;\n *\n * void main() {\n * gl_FragColor = texture2D(u_image, v_texCoord) * u_opacity;\n * }\n * ```\n *\n * @api\n */\nclass WebGLPostProcessingPass {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n this.gl_ = options.webGlContext;\n const gl = this.gl_;\n\n this.scaleRatio_ = options.scaleRatio || 1;\n\n this.renderTargetTexture_ = gl.createTexture();\n this.renderTargetTextureSize_ = null;\n\n this.frameBuffer_ = gl.createFramebuffer();\n\n // compile the program for the frame buffer\n // TODO: make compilation errors show up\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(\n vertexShader,\n options.vertexShader || DEFAULT_VERTEX_SHADER\n );\n gl.compileShader(vertexShader);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(\n fragmentShader,\n options.fragmentShader || DEFAULT_FRAGMENT_SHADER\n );\n gl.compileShader(fragmentShader);\n this.renderTargetProgram_ = gl.createProgram();\n gl.attachShader(this.renderTargetProgram_, vertexShader);\n gl.attachShader(this.renderTargetProgram_, fragmentShader);\n gl.linkProgram(this.renderTargetProgram_);\n\n // bind the vertices buffer for the frame buffer\n this.renderTargetVerticesBuffer_ = gl.createBuffer();\n const verticesArray = [-1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1];\n gl.bindBuffer(gl.ARRAY_BUFFER, this.renderTargetVerticesBuffer_);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array(verticesArray),\n gl.STATIC_DRAW\n );\n\n this.renderTargetAttribLocation_ = gl.getAttribLocation(\n this.renderTargetProgram_,\n 'a_position'\n );\n this.renderTargetUniformLocation_ = gl.getUniformLocation(\n this.renderTargetProgram_,\n 'u_screenSize'\n );\n this.renderTargetOpacityLocation_ = gl.getUniformLocation(\n this.renderTargetProgram_,\n 'u_opacity'\n );\n this.renderTargetTextureLocation_ = gl.getUniformLocation(\n this.renderTargetProgram_,\n 'u_image'\n );\n\n /**\n * Holds info about custom uniforms used in the post processing pass\n * @type {Array}\n * @private\n */\n this.uniforms_ = [];\n options.uniforms &&\n Object.keys(options.uniforms).forEach(\n function (name) {\n this.uniforms_.push({\n value: options.uniforms[name],\n location: gl.getUniformLocation(this.renderTargetProgram_, name),\n });\n }.bind(this)\n );\n }\n\n /**\n * Get the WebGL rendering context\n * @return {WebGLRenderingContext} The rendering context.\n * @api\n */\n getGL() {\n return this.gl_;\n }\n\n /**\n * Initialize the render target texture of the post process, make sure it is at the\n * right size and bind it as a render target for the next draw calls.\n * The last step to be initialized will be the one where the primitives are rendered.\n * @param {import(\"../Map.js\").FrameState} frameState current frame state\n * @api\n */\n init(frameState) {\n const gl = this.getGL();\n const textureSize = [\n gl.drawingBufferWidth * this.scaleRatio_,\n gl.drawingBufferHeight * this.scaleRatio_,\n ];\n\n // rendering goes to my buffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.getFrameBuffer());\n gl.viewport(0, 0, textureSize[0], textureSize[1]);\n\n // if size has changed: adjust canvas & render target texture\n if (\n !this.renderTargetTextureSize_ ||\n this.renderTargetTextureSize_[0] !== textureSize[0] ||\n this.renderTargetTextureSize_[1] !== textureSize[1]\n ) {\n this.renderTargetTextureSize_ = textureSize;\n\n // create a new texture\n const level = 0;\n const internalFormat = gl.RGBA;\n const border = 0;\n const format = gl.RGBA;\n const type = gl.UNSIGNED_BYTE;\n const data = null;\n gl.bindTexture(gl.TEXTURE_2D, this.renderTargetTexture_);\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n textureSize[0],\n textureSize[1],\n border,\n format,\n type,\n data\n );\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n // bind the texture to the framebuffer\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n this.renderTargetTexture_,\n 0\n );\n }\n }\n\n /**\n * Render to the next postprocessing pass (or to the canvas if final pass).\n * @param {import(\"../Map.js\").FrameState} frameState current frame state\n * @param {WebGLPostProcessingPass} [nextPass] Next pass, optional\n * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [preCompose] Called before composing.\n * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [postCompose] Called before composing.\n * @api\n */\n apply(frameState, nextPass, preCompose, postCompose) {\n const gl = this.getGL();\n const size = frameState.size;\n\n gl.bindFramebuffer(\n gl.FRAMEBUFFER,\n nextPass ? nextPass.getFrameBuffer() : null\n );\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.renderTargetTexture_);\n\n if (!nextPass) {\n // clear the canvas if we are the first to render to it\n // and preserveDrawingBuffer is true\n const canvasId = getUid(gl.canvas);\n if (!frameState.renderTargets[canvasId]) {\n const attributes = gl.getContextAttributes();\n if (attributes && attributes.preserveDrawingBuffer) {\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n\n frameState.renderTargets[canvasId] = true;\n }\n }\n\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.renderTargetVerticesBuffer_);\n\n gl.useProgram(this.renderTargetProgram_);\n gl.enableVertexAttribArray(this.renderTargetAttribLocation_);\n gl.vertexAttribPointer(\n this.renderTargetAttribLocation_,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0\n );\n gl.uniform2f(this.renderTargetUniformLocation_, size[0], size[1]);\n gl.uniform1i(this.renderTargetTextureLocation_, 0);\n\n const opacity = frameState.layerStatesArray[frameState.layerIndex].opacity;\n gl.uniform1f(this.renderTargetOpacityLocation_, opacity);\n\n this.applyUniforms(frameState);\n\n if (preCompose) {\n preCompose(gl, frameState);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n if (postCompose) {\n postCompose(gl, frameState);\n }\n }\n\n /**\n * @return {WebGLFramebuffer} Frame buffer\n * @api\n */\n getFrameBuffer() {\n return this.frameBuffer_;\n }\n\n /**\n * Sets the custom uniforms based on what was given in the constructor.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @private\n */\n applyUniforms(frameState) {\n const gl = this.getGL();\n\n let value;\n let textureSlot = 1;\n this.uniforms_.forEach(function (uniform) {\n value =\n typeof uniform.value === 'function'\n ? uniform.value(frameState)\n : uniform.value;\n\n // apply value based on type\n if (value instanceof HTMLCanvasElement || value instanceof ImageData) {\n // create a texture & put data\n if (!uniform.texture) {\n uniform.texture = gl.createTexture();\n }\n gl.activeTexture(gl[`TEXTURE${textureSlot}`]);\n gl.bindTexture(gl.TEXTURE_2D, uniform.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n if (value instanceof ImageData) {\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n value.width,\n value.height,\n 0,\n gl.UNSIGNED_BYTE,\n new Uint8Array(value.data)\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n value\n );\n }\n\n // fill texture slots\n gl.uniform1i(uniform.location, textureSlot++);\n } else if (Array.isArray(value)) {\n switch (value.length) {\n case 2:\n gl.uniform2f(uniform.location, value[0], value[1]);\n return;\n case 3:\n gl.uniform3f(uniform.location, value[0], value[1], value[2]);\n return;\n case 4:\n gl.uniform4f(\n uniform.location,\n value[0],\n value[1],\n value[2],\n value[3]\n );\n return;\n default:\n return;\n }\n } else if (typeof value === 'number') {\n gl.uniform1f(uniform.location, value);\n }\n });\n }\n}\n\nexport default WebGLPostProcessingPass;\n","/**\n * @module ol/vec/mat4\n */\n\n/**\n * @return {Array} \"4x4 matrix representing a 3D identity transform.\"\n */\nexport function create() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\n/**\n * @param {Array} mat4 Flattened 4x4 matrix receiving the result.\n * @param {import(\"../transform.js\").Transform} transform Transformation matrix.\n * @return {Array} \"2D transformation matrix as flattened 4x4 matrix.\"\n */\nexport function fromTransform(mat4, transform) {\n mat4[0] = transform[0];\n mat4[1] = transform[1];\n mat4[4] = transform[2];\n mat4[5] = transform[3];\n mat4[12] = transform[4];\n mat4[13] = transform[5];\n return mat4;\n}\n","/**\n * @module ol/webgl/Helper\n */\nimport ContextEventType from '../webgl/ContextEventType.js';\nimport Disposable from '../Disposable.js';\nimport WebGLPostProcessingPass from './PostProcessingPass.js';\nimport {\n FLOAT,\n UNSIGNED_BYTE,\n UNSIGNED_INT,\n UNSIGNED_SHORT,\n getContext,\n} from '../webgl.js';\nimport {clear} from '../obj.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n reset as resetTransform,\n rotate as rotateTransform,\n scale as scaleTransform,\n} from '../transform.js';\nimport {create, fromTransform} from '../vec/mat4.js';\nimport {getUid} from '../util.js';\n\n/**\n * @typedef {Object} BufferCacheEntry\n * @property {import(\"./Buffer.js\").default} buffer Buffer.\n * @property {WebGLBuffer} webGlBuffer WebGlBuffer.\n */\n\n/**\n * Shader types, either `FRAGMENT_SHADER` or `VERTEX_SHADER`.\n * @enum {number}\n */\nexport const ShaderType = {\n FRAGMENT_SHADER: 0x8b30,\n VERTEX_SHADER: 0x8b31,\n};\n\n/**\n * Names of uniforms made available to all shaders.\n * Please note: changing these *will* break custom shaders!\n * @enum {string}\n */\nexport const DefaultUniform = {\n PROJECTION_MATRIX: 'u_projectionMatrix',\n OFFSET_SCALE_MATRIX: 'u_offsetScaleMatrix',\n OFFSET_ROTATION_MATRIX: 'u_offsetRotateMatrix',\n TIME: 'u_time',\n ZOOM: 'u_zoom',\n RESOLUTION: 'u_resolution',\n SIZE_PX: 'u_sizePx',\n PIXEL_RATIO: 'u_pixelRatio',\n};\n\n/**\n * Attribute types, either `UNSIGNED_BYTE`, `UNSIGNED_SHORT`, `UNSIGNED_INT` or `FLOAT`\n * Note: an attribute stored in a `Float32Array` should be of type `FLOAT`.\n * @enum {number}\n */\nexport const AttributeType = {\n UNSIGNED_BYTE: UNSIGNED_BYTE,\n UNSIGNED_SHORT: UNSIGNED_SHORT,\n UNSIGNED_INT: UNSIGNED_INT,\n FLOAT: FLOAT,\n};\n\n/**\n * Description of an attribute in a buffer\n * @typedef {Object} AttributeDescription\n * @property {string} name Attribute name to use in shaders\n * @property {number} size Number of components per attributes\n * @property {AttributeType} [type] Attribute type, i.e. number of bytes used to store the value. This is\n * determined by the class of typed array which the buffer uses (eg. `Float32Array` for a `FLOAT` attribute).\n * Default is `FLOAT`.\n */\n\n/**\n * @typedef {number|Array|HTMLCanvasElement|HTMLImageElement|ImageData|import(\"../transform\").Transform} UniformLiteralValue\n */\n\n/**\n * Uniform value can be a number, array of numbers (2 to 4), canvas element or a callback returning\n * one of the previous types.\n * @typedef {UniformLiteralValue|function(import(\"../Map.js\").FrameState):UniformLiteralValue} UniformValue\n */\n\n/**\n * @typedef {Object} PostProcessesOptions\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas which will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} Options\n * @property {Object} [uniforms] Uniform definitions; property names must match the uniform\n * names in the provided or default shaders.\n * @property {Array} [postProcesses] Post-processes definitions\n * @property {string} [canvasCacheKey] The cache key for the canvas.\n */\n\n/**\n * @typedef {Object} UniformInternalDescription\n * @property {string} name Name\n * @property {UniformValue} [value] Value\n * @property {WebGLTexture} [texture] Texture\n * @private\n */\n\n/**\n * @typedef {Object} CanvasCacheItem\n * @property {HTMLCanvasElement} canvas Canvas element.\n * @property {number} users The count of users of this canvas.\n */\n\n/**\n * @type {Object}\n */\nconst canvasCache = {};\n\n/**\n * @param {string} key The cache key for the canvas.\n * @return {string} The shared cache key.\n */\nfunction getSharedCanvasCacheKey(key) {\n return 'shared/' + key;\n}\n\nlet uniqueCanvasCacheKeyCount = 0;\n\n/**\n * @return {string} The unique cache key.\n */\nfunction getUniqueCanvasCacheKey() {\n const key = 'unique/' + uniqueCanvasCacheKeyCount;\n uniqueCanvasCacheKeyCount += 1;\n return key;\n}\n\n/**\n * @param {string} key The cache key for the canvas.\n * @return {HTMLCanvasElement} The canvas.\n */\nfunction getCanvas(key) {\n let cacheItem = canvasCache[key];\n if (!cacheItem) {\n const canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.style.left = '0';\n cacheItem = {users: 0, canvas};\n canvasCache[key] = cacheItem;\n }\n\n cacheItem.users += 1;\n return cacheItem.canvas;\n}\n\n/**\n * @param {string} key The cache key for the canvas.\n */\nfunction releaseCanvas(key) {\n const cacheItem = canvasCache[key];\n if (!cacheItem) {\n return;\n }\n\n cacheItem.users -= 1;\n if (cacheItem.users > 0) {\n return;\n }\n\n const canvas = cacheItem.canvas;\n const gl = getContext(canvas);\n const extension = gl.getExtension('WEBGL_lose_context');\n if (extension) {\n extension.loseContext();\n }\n\n delete canvasCache[key];\n}\n\n/**\n * @classdesc\n * This class is intended to provide low-level functions related to WebGL rendering, so that accessing\n * directly the WebGL API should not be required anymore.\n *\n * Several operations are handled by the `WebGLHelper` class:\n *\n * ### Define custom shaders and uniforms\n *\n * *Shaders* are low-level programs executed on the GPU and written in GLSL. There are two types of shaders:\n *\n * Vertex shaders are used to manipulate the position and attribute of *vertices* of rendered primitives (ie. corners of a square).\n * Outputs are:\n *\n * * `gl_Position`: position of the vertex in screen space\n *\n * * Varyings usually prefixed with `v_` are passed on to the fragment shader\n *\n * Fragment shaders are used to control the actual color of the pixels drawn on screen. Their only output is `gl_FragColor`.\n *\n * Both shaders can take *uniforms* or *attributes* as input. Attributes are explained later. Uniforms are common, read-only values that\n * can be changed at every frame and can be of type float, arrays of float or images.\n *\n * Shaders must be compiled and assembled into a program like so:\n * ```js\n * // here we simply create two shaders and assemble them in a program which is then used\n * // for subsequent rendering calls; note how a frameState is required to set up a program,\n * // as several default uniforms are computed from it (projection matrix, zoom level, etc.)\n * const vertexShader = new WebGLVertex(VERTEX_SHADER);\n * const fragmentShader = new WebGLFragment(FRAGMENT_SHADER);\n * const program = this.context.getProgram(fragmentShader, vertexShader);\n * helper.useProgram(this.program, frameState);\n * ```\n *\n * Uniforms are defined using the `uniforms` option and can either be explicit values or callbacks taking the frame state as argument.\n * You can also change their value along the way like so:\n * ```js\n * helper.setUniformFloatValue('u_value', valueAsNumber);\n * ```\n *\n * ### Defining post processing passes\n *\n * *Post processing* describes the act of rendering primitives to a texture, and then rendering this texture to the final canvas\n * while applying special effects in screen space.\n * Typical uses are: blurring, color manipulation, depth of field, filtering...\n *\n * The `WebGLHelper` class offers the possibility to define post processes at creation time using the `postProcesses` option.\n * A post process step accepts the following options:\n *\n * * `fragmentShader` and `vertexShader`: text literals in GLSL language that will be compiled and used in the post processing step.\n * * `uniforms`: uniforms can be defined for the post processing steps just like for the main render.\n * * `scaleRatio`: allows using an intermediate texture smaller or higher than the final canvas in the post processing step.\n * This is typically used in blur steps to reduce the performance overhead by using an already downsampled texture as input.\n *\n * The {@link module:ol/webgl/PostProcessingPass~WebGLPostProcessingPass} class is used internally, refer to its documentation for more info.\n *\n * ### Binding WebGL buffers and flushing data into them\n *\n * Data that must be passed to the GPU has to be transferred using {@link module:ol/webgl/Buffer~WebGLArrayBuffer} objects.\n * A buffer has to be created only once, but must be bound every time the buffer content will be used for rendering.\n * This is done using {@link bindBuffer}.\n * When the buffer's array content has changed, the new data has to be flushed to the GPU memory; this is done using\n * {@link flushBufferData}. Note: this operation is expensive and should be done as infrequently as possible.\n *\n * When binding an array buffer, a `target` parameter must be given: it should be either {@link module:ol/webgl.ARRAY_BUFFER}\n * (if the buffer contains vertices data) or {@link module:ol/webgl.ELEMENT_ARRAY_BUFFER} (if the buffer contains indices data).\n *\n * Examples below:\n * ```js\n * // at initialization phase\n * const verticesBuffer = new WebGLArrayBuffer([], DYNAMIC_DRAW);\n * const indicesBuffer = new WebGLArrayBuffer([], DYNAMIC_DRAW);\n *\n * // when array values have changed\n * helper.flushBufferData(ARRAY_BUFFER, this.verticesBuffer);\n * helper.flushBufferData(ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n *\n * // at rendering phase\n * helper.bindBuffer(ARRAY_BUFFER, this.verticesBuffer);\n * helper.bindBuffer(ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n * ```\n *\n * ### Specifying attributes\n *\n * The GPU only receives the data as arrays of numbers. These numbers must be handled differently depending on what it describes (position, texture coordinate...).\n * Attributes are used to specify these uses. Specify the attribute names with\n * {@link module:ol/webgl/Helper~WebGLHelper#enableAttributes} (see code snippet below).\n *\n * Please note that you will have to specify the type and offset of the attributes in the data array. You can refer to the documentation of [WebGLRenderingContext.vertexAttribPointer](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer) for more explanation.\n * ```js\n * // here we indicate that the data array has the following structure:\n * // [posX, posY, offsetX, offsetY, texCoordU, texCoordV, posX, posY, ...]\n * helper.enableAttributes([\n * {\n * name: 'a_position',\n * size: 2\n * },\n * {\n * name: 'a_offset',\n * size: 2\n * },\n * {\n * name: 'a_texCoord',\n * size: 2\n * }\n * ])\n * ```\n *\n * ### Rendering primitives\n *\n * Once all the steps above have been achieved, rendering primitives to the screen is done using {@link prepareDraw}, {@link drawElements} and {@link finalizeDraw}.\n * ```js\n * // frame preparation step\n * helper.prepareDraw(frameState);\n *\n * // call this for every data array that has to be rendered on screen\n * helper.drawElements(0, this.indicesBuffer.getArray().length);\n *\n * // finalize the rendering by applying post processes\n * helper.finalizeDraw(frameState);\n * ```\n *\n * For an example usage of this class, refer to {@link module:ol/renderer/webgl/PointsLayer~WebGLPointsLayerRenderer}.\n */\nclass WebGLHelper extends Disposable {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n options = options || {};\n\n /** @private */\n this.boundHandleWebGLContextLost_ = this.handleWebGLContextLost.bind(this);\n\n /** @private */\n this.boundHandleWebGLContextRestored_ =\n this.handleWebGLContextRestored.bind(this);\n\n /**\n * @private\n * @type {string}\n */\n this.canvasCacheKey_ = options.canvasCacheKey\n ? getSharedCanvasCacheKey(options.canvasCacheKey)\n : getUniqueCanvasCacheKey();\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = getCanvas(this.canvasCacheKey_);\n\n /**\n * @private\n * @type {WebGLRenderingContext}\n */\n this.gl_ = getContext(this.canvas_);\n\n /**\n * @private\n * @type {!Object}\n */\n this.bufferCache_ = {};\n\n /**\n * @private\n * @type {Object}\n */\n this.extensionCache_ = {};\n\n /**\n * @private\n * @type {WebGLProgram}\n */\n this.currentProgram_ = null;\n\n this.canvas_.addEventListener(\n ContextEventType.LOST,\n this.boundHandleWebGLContextLost_\n );\n this.canvas_.addEventListener(\n ContextEventType.RESTORED,\n this.boundHandleWebGLContextRestored_\n );\n\n /**\n * @private\n * @type {import(\"../transform.js\").Transform}\n */\n this.offsetRotateMatrix_ = createTransform();\n\n /**\n * @private\n * @type {import(\"../transform.js\").Transform}\n */\n this.offsetScaleMatrix_ = createTransform();\n\n /**\n * @private\n * @type {Array}\n */\n this.tmpMat4_ = create();\n\n /**\n * @private\n * @type {Object}\n */\n this.uniformLocations_ = {};\n\n /**\n * @private\n * @type {Object}\n */\n this.attribLocations_ = {};\n\n /**\n * Holds info about custom uniforms used in the post processing pass.\n * If the uniform is a texture, the WebGL Texture object will be stored here.\n * @type {Array}\n * @private\n */\n this.uniforms_ = [];\n if (options.uniforms) {\n this.setUniforms(options.uniforms);\n }\n\n const gl = this.getGL();\n\n /**\n * An array of PostProcessingPass objects is kept in this variable, built from the steps provided in the\n * options. If no post process was given, a default one is used (so as not to have to make an exception to\n * the frame buffer logic).\n * @type {Array}\n * @private\n */\n this.postProcessPasses_ = options.postProcesses\n ? options.postProcesses.map(function (options) {\n return new WebGLPostProcessingPass({\n webGlContext: gl,\n scaleRatio: options.scaleRatio,\n vertexShader: options.vertexShader,\n fragmentShader: options.fragmentShader,\n uniforms: options.uniforms,\n });\n })\n : [new WebGLPostProcessingPass({webGlContext: gl})];\n\n /**\n * @type {string|null}\n * @private\n */\n this.shaderCompileErrors_ = null;\n\n /**\n * @type {number}\n * @private\n */\n this.startTime_ = Date.now();\n }\n\n /**\n * @param {Object} uniforms Uniform definitions.\n */\n setUniforms(uniforms) {\n this.uniforms_ = [];\n for (const name in uniforms) {\n this.uniforms_.push({\n name: name,\n value: uniforms[name],\n });\n }\n this.uniformLocations_ = {};\n }\n\n /**\n * @param {string} canvasCacheKey The canvas cache key.\n * @return {boolean} The provided key matches the one this helper was constructed with.\n */\n canvasCacheKeyMatches(canvasCacheKey) {\n return this.canvasCacheKey_ === getSharedCanvasCacheKey(canvasCacheKey);\n }\n\n /**\n * Get a WebGL extension. If the extension is not supported, null is returned.\n * Extensions are cached after they are enabled for the first time.\n * @param {string} name The extension name.\n * @return {Object|null} The extension or null if not supported.\n */\n getExtension(name) {\n if (name in this.extensionCache_) {\n return this.extensionCache_[name];\n }\n const extension = this.gl_.getExtension(name);\n this.extensionCache_[name] = extension;\n return extension;\n }\n\n /**\n * Just bind the buffer if it's in the cache. Otherwise create\n * the WebGL buffer, bind it, populate it, and add an entry to\n * the cache.\n * @param {import(\"./Buffer\").default} buffer Buffer.\n */\n bindBuffer(buffer) {\n const gl = this.getGL();\n const bufferKey = getUid(buffer);\n let bufferCache = this.bufferCache_[bufferKey];\n if (!bufferCache) {\n const webGlBuffer = gl.createBuffer();\n bufferCache = {\n buffer: buffer,\n webGlBuffer: webGlBuffer,\n };\n this.bufferCache_[bufferKey] = bufferCache;\n }\n gl.bindBuffer(buffer.getType(), bufferCache.webGlBuffer);\n }\n\n /**\n * Update the data contained in the buffer array; this is required for the\n * new data to be rendered\n * @param {import(\"./Buffer\").default} buffer Buffer.\n */\n flushBufferData(buffer) {\n const gl = this.getGL();\n this.bindBuffer(buffer);\n gl.bufferData(buffer.getType(), buffer.getArray(), buffer.getUsage());\n }\n\n /**\n * @param {import(\"./Buffer.js\").default} buf Buffer.\n */\n deleteBuffer(buf) {\n const gl = this.getGL();\n const bufferKey = getUid(buf);\n const bufferCacheEntry = this.bufferCache_[bufferKey];\n if (bufferCacheEntry && !gl.isContextLost()) {\n gl.deleteBuffer(bufferCacheEntry.webGlBuffer);\n }\n delete this.bufferCache_[bufferKey];\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.canvas_.removeEventListener(\n ContextEventType.LOST,\n this.boundHandleWebGLContextLost_\n );\n this.canvas_.removeEventListener(\n ContextEventType.RESTORED,\n this.boundHandleWebGLContextRestored_\n );\n\n releaseCanvas(this.canvasCacheKey_);\n\n delete this.gl_;\n delete this.canvas_;\n }\n\n /**\n * Clear the buffer & set the viewport to draw.\n * Post process passes will be initialized here, the first one being bound as a render target for\n * subsequent draw calls.\n * @param {import(\"../Map.js\").FrameState} frameState current frame state\n * @param {boolean} [disableAlphaBlend] If true, no alpha blending will happen.\n */\n prepareDraw(frameState, disableAlphaBlend) {\n const gl = this.getGL();\n const canvas = this.getCanvas();\n const size = frameState.size;\n const pixelRatio = frameState.pixelRatio;\n\n canvas.width = size[0] * pixelRatio;\n canvas.height = size[1] * pixelRatio;\n canvas.style.width = size[0] + 'px';\n canvas.style.height = size[1] + 'px';\n\n // loop backwards in post processes list\n for (let i = this.postProcessPasses_.length - 1; i >= 0; i--) {\n this.postProcessPasses_[i].init(frameState);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, disableAlphaBlend ? gl.ZERO : gl.ONE_MINUS_SRC_ALPHA);\n }\n\n /**\n * Clear the render target & bind it for future draw operations.\n * This is similar to `prepareDraw`, only post processes will not be applied.\n * Note: the whole viewport will be drawn to the render target, regardless of its size.\n * @param {import(\"../Map.js\").FrameState} frameState current frame state\n * @param {import(\"./RenderTarget.js\").default} renderTarget Render target to draw to\n * @param {boolean} [disableAlphaBlend] If true, no alpha blending will happen.\n */\n prepareDrawToRenderTarget(frameState, renderTarget, disableAlphaBlend) {\n const gl = this.getGL();\n const size = renderTarget.getSize();\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, renderTarget.getFramebuffer());\n gl.viewport(0, 0, size[0], size[1]);\n gl.bindTexture(gl.TEXTURE_2D, renderTarget.getTexture());\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, disableAlphaBlend ? gl.ZERO : gl.ONE_MINUS_SRC_ALPHA);\n }\n\n /**\n * Execute a draw call based on the currently bound program, texture, buffers, attributes.\n * @param {number} start Start index.\n * @param {number} end End index.\n */\n drawElements(start, end) {\n const gl = this.getGL();\n this.getExtension('OES_element_index_uint');\n\n const elementType = gl.UNSIGNED_INT;\n const elementSize = 4;\n\n const numItems = end - start;\n const offsetInBytes = start * elementSize;\n gl.drawElements(gl.TRIANGLES, numItems, elementType, offsetInBytes);\n }\n\n /**\n * Apply the successive post process passes which will eventually render to the actual canvas.\n * @param {import(\"../Map.js\").FrameState} frameState current frame state\n * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [preCompose] Called before composing.\n * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [postCompose] Called before composing.\n */\n finalizeDraw(frameState, preCompose, postCompose) {\n // apply post processes using the next one as target\n for (let i = 0, ii = this.postProcessPasses_.length; i < ii; i++) {\n if (i === ii - 1) {\n this.postProcessPasses_[i].apply(\n frameState,\n null,\n preCompose,\n postCompose\n );\n } else {\n this.postProcessPasses_[i].apply(\n frameState,\n this.postProcessPasses_[i + 1]\n );\n }\n }\n }\n\n /**\n * @return {HTMLCanvasElement} Canvas.\n */\n getCanvas() {\n return this.canvas_;\n }\n\n /**\n * Get the WebGL rendering context\n * @return {WebGLRenderingContext} The rendering context.\n */\n getGL() {\n return this.gl_;\n }\n\n /**\n * Sets the default matrix uniforms for a given frame state. This is called internally in `prepareDraw`.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n applyFrameState(frameState) {\n const size = frameState.size;\n const rotation = frameState.viewState.rotation;\n const pixelRatio = frameState.pixelRatio;\n\n const offsetScaleMatrix = resetTransform(this.offsetScaleMatrix_);\n scaleTransform(offsetScaleMatrix, 2 / size[0], 2 / size[1]);\n\n const offsetRotateMatrix = resetTransform(this.offsetRotateMatrix_);\n if (rotation !== 0) {\n rotateTransform(offsetRotateMatrix, -rotation);\n }\n\n this.setUniformMatrixValue(\n DefaultUniform.OFFSET_SCALE_MATRIX,\n fromTransform(this.tmpMat4_, offsetScaleMatrix)\n );\n this.setUniformMatrixValue(\n DefaultUniform.OFFSET_ROTATION_MATRIX,\n fromTransform(this.tmpMat4_, offsetRotateMatrix)\n );\n\n this.setUniformFloatValue(\n DefaultUniform.TIME,\n (Date.now() - this.startTime_) * 0.001\n );\n this.setUniformFloatValue(DefaultUniform.ZOOM, frameState.viewState.zoom);\n this.setUniformFloatValue(\n DefaultUniform.RESOLUTION,\n frameState.viewState.resolution\n );\n this.setUniformFloatValue(DefaultUniform.PIXEL_RATIO, pixelRatio);\n this.setUniformFloatVec2(DefaultUniform.SIZE_PX, [size[0], size[1]]);\n }\n\n /**\n * Sets the custom uniforms based on what was given in the constructor. This is called internally in `prepareDraw`.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n applyUniforms(frameState) {\n const gl = this.getGL();\n\n let value;\n let textureSlot = 0;\n this.uniforms_.forEach(\n function (uniform) {\n value =\n typeof uniform.value === 'function'\n ? uniform.value(frameState)\n : uniform.value;\n\n // apply value based on type\n if (\n value instanceof HTMLCanvasElement ||\n value instanceof HTMLImageElement ||\n value instanceof ImageData\n ) {\n // create a texture & put data\n if (!uniform.texture) {\n uniform.prevValue = undefined;\n uniform.texture = gl.createTexture();\n }\n gl.activeTexture(gl[`TEXTURE${textureSlot}`]);\n gl.bindTexture(gl.TEXTURE_2D, uniform.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n const imageReady =\n !(value instanceof HTMLImageElement) ||\n /** @type {HTMLImageElement} */ (value).complete;\n if (imageReady && uniform.prevValue !== value) {\n uniform.prevValue = value;\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n value\n );\n }\n\n // fill texture slots by increasing index\n gl.uniform1i(this.getUniformLocation(uniform.name), textureSlot++);\n } else if (Array.isArray(value) && value.length === 6) {\n this.setUniformMatrixValue(\n uniform.name,\n fromTransform(this.tmpMat4_, value)\n );\n } else if (Array.isArray(value) && value.length <= 4) {\n switch (value.length) {\n case 2:\n gl.uniform2f(\n this.getUniformLocation(uniform.name),\n value[0],\n value[1]\n );\n return;\n case 3:\n gl.uniform3f(\n this.getUniformLocation(uniform.name),\n value[0],\n value[1],\n value[2]\n );\n return;\n case 4:\n gl.uniform4f(\n this.getUniformLocation(uniform.name),\n value[0],\n value[1],\n value[2],\n value[3]\n );\n return;\n default:\n return;\n }\n } else if (typeof value === 'number') {\n gl.uniform1f(this.getUniformLocation(uniform.name), value);\n }\n }.bind(this)\n );\n }\n\n /**\n * Set up a program for use. The program will be set as the current one. Then, the uniforms used\n * in the program will be set based on the current frame state and the helper configuration.\n * @param {WebGLProgram} program Program.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n useProgram(program, frameState) {\n const gl = this.getGL();\n gl.useProgram(program);\n this.currentProgram_ = program;\n this.uniformLocations_ = {};\n this.attribLocations_ = {};\n this.applyFrameState(frameState);\n this.applyUniforms(frameState);\n }\n\n /**\n * Will attempt to compile a vertex or fragment shader based on source\n * On error, the shader will be returned but\n * `gl.getShaderParameter(shader, gl.COMPILE_STATUS)` will return `true`\n * Use `gl.getShaderInfoLog(shader)` to have details\n * @param {string} source Shader source\n * @param {ShaderType} type VERTEX_SHADER or FRAGMENT_SHADER\n * @return {WebGLShader} Shader object\n */\n compileShader(source, type) {\n const gl = this.getGL();\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n return shader;\n }\n\n /**\n * Create a program for a vertex and fragment shader. Throws if shader compilation fails.\n * @param {string} fragmentShaderSource Fragment shader source.\n * @param {string} vertexShaderSource Vertex shader source.\n * @return {WebGLProgram} Program\n */\n getProgram(fragmentShaderSource, vertexShaderSource) {\n const gl = this.getGL();\n\n const fragmentShader = this.compileShader(\n fragmentShaderSource,\n gl.FRAGMENT_SHADER\n );\n\n const vertexShader = this.compileShader(\n vertexShaderSource,\n gl.VERTEX_SHADER\n );\n\n const program = gl.createProgram();\n gl.attachShader(program, fragmentShader);\n gl.attachShader(program, vertexShader);\n gl.linkProgram(program);\n\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n const message = `Fragment shader compliation failed: ${gl.getShaderInfoLog(\n fragmentShader\n )}`;\n throw new Error(message);\n }\n gl.deleteShader(fragmentShader);\n\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n const message = `Vertex shader compilation failed: ${gl.getShaderInfoLog(\n vertexShader\n )}`;\n throw new Error(message);\n }\n gl.deleteShader(vertexShader);\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n const message = `GL program linking failed: ${gl.getShaderInfoLog(\n vertexShader\n )}`;\n throw new Error(message);\n }\n\n return program;\n }\n\n /**\n * Will get the location from the shader or the cache\n * @param {string} name Uniform name\n * @return {WebGLUniformLocation} uniformLocation\n */\n getUniformLocation(name) {\n if (this.uniformLocations_[name] === undefined) {\n this.uniformLocations_[name] = this.getGL().getUniformLocation(\n this.currentProgram_,\n name\n );\n }\n return this.uniformLocations_[name];\n }\n\n /**\n * Will get the location from the shader or the cache\n * @param {string} name Attribute name\n * @return {number} attribLocation\n */\n getAttributeLocation(name) {\n if (this.attribLocations_[name] === undefined) {\n this.attribLocations_[name] = this.getGL().getAttribLocation(\n this.currentProgram_,\n name\n );\n }\n return this.attribLocations_[name];\n }\n\n /**\n * Modifies the given transform to apply the rotation/translation/scaling of the given frame state.\n * The resulting transform can be used to convert world space coordinates to view coordinates.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../transform\").Transform} transform Transform to update.\n * @return {import(\"../transform\").Transform} The updated transform object.\n */\n makeProjectionTransform(frameState, transform) {\n const size = frameState.size;\n const rotation = frameState.viewState.rotation;\n const resolution = frameState.viewState.resolution;\n const center = frameState.viewState.center;\n\n resetTransform(transform);\n composeTransform(\n transform,\n 0,\n 0,\n 2 / (resolution * size[0]),\n 2 / (resolution * size[1]),\n -rotation,\n -center[0],\n -center[1]\n );\n return transform;\n }\n\n /**\n * Give a value for a standard float uniform\n * @param {string} uniform Uniform name\n * @param {number} value Value\n */\n setUniformFloatValue(uniform, value) {\n this.getGL().uniform1f(this.getUniformLocation(uniform), value);\n }\n\n /**\n * Give a value for a vec2 uniform\n * @param {string} uniform Uniform name\n * @param {Array} value Array of length 4.\n */\n setUniformFloatVec2(uniform, value) {\n this.getGL().uniform2fv(this.getUniformLocation(uniform), value);\n }\n\n /**\n * Give a value for a vec4 uniform\n * @param {string} uniform Uniform name\n * @param {Array} value Array of length 4.\n */\n setUniformFloatVec4(uniform, value) {\n this.getGL().uniform4fv(this.getUniformLocation(uniform), value);\n }\n\n /**\n * Give a value for a standard matrix4 uniform\n * @param {string} uniform Uniform name\n * @param {Array} value Matrix value\n */\n setUniformMatrixValue(uniform, value) {\n this.getGL().uniformMatrix4fv(\n this.getUniformLocation(uniform),\n false,\n value\n );\n }\n\n /**\n * Will set the currently bound buffer to an attribute of the shader program. Used by `#enableAttributes`\n * internally.\n * @param {string} attribName Attribute name\n * @param {number} size Number of components per attributes\n * @param {number} type UNSIGNED_INT, UNSIGNED_BYTE, UNSIGNED_SHORT or FLOAT\n * @param {number} stride Stride in bytes (0 means attribs are packed)\n * @param {number} offset Offset in bytes\n * @private\n */\n enableAttributeArray_(attribName, size, type, stride, offset) {\n const location = this.getAttributeLocation(attribName);\n // the attribute has not been found in the shaders; do not enable it\n if (location < 0) {\n return;\n }\n this.getGL().enableVertexAttribArray(location);\n this.getGL().vertexAttribPointer(\n location,\n size,\n type,\n false,\n stride,\n offset\n );\n }\n\n /**\n * Will enable the following attributes to be read from the currently bound buffer,\n * i.e. tell the GPU where to read the different attributes in the buffer. An error in the\n * size/type/order of attributes will most likely break the rendering and throw a WebGL exception.\n * @param {Array} attributes Ordered list of attributes to read from the buffer\n */\n enableAttributes(attributes) {\n const stride = computeAttributesStride(attributes);\n let offset = 0;\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes[i];\n this.enableAttributeArray_(\n attr.name,\n attr.size,\n attr.type || FLOAT,\n stride,\n offset\n );\n offset += attr.size * getByteSizeFromType(attr.type);\n }\n }\n\n /**\n * WebGL context was lost\n * @private\n */\n handleWebGLContextLost() {\n clear(this.bufferCache_);\n this.currentProgram_ = null;\n }\n\n /**\n * WebGL context was restored\n * @private\n */\n handleWebGLContextRestored() {}\n\n /**\n * Will create or reuse a given webgl texture and apply the given size. If no image data\n * specified, the texture will be empty, otherwise image data will be used and the `size`\n * parameter will be ignored.\n * Note: wrap parameters are set to clamp to edge, min filter is set to linear.\n * @param {Array} size Expected size of the texture\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement} [data] Image data/object to bind to the texture\n * @param {WebGLTexture} [texture] Existing texture to reuse\n * @return {WebGLTexture} The generated texture\n */\n createTexture(size, data, texture) {\n const gl = this.getGL();\n texture = texture || gl.createTexture();\n\n // set params & size\n const level = 0;\n const internalFormat = gl.RGBA;\n const border = 0;\n const format = gl.RGBA;\n const type = gl.UNSIGNED_BYTE;\n gl.bindTexture(gl.TEXTURE_2D, texture);\n if (data) {\n gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, format, type, data);\n } else {\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n size[0],\n size[1],\n border,\n format,\n type,\n null\n );\n }\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n return texture;\n }\n}\n\n/**\n * Compute a stride in bytes based on a list of attributes\n * @param {Array} attributes Ordered list of attributes\n * @return {number} Stride, ie amount of values for each vertex in the vertex buffer\n */\nexport function computeAttributesStride(attributes) {\n let stride = 0;\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes[i];\n stride += attr.size * getByteSizeFromType(attr.type);\n }\n return stride;\n}\n\n/**\n * Computes the size in byte of an attribute type.\n * @param {AttributeType} type Attribute type\n * @return {number} The size in bytes\n */\nfunction getByteSizeFromType(type) {\n switch (type) {\n case AttributeType.UNSIGNED_BYTE:\n return Uint8Array.BYTES_PER_ELEMENT;\n case AttributeType.UNSIGNED_SHORT:\n return Uint16Array.BYTES_PER_ELEMENT;\n case AttributeType.UNSIGNED_INT:\n return Uint32Array.BYTES_PER_ELEMENT;\n case AttributeType.FLOAT:\n default:\n return Float32Array.BYTES_PER_ELEMENT;\n }\n}\n\nexport default WebGLHelper;\n","/**\n * @module ol/webgl/PaletteTexture\n */\n\nclass PaletteTexture {\n /**\n * @param {string} name The name of the texture.\n * @param {Uint8Array} data The texture data.\n */\n constructor(name, data) {\n this.name = name;\n this.data = data;\n\n /**\n * @type {WebGLTexture}\n * @private\n */\n this.texture_ = null;\n }\n\n /**\n * @param {WebGLRenderingContext} gl Rendering context.\n * @return {WebGLTexture} The texture.\n */\n getTexture(gl) {\n if (!this.texture_) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n this.data.length / 4,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.data\n );\n this.texture_ = texture;\n }\n return this.texture_;\n }\n}\n\nexport default PaletteTexture;\n","/**\n * A wrapper class to simplify rendering to a texture instead of the final canvas\n * @module ol/webgl/RenderTarget\n */\nimport {equals} from '../array.js';\n\n// for pixel color reading\nconst tmpArray4 = new Uint8Array(4);\n\n/**\n * @classdesc\n * This class is a wrapper around the association of both a `WebGLTexture` and a `WebGLFramebuffer` instances,\n * simplifying initialization and binding for rendering.\n * @api\n */\nclass WebGLRenderTarget {\n /**\n * @param {import(\"./Helper.js\").default} helper WebGL helper; mandatory.\n * @param {Array} [size] Expected size of the render target texture; note: this can be changed later on.\n */\n constructor(helper, size) {\n /**\n * @private\n * @type {import(\"./Helper.js\").default}\n */\n this.helper_ = helper;\n const gl = helper.getGL();\n\n /**\n * @private\n * @type {WebGLTexture}\n */\n this.texture_ = gl.createTexture();\n\n /**\n * @private\n * @type {WebGLFramebuffer}\n */\n this.framebuffer_ = gl.createFramebuffer();\n\n /**\n * @type {Array}\n * @private\n */\n this.size_ = size || [1, 1];\n\n /**\n * @type {Uint8Array}\n * @private\n */\n this.data_ = new Uint8Array(0);\n\n /**\n * @type {boolean}\n * @private\n */\n this.dataCacheDirty_ = true;\n\n this.updateSize_();\n }\n\n /**\n * Changes the size of the render target texture. Note: will do nothing if the size\n * is already the same.\n * @param {Array} size Expected size of the render target texture\n * @api\n */\n setSize(size) {\n if (equals(size, this.size_)) {\n return;\n }\n this.size_[0] = size[0];\n this.size_[1] = size[1];\n this.updateSize_();\n }\n\n /**\n * Returns the size of the render target texture\n * @return {Array} Size of the render target texture\n * @api\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * This will cause following calls to `#readAll` or `#readPixel` to download the content of the\n * render target into memory, which is an expensive operation.\n * This content will be kept in cache but should be cleared after each new render.\n * @api\n */\n clearCachedData() {\n this.dataCacheDirty_ = true;\n }\n\n /**\n * Returns the full content of the frame buffer as a series of r, g, b, a components\n * in the 0-255 range (unsigned byte).\n * @return {Uint8Array} Integer array of color values\n * @api\n */\n readAll() {\n if (this.dataCacheDirty_) {\n const size = this.size_;\n const gl = this.helper_.getGL();\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer_);\n gl.readPixels(\n 0,\n 0,\n size[0],\n size[1],\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.data_\n );\n this.dataCacheDirty_ = false;\n }\n return this.data_;\n }\n\n /**\n * Reads one pixel of the frame buffer as an array of r, g, b, a components\n * in the 0-255 range (unsigned byte).\n * If x and/or y are outside of existing data, an array filled with 0 is returned.\n * @param {number} x Pixel coordinate\n * @param {number} y Pixel coordinate\n * @return {Uint8Array} Integer array with one color value (4 components)\n * @api\n */\n readPixel(x, y) {\n if (x < 0 || y < 0 || x > this.size_[0] || y >= this.size_[1]) {\n tmpArray4[0] = 0;\n tmpArray4[1] = 0;\n tmpArray4[2] = 0;\n tmpArray4[3] = 0;\n return tmpArray4;\n }\n\n this.readAll();\n const index =\n Math.floor(x) + (this.size_[1] - Math.floor(y) - 1) * this.size_[0];\n tmpArray4[0] = this.data_[index * 4];\n tmpArray4[1] = this.data_[index * 4 + 1];\n tmpArray4[2] = this.data_[index * 4 + 2];\n tmpArray4[3] = this.data_[index * 4 + 3];\n return tmpArray4;\n }\n\n /**\n * @return {WebGLTexture} Texture to render to\n */\n getTexture() {\n return this.texture_;\n }\n\n /**\n * @return {WebGLFramebuffer} Frame buffer of the render target\n */\n getFramebuffer() {\n return this.framebuffer_;\n }\n\n /**\n * @private\n */\n updateSize_() {\n const size = this.size_;\n const gl = this.helper_.getGL();\n\n this.texture_ = this.helper_.createTexture(size, null, this.texture_);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer_);\n gl.viewport(0, 0, size[0], size[1]);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n this.texture_,\n 0\n );\n\n this.data_ = new Uint8Array(size[0] * size[1] * 4);\n }\n}\n\nexport default WebGLRenderTarget;\n","/**\n * @module ol/reproj/Triangulation\n */\nimport {\n boundingExtent,\n createEmpty,\n extendCoordinate,\n getArea,\n getBottomLeft,\n getBottomRight,\n getTopLeft,\n getTopRight,\n getWidth,\n intersects,\n} from '../extent.js';\nimport {getTransform} from '../proj.js';\nimport {modulo} from '../math.js';\n\n/**\n * Single triangle; consists of 3 source points and 3 target points.\n * @typedef {Object} Triangle\n * @property {Array} source Source.\n * @property {Array} target Target.\n */\n\n/**\n * Maximum number of subdivision steps during raster reprojection triangulation.\n * Prevents high memory usage and large number of proj4 calls (for certain\n * transformations and areas). At most `2*(2^this)` triangles are created for\n * each triangulated extent (tile/image).\n * @type {number}\n */\nconst MAX_SUBDIVISION = 10;\n\n/**\n * Maximum allowed size of triangle relative to world width. When transforming\n * corners of world extent between certain projections, the resulting\n * triangulation seems to have zero error and no subdivision is performed. If\n * the triangle width is more than this (relative to world width; 0-1),\n * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.\n * @type {number}\n */\nconst MAX_TRIANGLE_WIDTH = 0.25;\n\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n */\nclass Triangulation {\n /**\n * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"../extent.js\").Extent} targetExtent Target extent to triangulate.\n * @param {import(\"../extent.js\").Extent} maxSourceExtent Maximal source extent that can be used.\n * @param {number} errorThreshold Acceptable error (in source units).\n * @param {?number} destinationResolution The (optional) resolution of the destination.\n */\n constructor(\n sourceProj,\n targetProj,\n targetExtent,\n maxSourceExtent,\n errorThreshold,\n destinationResolution\n ) {\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.sourceProj_ = sourceProj;\n\n /**\n * @type {import(\"../proj/Projection.js\").default}\n * @private\n */\n this.targetProj_ = targetProj;\n\n /** @type {!Object} */\n let transformInvCache = {};\n const transformInv = getTransform(this.targetProj_, this.sourceProj_);\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} c A coordinate.\n * @return {import(\"../coordinate.js\").Coordinate} Transformed coordinate.\n * @private\n */\n this.transformInv_ = function (c) {\n const key = c[0] + '/' + c[1];\n if (!transformInvCache[key]) {\n transformInvCache[key] = transformInv(c);\n }\n return transformInvCache[key];\n };\n\n /**\n * @type {import(\"../extent.js\").Extent}\n * @private\n */\n this.maxSourceExtent_ = maxSourceExtent;\n\n /**\n * @type {number}\n * @private\n */\n this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n\n /**\n * @type {Array}\n * @private\n */\n this.triangles_ = [];\n\n /**\n * Indicates that the triangulation crosses edge of the source projection.\n * @type {boolean}\n * @private\n */\n this.wrapsXInSource_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.canWrapXInSource_ =\n this.sourceProj_.canWrapX() &&\n !!maxSourceExtent &&\n !!this.sourceProj_.getExtent() &&\n getWidth(maxSourceExtent) == getWidth(this.sourceProj_.getExtent());\n\n /**\n * @type {?number}\n * @private\n */\n this.sourceWorldWidth_ = this.sourceProj_.getExtent()\n ? getWidth(this.sourceProj_.getExtent())\n : null;\n\n /**\n * @type {?number}\n * @private\n */\n this.targetWorldWidth_ = this.targetProj_.getExtent()\n ? getWidth(this.targetProj_.getExtent())\n : null;\n\n const destinationTopLeft = getTopLeft(targetExtent);\n const destinationTopRight = getTopRight(targetExtent);\n const destinationBottomRight = getBottomRight(targetExtent);\n const destinationBottomLeft = getBottomLeft(targetExtent);\n const sourceTopLeft = this.transformInv_(destinationTopLeft);\n const sourceTopRight = this.transformInv_(destinationTopRight);\n const sourceBottomRight = this.transformInv_(destinationBottomRight);\n const sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n\n /*\n * The maxSubdivision controls how many splittings of the target area can\n * be done. The idea here is to do a linear mapping of the target areas\n * but the actual overal reprojection (can be) extremely non-linear. The\n * default value of MAX_SUBDIVISION was chosen based on mapping a 256x256\n * tile size. However this function is also called to remap canvas rendered\n * layers which can be much larger. This calculation increases the maxSubdivision\n * value by the right factor so that each 256x256 pixel area has\n * MAX_SUBDIVISION divisions.\n */\n const maxSubdivision =\n MAX_SUBDIVISION +\n (destinationResolution\n ? Math.max(\n 0,\n Math.ceil(\n Math.log2(\n getArea(targetExtent) /\n (destinationResolution * destinationResolution * 256 * 256)\n )\n )\n )\n : 0);\n\n this.addQuad_(\n destinationTopLeft,\n destinationTopRight,\n destinationBottomRight,\n destinationBottomLeft,\n sourceTopLeft,\n sourceTopRight,\n sourceBottomRight,\n sourceBottomLeft,\n maxSubdivision\n );\n\n if (this.wrapsXInSource_) {\n let leftBound = Infinity;\n this.triangles_.forEach(function (triangle, i, arr) {\n leftBound = Math.min(\n leftBound,\n triangle.source[0][0],\n triangle.source[1][0],\n triangle.source[2][0]\n );\n });\n\n // Shift triangles to be as close to `leftBound` as possible\n // (if the distance is more than `worldWidth / 2` it can be closer.\n this.triangles_.forEach(\n function (triangle) {\n if (\n Math.max(\n triangle.source[0][0],\n triangle.source[1][0],\n triangle.source[2][0]\n ) -\n leftBound >\n this.sourceWorldWidth_ / 2\n ) {\n const newTriangle = [\n [triangle.source[0][0], triangle.source[0][1]],\n [triangle.source[1][0], triangle.source[1][1]],\n [triangle.source[2][0], triangle.source[2][1]],\n ];\n if (newTriangle[0][0] - leftBound > this.sourceWorldWidth_ / 2) {\n newTriangle[0][0] -= this.sourceWorldWidth_;\n }\n if (newTriangle[1][0] - leftBound > this.sourceWorldWidth_ / 2) {\n newTriangle[1][0] -= this.sourceWorldWidth_;\n }\n if (newTriangle[2][0] - leftBound > this.sourceWorldWidth_ / 2) {\n newTriangle[2][0] -= this.sourceWorldWidth_;\n }\n\n // Rarely (if the extent contains both the dateline and prime meridian)\n // the shift can in turn break some triangles.\n // Detect this here and don't shift in such cases.\n const minX = Math.min(\n newTriangle[0][0],\n newTriangle[1][0],\n newTriangle[2][0]\n );\n const maxX = Math.max(\n newTriangle[0][0],\n newTriangle[1][0],\n newTriangle[2][0]\n );\n if (maxX - minX < this.sourceWorldWidth_ / 2) {\n triangle.source = newTriangle;\n }\n }\n }.bind(this)\n );\n }\n\n transformInvCache = {};\n }\n\n /**\n * Adds triangle to the triangulation.\n * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n * @private\n */\n addTriangle_(a, b, c, aSrc, bSrc, cSrc) {\n this.triangles_.push({\n source: [aSrc, bSrc, cSrc],\n target: [a, b, c],\n });\n }\n\n /**\n * Adds quad (points in clock-wise order) to the triangulation\n * (and reprojects the vertices) if valid.\n * Performs quad subdivision if needed to increase precision.\n *\n * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} d The target d coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} dSrc The source d coordinate.\n * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n * @private\n */\n addQuad_(a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n const sourceQuadExtent = boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n const sourceCoverageX = this.sourceWorldWidth_\n ? getWidth(sourceQuadExtent) / this.sourceWorldWidth_\n : null;\n const sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n\n // when the quad is wrapped in the source projection\n // it covers most of the projection extent, but not fully\n const wrapsX =\n this.sourceProj_.canWrapX() &&\n sourceCoverageX > 0.5 &&\n sourceCoverageX < 1;\n\n let needsSubdivision = false;\n\n if (maxSubdivision > 0) {\n if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n const targetQuadExtent = boundingExtent([a, b, c, d]);\n const targetCoverageX =\n getWidth(targetQuadExtent) / this.targetWorldWidth_;\n needsSubdivision =\n targetCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n }\n if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n needsSubdivision =\n sourceCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n }\n }\n\n if (!needsSubdivision && this.maxSourceExtent_) {\n if (\n isFinite(sourceQuadExtent[0]) &&\n isFinite(sourceQuadExtent[1]) &&\n isFinite(sourceQuadExtent[2]) &&\n isFinite(sourceQuadExtent[3])\n ) {\n if (!intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n // whole quad outside source projection extent -> ignore\n return;\n }\n }\n }\n\n let isNotFinite = 0;\n\n if (!needsSubdivision) {\n if (\n !isFinite(aSrc[0]) ||\n !isFinite(aSrc[1]) ||\n !isFinite(bSrc[0]) ||\n !isFinite(bSrc[1]) ||\n !isFinite(cSrc[0]) ||\n !isFinite(cSrc[1]) ||\n !isFinite(dSrc[0]) ||\n !isFinite(dSrc[1])\n ) {\n if (maxSubdivision > 0) {\n needsSubdivision = true;\n } else {\n // It might be the case that only 1 of the points is infinite. In this case\n // we can draw a single triangle with the other three points\n isNotFinite =\n (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ? 8 : 0) +\n (!isFinite(bSrc[0]) || !isFinite(bSrc[1]) ? 4 : 0) +\n (!isFinite(cSrc[0]) || !isFinite(cSrc[1]) ? 2 : 0) +\n (!isFinite(dSrc[0]) || !isFinite(dSrc[1]) ? 1 : 0);\n if (\n isNotFinite != 1 &&\n isNotFinite != 2 &&\n isNotFinite != 4 &&\n isNotFinite != 8\n ) {\n return;\n }\n }\n }\n }\n\n if (maxSubdivision > 0) {\n if (!needsSubdivision) {\n const center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n const centerSrc = this.transformInv_(center);\n\n let dx;\n if (wrapsX) {\n const centerSrcEstimX =\n (modulo(aSrc[0], sourceWorldWidth) +\n modulo(cSrc[0], sourceWorldWidth)) /\n 2;\n dx = centerSrcEstimX - modulo(centerSrc[0], sourceWorldWidth);\n } else {\n dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n }\n const dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n const centerSrcErrorSquared = dx * dx + dy * dy;\n needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n }\n if (needsSubdivision) {\n if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n // split horizontally (top & bottom)\n const bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n const bcSrc = this.transformInv_(bc);\n const da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n const daSrc = this.transformInv_(da);\n\n this.addQuad_(\n a,\n b,\n bc,\n da,\n aSrc,\n bSrc,\n bcSrc,\n daSrc,\n maxSubdivision - 1\n );\n this.addQuad_(\n da,\n bc,\n c,\n d,\n daSrc,\n bcSrc,\n cSrc,\n dSrc,\n maxSubdivision - 1\n );\n } else {\n // split vertically (left & right)\n const ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n const abSrc = this.transformInv_(ab);\n const cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n const cdSrc = this.transformInv_(cd);\n\n this.addQuad_(\n a,\n ab,\n cd,\n d,\n aSrc,\n abSrc,\n cdSrc,\n dSrc,\n maxSubdivision - 1\n );\n this.addQuad_(\n ab,\n b,\n c,\n cd,\n abSrc,\n bSrc,\n cSrc,\n cdSrc,\n maxSubdivision - 1\n );\n }\n return;\n }\n }\n\n if (wrapsX) {\n if (!this.canWrapXInSource_) {\n return;\n }\n this.wrapsXInSource_ = true;\n }\n\n // Exactly zero or one of *Src is not finite\n // The triangles must have the diagonal line as the first side\n // This is to allow easy code in reproj.s to make it straight for broken\n // browsers that can't handle diagonal clipping\n if ((isNotFinite & 0xb) == 0) {\n this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n }\n if ((isNotFinite & 0xe) == 0) {\n this.addTriangle_(a, c, b, aSrc, cSrc, bSrc);\n }\n if (isNotFinite) {\n // Try the other two triangles\n if ((isNotFinite & 0xd) == 0) {\n this.addTriangle_(b, d, a, bSrc, dSrc, aSrc);\n }\n if ((isNotFinite & 0x7) == 0) {\n this.addTriangle_(b, d, c, bSrc, dSrc, cSrc);\n }\n }\n }\n\n /**\n * Calculates extent of the `source` coordinates from all the triangles.\n *\n * @return {import(\"../extent.js\").Extent} Calculated extent.\n */\n calculateSourceExtent() {\n const extent = createEmpty();\n\n this.triangles_.forEach(function (triangle, i, arr) {\n const src = triangle.source;\n extendCoordinate(extent, src[0]);\n extendCoordinate(extent, src[1]);\n extendCoordinate(extent, src[2]);\n });\n\n return extent;\n }\n\n /**\n * @return {Array} Array of the calculated triangles.\n */\n getTriangles() {\n return this.triangles_;\n }\n}\n\nexport default Triangulation;\n","/**\n * @module ol/reproj/Tile\n */\nimport {ERROR_THRESHOLD} from './common.js';\n\nimport EventType from '../events/EventType.js';\nimport Tile from '../Tile.js';\nimport TileState from '../TileState.js';\nimport Triangulation from './Triangulation.js';\nimport {\n calculateSourceExtentResolution,\n canvasPool,\n render as renderReprojected,\n} from '../reproj.js';\nimport {clamp} from '../math.js';\nimport {getArea, getIntersection} from '../extent.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {releaseCanvas} from '../dom.js';\n\n/**\n * @typedef {function(number, number, number, number) : import(\"../Tile.js\").default} FunctionType\n */\n\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link module:ol/source/TileImage~TileImage}.\n *\n */\nclass ReprojTile extends Tile {\n /**\n * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"../tilegrid/TileGrid.js\").default} sourceTileGrid Source tile grid.\n * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"../tilegrid/TileGrid.js\").default} targetTileGrid Target tile grid.\n * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Coordinate of the tile.\n * @param {import(\"../tilecoord.js\").TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} gutter Gutter of the source tiles.\n * @param {FunctionType} getTileFunction\n * Function returning source tiles (z, x, y, pixelRatio).\n * @param {number} [errorThreshold] Acceptable reprojection error (in px).\n * @param {boolean} [renderEdges] Render reprojection edges.\n * @param {boolean} [interpolate] Use linear interpolation when resampling.\n */\n constructor(\n sourceProj,\n sourceTileGrid,\n targetProj,\n targetTileGrid,\n tileCoord,\n wrappedTileCoord,\n pixelRatio,\n gutter,\n getTileFunction,\n errorThreshold,\n renderEdges,\n interpolate\n ) {\n super(tileCoord, TileState.IDLE, {interpolate: !!interpolate});\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderEdges_ = renderEdges !== undefined ? renderEdges : false;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @private\n * @type {number}\n */\n this.gutter_ = gutter;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = null;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.sourceTileGrid_ = sourceTileGrid;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.targetTileGrid_ = targetTileGrid;\n\n /**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\n this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n\n /**\n * @private\n * @type {!Array}\n */\n this.sourceTiles_ = [];\n\n /**\n * @private\n * @type {?Array}\n */\n this.sourcesListenerKeys_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.sourceZ_ = 0;\n\n const targetExtent = targetTileGrid.getTileCoordExtent(\n this.wrappedTileCoord_\n );\n const maxTargetExtent = this.targetTileGrid_.getExtent();\n let maxSourceExtent = this.sourceTileGrid_.getExtent();\n\n const limitedTargetExtent = maxTargetExtent\n ? getIntersection(targetExtent, maxTargetExtent)\n : targetExtent;\n\n if (getArea(limitedTargetExtent) === 0) {\n // Tile is completely outside range -> EMPTY\n // TODO: is it actually correct that the source even creates the tile ?\n this.state = TileState.EMPTY;\n return;\n }\n\n const sourceProjExtent = sourceProj.getExtent();\n if (sourceProjExtent) {\n if (!maxSourceExtent) {\n maxSourceExtent = sourceProjExtent;\n } else {\n maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n }\n }\n\n const targetResolution = targetTileGrid.getResolution(\n this.wrappedTileCoord_[0]\n );\n\n const sourceResolution = calculateSourceExtentResolution(\n sourceProj,\n targetProj,\n limitedTargetExtent,\n targetResolution\n );\n\n if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n // invalid sourceResolution -> EMPTY\n // probably edges of the projections when no extent is defined\n this.state = TileState.EMPTY;\n return;\n }\n\n const errorThresholdInPixels =\n errorThreshold !== undefined ? errorThreshold : ERROR_THRESHOLD;\n\n /**\n * @private\n * @type {!import(\"./Triangulation.js\").default}\n */\n this.triangulation_ = new Triangulation(\n sourceProj,\n targetProj,\n limitedTargetExtent,\n maxSourceExtent,\n sourceResolution * errorThresholdInPixels,\n targetResolution\n );\n\n if (this.triangulation_.getTriangles().length === 0) {\n // no valid triangles -> EMPTY\n this.state = TileState.EMPTY;\n return;\n }\n\n this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n let sourceExtent = this.triangulation_.calculateSourceExtent();\n\n if (maxSourceExtent) {\n if (sourceProj.canWrapX()) {\n sourceExtent[1] = clamp(\n sourceExtent[1],\n maxSourceExtent[1],\n maxSourceExtent[3]\n );\n sourceExtent[3] = clamp(\n sourceExtent[3],\n maxSourceExtent[1],\n maxSourceExtent[3]\n );\n } else {\n sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n }\n }\n\n if (!getArea(sourceExtent)) {\n this.state = TileState.EMPTY;\n } else {\n const sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(\n sourceExtent,\n this.sourceZ_\n );\n\n for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n const tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);\n if (tile) {\n this.sourceTiles_.push(tile);\n }\n }\n }\n\n if (this.sourceTiles_.length === 0) {\n this.state = TileState.EMPTY;\n }\n }\n }\n\n /**\n * Get the HTML Canvas element for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage() {\n return this.canvas_;\n }\n\n /**\n * @private\n */\n reproject_() {\n const sources = [];\n this.sourceTiles_.forEach(\n function (tile, i, arr) {\n if (tile && tile.getState() == TileState.LOADED) {\n sources.push({\n extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),\n image: tile.getImage(),\n });\n }\n }.bind(this)\n );\n this.sourceTiles_.length = 0;\n\n if (sources.length === 0) {\n this.state = TileState.ERROR;\n } else {\n const z = this.wrappedTileCoord_[0];\n const size = this.targetTileGrid_.getTileSize(z);\n const width = typeof size === 'number' ? size : size[0];\n const height = typeof size === 'number' ? size : size[1];\n const targetResolution = this.targetTileGrid_.getResolution(z);\n const sourceResolution = this.sourceTileGrid_.getResolution(\n this.sourceZ_\n );\n\n const targetExtent = this.targetTileGrid_.getTileCoordExtent(\n this.wrappedTileCoord_\n );\n\n this.canvas_ = renderReprojected(\n width,\n height,\n this.pixelRatio_,\n sourceResolution,\n this.sourceTileGrid_.getExtent(),\n targetResolution,\n targetExtent,\n this.triangulation_,\n sources,\n this.gutter_,\n this.renderEdges_,\n this.interpolate\n );\n\n this.state = TileState.LOADED;\n }\n this.changed();\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n\n let leftToLoad = 0;\n\n this.sourcesListenerKeys_ = [];\n this.sourceTiles_.forEach(\n function (tile, i, arr) {\n const state = tile.getState();\n if (state == TileState.IDLE || state == TileState.LOADING) {\n leftToLoad++;\n\n const sourceListenKey = listen(\n tile,\n EventType.CHANGE,\n function (e) {\n const state = tile.getState();\n if (\n state == TileState.LOADED ||\n state == TileState.ERROR ||\n state == TileState.EMPTY\n ) {\n unlistenByKey(sourceListenKey);\n leftToLoad--;\n if (leftToLoad === 0) {\n this.unlistenSources_();\n this.reproject_();\n }\n }\n },\n this\n );\n this.sourcesListenerKeys_.push(sourceListenKey);\n }\n }.bind(this)\n );\n\n if (leftToLoad === 0) {\n setTimeout(this.reproject_.bind(this), 0);\n } else {\n this.sourceTiles_.forEach(function (tile, i, arr) {\n const state = tile.getState();\n if (state == TileState.IDLE) {\n tile.load();\n }\n });\n }\n }\n }\n\n /**\n * @private\n */\n unlistenSources_() {\n this.sourcesListenerKeys_.forEach(unlistenByKey);\n this.sourcesListenerKeys_ = null;\n }\n\n /**\n * Remove from the cache due to expiry\n */\n release() {\n if (this.canvas_) {\n releaseCanvas(this.canvas_.getContext('2d'));\n canvasPool.push(this.canvas_);\n this.canvas_ = null;\n }\n super.release();\n }\n}\n\nexport default ReprojTile;\n","/**\n * @module ol/reproj/common\n */\n\n/**\n * Default maximum allowed threshold (in pixels) for reprojection\n * triangulation.\n * @type {number}\n */\nexport const ERROR_THRESHOLD = 0.5;\n","/**\n * @module ol/webgl/TileTexture\n */\n\nimport DataTile from '../DataTile.js';\nimport EventTarget from '../events/Target.js';\nimport EventType from '../events/EventType.js';\nimport ImageTile from '../ImageTile.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport TileState from '../TileState.js';\nimport WebGLArrayBuffer from './Buffer.js';\nimport {ARRAY_BUFFER, STATIC_DRAW} from '../webgl.js';\nimport {toSize} from '../size.js';\n\n/**\n * @param {WebGLRenderingContext} gl The WebGL context.\n * @param {WebGLTexture} texture The texture.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction bindAndConfigure(gl, texture, interpolate) {\n const resampleFilter = interpolate ? gl.LINEAR : gl.NEAREST;\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, resampleFilter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, resampleFilter);\n}\n\n/**\n * @param {WebGLRenderingContext} gl The WebGL context.\n * @param {WebGLTexture} texture The texture.\n * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image The image.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction uploadImageTexture(gl, texture, image, interpolate) {\n bindAndConfigure(gl, texture, interpolate);\n\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n}\n\n/**\n * @param {import(\"./Helper.js\").default} helper The WebGL helper.\n * @param {WebGLTexture} texture The texture.\n * @param {import(\"../DataTile.js\").Data} data The pixel data.\n * @param {import(\"../size.js\").Size} size The pixel size.\n * @param {number} bandCount The band count.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction uploadDataTexture(\n helper,\n texture,\n data,\n size,\n bandCount,\n interpolate\n) {\n const gl = helper.getGL();\n let textureType;\n let canInterpolate;\n if (data instanceof Float32Array) {\n textureType = gl.FLOAT;\n helper.getExtension('OES_texture_float');\n const extension = helper.getExtension('OES_texture_float_linear');\n canInterpolate = extension !== null;\n } else {\n textureType = gl.UNSIGNED_BYTE;\n canInterpolate = true;\n }\n bindAndConfigure(gl, texture, interpolate && canInterpolate);\n\n const bytesPerRow = data.byteLength / size[1];\n let unpackAlignment = 1;\n if (bytesPerRow % 8 === 0) {\n unpackAlignment = 8;\n } else if (bytesPerRow % 4 === 0) {\n unpackAlignment = 4;\n } else if (bytesPerRow % 2 === 0) {\n unpackAlignment = 2;\n }\n\n let format;\n switch (bandCount) {\n case 1: {\n format = gl.LUMINANCE;\n break;\n }\n case 2: {\n format = gl.LUMINANCE_ALPHA;\n break;\n }\n case 3: {\n format = gl.RGB;\n break;\n }\n case 4: {\n format = gl.RGBA;\n break;\n }\n default: {\n throw new Error(`Unsupported number of bands: ${bandCount}`);\n }\n }\n\n const oldUnpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n format,\n size[0],\n size[1],\n 0,\n format,\n textureType,\n data\n );\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, oldUnpackAlignment);\n}\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet pixelContext = null;\n\nfunction createPixelContext() {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n pixelContext = canvas.getContext('2d');\n}\n\n/**\n * @typedef {import(\"../DataTile.js\").default|ImageTile|ReprojTile} TileType\n */\n\n/**\n * @typedef {Object} Options\n * @property {TileType} tile The tile.\n * @property {import(\"../tilegrid/TileGrid.js\").default} grid Tile grid.\n * @property {import(\"../webgl/Helper.js\").default} helper WebGL helper.\n * @property {number} [gutter=0] The size in pixels of the gutter around image tiles to ignore.\n */\n\nclass TileTexture extends EventTarget {\n /**\n * @param {Options} options The tile texture options.\n */\n constructor(options) {\n super();\n\n /**\n * @type {TileType}\n */\n this.tile;\n\n /**\n * @type {Array}\n */\n this.textures = [];\n this.handleTileChange_ = this.handleTileChange_.bind(this);\n\n /**\n * @type {import(\"../size.js\").Size}\n * @private\n */\n this.renderSize_ = toSize(\n options.grid.getTileSize(options.tile.tileCoord[0])\n );\n\n /**\n * @type {number}\n * @private\n */\n this.gutter_ = options.gutter || 0;\n\n /**\n * @type {number}\n */\n this.bandCount = NaN;\n\n /**\n * @type {import(\"../webgl/Helper.js\").default}\n * @private\n */\n this.helper_ = options.helper;\n\n const coords = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);\n coords.fromArray([\n 0, // P0\n 1,\n 1, // P1\n 1,\n 1, // P2\n 0,\n 0, // P3\n 0,\n ]);\n this.helper_.flushBufferData(coords);\n\n /**\n * @type {WebGLArrayBuffer}\n */\n this.coords = coords;\n\n this.setTile(options.tile);\n }\n\n /**\n * @param {TileType} tile Tile.\n */\n setTile(tile) {\n if (tile !== this.tile) {\n if (this.tile) {\n this.tile.removeEventListener(EventType.CHANGE, this.handleTileChange_);\n }\n this.tile = tile;\n this.textures.length = 0;\n this.loaded = tile.getState() === TileState.LOADED;\n if (this.loaded) {\n this.uploadTile_();\n } else {\n if (tile instanceof ImageTile) {\n const image = tile.getImage();\n if (image instanceof Image && !image.crossOrigin) {\n image.crossOrigin = 'anonymous';\n }\n }\n tile.addEventListener(EventType.CHANGE, this.handleTileChange_);\n }\n }\n }\n\n uploadTile_() {\n const helper = this.helper_;\n const gl = helper.getGL();\n const tile = this.tile;\n\n if (tile instanceof ImageTile || tile instanceof ReprojTile) {\n const texture = gl.createTexture();\n this.textures.push(texture);\n this.bandCount = 4;\n uploadImageTexture(gl, texture, tile.getImage(), tile.interpolate);\n return;\n }\n\n const sourceTileSize = tile.getSize();\n const pixelSize = [\n sourceTileSize[0] + 2 * this.gutter_,\n sourceTileSize[1] + 2 * this.gutter_,\n ];\n const data = tile.getData();\n const isFloat = data instanceof Float32Array;\n const pixelCount = pixelSize[0] * pixelSize[1];\n const DataType = isFloat ? Float32Array : Uint8Array;\n const bytesPerElement = DataType.BYTES_PER_ELEMENT;\n const bytesPerRow = data.byteLength / pixelSize[1];\n\n this.bandCount = Math.floor(bytesPerRow / bytesPerElement / pixelSize[0]);\n const textureCount = Math.ceil(this.bandCount / 4);\n\n if (textureCount === 1) {\n const texture = gl.createTexture();\n this.textures.push(texture);\n uploadDataTexture(\n helper,\n texture,\n data,\n pixelSize,\n this.bandCount,\n tile.interpolate\n );\n return;\n }\n\n const textureDataArrays = new Array(textureCount);\n for (let textureIndex = 0; textureIndex < textureCount; ++textureIndex) {\n const texture = gl.createTexture();\n this.textures.push(texture);\n\n const bandCount =\n textureIndex < textureCount - 1 ? 4 : ((this.bandCount - 1) % 4) + 1;\n textureDataArrays[textureIndex] = new DataType(pixelCount * bandCount);\n }\n\n let dataIndex = 0;\n let rowOffset = 0;\n const colCount = pixelSize[0] * this.bandCount;\n for (let rowIndex = 0; rowIndex < pixelSize[1]; ++rowIndex) {\n for (let colIndex = 0; colIndex < colCount; ++colIndex) {\n const dataValue = data[rowOffset + colIndex];\n\n const pixelIndex = Math.floor(dataIndex / this.bandCount);\n const bandIndex = colIndex % this.bandCount;\n const textureIndex = Math.floor(bandIndex / 4);\n const textureData = textureDataArrays[textureIndex];\n const bandCount = textureData.length / pixelCount;\n const textureBandIndex = bandIndex % 4;\n textureData[pixelIndex * bandCount + textureBandIndex] = dataValue;\n\n ++dataIndex;\n }\n rowOffset += bytesPerRow / bytesPerElement;\n }\n\n for (let textureIndex = 0; textureIndex < textureCount; ++textureIndex) {\n const texture = this.textures[textureIndex];\n const textureData = textureDataArrays[textureIndex];\n const bandCount = textureData.length / pixelCount;\n uploadDataTexture(\n helper,\n texture,\n textureData,\n pixelSize,\n bandCount,\n tile.interpolate\n );\n }\n }\n\n handleTileChange_() {\n if (this.tile.getState() === TileState.LOADED) {\n this.loaded = true;\n this.uploadTile_();\n this.dispatchEvent(EventType.CHANGE);\n }\n }\n\n disposeInternal() {\n const gl = this.helper_.getGL();\n this.helper_.deleteBuffer(this.coords);\n for (let i = 0; i < this.textures.length; ++i) {\n gl.deleteTexture(this.textures[i]);\n }\n this.tile.removeEventListener(EventType.CHANGE, this.handleTileChange_);\n }\n\n /**\n * Get data for a pixel. If the tile is not loaded, null is returned.\n * @param {number} renderCol The column index (in rendered tile space).\n * @param {number} renderRow The row index (in rendered tile space).\n * @return {import(\"../DataTile.js\").Data|null} The data.\n */\n getPixelData(renderCol, renderRow) {\n if (!this.loaded) {\n return null;\n }\n const renderWidth = this.renderSize_[0];\n const renderHeight = this.renderSize_[1];\n const gutter = this.gutter_;\n\n if (this.tile instanceof DataTile) {\n const sourceSize = this.tile.getSize();\n\n const sourceWidthWithoutGutter = sourceSize[0];\n const sourceHeightWithoutGutter = sourceSize[1];\n const sourceWidth = sourceWidthWithoutGutter + 2 * gutter;\n const sourceHeight = sourceHeightWithoutGutter + 2 * gutter;\n\n const sourceCol =\n gutter +\n Math.floor(sourceWidthWithoutGutter * (renderCol / renderWidth));\n\n const sourceRow =\n gutter +\n Math.floor(sourceHeightWithoutGutter * (renderRow / renderHeight));\n\n const data = this.tile.getData();\n if (data instanceof DataView) {\n const bytesPerPixel = data.byteLength / (sourceWidth * sourceHeight);\n const offset = bytesPerPixel * (sourceRow * sourceWidth + sourceCol);\n const buffer = data.buffer.slice(offset, offset + bytesPerPixel);\n return new DataView(buffer);\n }\n\n const offset = this.bandCount * (sourceRow * sourceWidth + sourceCol);\n return data.slice(offset, offset + this.bandCount);\n }\n\n if (!pixelContext) {\n createPixelContext();\n }\n pixelContext.clearRect(0, 0, 1, 1);\n\n const image = this.tile.getImage();\n const sourceWidth = image.width;\n const sourceHeight = image.height;\n\n const sourceWidthWithoutGutter = sourceWidth - 2 * gutter;\n const sourceHeightWithoutGutter = sourceHeight - 2 * gutter;\n\n const sourceCol =\n gutter + Math.floor(sourceWidthWithoutGutter * (renderCol / renderWidth));\n\n const sourceRow =\n gutter +\n Math.floor(sourceHeightWithoutGutter * (renderRow / renderHeight));\n\n let data;\n try {\n pixelContext.drawImage(image, sourceCol, sourceRow, 1, 1, 0, 0, 1, 1);\n data = pixelContext.getImageData(0, 0, 1, 1).data;\n } catch (err) {\n pixelContext = null;\n return null;\n }\n return data;\n }\n}\n\nexport default TileTexture;\n","/**\n * @module ol/renderer/Layer\n */\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport {abstract} from '../util.js';\n\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nclass LayerRenderer extends Observable {\n /**\n * @param {LayerType} layer Layer.\n */\n constructor(layer) {\n super();\n\n /**\n * The renderer is initialized and ready to render.\n * @type {boolean}\n */\n this.ready = true;\n\n /** @private */\n this.boundHandleImageChange_ = this.handleImageChange_.bind(this);\n\n /**\n * @protected\n * @type {LayerType}\n */\n this.layer_ = layer;\n\n /**\n * @type {import(\"../render/canvas/ExecutorGroup\").default}\n */\n this.declutterExecutorGroup = null;\n }\n\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n return abstract();\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n return null;\n }\n\n /**\n * Determine whether render should be called.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n prepareFrame(frameState) {\n return abstract();\n }\n\n /**\n * Render the layer.\n * @abstract\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n renderFrame(frameState, target) {\n return abstract();\n }\n\n /**\n * @param {Object>} tiles Lookup of loaded tiles by zoom level.\n * @param {number} zoom Zoom level.\n * @param {import(\"../Tile.js\").default} tile Tile.\n * @return {boolean|void} If `false`, the tile will not be considered loaded.\n */\n loadedTileCallback(tiles, zoom, tile) {\n if (!tiles[zoom]) {\n tiles[zoom] = {};\n }\n tiles[zoom][tile.tileCoord.toString()] = tile;\n return undefined;\n }\n\n /**\n * Create a function that adds loaded tiles to the tile lookup.\n * @param {import(\"../source/Tile.js\").default} source Tile source.\n * @param {import(\"../proj/Projection.js\").default} projection Projection of the tiles.\n * @param {Object>} tiles Lookup of loaded tiles by zoom level.\n * @return {function(number, import(\"../TileRange.js\").default):boolean} A function that can be\n * called with a zoom level and a tile range to add loaded tiles to the lookup.\n * @protected\n */\n createLoadedTileFinder(source, projection, tiles) {\n return (\n /**\n * @param {number} zoom Zoom level.\n * @param {import(\"../TileRange.js\").default} tileRange Tile range.\n * @return {boolean} The tile range is fully loaded.\n * @this {LayerRenderer}\n */\n function (zoom, tileRange) {\n const callback = this.loadedTileCallback.bind(this, tiles, zoom);\n return source.forEachLoadedTile(projection, zoom, tileRange, callback);\n }.bind(this)\n );\n }\n /**\n * @abstract\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {Array>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n callback,\n matches\n ) {\n return undefined;\n }\n\n /**\n * @return {LayerType} Layer.\n */\n getLayer() {\n return this.layer_;\n }\n\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n * @abstract\n */\n handleFontsChanged() {}\n\n /**\n * Handle changes in image state.\n * @param {import(\"../events/Event.js\").default} event Image change event.\n * @private\n */\n handleImageChange_(event) {\n const image = /** @type {import(\"../Image.js\").default} */ (event.target);\n if (image.getState() === ImageState.LOADED) {\n this.renderIfReadyAndVisible();\n }\n }\n\n /**\n * Load the image if not already loaded, and register the image change\n * listener if needed.\n * @param {import(\"../ImageBase.js\").default} image Image.\n * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n * @protected\n */\n loadImage(image) {\n let imageState = image.getState();\n if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n }\n if (imageState == ImageState.IDLE) {\n image.load();\n imageState = image.getState();\n }\n return imageState == ImageState.LOADED;\n }\n\n /**\n * @protected\n */\n renderIfReadyAndVisible() {\n const layer = this.getLayer();\n if (layer && layer.getVisible() && layer.getSourceState() === 'ready') {\n layer.changed();\n }\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n delete this.layer_;\n super.disposeInternal();\n }\n}\n\nexport default LayerRenderer;\n","/**\n * @module ol/renderer/webgl/Layer\n */\nimport LayerProperty from '../../layer/Property.js';\nimport LayerRenderer from '../Layer.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport WebGLHelper from '../../webgl/Helper.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../../transform.js';\n\n/**\n * @typedef {Object} PostProcessesOptions\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas that will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} Options\n * @property {Object} [uniforms] Uniform definitions for the post process steps\n * @property {Array} [postProcesses] Post-processes definitions\n */\n\n/**\n * @classdesc\n * Base WebGL renderer class.\n * Holds all logic related to data manipulation & some common rendering logic\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n * @extends {LayerRenderer}\n */\nclass WebGLLayerRenderer extends LayerRenderer {\n /**\n * @param {LayerType} layer Layer.\n * @param {Options} [options] Options.\n */\n constructor(layer, options) {\n super(layer);\n\n options = options || {};\n\n /**\n * The transform for viewport CSS pixels to rendered pixels. This transform is only\n * set before dispatching rendering events.\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n this.inversePixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n this.pixelContext_ = null;\n\n /**\n * @private\n */\n this.postProcesses_ = options.postProcesses;\n\n /**\n * @private\n */\n this.uniforms_ = options.uniforms;\n\n /**\n * @type {WebGLHelper}\n * @protected\n */\n this.helper;\n\n layer.addChangeListener(LayerProperty.MAP, this.removeHelper.bind(this));\n\n this.dispatchPreComposeEvent = this.dispatchPreComposeEvent.bind(this);\n this.dispatchPostComposeEvent = this.dispatchPostComposeEvent.bind(this);\n }\n\n /**\n * @param {WebGLRenderingContext} context The WebGL rendering context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n dispatchPreComposeEvent(context, frameState) {\n const layer = this.getLayer();\n if (layer.hasListener(RenderEventType.PRECOMPOSE)) {\n const event = new RenderEvent(\n RenderEventType.PRECOMPOSE,\n undefined,\n frameState,\n context\n );\n layer.dispatchEvent(event);\n }\n }\n\n /**\n * @param {WebGLRenderingContext} context The WebGL rendering context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n dispatchPostComposeEvent(context, frameState) {\n const layer = this.getLayer();\n if (layer.hasListener(RenderEventType.POSTCOMPOSE)) {\n const event = new RenderEvent(\n RenderEventType.POSTCOMPOSE,\n undefined,\n frameState,\n context\n );\n layer.dispatchEvent(event);\n }\n }\n\n /**\n * Reset options (only handles uniforms).\n * @param {Options} options Options.\n */\n reset(options) {\n this.uniforms_ = options.uniforms;\n if (this.helper) {\n this.helper.setUniforms(this.uniforms_);\n }\n }\n\n /**\n * @protected\n */\n removeHelper() {\n if (this.helper) {\n this.helper.dispose();\n delete this.helper;\n }\n }\n\n /**\n * Determine whether renderFrame should be called.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n prepareFrame(frameState) {\n if (this.getLayer().getRenderSource()) {\n let incrementGroup = true;\n let groupNumber = -1;\n let className;\n for (let i = 0, ii = frameState.layerStatesArray.length; i < ii; i++) {\n const layer = frameState.layerStatesArray[i].layer;\n const renderer = layer.getRenderer();\n if (!(renderer instanceof WebGLLayerRenderer)) {\n incrementGroup = true;\n continue;\n }\n const layerClassName = layer.getClassName();\n if (incrementGroup || layerClassName !== className) {\n groupNumber += 1;\n incrementGroup = false;\n }\n className = layerClassName;\n if (renderer === this) {\n break;\n }\n }\n\n const canvasCacheKey =\n 'map/' + frameState.mapId + '/group/' + groupNumber;\n\n if (!this.helper || !this.helper.canvasCacheKeyMatches(canvasCacheKey)) {\n this.removeHelper();\n\n this.helper = new WebGLHelper({\n postProcesses: this.postProcesses_,\n uniforms: this.uniforms_,\n canvasCacheKey: canvasCacheKey,\n });\n\n if (className) {\n this.helper.getCanvas().className = className;\n }\n\n this.afterHelperCreated();\n }\n }\n\n return this.prepareFrameInternal(frameState);\n }\n\n /**\n * @protected\n */\n afterHelperCreated() {}\n\n /**\n * Determine whether renderFrame should be called.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n * @protected\n */\n prepareFrameInternal(frameState) {\n return true;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.removeHelper();\n super.disposeInternal();\n }\n\n /**\n * @param {import(\"../../render/EventType.js\").default} type Event type.\n * @param {WebGLRenderingContext} context The rendering context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @private\n */\n dispatchRenderEvent_(type, context, frameState) {\n const layer = this.getLayer();\n if (layer.hasListener(type)) {\n composeTransform(\n this.inversePixelTransform_,\n 0,\n 0,\n frameState.pixelRatio,\n -frameState.pixelRatio,\n 0,\n 0,\n -frameState.size[1]\n );\n\n const event = new RenderEvent(\n type,\n this.inversePixelTransform_,\n frameState,\n context\n );\n layer.dispatchEvent(event);\n }\n }\n\n /**\n * @param {WebGLRenderingContext} context The rendering context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n preRender(context, frameState) {\n this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n }\n\n /**\n * @param {WebGLRenderingContext} context The rendering context.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n postRender(context, frameState) {\n this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n }\n}\n\nexport default WebGLLayerRenderer;\n","/**\n * @module ol/renderer/webgl/TileLayer\n */\nimport LRUCache from '../../structs/LRUCache.js';\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport TileTexture from '../../webgl/TileTexture.js';\nimport WebGLArrayBuffer from '../../webgl/Buffer.js';\nimport WebGLLayerRenderer from './Layer.js';\nimport {AttributeType} from '../../webgl/Helper.js';\nimport {ELEMENT_ARRAY_BUFFER, STATIC_DRAW} from '../../webgl.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n reset as resetTransform,\n rotate as rotateTransform,\n scale as scaleTransform,\n translate as translateTransform,\n} from '../../transform.js';\nimport {\n boundingExtent,\n containsCoordinate,\n getIntersection,\n isEmpty,\n} from '../../extent.js';\nimport {\n create as createMat4,\n fromTransform as mat4FromTransform,\n} from '../../vec/mat4.js';\nimport {\n createOrUpdate as createTileCoord,\n getKey as getTileCoordKey,\n} from '../../tilecoord.js';\nimport {fromUserExtent} from '../../proj.js';\nimport {getUid} from '../../util.js';\nimport {numberSafeCompareFunction} from '../../array.js';\nimport {toSize} from '../../size.js';\n\nexport const Uniforms = {\n TILE_TEXTURE_ARRAY: 'u_tileTextures',\n TILE_TRANSFORM: 'u_tileTransform',\n TRANSITION_ALPHA: 'u_transitionAlpha',\n DEPTH: 'u_depth',\n TEXTURE_PIXEL_WIDTH: 'u_texturePixelWidth',\n TEXTURE_PIXEL_HEIGHT: 'u_texturePixelHeight',\n TEXTURE_RESOLUTION: 'u_textureResolution', // map units per texture pixel\n TEXTURE_ORIGIN_X: 'u_textureOriginX', // map x coordinate of left edge of texture\n TEXTURE_ORIGIN_Y: 'u_textureOriginY', // map y coordinate of top edge of texture\n RENDER_EXTENT: 'u_renderExtent', // intersection of layer, source, and view extent\n RESOLUTION: 'u_resolution',\n ZOOM: 'u_zoom',\n};\n\nexport const Attributes = {\n TEXTURE_COORD: 'a_textureCoord',\n};\n\n/**\n * @type {Array}\n */\nconst attributeDescriptions = [\n {\n name: Attributes.TEXTURE_COORD,\n size: 2,\n type: AttributeType.FLOAT,\n },\n];\n\n/**\n * @type {Object}\n */\nconst empty = {};\n\n/**\n * Transform a zoom level into a depth value ranging from -1 to 1.\n * @param {number} z A zoom level.\n * @return {number} A depth value.\n */\nfunction depthForZ(z) {\n return 2 * (1 - 1 / (z + 1)) - 1;\n}\n\n/**\n * Add a tile texture to the lookup.\n * @param {Object>} tileTexturesByZ Lookup of\n * tile textures by zoom level.\n * @param {import(\"../../webgl/TileTexture.js\").default} tileTexture A tile texture.\n * @param {number} z The zoom level.\n */\nfunction addTileTextureToLookup(tileTexturesByZ, tileTexture, z) {\n if (!(z in tileTexturesByZ)) {\n tileTexturesByZ[z] = [];\n }\n tileTexturesByZ[z].push(tileTexture);\n}\n\n/**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The frame extent.\n * @return {import(\"../../extent.js\").Extent} Frame extent intersected with layer extents.\n */\nfunction getRenderExtent(frameState, extent) {\n const layerState = frameState.layerStatesArray[frameState.layerIndex];\n if (layerState.extent) {\n extent = getIntersection(\n extent,\n fromUserExtent(layerState.extent, frameState.viewState.projection)\n );\n }\n const source = /** @type {import(\"../../source/Tile.js\").default} */ (\n layerState.layer.getRenderSource()\n );\n if (!source.getWrapX()) {\n const gridExtent = source\n .getTileGridForProjection(frameState.viewState.projection)\n .getExtent();\n if (gridExtent) {\n extent = getIntersection(extent, gridExtent);\n }\n }\n return extent;\n}\n\nfunction getCacheKey(source, tileCoord) {\n return `${source.getKey()},${getTileCoordKey(tileCoord)}`;\n}\n\n/**\n * @typedef {Object} Options\n * @property {string} vertexShader Vertex shader source.\n * @property {string} fragmentShader Fragment shader source.\n * @property {Object} [uniforms] Additional uniforms\n * made available to shaders.\n * @property {Array} [paletteTextures] Palette textures.\n * @property {number} [cacheSize=512] The texture cache size.\n */\n\n/**\n * @typedef {import(\"../../layer/WebGLTile.js\").default} LayerType\n */\n\n/**\n * @classdesc\n * WebGL renderer for tile layers.\n * @extends {WebGLLayerRenderer}\n * @api\n */\nclass WebGLTileLayerRenderer extends WebGLLayerRenderer {\n /**\n * @param {LayerType} tileLayer Tile layer.\n * @param {Options} options Options.\n */\n constructor(tileLayer, options) {\n super(tileLayer, {\n uniforms: options.uniforms,\n });\n\n /**\n * The last call to `renderFrame` was completed with all tiles loaded\n * @type {boolean}\n */\n this.renderComplete = false;\n\n /**\n * This transform converts texture coordinates to screen coordinates.\n * @type {import(\"../../transform.js\").Transform}\n * @private\n */\n this.tileTransform_ = createTransform();\n\n /**\n * @type {Array}\n * @private\n */\n this.tempMat4_ = createMat4();\n\n /**\n * @type {import(\"../../TileRange.js\").default}\n * @private\n */\n this.tempTileRange_ = new TileRange(0, 0, 0, 0);\n\n /**\n * @type {import(\"../../tilecoord.js\").TileCoord}\n * @private\n */\n this.tempTileCoord_ = createTileCoord(0, 0, 0);\n\n /**\n * @type {import(\"../../size.js\").Size}\n * @private\n */\n this.tempSize_ = [0, 0];\n\n /**\n * @type {WebGLProgram}\n * @private\n */\n this.program_;\n\n /**\n * @private\n */\n this.vertexShader_ = options.vertexShader;\n\n /**\n * @private\n */\n this.fragmentShader_ = options.fragmentShader;\n\n /**\n * Tiles are rendered as a quad with the following structure:\n *\n * [P3]---------[P2]\n * |` |\n * | ` B |\n * | ` |\n * | ` |\n * | A ` |\n * | ` |\n * [P0]---------[P1]\n *\n * Triangle A: P0, P1, P3\n * Triangle B: P1, P2, P3\n *\n * @private\n */\n this.indices_ = new WebGLArrayBuffer(ELEMENT_ARRAY_BUFFER, STATIC_DRAW);\n this.indices_.fromArray([0, 1, 3, 1, 2, 3]);\n\n const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 512;\n\n /**\n * @type {import(\"../../structs/LRUCache.js\").default}\n * @private\n */\n this.tileTextureCache_ = new LRUCache(cacheSize);\n\n /**\n * @type {Array}\n * @private\n */\n this.paletteTextures_ = options.paletteTextures || [];\n\n /**\n * @private\n * @type {import(\"../../Map.js\").FrameState|null}\n */\n this.frameState_ = null;\n }\n\n /**\n * @param {Options} options Options.\n */\n reset(options) {\n super.reset({\n uniforms: options.uniforms,\n });\n this.vertexShader_ = options.vertexShader;\n this.fragmentShader_ = options.fragmentShader;\n this.paletteTextures_ = options.paletteTextures || [];\n\n if (this.helper) {\n this.program_ = this.helper.getProgram(\n this.fragmentShader_,\n this.vertexShader_\n );\n }\n }\n\n afterHelperCreated() {\n this.program_ = this.helper.getProgram(\n this.fragmentShader_,\n this.vertexShader_\n );\n\n this.helper.flushBufferData(this.indices_);\n }\n\n /**\n * @param {import(\"../../webgl/TileTexture\").TileType} tile Tile.\n * @return {boolean} Tile is drawable.\n * @private\n */\n isDrawableTile_(tile) {\n const tileLayer = this.getLayer();\n const tileState = tile.getState();\n const useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();\n return (\n tileState == TileState.LOADED ||\n tileState == TileState.EMPTY ||\n (tileState == TileState.ERROR && !useInterimTilesOnError)\n );\n }\n\n /**\n * Determine whether renderFrame should be called.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n prepareFrameInternal(frameState) {\n const layer = this.getLayer();\n const source = layer.getRenderSource();\n if (!source) {\n return false;\n }\n\n if (isEmpty(getRenderExtent(frameState, frameState.extent))) {\n return false;\n }\n return source.getState() === 'ready';\n }\n\n /**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The extent to be rendered.\n * @param {number} initialZ The zoom level.\n * @param {Object>} tileTexturesByZ The zoom level.\n */\n enqueueTiles(frameState, extent, initialZ, tileTexturesByZ) {\n const viewState = frameState.viewState;\n const tileLayer = this.getLayer();\n const tileSource = tileLayer.getRenderSource();\n const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n const gutter = tileSource.getGutterForProjection(viewState.projection);\n\n const tileSourceKey = getUid(tileSource);\n if (!(tileSourceKey in frameState.wantedTiles)) {\n frameState.wantedTiles[tileSourceKey] = {};\n }\n\n const wantedTiles = frameState.wantedTiles[tileSourceKey];\n\n const tileTextureCache = this.tileTextureCache_;\n const minZ = Math.max(\n initialZ - tileLayer.getPreload(),\n tileGrid.getMinZoom(),\n tileLayer.getMinZoom()\n );\n for (let z = initialZ; z >= minZ; --z) {\n const tileRange = tileGrid.getTileRangeForExtentAndZ(\n extent,\n z,\n this.tempTileRange_\n );\n\n const tileResolution = tileGrid.getResolution(z);\n\n for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n const tileCoord = createTileCoord(z, x, y, this.tempTileCoord_);\n const cacheKey = getCacheKey(tileSource, tileCoord);\n\n /** @type {TileTexture} */\n let tileTexture;\n\n /** @type {import(\"../../webgl/TileTexture\").TileType} */\n let tile;\n\n if (tileTextureCache.containsKey(cacheKey)) {\n tileTexture = tileTextureCache.get(cacheKey);\n tile = tileTexture.tile;\n }\n if (!tileTexture || tileTexture.tile.key !== tileSource.getKey()) {\n tile = tileSource.getTile(\n z,\n x,\n y,\n frameState.pixelRatio,\n viewState.projection\n );\n if (!tileTexture) {\n tileTexture = new TileTexture({\n tile: tile,\n grid: tileGrid,\n helper: this.helper,\n gutter: gutter,\n });\n tileTextureCache.set(cacheKey, tileTexture);\n } else {\n if (this.isDrawableTile_(tile)) {\n tileTexture.setTile(tile);\n } else {\n const interimTile =\n /** @type {import(\"../../webgl/TileTexture\").TileType} */ (\n tile.getInterimTile()\n );\n tileTexture.setTile(interimTile);\n }\n }\n }\n\n addTileTextureToLookup(tileTexturesByZ, tileTexture, z);\n\n const tileQueueKey = tile.getKey();\n wantedTiles[tileQueueKey] = true;\n\n if (tile.getState() === TileState.IDLE) {\n if (!frameState.tileQueue.isKeyQueued(tileQueueKey)) {\n frameState.tileQueue.enqueue([\n tile,\n tileSourceKey,\n tileGrid.getTileCoordCenter(tileCoord),\n tileResolution,\n ]);\n }\n }\n }\n }\n }\n }\n\n /**\n * Render the layer.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @return {HTMLElement} The rendered element.\n */\n renderFrame(frameState) {\n this.frameState_ = frameState;\n this.renderComplete = true;\n const gl = this.helper.getGL();\n this.preRender(gl, frameState);\n\n const viewState = frameState.viewState;\n const tileLayer = this.getLayer();\n const tileSource = tileLayer.getRenderSource();\n const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n const gutter = tileSource.getGutterForProjection(viewState.projection);\n const extent = getRenderExtent(frameState, frameState.extent);\n const z = tileGrid.getZForResolution(\n viewState.resolution,\n tileSource.zDirection\n );\n\n /**\n * @type {Object>}\n */\n const tileTexturesByZ = {};\n\n if (frameState.nextExtent) {\n const targetZ = tileGrid.getZForResolution(\n viewState.nextResolution,\n tileSource.zDirection\n );\n const nextExtent = getRenderExtent(frameState, frameState.nextExtent);\n this.enqueueTiles(frameState, nextExtent, targetZ, tileTexturesByZ);\n }\n\n this.enqueueTiles(frameState, extent, z, tileTexturesByZ);\n\n /**\n * A lookup of alpha values for tiles at the target rendering resolution\n * for tiles that are in transition. If a tile coord key is absent from\n * this lookup, the tile should be rendered at alpha 1.\n * @type {Object}\n */\n const alphaLookup = {};\n\n const uid = getUid(this);\n const time = frameState.time;\n let blend = false;\n\n // look for cached tiles to use if a target tile is not ready\n const tileTextures = tileTexturesByZ[z];\n for (let i = 0, ii = tileTextures.length; i < ii; ++i) {\n const tileTexture = tileTextures[i];\n const tile = tileTexture.tile;\n const tileCoord = tile.tileCoord;\n\n if (tileTexture.loaded) {\n const alpha = tile.getAlpha(uid, time);\n if (alpha === 1) {\n // no need to look for alt tiles\n tile.endTransition(uid);\n continue;\n }\n blend = true;\n const tileCoordKey = getTileCoordKey(tileCoord);\n alphaLookup[tileCoordKey] = alpha;\n }\n this.renderComplete = false;\n\n // first look for child tiles (at z + 1)\n const coveredByChildren = this.findAltTiles_(\n tileGrid,\n tileCoord,\n z + 1,\n tileTexturesByZ\n );\n\n if (coveredByChildren) {\n continue;\n }\n\n // next look for parent tiles\n const minZoom = tileGrid.getMinZoom();\n for (let parentZ = z - 1; parentZ >= minZoom; --parentZ) {\n const coveredByParent = this.findAltTiles_(\n tileGrid,\n tileCoord,\n parentZ,\n tileTexturesByZ\n );\n\n if (coveredByParent) {\n break;\n }\n }\n }\n\n this.helper.useProgram(this.program_, frameState);\n this.helper.prepareDraw(frameState, !blend);\n\n const zs = Object.keys(tileTexturesByZ)\n .map(Number)\n .sort(numberSafeCompareFunction);\n\n const centerX = viewState.center[0];\n const centerY = viewState.center[1];\n\n for (let j = 0, jj = zs.length; j < jj; ++j) {\n const tileZ = zs[j];\n const tileResolution = tileGrid.getResolution(tileZ);\n const tileSize = toSize(tileGrid.getTileSize(tileZ), this.tempSize_);\n const tileOrigin = tileGrid.getOrigin(tileZ);\n\n const tileWidthWithGutter = tileSize[0] + 2 * gutter;\n const tileHeightWithGutter = tileSize[1] + 2 * gutter;\n const aspectRatio = tileWidthWithGutter / tileHeightWithGutter;\n\n const centerI =\n (centerX - tileOrigin[0]) / (tileSize[0] * tileResolution);\n const centerJ =\n (tileOrigin[1] - centerY) / (tileSize[1] * tileResolution);\n\n const tileScale = viewState.resolution / tileResolution;\n\n const depth = depthForZ(tileZ);\n const tileTextures = tileTexturesByZ[tileZ];\n for (let i = 0, ii = tileTextures.length; i < ii; ++i) {\n const tileTexture = tileTextures[i];\n if (!tileTexture.loaded) {\n continue;\n }\n const tile = tileTexture.tile;\n const tileCoord = tile.tileCoord;\n const tileCoordKey = getTileCoordKey(tileCoord);\n\n const tileCenterI = tileCoord[1];\n const tileCenterJ = tileCoord[2];\n\n resetTransform(this.tileTransform_);\n scaleTransform(\n this.tileTransform_,\n 2 / ((frameState.size[0] * tileScale) / tileWidthWithGutter),\n -2 / ((frameState.size[1] * tileScale) / tileWidthWithGutter)\n );\n rotateTransform(this.tileTransform_, viewState.rotation);\n scaleTransform(this.tileTransform_, 1, 1 / aspectRatio);\n translateTransform(\n this.tileTransform_,\n (tileSize[0] * (tileCenterI - centerI) - gutter) /\n tileWidthWithGutter,\n (tileSize[1] * (tileCenterJ - centerJ) - gutter) /\n tileHeightWithGutter\n );\n\n this.helper.setUniformMatrixValue(\n Uniforms.TILE_TRANSFORM,\n mat4FromTransform(this.tempMat4_, this.tileTransform_)\n );\n\n this.helper.bindBuffer(tileTexture.coords);\n this.helper.bindBuffer(this.indices_);\n this.helper.enableAttributes(attributeDescriptions);\n\n let textureSlot = 0;\n while (textureSlot < tileTexture.textures.length) {\n const textureProperty = 'TEXTURE' + textureSlot;\n const uniformName = `${Uniforms.TILE_TEXTURE_ARRAY}[${textureSlot}]`;\n gl.activeTexture(gl[textureProperty]);\n gl.bindTexture(gl.TEXTURE_2D, tileTexture.textures[textureSlot]);\n gl.uniform1i(\n this.helper.getUniformLocation(uniformName),\n textureSlot\n );\n ++textureSlot;\n }\n\n for (\n let paletteIndex = 0;\n paletteIndex < this.paletteTextures_.length;\n ++paletteIndex\n ) {\n const paletteTexture = this.paletteTextures_[paletteIndex];\n gl.activeTexture(gl['TEXTURE' + textureSlot]);\n const texture = paletteTexture.getTexture(gl);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.uniform1i(\n this.helper.getUniformLocation(paletteTexture.name),\n textureSlot\n );\n ++textureSlot;\n }\n\n const alpha =\n tileCoordKey in alphaLookup ? alphaLookup[tileCoordKey] : 1;\n\n if (alpha < 1) {\n frameState.animate = true;\n }\n\n this.helper.setUniformFloatValue(Uniforms.TRANSITION_ALPHA, alpha);\n this.helper.setUniformFloatValue(Uniforms.DEPTH, depth);\n this.helper.setUniformFloatValue(\n Uniforms.TEXTURE_PIXEL_WIDTH,\n tileWidthWithGutter\n );\n this.helper.setUniformFloatValue(\n Uniforms.TEXTURE_PIXEL_HEIGHT,\n tileHeightWithGutter\n );\n this.helper.setUniformFloatValue(\n Uniforms.TEXTURE_RESOLUTION,\n tileResolution\n );\n this.helper.setUniformFloatValue(\n Uniforms.TEXTURE_ORIGIN_X,\n tileOrigin[0] +\n tileCenterI * tileSize[0] * tileResolution -\n gutter * tileResolution\n );\n this.helper.setUniformFloatValue(\n Uniforms.TEXTURE_ORIGIN_Y,\n tileOrigin[1] -\n tileCenterJ * tileSize[1] * tileResolution +\n gutter * tileResolution\n );\n let gutterExtent = extent;\n if (gutter > 0) {\n gutterExtent = tileGrid.getTileCoordExtent(tileCoord);\n getIntersection(gutterExtent, extent, gutterExtent);\n }\n this.helper.setUniformFloatVec4(Uniforms.RENDER_EXTENT, gutterExtent);\n this.helper.setUniformFloatValue(\n Uniforms.RESOLUTION,\n viewState.resolution\n );\n this.helper.setUniformFloatValue(Uniforms.ZOOM, viewState.zoom);\n\n this.helper.drawElements(0, this.indices_.getSize());\n }\n }\n\n this.helper.finalizeDraw(\n frameState,\n this.dispatchPreComposeEvent,\n this.dispatchPostComposeEvent\n );\n\n const canvas = this.helper.getCanvas();\n\n const tileTextureCache = this.tileTextureCache_;\n while (tileTextureCache.canExpireCache()) {\n const tileTexture = tileTextureCache.pop();\n tileTexture.dispose();\n }\n\n // TODO: let the renderers manage their own cache instead of managing the source cache\n /**\n * Here we unconditionally expire the source cache since the renderer maintains\n * its own cache.\n * @param {import(\"../../Map.js\").default} map Map.\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n */\n const postRenderFunction = function (map, frameState) {\n tileSource.updateCacheSize(0.1, frameState.viewState.projection);\n tileSource.expireCache(frameState.viewState.projection, empty);\n };\n\n frameState.postRenderFunctions.push(postRenderFunction);\n\n this.postRender(gl, frameState);\n return canvas;\n }\n\n /**\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView} Data at the pixel location.\n */\n getData(pixel) {\n const gl = this.helper.getGL();\n if (!gl) {\n return null;\n }\n\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n\n const layer = this.getLayer();\n const coordinate = applyTransform(\n frameState.pixelToCoordinateTransform,\n pixel.slice()\n );\n\n const viewState = frameState.viewState;\n const layerExtent = layer.getExtent();\n if (layerExtent) {\n if (\n !containsCoordinate(\n fromUserExtent(layerExtent, viewState.projection),\n coordinate\n )\n ) {\n return null;\n }\n }\n\n // determine last source suitable for rendering at coordinate\n const sources = layer.getSources(\n boundingExtent([coordinate]),\n viewState.resolution\n );\n let i, source, tileGrid;\n for (i = sources.length - 1; i >= 0; --i) {\n source = sources[i];\n if (source.getState() === 'ready') {\n tileGrid = source.getTileGridForProjection(viewState.projection);\n if (source.getWrapX()) {\n break;\n }\n const gridExtent = tileGrid.getExtent();\n if (!gridExtent || containsCoordinate(gridExtent, coordinate)) {\n break;\n }\n }\n }\n if (i < 0) {\n return null;\n }\n\n const tileTextureCache = this.tileTextureCache_;\n for (\n let z = tileGrid.getZForResolution(viewState.resolution);\n z >= tileGrid.getMinZoom();\n --z\n ) {\n const tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);\n const cacheKey = getCacheKey(source, tileCoord);\n if (!tileTextureCache.containsKey(cacheKey)) {\n continue;\n }\n const tileTexture = tileTextureCache.get(cacheKey);\n if (!tileTexture.loaded) {\n continue;\n }\n const tileOrigin = tileGrid.getOrigin(z);\n const tileSize = toSize(tileGrid.getTileSize(z));\n const tileResolution = tileGrid.getResolution(z);\n\n const col =\n (coordinate[0] - tileOrigin[0]) / tileResolution -\n tileCoord[1] * tileSize[0];\n\n const row =\n (tileOrigin[1] - coordinate[1]) / tileResolution -\n tileCoord[2] * tileSize[1];\n\n return tileTexture.getPixelData(col, row);\n }\n return null;\n }\n\n /**\n * Look for tiles covering the provided tile coordinate at an alternate\n * zoom level. Loaded tiles will be added to the provided tile texture lookup.\n * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid The tile grid.\n * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n * @param {number} altZ The alternate zoom level.\n * @param {Object>} tileTexturesByZ Lookup of\n * tile textures by zoom level.\n * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n * @private\n */\n findAltTiles_(tileGrid, tileCoord, altZ, tileTexturesByZ) {\n const tileRange = tileGrid.getTileRangeForTileCoordAndZ(\n tileCoord,\n altZ,\n this.tempTileRange_\n );\n\n if (!tileRange) {\n return false;\n }\n\n let covered = true;\n const tileTextureCache = this.tileTextureCache_;\n const source = this.getLayer().getRenderSource();\n for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n const cacheKey = getCacheKey(source, [altZ, x, y]);\n let loaded = false;\n if (tileTextureCache.containsKey(cacheKey)) {\n const tileTexture = tileTextureCache.get(cacheKey);\n if (tileTexture.loaded) {\n addTileTextureToLookup(tileTexturesByZ, tileTexture, altZ);\n loaded = true;\n }\n }\n if (!loaded) {\n covered = false;\n }\n }\n }\n return covered;\n }\n\n removeHelper() {\n if (this.helper) {\n const tileTextureCache = this.tileTextureCache_;\n tileTextureCache.forEach((tileTexture) => tileTexture.dispose());\n tileTextureCache.clear();\n }\n\n super.removeHelper();\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n const helper = this.helper;\n if (helper) {\n const gl = helper.getGL();\n gl.deleteProgram(this.program_);\n delete this.program_;\n\n helper.deleteBuffer(this.indices_);\n }\n\n super.disposeInternal();\n\n delete this.indices_;\n delete this.tileTextureCache_;\n delete this.frameState_;\n }\n}\n\nexport default WebGLTileLayerRenderer;\n","/**\n * Operators and utilities used for style expressions\n * @module ol/style/expressions\n */\n\nimport PaletteTexture from '../webgl/PaletteTexture.js';\nimport {Uniforms} from '../renderer/webgl/TileLayer.js';\nimport {asArray, fromString, isStringColor} from '../color.js';\n\n/**\n * Base type used for literal style parameters; can be a number literal or the output of an operator,\n * which in turns takes {@link import(\"./expressions.js\").ExpressionValue} arguments.\n *\n * The following operators can be used:\n *\n * * Reading operators:\n * * `['band', bandIndex, xOffset, yOffset]` For tile layers only. Fetches pixel values from band\n * `bandIndex` of the source's data. The first `bandIndex` of the source data is `1`. Fetched values\n * are in the 0..1 range. {@link import(\"../source/TileImage.js\").default} sources have 4 bands: red,\n * green, blue and alpha. {@link import(\"../source/DataTile.js\").default} sources can have any number\n * of bands, depending on the underlying data source and\n * {@link import(\"../source/GeoTIFF.js\").Options configuration}. `xOffset` and `yOffset` are optional\n * and allow specifying pixel offsets for x and y. This is used for sampling data from neighboring pixels.\n * * `['get', 'attributeName']` fetches a feature attribute (it will be prefixed by `a_` in the shader)\n * Note: those will be taken from the attributes provided to the renderer\n * * `['resolution']` returns the current resolution\n * * `['time']` returns the time in seconds since the creation of the layer\n * * `['var', 'varName']` fetches a value from the style variables, or 0 if undefined\n * * `['zoom']` returns the current zoom level\n *\n * * Math operators:\n * * `['*', value1, value2]` multiplies `value1` by `value2`\n * * `['/', value1, value2]` divides `value1` by `value2`\n * * `['+', value1, value2]` adds `value1` and `value2`\n * * `['-', value1, value2]` subtracts `value2` from `value1`\n * * `['clamp', value, low, high]` clamps `value` between `low` and `high`\n * * `['%', value1, value2]` returns the result of `value1 % value2` (modulo)\n * * `['^', value1, value2]` returns the value of `value1` raised to the `value2` power\n * * `['abs', value1]` returns the absolute value of `value1`\n * * `['floor', value1]` returns the nearest integer less than or equal to `value1`\n * * `['round', value1]` returns the nearest integer to `value1`\n * * `['ceil', value1]` returns the nearest integer greater than or equal to `value1`\n * * `['sin', value1]` returns the sine of `value1`\n * * `['cos', value1]` returns the cosine of `value1`\n * * `['atan', value1, value2]` returns `atan2(value1, value2)`. If `value2` is not provided, returns `atan(value1)`\n *\n * * Transform operators:\n * * `['case', condition1, output1, ...conditionN, outputN, fallback]` selects the first output whose corresponding\n * condition evaluates to `true`. If no match is found, returns the `fallback` value.\n * All conditions should be `boolean`, output and fallback can be any kind.\n * * `['match', input, match1, output1, ...matchN, outputN, fallback]` compares the `input` value against all\n * provided `matchX` values, returning the output associated with the first valid match. If no match is found,\n * returns the `fallback` value.\n * `input` and `matchX` values must all be of the same type, and can be `number` or `string`. `outputX` and\n * `fallback` values must be of the same type, and can be of any kind.\n * * `['interpolate', interpolation, input, stop1, output1, ...stopN, outputN]` returns a value by interpolating between\n * pairs of inputs and outputs; `interpolation` can either be `['linear']` or `['exponential', base]` where `base` is\n * the rate of increase from stop A to stop B (i.e. power to which the interpolation ratio is raised); a value\n * of 1 is equivalent to `['linear']`.\n * `input` and `stopX` values must all be of type `number`. `outputX` values can be `number` or `color` values.\n * Note: `input` will be clamped between `stop1` and `stopN`, meaning that all output values will be comprised\n * between `output1` and `outputN`.\n *\n * * Logical operators:\n * * `['<', value1, value2]` returns `true` if `value1` is strictly lower than `value2`, or `false` otherwise.\n * * `['<=', value1, value2]` returns `true` if `value1` is lower than or equals `value2`, or `false` otherwise.\n * * `['>', value1, value2]` returns `true` if `value1` is strictly greater than `value2`, or `false` otherwise.\n * * `['>=', value1, value2]` returns `true` if `value1` is greater than or equals `value2`, or `false` otherwise.\n * * `['==', value1, value2]` returns `true` if `value1` equals `value2`, or `false` otherwise.\n * * `['!=', value1, value2]` returns `true` if `value1` does not equal `value2`, or `false` otherwise.\n * * `['!', value1]` returns `false` if `value1` is `true` or greater than `0`, or `true` otherwise.\n * * `['all', value1, value2, ...]` returns `true` if all the inputs are `true`, `false` otherwise.\n * * `['any', value1, value2, ...]` returns `true` if any of the inputs are `true`, `false` otherwise.\n * * `['between', value1, value2, value3]` returns `true` if `value1` is contained between `value2` and `value3`\n * (inclusively), or `false` otherwise.\n *\n * * Conversion operators:\n * * `['array', value1, ...valueN]` creates a numerical array from `number` values; please note that the amount of\n * values can currently only be 2, 3 or 4.\n * * `['color', red, green, blue, alpha]` creates a `color` value from `number` values; the `alpha` parameter is\n * optional; if not specified, it will be set to 1.\n * Note: `red`, `green` and `blue` components must be values between 0 and 255; `alpha` between 0 and 1.\n * * `['palette', index, colors]` picks a `color` value from an array of colors using the given index; the `index`\n * expression must evaluate to a number; the items in the `colors` array must be strings with hex colors\n * (e.g. `'#86A136'`), colors using the rgba[a] functional notation (e.g. `'rgb(134, 161, 54)'` or `'rgba(134, 161, 54, 1)'`),\n * named colors (e.g. `'red'`), or array literals with 3 ([r, g, b]) or 4 ([r, g, b, a]) values (with r, g, and b\n * in the 0-255 range and a in the 0-1 range).\n *\n * Values can either be literals or another operator, as they will be evaluated recursively.\n * Literal values can be of the following types:\n * * `boolean`\n * * `number`\n * * `string`\n * * {@link module:ol/color~Color}\n *\n * @typedef {Array<*>|import(\"../color.js\").Color|string|number|boolean} ExpressionValue\n * @api\n */\n\n/**\n * Possible inferred types from a given value or expression.\n * Note: these are binary flags.\n * @enum {number}\n */\nexport const ValueTypes = {\n NUMBER: 0b00001,\n STRING: 0b00010,\n COLOR: 0b00100,\n BOOLEAN: 0b01000,\n NUMBER_ARRAY: 0b10000,\n ANY: 0b11111,\n NONE: 0,\n};\n\n/**\n * An operator declaration must contain two methods: `getReturnType` which returns a type based on\n * the operator arguments, and `toGlsl` which returns a GLSL-compatible string.\n * Note: both methods can process arguments recursively.\n * @typedef {Object} Operator\n * @property {function(Array): ValueTypes|number} getReturnType Returns one or several types\n * @property {function(ParsingContext, Array, ValueTypes=): string} toGlsl Returns a GLSL-compatible string\n * Note: takes in an optional type hint as 3rd parameter\n */\n\n/**\n * Operator declarations\n * @type {Object}\n */\nexport const Operators = {};\n\n/**\n * Returns the possible types for a given value (each type being a binary flag)\n * To test a value use e.g. `getValueType(v) & ValueTypes.BOOLEAN`\n * @param {ExpressionValue} value Value\n * @return {ValueTypes|number} Type or types inferred from the value\n */\nexport function getValueType(value) {\n if (typeof value === 'number') {\n return ValueTypes.NUMBER;\n }\n if (typeof value === 'boolean') {\n return ValueTypes.BOOLEAN;\n }\n if (typeof value === 'string') {\n if (isStringColor(value)) {\n return ValueTypes.COLOR | ValueTypes.STRING;\n }\n return ValueTypes.STRING;\n }\n if (!Array.isArray(value)) {\n throw new Error(`Unhandled value type: ${JSON.stringify(value)}`);\n }\n const valueArr = /** @type {Array<*>} */ (value);\n const onlyNumbers = valueArr.every(function (v) {\n return typeof v === 'number';\n });\n if (onlyNumbers) {\n if (valueArr.length === 3 || valueArr.length === 4) {\n return ValueTypes.COLOR | ValueTypes.NUMBER_ARRAY;\n }\n return ValueTypes.NUMBER_ARRAY;\n }\n if (typeof valueArr[0] !== 'string') {\n throw new Error(\n `Expected an expression operator but received: ${JSON.stringify(\n valueArr\n )}`\n );\n }\n const operator = Operators[valueArr[0]];\n if (operator === undefined) {\n throw new Error(\n `Unrecognized expression operator: ${JSON.stringify(valueArr)}`\n );\n }\n return operator.getReturnType(valueArr.slice(1));\n}\n\n/**\n * Checks if only one value type is enabled in the input number.\n * @param {ValueTypes|number} valueType Number containing value type binary flags\n * @return {boolean} True if only one type flag is enabled, false if zero or multiple\n */\nexport function isTypeUnique(valueType) {\n return Math.log2(valueType) % 1 === 0;\n}\n\n/**\n * Context available during the parsing of an expression.\n * @typedef {Object} ParsingContext\n * @property {boolean} [inFragmentShader] If false, means the expression output should be made for a vertex shader\n * @property {Array} variables List of variables used in the expression; contains **unprefixed names**\n * @property {Array} attributes List of attributes used in the expression; contains **unprefixed names**\n * @property {Object} stringLiteralsMap This object maps all encountered string values to a number\n * @property {Object} functions Lookup of functions used by the style.\n * @property {number} [bandCount] Number of bands per pixel.\n * @property {Array} [paletteTextures] List of palettes used by the style.\n */\n\n/**\n * Will return the number as a float with a dot separator, which is required by GLSL.\n * @param {number} v Numerical value.\n * @return {string} The value as string.\n */\nexport function numberToGlsl(v) {\n const s = v.toString();\n return s.includes('.') ? s : s + '.0';\n}\n\n/**\n * Will return the number array as a float with a dot separator, concatenated with ', '.\n * @param {Array} array Numerical values array.\n * @return {string} The array as a vector, e. g.: `vec3(1.0, 2.0, 3.0)`.\n */\nexport function arrayToGlsl(array) {\n if (array.length < 2 || array.length > 4) {\n throw new Error(\n '`formatArray` can only output `vec2`, `vec3` or `vec4` arrays.'\n );\n }\n return `vec${array.length}(${array.map(numberToGlsl).join(', ')})`;\n}\n\n/**\n * Will normalize and converts to string a `vec4` color array compatible with GLSL.\n * @param {string|import(\"../color.js\").Color} color Color either in string format or [r, g, b, a] array format,\n * with RGB components in the 0..255 range and the alpha component in the 0..1 range.\n * Note that the final array will always have 4 components.\n * @return {string} The color expressed in the `vec4(1.0, 1.0, 1.0, 1.0)` form.\n */\nexport function colorToGlsl(color) {\n const array = asArray(color).slice();\n if (array.length < 4) {\n array.push(1);\n }\n return arrayToGlsl(\n array.map(function (c, i) {\n return i < 3 ? c / 255 : c;\n })\n );\n}\n\n/**\n * Returns a stable equivalent number for the string literal.\n * @param {ParsingContext} context Parsing context\n * @param {string} string String literal value\n * @return {number} Number equivalent\n */\nexport function getStringNumberEquivalent(context, string) {\n if (context.stringLiteralsMap[string] === undefined) {\n context.stringLiteralsMap[string] = Object.keys(\n context.stringLiteralsMap\n ).length;\n }\n return context.stringLiteralsMap[string];\n}\n\n/**\n * Returns a stable equivalent number for the string literal, for use in shaders. This number is then\n * converted to be a GLSL-compatible string.\n * @param {ParsingContext} context Parsing context\n * @param {string} string String literal value\n * @return {string} GLSL-compatible string containing a number\n */\nexport function stringToGlsl(context, string) {\n return numberToGlsl(getStringNumberEquivalent(context, string));\n}\n\n/**\n * Recursively parses a style expression and outputs a GLSL-compatible string. Takes in a parsing context that\n * will be read and modified during the parsing operation.\n * @param {ParsingContext} context Parsing context\n * @param {ExpressionValue} value Value\n * @param {ValueTypes|number} [typeHint] Hint for the expected final type (can be several types combined)\n * @return {string} GLSL-compatible output\n */\nexport function expressionToGlsl(context, value, typeHint) {\n // operator\n if (Array.isArray(value) && typeof value[0] === 'string') {\n const operator = Operators[value[0]];\n if (operator === undefined) {\n throw new Error(\n `Unrecognized expression operator: ${JSON.stringify(value)}`\n );\n }\n return operator.toGlsl(context, value.slice(1), typeHint);\n }\n\n const valueType = getValueType(value);\n if ((valueType & ValueTypes.NUMBER) > 0) {\n return numberToGlsl(/** @type {number} */ (value));\n }\n\n if ((valueType & ValueTypes.BOOLEAN) > 0) {\n return value.toString();\n }\n\n if (\n (valueType & ValueTypes.STRING) > 0 &&\n (typeHint === undefined || typeHint == ValueTypes.STRING)\n ) {\n return stringToGlsl(context, value.toString());\n }\n\n if (\n (valueType & ValueTypes.COLOR) > 0 &&\n (typeHint === undefined || typeHint == ValueTypes.COLOR)\n ) {\n return colorToGlsl(/** @type {Array | string} */ (value));\n }\n\n if ((valueType & ValueTypes.NUMBER_ARRAY) > 0) {\n return arrayToGlsl(/** @type {Array} */ (value));\n }\n\n throw new Error(`Unexpected expression ${value} (expected type ${typeHint})`);\n}\n\nfunction assertNumber(value) {\n if (!(getValueType(value) & ValueTypes.NUMBER)) {\n throw new Error(\n `A numeric value was expected, got ${JSON.stringify(value)} instead`\n );\n }\n}\nfunction assertNumbers(values) {\n for (let i = 0; i < values.length; i++) {\n assertNumber(values[i]);\n }\n}\nfunction assertString(value) {\n if (!(getValueType(value) & ValueTypes.STRING)) {\n throw new Error(\n `A string value was expected, got ${JSON.stringify(value)} instead`\n );\n }\n}\nfunction assertBoolean(value) {\n if (!(getValueType(value) & ValueTypes.BOOLEAN)) {\n throw new Error(\n `A boolean value was expected, got ${JSON.stringify(value)} instead`\n );\n }\n}\nfunction assertArgsCount(args, count) {\n if (args.length !== count) {\n throw new Error(\n `Exactly ${count} arguments were expected, got ${args.length} instead`\n );\n }\n}\nfunction assertArgsMinCount(args, count) {\n if (args.length < count) {\n throw new Error(\n `At least ${count} arguments were expected, got ${args.length} instead`\n );\n }\n}\nfunction assertArgsMaxCount(args, count) {\n if (args.length > count) {\n throw new Error(\n `At most ${count} arguments were expected, got ${args.length} instead`\n );\n }\n}\nfunction assertArgsEven(args) {\n if (args.length % 2 !== 0) {\n throw new Error(\n `An even amount of arguments was expected, got ${args} instead`\n );\n }\n}\nfunction assertArgsOdd(args) {\n if (args.length % 2 === 0) {\n throw new Error(\n `An odd amount of arguments was expected, got ${args} instead`\n );\n }\n}\nfunction assertUniqueInferredType(args, types) {\n if (!isTypeUnique(types)) {\n throw new Error(\n `Could not infer only one type from the following expression: ${JSON.stringify(\n args\n )}`\n );\n }\n}\n\nOperators['get'] = {\n getReturnType: function (args) {\n return ValueTypes.ANY;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertString(args[0]);\n const value = args[0].toString();\n if (!context.attributes.includes(value)) {\n context.attributes.push(value);\n }\n const prefix = context.inFragmentShader ? 'v_' : 'a_';\n return prefix + value;\n },\n};\n\n/**\n * Get the uniform name given a variable name.\n * @param {string} variableName The variable name.\n * @return {string} The uniform name.\n */\nexport function uniformNameForVariable(variableName) {\n return 'u_var_' + variableName;\n}\n\nOperators['var'] = {\n getReturnType: function (args) {\n return ValueTypes.ANY;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertString(args[0]);\n const value = args[0].toString();\n if (!context.variables.includes(value)) {\n context.variables.push(value);\n }\n return uniformNameForVariable(value);\n },\n};\n\nexport const PALETTE_TEXTURE_ARRAY = 'u_paletteTextures';\n\n// ['palette', index, colors]\nOperators['palette'] = {\n getReturnType: function (args) {\n return ValueTypes.COLOR;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumber(args[0]);\n const index = expressionToGlsl(context, args[0]);\n const colors = args[1];\n if (!Array.isArray(colors)) {\n throw new Error('The second argument of palette must be an array');\n }\n const numColors = colors.length;\n const palette = new Uint8Array(numColors * 4);\n for (let i = 0; i < numColors; i++) {\n const candidate = colors[i];\n /**\n * @type {import('../color.js').Color}\n */\n let color;\n if (typeof candidate === 'string') {\n color = fromString(candidate);\n } else {\n if (!Array.isArray(candidate)) {\n throw new Error(\n 'The second argument of palette must be an array of strings or colors'\n );\n }\n const length = candidate.length;\n if (length === 4) {\n color = candidate;\n } else {\n if (length !== 3) {\n throw new Error(\n `Expected palette color to have 3 or 4 values, got ${length}`\n );\n }\n color = [candidate[0], candidate[1], candidate[2], 1];\n }\n }\n const offset = i * 4;\n palette[offset] = color[0];\n palette[offset + 1] = color[1];\n palette[offset + 2] = color[2];\n palette[offset + 3] = color[3] * 255;\n }\n if (!context.paletteTextures) {\n context.paletteTextures = [];\n }\n const paletteName = `${PALETTE_TEXTURE_ARRAY}[${context.paletteTextures.length}]`;\n const paletteTexture = new PaletteTexture(paletteName, palette);\n context.paletteTextures.push(paletteTexture);\n return `texture2D(${paletteName}, vec2((${index} + 0.5) / ${numColors}.0, 0.5))`;\n },\n};\n\nconst GET_BAND_VALUE_FUNC = 'getBandValue';\n\nOperators['band'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsMinCount(args, 1);\n assertArgsMaxCount(args, 3);\n const band = args[0];\n\n if (!(GET_BAND_VALUE_FUNC in context.functions)) {\n let ifBlocks = '';\n const bandCount = context.bandCount || 1;\n for (let i = 0; i < bandCount; i++) {\n const colorIndex = Math.floor(i / 4);\n let bandIndex = i % 4;\n if (i === bandCount - 1 && bandIndex === 1) {\n // LUMINANCE_ALPHA - band 1 assigned to rgb and band 2 assigned to alpha\n bandIndex = 3;\n }\n const textureName = `${Uniforms.TILE_TEXTURE_ARRAY}[${colorIndex}]`;\n ifBlocks += `\n if (band == ${i + 1}.0) {\n return texture2D(${textureName}, v_textureCoord + vec2(dx, dy))[${bandIndex}];\n }\n `;\n }\n\n context.functions[GET_BAND_VALUE_FUNC] = `\n float getBandValue(float band, float xOffset, float yOffset) {\n float dx = xOffset / ${Uniforms.TEXTURE_PIXEL_WIDTH};\n float dy = yOffset / ${Uniforms.TEXTURE_PIXEL_HEIGHT};\n ${ifBlocks}\n }\n `;\n }\n\n const bandExpression = expressionToGlsl(context, band);\n const xOffsetExpression = expressionToGlsl(context, args[1] || 0);\n const yOffsetExpression = expressionToGlsl(context, args[2] || 0);\n return `${GET_BAND_VALUE_FUNC}(${bandExpression}, ${xOffsetExpression}, ${yOffsetExpression})`;\n },\n};\n\nOperators['time'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 0);\n return 'u_time';\n },\n};\n\nOperators['zoom'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 0);\n return 'u_zoom';\n },\n};\n\nOperators['resolution'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 0);\n return 'u_resolution';\n },\n};\n\nOperators['*'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} * ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['/'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} / ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['+'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} + ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['-'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} - ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['clamp'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 3);\n assertNumbers(args);\n const min = expressionToGlsl(context, args[1]);\n const max = expressionToGlsl(context, args[2]);\n return `clamp(${expressionToGlsl(context, args[0])}, ${min}, ${max})`;\n },\n};\n\nOperators['%'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `mod(${expressionToGlsl(context, args[0])}, ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['^'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `pow(${expressionToGlsl(context, args[0])}, ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['abs'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `abs(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['floor'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `floor(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['round'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `floor(${expressionToGlsl(context, args[0])} + 0.5)`;\n },\n};\n\nOperators['ceil'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `ceil(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['sin'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `sin(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['cos'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertNumbers(args);\n return `cos(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['atan'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER;\n },\n toGlsl: function (context, args) {\n assertArgsMinCount(args, 1);\n assertArgsMaxCount(args, 2);\n assertNumbers(args);\n return args.length === 2\n ? `atan(${expressionToGlsl(context, args[0])}, ${expressionToGlsl(\n context,\n args[1]\n )})`\n : `atan(${expressionToGlsl(context, args[0])})`;\n },\n};\n\nOperators['>'] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} > ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['>='] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} >= ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['<'] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} < ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nOperators['<='] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n assertNumbers(args);\n return `(${expressionToGlsl(context, args[0])} <= ${expressionToGlsl(\n context,\n args[1]\n )})`;\n },\n};\n\nfunction getEqualOperator(operator) {\n return {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 2);\n\n // find common type\n let type = ValueTypes.ANY;\n for (let i = 0; i < args.length; i++) {\n type &= getValueType(args[i]);\n }\n if (type === ValueTypes.NONE) {\n throw new Error(\n `All arguments should be of compatible type, got ${JSON.stringify(\n args\n )} instead`\n );\n }\n\n // Since it's not possible to have color types here, we can leave it out\n // This fixes issues in case the value type is ambiguously detected as a color (e.g. the string 'red')\n type &= ~ValueTypes.COLOR;\n\n return `(${expressionToGlsl(\n context,\n args[0],\n type\n )} ${operator} ${expressionToGlsl(context, args[1], type)})`;\n },\n };\n}\n\nOperators['=='] = getEqualOperator('==');\n\nOperators['!='] = getEqualOperator('!=');\n\nOperators['!'] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 1);\n assertBoolean(args[0]);\n return `(!${expressionToGlsl(context, args[0])})`;\n },\n};\n\nfunction getDecisionOperator(operator) {\n return {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsMinCount(args, 2);\n for (let i = 0; i < args.length; i++) {\n assertBoolean(args[i]);\n }\n let result = '';\n result = args\n .map((arg) => expressionToGlsl(context, arg))\n .join(` ${operator} `);\n result = `(${result})`;\n return result;\n },\n };\n}\n\nOperators['all'] = getDecisionOperator('&&');\n\nOperators['any'] = getDecisionOperator('||');\n\nOperators['between'] = {\n getReturnType: function (args) {\n return ValueTypes.BOOLEAN;\n },\n toGlsl: function (context, args) {\n assertArgsCount(args, 3);\n assertNumbers(args);\n const min = expressionToGlsl(context, args[1]);\n const max = expressionToGlsl(context, args[2]);\n const value = expressionToGlsl(context, args[0]);\n return `(${value} >= ${min} && ${value} <= ${max})`;\n },\n};\n\nOperators['array'] = {\n getReturnType: function (args) {\n return ValueTypes.NUMBER_ARRAY;\n },\n toGlsl: function (context, args) {\n assertArgsMinCount(args, 2);\n assertArgsMaxCount(args, 4);\n assertNumbers(args);\n const parsedArgs = args.map(function (val) {\n return expressionToGlsl(context, val, ValueTypes.NUMBER);\n });\n return `vec${args.length}(${parsedArgs.join(', ')})`;\n },\n};\n\nOperators['color'] = {\n getReturnType: function (args) {\n return ValueTypes.COLOR;\n },\n toGlsl: function (context, args) {\n assertArgsMinCount(args, 3);\n assertArgsMaxCount(args, 4);\n assertNumbers(args);\n const array = /** @type {Array} */ (args);\n if (args.length === 3) {\n array.push(1);\n }\n const parsedArgs = args.map(function (val, i) {\n return (\n expressionToGlsl(context, val, ValueTypes.NUMBER) +\n (i < 3 ? ' / 255.0' : '')\n );\n });\n return `vec${args.length}(${parsedArgs.join(', ')})`;\n },\n};\n\nOperators['interpolate'] = {\n getReturnType: function (args) {\n let type = ValueTypes.COLOR | ValueTypes.NUMBER;\n for (let i = 3; i < args.length; i += 2) {\n type = type & getValueType(args[i]);\n }\n return type;\n },\n toGlsl: function (context, args, typeHint) {\n assertArgsEven(args);\n assertArgsMinCount(args, 6);\n\n // validate interpolation type\n const type = args[0];\n let interpolation;\n switch (type[0]) {\n case 'linear':\n interpolation = 1;\n break;\n case 'exponential':\n interpolation = type[1];\n break;\n default:\n interpolation = null;\n }\n if (!interpolation) {\n throw new Error(\n `Invalid interpolation type for \"interpolate\" operator, received: ${JSON.stringify(\n type\n )}`\n );\n }\n\n // compute input/output types\n typeHint = typeHint !== undefined ? typeHint : ValueTypes.ANY;\n const outputType = Operators['interpolate'].getReturnType(args) & typeHint;\n assertUniqueInferredType(args, outputType);\n\n const input = expressionToGlsl(context, args[1]);\n const exponent = numberToGlsl(interpolation);\n\n let result = '';\n for (let i = 2; i < args.length - 2; i += 2) {\n const stop1 = expressionToGlsl(context, args[i]);\n const output1 =\n result || expressionToGlsl(context, args[i + 1], outputType);\n const stop2 = expressionToGlsl(context, args[i + 2]);\n const output2 = expressionToGlsl(context, args[i + 3], outputType);\n result = `mix(${output1}, ${output2}, pow(clamp((${input} - ${stop1}) / (${stop2} - ${stop1}), 0.0, 1.0), ${exponent}))`;\n }\n return result;\n },\n};\n\nOperators['match'] = {\n getReturnType: function (args) {\n let type = ValueTypes.ANY;\n for (let i = 2; i < args.length; i += 2) {\n type = type & getValueType(args[i]);\n }\n type = type & getValueType(args[args.length - 1]);\n return type;\n },\n toGlsl: function (context, args, typeHint) {\n assertArgsEven(args);\n assertArgsMinCount(args, 4);\n\n typeHint = typeHint !== undefined ? typeHint : ValueTypes.ANY;\n const outputType = Operators['match'].getReturnType(args) & typeHint;\n assertUniqueInferredType(args, outputType);\n\n const input = expressionToGlsl(context, args[0]);\n const fallback = expressionToGlsl(\n context,\n args[args.length - 1],\n outputType\n );\n let result = null;\n for (let i = args.length - 3; i >= 1; i -= 2) {\n const match = expressionToGlsl(context, args[i]);\n const output = expressionToGlsl(context, args[i + 1], outputType);\n result = `(${input} == ${match} ? ${output} : ${result || fallback})`;\n }\n return result;\n },\n};\n\nOperators['case'] = {\n getReturnType: function (args) {\n let type = ValueTypes.ANY;\n for (let i = 1; i < args.length; i += 2) {\n type = type & getValueType(args[i]);\n }\n type = type & getValueType(args[args.length - 1]);\n return type;\n },\n toGlsl: function (context, args, typeHint) {\n assertArgsOdd(args);\n assertArgsMinCount(args, 3);\n\n typeHint = typeHint !== undefined ? typeHint : ValueTypes.ANY;\n const outputType = Operators['case'].getReturnType(args) & typeHint;\n assertUniqueInferredType(args, outputType);\n for (let i = 0; i < args.length - 1; i += 2) {\n assertBoolean(args[i]);\n }\n\n const fallback = expressionToGlsl(\n context,\n args[args.length - 1],\n outputType\n );\n let result = null;\n for (let i = args.length - 3; i >= 0; i -= 2) {\n const condition = expressionToGlsl(context, args[i]);\n const output = expressionToGlsl(context, args[i + 1], outputType);\n result = `(${condition} ? ${output} : ${result || fallback})`;\n }\n return result;\n },\n};\n","/**\n * Classes and utilities for generating shaders from literal style objects\n * @module ol/webgl/ShaderBuilder\n */\n\nimport {\n ValueTypes,\n expressionToGlsl,\n getStringNumberEquivalent,\n uniformNameForVariable,\n} from '../style/expressions.js';\n\n/**\n * @typedef {Object} VaryingDescription\n * @property {string} name Varying name, as will be declared in the header.\n * @property {string} type Varying type, either `float`, `vec2`, `vec4`...\n * @property {string} expression Expression which will be assigned to the varying in the vertex shader, and\n * passed on to the fragment shader.\n */\n\n/**\n * @classdesc\n * This class implements a classic builder pattern for generating many different types of shaders.\n * Methods can be chained, e. g.:\n *\n * ```js\n * const shader = new ShaderBuilder()\n * .addVarying('v_width', 'float', 'a_width')\n * .addUniform('u_time')\n * .setColorExpression('...')\n * .setSizeExpression('...')\n * .outputSymbolFragmentShader();\n * ```\n */\nexport class ShaderBuilder {\n constructor() {\n /**\n * Uniforms; these will be declared in the header (should include the type).\n * @type {Array}\n * @private\n */\n this.uniforms = [];\n\n /**\n * Attributes; these will be declared in the header (should include the type).\n * @type {Array}\n * @private\n */\n this.attributes = [];\n\n /**\n * Varyings with a name, a type and an expression.\n * @type {Array}\n * @private\n */\n this.varyings = [];\n\n /**\n * @type {string}\n * @private\n */\n this.sizeExpression = 'vec2(1.0)';\n\n /**\n * @type {string}\n * @private\n */\n this.rotationExpression = '0.0';\n\n /**\n * @type {string}\n * @private\n */\n this.offsetExpression = 'vec2(0.0)';\n\n /**\n * @type {string}\n * @private\n */\n this.colorExpression = 'vec4(1.0)';\n\n /**\n * @type {string}\n * @private\n */\n this.texCoordExpression = 'vec4(0.0, 0.0, 1.0, 1.0)';\n\n /**\n * @type {string}\n * @private\n */\n this.discardExpression = 'false';\n\n /**\n * @type {boolean}\n * @private\n */\n this.rotateWithView = false;\n }\n\n /**\n * Adds a uniform accessible in both fragment and vertex shaders.\n * The given name should include a type, such as `sampler2D u_texture`.\n * @param {string} name Uniform name\n * @return {ShaderBuilder} the builder object\n */\n addUniform(name) {\n this.uniforms.push(name);\n return this;\n }\n\n /**\n * Adds an attribute accessible in the vertex shader, read from the geometry buffer.\n * The given name should include a type, such as `vec2 a_position`.\n * @param {string} name Attribute name\n * @return {ShaderBuilder} the builder object\n */\n addAttribute(name) {\n this.attributes.push(name);\n return this;\n }\n\n /**\n * Adds a varying defined in the vertex shader and accessible from the fragment shader.\n * The type and expression of the varying have to be specified separately.\n * @param {string} name Varying name\n * @param {'float'|'vec2'|'vec3'|'vec4'} type Type\n * @param {string} expression Expression used to assign a value to the varying.\n * @return {ShaderBuilder} the builder object\n */\n addVarying(name, type, expression) {\n this.varyings.push({\n name: name,\n type: type,\n expression: expression,\n });\n return this;\n }\n\n /**\n * Sets an expression to compute the size of the shape.\n * This expression can use all the uniforms and attributes available\n * in the vertex shader, and should evaluate to a `vec2` value.\n * @param {string} expression Size expression\n * @return {ShaderBuilder} the builder object\n */\n setSizeExpression(expression) {\n this.sizeExpression = expression;\n return this;\n }\n\n /**\n * Sets an expression to compute the rotation of the shape.\n * This expression can use all the uniforms and attributes available\n * in the vertex shader, and should evaluate to a `float` value in radians.\n * @param {string} expression Size expression\n * @return {ShaderBuilder} the builder object\n */\n setRotationExpression(expression) {\n this.rotationExpression = expression;\n return this;\n }\n\n /**\n * Sets an expression to compute the offset of the symbol from the point center.\n * This expression can use all the uniforms and attributes available\n * in the vertex shader, and should evaluate to a `vec2` value.\n * Note: will only be used for point geometry shaders.\n * @param {string} expression Offset expression\n * @return {ShaderBuilder} the builder object\n */\n setSymbolOffsetExpression(expression) {\n this.offsetExpression = expression;\n return this;\n }\n\n /**\n * Sets an expression to compute the color of the shape.\n * This expression can use all the uniforms, varyings and attributes available\n * in the fragment shader, and should evaluate to a `vec4` value.\n * @param {string} expression Color expression\n * @return {ShaderBuilder} the builder object\n */\n setColorExpression(expression) {\n this.colorExpression = expression;\n return this;\n }\n\n /**\n * Sets an expression to compute the texture coordinates of the vertices.\n * This expression can use all the uniforms and attributes available\n * in the vertex shader, and should evaluate to a `vec4` value.\n * @param {string} expression Texture coordinate expression\n * @return {ShaderBuilder} the builder object\n */\n setTextureCoordinateExpression(expression) {\n this.texCoordExpression = expression;\n return this;\n }\n\n /**\n * Sets an expression to determine whether a fragment (pixel) should be discarded,\n * i.e. not drawn at all.\n * This expression can use all the uniforms, varyings and attributes available\n * in the fragment shader, and should evaluate to a `bool` value (it will be\n * used in an `if` statement)\n * @param {string} expression Fragment discard expression\n * @return {ShaderBuilder} the builder object\n */\n setFragmentDiscardExpression(expression) {\n this.discardExpression = expression;\n return this;\n }\n\n /**\n * Sets whether the symbols should rotate with the view or stay aligned with the map.\n * Note: will only be used for point geometry shaders.\n * @param {boolean} rotateWithView Rotate with view\n * @return {ShaderBuilder} the builder object\n */\n setSymbolRotateWithView(rotateWithView) {\n this.rotateWithView = rotateWithView;\n return this;\n }\n\n /**\n * @return {string} Previously set size expression\n */\n getSizeExpression() {\n return this.sizeExpression;\n }\n\n /**\n * @return {string} Previously set symbol offset expression\n */\n getOffsetExpression() {\n return this.offsetExpression;\n }\n\n /**\n * @return {string} Previously set color expression\n */\n getColorExpression() {\n return this.colorExpression;\n }\n\n /**\n * @return {string} Previously set texture coordinate expression\n */\n getTextureCoordinateExpression() {\n return this.texCoordExpression;\n }\n\n /**\n * @return {string} Previously set fragment discard expression\n */\n getFragmentDiscardExpression() {\n return this.discardExpression;\n }\n\n /**\n * Generates a symbol vertex shader from the builder parameters,\n * intended to be used on point geometries.\n *\n * Three uniforms are hardcoded in all shaders: `u_projectionMatrix`, `u_offsetScaleMatrix`,\n * `u_offsetRotateMatrix`, `u_time`.\n *\n * The following attributes are hardcoded and expected to be present in the vertex buffers:\n * `vec2 a_position`, `float a_index` (being the index of the vertex in the quad, 0 to 3).\n *\n * The following varyings are hardcoded and gives the coordinate of the pixel both in the quad and on the texture:\n * `vec2 v_quadCoord`, `vec2 v_texCoord`\n *\n * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables\n * (namely, hit color with encoded feature id).\n * @return {string} The full shader as a string.\n */\n getSymbolVertexShader(forHitDetection) {\n const offsetMatrix = this.rotateWithView\n ? 'u_offsetScaleMatrix * u_offsetRotateMatrix'\n : 'u_offsetScaleMatrix';\n\n let attributes = this.attributes;\n let varyings = this.varyings;\n\n if (forHitDetection) {\n attributes = attributes.concat('vec4 a_hitColor');\n varyings = varyings.concat({\n name: 'v_hitColor',\n type: 'vec4',\n expression: 'a_hitColor',\n });\n }\n\n return `precision mediump float;\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms\n .map(function (uniform) {\n return 'uniform ' + uniform + ';';\n })\n .join('\\n')}\nattribute vec2 a_position;\nattribute float a_index;\n${attributes\n .map(function (attribute) {\n return 'attribute ' + attribute + ';';\n })\n .join('\\n')}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${varyings\n .map(function (varying) {\n return 'varying ' + varying.type + ' ' + varying.name + ';';\n })\n .join('\\n')}\nvoid main(void) {\n mat4 offsetMatrix = ${offsetMatrix};\n vec2 halfSize = ${this.sizeExpression} * 0.5;\n vec2 offset = ${this.offsetExpression};\n float angle = ${this.rotationExpression};\n float offsetX;\n float offsetY;\n if (a_index == 0.0) {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n } else if (a_index == 1.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else if (a_index == 2.0) {\n offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n } else {\n offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n }\n vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n vec4 texCoord = ${this.texCoordExpression};\n float u = a_index == 0.0 || a_index == 3.0 ? texCoord.s : texCoord.p;\n float v = a_index == 2.0 || a_index == 3.0 ? texCoord.t : texCoord.q;\n v_texCoord = vec2(u, v);\n u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n v = a_index == 2.0 || a_index == 3.0 ? 0.0 : 1.0;\n v_quadCoord = vec2(u, v);\n${varyings\n .map(function (varying) {\n return ' ' + varying.name + ' = ' + varying.expression + ';';\n })\n .join('\\n')}\n}`;\n }\n\n /**\n * Generates a symbol fragment shader from the builder parameters,\n * intended to be used on point geometries.\n *\n * Expects the following varyings to be transmitted by the vertex shader:\n * `vec2 v_quadCoord`, `vec2 v_texCoord`\n *\n * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables\n * (namely, hit color with encoded feature id).\n * @return {string} The full shader as a string.\n */\n getSymbolFragmentShader(forHitDetection) {\n const hitDetectionBypass = forHitDetection\n ? ' if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;'\n : '';\n\n let varyings = this.varyings;\n\n if (forHitDetection) {\n varyings = varyings.concat({\n name: 'v_hitColor',\n type: 'vec4',\n expression: 'a_hitColor',\n });\n }\n\n return `precision mediump float;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n${this.uniforms\n .map(function (uniform) {\n return 'uniform ' + uniform + ';';\n })\n .join('\\n')}\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n${varyings\n .map(function (varying) {\n return 'varying ' + varying.type + ' ' + varying.name + ';';\n })\n .join('\\n')}\nvoid main(void) {\n if (${this.discardExpression}) { discard; }\n gl_FragColor = ${this.colorExpression};\n gl_FragColor.rgb *= gl_FragColor.a;\n${hitDetectionBypass}\n}`;\n }\n}\n\n/**\n * @typedef {Object} StyleParseResult\n * @property {ShaderBuilder} builder Shader builder pre-configured according to a given style\n * @property {Object} uniforms Uniform definitions.\n * @property {Array} attributes Attribute descriptions.\n */\n\n/**\n * Parses a {@link import(\"../style/literal\").LiteralStyle} object and returns a {@link ShaderBuilder}\n * object that has been configured according to the given style, as well as `attributes` and `uniforms`\n * arrays to be fed to the `WebGLPointsRenderer` class.\n *\n * Also returns `uniforms` and `attributes` properties as expected by the\n * {@link module:ol/renderer/webgl/PointsLayer~WebGLPointsLayerRenderer}.\n *\n * @param {import(\"../style/literal\").LiteralStyle} style Literal style.\n * @return {StyleParseResult} Result containing shader params, attributes and uniforms.\n */\nexport function parseLiteralStyle(style) {\n const symbStyle = style.symbol;\n const size = symbStyle.size !== undefined ? symbStyle.size : 1;\n const color = symbStyle.color || 'white';\n const texCoord = symbStyle.textureCoord || [0, 0, 1, 1];\n const offset = symbStyle.offset || [0, 0];\n const opacity = symbStyle.opacity !== undefined ? symbStyle.opacity : 1;\n const rotation = symbStyle.rotation !== undefined ? symbStyle.rotation : 0;\n\n /**\n * @type {import(\"../style/expressions.js\").ParsingContext}\n */\n const vertContext = {\n inFragmentShader: false,\n variables: [],\n attributes: [],\n stringLiteralsMap: {},\n functions: {},\n };\n const parsedSize = expressionToGlsl(\n vertContext,\n size,\n ValueTypes.NUMBER_ARRAY | ValueTypes.NUMBER\n );\n const parsedOffset = expressionToGlsl(\n vertContext,\n offset,\n ValueTypes.NUMBER_ARRAY\n );\n const parsedTexCoord = expressionToGlsl(\n vertContext,\n texCoord,\n ValueTypes.NUMBER_ARRAY\n );\n const parsedRotation = expressionToGlsl(\n vertContext,\n rotation,\n ValueTypes.NUMBER\n );\n\n /**\n * @type {import(\"../style/expressions.js\").ParsingContext}\n */\n const fragContext = {\n inFragmentShader: true,\n variables: vertContext.variables,\n attributes: [],\n stringLiteralsMap: vertContext.stringLiteralsMap,\n functions: {},\n };\n const parsedColor = expressionToGlsl(fragContext, color, ValueTypes.COLOR);\n const parsedOpacity = expressionToGlsl(\n fragContext,\n opacity,\n ValueTypes.NUMBER\n );\n\n let opacityFilter = '1.0';\n const visibleSize = `vec2(${expressionToGlsl(\n fragContext,\n size,\n ValueTypes.NUMBER_ARRAY | ValueTypes.NUMBER\n )}).x`;\n switch (symbStyle.symbolType) {\n case 'square':\n break;\n case 'image':\n break;\n // taken from https://thebookofshaders.com/07/\n case 'circle':\n opacityFilter = `(1.0-smoothstep(1.-4./${visibleSize},1.,dot(v_quadCoord-.5,v_quadCoord-.5)*4.))`;\n break;\n case 'triangle':\n const st = '(v_quadCoord*2.-1.)';\n const a = `(atan(${st}.x,${st}.y))`;\n opacityFilter = `(1.0-smoothstep(.5-3./${visibleSize},.5,cos(floor(.5+${a}/2.094395102)*2.094395102-${a})*length(${st})))`;\n break;\n\n default:\n throw new Error('Unexpected symbol type: ' + symbStyle.symbolType);\n }\n\n const builder = new ShaderBuilder()\n .setSizeExpression(`vec2(${parsedSize})`)\n .setRotationExpression(parsedRotation)\n .setSymbolOffsetExpression(parsedOffset)\n .setTextureCoordinateExpression(parsedTexCoord)\n .setSymbolRotateWithView(!!symbStyle.rotateWithView)\n .setColorExpression(\n `vec4(${parsedColor}.rgb, ${parsedColor}.a * ${parsedOpacity} * ${opacityFilter})`\n );\n\n if (style.filter) {\n const parsedFilter = expressionToGlsl(\n fragContext,\n style.filter,\n ValueTypes.BOOLEAN\n );\n builder.setFragmentDiscardExpression(`!${parsedFilter}`);\n }\n\n /** @type {Object} */\n const uniforms = {};\n\n // define one uniform per variable\n fragContext.variables.forEach(function (varName) {\n const uniformName = uniformNameForVariable(varName);\n builder.addUniform(`float ${uniformName}`);\n uniforms[uniformName] = function () {\n if (!style.variables || style.variables[varName] === undefined) {\n throw new Error(\n `The following variable is missing from the style: ${varName}`\n );\n }\n let value = style.variables[varName];\n if (typeof value === 'string') {\n value = getStringNumberEquivalent(vertContext, value);\n }\n return value !== undefined ? value : -9999999; // to avoid matching with the first string literal\n };\n });\n\n if (symbStyle.symbolType === 'image' && symbStyle.src) {\n const texture = new Image();\n texture.crossOrigin =\n symbStyle.crossOrigin === undefined ? 'anonymous' : symbStyle.crossOrigin;\n texture.src = symbStyle.src;\n builder\n .addUniform('sampler2D u_texture')\n .setColorExpression(\n builder.getColorExpression() + ' * texture2D(u_texture, v_texCoord)'\n );\n uniforms['u_texture'] = texture;\n }\n\n // for each feature attribute used in the fragment shader, define a varying that will be used to pass data\n // from the vertex to the fragment shader, as well as an attribute in the vertex shader (if not already present)\n fragContext.attributes.forEach(function (attrName) {\n if (!vertContext.attributes.includes(attrName)) {\n vertContext.attributes.push(attrName);\n }\n builder.addVarying(`v_${attrName}`, 'float', `a_${attrName}`);\n });\n\n // for each feature attribute used in the vertex shader, define an attribute in the vertex shader.\n vertContext.attributes.forEach(function (attrName) {\n builder.addAttribute(`float a_${attrName}`);\n });\n\n return {\n builder: builder,\n attributes: vertContext.attributes.map(function (attributeName) {\n return {\n name: attributeName,\n callback: function (feature, props) {\n let value = props[attributeName];\n if (typeof value === 'string') {\n value = getStringNumberEquivalent(vertContext, value);\n }\n return value !== undefined ? value : -9999999; // to avoid matching with the first string literal\n },\n };\n }),\n uniforms: uniforms,\n };\n}\n","/**\n * @module ol/tilegrid/WMTS\n */\n\nimport TileGrid from './TileGrid.js';\nimport {get as getProjection} from '../proj.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles\n * outside this extent will be requested by {@link module:ol/source/Tile~TileSource} sources.\n * When no `origin` or `origins` are configured, the `origin` will be set to the\n * top-left corner of the extent.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e.\n * where the `x` and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left\n * to right and downwards. If not specified, `extent` or `origins` must be provided.\n * @property {Array} [origins] Tile grid origins,\n * i.e. where the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If\n * given, the array length should match the length of the `resolutions` array, i.e.\n * each resolution can have a different origin. Tile coordinates increase left to\n * right and downwards. If not specified, `extent` or `origin` must be provided.\n * @property {!Array} resolutions Resolutions. The array index of each\n * resolution needs to match the zoom level. This means that even if a `minZoom`\n * is configured, the resolutions array will have a length of `maxZoom + 1`\n * @property {!Array} matrixIds matrix IDs. The length of this array needs\n * to match the length of the `resolutions` array.\n * @property {Array} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. The values here are the `TileMatrixWidth` and\n * `TileMatrixHeight` advertised in the GetCapabilities response of the WMTS, and\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent for\n * which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * @property {Array} [tileSizes] Tile sizes. The length of\n * this array needs to match the length of the `resolutions` array.\n */\n\n/**\n * @classdesc\n * Set the grid pattern for sources accessing WMTS tiled-image servers.\n * @api\n */\nclass WMTSTileGrid extends TileGrid {\n /**\n * @param {Options} options WMTS options.\n */\n constructor(options) {\n super({\n extent: options.extent,\n origin: options.origin,\n origins: options.origins,\n resolutions: options.resolutions,\n tileSize: options.tileSize,\n tileSizes: options.tileSizes,\n sizes: options.sizes,\n });\n\n /**\n * @private\n * @type {!Array}\n */\n this.matrixIds_ = options.matrixIds;\n }\n\n /**\n * @param {number} z Z.\n * @return {string} MatrixId..\n */\n getMatrixId(z) {\n return this.matrixIds_[z];\n }\n\n /**\n * Get the list of matrix identifiers.\n * @return {Array} MatrixIds.\n * @api\n */\n getMatrixIds() {\n return this.matrixIds_;\n }\n}\n\nexport default WMTSTileGrid;\n\n/**\n * Create a tile grid from a WMTS capabilities matrix set and an\n * optional TileMatrixSetLimits.\n * @param {Object} matrixSet An object representing a matrixSet in the\n * capabilities document.\n * @param {import(\"../extent.js\").Extent} [extent] An optional extent to restrict the tile\n * ranges the server provides.\n * @param {Array} [matrixLimits] An optional object representing\n * the available matrices for tileGrid.\n * @return {WMTSTileGrid} WMTS tileGrid instance.\n * @api\n */\nexport function createFromCapabilitiesMatrixSet(\n matrixSet,\n extent,\n matrixLimits\n) {\n /** @type {!Array} */\n const resolutions = [];\n /** @type {!Array} */\n const matrixIds = [];\n /** @type {!Array} */\n const origins = [];\n /** @type {!Array} */\n const tileSizes = [];\n /** @type {!Array} */\n const sizes = [];\n\n matrixLimits = matrixLimits !== undefined ? matrixLimits : [];\n\n const supportedCRSPropName = 'SupportedCRS';\n const matrixIdsPropName = 'TileMatrix';\n const identifierPropName = 'Identifier';\n const scaleDenominatorPropName = 'ScaleDenominator';\n const topLeftCornerPropName = 'TopLeftCorner';\n const tileWidthPropName = 'TileWidth';\n const tileHeightPropName = 'TileHeight';\n\n const code = matrixSet[supportedCRSPropName];\n const projection = getProjection(code);\n const metersPerUnit = projection.getMetersPerUnit();\n // swap origin x and y coordinates if axis orientation is lat/long\n const switchOriginXY = projection.getAxisOrientation().substr(0, 2) == 'ne';\n\n matrixSet[matrixIdsPropName].sort(function (a, b) {\n return b[scaleDenominatorPropName] - a[scaleDenominatorPropName];\n });\n\n matrixSet[matrixIdsPropName].forEach(function (elt) {\n let matrixAvailable;\n // use of matrixLimits to filter TileMatrices from GetCapabilities\n // TileMatrixSet from unavailable matrix levels.\n if (matrixLimits.length > 0) {\n matrixAvailable = matrixLimits.find(function (elt_ml) {\n if (elt[identifierPropName] == elt_ml[matrixIdsPropName]) {\n return true;\n }\n // Fallback for tileMatrix identifiers that don't get prefixed\n // by their tileMatrixSet identifiers.\n if (!elt[identifierPropName].includes(':')) {\n return (\n matrixSet[identifierPropName] + ':' + elt[identifierPropName] ===\n elt_ml[matrixIdsPropName]\n );\n }\n return false;\n });\n } else {\n matrixAvailable = true;\n }\n\n if (matrixAvailable) {\n matrixIds.push(elt[identifierPropName]);\n const resolution =\n (elt[scaleDenominatorPropName] * 0.28e-3) / metersPerUnit;\n const tileWidth = elt[tileWidthPropName];\n const tileHeight = elt[tileHeightPropName];\n if (switchOriginXY) {\n origins.push([\n elt[topLeftCornerPropName][1],\n elt[topLeftCornerPropName][0],\n ]);\n } else {\n origins.push(elt[topLeftCornerPropName]);\n }\n resolutions.push(resolution);\n tileSizes.push(\n tileWidth == tileHeight ? tileWidth : [tileWidth, tileHeight]\n );\n sizes.push([elt['MatrixWidth'], elt['MatrixHeight']]);\n }\n });\n\n return new WMTSTileGrid({\n extent: extent,\n origins: origins,\n resolutions: resolutions,\n matrixIds: matrixIds,\n tileSizes: tileSizes,\n sizes: sizes,\n });\n}\n","/**\n * @module ol/style/Image\n */\nimport {abstract} from '../util.js';\nimport {toSize} from '../size.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} opacity Opacity.\n * @property {boolean} rotateWithView If the image should get rotated with the view.\n * @property {number} rotation Rotation.\n * @property {number|import(\"../size.js\").Size} scale Scale.\n * @property {Array} displacement Displacement.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} declutterMode Declutter mode: `declutter`, `obstacle`, 'none */\n\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nclass ImageStyle {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n /**\n * @private\n * @type {number}\n */\n this.opacity_ = options.opacity;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ = options.rotateWithView;\n\n /**\n * @private\n * @type {number}\n */\n this.rotation_ = options.rotation;\n\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.scale_ = options.scale;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale);\n\n /**\n * @private\n * @type {Array}\n */\n this.displacement_ = options.displacement;\n\n /**\n * @private\n * @type {\"declutter\"|\"obstacle\"|\"none\"|undefined}\n */\n this.declutterMode_ = options.declutterMode;\n }\n\n /**\n * Clones the style.\n * @return {ImageStyle} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n return new ImageStyle({\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n }\n\n /**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\n getOpacity() {\n return this.opacity_;\n }\n\n /**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\n getRotateWithView() {\n return this.rotateWithView_;\n }\n\n /**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\n getRotation() {\n return this.rotation_;\n }\n\n /**\n * Get the symbolizer scale.\n * @return {number|import(\"../size.js\").Size} Scale.\n * @api\n */\n getScale() {\n return this.scale_;\n }\n\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n getScaleArray() {\n return this.scaleArray_;\n }\n\n /**\n * Get the displacement of the shape\n * @return {Array} Shape's center displacement\n * @api\n */\n getDisplacement() {\n return this.displacement_;\n }\n\n /**\n * Get the declutter mode of the shape\n * @return {\"declutter\"|\"obstacle\"|\"none\"|undefined} Shape's declutter mode\n * @api\n */\n getDeclutterMode() {\n return this.declutterMode_;\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array} Anchor.\n */\n getAnchor() {\n return abstract();\n }\n\n /**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n getImage(pixelRatio) {\n return abstract();\n }\n\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n getHitDetectionImage() {\n return abstract();\n }\n\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n getPixelRatio(pixelRatio) {\n return 1;\n }\n\n /**\n * @abstract\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return abstract();\n }\n\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return abstract();\n }\n\n /**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array} Origin.\n */\n getOrigin() {\n return abstract();\n }\n\n /**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {import(\"../size.js\").Size} Size.\n */\n getSize() {\n return abstract();\n }\n\n /**\n * Set the displacement.\n *\n * @param {Array} displacement Displacement.\n * @api\n */\n setDisplacement(displacement) {\n this.displacement_ = displacement;\n }\n\n /**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\n setOpacity(opacity) {\n this.opacity_ = opacity;\n }\n\n /**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n setRotateWithView(rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n }\n\n /**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\n setRotation(rotation) {\n this.rotation_ = rotation;\n }\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size} scale Scale.\n * @api\n */\n setScale(scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale);\n }\n\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {\n abstract();\n }\n\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n load() {\n abstract();\n }\n\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {\n abstract();\n }\n}\n\nexport default ImageStyle;\n","/**\n * @module ol/style/RegularShape\n */\n\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport {asArray} from '../color.js';\nimport {asColorLike} from '../colorlike.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {\n defaultFillStyle,\n defaultLineJoin,\n defaultLineWidth,\n defaultMiterLimit,\n defaultStrokeStyle,\n} from '../render/canvas.js';\n\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] First radius of a star. Ignored if radius is set.\n * @property {number} [radius2] Second radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's points facing up.\n * @property {Array} [displacement=[0, 0]] Displacement of the shape in pixels.\n * Positive values will shift the shape right and up.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode.\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {Array|null} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} miterLimit MiterLimit.\n */\n\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nclass RegularShape extends ImageStyle {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n /**\n * @type {boolean}\n */\n const rotateWithView =\n options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n super({\n opacity: 1,\n rotateWithView: rotateWithView,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n scale: options.scale !== undefined ? options.scale : 1,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n });\n\n /**\n * @private\n * @type {Object}\n */\n this.canvas_ = undefined;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.hitDetectionCanvas_ = null;\n\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n this.fill_ = options.fill !== undefined ? options.fill : null;\n\n /**\n * @private\n * @type {Array}\n */\n this.origin_ = [0, 0];\n\n /**\n * @private\n * @type {number}\n */\n this.points_ = options.points;\n\n /**\n * @protected\n * @type {number}\n */\n this.radius_ =\n options.radius !== undefined ? options.radius : options.radius1;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.radius2_ = options.radius2;\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = options.angle !== undefined ? options.angle : 0;\n\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = null;\n\n /**\n * @private\n * @type {RenderOptions}\n */\n this.renderOptions_ = null;\n\n this.render();\n }\n\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n const style = new RegularShape({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n points: this.getPoints(),\n radius: this.getRadius(),\n radius2: this.getRadius2(),\n angle: this.getAngle(),\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n getAnchor() {\n const size = this.size_;\n if (!size) {\n return null;\n }\n const displacement = this.getDisplacement();\n const scale = this.getScaleArray();\n // anchor is scaled by renderer but displacement should not be scaled\n // so divide by scale here\n return [\n size[0] / 2 - displacement[0] / scale[0],\n size[1] / 2 + displacement[1] / scale[1],\n ];\n }\n\n /**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\n getAngle() {\n return this.angle_;\n }\n\n /**\n * Get the fill style for the shape.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n getFill() {\n return this.fill_;\n }\n\n /**\n * Set the fill style.\n * @param {import(\"./Fill.js\").default} fill Fill style.\n * @api\n */\n setFill(fill) {\n this.fill_ = fill;\n this.render();\n }\n\n /**\n * @return {HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n if (!this.hitDetectionCanvas_) {\n this.createHitDetectionCanvas_(this.renderOptions_);\n }\n return this.hitDetectionCanvas_;\n }\n\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n getImage(pixelRatio) {\n let image = this.canvas_[pixelRatio];\n if (!image) {\n const renderOptions = this.renderOptions_;\n const context = createCanvasContext2D(\n renderOptions.size * pixelRatio,\n renderOptions.size * pixelRatio\n );\n this.draw_(renderOptions, context, pixelRatio);\n\n image = context.canvas;\n this.canvas_[pixelRatio] = image;\n }\n return image;\n }\n\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n getPixelRatio(pixelRatio) {\n return pixelRatio;\n }\n\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return this.size_;\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return ImageState.LOADED;\n }\n\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n getOrigin() {\n return this.origin_;\n }\n\n /**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\n getPoints() {\n return this.points_;\n }\n\n /**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\n getRadius() {\n return this.radius_;\n }\n\n /**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\n getRadius2() {\n return this.radius2_;\n }\n\n /**\n * Get the size of the symbolizer (in pixels).\n * @return {import(\"../size.js\").Size} Size.\n * @api\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n getStroke() {\n return this.stroke_;\n }\n\n /**\n * Set the stroke style.\n * @param {import(\"./Stroke.js\").default} stroke Stroke style.\n * @api\n */\n setStroke(stroke) {\n this.stroke_ = stroke;\n this.render();\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {}\n\n /**\n * Load not yet loaded URI.\n */\n load() {}\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {}\n\n /**\n * Calculate additional canvas size needed for the miter.\n * @param {string} lineJoin Line join\n * @param {number} strokeWidth Stroke width\n * @param {number} miterLimit Miter limit\n * @return {number} Additional canvas size needed\n * @private\n */\n calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit) {\n if (\n strokeWidth === 0 ||\n this.points_ === Infinity ||\n (lineJoin !== 'bevel' && lineJoin !== 'miter')\n ) {\n return strokeWidth;\n }\n // m | ^\n // i | |\\ .\n // t >| #\\\n // e | |\\ \\ .\n // r \\s\\\n // | \\t\\ . .\n // \\r\\ . .\n // | \\o\\ . . . . .\n // e \\k\\ . . . .\n // | \\e\\ . . . . .\n // d \\ \\ . . . .\n // | _ _a_ _\\# . . .\n // r1 / ` . .\n // | . .\n // b / . .\n // | . .\n // / r2 . .\n // | . .\n // / . .\n // |α . .\n // / . .\n // ° center\n let r1 = this.radius_;\n let r2 = this.radius2_ === undefined ? r1 : this.radius2_;\n if (r1 < r2) {\n const tmp = r1;\n r1 = r2;\n r2 = tmp;\n }\n const points =\n this.radius2_ === undefined ? this.points_ : this.points_ * 2;\n const alpha = (2 * Math.PI) / points;\n const a = r2 * Math.sin(alpha);\n const b = Math.sqrt(r2 * r2 - a * a);\n const d = r1 - b;\n const e = Math.sqrt(a * a + d * d);\n const miterRatio = e / a;\n if (lineJoin === 'miter' && miterRatio <= miterLimit) {\n return miterRatio * strokeWidth;\n }\n // Calculate the distnce from center to the stroke corner where\n // it was cut short because of the miter limit.\n // l\n // ----+---- <= distance from center to here is maxr\n // /####|k ##\\\n // /#####^#####\\\n // /#### /+\\# s #\\\n // /### h/+++\\# t #\\\n // /### t/+++++\\# r #\\\n // /### a/+++++++\\# o #\\\n // /### p/++ fill +\\# k #\\\n ///#### /+++++^+++++\\# e #\\\n //#####/+++++/+\\+++++\\#####\\\n const k = strokeWidth / 2 / miterRatio;\n const l = (strokeWidth / 2) * (d / e);\n const maxr = Math.sqrt((r1 + k) * (r1 + k) + l * l);\n const bevelAdd = maxr - r1;\n if (this.radius2_ === undefined || lineJoin === 'bevel') {\n return bevelAdd * 2;\n }\n // If outer miter is over the miter limit the inner miter may reach through the\n // center and be longer than the bevel, same calculation as above but swap r1 / r2.\n const aa = r1 * Math.sin(alpha);\n const bb = Math.sqrt(r1 * r1 - aa * aa);\n const dd = r2 - bb;\n const ee = Math.sqrt(aa * aa + dd * dd);\n const innerMiterRatio = ee / aa;\n if (innerMiterRatio <= miterLimit) {\n const innerLength = (innerMiterRatio * strokeWidth) / 2 - r2 - r1;\n return 2 * Math.max(bevelAdd, innerLength);\n }\n return bevelAdd * 2;\n }\n\n /**\n * @return {RenderOptions} The render options\n * @protected\n */\n createRenderOptions() {\n let lineJoin = defaultLineJoin;\n let miterLimit = 0;\n let lineDash = null;\n let lineDashOffset = 0;\n let strokeStyle;\n let strokeWidth = 0;\n\n if (this.stroke_) {\n strokeStyle = this.stroke_.getColor();\n if (strokeStyle === null) {\n strokeStyle = defaultStrokeStyle;\n }\n strokeStyle = asColorLike(strokeStyle);\n strokeWidth = this.stroke_.getWidth();\n if (strokeWidth === undefined) {\n strokeWidth = defaultLineWidth;\n }\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset();\n lineJoin = this.stroke_.getLineJoin();\n if (lineJoin === undefined) {\n lineJoin = defaultLineJoin;\n }\n miterLimit = this.stroke_.getMiterLimit();\n if (miterLimit === undefined) {\n miterLimit = defaultMiterLimit;\n }\n }\n\n const add = this.calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit);\n const maxRadius = Math.max(this.radius_, this.radius2_ || 0);\n const size = Math.ceil(2 * maxRadius + add);\n\n return {\n strokeStyle: strokeStyle,\n strokeWidth: strokeWidth,\n size: size,\n lineDash: lineDash,\n lineDashOffset: lineDashOffset,\n lineJoin: lineJoin,\n miterLimit: miterLimit,\n };\n }\n\n /**\n * @protected\n */\n render() {\n this.renderOptions_ = this.createRenderOptions();\n const size = this.renderOptions_.size;\n this.canvas_ = {};\n this.size_ = [size, size];\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} pixelRatio The pixel ratio.\n */\n draw_(renderOptions, context, pixelRatio) {\n context.scale(pixelRatio, pixelRatio);\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n this.createPath_(context);\n\n if (this.fill_) {\n let color = this.fill_.getColor();\n if (color === null) {\n color = defaultFillStyle;\n }\n context.fillStyle = asColorLike(color);\n context.fill();\n }\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n */\n createHitDetectionCanvas_(renderOptions) {\n if (this.fill_) {\n let color = this.fill_.getColor();\n\n // determine if fill is transparent (or pattern or gradient)\n let opacity = 0;\n if (typeof color === 'string') {\n color = asArray(color);\n }\n if (color === null) {\n opacity = 1;\n } else if (Array.isArray(color)) {\n opacity = color.length === 4 ? color[3] : 1;\n }\n if (opacity === 0) {\n // if a transparent fill style is set, create an extra hit-detection image\n // with a default fill style\n const context = createCanvasContext2D(\n renderOptions.size,\n renderOptions.size\n );\n this.hitDetectionCanvas_ = context.canvas;\n\n this.drawHitDetectionCanvas_(renderOptions, context);\n }\n }\n if (!this.hitDetectionCanvas_) {\n this.hitDetectionCanvas_ = this.getImage(1);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} context The context to draw in.\n */\n createPath_(context) {\n let points = this.points_;\n const radius = this.radius_;\n if (points === Infinity) {\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n } else {\n const radius2 = this.radius2_ === undefined ? radius : this.radius2_;\n if (this.radius2_ !== undefined) {\n points *= 2;\n }\n const startAngle = this.angle_ - Math.PI / 2;\n const step = (2 * Math.PI) / points;\n for (let i = 0; i < points; i++) {\n const angle0 = startAngle + i * step;\n const radiusC = i % 2 === 0 ? radius : radius2;\n context.lineTo(radiusC * Math.cos(angle0), radiusC * Math.sin(angle0));\n }\n context.closePath();\n }\n }\n\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n */\n drawHitDetectionCanvas_(renderOptions, context) {\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n this.createPath_(context);\n\n context.fillStyle = defaultFillStyle;\n context.fill();\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n }\n}\n\nexport default RegularShape;\n","/**\n * @module ol/style/Circle\n */\n\nimport RegularShape from './RegularShape.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode\n */\n\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nclass CircleStyle extends RegularShape {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {radius: 5};\n\n super({\n points: Infinity,\n fill: options.fill,\n radius: options.radius,\n stroke: options.stroke,\n scale: options.scale !== undefined ? options.scale : 1,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n rotateWithView:\n options.rotateWithView !== undefined ? options.rotateWithView : false,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n declutterMode: options.declutterMode,\n });\n }\n\n /**\n * Clones the style.\n * @return {CircleStyle} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n const style = new CircleStyle({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n radius: this.getRadius(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n }\n\n /**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\n setRadius(radius) {\n this.radius_ = radius;\n this.render();\n }\n}\n\nexport default CircleStyle;\n","/**\n * @module ol/style/Fill\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nclass Fill {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options || {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n }\n\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {Fill} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Fill({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n });\n }\n\n /**\n * Get the fill color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|null} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n }\n}\n\nexport default Fill;\n","/**\n * @module ol/style/IconImage\n */\n\nimport EventTarget from '../events/Target.js';\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport {asString} from '../color.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {shared as iconImageCache} from './IconImageCache.js';\nimport {listenImage} from '../Image.js';\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet taintedTestContext = null;\n\nclass IconImage extends EventTarget {\n /**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string|undefined} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n */\n constructor(image, src, size, crossOrigin, imageState, color) {\n super();\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.hitDetectionImage_ = null;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.image_ = image;\n\n /**\n * @private\n * @type {string|null}\n */\n this.crossOrigin_ = crossOrigin;\n\n /**\n * @private\n * @type {Object}\n */\n this.canvas_ = {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n this.color_ = color;\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @private\n * @type {import(\"../ImageState.js\").default}\n */\n this.imageState_ = imageState;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = size;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.src_ = src;\n\n /**\n * @private\n */\n this.tainted_;\n }\n\n /**\n * @private\n */\n initializeImage_() {\n this.image_ = new Image();\n if (this.crossOrigin_ !== null) {\n this.image_.crossOrigin = this.crossOrigin_;\n }\n }\n\n /**\n * @private\n * @return {boolean} The image canvas is tainted.\n */\n isTainted_() {\n if (this.tainted_ === undefined && this.imageState_ === ImageState.LOADED) {\n if (!taintedTestContext) {\n taintedTestContext = createCanvasContext2D(1, 1);\n }\n taintedTestContext.drawImage(this.image_, 0, 0);\n try {\n taintedTestContext.getImageData(0, 0, 1, 1);\n this.tainted_ = false;\n } catch (e) {\n taintedTestContext = null;\n this.tainted_ = true;\n }\n }\n return this.tainted_ === true;\n }\n\n /**\n * @private\n */\n dispatchChangeEvent_() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @private\n */\n handleImageError_() {\n this.imageState_ = ImageState.ERROR;\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n }\n\n /**\n * @private\n */\n handleImageLoad_() {\n this.imageState_ = ImageState.LOADED;\n if (this.size_) {\n this.image_.width = this.size_[0];\n this.image_.height = this.size_[1];\n } else {\n this.size_ = [this.image_.width, this.image_.height];\n }\n this.unlistenImage_();\n this.dispatchChangeEvent_();\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n */\n getImage(pixelRatio) {\n if (!this.image_) {\n this.initializeImage_();\n }\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? this.canvas_[pixelRatio] : this.image_;\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Image or Canvas element.\n */\n getPixelRatio(pixelRatio) {\n this.replaceColor_(pixelRatio);\n return this.canvas_[pixelRatio] ? pixelRatio : 1;\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return this.imageState_;\n }\n\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n if (!this.image_) {\n this.initializeImage_();\n }\n if (!this.hitDetectionImage_) {\n if (this.isTainted_()) {\n const width = this.size_[0];\n const height = this.size_[1];\n const context = createCanvasContext2D(width, height);\n context.fillRect(0, 0, width, height);\n this.hitDetectionImage_ = context.canvas;\n } else {\n this.hitDetectionImage_ = this.image_;\n }\n }\n return this.hitDetectionImage_;\n }\n\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * @return {string|undefined} Image src.\n */\n getSrc() {\n return this.src_;\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.imageState_ !== ImageState.IDLE) {\n return;\n }\n if (!this.image_) {\n this.initializeImage_();\n }\n\n this.imageState_ = ImageState.LOADING;\n try {\n /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n } catch (e) {\n this.handleImageError_();\n }\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this)\n );\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @private\n */\n replaceColor_(pixelRatio) {\n if (\n !this.color_ ||\n this.canvas_[pixelRatio] ||\n this.imageState_ !== ImageState.LOADED\n ) {\n return;\n }\n\n const image = this.image_;\n const canvas = document.createElement('canvas');\n canvas.width = Math.ceil(image.width * pixelRatio);\n canvas.height = Math.ceil(image.height * pixelRatio);\n\n const ctx = canvas.getContext('2d');\n ctx.scale(pixelRatio, pixelRatio);\n ctx.drawImage(image, 0, 0);\n\n ctx.globalCompositeOperation = 'multiply';\n ctx.fillStyle = asString(this.color_);\n ctx.fillRect(0, 0, canvas.width / pixelRatio, canvas.height / pixelRatio);\n\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(image, 0, 0);\n\n this.canvas_[pixelRatio] = canvas;\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} image Image.\n * @param {string} src Src.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default} imageState Image state.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {IconImage} Icon image.\n */\nexport function get(image, src, size, crossOrigin, imageState, color) {\n let iconImage = iconImageCache.get(src, crossOrigin, color);\n if (!iconImage) {\n iconImage = new IconImage(image, src, size, crossOrigin, imageState, color);\n iconImageCache.set(src, crossOrigin, color, iconImage);\n }\n return iconImage;\n}\n\nexport default IconImage;\n","/**\n * @module ol/style/Icon\n */\nimport EventType from '../events/EventType.js';\nimport ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport {asArray} from '../color.js';\nimport {assert} from '../asserts.js';\nimport {get as getIconImage} from './IconImage.js';\nimport {getUid} from '../util.js';\n\n/**\n * @typedef {'fraction' | 'pixels'} IconAnchorUnits\n * Anchor unit can be either a fraction of the icon size or in pixels.\n */\n\n/**\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} IconOrigin\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n */\n\n/**\n * @typedef {Object} Options\n * @property {Array} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {IconOrigin} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {IconAnchorUnits} [anchorXUnits='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {IconAnchorUnits} [anchorYUnits='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {import(\"../color.js\").Color|string} [color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {HTMLImageElement|HTMLCanvasElement} [img] Image object for the icon. If the `src` option is not provided then the\n * provided image must already be loaded. And in that case, it is required\n * to provide the size of the image, with the `imgSize` option.\n * @property {import(\"../size.js\").Size} [imgSize] Image size in pixels. Only required if `img` is set and `src` is not.\n * The provided `imgSize` needs to match the actual size of the image.\n * @property {Array} [displacement=[0, 0]] Displacement of the icon in pixels.\n * Positive values will shift the icon right and up.\n * @property {number} [opacity=1] Opacity of the icon.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {Array} [offset=[0, 0]] Offset which, together with `size` and `offsetOrigin`, defines the\n * sub-rectangle to use from the original (sprite) image.\n * @property {IconOrigin} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"../size.js\").Size} [size] Icon size in pixels. Used together with `offset` to define the\n * sub-rectangle to use from the original (sprite) image.\n * @property {string} [src] Image source URI.\n * @property {\"declutter\"|\"obstacle\"|\"none\"|undefined} [declutterMode] Declutter mode.\n */\n\n/**\n * @classdesc\n * Set icon style for vector features.\n * @api\n */\nclass Icon extends ImageStyle {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options || {};\n\n /**\n * @type {number}\n */\n const opacity = options.opacity !== undefined ? options.opacity : 1;\n\n /**\n * @type {number}\n */\n const rotation = options.rotation !== undefined ? options.rotation : 0;\n\n /**\n * @type {number|import(\"../size.js\").Size}\n */\n const scale = options.scale !== undefined ? options.scale : 1;\n\n /**\n * @type {boolean}\n */\n const rotateWithView =\n options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n super({\n opacity: opacity,\n rotation: rotation,\n scale: scale,\n displacement:\n options.displacement !== undefined ? options.displacement : [0, 0],\n rotateWithView: rotateWithView,\n declutterMode: options.declutterMode,\n });\n\n /**\n * @private\n * @type {Array}\n */\n this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n\n /**\n * @private\n * @type {Array}\n */\n this.normalizedAnchor_ = null;\n\n /**\n * @private\n * @type {IconOrigin}\n */\n this.anchorOrigin_ =\n options.anchorOrigin !== undefined ? options.anchorOrigin : 'top-left';\n\n /**\n * @private\n * @type {IconAnchorUnits}\n */\n this.anchorXUnits_ =\n options.anchorXUnits !== undefined ? options.anchorXUnits : 'fraction';\n\n /**\n * @private\n * @type {IconAnchorUnits}\n */\n this.anchorYUnits_ =\n options.anchorYUnits !== undefined ? options.anchorYUnits : 'fraction';\n\n /**\n * @private\n * @type {?string}\n */\n this.crossOrigin_ =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n /**\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n const image = options.img !== undefined ? options.img : null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size|undefined}\n */\n this.imgSize_ = options.imgSize;\n\n /**\n * @type {string|undefined}\n */\n let src = options.src;\n\n assert(!(src !== undefined && image), 4); // `image` and `src` cannot be provided at the same time\n assert(!image || (image && this.imgSize_), 5); // `imgSize` must be set when `image` is provided\n\n if ((src === undefined || src.length === 0) && image) {\n src = /** @type {HTMLImageElement} */ (image).src || getUid(image);\n }\n assert(src !== undefined && src.length > 0, 6); // A defined and non-empty `src` or `image` must be provided\n\n /**\n * @type {import(\"../ImageState.js\").default}\n */\n const imageState =\n options.src !== undefined ? ImageState.IDLE : ImageState.LOADED;\n\n /**\n * @private\n * @type {import(\"../color.js\").Color}\n */\n this.color_ = options.color !== undefined ? asArray(options.color) : null;\n\n /**\n * @private\n * @type {import(\"./IconImage.js\").default}\n */\n this.iconImage_ = getIconImage(\n image,\n /** @type {string} */ (src),\n this.imgSize_ !== undefined ? this.imgSize_ : null,\n this.crossOrigin_,\n imageState,\n this.color_\n );\n\n /**\n * @private\n * @type {Array}\n */\n this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n /**\n * @private\n * @type {IconOrigin}\n */\n this.offsetOrigin_ =\n options.offsetOrigin !== undefined ? options.offsetOrigin : 'top-left';\n\n /**\n * @private\n * @type {Array}\n */\n this.origin_ = null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_ = options.size !== undefined ? options.size : null;\n }\n\n /**\n * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n * @return {Icon} The cloned style.\n * @api\n */\n clone() {\n const scale = this.getScale();\n return new Icon({\n anchor: this.anchor_.slice(),\n anchorOrigin: this.anchorOrigin_,\n anchorXUnits: this.anchorXUnits_,\n anchorYUnits: this.anchorYUnits_,\n color:\n this.color_ && this.color_.slice\n ? this.color_.slice()\n : this.color_ || undefined,\n crossOrigin: this.crossOrigin_,\n imgSize: this.imgSize_,\n offset: this.offset_.slice(),\n offsetOrigin: this.offsetOrigin_,\n opacity: this.getOpacity(),\n rotateWithView: this.getRotateWithView(),\n rotation: this.getRotation(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n size: this.size_ !== null ? this.size_.slice() : undefined,\n src: this.getSrc(),\n displacement: this.getDisplacement().slice(),\n declutterMode: this.getDeclutterMode(),\n });\n }\n\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n getAnchor() {\n let anchor = this.normalizedAnchor_;\n if (!anchor) {\n anchor = this.anchor_;\n const size = this.getSize();\n if (\n this.anchorXUnits_ == 'fraction' ||\n this.anchorYUnits_ == 'fraction'\n ) {\n if (!size) {\n return null;\n }\n anchor = this.anchor_.slice();\n if (this.anchorXUnits_ == 'fraction') {\n anchor[0] *= size[0];\n }\n if (this.anchorYUnits_ == 'fraction') {\n anchor[1] *= size[1];\n }\n }\n\n if (this.anchorOrigin_ != 'top-left') {\n if (!size) {\n return null;\n }\n if (anchor === this.anchor_) {\n anchor = this.anchor_.slice();\n }\n if (\n this.anchorOrigin_ == 'top-right' ||\n this.anchorOrigin_ == 'bottom-right'\n ) {\n anchor[0] = -anchor[0] + size[0];\n }\n if (\n this.anchorOrigin_ == 'bottom-left' ||\n this.anchorOrigin_ == 'bottom-right'\n ) {\n anchor[1] = -anchor[1] + size[1];\n }\n }\n this.normalizedAnchor_ = anchor;\n }\n const displacement = this.getDisplacement();\n const scale = this.getScaleArray();\n // anchor is scaled by renderer but displacement should not be scaled\n // so divide by scale here\n return [\n anchor[0] - displacement[0] / scale[0],\n anchor[1] + displacement[1] / scale[1],\n ];\n }\n\n /**\n * Set the anchor point. The anchor determines the center point for the\n * symbolizer.\n *\n * @param {Array} anchor Anchor.\n * @api\n */\n setAnchor(anchor) {\n this.anchor_ = anchor;\n this.normalizedAnchor_ = null;\n }\n\n /**\n * Get the icon color.\n * @return {import(\"../color.js\").Color} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n getImage(pixelRatio) {\n return this.iconImage_.getImage(pixelRatio);\n }\n\n /**\n * Get the pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} The pixel ratio of the image.\n * @api\n */\n getPixelRatio(pixelRatio) {\n return this.iconImage_.getPixelRatio(pixelRatio);\n }\n\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n getImageSize() {\n return this.iconImage_.getSize();\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n getImageState() {\n return this.iconImage_.getImageState();\n }\n\n /**\n * @return {HTMLImageElement|HTMLCanvasElement} Image element.\n */\n getHitDetectionImage() {\n return this.iconImage_.getHitDetectionImage();\n }\n\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n getOrigin() {\n if (this.origin_) {\n return this.origin_;\n }\n let offset = this.offset_;\n\n if (this.offsetOrigin_ != 'top-left') {\n const size = this.getSize();\n const iconImageSize = this.iconImage_.getSize();\n if (!size || !iconImageSize) {\n return null;\n }\n offset = offset.slice();\n if (\n this.offsetOrigin_ == 'top-right' ||\n this.offsetOrigin_ == 'bottom-right'\n ) {\n offset[0] = iconImageSize[0] - size[0] - offset[0];\n }\n if (\n this.offsetOrigin_ == 'bottom-left' ||\n this.offsetOrigin_ == 'bottom-right'\n ) {\n offset[1] = iconImageSize[1] - size[1] - offset[1];\n }\n }\n this.origin_ = offset;\n return this.origin_;\n }\n\n /**\n * Get the image URL.\n * @return {string|undefined} Image src.\n * @api\n */\n getSrc() {\n return this.iconImage_.getSrc();\n }\n\n /**\n * Get the size of the icon (in pixels).\n * @return {import(\"../size.js\").Size} Image size.\n * @api\n */\n getSize() {\n return !this.size_ ? this.iconImage_.getSize() : this.size_;\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n listenImageChange(listener) {\n this.iconImage_.addEventListener(EventType.CHANGE, listener);\n }\n\n /**\n * Load not yet loaded URI.\n * When rendering a feature with an icon style, the vector renderer will\n * automatically call this method. However, you might want to call this\n * method yourself for preloading or other purposes.\n * @api\n */\n load() {\n this.iconImage_.load();\n }\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n unlistenImageChange(listener) {\n this.iconImage_.removeEventListener(EventType.CHANGE, listener);\n }\n}\n\nexport default Icon;\n","/**\n * @module ol/style/Stroke\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array} [lineDash] Line dash pattern. Default is `null` (no dash).\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nclass Stroke {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options || {};\n\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n\n /**\n * @private\n * @type {CanvasLineCap|undefined}\n */\n this.lineCap_ = options.lineCap;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n\n /**\n * @private\n * @type {CanvasLineJoin|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n }\n\n /**\n * Clones the style.\n * @return {Stroke} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Stroke({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth(),\n });\n }\n\n /**\n * Get the stroke color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Get the line cap type for the stroke.\n * @return {CanvasLineCap|undefined} Line cap.\n * @api\n */\n getLineCap() {\n return this.lineCap_;\n }\n\n /**\n * Get the line dash style for the stroke.\n * @return {Array|null} Line dash.\n * @api\n */\n getLineDash() {\n return this.lineDash_;\n }\n\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n getLineDashOffset() {\n return this.lineDashOffset_;\n }\n\n /**\n * Get the line join type for the stroke.\n * @return {CanvasLineJoin|undefined} Line join.\n * @api\n */\n getLineJoin() {\n return this.lineJoin_;\n }\n\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n getMiterLimit() {\n return this.miterLimit_;\n }\n\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n getWidth() {\n return this.width_;\n }\n\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n }\n\n /**\n * Set the line cap.\n *\n * @param {CanvasLineCap|undefined} lineCap Line cap.\n * @api\n */\n setLineCap(lineCap) {\n this.lineCap_ = lineCap;\n }\n\n /**\n * Set the line dash.\n *\n * @param {Array|null} lineDash Line dash.\n * @api\n */\n setLineDash(lineDash) {\n this.lineDash_ = lineDash;\n }\n\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n setLineDashOffset(lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n }\n\n /**\n * Set the line join.\n *\n * @param {CanvasLineJoin|undefined} lineJoin Line join.\n * @api\n */\n setLineJoin(lineJoin) {\n this.lineJoin_ = lineJoin;\n }\n\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n setMiterLimit(miterLimit) {\n this.miterLimit_ = miterLimit;\n }\n\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n setWidth(width) {\n this.width_ = width;\n }\n}\n\nexport default Stroke;\n","/**\n * @module ol/style/Style\n */\n\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport Stroke from './Stroke.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes an {@link module:ol/Feature~Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style~Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array