{"version":3,"mappings":"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","names":["documentAlias","navigatorAlias","windowAlias","locationAlias","getCurrentURL","boolToIntBool","value","generateUniqueId","length","id","chars","charLen","i","isDoNotTrackEnabled","dnt","MatomoLiteTracker","matomoURL","siteID","now","parameters","referrer","features","key","supported","cd","customDimensionsKey","customTitle","performanceMetric","category","action","name","keyword","resultsCount","idGoal","customRevenue","sourceUrl","linkType","forceBeacon","requestMethod","params","url","options","scriptProtocol","enableLinkTracking","matomo","downloadFileExtensions","alsoTrackMouseclicks","ignoredClasses","getLinkType","element","href","processClick","getLinkTarget","event","target","nodeName","ignoredClass","clickHandler","mouseButton","lastButton","lastTarget","body","initMatomo","m","BaseEvent","type","ObjectEventType","Disposable","binarySearch","haystack","needle","comparator","mid","cmp","ascending","low","high","found","a","b","linearFindNearest","arr","direction","n","candidate","reverseSubArray","begin","end","tmp","extend","data","extension","equals","arr1","arr2","len1","isSorted","func","strict","compare","currentVal","index","res","TRUE","FALSE","VOID","memoizeOne","fn","lastResult","lastArgs","lastThis","nextArgs","arrayEquals","toPromise","getter","promiseGetter","err","clear","object","property","isEmpty","Target","listener","listeners","listenersForType","isString","evt","Event","dispatching","pendingRemovals","propagate","ii","pr","EventType","listen","thisArg","once","originalListener","eventsKey","listenOnce","unlistenByKey","Observable","EventTarget","len","keys","unByKey","abstract","uidCounter_","getUid","obj","ObjectEvent","oldValue","BaseObject","values","eventType","silent","source","CollectionEventType","Property","CollectionEvent","Collection","array","f","elem","prev","except","LayerProperty","assert","assertion","errorMessage","clamp","min","max","squaredSegmentDistance","x","y","x1","y1","x2","y2","dx","dy","t","squaredDistance","solveLinearSystem","mat","maxRow","maxEl","r","absValue","j","coef","k","l","toRadians","angleInDegrees","modulo","lerp","toFixed","decimals","factor","floor","ceil","BaseLayer","properties","managed","state","zIndex","states","background","extent","maxResolution","minResolution","maxZoom","minZoom","opacity","visible","zindex","RenderEventType","ViewHint","ViewProperty","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","METERS_PER_UNIT","Projection","global","tileGrid","worldExtent","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","EPSG3857Projection","code","resolution","point","PROJECTIONS","fromEPSG4326","input","output","dimension","stride","toEPSG4326","EPSG4326Projection","axisOrientation","cache","get","add","projection","transforms","destination","transformFn","sourceCode","destinationCode","transform","Relationship","boundingExtent","coordinates","createEmpty","extendCoordinate","_boundingExtentXYs","xs","ys","dest","minX","minY","maxX","maxY","createOrUpdate","buffer","clone","closestSquaredDistanceXY","containsCoordinate","coordinate","containsXY","containsExtent","extent1","extent2","coordinateRelationship","relationship","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromFlatCoordinates","flatCoordinates","offset","extendFlatCoordinates","extendXY","forEachCorner","callback","val","getBottomLeft","getBottomRight","getTopRight","getTopLeft","getArea","area","getWidth","getHeight","getCenter","getCorner","corner","getForViewAndSize","center","rotation","size","x0","y0","x3","y3","getRotatedViewport","cosRotation","sinRotation","xCos","xSin","yCos","ySin","getIntersection","intersection","intersects","returnOrUpdate","intersectsSegment","start","startRel","endRel","startX","startY","endX","endY","slope","applyTransform","stops","wrapX","projectionExtent","worldWidth","wrapAndSliceX","multiWorld","delta","coordinate1","coordinate2","rotate","angle","cosAngle","sinAngle","scale","worldsAway","getWorldsAway","sourceExtentWidth","DEFAULT_RADIUS","getDistance","c1","c2","radius","lat1","lat2","deltaLatBy2","deltaLonBy2","warn","args","showCoordinateWarning","disableCoordinateWarning","disable","cloneTransform","identityTransform","addProjection","addProj","addTransformFunc","addProjections","projections","projectionLike","getProj","getPointResolution","units","pointResolution","projUnits","getTransformFromProjections","vertices","width","height","metersPerUnit","addEquivalentProjections","addEquivalentTransforms","projections1","projections2","forwardTransform","inverseTransform","projection1","projection2","createProjection","defaultCode","fromLonLat","equivalent","equalUnits","sourceProjection","destinationProjection","transformFunc","getTransformFunc","getTransform","transformExtent","toUserCoordinate","fromUserCoordinate","destProjection","toUserExtent","fromUserExtent","addCommon","EPSG3857_PROJECTIONS","EPSG4326_PROJECTIONS","createExtent","onlyCenter","smooth","isMoving","centerShift","viewWidth","viewHeight","shiftX","shiftY","ratio","none","getViewportClampedResolution","maxExtent","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","result","createSnapToResolutions","resolutions","cappedMaxRes","capped","z","createSnapToPower","power","tolerance","minZoomLevel","cappedZoomLevel","zoomLevel","newResolution","createMinMaxResolution","createSnapToN","theta","createSnapToZero","easeIn","easeOut","inAndOut","linear","create","setFromArray","transform1","transform2","apply","compose","dx1","dy1","sx","sy","dx2","dy2","sin","cos","makeInverse","det","determinant","c","d","e","matrixPrecision","toString","transform2D","destinationStride","anchor","anchorX","anchorY","deltaX","deltaY","translate","tmpTransform","createTransform","Geometry","revision","squaredTolerance","closestPoint","minSquaredDistance","coord","sourceProj","getProjection","inCoordinates","outCoordinates","pixelExtent","projectedExtent","composeTransform","SimpleGeometry","simplifiedGeometry","layout","getStrideForLayout","nesting","getLayoutForStride","transformGeom2D","simpleGeometry","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","squaredDx","arrayMaxSquaredDelta","ends","assignClosestPoint","maxDelta","isRing","tmpPoint","assignClosestArrayPoint","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","jj","douglasPeucker","simplifiedFlatCoordinates","simplifiedOffset","markers","stack","last","first","maxSquaredDistance","douglasPeuckerArray","simplifiedEnds","snap","quantize","quantizeArray","inflateCoordinates","inflateCoordinatesArray","inflateMultiCoordinatesArray","endss","coordinatesss","linearRing","twiceArea","linearRings","LinearRing","linearRingArea","Point","linearRingContainsExtent","linearRingContainsXY","wn","linearRingsContainsXY","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","maxSegmentLength","segmentLength","getInteriorPointsOfMultiArray","interiorPoints","forEach","ret","intersectsLineString","coordinatesExtent","forEachSegment","point1","point2","intersectsLinearRing","intersectsLinearRingArray","linearRingIsClockwise","edge","linearRingsAreOriented","right","isClockwise","orientLinearRings","reverseCoordinates","inflateEnds","prevEndIndex","startOrientation","orientation","Polygon","polygon","linearRingsArea","flatCenter","fromExtent","DEFAULT_MIN_ZOOM","View","resolutionConstraintInfo","createResolutionConstraint","centerConstraint","createCenterConstraint","resolutionConstraint","rotationConstraint","createRotationConstraint","padding","oldPadding","newPadding","offsetX","offsetY","newOptions","var_args","animationCount","animationCallback","series","animation","isNoopAnimation","more","seriesComplete","elapsed","fraction","progress","constrainedResolution","constrainedRotation","currentCenter","rotateCoordinate","addCoordinate","currentResolution","w","h","hints","zoom","enabled","logPower","reducedSize","calculateCenterOn","zoomFactor","nearest","_a","baseLevel","geometryOrExtent","geometry","polygonFromExtent","coords","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","rotatedExtent","centerRot","centerX","centerY","position","shiftedCenter","deltaCoordinates","newRotation","hint","doNotCancelAnims","forceMoving","newCenter","duration","resolutionDirection","targetCenter","targetResolution","targetZoom","targetRes","returnValue","centerNone","projExtent","constrainOnlyCenter","defaultMaxResolution","defaultMinResolution","constrainRotation","rotationNone","coordinatesEqual","Layer","baseOptions","pixel","view","frameState","map","layerState","layerExtent","inView","getAttributions","attributions","layerRenderer","renderEvent","layerStatesArray","arrayLayerState","viewState","quickselect","left","defaultCompare","s","sd","newLeft","newRight","swap","RBush$1","maxEntries","bbox","node","toBBox","nodesToSearch","child","childBBox","contains","tmpNode","item","createNode","equalsFn","path","indexes","parent","goingUp","findItem","items","N","M","calcBBox","N2","N1","multiSelect","right2","right3","level","minArea","minEnlargement","targetNode","bboxArea","enlargement","enlargedArea","isNode","insertPath","splitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareMinX","compareNodeMinX","compareMinY","compareNodeMinY","xMargin","yMargin","leftBBox","rightBBox","margin","bboxMargin","siblings","p","destNode","children","ImageState","hasArea","toSize","ImageStyle","pixelRatio","displacement","rotateWithView","rgb","xyz","_xyz","white","g","luv","arg","o","_u","_v","u","v","xn","yn","zn","un","vn","yr","lchuv","hr","names","baseHues","parse","cstr","parts","alpha","space","base","isShort","dims","_b","hsl","t1","t2","t3","rgba","color","parsed","NO_COLOR","asString","MAX_CACHE_SIZE","cacheSize","withAlpha","rgbaToLcha","lchaToRgba","fromString","parseRgba","normalize","asArray","ua","FIREFOX","SAFARI","WEBKIT","MAC","DEVICE_PIXEL_RATIO","WORKER_OFFSCREEN_CANVAS","IMAGE_DECODE","PASSIVE_EVENT_LISTENERS","passive","createCanvasContext2D","canvasPool","settings","canvas","sharedCanvasContext","getSharedCanvasContext2D","releaseCanvas","context","outerWidth","style","outerHeight","replaceNode","oldNode","removeChildren","replaceChildren","oldChildren","oldChild","newChild","listenImage","image","loadHandler","errorHandler","img","listening","decoding","loaded","listenerKeys","error","load","src","resolve","reject","handleLoad","unlisten","handleError","decodeFallback","IconImageCache","iconImage","crossOrigin","getCacheKey","pattern","update","maxCacheSize","colorString","shared","taintedTestContext","IconImage","imageState","ctx","onChange","cacheKey","iconImageCache","asColorLike","asCanvasPattern","iconCache","canvasPattern","patternCanvasContext","getIconImage","CLASS_HIDDEN","CLASS_SELECTABLE","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","getFontParameters","fontSpec","match","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","measureContext","measureFont","textHeights","registerFont","referenceFonts","text","interval","referenceWidth","isAvailable","fontStyle","fontWeight","fontFamily","available","referenceFont","measureTextWidth","check","done","fonts","font","weight","family","families","measureTextHeight","measureElement","metrics","measureText","measureAndCacheTextWidth","curr","getTextDimensions","baseStyle","chunks","widths","heights","lineWidths","lineWidth","lineHeight","currentWidth","currentHeight","drawImageOrLabel","labelOrImage","originX","originY","executeLabelInstructions","label","contextInstructions","RegularShape","fill","renderOptions","stroke","lineJoin","strokeWidth","miterLimit","r1","r2","points","miterRatio","bevelAdd","aa","bb","dd","innerMiterRatio","innerLength","lineCap","lineDash","lineDashOffset","strokeStyle","maxRadius","radius2","startAngle","step","angle0","radiusC","CircleStyle","Fill","patternImage","Stroke","Style","defaultGeometryFunction","renderer","feature","toFunction","styleFunction","styles","defaultStyles","createDefaultStyle","calculateScale","wantedWidth","wantedHeight","Icon","onload","imageSize","iconImageSize","DEFAULT_FILL_COLOR","Text","overflow","maxAngle","placement","repeat","textAlign","justify","textBaseline","numTypes","BooleanType","NumberType","StringType","ColorType","NumberArrayType","SizeType","AnyType","typeNames","namedTypes","isSpecific","typeName","namedType","includesType","broad","specific","isType","expected","LiteralExpression","CallExpression","operator","newParsingContext","encoded","expectedType","colorFromString","parseCallExpression","Ops","parsers","createCallExpressionParser","hasArgsCount","withGetArgs","withVarArgs","usesFeatureId","withNoArgs","withArgsOfType","usesGeometryType","withArgsOfReturnType","hasEvenArgs","withMatchArgs","withInterpolateArgs","hasOddArgs","withCaseArgs","withInArgs","withPaletteArgs","returnType","argsCount","operation","minArgs","maxArgs","argCount","plural","range","expression","argType","inputType","fallback","interpolationType","interpolation","stop","condition","needleType","colors","parsedColors","validators","parser","computeGeometryType","newEvaluationContext","buildExpression","compileExpression","colorValue","compileAssertionExpression","compileAccessorExpression","compileLogicalExpression","compileComparisonExpression","compileNumericExpression","compileCaseExpression","compileMatchExpression","compileInterpolateExpression","compileConvertExpression","op","previousInput","previousOutput","isColor","interpolateColor","interpolateNumber","input1","output1","input2","output2","along","rgba1","rgba2","lcha1","lcha2","deltaHue","lcha","always","rulesToStyleFunction","rules","parsingContext","evaluator","buildRuleSet","evaluationContext","flatStylesToStyleFunction","flatStyles","evaluators","buildStyle","nonNullCount","compiledRules","rule","filter","styleLength","someMatched","filterEvaluator","styleEvaluator","flatStyle","evaluateFill","buildFill","evaluateStroke","buildStroke","evaluateText","buildText","evaluateImage","buildImage","evaluateZIndex","numberEvaluator","empty","prefix","evaluateColor","patternEvaluator","colorLikeEvaluator","evaluateWidth","evaluateLineCap","stringEvaluator","evaluateLineJoin","evaluateLineDash","numberArrayEvaluator","evaluateLineDashOffset","evaluateMiterLimit","evaluateValue","evaluateBackgroundFill","evaluateBackgroundStroke","evaluateFont","evaluateMaxAngle","evaluateOffsetX","evaluateOffsetY","evaluateOverflow","booleanEvaluator","evaluatePlacement","evaluateRepeat","evaluateScale","sizeLikeEvaluator","evaluateRotateWithView","evaluateRotation","evaluateAlign","evaluateJustify","evaluateBaseline","evaluatePadding","declutterMode","optionalDeclutterMode","buildIcon","buildShape","buildCircle","srcName","requireString","evaluateAnchor","coordinateEvaluator","evaluateOpacity","evaluateDisplacement","anchorOrigin","optionalIconOrigin","anchorXUnits","optionalIconAnchorUnits","anchorYUnits","optionalColorLike","optionalString","optionalNumberArray","offsetOrigin","optionalNumber","optionalSize","icon","pointsName","radiusName","requireNumber","shape","evaluateRadius","circle","Circle","srcEvaluator","offsetEvaluator","sizeEvaluator","patternSizeEvaluator","colorEvaluator","requireColorLike","requireNumberArray","requireSize","requireSizeLike","BaseVectorLayer","declutterGroup","RBush","renderOrder","styleLike","toStyleLike","toStyleFunction","MapRenderer","coordinateToPixelTransform","pixelToCoordinateTransform","hitTolerance","checkWrapped","layerFilter","thisArg2","forEachFeatureAtCoordinate","layer","translatedCoordinate","offsets","layerStates","numLayers","matches","tmpCoord","order","expireIconCache","RenderEvent","inversePixelTransform","CompositeMapRenderer","container","renderedLayerStates","previousElement","sourceState","GroupEvent","LayerGroup","layers","layersArray","collectionEvent","collection","currentLayers","pos","ownLayerState","defaultZIndex","MapEvent","MapBrowserEvent","originalEvent","dragging","activePointers","MapBrowserEventType","PointerEventType","MapBrowserEventHandler","moveTolerance","pointerEvent","newEvent","pointerId","doc","MapEventType","MapProperty","DROP","PriorityQueue","priorityFunction","keyFunction","elements","priorities","elementKey","priority","count","startIndex","lIndex","rIndex","smallerChildIndex","parentIndex","TileState","TileQueue","tilePriorityFunction","tileChangeCallback","added","tile","tileKey","maxTotalLoading","maxNewLoads","newLoads","getTilePriority","tileSourceKey","tileCenter","tileResolution","Control","mapEvent","Attribution","className","tipLabel","expandClassName","collapseLabel","collapseClassName","activeLabel","cssClasses","visibleAttributions","collapsible","attribution","collapsed","Rotate","compassClassName","button","Zoom","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","outElement","currentZoom","newZoom","defaults","controls","InteractionProperty","Interaction","mapBrowserEvent","active","pan","zoomByDelta","DoubleClickZoom","stopEvent","browserEvent","PointerInteraction","handledUp","handled","centroid","pointerEvents","clientX","clientY","all","conditions","pass","altShiftKeysOnly","focus","targetElement","rootNode","activeElement","focusWithTabindex","mouseActionButton","noModifierKeys","platformModifierKey","shiftKeyOnly","targetNotEditable","tagName","mouseOnly","primaryAction","DragPan","targetPointers","centroidFromPointers","scaleCoordinate","distance","centerpx","DragRotate","RenderBox","startPixel","endPixel","px","DragBoxEventType","DragBoxEvent","DragBox","completeBox","DragZoom","Key","KeyboardPan","keyEvent","mapUnitsDelta","KeyboardZoom","Kinetic","decay","minVelocity","delay","lastIndex","firstIndex","MouseWheelZoom","wheelEvent","timeLeft","useAnchor","PinchRotate","pointerOptions","rotationDelta","touch0","touch1","PinchZoom","scaleDelta","interactions","kinetic","removeLayerMapProperty","setLayerMapProperty","Map","optionsInternal","createOptionsInternal","defaultControls","defaultInteractions","viewOptions","control","interaction","overlay","addLayersFrom","layerGroup","viewportPosition","scaleX","scaleY","eventPosition","group","viewCoordinate","currentDoc","interactionsArray","tileQueue","lowOnFrameBudget","postRenderFunctions","keyboardEventTarget","targetRoot","time","previousFrameState","viewHints","equalsExtent","oldLayerGroup","computedStyle","oldSize","overlays","LRUCache","highWaterMark","keep","entry","Tile","tileCoord","ImageTile","tileLoadFunction","getBlankImage","ERROR_THRESHOLD","MAX_SUBDIVISION","MAX_TRIANGLE_WIDTH","Triangulation","targetProj","targetExtent","maxSourceExtent","errorThreshold","destinationResolution","transformInvCache","transformInv","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","leftBound","triangle","newTriangle","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","targetQuadExtent","isNotFinite","centerSrc","bc","bcSrc","da","daSrc","ab","abSrc","cdSrc","brokenDiagonalRendering_","drawTestTriangle","u1","v1","u2","v2","verifyBrokenDiagonalRendering","isBrokenDiagonalRendering","calculateSourceResolution","sourceCenter","sourceResolution","targetMetersPerUnit","sourceMetersPerUnit","sourceExtent","compensationFactor","calculateSourceExtentResolution","render","triangulation","sources","gutter","renderEdges","interpolate","drawSingle","clipExtent","pixelRound","sourceDataExtent","stitchContext","stitchScale","inverseScale","xPos","yPos","srcWidth","srcHeight","targetTopLeft","u0","v0","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","steps","ud","vd","ReprojTile","sourceTileGrid","targetTileGrid","wrappedTileCoord","getTileFunction","maxTargetExtent","limitedTargetExtent","sourceProjExtent","errorThresholdInPixels","sourceRange","srcX","srcY","renderReprojected","leftToLoad","sourceListenKey","TileEventType","Source","adaptAttributions","self","attributionLike","TileRange","tileRange","getKeyZXY","hash","hashZXY","withinExtentAndZ","tmpTileCoord","DECIMALS","TileGrid","restrictedTileRange","tempTileRange","tempExtent","tileCoordExtent","createOrUpdateTileRange","tileCoordZ","tileCoordX","tileCoordY","origin","tileSize","opt_tileCoord","reverseIntersectionPolicy","createOrUpdateTileCoord","opt_direction","viewport","fullTileRanges","getForProjection","createForProjection","extentFromProjection","createForExtent","resolutionsFromExtent","createXYZ","xyzOptions","gridOptions","half","TileSource","getTileGridForProjection","tilePixelRatio","scaleSize","TileSourceEvent","zRegEx","xRegEx","yRegEx","dashYRegEx","renderXYZTemplate","template","expandUrl","urls","startCharCode","stopCharCode","charCode","createFromTemplate","createFromTemplates","templates","tileUrlFunctions","createFromTileUrlFunctions","tileCoordHash","UrlTile","uid","tileState","tileUrlFunction","TileImage","defaultTileLoadFunction","thisProj","projKey","urlTileCoord","tileUrl","tilegrid","proj","imageTile","XYZ","Feature","geometryOrProperties","createStyleFunction","RBush_","extents","rbush","interpolatePoint","cumulativeLengths","lineStringCoordinateAtM","extrapolate","lo","hi","m0","m1","lineStringLength","LineString","lineString","linearRingss","RenderFeature","linearRingssCenter","midpoint","VectorEventType","withCredentials","loadFeaturesXhr","format","success","failure","xhr","dataProjection","VectorSourceEvent","VectorSource","allStrategy","useSpatialIndex","featureKey","valid","indexedFeature","newFeatures","geometryFeatures","modifyingCollection","fast","featureId","removeAndIgnoreReturn","clearEvent","anExtent","closestFeature","previousMinSquaredDistance","minDistance","sid","loadedExtentsRtree","extentsToLoad","extentToLoad","removed","featureChangeKeys","idString","loader","asImageLike","asArrayLike","disposedError","sharedContext","toArray","defaultSize","DataTile","imageData","ReprojDataTile","sourceTileGridExtent","getTile","dataSources","imageLike","tileData","arrayData","pixelSize","isFloat","pixelCount","DataType","tileDataR","bytesPerElement","bytesPerPixel","bytesPerRow","bandCount","packedLength","packedData","dataIndex","rowOffset","colCount","rowIndex","colIndex","targetWidth","targetHeight","dataR","dataU","reprojs","reproj","dataSource","ATTRIBUTION","OSM","maxStaleKeys","LayerRenderer","ZIndexContext","__publicField","instructionsAtIndex","instructionAtIndex","pixelContext","createPixelContext","CanvasLayerRenderer","col","row","backgroundColor","layerClassName","topLeft","topRight","bottomRight","bottomLeft","inverted","canvasTransform","toTransformString","TileProperty","BaseTileLayer","preload","useInterimTilesOnError","sourceKey","addTileToLookup","tilesByZ","set","existing","removeTileFromLookup","getRenderExtent","gridExtent","CanvasTileLayerRenderer","tileLayer","createTileCoord","tileCache","tileSource","tileOrigin","sourceRevision","initialZ","wantedTiles","minZ","tileQueueKey","staleKeys","altZ","covered","viewResolution","viewCenter","frameExtent","canvasExtent","targetZ","nextExtent","renderExtent","parentZ","canvasScale","zs","currentClip","clips","clipZs","currentZ","currentTilePixelSize","currentScale","originTileCoord","originTileExtent","tileGutter","xIndex","nextX","yIndex","nextY","transition","contextSaved","clip","postRenderFunction","tilesCount","tileCount","alphaChanged","usedTiles","TileLayer","Instruction","fillInstruction","strokeInstruction","beginPathInstruction","closePathInstruction","VectorContext","hitDetectionRenderer","circleGeometry","geometryCollectionGeometry","lineStringGeometry","multiLineStringGeometry","multiPointGeometry","multiPolygonGeometry","pointGeometry","polygonGeometry","fillStyle","imageStyle","declutterImageWithText","textStyle","CanvasBuilder","dashArray","dash","myEnd","closed","skipFirst","lastXCoord","lastYCoord","nextCoord","skipped","lastRel","nextRel","builderEnds","builderEnd","builderBegin","builderEndss","myEnds","CanvasInstruction","hitDetectionInstructions","instruction","fillStyleColor","strokeStyleColor","strokeStyleLineCap","strokeStyleLineDash","strokeStyleLineDashOffset","strokeStyleLineJoin","strokeStyleWidth","strokeStyleMiterLimit","createFill","applyStroke","endGeometryInstruction","CanvasImageBuilder","myBegin","filteredFlatCoordinates","sharedData","CanvasLineStringBuilder","moveToLineToInstruction","CanvasPolygonBuilder","numEnds","circleInstruction","lineChunk","chunkLength","cursor","chunkM","currentChunk","missing","matchingChunk","chunkStart","chunkEnd","acos","m12","m23","x12","y12","x23","y23","TEXT_ALIGN","CanvasTextBuilder","instructions","fillState","strokeState","textState","geometryType","flatOffset","oo","cc","chunk","chunkBegin","geometryWidths","beg","p0","p1","p2","p3","currentFillStyle","strokeKey","textKey","fillKey","baseline","textFillStyle","textStrokeStyle","textScale","textOffsetX","textOffsetY","textRotateWithView","textRotation","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","TextBuilder","BuilderGroup","builderInstructions","zKey","builders","builderKey","builderInstruction","builderType","zIndexKey","replays","replay","Constructor","drawTextOnPath","startM","segmentM","advance","beginX","beginY","startOffset","startLength","endM","reverse","flat","PI","singleSegment","previousAngle","iStart","charLength","tmpExtent","p4","getDeclutterBox","replayImageOrLabelArgs","rtlRegEx","horizontalTextAlign","align","createTextChunks","acc","line","Executor","overlaps","deferredRendering","renderWidth","leftRight","strokeInstructions","fillInstructions","lineOffset","widthHeightIndex","lineWidthIndex","previousFont","fillStrokeArgs","sheetWidth","sheetHeight","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","scaledCanvasSize","imageOrLabel","dimensions","box","strokePadding","alignAndScale","repeatSize","featureCallback","hitExtent","declutterTree","zIndexContext","pixelCoordinates","transformSetFromArray","prevX","prevY","roundX","roundY","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","currentGeometry","labelWithAnchor","backgroundFill","backgroundStroke","widthIndex","imageArgs","imageDeclutterMode","imageDeclutterBox","imageDeclutter","renderImage","renderText","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","drawChars","part","ALL","DECLUTTER","NON_DECLUTTER","ExecutorGroup","allInstructions","renderBuffer","flatClipCoords","executors","instructionByZindex","candidates","declutteredFeatures","contextSize","newContext","getPixelIndexArray","idx","executor","targetContext","builderTypes","maxBuilderTypes","requireClip","deferredZIndexContexts","circlePixelIndexArrayCache","maxDistanceSq","distances","distanceSq","pixelIndex","CanvasImmediateRenderer","userTransform","localTransform","close","geometries","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imagePixelRatio","imageAnchor","imageOrigin","imageScale","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","HIT_DETECT_RESOLUTION","createHitDetectionImageData","userExtent","featureCount","indexFactor","featuresByZIndex","featureStyleFunction","originalStyle","imgSize","imgContext","byGeometryType","zIndexKeys","geomAndStyle","kk","hitDetect","resultFeatures","SIMPLIFY_TOLERANCE","GEOMETRY_RENDERERS","renderPointGeometry","renderLineStringGeometry","renderPolygonGeometry","renderMultiPointGeometry","renderMultiLineStringGeometry","renderMultiPolygonGeometry","renderGeometryCollectionGeometry","renderCircleGeometry","defaultOrder","feature1","feature2","getSquaredTolerance","getTolerance","builderGroup","circleReplay","textReplay","renderFeature","replayGroup","declutter","loadingPromises","loading","renderFeatureInternal","renderGeometry","geometryRenderer","declutterBuilderGroup","lineStringReplay","polygonReplay","hasText","imageReplay","hasImage","CanvasVectorLayerRenderer","vectorLayer","executorGroup","declutterable","vectorSource","endWorld","world","intersectsExtent","getSquaredRenderTolerance","executorGroups","animating","interacting","updateWhileAnimating","updateWhileInteracting","frameStateExtent","vectorLayerRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","defaultRenderOrder","renderedExtent","loadExtents","wrapCoordinateX","loadExtent","wrapExtentX","CanvasBuilderGroup","getRenderTolerance","ready","dirty","replayGroupInstructions","VectorLayer","prideFlag","transFlag","nonbinaryFlag","areas","Wien","viewFromArea","averageCoords","loadData","featureLine","featureDot","loadAllData","__vitePreload","imp","PARAMETER_REGEXP","REPLACE_VARIABLE_REGEXP","WILDCARD_REGEXP","REPLACE_WILDCARD","NOT_SURE_REGEXP","REPLACE_NOT_SURE","START_BY_SLASH_REGEXP","MATCH_REGEXP_FLAGS","getCurrentEnvURL","windowAvailable","clean","isFunction","extractHashFromURL","regExpResultToParams","extractGETParameters","parseQuery","queryString","query","pairs","pair","matchRoute","route","_extractGETParameters","current","GETParams","paramNames","full","dots","regexp","pushStateAvailable","undefinedOrTrue","parseNavigateOptions","resolveOptions","str","temp","accumulateHooks","hooks","Q","funcs","next","moveForward","one","two","setLocationPath","matchPathToRegisteredRoutes","checkForDeprecationMethods","checkForForceOp","isWindowAvailable","isPushStateAvailable","updateBrowserURL","isItUsingHash","checkForLeaveHook","instance","oldMatch","_","leaveLoopDone","runHook","newLocationVSOldMatch","someOfTheLastOnesMatch","shouldStop","checkForBeforeHook","callHandler","checkForAfterHook","checkForAlreadyHook","checkForNotFoundHandler","notFoundRoute","hashString","notFoundMatch","errorOut","flushCurrent","updateState","foundLifecycle","notFoundLifeCycle","_ref","notFoundHandled","_extends","processMatches","nextMatch","waitingList","DEFAULT_LINK_SELECTOR","Navigo","appRoute","DEFAULT_RESOLVE_OPTIONS","root","routes","destroyed","genericHooks","_checkForAHash","composePathWithRoot","createRoute","handler","on","_this","_path$p","_handler","_hooks","to","navigate","navigateOptions","_ref2","navigateByName","generate","off","what","destroy","notFound","updatePageLinks","findLinks","link","location","setGenericHooks","lastResolved","getLinkPath","pathToMatchObject","getCurrentLocation","directMatchWithRegisteredRoutes","directMatchWithLocation","currentLocation","annotatePathWithRoot","addHook","getRoute","nameOrHandler","__markAsClean","CustomNavigo","router","createElement","createElementWithContent","innerText","el","createAElement","dlSet","dt","urlText","dl","InfoButton","opt_options","showOverlay","hideOverlay","setOverlay","content","h1","MapButton","osmLayer","basemapLayer","orthoLayer","zebraLayer","OrthophotoControl","BasemapControl","AcceptAllControl","module","retina","basemap_lq_url","basemap_hq_url","basemap_attribution","basemap_url","Vector2d","Line","featureProperties","crossing","numStripes","drawZebraCrossing","zebraPatterns","crossingsStyle","prideFlagStyle","transFlagStyle","nonbinaryFlagStyle","vectorLineLayer","popups"],"ignoreList":[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220],"sources":["../../node_modules/matomo-lite-tracker/src/aliases.ts","../../node_modules/matomo-lite-tracker/src/url.ts","../../node_modules/matomo-lite-tracker/src/util.ts","../../node_modules/matomo-lite-tracker/src/tracker.ts","../../node_modules/matomo-lite-tracker/src/linktracking.ts","../../src/matomo.ts","../../node_modules/ol/events/Event.js","../../node_modules/ol/ObjectEventType.js","../../node_modules/ol/Disposable.js","../../node_modules/ol/array.js","../../node_modules/ol/functions.js","../../node_modules/ol/obj.js","../../node_modules/ol/events/Target.js","../../node_modules/ol/events/EventType.js","../../node_modules/ol/events.js","../../node_modules/ol/Observable.js","../../node_modules/ol/util.js","../../node_modules/ol/Object.js","../../node_modules/ol/CollectionEventType.js","../../node_modules/ol/Collection.js","../../node_modules/ol/layer/Property.js","../../node_modules/ol/asserts.js","../../node_modules/ol/math.js","../../node_modules/ol/layer/Base.js","../../node_modules/ol/render/EventType.js","../../node_modules/ol/ViewHint.js","../../node_modules/ol/ViewProperty.js","../../node_modules/ol/tilegrid/common.js","../../node_modules/ol/proj/Units.js","../../node_modules/ol/proj/Projection.js","../../node_modules/ol/proj/epsg3857.js","../../node_modules/ol/proj/epsg4326.js","../../node_modules/ol/proj/projections.js","../../node_modules/ol/proj/transforms.js","../../node_modules/ol/extent/Relationship.js","../../node_modules/ol/extent.js","../../node_modules/ol/coordinate.js","../../node_modules/ol/sphere.js","../../node_modules/ol/console.js","../../node_modules/ol/proj.js","../../node_modules/ol/centerconstraint.js","../../node_modules/ol/resolutionconstraint.js","../../node_modules/ol/rotationconstraint.js","../../node_modules/ol/easing.js","../../node_modules/ol/transform.js","../../node_modules/ol/geom/flat/transform.js","../../node_modules/ol/geom/Geometry.js","../../node_modules/ol/geom/SimpleGeometry.js","../../node_modules/ol/geom/flat/closest.js","../../node_modules/ol/geom/flat/deflate.js","../../node_modules/ol/geom/flat/simplify.js","../../node_modules/ol/geom/flat/inflate.js","../../node_modules/ol/geom/flat/area.js","../../node_modules/ol/geom/LinearRing.js","../../node_modules/ol/geom/Point.js","../../node_modules/ol/geom/flat/contains.js","../../node_modules/ol/geom/flat/interiorpoint.js","../../node_modules/ol/geom/flat/segments.js","../../node_modules/ol/geom/flat/intersectsextent.js","../../node_modules/ol/geom/flat/reverse.js","../../node_modules/ol/geom/flat/orient.js","../../node_modules/ol/geom/Polygon.js","../../node_modules/ol/View.js","../../node_modules/ol/layer/Layer.js","../../node_modules/quickselect/index.js","../../node_modules/rbush/index.js","../../node_modules/ol/ImageState.js","../../node_modules/ol/size.js","../../node_modules/ol/style/Image.js","../../node_modules/color-space/rgb.js","../../node_modules/color-space/xyz.js","../../node_modules/color-space/luv.js","../../node_modules/color-space/lchuv.js","../../node_modules/color-name/index.js","../../node_modules/color-parse/index.js","../../node_modules/color-space/hsl.js","../../node_modules/color-rgba/index.js","../../node_modules/ol/color.js","../../node_modules/ol/has.js","../../node_modules/ol/dom.js","../../node_modules/ol/Image.js","../../node_modules/ol/style/IconImageCache.js","../../node_modules/ol/style/IconImage.js","../../node_modules/ol/colorlike.js","../../node_modules/ol/css.js","../../node_modules/ol/render/canvas.js","../../node_modules/ol/style/RegularShape.js","../../node_modules/ol/style/Circle.js","../../node_modules/ol/style/Fill.js","../../node_modules/ol/style/Stroke.js","../../node_modules/ol/style/Style.js","../../node_modules/ol/style/Icon.js","../../node_modules/ol/style/Text.js","../../node_modules/ol/expr/expression.js","../../node_modules/ol/expr/cpu.js","../../node_modules/ol/render/canvas/style.js","../../node_modules/ol/layer/BaseVector.js","../../node_modules/ol/renderer/Map.js","../../node_modules/ol/render/Event.js","../../node_modules/ol/renderer/Composite.js","../../node_modules/ol/layer/Group.js","../../node_modules/ol/MapEvent.js","../../node_modules/ol/MapBrowserEvent.js","../../node_modules/ol/MapBrowserEventType.js","../../node_modules/ol/pointer/EventType.js","../../node_modules/ol/MapBrowserEventHandler.js","../../node_modules/ol/MapEventType.js","../../node_modules/ol/MapProperty.js","../../node_modules/ol/structs/PriorityQueue.js","../../node_modules/ol/TileState.js","../../node_modules/ol/TileQueue.js","../../node_modules/ol/control/Control.js","../../node_modules/ol/control/Attribution.js","../../node_modules/ol/control/Rotate.js","../../node_modules/ol/control/Zoom.js","../../node_modules/ol/control/defaults.js","../../node_modules/ol/interaction/Property.js","../../node_modules/ol/interaction/Interaction.js","../../node_modules/ol/interaction/DoubleClickZoom.js","../../node_modules/ol/interaction/Pointer.js","../../node_modules/ol/events/condition.js","../../node_modules/ol/interaction/DragPan.js","../../node_modules/ol/interaction/DragRotate.js","../../node_modules/ol/render/Box.js","../../node_modules/ol/interaction/DragBox.js","../../node_modules/ol/interaction/DragZoom.js","../../node_modules/ol/events/Key.js","../../node_modules/ol/interaction/KeyboardPan.js","../../node_modules/ol/interaction/KeyboardZoom.js","../../node_modules/ol/Kinetic.js","../../node_modules/ol/interaction/MouseWheelZoom.js","../../node_modules/ol/interaction/PinchRotate.js","../../node_modules/ol/interaction/PinchZoom.js","../../node_modules/ol/interaction/defaults.js","../../node_modules/ol/Map.js","../../node_modules/ol/structs/LRUCache.js","../../node_modules/ol/Tile.js","../../node_modules/ol/ImageTile.js","../../node_modules/ol/reproj/common.js","../../node_modules/ol/reproj/Triangulation.js","../../node_modules/ol/reproj.js","../../node_modules/ol/reproj/Tile.js","../../node_modules/ol/source/TileEventType.js","../../node_modules/ol/source/Source.js","../../node_modules/ol/TileRange.js","../../node_modules/ol/tilecoord.js","../../node_modules/ol/tilegrid/TileGrid.js","../../node_modules/ol/tilegrid.js","../../node_modules/ol/source/Tile.js","../../node_modules/ol/uri.js","../../node_modules/ol/tileurlfunction.js","../../node_modules/ol/source/UrlTile.js","../../node_modules/ol/source/TileImage.js","../../node_modules/ol/source/XYZ.js","../../node_modules/ol/Feature.js","../../node_modules/ol/structs/RBush.js","../../node_modules/ol/geom/flat/interpolate.js","../../node_modules/ol/geom/flat/length.js","../../node_modules/ol/geom/LineString.js","../../node_modules/ol/geom/flat/center.js","../../node_modules/ol/render/Feature.js","../../node_modules/ol/source/VectorEventType.js","../../node_modules/ol/loadingstrategy.js","../../node_modules/ol/featureloader.js","../../node_modules/ol/source/Vector.js","../../node_modules/ol/DataTile.js","../../node_modules/ol/reproj/DataTile.js","../../node_modules/ol/source/OSM.js","../../node_modules/ol/renderer/Layer.js","../../node_modules/ol/render/canvas/ZIndexContext.js","../../node_modules/ol/renderer/canvas/Layer.js","../../node_modules/ol/layer/TileProperty.js","../../node_modules/ol/layer/BaseTile.js","../../node_modules/ol/renderer/canvas/TileLayer.js","../../node_modules/ol/layer/Tile.js","../../node_modules/ol/render/canvas/Instruction.js","../../node_modules/ol/render/VectorContext.js","../../node_modules/ol/render/canvas/Builder.js","../../node_modules/ol/render/canvas/ImageBuilder.js","../../node_modules/ol/render/canvas/LineStringBuilder.js","../../node_modules/ol/render/canvas/PolygonBuilder.js","../../node_modules/ol/geom/flat/linechunk.js","../../node_modules/ol/geom/flat/straightchunk.js","../../node_modules/ol/render/canvas/TextBuilder.js","../../node_modules/ol/render/canvas/BuilderGroup.js","../../node_modules/ol/geom/flat/textpath.js","../../node_modules/ol/render/canvas/Executor.js","../../node_modules/ol/render/canvas/ExecutorGroup.js","../../node_modules/ol/render/canvas/Immediate.js","../../node_modules/ol/render/canvas/hitdetect.js","../../node_modules/ol/renderer/vector.js","../../node_modules/ol/renderer/canvas/VectorLayer.js","../../node_modules/ol/layer/Vector.js","../../assets/prideflag.svg","../../assets/transflag.svg","../../assets/nonbinaryflag.svg","../../src/areaData.ts","../../utils/geo.ts","../../src/features.ts","../../src/loadData.ts","../../node_modules/navigo/lib/es/constants.js","../../node_modules/navigo/lib/es/utils.js","../../node_modules/navigo/lib/es/Q.js","../../node_modules/navigo/lib/es/middlewares/setLocationPath.js","../../node_modules/navigo/lib/es/middlewares/matchPathToRegisteredRoutes.js","../../node_modules/navigo/lib/es/middlewares/checkForDeprecationMethods.js","../../node_modules/navigo/lib/es/middlewares/checkForForceOp.js","../../node_modules/navigo/lib/es/middlewares/updateBrowserURL.js","../../node_modules/navigo/lib/es/middlewares/checkForLeaveHook.js","../../node_modules/navigo/lib/es/middlewares/checkForBeforeHook.js","../../node_modules/navigo/lib/es/middlewares/callHandler.js","../../node_modules/navigo/lib/es/middlewares/checkForAfterHook.js","../../node_modules/navigo/lib/es/middlewares/checkForAlreadyHook.js","../../node_modules/navigo/lib/es/middlewares/checkForNotFoundHandler.js","../../node_modules/navigo/lib/es/middlewares/errorOut.js","../../node_modules/navigo/lib/es/middlewares/flushCurrent.js","../../node_modules/navigo/lib/es/middlewares/updateState.js","../../node_modules/navigo/lib/es/lifecycles.js","../../node_modules/navigo/lib/es/middlewares/processMatches.js","../../node_modules/navigo/lib/es/middlewares/waitingList.js","../../node_modules/navigo/lib/es/index.js","../../src/router.ts","../../src/domutils.ts","../../src/info.ts","../../src/toggle.ts","../../src/utils.ts","../../src/map.ts","../../src/main.ts"],"sourcesContent":["export const documentAlias = document\nexport const navigatorAlias = navigator\nexport const screenAlias = screen\nexport const windowAlias = window\nexport const locationAlias = windowAlias.location\nexport const performanceAlias = windowAlias.performance\n","import {locationAlias} from \"./aliases\";\nimport type {IntBoolean} from \"./types\";\n\n\nexport function getCurrentURL(): string {\n // https://stackoverflow.com/a/5818284/4398037\n return locationAlias.protocol + '//' +\n locationAlias.hostname +\n (locationAlias.port ? \":\" + locationAlias.port : \"\") +\n locationAlias.pathname +\n (locationAlias.search ? locationAlias.search : \"\")\n}\n\nexport function boolToIntBool(value: boolean): IntBoolean {\n return value ? 1 : 0\n}\n","import {navigatorAlias} from \"./aliases\";\n\nexport function generateUniqueId(length: number = 6): string {\n let id = '';\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const charLen = chars.length;\n\n for (let i = 0; i < length; i++) {\n id += chars.charAt(Math.floor(Math.random() * charLen));\n }\n\n return id;\n}\n\nexport function isDoNotTrackEnabled(): boolean {\n const dnt = navigatorAlias.doNotTrack\n return dnt === \"yes\" || dnt === \"1\"\n}\n","import {documentAlias, navigatorAlias} from \"./aliases\";\nimport {boolToIntBool, getCurrentURL} from \"./url\";\nimport type {CustomDimensionName, CustomDimensions, IntBoolean, LinkType} from \"./types\";\nimport type {BrowserFeatures} from \"./browserfeatures\";\nimport {generateUniqueId} from \"./util\";\nimport type {PerformanceMetric} from \"./performancetracking\";\n\n\n// the query paramters the Matomo API expects to recieve\ninterface Request {\n idsite: number\n // always 1\n rec: 1\n // random string\n r: string\n // local hour\n h: number,\n // local minute\n m: number,\n // local second\n s: number,\n // current URL\n url: string\n // referrer URL\n urlref?: string\n // userID\n uid?: string\n // random ID\n _id?: any\n // new visitor\n _nid?: any // (maybe always send \"1\"?)\n\n // campaign tracking (ignored for now)\n _rcn?: string\n _rck?: string\n _refts?: number\n _ref?: string\n\n // character set (not needed if utf-8)\n cs?: string\n\n send_image: IntBoolean\n\n pdf?: IntBoolean\n qt?: IntBoolean\n realp?: IntBoolean\n wma?: IntBoolean\n fla?: IntBoolean\n java?: IntBoolean\n ag?: IntBoolean\n\n cookie?: IntBoolean\n res?: string\n\n\n // custom dimensions\n [id: CustomDimensionName]: string\n\n // Page View ID\n pv_id?: string\n\n // fallback for everything else\n [id: string]: any\n\n}\n\ninterface PageViewRequest extends Request {\n // Title\n action_name: string\n pf_net?: number\n pf_srv?: number\n pf_tfr?: number\n pf_dm1?: number\n pf_dm2?: number\n pf_onl?: number\n\n}\n\ninterface EventRequest extends Request {\n // Event Category\n e_c: string\n // Event Action\n e_a: string\n // Event Name\n e_n?: string\n // Event Value\n e_v?: number\n}\n\ninterface SearchRequest extends Request {\n // Search Keyword\n search: string\n // Search Category\n search_cat?: string\n // Search Count\n search_count?: number\n}\n\ninterface GoalRequest extends Request {\n idgoal: number | string\n revenue?: number | string\n}\n\ninterface OutlinkRequest extends Request {\n link?: string\n download?: string\n}\n\ninterface PingRequest extends Request {\n ping: 1\n}\n\nexport class MatomoLiteTracker {\n siteID: number\n matomoURL: string\n phpFileName: string = \"matomo.php\"\n useSendBeacon: boolean = false\n performanceMetric?: PerformanceMetric\n userID?: string\n customURL?: string\n browserFeatures?: BrowserFeatures\n customDimensions?: CustomDimensions\n requestMethod: \"GET\" | \"POST\" = \"GET\"\n private pageViewID?: string;\n\n constructor(matomoURL: string, siteID: number,) {\n this.matomoURL = matomoURL;\n this.siteID = siteID;\n }\n\n getRequest(): Request {\n const now = new Date()\n const parameters: Request = {\n idsite: this.siteID,\n rec: 1,\n r: String(Math.random()).slice(2, 8),\n h: now.getHours(),\n m: now.getMinutes(),\n s: now.getSeconds(),\n url: this.customURL ? this.customURL : getCurrentURL(),\n send_image: 1\n }\n const referrer = documentAlias.referrer\n if (referrer) {\n parameters.urlref = referrer\n }\n if (this.pageViewID) {\n parameters.pv_id = this.pageViewID\n }\n if (this.userID) {\n parameters.uid = this.userID\n }\n if (this.browserFeatures) {\n const features = this.browserFeatures\n parameters.res = features.res\n parameters.cookie = boolToIntBool(features.cookie)\n if (features.plugins) {\n\n Object.entries(features.plugins).forEach(([key, supported]) => {\n parameters[key] = boolToIntBool(supported)\n })\n }\n }\n const cd = this.customDimensions\n if (cd) {\n for (let customDimensionsKey in cd) {\n parameters[`dimension${customDimensionsKey}`] = cd[customDimensionsKey]\n }\n }\n return parameters\n }\n\n trackPageview(customTitle?: string) {\n this.pageViewID = generateUniqueId()\n const parameters = this.getRequest() as PageViewRequest\n parameters.action_name = customTitle ? customTitle : documentAlias.title\n const performanceMetric = this.performanceMetric\n if (performanceMetric) {\n Object.entries(performanceMetric).forEach(([key, value]) => {\n if (typeof value !== \"undefined\") {\n parameters[key] = value\n }\n })\n\n }\n this.sendRequest(parameters)\n }\n\n trackEvent(category: string, action: string, name?: string, value?: number) {\n const parameters = this.getRequest() as EventRequest\n parameters.e_c = category\n parameters.e_a = action\n if (name) {\n parameters.e_n = name\n }\n if (value) {\n parameters.e_v = value\n }\n this.sendRequest(parameters)\n }\n\n trackSiteSearch(keyword: string, category?: string, resultsCount?: number) {\n const parameters = this.getRequest() as SearchRequest\n parameters.search = keyword\n if (category) {\n parameters.search_cat = category\n }\n if (resultsCount) {\n parameters.search_count = resultsCount\n }\n this.sendRequest(parameters)\n }\n\n trackGoal(idGoal: number | string, customRevenue?: number | string) {\n const parameters = this.getRequest() as GoalRequest\n parameters.idgoal = idGoal\n if (customRevenue) {\n parameters.revenue = customRevenue\n }\n this.sendRequest(parameters)\n }\n\n trackLink(sourceUrl: string, linkType: LinkType) {\n const parameters = this.getRequest() as OutlinkRequest\n parameters[linkType] = sourceUrl\n this.sendRequest(parameters, true)\n }\n\n ping() {\n const parameters = this.getRequest() as PingRequest\n parameters.ping = 1\n this.sendRequest(parameters)\n }\n\n sendRequest(parameters: Request, forceBeacon: boolean = false) {\n const requestMethod = this.requestMethod\n const params = new URLSearchParams(parameters)\n let url = this.matomoURL\n + (this.matomoURL.endsWith(\"/\") ? \"\" : \"/\")\n + this.phpFileName\n if (this.useSendBeacon || forceBeacon) {\n navigatorAlias.sendBeacon(url, params)\n } else {\n if (requestMethod === \"GET\") {\n url += \"?\" + params.toString()\n }\n const options: RequestInit = {\n method: requestMethod,\n mode: \"no-cors\",\n cache: \"no-cache\",\n credentials: \"omit\",\n }\n if (requestMethod === \"POST\") {\n options.body = params\n }\n fetch(url, options).then()\n }\n }\n\n trackPageviewOnPageload(customTitle?: string) {\n if (document.readyState == \"complete\") {\n this.trackPageview(customTitle)\n } else {\n document.addEventListener(\"DOMContentLoaded\", () => this.trackPageview(customTitle))\n }\n }\n}\n","import type {MatomoLiteTracker} from \"./tracker\"\nimport {documentAlias, locationAlias} from \"./aliases\"\nimport type {LinkType} from \"./types\";\n\n// strongly based on clickHandler of matomo.js\n\n//all names based on right-handed mouse\nenum MouseButton {\n Left = 0,\n Wheel = 1,\n Right = 2\n}\n\nconst scriptProtocol = new RegExp('^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):', 'i');\n\nexport const defaultDownloadFileExtensions = ['7z', 'aac', 'apk', 'arc', 'arj', 'asf', 'asx', 'avi', 'azw3', 'bin', 'csv', 'deb', 'dmg', 'doc', 'docx', 'epub', 'exe', 'flv', 'gif', 'gz', 'gzip', 'hqx', 'ibooks', 'jar', 'jpg', 'jpeg', 'js', 'mobi', 'mp2', 'mp3', 'mp4', 'mpg', 'mpeg', 'mov', 'movie', 'msi', 'msp', 'odb', 'odf', 'odg', 'ods', 'odt', 'ogg', 'ogv', 'pdf', 'phps', 'png', 'ppt', 'pptx', 'qt', 'qtm', 'ra', 'ram', 'rar', 'rpm', 'rtf', 'sea', 'sit', 'tar', 'tbz', 'tbz2', 'bz', 'bz2', 'tgz', 'torrent', 'txt', 'wav', 'wma', 'wmv', 'wpd', 'xls', 'xlsx', 'xml', 'z', 'zip']\n\nexport function enableLinkTracking(\n matomo: MatomoLiteTracker,\n downloadFileExtensions?: string[],\n alsoTrackMouseclicks: boolean = false,\n ignoredClasses = [\"matomo_ignore\", \"piwik_ignore\"],\n) {\n\n function getLinkType(element: HTMLAnchorElement, href: string): LinkType {\n if (element.classList.contains(\"matomo_link\")) {\n return \"link\"\n }\n if (\n element.classList.contains(\"matomo_download\")\n || element.hasAttribute(\"download\")\n ) {\n return \"download\"\n }\n if (downloadFileExtensions) {\n const downloadExtensionsPattern = new RegExp('\\\\.(' + downloadFileExtensions.join('|') + ')([?&#]|$)', 'i');\n if (downloadExtensionsPattern.test(href)) {\n return \"download\"\n }\n }\n return \"link\"\n\n }\n\n function processClick(element: HTMLAnchorElement) {\n if (!element.hasAttribute(\"href\")) {\n return\n }\n\n const href = element.href\n if (scriptProtocol.test(href)) {\n return;\n }\n const linkType = getLinkType(element, href)\n\n if (element.host === locationAlias.host) {\n // only track external hosts\n return;\n }\n\n matomo.trackLink(href, linkType)\n }\n\n\n function getLinkTarget(event: MouseEvent): HTMLAnchorElement | undefined {\n let target = event.target\n if (!(target instanceof Element)) {\n return\n }\n let nodeName = target.nodeName\n for (const ignoredClass of ignoredClasses) {\n if (target.classList.contains(ignoredClass)) {\n return\n }\n }\n\n while (nodeName != \"A\" && target && target.parentNode) {\n target = target.parentNode\n if (!(target instanceof Element)) {\n return\n }\n nodeName = target.nodeName\n }\n\n if (target && nodeName == \"A\") {\n return target as HTMLAnchorElement\n }\n return\n }\n\n\n function clickHandler(event: MouseEvent) {\n const target = getLinkTarget(event)\n if (!target) {\n return\n }\n\n const mouseButton: MouseButton = event.button\n let lastButton: MouseButton|undefined\n let lastTarget: Element|undefined\n switch (event.type) {\n case \"click\" :\n const ignoreClick = alsoTrackMouseclicks && mouseButton === MouseButton.Wheel\n if (!ignoreClick) {\n processClick(target)\n }\n break\n case \"mousedown\":\n if (mouseButton === MouseButton.Wheel) {\n lastButton = mouseButton\n lastTarget = target\n } else {\n lastButton = lastTarget = undefined\n }\n break\n case \"mouseup\":\n if (mouseButton === lastButton && target === lastTarget) {\n processClick(target)\n }\n lastButton = lastTarget = undefined\n break\n case \"contextmenu\":\n processClick(target)\n break\n }\n\n }\n\n const body = documentAlias.body\n body.addEventListener(\"click\", clickHandler, true)\n if (alsoTrackMouseclicks) {\n body.addEventListener(\"mouseup\", clickHandler, true)\n body.addEventListener(\"mousedown\", clickHandler, true)\n body.addEventListener(\"contextmenu\", clickHandler, true)\n }\n}\n","import {MatomoLiteTracker} from \"matomo-lite-tracker/src/tracker\"\nimport {enableLinkTracking} from \"matomo-lite-tracker/src/linktracking\"\nimport {isDoNotTrackEnabled} from \"matomo-lite-tracker/src/util\"\n\nexport let matomo: MatomoLiteTracker | undefined\n\nexport function initMatomo(): void {\n if (isDoNotTrackEnabled()) {\n return\n }\n const m = new MatomoLiteTracker(\"https://matomo.lw1.at\", 32)\n\n\n enableLinkTracking(m, [])\n matomo = m\n}\n\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 || ascending;\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 sorting arrays in ascending order. Safe to use for numeric values.\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 ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\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 greater than, equal to, or less than the second.\n */\nexport function descending(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 if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\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 || ascending;\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 /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\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|null}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object|null}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>|null}\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 * @override\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 if (!this.listeners_) {\n return;\n }\n const listeners = this.listeners_[type];\n if (!listeners) {\n return;\n }\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\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 (once) {\n const originalListener = listener;\n /**\n * @this {typeof target}\n */\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(thisArg ?? this, arguments);\n };\n } else if (thisArg && thisArg !== target) {\n listener = listener.bind(thisArg);\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 }\n return listen(this, /** @type {string} */ (type), listener);\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/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 = '10.2.1';\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|null}\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 * Get an object of all property names and values.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return 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 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 Error('Duplicate item added to a unique collection');\n }\n }\n }\n}\n\nexport default Collection;\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/asserts\n */\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {string} errorMessage Error message.\n */\nexport function assert(assertion, errorMessage) {\n if (!assertion) {\n throw new Error(errorMessage);\n }\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|null} 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/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 | undefined} [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(\n typeof properties[LayerProperty.OPACITY] === 'number',\n 'Layer opacity must be a number',\n );\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. Returns Infinity if\n * the layer has no maximum resolution set.\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. Returns 0 if\n * the layer has no minimum resolution set.\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. Returns -Infinity if\n * the layer has no minimum zoom set.\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. Returns Infinity if\n * the layer has no maximum zoom set.\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 value of this layer's `visible` property. To find out whether the layer\n * is visible on a map, use `isVisible()` instead.\n * @return {boolean} The value of the `visible` property 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. Returns undefined if the layer is unmanaged.\n * @return {number|undefined} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number|undefined} */ (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', '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 * @override\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/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/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 * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\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 += stride) {\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 * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\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 += stride) {\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/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';\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 }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\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 }\n return extent.slice();\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 }\n return [minX, minY, maxX, maxY];\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 throw new Error('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 }\n return extent;\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 if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\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 * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\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 && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n 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 }\n 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/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`, `xyz` or `xyzm` coordinate.\n * 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.js';\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.js';\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.js';\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.js';\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.js';\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 }\n return '';\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.js';\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.js';\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.js';\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.js';\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 }\n return '';\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.js';\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.js';\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/console\n */\n\n/**\n * @typedef {'info'|'warn'|'error'|'none'} Level\n */\n\n/**\n * @type {Object}\n */\nconst levels = {\n info: 1,\n warn: 2,\n error: 3,\n none: 4,\n};\n\n/**\n * @type {number}\n */\nlet level = levels.info;\n\n/**\n * Set the logging level. By default, the level is set to 'info' and all\n * messages will be logged. Set to 'warn' to only display warnings and errors.\n * Set to 'error' to only display errors. Set to 'none' to silence all messages.\n *\n * @param {Level} l The new level.\n */\nexport function setLevel(l) {\n level = levels[l];\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function log(...args) {\n if (level > levels.info) {\n return;\n }\n console.log(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function warn(...args) {\n if (level > levels.warn) {\n return;\n }\n console.warn(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function error(...args) {\n if (level > levels.error) {\n return;\n }\n console.error(...args); // eslint-disable-line no-console\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';\nimport {warn} from './console.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 * @callback TransformFunction\n * @param {Array} input\n * @param {Array} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array}\n *\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 * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\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 * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\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 }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\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] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; 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 }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\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 * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\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 * @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.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\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 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 sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\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 destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\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 destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\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/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 }\n return undefined;\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 }\n return undefined;\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 }\n return undefined;\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 }\n return undefined;\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 }\n return undefined;\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 }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} [tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(tolerance) {\n const t = tolerance === undefined ? toRadians(5) : tolerance;\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 || rotation === undefined) {\n return rotation;\n }\n\n if (Math.abs(rotation) <= t) {\n return 0;\n }\n return rotation;\n }\n );\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 }\n return 1 - inAndOut(2 * (t - 0.5));\n}\n","/**\n * @module ol/transform\n */\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, '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 {Array}\n */\nconst matrixPrecision = [1e6, 1e6, 1e6, 1e6, 2, 2];\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 =\n 'matrix(' +\n mat\n .map(\n (value, i) =>\n Math.round(value * matrixPrecision[i]) / matrixPrecision[i],\n )\n .join(', ') +\n ')';\n return transformString;\n}\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 * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\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 for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\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} 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(\n (revision, squaredTolerance, transform) => {\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 /**\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 {this} 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;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @override\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 * @override\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 }\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 * @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 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 }\n coordinates = /** @type {Array} */ (coordinates[0]);\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 * @override\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(\n this.flatCoordinates,\n this.flatCoordinates,\n this.layout.startsWith('XYZ') ? 3 : 2,\n this.stride,\n );\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 * @override\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 * @override\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 * @override\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 */\nexport function 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 }\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n transform,\n dest,\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 }\n return minSquaredDistance;\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 /** @type {Array} */\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 /** @type {Array} */\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 const x0 = flatCoordinates[end - stride];\n const y0 = flatCoordinates[end - stride + 1];\n let dx1 = 0;\n let dy1 = 0;\n for (; offset < end; offset += stride) {\n const dx2 = flatCoordinates[offset] - x0;\n const dy2 = flatCoordinates[offset + 1] - y0;\n twiceArea += dy1 * dx2 - dx1 * dy2;\n dx1 = dx2;\n dy1 = dy2;\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 * @override\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 * @override\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 * @override\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 * @override\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n /** @type {Array} */\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 * @override\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 * @override\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 * @override\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 * @override\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 * @override\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 }\n return minSquaredDistance;\n }\n\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n * @override\n */\n getCoordinates() {\n return 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 * @override\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 * @override\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 * @override\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 * @override\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 {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.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(ascending);\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 }\n return [pointX, y, maxSegmentLength];\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 /** @type {Array} */\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|undefined} 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 construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\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 const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\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, isEmpty} 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|null}\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|null}\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 * @override\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 * @override\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 * @override\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 * @override\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 /** @type {import(\"../coordinate.js\").Coordinate} */ (\n this.flatInteriorPoint_\n );\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 /** @type {Array} */ (this.orientedFlatCoordinates_);\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n * @override\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n /** @type {Array} */\n const simplifiedFlatCoordinates = [];\n /** @type {Array} */\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 * @override\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 * @override\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 * @override\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 if (isEmpty(extent)) {\n throw new Error('Cannot create polygon from empty extent');\n }\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/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\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\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 (in view projection coordinates).\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 * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array} [layerStatesArray] Layer states.\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.getCenterInternal();\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 }\n return size;\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 }\n return this.hints_.slice();\n }\n\n /**\n * Calculate the extent for the current view state and the passed box size.\n * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n * into which the calculated extent should fit. Defaults to the size of the\n * map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired\n * box size (e.g. `map.getSize()`).\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, 'The view center is not defined');\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 'The view resolution is not defined');\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, '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 * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n */\n getViewStateAndExtent() {\n return {\n viewState: this.getState(),\n extent: this.calculateExtent(),\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_?.length) {\n if (this.resolutions_.length === 1) {\n return this.resolutions_[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 }\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\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 'Invalid extent or geometry provided as `geometry`',\n );\n if (Array.isArray(geometryOrExtent)) {\n assert(\n !isEmpty(geometryOrExtent),\n 'Cannot fit empty extent provided as `geometry`',\n );\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 if (!this.getInteracting()) {\n return;\n }\n this.setHint(ViewHint.INTERACTING, -1);\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 }\n if (constrainRotation === false) {\n return rotationNone;\n }\n if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n return rotationNone;\n }\n return disable;\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/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 View from '../View.js';\nimport {assert} from '../asserts.js';\nimport {intersects} from '../extent.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {function(import(\"../Map.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/**\n * @typedef {'sourceready'|'change:source'} LayerEventType\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 * A `sourceready` event is fired when the layer's source is ready.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @fires import(\"../events/Event.js\").BaseEvent#sourceready\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 * @private\n * @type {boolean}\n */\n this.sourceReady_ = false;\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 * @override\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 * @override\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 * @override\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 if (this.sourceReady_ || this.getSource().getState() !== 'ready') {\n return;\n }\n this.sourceReady_ = true;\n this.dispatchEvent('sourceready');\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n this.sourceReady_ = false;\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this,\n );\n if (source.getState() === 'ready') {\n this.sourceReady_ = true;\n setTimeout(() => {\n this.dispatchEvent('sourceready');\n }, 0);\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 Promise.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 * The layer is visible on the map view, i.e. within its min/max resolution or zoom and\n * extent, not set to `visible: false`, and not inside a layer group that is set\n * to `visible: false`.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {boolean} The layer is visible in the map view.\n * @api\n */\n isVisible(view) {\n let frameState;\n const map = this.getMapInternal();\n if (!view && map) {\n view = map.getView();\n }\n if (view instanceof View) {\n frameState = {\n viewState: view.getState(),\n extent: view.calculateExtent(),\n };\n } else {\n frameState = view;\n }\n if (!frameState.layerStatesArray && map) {\n frameState.layerStatesArray = map.getLayerGroup().getLayerStatesArray();\n }\n let layerState;\n if (frameState.layerStatesArray) {\n layerState = frameState.layerStatesArray.find(\n (layerState) => layerState.layer === this,\n );\n } else {\n layerState = this.getLayerState();\n }\n\n const layerExtent = this.getExtent();\n\n return (\n inView(layerState, frameState.viewState) &&\n (!layerExtent || intersects(layerExtent, frameState.extent))\n );\n }\n\n /**\n * Get the attributions of the source of this layer for the given view.\n * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n * Only required when the layer is not added to a map.\n * @return {Array} Attributions for this layer at the given view.\n * @api\n */\n getAttributions(view) {\n if (!this.isVisible(view)) {\n return [];\n }\n const getAttributions = this.getSource()?.getAttributions();\n if (!getAttributions) {\n return [];\n }\n const frameState =\n view instanceof View ? view.getViewStateAndExtent() : view;\n let attributions = getAttributions(frameState);\n if (!Array.isArray(attributions)) {\n attributions = [attributions];\n }\n return attributions;\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|null} 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 return null;\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 /** @return {string} Declutter */\n getDeclutter() {\n return undefined;\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../layer/Layer.js\").State} layerState Layer state.\n */\n renderDeclutter(frameState, layerState) {}\n\n /**\n * When the renderer follows a layout -> render approach, do the final rendering here.\n * @param {import('../Map.js').FrameState} frameState Frame state\n */\n renderDeferred(frameState) {\n const layerRenderer = this.getRenderer();\n if (!layerRenderer) {\n return;\n }\n layerRenderer.renderDeferred(frameState);\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 this.handlePrecompose_,\n this,\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * @param {import(\"../events/Event.js\").default} renderEvent Render event\n * @private\n */\n handlePrecompose_(renderEvent) {\n const layerStatesArray =\n /** @type {import(\"../render/Event.js\").default} */ (renderEvent)\n .frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n assert(\n !layerStatesArray.some(\n (arrayLayerState) => arrayLayerState.layer === layerState.layer,\n ),\n 'A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.',\n );\n layerStatesArray.push(layerState);\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 * @override\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/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\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/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 }\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 * @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 {import('../style/Style.js').DeclutterMode} declutterMode Declutter mode: `declutter`, `obstacle`, `none`.\n */\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 {import('../style/Style.js').DeclutterMode}\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 {import(\"./Style.js\").DeclutterMode} 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 {import('../DataTile.js').ImageLike} Image element.\n */\n getImage(pixelRatio) {\n return abstract();\n }\n\n /**\n * @abstract\n * @return {import('../DataTile.js').ImageLike} 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 /**\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 /**\n * @return {Promise} `false` or Promise that resolves when the style is ready to use.\n */\n ready() {\n return Promise.resolve();\n }\n}\n\nexport default ImageStyle;\n","/**\n * RGB space.\n *\n * @module color-space/rgb\n */\n\nexport default {\n\tname: 'rgb',\n\tmin: [0,0,0],\n\tmax: [255,255,255],\n\tchannel: ['red', 'green', 'blue'],\n\talias: ['RGB']\n};\n","/**\n * CIE XYZ\n *\n * @module color-space/xyz\n */\nimport rgb from './rgb.js';\n\nvar xyz = {\n\tname: 'xyz',\n\tmin: [0,0,0],\n\tchannel: ['X','Y','Z'],\n\talias: ['XYZ', 'ciexyz', 'cie1931']\n};\n\n\n/**\n * Whitepoint reference values with observer/illuminant\n *\n * http://en.wikipedia.org/wiki/Standard_illuminant\n */\nxyz.whitepoint = {\n\t//1931 2°\n\t2: {\n\t\t//incadescent\n\t\tA:[109.85, 100, 35.585],\n\t\t// B:[],\n\t\tC: [98.074, 100, 118.232],\n\t\tD50: [96.422, 100, 82.521],\n\t\tD55: [95.682, 100, 92.149],\n\t\t//daylight\n\t\tD65: [95.045592705167, 100, 108.9057750759878],\n\t\tD75: [94.972, 100, 122.638],\n\t\t//flourescent\n\t\t// F1: [],\n\t\tF2: [99.187, 100, 67.395],\n\t\t// F3: [],\n\t\t// F4: [],\n\t\t// F5: [],\n\t\t// F6:[],\n\t\tF7: [95.044, 100, 108.755],\n\t\t// F8: [],\n\t\t// F9: [],\n\t\t// F10: [],\n\t\tF11: [100.966, 100, 64.370],\n\t\t// F12: [],\n\t\tE: [100,100,100]\n\t},\n\n\t//1964 10°\n\t10: {\n\t\t//incadescent\n\t\tA:[111.144, 100, 35.200],\n\t\tC: [97.285, 100, 116.145],\n\t\tD50: [96.720, 100, 81.427],\n\t\tD55: [95.799, 100, 90.926],\n\t\t//daylight\n\t\tD65: [94.811, 100, 107.304],\n\t\tD75: [94.416, 100, 120.641],\n\t\t//flourescent\n\t\tF2: [103.280, 100, 69.026],\n\t\tF7: [95.792, 100, 107.687],\n\t\tF11: [103.866, 100, 65.627],\n\t\tE: [100,100,100]\n\t}\n};\n\n\n/**\n * Top values are the whitepoint’s top values, default are D65\n */\nxyz.max = xyz.whitepoint[2].D65;\n\n\n/**\n * Transform xyz to rgb\n *\n * @param {Array} xyz Array of xyz values\n *\n * @return {Array} RGB values\n */\nxyz.rgb = function (_xyz, white) {\n\t//FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then\n\twhite = white || xyz.whitepoint[2].E;\n\n\tvar x = _xyz[0] / white[0],\n\t\ty = _xyz[1] / white[1],\n\t\tz = _xyz[2] / white[2],\n\t\tr, g, b;\n\n\t// assume sRGB\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\tr = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293);\n\tg = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175);\n\tb = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878);\n\n\tr = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r = (r * 12.92);\n\n\tg = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g = (g * 12.92);\n\n\tb = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b = (b * 12.92);\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n}\n\n\n\n/**\n * RGB to XYZ\n *\n * @param {Array} rgb RGB channels\n *\n * @return {Array} XYZ channels\n */\nrgb.xyz = function(rgb, white) {\n\tvar r = rgb[0] / 255,\n\t\t\tg = rgb[1] / 255,\n\t\t\tb = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183);\n\tvar y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733);\n\tvar z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966);\n\n\twhite = white || xyz.whitepoint[2].E;\n\n\treturn [x * white[0], y * white[1], z * white[2]];\n};\n\n\n\nexport default xyz;\n","/**\n * CIE LUV (C'est la vie)\n *\n * @module color-space/luv\n */\n import xyz from './xyz.js';\n\nexport default {\n\tname: 'luv',\n\t//NOTE: luv has no rigidly defined limits\n\t//easyrgb fails to get proper coords\n\t//boronine states no rigid limits\n\t//colorMine refers this ones:\n\tmin: [0,-134,-140],\n\tmax: [100,224,122],\n\tchannel: ['lightness', 'u', 'v'],\n\talias: ['LUV', 'cieluv', 'cie1976'],\n\n\txyz: function(arg, i, o){\n\t\tvar _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n\t\tl = arg[0], u = arg[1], v = arg[2];\n\n\t\tif (l === 0) return [0,0,0];\n\n\t\t//get constants\n\t\t//var e = 0.008856451679035631; //(6/29)^3\n\t\tvar k = 0.0011070564598794539; //(3/29)^3\n\n\t\t//get illuminant/observer\n\t\ti = i || 'D65';\n\t\to = o || 2;\n\n\t\txn = xyz.whitepoint[o][i][0];\n\t\tyn = xyz.whitepoint[o][i][1];\n\t\tzn = xyz.whitepoint[o][i][2];\n\n\t\tun = (4 * xn) / (xn + (15 * yn) + (3 * zn));\n\t\tvn = (9 * yn) / (xn + (15 * yn) + (3 * zn));\n\t\t// un = 0.19783000664283;\n\t\t// vn = 0.46831999493879;\n\n\n\t\t_u = u / (13 * l) + un || 0;\n\t\t_v = v / (13 * l) + vn || 0;\n\n\t\ty = l > 8 ? yn * Math.pow( (l + 16) / 116 , 3) : yn * l * k;\n\n\t\t//wikipedia method\n\t\tx = y * 9 * _u / (4 * _v) || 0;\n\t\tz = y * (12 - 3 * _u - 20 * _v) / (4 * _v) || 0;\n\n\t\t//boronine method\n\t\t//https://github.com/boronine/husl/blob/master/husl.coffee#L201\n\t\t// x = 0 - (9 * y * _u) / ((_u - 4) * _v - _u * _v);\n\t\t// z = (9 * y - (15 * _v * y) - (_v * x)) / (3 * _v);\n\n\t\treturn [x, y, z];\n\t}\n};\n\n// http://www.brucelindbloom.com/index.html?Equations.html\n// https://github.com/boronine/husl/blob/master/husl.coffee\n//i - illuminant\n//o - observer\nxyz.luv = function(arg, i, o) {\n\tvar _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n\n\t//get constants\n\tvar e = 0.008856451679035631; //(6/29)^3\n\tvar k = 903.2962962962961; //(29/3)^3\n\n\t//get illuminant/observer coords\n\ti = i || 'D65';\n\to = o || 2;\n\n\txn = xyz.whitepoint[o][i][0];\n\tyn = xyz.whitepoint[o][i][1];\n\tzn = xyz.whitepoint[o][i][2];\n\n\tun = (4 * xn) / (xn + (15 * yn) + (3 * zn));\n\tvn = (9 * yn) / (xn + (15 * yn) + (3 * zn));\n\n\n\tx = arg[0], y = arg[1], z = arg[2];\n\n\n\t_u = (4 * x) / (x + (15 * y) + (3 * z)) || 0;\n\t_v = (9 * y) / (x + (15 * y) + (3 * z)) || 0;\n\n\tvar yr = y/yn;\n\n\tl = yr <= e ? k * yr : 116 * Math.pow(yr, 1/3) - 16;\n\n\tu = 13 * l * (_u - un);\n\tv = 13 * l * (_v - vn);\n\n\treturn [l, u, v];\n};\n","/**\n * Cylindrical CIE LUV\n *\n * @module color-space/lchuv\n */\nimport luv from './luv.js';\nimport xyz from './xyz.js';\n\n//cylindrical luv\nvar lchuv = {\n\tname: 'lchuv',\n\tchannel: ['lightness', 'chroma', 'hue'],\n\talias: ['LCHuv', 'cielchuv'],\n\tmin: [0,0,0],\n\tmax: [100,100,360],\n\n\tluv: function(luv){\n\t\tvar l = luv[0],\n\t\tc = luv[1],\n\t\th = luv[2],\n\t\tu, v, hr;\n\n\t\thr = h / 360 * 2 * Math.PI;\n\t\tu = c * Math.cos(hr);\n\t\tv = c * Math.sin(hr);\n\t\treturn [l, u, v];\n\t},\n\n\txyz: function(arg) {\n\t\treturn luv.xyz(lchuv.luv(arg));\n\t}\n};\n\nexport default lchuv;\n\nluv.lchuv = function(luv){\n\tvar l = luv[0], u = luv[1], v = luv[2];\n\n\tvar c = Math.sqrt(u*u + v*v);\n\tvar hr = Math.atan2(v,u);\n\tvar h = hr * 360 / 2 / Math.PI;\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\treturn [l,c,h]\n};\n\nxyz.lchuv = function(arg){\n return luv.lchuv(xyz.luv(arg));\n};\n","export default {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50]\n}\n","/**\n * @module color-parse\n */\nimport names from 'color-name'\n\nexport default parse\n\n/**\n * Base hues\n * http://dev.w3.org/csswg/css-color/#typedef-named-hue\n */\n//FIXME: use external hue detector\nvar baseHues = {\n\tred: 0,\n\torange: 60,\n\tyellow: 120,\n\tgreen: 180,\n\tblue: 240,\n\tpurple: 300\n}\n\n/**\n * Parse color from the string passed\n *\n * @return {Object} A space indicator `space`, an array `values` and `alpha`\n */\nfunction parse(cstr) {\n\tvar m, parts = [], alpha = 1, space\n\n\t//numeric case\n\tif (typeof cstr === 'number') {\n\t\treturn { space: 'rgb', values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff], alpha: 1 }\n\t}\n\tif (typeof cstr === 'number') return { space: 'rgb', values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff], alpha: 1 }\n\n\tcstr = String(cstr).toLowerCase();\n\n\t//keyword\n\tif (names[cstr]) {\n\t\tparts = names[cstr].slice()\n\t\tspace = 'rgb'\n\t}\n\n\t//reserved words\n\telse if (cstr === 'transparent') {\n\t\talpha = 0\n\t\tspace = 'rgb'\n\t\tparts = [0, 0, 0]\n\t}\n\n\t//hex\n\telse if (cstr[0] === '#') {\n\t\tvar base = cstr.slice(1)\n\t\tvar size = base.length\n\t\tvar isShort = size <= 4\n\t\talpha = 1\n\n\t\tif (isShort) {\n\t\t\tparts = [\n\t\t\t\tparseInt(base[0] + base[0], 16),\n\t\t\t\tparseInt(base[1] + base[1], 16),\n\t\t\t\tparseInt(base[2] + base[2], 16)\n\t\t\t]\n\t\t\tif (size === 4) {\n\t\t\t\talpha = parseInt(base[3] + base[3], 16) / 255\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tparts = [\n\t\t\t\tparseInt(base[0] + base[1], 16),\n\t\t\t\tparseInt(base[2] + base[3], 16),\n\t\t\t\tparseInt(base[4] + base[5], 16)\n\t\t\t]\n\t\t\tif (size === 8) {\n\t\t\t\talpha = parseInt(base[6] + base[7], 16) / 255\n\t\t\t}\n\t\t}\n\n\t\tif (!parts[0]) parts[0] = 0\n\t\tif (!parts[1]) parts[1] = 0\n\t\tif (!parts[2]) parts[2] = 0\n\n\t\tspace = 'rgb'\n\t}\n\n\t// color space\n\telse if (m = /^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\\s*\\(([^\\)]*)\\)/.exec(cstr)) {\n\t\tvar name = m[1]\n\t\tspace = name.replace(/a$/, '')\n\t\tvar dims = space === 'cmyk' ? 4 : space === 'gray' ? 1 : 3\n\t\tparts = m[2].trim().split(/\\s*[,\\/]\\s*|\\s+/)\n\n\t\t// color(srgb-linear x x x) -> srgb-linear(x x x)\n\t\tif (space === 'color') space = parts.shift()\n\n\t\tparts = parts.map(function (x, i) {\n\t\t\t//\n\t\t\tif (x[x.length - 1] === '%') {\n\t\t\t\tx = parseFloat(x) / 100\n\t\t\t\t// alpha -> 0..1\n\t\t\t\tif (i === 3) return x\n\t\t\t\t// rgb -> 0..255\n\t\t\t\tif (space === 'rgb') return x * 255\n\t\t\t\t// hsl, hwb H -> 0..100\n\t\t\t\tif (space[0] === 'h') return x * 100\n\t\t\t\t// lch, lab L -> 0..100\n\t\t\t\tif (space[0] === 'l' && !i) return x * 100\n\t\t\t\t// lab A B -> -125..125\n\t\t\t\tif (space === 'lab') return x * 125\n\t\t\t\t// lch C -> 0..150, H -> 0..360\n\t\t\t\tif (space === 'lch') return i < 2 ? x * 150 : x * 360\n\t\t\t\t// oklch/oklab L -> 0..1\n\t\t\t\tif (space[0] === 'o' && !i) return x\n\t\t\t\t// oklab A B -> -0.4..0.4\n\t\t\t\tif (space === 'oklab') return x * 0.4\n\t\t\t\t// oklch C -> 0..0.4, H -> 0..360\n\t\t\t\tif (space === 'oklch') return i < 2 ? x * 0.4 : x * 360\n\t\t\t\t// color(xxx) -> 0..1\n\t\t\t\treturn x\n\t\t\t}\n\n\t\t\t//hue\n\t\t\tif (space[i] === 'h' || (i === 2 && space[space.length - 1] === 'h')) {\n\t\t\t\t//\n\t\t\t\tif (baseHues[x] !== undefined) return baseHues[x]\n\t\t\t\t//\n\t\t\t\tif (x.endsWith('deg')) return parseFloat(x)\n\t\t\t\t//\n\t\t\t\tif (x.endsWith('turn')) return parseFloat(x) * 360\n\t\t\t\tif (x.endsWith('grad')) return parseFloat(x) * 360 / 400\n\t\t\t\tif (x.endsWith('rad')) return parseFloat(x) * 180 / Math.PI\n\t\t\t}\n\t\t\tif (x === 'none') return 0\n\t\t\treturn parseFloat(x)\n\t\t});\n\n\t\talpha = parts.length > dims ? parts.pop() : 1\n\t}\n\n\t//named channels case\n\telse if (/[0-9](?:\\s|\\/|,)/.test(cstr)) {\n\t\tparts = cstr.match(/([0-9]+)/g).map(function (value) {\n\t\t\treturn parseFloat(value)\n\t\t})\n\n\t\tspace = cstr.match(/([a-z])/ig)?.join('')?.toLowerCase() || 'rgb'\n\t}\n\n\treturn {\n\t\tspace,\n\t\tvalues: parts,\n\t\talpha\n\t}\n}\n","/**\n * @module color-space/hsl\n */\nimport rgb from './rgb.js';\n\nexport default {\n\tname: 'hsl',\n\tmin: [0,0,0],\n\tmax: [360,100,100],\n\tchannel: ['hue', 'saturation', 'lightness'],\n\talias: ['HSL'],\n\n\trgb: function(hsl) {\n\t\tvar h = hsl[0]/360, s = hsl[1]/100, l = hsl[2]/100, t1, t2, t3, rgb, val, i=0;\n\n\t\tif (s === 0) return val = l * 255, [val, val, val];\n\n\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tt1 = 2 * l - t2;\n\n\t\trgb = [0, 0, 0];\n\t\tfor (;i<3;) {\n\t\t\tt3 = h + 1 / 3 * - (i - 1);\n\t\t\tt3 < 0 ? t3++ : t3 > 1 && t3--;\n\t\t\tval = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 :\n\t\t\t2 * t3 < 1 ? t2 :\n\t\t\t3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 :\n\t\t\tt1;\n\t\t\trgb[i++] = val * 255;\n\t\t}\n\n\t\treturn rgb;\n\t}\n};\n\n\n//extend rgb\nrgb.hsl = function(rgb) {\n\tvar r = rgb[0]/255,\n\t\t\tg = rgb[1]/255,\n\t\t\tb = rgb[2]/255,\n\t\t\tmin = Math.min(r, g, b),\n\t\t\tmax = Math.max(r, g, b),\n\t\t\tdelta = max - min,\n\t\t\th, s, l;\n\n\tif (max === min) {\n\t\th = 0;\n\t}\n\telse if (r === max) {\n\t\th = (g - b) / delta;\n\t}\n\telse if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t}\n\telse if (b === max) {\n\t\th = 4 + (r - g)/ delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t}\n\telse if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t}\n\telse {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n","/** @module color-rgba */\nimport parse from 'color-parse'\nimport rgb from 'color-space/rgb.js'\nimport hsl from 'color-space/hsl.js'\n\nexport default function rgba(color) {\n\t// template literals\n\tif (Array.isArray(color) && color.raw) color = String.raw(...arguments)\n\tif (color instanceof Number) color = +color\n\n\tvar values, i, l\n\n\t//attempt to parse non-array arguments\n\tvar parsed = parse(color)\n\n\tif (!parsed.space) return []\n\n\tconst min = parsed.space[0] === 'h' ? hsl.min : rgb.min\n\tconst max = parsed.space[0] === 'h' ? hsl.max : rgb.max\n\n\tvalues = Array(3)\n\tvalues[0] = Math.min(Math.max(parsed.values[0], min[0]), max[0])\n\tvalues[1] = Math.min(Math.max(parsed.values[1], min[1]), max[1])\n\tvalues[2] = Math.min(Math.max(parsed.values[2], min[2]), max[2])\n\n\tif (parsed.space[0] === 'h') {\n\t\tvalues = hsl.rgb(values)\n\t}\n\n\tvalues.push(Math.min(Math.max(parsed.alpha, 0), 1))\n\n\treturn values\n}\n","/**\n * @module ol/color\n */\nimport lchuv from 'color-space/lchuv.js';\nimport parseRgba from 'color-rgba';\nimport rgb from 'color-space/rgb.js';\nimport xyz from 'color-space/xyz.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 * Color to indicate that no color should be rendered. This is meant to be used for per-reference\n * comparisons only.\n * @type {Color}\n */\nexport const NO_COLOR = [NaN, NaN, NaN, 0];\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 }\n return toString(color);\n}\n\n/**\n * @type {number}\n */\nconst MAX_CACHE_SIZE = 1024;\n\n/**\n * We maintain a small cache of parsed strings. Whenever the cache grows too large,\n * we delete an arbitrary set of the entries.\n *\n * @type {Object}\n */\nconst cache = {};\n\n/**\n * @type {number}\n */\nlet cacheSize = 0;\n\n/**\n * @param {Color} color A color that may or may not have an alpha channel.\n * @return {Color} The input color with an alpha channel. If the input color has\n * an alpha channel, the input color will be returned unchanged. Otherwise, a new\n * array will be returned with the input color and an alpha channel of 1.\n */\nexport function withAlpha(color) {\n if (color.length === 4) {\n return color;\n }\n const output = color.slice();\n output[3] = 1;\n return output;\n}\n\n/**\n * @param {Color} color RGBA color.\n * @return {Color} LCHuv color with alpha.\n */\nexport function rgbaToLcha(color) {\n const output = xyz.lchuv(rgb.xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {Color} color LCHuv color with alpha.\n * @return {Color} RGBA color.\n */\nexport function lchaToRgba(color) {\n const output = xyz.rgb(lchuv.xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport function fromString(s) {\n if (s === 'none') {\n return NO_COLOR;\n }\n if (cache.hasOwnProperty(s)) {\n return cache[s];\n }\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\n const color = parseRgba(s);\n if (color.length !== 4) {\n throw new Error('failed to parse \"' + s + '\" as color');\n }\n for (const c of color) {\n if (isNaN(c)) {\n throw new Error('failed to parse \"' + s + '\" as color');\n }\n }\n normalize(color);\n cache[s] = color;\n ++cacheSize;\n return color;\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 }\n return fromString(color);\n}\n\n/**\n * Exported for the tests.\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] * 1000) / 1000;\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 try {\n fromString(s);\n return true;\n } catch (_) {\n return false;\n }\n}\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 * createImageBitmap() is supported.\n * @type {boolean}\n */\nexport const CREATE_IMAGE_BITMAP = typeof createImageBitmap === 'function';\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 // @ts-ignore Ignore invalid event type '_'\n window.addEventListener('_', null, options);\n // @ts-ignore Ignore invalid event type '_'\n window.removeEventListener('_', null, options);\n } catch (error) {\n // passive not supported\n }\n return passive;\n})();\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 = /** @type {HTMLCanvasElement} */ (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/** @type {CanvasRenderingContext2D} */\nlet sharedCanvasContext;\n\n/**\n * @return {CanvasRenderingContext2D} Shared canvas context.\n */\nexport function getSharedCanvasContext2D() {\n if (!sharedCanvasContext) {\n sharedCanvasContext = createCanvasContext2D(1, 1);\n }\n return sharedCanvasContext;\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 the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.lastChild.remove();\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/Image\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport ImageState from './ImageState.js';\nimport {CREATE_IMAGE_BITMAP, IMAGE_DECODE} from './has.js';\nimport {listenOnce, unlistenByKey} from './events.js';\nimport {toPromise} from './functions.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(import(\"./Image.js\").default, string): void} LoadFunction\n * @api\n */\n\n/**\n * @typedef {Object} ImageObject\n * @property {import(\"./extent.js\").Extent} [extent] Extent, if different from the requested one.\n * @property {import(\"./resolution.js\").ResolutionLike} [resolution] Resolution, if different from the requested one.\n * When x and y resolution are different, use the array type (`[xResolution, yResolution]`).\n * @property {number} [pixelRatio] Pixel ratio, if different from the requested one.\n * @property {import('./DataTile.js').ImageLike} image Image.\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * For images that cover any extent and resolution (static images), the loader function should not accept\n * any arguments. The function returns an {@link import(\"./DataTile.js\").ImageLike image}, an\n * {@link import(\"./Image.js\").ImageObject image object}, or a promise for the same.\n * For loaders that generate images, the promise should not resolve until the image is loaded.\n * If the returned image does not match the extent, resolution or pixel ratio passed to the loader,\n * it has to return an {@link import(\"./Image.js\").ImageObject image object} with the `image` and the\n * correct `extent`, `resolution` and `pixelRatio`.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} Loader\n * @api\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * The function returns a promise for an {@link import(\"./Image.js\").ImageObject image object}.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} ImageObjectPromiseLoader\n */\n\nclass ImageWrapper extends EventTarget {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|Array|undefined} resolution Resolution. If provided as array, x and y\n * resolution will be assumed.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default|import(\"./Image.js\").Loader} stateOrLoader State.\n */\n constructor(extent, resolution, pixelRatio, stateOrLoader) {\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|Array|undefined}\n */\n this.resolution = resolution;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state =\n typeof stateOrLoader === 'function' ? ImageState.IDLE : stateOrLoader;\n\n /**\n * @private\n * @type {import('./DataTile.js').ImageLike|null}\n */\n this.image_ = null;\n\n /**\n * @protected\n * @type {import(\"./Image.js\").Loader}\n */\n this.loader = typeof stateOrLoader === 'function' ? stateOrLoader : null;\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 * @return {import('./DataTile.js').ImageLike} Image.\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * @return {number} PixelRatio.\n */\n getPixelRatio() {\n return this.pixelRatio_;\n }\n\n /**\n * @return {number|Array} 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 */\n load() {\n if (this.state == ImageState.IDLE) {\n if (this.loader) {\n this.state = ImageState.LOADING;\n this.changed();\n const resolution = this.getResolution();\n const requestResolution = Array.isArray(resolution)\n ? resolution[0]\n : resolution;\n toPromise(() =>\n this.loader(\n this.getExtent(),\n requestResolution,\n this.getPixelRatio(),\n ),\n )\n .then((image) => {\n if ('image' in image) {\n this.image_ = image.image;\n }\n if ('extent' in image) {\n this.extent = image.extent;\n }\n if ('resolution' in image) {\n this.resolution = image.resolution;\n }\n if ('pixelRatio' in image) {\n this.pixelRatio_ = image.pixelRatio;\n }\n if (\n image instanceof HTMLImageElement ||\n image instanceof ImageBitmap ||\n image instanceof HTMLCanvasElement ||\n image instanceof HTMLVideoElement\n ) {\n this.image_ = image;\n }\n this.state = ImageState.LOADED;\n })\n .catch((error) => {\n this.state = ImageState.ERROR;\n console.error(error); // eslint-disable-line no-console\n })\n .finally(() => this.changed());\n }\n }\n }\n\n /**\n * @param {import('./DataTile.js').ImageLike} image The image.\n */\n setImage(image) {\n this.image_ = image;\n }\n\n /**\n * @param {number|Array} resolution Resolution.\n */\n setResolution(resolution) {\n this.resolution = resolution;\n }\n}\n\n/**\n * @param {import('./DataTile.js').ImageLike} 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\n/**\n * Loads an image.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n * @api\n */\nexport function load(image, src) {\n return new Promise((resolve, reject) => {\n function handleLoad() {\n unlisten();\n resolve(image);\n }\n function handleError() {\n unlisten();\n reject(new Error('Image load error'));\n }\n function unlisten() {\n image.removeEventListener('load', handleLoad);\n image.removeEventListener('error', handleError);\n }\n image.addEventListener('load', handleLoad);\n image.addEventListener('error', handleError);\n if (src) {\n image.src = src;\n }\n });\n}\n\n/**\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n */\nexport function decodeFallback(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && IMAGE_DECODE\n ? new Promise((resolve, reject) =>\n image\n .decode()\n .then(() => resolve(image))\n .catch((e) =>\n image.complete && image.width ? resolve(image) : reject(e),\n ),\n )\n : load(image);\n}\n\n/**\n * Loads an image and decodes it to an `ImageBitmap` if `createImageBitmap()` is supported. Returns\n * the loaded image otherwise.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `ImageBitmap` or an\n * `HTMLImageElement` if `createImageBitmap()` is not supported.\n * @api\n */\nexport function decode(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && IMAGE_DECODE && CREATE_IMAGE_BITMAP\n ? image\n .decode()\n .then(() => createImageBitmap(image))\n .catch((e) => {\n if (image.complete && image.width) {\n return image;\n }\n throw e;\n })\n : decodeFallback(image);\n}\n\nexport default ImageWrapper;\n","/**\n * @module ol/style/IconImageCache\n */\nimport ImageState from '../ImageState.js';\nimport {asArray} from '../color.js';\nimport {getSharedCanvasContext2D} from '../dom.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 {!Object}\n * @private\n */\n this.patternCache_ = {};\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.patternCache_ = {};\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 delete this.patternCache_[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|string|null} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n get(src, crossOrigin, color) {\n const key = getCacheKey(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|string|null} color Color.\n * @return {CanvasPattern} Icon image.\n */\n getPattern(src, crossOrigin, color) {\n const key = getCacheKey(src, crossOrigin, color);\n return key in this.patternCache_ ? this.patternCache_[key] : null;\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color|string|null} color Color.\n * @param {import(\"./IconImage.js\").default|null} iconImage Icon image.\n * @param {boolean} [pattern] Also cache a `'repeat'` pattern with this `iconImage`.\n */\n set(src, crossOrigin, color, iconImage, pattern) {\n const key = getCacheKey(src, crossOrigin, color);\n const update = key in this.cache_;\n this.cache_[key] = iconImage;\n if (pattern) {\n if (iconImage.getImageState() === ImageState.IDLE) {\n iconImage.load();\n }\n if (iconImage.getImageState() === ImageState.LOADING) {\n iconImage.ready().then(() => {\n this.patternCache_[key] = getSharedCanvasContext2D().createPattern(\n iconImage.getImage(1),\n 'repeat',\n );\n });\n } else {\n this.patternCache_[key] = getSharedCanvasContext2D().createPattern(\n iconImage.getImage(1),\n 'repeat',\n );\n }\n }\n if (!update) {\n ++this.cacheSize_;\n }\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|string|null} color Color.\n * @return {string} Cache key.\n */\nexport function getCacheKey(src, crossOrigin, color) {\n const colorString = color ? asArray(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/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 {decodeFallback} from '../Image.js';\nimport {shared as iconImageCache} from './IconImageCache.js';\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet taintedTestContext = null;\n\nclass IconImage extends EventTarget {\n /**\n * @param {HTMLImageElement|HTMLCanvasElement|ImageBitmap|null} image Image.\n * @param {string|undefined} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default|undefined} imageState Image state.\n * @param {import(\"../color.js\").Color|string|null} color Color.\n */\n constructor(image, src, crossOrigin, imageState, color) {\n super();\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement|ImageBitmap}\n */\n this.hitDetectionImage_ = null;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement|ImageBitmap|null}\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|string|null}\n */\n this.color_ = color;\n\n /**\n * @private\n * @type {import(\"../ImageState.js\").default}\n */\n this.imageState_ = imageState === undefined ? ImageState.IDLE : imageState;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size|null}\n */\n this.size_ =\n image && image.width && image.height ? [image.width, image.height] : null;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.src_ = src;\n\n /**\n * @private\n */\n this.tainted_;\n\n /**\n * @private\n * @type {Promise|null}\n */\n this.ready_ = null;\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, undefined, {\n willReadFrequently: true,\n });\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.dispatchChangeEvent_();\n }\n\n /**\n * @private\n */\n handleImageLoad_() {\n this.imageState_ = ImageState.LOADED;\n this.size_ = [this.image_.width, this.image_.height];\n this.dispatchChangeEvent_();\n }\n\n /**\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLImageElement|HTMLCanvasElement|ImageBitmap} Image or Canvas element or image bitmap.\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|ImageBitmap} 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 if (this.src_ !== undefined) {\n /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n }\n } catch (e) {\n this.handleImageError_();\n }\n if (this.image_ instanceof HTMLImageElement) {\n decodeFallback(this.image_, this.src_)\n .then((image) => {\n this.image_ = image;\n this.handleImageLoad_();\n })\n .catch(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 ctx = createCanvasContext2D(\n Math.ceil(image.width * pixelRatio),\n Math.ceil(image.height * pixelRatio),\n );\n const canvas = ctx.canvas;\n\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 * @return {Promise} Promise that resolves when the image is loaded.\n */\n ready() {\n if (!this.ready_) {\n this.ready_ = new Promise((resolve) => {\n if (\n this.imageState_ === ImageState.LOADED ||\n this.imageState_ === ImageState.ERROR\n ) {\n resolve();\n } else {\n const onChange = () => {\n if (\n this.imageState_ === ImageState.LOADED ||\n this.imageState_ === ImageState.ERROR\n ) {\n this.removeEventListener(EventType.CHANGE, onChange);\n resolve();\n }\n };\n this.addEventListener(EventType.CHANGE, onChange);\n }\n });\n }\n return this.ready_;\n }\n}\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement|ImageBitmap|null} image Image.\n * @param {string|undefined} cacheKey Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../ImageState.js\").default|undefined} imageState Image state.\n * @param {import(\"../color.js\").Color|string|null} color Color.\n * @param {boolean} [pattern] Also cache a `repeat` pattern with the icon image.\n * @return {IconImage} Icon image.\n */\nexport function get(image, cacheKey, crossOrigin, imageState, color, pattern) {\n let iconImage =\n cacheKey === undefined\n ? undefined\n : iconImageCache.get(cacheKey, crossOrigin, color);\n if (!iconImage) {\n iconImage = new IconImage(\n image,\n image && 'src' in image ? image.src || undefined : cacheKey,\n crossOrigin,\n imageState,\n color,\n );\n iconImageCache.set(cacheKey, crossOrigin, color, iconImage, pattern);\n }\n if (\n pattern &&\n iconImage &&\n !iconImageCache.getPattern(cacheKey, crossOrigin, color)\n ) {\n iconImageCache.set(cacheKey, crossOrigin, color, iconImage, pattern);\n }\n return iconImage;\n}\n\nexport default IconImage;\n","/**\n * @module ol/colorlike\n */\nimport ImageState from './ImageState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {get as getIconImage} from './style/IconImage.js';\nimport {shared as iconCache} from './style/IconImageCache.js';\nimport {toString} from './color.js';\n\n/**\n * @typedef {Object} PatternDescriptor\n * @property {string} src Pattern image URL\n * @property {import(\"./color.js\").Color|string} [color] Color to tint the pattern with.\n * @property {import(\"./size.js\").Size} [size] Size of the desired slice from the pattern image.\n * Use this together with `offset` when the pattern image is a sprite sheet.\n * @property {import(\"./size.js\").Size} [offset] Offset of the desired slice from the pattern image.\n * Use this together with `size` when the pattern image is a sprite sheet.\n */\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, [CanvasPattern](https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern),\n * or [CanvasGradient](https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient). The origin for\n * patterns and 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|PatternDescriptor|null} color Color.\n * @return {ColorLike|null} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (!color) {\n return null;\n }\n if (Array.isArray(color)) {\n return toString(color);\n }\n if (typeof color === 'object' && 'src' in color) {\n return asCanvasPattern(color);\n }\n return color;\n}\n\n/**\n * @param {PatternDescriptor} pattern Pattern descriptor.\n * @return {CanvasPattern|null} Canvas pattern or null if the pattern referenced in the\n * PatternDescriptor was not found in the icon image cache.\n */\nfunction asCanvasPattern(pattern) {\n if (!pattern.offset || !pattern.size) {\n return iconCache.getPattern(pattern.src, 'anonymous', pattern.color);\n }\n\n const cacheKey = pattern.src + ':' + pattern.offset;\n\n const canvasPattern = iconCache.getPattern(\n cacheKey,\n undefined,\n pattern.color,\n );\n if (canvasPattern) {\n return canvasPattern;\n }\n\n const iconImage = iconCache.get(pattern.src, 'anonymous', null);\n if (iconImage.getImageState() !== ImageState.LOADED) {\n return null;\n }\n const patternCanvasContext = createCanvasContext2D(\n pattern.size[0],\n pattern.size[1],\n );\n patternCanvasContext.drawImage(\n iconImage.getImage(1),\n pattern.offset[0],\n pattern.offset[1],\n pattern.size[0],\n pattern.size[1],\n 0,\n 0,\n pattern.size[0],\n pattern.size[1],\n );\n getIconImage(\n patternCanvasContext.canvas,\n cacheKey,\n undefined,\n ImageState.LOADED,\n pattern.color,\n true,\n );\n return iconCache.getPattern(cacheKey, undefined, pattern.color);\n}\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);\n/** @type {Array<'style'|'variant'|'weight'|'size'|'lineHeight'|'family'>} */\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 * @property {number} [fillPatternScale] Fill pattern scale.\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 {number} [repeat] Repeat.\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 {string}\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 const [style, weight, family] = font.split('\\n');\n if (isAvailable(style, weight, family)) {\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 lineHeight = 0;\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|import(\"../render/canvas/ZIndexContext.js\").ZIndexContextProxy} 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 if (context.globalAlpha === undefined) {\n context.globalAlpha = (context) => (context.globalAlpha *= opacity);\n } else {\n context.globalAlpha *= opacity;\n }\n }\n if (transform) {\n context.transform.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/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 defaultLineCap,\n defaultLineJoin,\n defaultLineWidth,\n defaultMiterLimit,\n defaultStrokeStyle,\n} from '../render/canvas.js';\n\n/**\n * Specify radius for regular polygons, or both radius 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} [radius2] Second radius to make a star instead of a regular polygon.\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` and `radius2`.\n * @property {import('./Style.js').DeclutterMode} [declutterMode] Declutter mode.\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike|undefined} strokeStyle StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {CanvasLineCap} lineCap LineCap.\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 both `radius` and\n * `radius2` are provided.\n * @api\n */\nclass RegularShape extends ImageStyle {\n /**\n * @param {Options} options Options.\n */\n constructor(options) {\n super({\n opacity: 1,\n rotateWithView:\n options.rotateWithView !== undefined ? options.rotateWithView : false,\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.canvases_;\n\n /**\n * @private\n * @type {HTMLCanvasElement|null}\n */\n this.hitDetectionCanvas_ = null;\n\n /**\n * @private\n * @type {import(\"./Fill.js\").default|null}\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 = options.radius;\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|null}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.size_;\n\n /**\n * @private\n * @type {RenderOptions}\n */\n this.renderOptions_;\n\n /**\n * @private\n */\n this.imageState_ =\n this.fill_ && this.fill_.loading()\n ? ImageState.LOADING\n : ImageState.LOADED;\n if (this.imageState_ === ImageState.LOADING) {\n this.ready().then(() => (this.imageState_ = ImageState.LOADED));\n }\n this.render();\n }\n\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n * @override\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 * @override\n */\n getAnchor() {\n const size = this.size_;\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|null} 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|null} 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 * @override\n */\n getHitDetectionImage() {\n if (!this.hitDetectionCanvas_) {\n this.hitDetectionCanvas_ = this.createHitDetectionCanvas_(\n this.renderOptions_,\n );\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 * @override\n */\n getImage(pixelRatio) {\n let image = this.canvases_[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.canvases_[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 * @override\n */\n getPixelRatio(pixelRatio) {\n return pixelRatio;\n }\n\n /**\n * @return {import(\"../size.js\").Size} Image size.\n * @override\n */\n getImageSize() {\n return this.size_;\n }\n\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n * @override\n */\n getImageState() {\n return this.imageState_;\n }\n\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n * @override\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 * @override\n */\n getSize() {\n return this.size_;\n }\n\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default|null} 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|null} 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 * @override\n */\n listenImageChange(listener) {}\n\n /**\n * Load not yet loaded URI.\n * @override\n */\n load() {}\n\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @override\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 distance 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 lineCap = defaultLineCap;\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 = asColorLike(this.stroke_.getColor() ?? defaultStrokeStyle);\n strokeWidth = this.stroke_.getWidth() ?? defaultLineWidth;\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset() ?? 0;\n lineJoin = this.stroke_.getLineJoin() ?? defaultLineJoin;\n lineCap = this.stroke_.getLineCap() ?? defaultLineCap;\n miterLimit = this.stroke_.getMiterLimit() ?? defaultMiterLimit;\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 lineCap: lineCap,\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.canvases_ = {};\n this.hitDetectionCanvas_ = null;\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 (renderOptions.strokeStyle) {\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.lineCap = renderOptions.lineCap;\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 * @return {HTMLCanvasElement} Canvas containing the icon\n */\n createHitDetectionCanvas_(renderOptions) {\n let context;\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 context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n this.drawHitDetectionCanvas_(renderOptions, context);\n }\n }\n return context ? context.canvas : this.getImage(1);\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 (renderOptions.strokeStyle) {\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 * @override\n */\n ready() {\n return this.fill_ ? this.fill_.ready() : Promise.resolve();\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 {import('./Style.js').DeclutterMode} [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 * @override\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\nimport ImageState from '../ImageState.js';\nimport {get as getIconImage} from './IconImage.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null} [color=null] A color,\n * gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats. For polygon fills (not for {@link import(\"./RegularShape.js\").default} fills),\n * a pattern can also be provided as {@link module:ol/colorlike~PatternDescriptor}.\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(\"./IconImage.js\").default|null}\n */\n this.patternImage_ = null;\n\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null}\n */\n this.color_ = null;\n if (options.color !== undefined) {\n this.setColor(options.color);\n }\n }\n\n /**\n * Clones the style. The color is not cloned if it is a {@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|import('../colorlike.js').PatternDescriptor|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|import('../colorlike.js').PatternDescriptor|null} color Color.\n * @api\n */\n setColor(color) {\n if (color !== null && typeof color === 'object' && 'src' in color) {\n const patternImage = getIconImage(\n null,\n color.src,\n 'anonymous',\n undefined,\n color.offset ? null : color.color ? color.color : null,\n !(color.offset && color.size),\n );\n patternImage.ready().then(() => {\n this.patternImage_ = null;\n });\n if (patternImage.getImageState() === ImageState.IDLE) {\n patternImage.load();\n }\n if (patternImage.getImageState() === ImageState.LOADING) {\n this.patternImage_ = patternImage;\n }\n }\n this.color_ = color;\n }\n\n /**\n * @return {boolean} The fill style is loading an image pattern.\n */\n loading() {\n return !!this.patternImage_;\n }\n\n /**\n * @return {Promise} `false` or a promise that resolves when the style is ready to use.\n */\n ready() {\n return this.patternImage_ ? this.patternImage_.ready() : Promise.resolve();\n }\n}\n\nexport default Fill;\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 * Defines how symbols and text are decluttered on layers ith `declutter` set to `true`\n * * **declutter**: Overlapping symbols and text are decluttered.\n * * **obstacle**: Symbols and text are rendered, but serve as obstacle for subsequent attempts\n * to place a symbol or text at the same location.\n * * **none**: No decluttering is done.\n *\n * @typedef {\"declutter\"|\"obstacle\"|\"none\"} DeclutterMode\n */\n\n/**\n * A function that takes a {@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