{"version":3,"sources":["webpack:///./node_modules/ol/geom/flat/interiorpoint.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/ol/geom/flat/simplify.js","webpack:///./node_modules/ol/format/FormatType.js","webpack:///./node_modules/ol/control/Attribution.js","webpack:///./node_modules/ol/control/Rotate.js","webpack:///./node_modules/ol/control/Zoom.js","webpack:///./node_modules/ol/control.js","webpack:///./node_modules/rbush/rbush.min.js","webpack:///./node_modules/ol/geom/flat/contains.js","webpack:///./node_modules/ol/style/TextPlacement.js","webpack:///./node_modules/ol/control/Control.js","webpack:///./node_modules/ol/style/IconImageCache.js","webpack:///./node_modules/ol/layer/BaseVector.js","webpack:///./node_modules/ol/render/canvas/Instruction.js","webpack:///./node_modules/ol/render/VectorContext.js","webpack:///./node_modules/ol/render/canvas/Builder.js","webpack:///./node_modules/ol/render/canvas/ImageBuilder.js","webpack:///./node_modules/ol/render/canvas/LineStringBuilder.js","webpack:///./node_modules/ol/render/canvas/PolygonBuilder.js","webpack:///./node_modules/ol/geom/flat/straightchunk.js","webpack:///./node_modules/ol/render/canvas/TextBuilder.js","webpack:///./node_modules/ol/render/canvas/BuilderGroup.js","webpack:///./node_modules/ol/render/canvas/BuilderType.js","webpack:///./node_modules/ol/geom/flat/textpath.js","webpack:///./node_modules/ol/render/canvas/Executor.js","webpack:///./node_modules/ol/render/canvas/ExecutorGroup.js","webpack:///./node_modules/ol/render/canvas/Immediate.js","webpack:///./node_modules/ol/render/canvas/hitdetect.js","webpack:///./node_modules/ol/renderer/vector.js","webpack:///./node_modules/ol/renderer/canvas/VectorLayer.js","webpack:///./node_modules/ol/layer/Vector.js","webpack:///./node_modules/ol/ViewHint.js","webpack:///./node_modules/ol/Feature.js","webpack:///./node_modules/ol/geom/flat/reverse.js","webpack:///./node_modules/ol/geom/flat/orient.js","webpack:///./node_modules/ol/geom/GeometryLayout.js","webpack:///./node_modules/ol/structs/RBush.js","webpack:///./node_modules/ol/source/VectorEventType.js","webpack:///./node_modules/ol/loadingstrategy.js","webpack:///./node_modules/ol/featureloader.js","webpack:///./node_modules/ol/source/Vector.js","webpack:///./node_modules/ol/MapEventType.js","webpack:///./node_modules/ol/geom/flat/length.js","webpack:///./node_modules/ol/geom/LinearRing.js","webpack:///./node_modules/ol/geom/Polygon.js","webpack:///./node_modules/ol/color.js","webpack:///./node_modules/ol/renderer/Map.js","webpack:///./node_modules/ol/renderer/Composite.js","webpack:///./node_modules/ol/MapEvent.js","webpack:///./node_modules/ol/MapBrowserEvent.js","webpack:///./node_modules/ol/MapBrowserEventType.js","webpack:///./node_modules/ol/pointer/EventType.js","webpack:///./node_modules/ol/MapBrowserEventHandler.js","webpack:///./node_modules/ol/MapProperty.js","webpack:///./node_modules/ol/structs/PriorityQueue.js","webpack:///./node_modules/ol/TileQueue.js","webpack:///./node_modules/ol/PluggableMap.js","webpack:///./node_modules/ol/interaction/Property.js","webpack:///./node_modules/ol/interaction/Interaction.js","webpack:///./node_modules/ol/interaction/DoubleClickZoom.js","webpack:///./node_modules/ol/interaction/Pointer.js","webpack:///./node_modules/ol/events/condition.js","webpack:///./node_modules/ol/interaction/DragPan.js","webpack:///./node_modules/ol/interaction/DragRotate.js","webpack:///./node_modules/ol/render/Box.js","webpack:///./node_modules/ol/interaction/DragBox.js","webpack:///./node_modules/ol/interaction/DragZoom.js","webpack:///./node_modules/ol/events/KeyCode.js","webpack:///./node_modules/ol/interaction/KeyboardPan.js","webpack:///./node_modules/ol/interaction/KeyboardZoom.js","webpack:///./node_modules/ol/Kinetic.js","webpack:///./node_modules/ol/interaction/MouseWheelZoom.js","webpack:///./node_modules/ol/interaction/PinchRotate.js","webpack:///./node_modules/ol/interaction/PinchZoom.js","webpack:///./node_modules/ol/interaction.js","webpack:///./node_modules/ol/Map.js","webpack:///./node_modules/ol/style/Style.js","webpack:///./node_modules/ol/style/IconOrigin.js","webpack:///./node_modules/ol/style/IconImage.js","webpack:///./node_modules/ol/style/Icon.js","webpack:///./node_modules/ol/style/IconAnchorUnits.js","webpack:///./node_modules/ol/style/Fill.js","webpack:///./node_modules/ol/style/Stroke.js","webpack:///./node_modules/ol/rotationconstraint.js","webpack:///./node_modules/ol/geom/Geometry.js","webpack:///./node_modules/ol/geom/flat/closest.js","webpack:///./node_modules/ol/geom/SimpleGeometry.js","webpack:///./node_modules/ol/ViewProperty.js","webpack:///./node_modules/ol/centerconstraint.js","webpack:///./node_modules/ol/resolutionconstraint.js","webpack:///./node_modules/ol/View.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/ol/style/Image.js","webpack:///./node_modules/ol/geom/flat/deflate.js","webpack:///./node_modules/ol/geom/flat/area.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/ol/geom/flat/inflate.js","webpack:///./node_modules/ol/geom/flat/transform.js","webpack:///./node_modules/ol/geom/flat/intersectsextent.js","webpack:///./node_modules/ol/style/RegularShape.js","webpack:///./node_modules/ol/style/Circle.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/ol/render/canvas.js","webpack:///./node_modules/ol/colorlike.js","webpack:///./node_modules/ol/geom/Point.js","webpack:///./node_modules/ol/geom/flat/segments.js"],"names":["getInteriorPointOfArray","flatCoordinates","offset","ends","stride","flatCenters","flatCentersOffset","opt_dest","i","ii","x","x1","x2","y1","y2","y","intersections","r","rr","length","end","push","pointX","NaN","maxSegmentLength","Infinity","sort","segmentLength","Math","abs","isNaN","getInteriorPointsOfMultiArray","endss","interiorPoints","global","DOMIterables","DOMTokenListPrototype","forEach","createNonEnumerableProperty","handlePrototype","CollectionPrototype","error","COLLECTION_NAME","prototype","$forEach","arrayMethodIsStrict","STRICT_METHOD","module","exports","callbackfn","this","arguments","undefined","douglasPeucker","squaredTolerance","simplifiedFlatCoordinates","simplifiedOffset","n","markers","Array","stack","index","last","pop","first","maxSquaredDistance","squaredDistance_1","douglasPeuckerArray","simplifiedEnds","snap","value","tolerance","round","quantize","x3","y3","dx1","dy1","dx2","dy2","quantizeArray","quantizeMultiArray","simplifiedEndss","ARRAY_BUFFER","JSON","TEXT","XML","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","p","hasOwnProperty","call","TypeError","String","__","constructor","create","_super","Attribution","opt_options","_this","options","element","document","createElement","render","target","ulElement_","collapsed_","collapsed","userCollapsed_","overrideCollapsible_","collapsible","collapsible_","className","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","textContent","label","label_","activeLabel","toggleButton_","setAttribute","title","appendChild","addEventListener","EventType","CLICK","handleClick_","bind","cssClasses","renderedAttributions_","renderedVisible_","collectSourceAttributions_","frameState","lookup","visibleAttributions","layerStatesArray","layerState","viewState","source","getSource","attributionGetter","getAttributions","attributions","getAttributionsCollapsible","isArray","j","jj","setCollapsible","updateElement_","visible","style","display","innerHTML","event","preventDefault","handleToggle_","classList","toggle","getCollapsible","setCollapsed","getCollapsed","mapEvent","Control","Rotate","compassClassName","add","button","callResetNorth_","resetNorth","duration_","duration","autoHide_","autoHide","rotation_","resetNorth_","map","getMap","view","getView","rotation","getRotation","PI","animate","easing","setRotation","transform","contains","remove","Zoom","delta","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","createTextNode","outElement","zoomByDelta_","currentZoom","getZoom","newZoom","getConstrainedZoom","getAnimating","cancelAnimations","zoom","setZoom","defaults","controls","Collection","zoomControl","zoomOptions","rotateControl","rotate","rotateOptions","attributionControl","attribution","attributionOptions","t","e","a","h","o","s","l","log","f","exp","u","sqrt","m","max","floor","c","min","_maxEntries","_minEntries","ceil","clear","indexOf","children","minX","minY","maxX","maxY","leaf","height","all","_all","data","search","toBBox","collides","load","insert","_build","slice","_splitRoot","_insert","splice","_condense","compareMinX","compareMinY","toJSON","fromJSON","apply","pow","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","v","M","_allDistMargin","linearRingContainsExtent","extent","outside","coordinate","linearRingContainsXY","wn","linearRingsContainsXY","linearRingssContainsXY","POINT","LINE","pointerEvents","target_","map_","listenerKeys","setTarget","disposeInternal","setMap","getOverlayContainerStopEvent","POSTRENDER","getElementById","IconImageCache","cache_","cacheSize_","maxCacheSize_","canExpireCache","expire","key","iconImage","hasListener","get","src","crossOrigin","color","getKey","set","setSize","maxCacheSize","colorString","shared","Property","RENDER_ORDER","BaseVectorLayer","baseOptions","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","declutter","renderBuffer_","style_","styleFunction_","setStyle","updateWhileAnimating_","updateWhileInteracting_","getDeclutter","getFeatures","pixel","getRenderBuffer","getRenderOrder","getStyle","getStyleFunction","getUpdateWhileAnimating","getUpdateWhileInteracting","renderDeclutter","declutterTree","getRenderer","setRenderOrder","renderOrder","opt_style","changed","Layer","BaseVector","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","CIRCLE","CLOSE_PATH","CUSTOM","DRAW_CHARS","DRAW_IMAGE","END_GEOMETRY","FILL","MOVE_TO_LINE_TO","SET_FILL_STYLE","SET_STROKE_STYLE","STROKE","beginPathInstruction","closePathInstruction","VectorContext","drawCustom","geometry","feature","renderer","hitDetectionRenderer","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","fillStyle","strokeStyle","setImageStyle","imageStyle","opt_declutterImageWithText","setTextStyle","textStyle","CanvasBuilder","maxExtent","resolution","pixelRatio","maxLineWidth","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","coordinates","tmpCoordinate_","hitDetectionInstructions","state","applyPixelRatio","dashArray","dash","appendFlatPointCoordinates","getBufferedMaxExtent","tmpCoord","myEnd","appendFlatLineCoordinates","closed","skipFirst","lastRel","nextRel","lastXCoord","lastYCoord","nextCoord","skipped","Relationship","INTERSECTING","drawCustomCoordinates_","builderEnds","builderEnd","beginGeometry","builderEndss","type","getType","getStride","builderBegin","GeometryType","MULTI_POLYGON","getOrientedFlatCoordinates","getEndss","myEnds","inflate","POLYGON","MULTI_LINE_STRING","getFlatCoordinates","getEnds","LINE_STRING","MULTI_POINT","endGeometry","finish","reverseHitDetectionInstructions","reverse","instruction","begin","fillStyleColor","getColor","strokeStyleColor","strokeStyleLineCap","getLineCap","lineCap","strokeStyleLineDash","getLineDash","lineDash","strokeStyleLineDashOffset","getLineDashOffset","lineDashOffset","strokeStyleLineJoin","getLineJoin","lineJoin","strokeStyleWidth","getWidth","lineWidth","strokeStyleMiterLimit","getMiterLimit","miterLimit","createFill","fillInstruction","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","width","CanvasImageBuilder","hitDetectionImage_","image_","imagePixelRatio_","anchorX_","anchorY_","height_","opacity_","originX_","originY_","rotateWithView_","scale_","width_","declutterImageWithText_","myBegin","opt_sharedData","anchor","getAnchor","size","getSize","hitDetectionImage","getHitDetectionImage","image","getImage","origin","getOrigin","getPixelRatio","getOpacity","getRotateWithView","getScaleArray","CanvasLineStringBuilder","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","CanvasPolygonBuilder","drawFlatCoordinatess_","fill","stroke","numEnds","setFillStrokeStyles_","circleInstruction","matchingChunk","maxAngle","acos","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","start","TEXT_ALIGN","CanvasTextBuilder","labels_","text_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textFillState_","fillStates","textStrokeState_","strokeStates","textState_","textStates","textKey_","fillKey_","strokeKey_","fillState","strokeState","textState","geometryType","placement","TextPlacement","geometryWidths","overflow","getFlatMidpoint","getCenter","getFlatMidpoints","getFlatInteriorPoint","getFlatInteriorPoints","beg_1","filter","w","keep","saveTextStates_","backgroundFill","backgroundStroke","padding","scale","p0","p1","p2","p3","pixelRatio_1","getExtent","textAlign","flatOffset","flatEnd","oo","range","drawChars_","strokeKey","textKey","font","textBaseline","fillKey","baseline","offsetY","text","strokeWidth","textFillStyle","getFill","textStrokeStyle","getStroke","getFont","textScale","getOverflow","getMaxAngle","getPlacement","getTextAlign","getTextBaseline","getBackgroundFill","getBackgroundStroke","getPadding","textOffsetX","getOffsetX","textOffsetY","getOffsetY","textRotateWithView","textRotation","getText","join","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","TextBuilder","BuilderGroup","tolerance_","maxExtent_","pixelRatio_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","zIndex","builderType","zIndexKey","toString","replays","replay","Constructor","DEFAULT","IMAGE","drawTextOnPath","startM","measureAndCacheTextWidth","cache","segmentM","advance","interpolate","beginX","beginY","startOffset","startLength","endM","endX","endY","flat","previousAngle","result","singleSegment","atan2","angle","iStart","charLength","len","chars","substring","tmpExtent","p4","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","RegExp","fromCharCode","horizontalTextAlign","align","test","Executor","overlaps","alignFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","widths_","createLabel","lines","split","numLines","widths","lineHeight","renderWidth","contextInstructions","Context","OffscreenCanvasRenderingContext2D","CanvasRenderingContext2D","setLineDash","leftRight","replayTextBackground_","context","strokeInstruction","beginPath","moveTo","lineTo","fill_","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","centerX","centerY","anchorX","anchorY","originX","originY","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","drawImageX","drawImageY","drawImageW","drawImageH","canvasTransform","replayImageOrLabel_","contextScale","imageOrLabel","dimensions","opacity","box","canvas","strokePadding","intersects","origin_1","repeatSize","save","translate","restore","drawLabelWithPointPlacement_","execute_","opt_featureCallback","opt_hitExtent","opt_declutterTree","pixelCoordinates","dd","prevX","prevY","roundX","roundY","currentGeometry","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","getGeometry","dx","dy","arc","closePath","fn","coords","rotateWithView","declutterImageWithText","labelWithAnchor","widthIndex","args","imageArgs","imageDeclutterBox","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","parts","drawChars","cc","part","i_1","ii_1","execute","executeHitDetection","ORDER","BuilderType","ExecutorGroup","allInstructions","opt_renderBuffer","overlaps_","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","createExecutors_","clip","flatClipCoords","getClipCoords","executors","instructionByZindex","hasExecutors","candidates","forEachFeatureAtCoordinate","hitTolerance","callback","declutteredFeatures","contextSize","newContext","hitExtent","clearRect","indexes","getPixelIndexArray","featureCallback","imageData","getImageData","idx","result_1","executor","zs","keys","Number","isEmpty","opt_builderTypes","builderTypes","circlePixelIndexArrayCache","radius","maxDistanceSq","distances","distanceSq","distance","pixelIndex","CanvasImmediateRenderer","opt_squaredTolerance","opt_userTransform","context_","extent_","transform_","squaredTolerance_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textScale_","tmpLocalTransform_","drawImages_","localTransform","alpha","globalAlpha","setTransform","drawImage","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","fillText","moveToLineTo_","close","drawRings_","GEOMETRY_COLLECTION","getGeometryFunction","geometries","getGeometriesArray","simplifyTransformed","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageSize","imageAnchor","imageOrigin","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","HIT_DETECT_RESOLUTION","createHitDetectionImageData","transforms","features","styleFunction","imageSmoothingEnabled","featureCount","indexFactor","featuresByZIndex","featureStyleFunction","styles","originalStyle","clone","setColor","setText","imgSize","getImageSize","imgContext","img","fillRect","setImage","Icon","anchorXUnits","IconAnchorUnits","PIXELS","anchorYUnits","getScale","getZIndex","byGeometryType","replace","zIndexKeys","geomAndStyle","k","kk","hitDetect","resultFeatures","g","SIMPLIFY_TOLERANCE","GEOMETRY_RENDERERS","renderPointGeometry","renderLineStringGeometry","renderPolygonGeometry","renderMultiPointGeometry","renderMultiLineStringGeometry","renderMultiPolygonGeometry","renderGeometryCollectionGeometry","renderCircleGeometry","defaultOrder","feature1","feature2","parseInt","getSquaredTolerance","getTolerance","builderGroup","opt_declutterBuilderGroup","circleReplay","textReplay","renderFeature","replayGroup","listener","opt_transform","loading","imageState","getImageState","ImageState","LOADED","ERROR","unlistenImageChange","IDLE","listenImageChange","renderFeatureInternal","simplifiedGeometry","renderGeometry","geometryRenderer","getHitDetectionRenderer","getGeometries","lineStringReplay","polygonReplay","imageReplay","CanvasVectorLayerRenderer","vectorLayer","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","dirty_","hitDetectionImageData_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","wrappedRenderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedRenderOrder_","replayGroup_","replayGroupChanged","declutterExecutorGroup","clipping","useContainer","renderWorlds","executorGroup","center","projection","projectionExtent","vectorSource","getLayer","viewHints","ViewHint","ANIMATING","INTERACTING","multiWorld","getWrapX","canWrapX","worldWidth","endWorld","world","getRenderTransform","renderFrame","layerIndex","pixelTransform","inversePixelTransform","containerReused","preRender","clipped","layerExtent","clipUnrotated","postRender","css","container","Promise","resolve","layer","startX","offsetX","matches","match","lastIndexOf","executorGroups","some","item","handleFontsChanged","getVisible","renderIfReadyAndVisible","prepareFrame","animating","interacting","frameStateExtent","vectorLayerRevision","getRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","renderedExtent","loadExtents","gutter","loadExtent","declutterBuilderGroup","userTransform","userProjection","extent_1","userExtent_1","loadFeatures","dirty","userExtent","getFeaturesInExtent","replayGroupInstructions","getOverlaps","VectorLayer","createRenderer","Feature","opt_geometryOrProperties","on","once","un","id_","geometryName_","geometryChangeKey_","addChangeListener","handleGeometryChanged_","setGeometry","properties","setProperties","hasProperties","getProperties","setGeometryName","getGeometryName","getId","handleGeometryChange_","CHANGE","createStyleFunction","setId","id","name","removeChangeListener","obj","styles_1","tmp","linearRingIsClockwise","edge","linearRingsAreOriented","opt_right","right","isClockwise","linearRingssAreOriented","orientLinearRings","orientLinearRingsArray","XY","XYZ","XYM","XYZM","RBush","opt_maxEntries","rbush_","items_","extents","values","items","uid","update","bbox","getAll","getInExtent","forEach_","forEachInExtent","opt_extent","concat","rbush","ADDFEATURE","CHANGEFEATURE","CLEAR","REMOVEFEATURE","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","withCredentials","loadFeaturesXhr","url","format","success","failure","xhr","XMLHttpRequest","open","FormatType","responseType","onload","status","responseText","responseXML","DOMParser","parseFromString","readFeatures","featureProjection","readProjection","onerror","send","dataProjection","addFeatures","VectorSourceEvent","opt_feature","opt_features","Event","VectorSource","READY","wrapX","loader_","format_","url_","loader","strategy_","strategy","collection","useSpatialIndex","featuresRtree_","loadedExtentsRtree_","loadingExtentsCount_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","featuresCollection_","getArray","addFeaturesInternal","bindFeaturesCollection_","addFeature","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","dispatchEvent","VectorEventType","handleFeatureChange_","ObjectEventType","PROPERTYCHANGE","valid","newFeatures","geometryFeatures","length_1","length_2","length_3","modifyingCollection","evt","CollectionEventType","ADD","REMOVE","removeFeature","opt_fast","featureId","removeFeatureInternal","clearEvent","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","intersectsCoordinate","forEachFeatureIntersectingExtent","intersectsExtent","getFeaturesCollection","getFeaturesAtCoordinate","getClosestFeatureToCoordinate","opt_filter","closestFeature","closestPoint","minSquaredDistance","previousMinSquaredDistance","closestPointXY","minDistance","getFeatureById","getFeatureByUid","getFormat","getUrl","sid","removeFromIdIndex_","hasFeature","loadedExtentsRtree","extentsToLoad","_loop_1","extentToLoad","alreadyLoaded","object","this_1","refresh","removeLoadedExtent","removed","setLoader","setUrl","Source","MOVESTART","MOVEEND","lineStringLength","LinearRing","opt_layout","maxDelta_","maxDeltaRevision_","setCoordinates","setFlatCoordinates","layout","getArea","getCoordinates","getSimplifiedGeometryInternal","GeometryLayout","LINEAR_RING","setLayout","deflate","SimpleGeometry","Polygon","opt_ends","ends_","flatInteriorPointRevision_","flatInteriorPoint_","orientedRevision_","orientedFlatCoordinates_","appendLinearRing","linearRing","polygon","applyProperties","containsXY","orient","flatCenter","getInteriorPoint","Point","getLinearRingCount","getLinearRing","getLinearRings","linearRings","fromExtent","HEX_COLOR_RE_","NAMED_COLOR_RE_","asString","fromNamed","el","body","rgb","getComputedStyle","removeChild","fromString","MAX_CACHE_SIZE","cacheSize","fromStringInternal_","asArray","exec","hasAlpha","substr","normalize","MapRenderer","dispatchRenderEvent","calculateMatrices2D","coordinateToPixelTransform","pixelToCoordinateTransform","checkWrapped","thisArg","layerFilter","thisArg2","managed","translatedCoordinate","offsets","layerStates","numLayers","hasRenderer","layerRenderer","callback_1","order","forEachLayerAtPixel","hasFeatureAtCoordinate","scheduleExpireIconCache","postRenderFunctions","expireIconCache","Disposable","CompositeMapRenderer","fontChangeListenerKey_","redrawText","element_","position","getViewport","insertBefore","firstChild","children_","event_1","parentNode","PRECOMPOSE","declutterLayers","previousElement","sourceState","UNDEFINED","POSTCOMPOSE","getDataAtPixel","Composite","MapEvent","opt_frameState","MapBrowserEvent","originalEvent","opt_dragging","pixel_","coordinate_","dragging","defineProperty","getEventPixel","enumerable","configurable","getCoordinateFromPixel","stopPropagation","SINGLECLICK","DBLCLICK","POINTERDRAG","POINTERMOVE","POINTERDOWN","POINTERUP","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","POINTERCANCEL","MapBrowserEventHandler","moveTolerance","clickTimeoutId_","emulateClicks_","dragging_","dragListenerKeys_","moveTolerance_","down_","activePointers_","trackedTouches_","pointerdownListenerKey_","handlePointerDown_","originalPointerMoveEvent_","relayedListenerKey_","relayEvent_","boundHandleTouchMove_","handleTouchMove_","TOUCHMOVE","passive","emulateClick_","pointerEvent","newEvent","MapBrowserEventType","clearTimeout","setTimeout","updateActivePointers_","pointerId","handlePointerUp_","defaultPrevented","isMouseActionButton_","property","doc","getOwnerDocument","handlePointerMove_","getRootNode","isMoving_","cancelable","clientX","clientY","removeEventListener","Target","LAYERGROUP","SIZE","TARGET","VIEW","DROP","PriorityQueue","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","elements","priorities","siftUp_","elementKey","enqueue","priority","siftDown_","getCount","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","count","startIndex","lIndex","rIndex","smallerChildIndex","parentIndex","reprioritize","TileQueue","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","handleTileChange","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","tile","getTilesLoading","getState","TileState","EMPTY","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","getTilePriority","tileSourceKey","tileCenter","tileResolution","wantedTiles","deltaX","deltaY","PluggableMap","optionsInternal","createOptionsInternal","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","renderFrame_","Date","now","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","window","overlayContainer_","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","keyboardEventTarget","keyHandlerKeys_","interactions","overlays_","overlays","overlayIdIndex_","renderer_","handleResize_","postRenderFunctions_","tileQueue_","handleTileChange_","MapProperty","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","View","then","viewOptions","setView","addOverlayInternal_","overlay","control","interaction","Error","addControl","getControls","addInteraction","getInteractions","addLayer","layers","getLayerGroup","getLayers","addOverlay","getOverlays","forEachFeatureAtPixel","getCoordinateFromPixelInternal","getFeaturesAtPixel","hasFeatureAtPixel","getEventCoordinate","getEventCoordinateInternal","viewportPosition","getBoundingClientRect","eventPosition","changedTouches","left","top","getTarget","getTargetElement","getProjection","getOverlayById","setLayers","group","extend","getLoading","getLayerStatesArray","getPixelFromCoordinate","viewCoordinate","getPixelFromCoordinateInternal","getOverlayContainer","targetElement","ownerDocument","browserEvent","opt_type","mapBrowserEvent","handleMapBrowserEvent","eventType","WHEEL","KEYDOWN","rootNode","documentElement","interactionsArray","getActive","cont","handleEvent","propagationStopped","handlePostRender","tileQueue","hints","lowOnFrameBudget","time","RENDERCOMPLETE","resolveConstraints","CONTEXTMENU","RESIZE","dispose","KEYPRESS","updateSize","cancelAnimationFrame","handleViewPropertyChanged_","updateViewportSize_","layerGroup","isRendered","renderSync","requestAnimationFrame","removeControl","removeInteraction","removeLayer","removeOverlay","previousFrameState","isDef","getHints","usedTiles","nextCenter","nextResolution","nextRotation","nextExtent","moveStart","MapEventType","idle","setLayerGroup","computedStyle","offsetWidth","parseFloat","offsetHeight","getClientRects","console","warn","setViewportSize","ACTIVE","Interaction","setActive","active","pan","opt_duration","currentCenter","getCenterInternal","animateInternal","getConstrainedCenter","zoomByDelta","opt_anchor","newResolution","getResolutionForZoom","DoubleClickZoom","delta_","stopEvent","shiftKey","PointerInteraction","handleDownEvent","handleDragEvent","handleMoveEvent","handleUpEvent","stopDown","handlingDownUpSequence","trackedPointers_","targetPointers","getPointerCount","updateTrackedPointers_","handledUp","handled","isPointerDraggingEvent","Pointer","var_args","conditions","pass","altShiftKeysOnly","altKey","metaKey","ctrlKey","activeElement","focusWithTabindex","hasAttribute","always","mouseActionButton","noModifierKeys","shiftKeyOnly","targetNotEditable","tagName","mouseOnly","pointerType","primaryAction","isPrimary","DragPan","kinetic_","kinetic","lastCentroid","lastPointersCount_","panning_","condition","condition_","onFocusOnly","noKinetic_","beginInteraction","centroid","getResolution","adjustCenterInternal","getDistance","getAngle","centerpx","dest","cos","sin","endInteraction","DragRotate","lastAngle_","getConstraints","theta","adjustRotationInternal","RenderBox","geometry_","startPixel_","endPixel_","render_","startPixel","endPixel","px","setPixels","createOrUpdateGeometry","pixels","DragBoxEventType","BOXSTART","BOXDRAG","BOXEND","BOXCANCEL","DragBoxEvent","DragBox","box_","minArea_","minArea","onBoxEnd","boxEndCondition_","boxEndCondition","defaultBoxEndCondition","completeBox","DragZoom","out_","out","rotatedExtent","rotatedExtentForGeometry","getResolutionForExtentInternal","factor","fitInternal","LEFT","UP","RIGHT","DOWN","KeyboardPan","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","keyCode","KeyCode","mapUnitsDelta","KeyboardZoom","charCode","charCodeAt","Kinetic","decay","minVelocity","delay","decay_","minVelocity_","delay_","points_","angle_","initialVelocity_","lastIndex","firstIndex","Mode","TRACKPAD","MouseWheelZoom","totalDelta_","lastDelta_","maxDelta","timeout_","timeout","useAnchor_","useAnchor","constrainResolution_","constrainResolution","lastAnchor_","startTime_","timeoutId_","mode_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","endInteraction_","wheelEvent","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","getConstrainResolution","adjustZoom","timeLeft","handleWheelZoom_","setMouseAnchor","PinchRotate","pointerOptions","anchor_","rotating_","rotationDelta_","threshold_","threshold","rotationDelta","touch0","touch1","PinchZoom","lastDistance_","lastScaleDelta_","scaleDelta","adjustResolutionInternal","direction","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","keyboard","mouseWheelZoom","shiftDragZoom","Map","Style","geometryFunction_","defaultGeometryFunction","hitDetectionRenderer_","stroke_","zIndex_","setRenderer","setHitDetectionRenderer","setFill","setStroke","setZIndex","toFunction","defaultStyles","createDefaultStyle","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","taintedTestContext","IconImage","Image","canvas_","color_","unlisten_","imageState_","size_","src_","tainted_","isTainted_","dispatchChangeEvent_","handleImageError_","unlistenImage_","handleImageLoad_","replaceColor_","getSrc","LOADING","ctx","getContext","globalCompositeOperation","imgData","putImageData","displacement","normalizedAnchor_","anchorOrigin_","anchorOrigin","IconOrigin","anchorXUnits_","FRACTION","anchorYUnits_","crossOrigin_","iconImage_","offset_","offsetOrigin_","offsetOrigin","origin_","getDisplacement","setAnchor","iconImageSize","Fill","Stroke","lineCap_","lineDash_","lineDashOffset_","lineJoin_","miterLimit_","setLineCap","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","disable","none","createSnapToN","opt_isMoving","createSnapToZero","opt_tolerance","tmpTransform","Geometry","extentRevision_","simplifiedGeometryMaxMinSquaredTolerance","simplifiedGeometryRevision","simplifyTransformedInternal","revision","getSimplifiedGeometry","applyTransform","coord","getClosestPoint","point","opt_closestPoint","computeExtent","sx","opt_sy","simplify","transformFn","destination","sourceProj","getUnits","TILE_PIXELS","inCoordinates","outCoordinates","pixelExtent","projectedExtent","getWorldExtent","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","multiArrayMaxSquaredDelta","assignClosestPoint","isRing","opt_tmpPoint","squaredDistance","tmpPoint","assignClosestArrayPoint","assignClosestMultiArrayPoint","getFirstCoordinate","getLastCoordinate","getLayout","getStrideForLayout","nesting","getLayoutForStride","sy","transformGeom2D","simpleGeometry","CENTER","RESOLUTION","ROTATION","createExtent","onlyCenter","smooth","opt_centerShift","viewWidth","viewHeight","shiftX","shiftY","ratio","getViewportClampedResolution","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","maxResolution","minResolution","createSnapToResolutions","resolutions","opt_smooth","opt_maxExtent","opt_showFullExtent","cappedMaxRes","capped","z","createSnapToPower","power","opt_minResolution","minZoomLevel","cappedZoomLevel","zoomLevel","createMinMaxResolution","DEFAULT_MIN_ZOOM","hints_","animations_","updateAnimationKey_","projection_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","nextCenter_","nextResolution_","nextRotation_","cancelAnchor_","applyOptions_","resolutionConstraintInfo","createResolutionConstraint","maxResolution_","minResolution_","zoomFactor_","zoomFactor","resolutions_","padding_","minZoom_","minZoom","centerConstraint","createCenterConstraint","resolutionConstraint","constraint","rotationConstraint","createRotationConstraint","constraints_","setCenterInternal","setResolution","options_","oldPadding","newPadding","getUpdatedOptions_","newOptions","animationCount","series","animation","complete","sourceCenter","targetCenter","sourceResolution","targetResolution","sourceRotation","targetRotation","isNoopAnimation","setHint","updateAnimations_","animationCallback","getInteracting","more","seriesComplete","elapsed","fraction","progress","x0","y0","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","Boolean","currentResolution","opt_rotation","opt_size","ViewProperty","opt_hints","calculateExtent","calculateExtentInternal","getViewportSizeMinusPadding_","getMaxResolution","getMinResolution","getMaxZoom","getZoomForResolution","setMaxZoom","maxZoom","getMinZoom","setMinZoom","setConstrainResolution","enabled","getResolutions","getResolutionForExtent","getResolutionForValueFunction","opt_power","getConstrainedResolution","getValueForResolutionFunction","logPower","reducedSize","calculateCenterOn","nearest","baseLevel","fit","geometryOrExtent","cosAngle","sinAngle","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","centerRot","centerOn","centerOnInternal","calculateCenterShift","centerShift","shiftedCenter","adjustCenter","deltaCoordinates","setCenter","adjustResolution","isMoving","adjustRotation","newRotation","hint","opt_doNotCancelAnims","opt_forceMoving","newCenter","opt_resolutionDirection","endInteractionInternal","opt_targetResolution","targetZoom","opt_direction","targetRes","returnValue","smoothExtentConstraint","constrainOnlyCenter","isGlobal","defaultMaxZoom","defaultZoomFactor","smoothResolutionConstraint","projExtent","Units","DEGREES","getMetersPerUnit","defaultMaxResolution","defaultMinResolution","enableRotation","constrainRotation","fails","METHOD_NAME","argument","method","ImageStyle","scaleArray_","displacement_","setOpacity","setRotateWithView","setScale","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","deflateMultiCoordinatesArray","coordinatesss","opt_endss","twiceArea","area","linearRingss","$","toObject","nativeKeys","FAILS_ON_PRIMITIVES","stat","forced","it","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","opt_coordinatess","inflateMultiCoordinatesArray","opt_coordinatesss","transform2D","intersectsLineString","coordinatesExtent","point1","point2","intersectsLineStringArray","intersectsLinearRing","intersectsLinearRingArray","intersectsLinearRingMultiArray","RegularShape","hitDetectionCanvas_","points","radius_","radius1","radius2_","radius2","renderOptions_","getPoints","getRadius","getRadius2","createHitDetectionCanvas_","renderOptions","draw_","calculateLineJoinSize_","r1","r2","miterRatio","maxr","bevelAdd","aa","bb","ee","innerMiterRatio","innerLength","createRenderOptions","maxRadius","createPath_","drawHitDetectionCanvas_","startAngle","step","angle0","radiusC","CircleStyle","setRadius","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","proto","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","labelCache","measureFont","measureContext","textHeights","registerFont","interval","referenceWidth","retries","referenceFonts","isAvailable","fontStyle","fontWeight","fontFamily","available","referenceFont","measureTextWidth","check","done","fonts","getKeys","clearInterval","fontSpec","families","family","weight","setInterval","measureTextHeight","measureElement","metrics","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","minHeight","maxHeight","border","measureTextWidths","currentWidth","drawImageOrLabel","labelOrImage","executeLabelInstructions","asColorLike","ret"],"mappings":"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","file":"js/chunk-a383069c.51b80b65.js","sourcesContent":["/**\n * @module ol/geom/flat/interiorpoint\n */\nimport { linearRingsContainsXY } from './contains.js';\nimport { numberSafeCompareFunction } from '../../array.js';\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} [opt_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(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) {\n var i, ii, x, x1, x2, y1, y2;\n var y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n var intersections = [];\n // Calculate intersections with the horizontal line\n for (var r = 0, rr = ends.length; r < rr; ++r) {\n var 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 var pointX = NaN;\n var maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n var 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 (opt_dest) {\n opt_dest.push(pointX, y, maxSegmentLength);\n return opt_dest;\n }\n else {\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(flatCoordinates, offset, endss, stride, flatCenters) {\n var interiorPoints = [];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n interiorPoints = getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints);\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n//# sourceMappingURL=interiorpoint.js.map","'use strict';\nvar global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\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.\nimport { squaredDistance, squaredSegmentDistance } from '../../math.js';\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} [opt_simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {\n var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined\n ? opt_simplifiedFlatCoordinates\n : [];\n if (!highQuality) {\n end = radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n return simplifiedFlatCoordinates;\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(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n var 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 var markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n var stack = [offset, end - stride];\n var index = 0;\n while (stack.length > 0) {\n var last = stack.pop();\n var first = stack.pop();\n var maxSquaredDistance = 0;\n var x1 = flatCoordinates[first];\n var y1 = flatCoordinates[first + 1];\n var x2 = flatCoordinates[last];\n var y2 = flatCoordinates[last + 1];\n for (var i = first + stride; i < last; i += stride) {\n var x = flatCoordinates[i];\n var y = flatCoordinates[i + 1];\n var squaredDistance_1 = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance_1 > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance_1;\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 (var 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 * @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(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n simplifiedOffset = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\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(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n var simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\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(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\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 var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n var x2 = x1;\n var 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 * @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 * 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(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n var x1 = snap(flatCoordinates[offset], tolerance);\n var 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 var 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 var x3 = snap(flatCoordinates[offset], tolerance);\n var 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 var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n var dx2 = x3 - x1;\n var 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 (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 // 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 * @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(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n simplifiedOffset = quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\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(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n var simplifiedEnds = [];\n simplifiedOffset = quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n//# sourceMappingURL=simplify.js.map","/**\n * @module ol/format/FormatType\n */\n/**\n * @enum {string}\n */\nexport default {\n ARRAY_BUFFER: 'arraybuffer',\n JSON: 'json',\n TEXT: 'text',\n XML: 'xml',\n};\n//# sourceMappingURL=FormatType.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { equals } from '../array.js';\nimport { inView } from '../layer/Layer.js';\nimport { removeChildren, replaceNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nvar Attribution = /** @class */ (function (_super) {\n __extends(Attribution, _super);\n /**\n * @param {Options} [opt_options] Attribution options.\n */\n function Attribution(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.ulElement_ = document.createElement('ul');\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n /**\n * @private\n * @type {boolean}\n */\n _this.userCollapsed_ = _this.collapsed_;\n /**\n * @private\n * @type {boolean}\n */\n _this.overrideCollapsible_ = options.collapsible !== undefined;\n /**\n * @private\n * @type {boolean}\n */\n _this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n if (!_this.collapsible_) {\n _this.collapsed_ = false;\n }\n var className = options.className !== undefined ? options.className : 'ol-attribution';\n var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n var expandClassName = options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n var collapseClassName = options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collpase';\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.collapseLabel_ = document.createElement('span');\n _this.collapseLabel_.textContent = collapseLabel;\n _this.collapseLabel_.className = collapseClassName;\n }\n else {\n _this.collapseLabel_ = collapseLabel;\n }\n var label = options.label !== undefined ? options.label : 'i';\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.label_ = document.createElement('span');\n _this.label_.textContent = label;\n _this.label_.className = expandClassName;\n }\n else {\n _this.label_ = label;\n }\n var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.toggleButton_ = document.createElement('button');\n _this.toggleButton_.setAttribute('type', 'button');\n _this.toggleButton_.setAttribute('aria-expanded', String(!_this.collapsed_));\n _this.toggleButton_.title = tipLabel;\n _this.toggleButton_.appendChild(activeLabel);\n _this.toggleButton_.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (_this.collapsed_ && _this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (_this.collapsible_ ? '' : ' ol-uncollapsible');\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(_this.toggleButton_);\n element.appendChild(_this.ulElement_);\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n _this.renderedAttributions_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n Attribution.prototype.collectSourceAttributions_ = function (frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n var lookup = {};\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n var visibleAttributions = [];\n var collapsible = true;\n var layerStatesArray = frameState.layerStatesArray;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n var source = /** @type {import(\"../layer/Layer.js\").default} */ (layerState.layer).getSource();\n if (!source) {\n continue;\n }\n var attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n var attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n if (Array.isArray(attributions)) {\n for (var j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n }\n else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n };\n /**\n * @private\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n Attribution.prototype.updateElement_ = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n var attributions = this.collectSourceAttributions_(frameState);\n var visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n removeChildren(this.ulElement_);\n // append the attributions\n for (var i = 0, ii = attributions.length; i < ii; ++i) {\n var element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n this.renderedAttributions_ = attributions;\n };\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Attribution.prototype.handleClick_ = function (event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n };\n /**\n * @private\n */\n Attribution.prototype.handleToggle_ = function () {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n }\n else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n };\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.getCollapsible = function () {\n return this.collapsible_;\n };\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n Attribution.prototype.setCollapsible = function (collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n };\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.setCollapsed = function (collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n };\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n Attribution.prototype.getCollapsed = function () {\n return this.collapsed_;\n };\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Attribution.prototype.render = function (mapEvent) {\n this.updateElement_(mapEvent.frameState);\n };\n return Attribution;\n}(Control));\nexport default Attribution;\n//# sourceMappingURL=Attribution.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nvar Rotate = /** @class */ (function (_super) {\n __extends(Rotate, _super);\n /**\n * @param {Options} [opt_options] Rotate options.\n */\n function Rotate(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-rotate';\n var label = options.label !== undefined ? options.label : '\\u21E7';\n var compassClassName = options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n /**\n * @type {HTMLElement}\n * @private\n */\n _this.label_ = null;\n if (typeof label === 'string') {\n _this.label_ = document.createElement('span');\n _this.label_.className = compassClassName;\n _this.label_.textContent = label;\n }\n else {\n _this.label_ = label;\n _this.label_.classList.add(compassClassName);\n }\n var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n var button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(_this.label_);\n button.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(button);\n _this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n /**\n * @type {boolean}\n * @private\n */\n _this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.rotation_ = undefined;\n if (_this.autoHide_) {\n _this.element.classList.add(CLASS_HIDDEN);\n }\n return _this;\n }\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Rotate.prototype.handleClick_ = function (event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n }\n else {\n this.resetNorth_();\n }\n };\n /**\n * @private\n */\n Rotate.prototype.resetNorth_ = function () {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setRotation(0);\n }\n }\n };\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n Rotate.prototype.render = function (mapEvent) {\n var frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n var rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n var transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n var contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n };\n return Rotate;\n}(Control));\nexport default Rotate;\n//# sourceMappingURL=Rotate.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport { CLASS_CONTROL, CLASS_UNSELECTABLE } from '../css.js';\nimport { easeOut } from '../easing.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nvar Zoom = /** @class */ (function (_super) {\n __extends(Zoom, _super);\n /**\n * @param {Options} [opt_options] Zoom options.\n */\n function Zoom(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n element: document.createElement('div'),\n target: options.target,\n }) || this;\n var className = options.className !== undefined ? options.className : 'ol-zoom';\n var delta = options.delta !== undefined ? options.delta : 1;\n var zoomInClassName = options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n var zoomOutClassName = options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n var zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n var zoomOutTipLabel = options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n var inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel);\n inElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, delta), false);\n var outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel);\n outElement.addEventListener(EventType.CLICK, _this.handleClick_.bind(_this, -delta), false);\n var cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n var element = _this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n /**\n * @type {number}\n * @private\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n Zoom.prototype.handleClick_ = function (delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n };\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n Zoom.prototype.zoomByDelta_ = function (delta) {\n var map = this.getMap();\n var view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n var currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n var newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n }\n else {\n view.setZoom(newZoom);\n }\n }\n };\n return Zoom;\n}(Control));\nexport default Zoom;\n//# sourceMappingURL=Zoom.js.map","/**\n * @module ol/control\n */\nimport Attribution from './control/Attribution.js';\nimport Collection from './Collection.js';\nimport Rotate from './control/Rotate.js';\nimport Zoom from './control/Zoom.js';\nexport { default as Attribution } from './control/Attribution.js';\nexport { default as Control } from './control/Control.js';\nexport { default as FullScreen } from './control/FullScreen.js';\nexport { default as MousePosition } from './control/MousePosition.js';\nexport { default as OverviewMap } from './control/OverviewMap.js';\nexport { default as Rotate } from './control/Rotate.js';\nexport { default as ScaleLine } from './control/ScaleLine.js';\nexport { default as Zoom } from './control/Zoom.js';\nexport { default as ZoomSlider } from './control/ZoomSlider.js';\nexport { default as ZoomToExtent } from './control/ZoomToExtent.js';\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./control/Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./control/Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./control/Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n * @api\n */\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [opt_options]\n * Defaults options.\n * @return {Collection}\n * Controls.\n * @api\n */\nexport function defaults(opt_options) {\n var options = opt_options ? opt_options : {};\n var controls = new Collection();\n var zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n var rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n var attributionControl = options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n return controls;\n}\n//# sourceMappingURL=control.js.map","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","/**\n * @module ol/geom/flat/contains\n */\nimport { forEachCorner } from '../../extent.js';\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(flatCoordinates, offset, end, stride, extent) {\n var outside = forEachCorner(extent, \n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);\n });\n return !outside;\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(flatCoordinates, offset, end, stride, x, y) {\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 var wn = 0;\n var x1 = flatCoordinates[end - stride];\n var y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var 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 }\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 * @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(flatCoordinates, offset, ends, stride, x, y) {\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 (var i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {\n return false;\n }\n }\n return true;\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(flatCoordinates, offset, endss, stride, x, y) {\n if (endss.length === 0) {\n return false;\n }\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var 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//# sourceMappingURL=contains.js.map","/**\n * @module ol/style/TextPlacement\n */\n/**\n * Text placement. One of `'point'`, `'line'`. Default is `'point'`. Note that\n * `'line'` requires the underlying geometry to be a {@link module:ol/geom/LineString~LineString},\n * {@link module:ol/geom/Polygon~Polygon}, {@link module:ol/geom/MultiLineString~MultiLineString} or\n * {@link module:ol/geom/MultiPolygon~MultiPolygon}.\n * @enum {string}\n */\nexport default {\n POINT: 'point',\n LINE: 'line',\n};\n//# sourceMappingURL=TextPlacement.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport { VOID } from '../functions.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { removeNode } from '../dom.js';\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nvar Control = /** @class */ (function (_super) {\n __extends(Control, _super);\n /**\n * @param {Options} options Control options.\n */\n function Control(options) {\n var _this = _super.call(this) || this;\n var element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n /**\n * @protected\n * @type {HTMLElement}\n */\n _this.element = element ? element : null;\n /**\n * @private\n * @type {HTMLElement}\n */\n _this.target_ = null;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n /**\n * @protected\n * @type {!Array}\n */\n _this.listenerKeys = [];\n if (options.render) {\n _this.render = options.render;\n }\n if (options.target) {\n _this.setTarget(options.target);\n }\n return _this;\n }\n /**\n * Clean up.\n */\n Control.prototype.disposeInternal = function () {\n removeNode(this.element);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Get the map associated with this control.\n * @return {import(\"../PluggableMap.js\").default|undefined} Map.\n * @api\n */\n Control.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} [map] Map.\n * @api\n */\n Control.prototype.setMap = function (map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (this.map_) {\n var target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(listen(map, MapEventType.POSTRENDER, this.render, this));\n }\n map.render();\n }\n };\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n Control.prototype.render = function (mapEvent) { };\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n Control.prototype.setTarget = function (target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n };\n return Control;\n}(BaseObject));\nexport default Control;\n//# sourceMappingURL=Control.js.map","/**\n * @module ol/style/IconImageCache\n */\nimport { asString } from '../color.js';\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache~shared}.\n */\nvar IconImageCache = /** @class */ (function () {\n function IconImageCache() {\n /**\n * @type {!Object}\n * @private\n */\n this.cache_ = {};\n /**\n * @type {number}\n * @private\n */\n this.cacheSize_ = 0;\n /**\n * @type {number}\n * @private\n */\n this.maxCacheSize_ = 32;\n }\n /**\n * FIXME empty description for jsdoc\n */\n IconImageCache.prototype.clear = function () {\n this.cache_ = {};\n this.cacheSize_ = 0;\n };\n /**\n * @return {boolean} Can expire cache.\n */\n IconImageCache.prototype.canExpireCache = function () {\n return this.cacheSize_ > this.maxCacheSize_;\n };\n /**\n * FIXME empty description for jsdoc\n */\n IconImageCache.prototype.expire = function () {\n if (this.canExpireCache()) {\n var i = 0;\n for (var key in this.cache_) {\n var iconImage = this.cache_[key];\n if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n delete this.cache_[key];\n --this.cacheSize_;\n }\n }\n }\n };\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n IconImageCache.prototype.get = function (src, crossOrigin, color) {\n var key = getKey(src, crossOrigin, color);\n return key in this.cache_ ? this.cache_[key] : null;\n };\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n */\n IconImageCache.prototype.set = function (src, crossOrigin, color, iconImage) {\n var key = getKey(src, crossOrigin, color);\n this.cache_[key] = iconImage;\n ++this.cacheSize_;\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 IconImageCache.prototype.setSize = function (maxCacheSize) {\n this.maxCacheSize_ = maxCacheSize;\n this.expire();\n };\n return IconImageCache;\n}());\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n var colorString = color ? asString(color) : 'null';\n return crossOrigin + ':' + src + ':' + colorString;\n}\nexport default IconImageCache;\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport var shared = new IconImageCache();\n//# sourceMappingURL=IconImageCache.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/BaseVector\n */\nimport Layer from './Layer.js';\nimport RBush from 'rbush';\nimport { assign } from '../obj.js';\nimport { createDefaultStyle, toFunction as toStyleFunction, } from '../style/Style.js';\n/**\n * @template {import(\"../source/Vector.js\").default|import(\"../source/VectorTile.js\").default} VectorSourceType\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 {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {VectorSourceType} [source] Source.\n * @property {import(\"../PluggableMap.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link import(\"../PluggableMap.js\").default#addLayer map.addLayer()}.\n * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all\n * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority\n * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.\n * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has\n * higher priority.\n * @property {import(\"../style/Style.js\").StyleLike|null} [style] Layer style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style} for default style\n * which will be used if this is not set.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will\n * be recreated during animations. This means that no vectors will be shown clipped, but the\n * setting will have a performance impact for large amounts of vector data. When set to `false`,\n * batches will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will\n * be recreated during interactions. See also `updateWhileAnimating`.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n RENDER_ORDER: 'renderOrder',\n};\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Vector.js\").default|import(\"../source/VectorTile.js\").default} VectorSourceType\n * @extends {Layer}\n * @api\n */\nvar BaseVectorLayer = /** @class */ (function (_super) {\n __extends(BaseVectorLayer, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function BaseVectorLayer(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n var baseOptions = assign({}, options);\n delete baseOptions.style;\n delete baseOptions.renderBuffer;\n delete baseOptions.updateWhileAnimating;\n delete baseOptions.updateWhileInteracting;\n _this = _super.call(this, baseOptions) || this;\n /**\n * @private\n * @type {boolean}\n */\n _this.declutter_ =\n options.declutter !== undefined ? options.declutter : false;\n /**\n * @type {number}\n * @private\n */\n _this.renderBuffer_ =\n options.renderBuffer !== undefined ? options.renderBuffer : 100;\n /**\n * User provided style.\n * @type {import(\"../style/Style.js\").StyleLike}\n * @private\n */\n _this.style_ = null;\n /**\n * Style function for use within the library.\n * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n * @private\n */\n _this.styleFunction_ = undefined;\n _this.setStyle(options.style);\n /**\n * @type {boolean}\n * @private\n */\n _this.updateWhileAnimating_ =\n options.updateWhileAnimating !== undefined\n ? options.updateWhileAnimating\n : false;\n /**\n * @type {boolean}\n * @private\n */\n _this.updateWhileInteracting_ =\n options.updateWhileInteracting !== undefined\n ? options.updateWhileInteracting\n : false;\n return _this;\n }\n /**\n * @return {boolean} Declutter.\n */\n BaseVectorLayer.prototype.getDeclutter = function () {\n return this.declutter_;\n };\n /**\n * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise\n * that resolves with an array of features. The array will either contain the topmost feature\n * when a hit was detected, or it will be empty.\n *\n * The hit detection algorithm used for this method is optimized for performance, but is less\n * accurate than the one used in {@link import(\"../PluggableMap.js\").default#getFeaturesAtPixel}: Text\n * is not considered, and icons are only represented by their bounding box instead of the exact\n * image.\n *\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with an array of features.\n * @api\n */\n BaseVectorLayer.prototype.getFeatures = function (pixel) {\n return _super.prototype.getFeatures.call(this, pixel);\n };\n /**\n * @return {number|undefined} Render buffer.\n */\n BaseVectorLayer.prototype.getRenderBuffer = function () {\n return this.renderBuffer_;\n };\n /**\n * @return {function(import(\"../Feature.js\").default, import(\"../Feature.js\").default): number|null|undefined} Render\n * order.\n */\n BaseVectorLayer.prototype.getRenderOrder = function () {\n return /** @type {import(\"../render.js\").OrderFunction|null|undefined} */ (this.get(Property.RENDER_ORDER));\n };\n /**\n * Get the style for features. This returns whatever was passed to the `style`\n * option at construction or to the `setStyle` method.\n * @return {import(\"../style/Style.js\").StyleLike|null|undefined} Layer style.\n * @api\n */\n BaseVectorLayer.prototype.getStyle = function () {\n return this.style_;\n };\n /**\n * Get the style function.\n * @return {import(\"../style/Style.js\").StyleFunction|undefined} Layer style function.\n * @api\n */\n BaseVectorLayer.prototype.getStyleFunction = function () {\n return this.styleFunction_;\n };\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * animating.\n */\n BaseVectorLayer.prototype.getUpdateWhileAnimating = function () {\n return this.updateWhileAnimating_;\n };\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * interacting.\n */\n BaseVectorLayer.prototype.getUpdateWhileInteracting = function () {\n return this.updateWhileInteracting_;\n };\n /**\n * Render declutter items for this layer\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n BaseVectorLayer.prototype.renderDeclutter = function (frameState) {\n if (!frameState.declutterTree) {\n frameState.declutterTree = new RBush(9);\n }\n /** @type {*} */ (this.getRenderer()).renderDeclutter(frameState);\n };\n /**\n * @param {import(\"../render.js\").OrderFunction|null|undefined} renderOrder\n * Render order.\n */\n BaseVectorLayer.prototype.setRenderOrder = function (renderOrder) {\n this.set(Property.RENDER_ORDER, renderOrder);\n };\n /**\n * Set the style for features. This can be a single style object, an array\n * of styles, or a function that takes a feature and resolution and returns\n * an array of styles. If set to `null`, the layer has no style (a `null` style),\n * so only features that have their own styles will be rendered in the layer. Call\n * `setStyle()` without arguments to reset to the default style. See\n * {@link module:ol/style} for information on the default style.\n * @param {import(\"../style/Style.js\").StyleLike|null} [opt_style] Layer style.\n * @api\n */\n BaseVectorLayer.prototype.setStyle = function (opt_style) {\n this.style_ = opt_style !== undefined ? opt_style : createDefaultStyle;\n this.styleFunction_ =\n opt_style === null ? undefined : toStyleFunction(this.style_);\n this.changed();\n };\n return BaseVectorLayer;\n}(Layer));\nexport default BaseVectorLayer;\n//# sourceMappingURL=BaseVector.js.map","/**\n * @module ol/render/canvas/Instruction\n */\n/**\n * @enum {number}\n */\nvar Instruction = {\n BEGIN_GEOMETRY: 0,\n BEGIN_PATH: 1,\n CIRCLE: 2,\n CLOSE_PATH: 3,\n CUSTOM: 4,\n DRAW_CHARS: 5,\n DRAW_IMAGE: 6,\n END_GEOMETRY: 7,\n FILL: 8,\n MOVE_TO_LINE_TO: 9,\n SET_FILL_STYLE: 10,\n SET_STROKE_STYLE: 11,\n STROKE: 12,\n};\n/**\n * @type {Array}\n */\nexport var fillInstruction = [Instruction.FILL];\n/**\n * @type {Array}\n */\nexport var strokeInstruction = [Instruction.STROKE];\n/**\n * @type {Array}\n */\nexport var beginPathInstruction = [Instruction.BEGIN_PATH];\n/**\n * @type {Array}\n */\nexport var closePathInstruction = [Instruction.CLOSE_PATH];\nexport default Instruction;\n//# sourceMappingURL=Instruction.js.map","/**\n * @module ol/render/VectorContext\n */\n/**\n * @classdesc\n * Context for drawing geometries. A vector context is available on render\n * events and does not need to be constructed directly.\n * @api\n */\nvar VectorContext = /** @class */ (function () {\n function VectorContext() {\n }\n /**\n * Render a geometry with a custom renderer.\n *\n * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {Function} renderer Renderer.\n * @param {Function} hitDetectionRenderer Renderer.\n */\n VectorContext.prototype.drawCustom = function (geometry, feature, renderer, hitDetectionRenderer) { };\n /**\n * Render a geometry.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry The geometry to render.\n */\n VectorContext.prototype.drawGeometry = function (geometry) { };\n /**\n * Set the rendering style.\n *\n * @param {import(\"../style/Style.js\").default} style The rendering style.\n */\n VectorContext.prototype.setStyle = function (style) { };\n /**\n * @param {import(\"../geom/Circle.js\").default} circleGeometry Circle geometry.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n VectorContext.prototype.drawCircle = function (circleGeometry, feature) { };\n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n */\n VectorContext.prototype.drawFeature = function (feature, style) { };\n /**\n * @param {import(\"../geom/GeometryCollection.js\").default} geometryCollectionGeometry Geometry collection.\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n VectorContext.prototype.drawGeometryCollection = function (geometryCollectionGeometry, feature) { };\n /**\n * @param {import(\"../geom/LineString.js\").default|import(\"./Feature.js\").default} lineStringGeometry Line string geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawLineString = function (lineStringGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"./Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"./Feature.js\").default} multiPointGeometry MultiPoint geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiPoint = function (multiPointGeometry, feature) { };\n /**\n * @param {import(\"../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) { };\n /**\n * @param {import(\"../geom/Point.js\").default|import(\"./Feature.js\").default} pointGeometry Point geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawPoint = function (pointGeometry, feature) { };\n /**\n * @param {import(\"../geom/Polygon.js\").default|import(\"./Feature.js\").default} polygonGeometry Polygon geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawPolygon = function (polygonGeometry, feature) { };\n /**\n * @param {import(\"../geom/SimpleGeometry.js\").default|import(\"./Feature.js\").default} geometry Geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\n VectorContext.prototype.drawText = function (geometry, feature) { };\n /**\n * @param {import(\"../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n VectorContext.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) { };\n /**\n * @param {import(\"../style/Image.js\").default} imageStyle Image style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [opt_declutterImageWithText] Shared data for combined decluttering with a text style.\n */\n VectorContext.prototype.setImageStyle = function (imageStyle, opt_declutterImageWithText) { };\n /**\n * @param {import(\"../style/Text.js\").default} textStyle Text style.\n * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [opt_declutterImageWithText] Shared data for combined decluttering with an image style.\n */\n VectorContext.prototype.setTextStyle = function (textStyle, opt_declutterImageWithText) { };\n return VectorContext;\n}());\nexport default VectorContext;\n//# sourceMappingURL=VectorContext.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/Builder\n */\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport Relationship from '../../extent/Relationship.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { buffer, clone, containsCoordinate, coordinateRelationship, } from '../../extent.js';\nimport { defaultFillStyle, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../canvas.js';\nimport { equals, reverseSubArray } from '../../array.js';\nimport { inflateCoordinates, inflateCoordinatesArray, inflateMultiCoordinatesArray, } from '../../geom/flat/inflate.js';\nvar CanvasBuilder = /** @class */ (function (_super) {\n __extends(CanvasBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {number}\n */\n _this.tolerance = tolerance;\n /**\n * @protected\n * @const\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.maxExtent = maxExtent;\n /**\n * @protected\n * @type {number}\n */\n _this.pixelRatio = pixelRatio;\n /**\n * @protected\n * @type {number}\n */\n _this.maxLineWidth = 0;\n /**\n * @protected\n * @const\n * @type {number}\n */\n _this.resolution = resolution;\n /**\n * @private\n * @type {Array<*>}\n */\n _this.beginGeometryInstruction1_ = null;\n /**\n * @private\n * @type {Array<*>}\n */\n _this.beginGeometryInstruction2_ = null;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.bufferedMaxExtent_ = null;\n /**\n * @protected\n * @type {Array<*>}\n */\n _this.instructions = [];\n /**\n * @protected\n * @type {Array}\n */\n _this.coordinates = [];\n /**\n * @private\n * @type {import(\"../../coordinate.js\").Coordinate}\n */\n _this.tmpCoordinate_ = [];\n /**\n * @protected\n * @type {Array<*>}\n */\n _this.hitDetectionInstructions = [];\n /**\n * @protected\n * @type {import(\"../canvas.js\").FillStrokeState}\n */\n _this.state = /** @type {import(\"../canvas.js\").FillStrokeState} */ ({});\n return _this;\n }\n /**\n * @protected\n * @param {Array} dashArray Dash array.\n * @return {Array} Dash array with pixel ratio applied\n */\n CanvasBuilder.prototype.applyPixelRatio = function (dashArray) {\n var pixelRatio = this.pixelRatio;\n return pixelRatio == 1\n ? dashArray\n : dashArray.map(function (dash) {\n return dash * pixelRatio;\n });\n };\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} stride Stride.\n * @protected\n * @return {number} My end\n */\n CanvasBuilder.prototype.appendFlatPointCoordinates = function (flatCoordinates, stride) {\n var extent = this.getBufferedMaxExtent();\n var tmpCoord = this.tmpCoordinate_;\n var coordinates = this.coordinates;\n var myEnd = coordinates.length;\n for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n tmpCoord[0] = flatCoordinates[i];\n tmpCoord[1] = flatCoordinates[i + 1];\n if (containsCoordinate(extent, tmpCoord)) {\n coordinates[myEnd++] = tmpCoord[0];\n coordinates[myEnd++] = tmpCoord[1];\n }\n }\n return myEnd;\n };\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} closed Last input coordinate equals first.\n * @param {boolean} skipFirst Skip first coordinate.\n * @protected\n * @return {number} My end.\n */\n CanvasBuilder.prototype.appendFlatLineCoordinates = function (flatCoordinates, offset, end, stride, closed, skipFirst) {\n var coordinates = this.coordinates;\n var myEnd = coordinates.length;\n var extent = this.getBufferedMaxExtent();\n if (skipFirst) {\n offset += stride;\n }\n var lastXCoord = flatCoordinates[offset];\n var lastYCoord = flatCoordinates[offset + 1];\n var nextCoord = this.tmpCoordinate_;\n var skipped = true;\n var i, lastRel, nextRel;\n for (i = offset + stride; i < end; i += stride) {\n nextCoord[0] = flatCoordinates[i];\n nextCoord[1] = flatCoordinates[i + 1];\n nextRel = coordinateRelationship(extent, nextCoord);\n if (nextRel !== lastRel) {\n if (skipped) {\n coordinates[myEnd++] = lastXCoord;\n coordinates[myEnd++] = lastYCoord;\n skipped = false;\n }\n coordinates[myEnd++] = nextCoord[0];\n coordinates[myEnd++] = nextCoord[1];\n }\n else if (nextRel === Relationship.INTERSECTING) {\n coordinates[myEnd++] = nextCoord[0];\n coordinates[myEnd++] = nextCoord[1];\n skipped = false;\n }\n else {\n skipped = true;\n }\n lastXCoord = nextCoord[0];\n lastYCoord = nextCoord[1];\n lastRel = nextRel;\n }\n // Last coordinate equals first or only one point to append:\n if ((closed && skipped) || i === offset + stride) {\n coordinates[myEnd++] = lastXCoord;\n coordinates[myEnd++] = lastYCoord;\n }\n return myEnd;\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} builderEnds Builder ends.\n * @return {number} Offset.\n */\n CanvasBuilder.prototype.drawCustomCoordinates_ = function (flatCoordinates, offset, ends, stride, builderEnds) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var builderEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n builderEnds.push(builderEnd);\n offset = end;\n }\n return offset;\n };\n /**\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {Function} renderer Renderer.\n * @param {Function} hitDetectionRenderer Renderer.\n */\n CanvasBuilder.prototype.drawCustom = function (geometry, feature, renderer, hitDetectionRenderer) {\n this.beginGeometry(geometry, feature);\n var type = geometry.getType();\n var stride = geometry.getStride();\n var builderBegin = this.coordinates.length;\n var flatCoordinates, builderEnd, builderEnds, builderEndss;\n var offset;\n switch (type) {\n case GeometryType.MULTI_POLYGON:\n flatCoordinates =\n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getOrientedFlatCoordinates();\n builderEndss = [];\n var endss = \n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n offset = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var myEnds = [];\n offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds);\n builderEndss.push(myEnds);\n }\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEndss,\n geometry,\n renderer,\n inflateMultiCoordinatesArray,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEndss,\n geometry,\n hitDetectionRenderer || renderer,\n inflateMultiCoordinatesArray,\n ]);\n break;\n case GeometryType.POLYGON:\n case GeometryType.MULTI_LINE_STRING:\n builderEnds = [];\n flatCoordinates =\n type == GeometryType.POLYGON\n ? /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getOrientedFlatCoordinates()\n : geometry.getFlatCoordinates();\n offset = this.drawCustomCoordinates_(flatCoordinates, 0, \n /** @type {import(\"../../geom/Polygon.js\").default|import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds(), stride, builderEnds);\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnds,\n geometry,\n renderer,\n inflateCoordinatesArray,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnds,\n geometry,\n hitDetectionRenderer || renderer,\n inflateCoordinatesArray,\n ]);\n break;\n case GeometryType.LINE_STRING:\n case GeometryType.CIRCLE:\n flatCoordinates = geometry.getFlatCoordinates();\n builderEnd = this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n inflateCoordinates,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n hitDetectionRenderer || renderer,\n inflateCoordinates,\n ]);\n break;\n case GeometryType.MULTI_POINT:\n flatCoordinates = geometry.getFlatCoordinates();\n builderEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n if (builderEnd > builderBegin) {\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n inflateCoordinates,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n hitDetectionRenderer || renderer,\n inflateCoordinates,\n ]);\n }\n break;\n case GeometryType.POINT:\n flatCoordinates = geometry.getFlatCoordinates();\n this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);\n builderEnd = this.coordinates.length;\n this.instructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n renderer,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.CUSTOM,\n builderBegin,\n builderEnd,\n geometry,\n hitDetectionRenderer || renderer,\n ]);\n break;\n default:\n }\n this.endGeometry(feature);\n };\n /**\n * @protected\n * @param {import(\"../../geom/Geometry\").default|import(\"../Feature.js\").default} geometry The geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasBuilder.prototype.beginGeometry = function (geometry, feature) {\n this.beginGeometryInstruction1_ = [\n CanvasInstruction.BEGIN_GEOMETRY,\n feature,\n 0,\n geometry,\n ];\n this.instructions.push(this.beginGeometryInstruction1_);\n this.beginGeometryInstruction2_ = [\n CanvasInstruction.BEGIN_GEOMETRY,\n feature,\n 0,\n geometry,\n ];\n this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasBuilder.prototype.finish = function () {\n return {\n instructions: this.instructions,\n hitDetectionInstructions: this.hitDetectionInstructions,\n coordinates: this.coordinates,\n };\n };\n /**\n * Reverse the hit detection instructions.\n */\n CanvasBuilder.prototype.reverseHitDetectionInstructions = function () {\n var hitDetectionInstructions = this.hitDetectionInstructions;\n // step 1 - reverse array\n hitDetectionInstructions.reverse();\n // step 2 - reverse instructions within geometry blocks\n var i;\n var n = hitDetectionInstructions.length;\n var instruction;\n var type;\n var begin = -1;\n for (i = 0; i < n; ++i) {\n instruction = hitDetectionInstructions[i];\n type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n if (type == CanvasInstruction.END_GEOMETRY) {\n begin = i;\n }\n else if (type == CanvasInstruction.BEGIN_GEOMETRY) {\n instruction[2] = i;\n reverseSubArray(this.hitDetectionInstructions, begin, i);\n begin = -1;\n }\n }\n };\n /**\n * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n CanvasBuilder.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n var state = this.state;\n if (fillStyle) {\n var fillStyleColor = fillStyle.getColor();\n state.fillStyle = asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle);\n }\n else {\n state.fillStyle = undefined;\n }\n if (strokeStyle) {\n var strokeStyleColor = strokeStyle.getColor();\n state.strokeStyle = asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle);\n var strokeStyleLineCap = strokeStyle.getLineCap();\n state.lineCap =\n strokeStyleLineCap !== undefined ? strokeStyleLineCap : defaultLineCap;\n var strokeStyleLineDash = strokeStyle.getLineDash();\n state.lineDash = strokeStyleLineDash\n ? strokeStyleLineDash.slice()\n : defaultLineDash;\n var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n state.lineDashOffset = strokeStyleLineDashOffset\n ? strokeStyleLineDashOffset\n : defaultLineDashOffset;\n var strokeStyleLineJoin = strokeStyle.getLineJoin();\n state.lineJoin =\n strokeStyleLineJoin !== undefined\n ? strokeStyleLineJoin\n : defaultLineJoin;\n var strokeStyleWidth = strokeStyle.getWidth();\n state.lineWidth =\n strokeStyleWidth !== undefined ? strokeStyleWidth : defaultLineWidth;\n var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n state.miterLimit =\n strokeStyleMiterLimit !== undefined\n ? strokeStyleMiterLimit\n : defaultMiterLimit;\n if (state.lineWidth > this.maxLineWidth) {\n this.maxLineWidth = state.lineWidth;\n // invalidate the buffered max extent cache\n this.bufferedMaxExtent_ = null;\n }\n }\n else {\n state.strokeStyle = undefined;\n state.lineCap = undefined;\n state.lineDash = null;\n state.lineDashOffset = undefined;\n state.lineJoin = undefined;\n state.lineWidth = undefined;\n state.miterLimit = undefined;\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @return {Array<*>} Fill instruction.\n */\n CanvasBuilder.prototype.createFill = function (state) {\n var fillStyle = state.fillStyle;\n /** @type {Array<*>} */\n var fillInstruction = [CanvasInstruction.SET_FILL_STYLE, fillStyle];\n if (typeof fillStyle !== 'string') {\n // Fill is a pattern or gradient - align it!\n fillInstruction.push(true);\n }\n return fillInstruction;\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n */\n CanvasBuilder.prototype.applyStroke = function (state) {\n this.instructions.push(this.createStroke(state));\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @return {Array<*>} Stroke instruction.\n */\n CanvasBuilder.prototype.createStroke = function (state) {\n return [\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth * this.pixelRatio,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n this.applyPixelRatio(state.lineDash),\n state.lineDashOffset * this.pixelRatio,\n ];\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState):Array<*>} createFill Create fill.\n */\n CanvasBuilder.prototype.updateFillStyle = function (state, createFill) {\n var fillStyle = state.fillStyle;\n if (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle) {\n if (fillStyle !== undefined) {\n this.instructions.push(createFill.call(this, state));\n }\n state.currentFillStyle = fillStyle;\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState): void} applyStroke Apply stroke.\n */\n CanvasBuilder.prototype.updateStrokeStyle = function (state, applyStroke) {\n var strokeStyle = state.strokeStyle;\n var lineCap = state.lineCap;\n var lineDash = state.lineDash;\n var lineDashOffset = state.lineDashOffset;\n var lineJoin = state.lineJoin;\n var lineWidth = state.lineWidth;\n var miterLimit = state.miterLimit;\n if (state.currentStrokeStyle != strokeStyle ||\n state.currentLineCap != lineCap ||\n (lineDash != state.currentLineDash &&\n !equals(state.currentLineDash, lineDash)) ||\n state.currentLineDashOffset != lineDashOffset ||\n state.currentLineJoin != lineJoin ||\n state.currentLineWidth != lineWidth ||\n state.currentMiterLimit != miterLimit) {\n if (strokeStyle !== undefined) {\n applyStroke.call(this, state);\n }\n state.currentStrokeStyle = strokeStyle;\n state.currentLineCap = lineCap;\n state.currentLineDash = lineDash;\n state.currentLineDashOffset = lineDashOffset;\n state.currentLineJoin = lineJoin;\n state.currentLineWidth = lineWidth;\n state.currentMiterLimit = miterLimit;\n }\n };\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasBuilder.prototype.endGeometry = function (feature) {\n this.beginGeometryInstruction1_[2] = this.instructions.length;\n this.beginGeometryInstruction1_ = null;\n this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;\n this.beginGeometryInstruction2_ = null;\n var endGeometryInstruction = [CanvasInstruction.END_GEOMETRY, feature];\n this.instructions.push(endGeometryInstruction);\n this.hitDetectionInstructions.push(endGeometryInstruction);\n };\n /**\n * Get the buffered rendering extent. Rendering will be clipped to the extent\n * provided to the constructor. To account for symbolizers that may intersect\n * this extent, we calculate a buffered extent (e.g. based on stroke width).\n * @return {import(\"../../extent.js\").Extent} The buffered rendering extent.\n * @protected\n */\n CanvasBuilder.prototype.getBufferedMaxExtent = function () {\n if (!this.bufferedMaxExtent_) {\n this.bufferedMaxExtent_ = clone(this.maxExtent);\n if (this.maxLineWidth > 0) {\n var width = (this.resolution * (this.maxLineWidth + 1)) / 2;\n buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);\n }\n }\n return this.bufferedMaxExtent_;\n };\n return CanvasBuilder;\n}(VectorContext));\nexport default CanvasBuilder;\n//# sourceMappingURL=Builder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/ImageBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nvar CanvasImageBuilder = /** @class */ (function (_super) {\n __extends(CanvasImageBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasImageBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.hitDetectionImage_ = null;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.image_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.imagePixelRatio_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.anchorX_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.anchorY_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.height_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.opacity_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.originX_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.originY_ = undefined;\n /**\n * @private\n * @type {boolean|undefined}\n */\n _this.rotateWithView_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.rotation_ = undefined;\n /**\n * @private\n * @type {import(\"../../size.js\").Size|undefined}\n */\n _this.scale_ = undefined;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.width_ = undefined;\n /**\n * Data shared with a text builder for combined decluttering.\n * @private\n * @type {import(\"../canvas.js\").DeclutterImageWithText}\n */\n _this.declutterImageWithText_ = undefined;\n return _this;\n }\n /**\n * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} pointGeometry Point geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasImageBuilder.prototype.drawPoint = function (pointGeometry, feature) {\n if (!this.image_) {\n return;\n }\n this.beginGeometry(pointGeometry, feature);\n var flatCoordinates = pointGeometry.getFlatCoordinates();\n var stride = pointGeometry.getStride();\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.image_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_ * this.imagePixelRatio_,\n this.anchorY_ * this.imagePixelRatio_,\n Math.ceil(this.height_ * this.imagePixelRatio_),\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n [\n (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n ],\n Math.ceil(this.width_ * this.imagePixelRatio_),\n this.declutterImageWithText_,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.hitDetectionImage_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_,\n this.anchorY_,\n this.height_,\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n this.scale_,\n this.width_,\n this.declutterImageWithText_,\n ]);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} multiPointGeometry MultiPoint geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasImageBuilder.prototype.drawMultiPoint = function (multiPointGeometry, feature) {\n if (!this.image_) {\n return;\n }\n this.beginGeometry(multiPointGeometry, feature);\n var flatCoordinates = multiPointGeometry.getFlatCoordinates();\n var stride = multiPointGeometry.getStride();\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.image_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_ * this.imagePixelRatio_,\n this.anchorY_ * this.imagePixelRatio_,\n Math.ceil(this.height_ * this.imagePixelRatio_),\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n [\n (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n ],\n Math.ceil(this.width_ * this.imagePixelRatio_),\n this.declutterImageWithText_,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n myBegin,\n myEnd,\n this.hitDetectionImage_,\n // Remaining arguments to DRAW_IMAGE are in alphabetical order\n this.anchorX_,\n this.anchorY_,\n this.height_,\n this.opacity_,\n this.originX_,\n this.originY_,\n this.rotateWithView_,\n this.rotation_,\n this.scale_,\n this.width_,\n this.declutterImageWithText_,\n ]);\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasImageBuilder.prototype.finish = function () {\n this.reverseHitDetectionInstructions();\n // FIXME this doesn't really protect us against further calls to draw*Geometry\n this.anchorX_ = undefined;\n this.anchorY_ = undefined;\n this.hitDetectionImage_ = null;\n this.image_ = null;\n this.imagePixelRatio_ = undefined;\n this.height_ = undefined;\n this.scale_ = undefined;\n this.opacity_ = undefined;\n this.originX_ = undefined;\n this.originY_ = undefined;\n this.rotateWithView_ = undefined;\n this.rotation_ = undefined;\n this.width_ = undefined;\n return _super.prototype.finish.call(this);\n };\n /**\n * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n * @param {Object} [opt_sharedData] Shared data.\n */\n CanvasImageBuilder.prototype.setImageStyle = function (imageStyle, opt_sharedData) {\n var anchor = imageStyle.getAnchor();\n var size = imageStyle.getSize();\n var hitDetectionImage = imageStyle.getHitDetectionImage();\n var image = imageStyle.getImage(this.pixelRatio);\n var origin = imageStyle.getOrigin();\n this.imagePixelRatio_ = imageStyle.getPixelRatio(this.pixelRatio);\n this.anchorX_ = anchor[0];\n this.anchorY_ = anchor[1];\n this.hitDetectionImage_ = hitDetectionImage;\n this.image_ = image;\n this.height_ = size[1];\n this.opacity_ = imageStyle.getOpacity();\n this.originX_ = origin[0] * this.imagePixelRatio_;\n this.originY_ = origin[1] * this.imagePixelRatio_;\n this.rotateWithView_ = imageStyle.getRotateWithView();\n this.rotation_ = imageStyle.getRotation();\n this.scale_ = imageStyle.getScaleArray();\n this.width_ = size[0];\n this.declutterImageWithText_ = opt_sharedData;\n };\n return CanvasImageBuilder;\n}(CanvasBuilder));\nexport default CanvasImageBuilder;\n//# sourceMappingURL=ImageBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/LineStringBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, strokeInstruction, } from './Instruction.js';\nimport { defaultLineDash, defaultLineDashOffset } from '../canvas.js';\nvar CanvasLineStringBuilder = /** @class */ (function (_super) {\n __extends(CanvasLineStringBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasLineStringBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n }\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n * @return {number} end.\n */\n CanvasLineStringBuilder.prototype.drawFlatCoordinates_ = function (flatCoordinates, offset, end, stride) {\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, false, false);\n var moveToLineToInstruction = [\n CanvasInstruction.MOVE_TO_LINE_TO,\n myBegin,\n myEnd,\n ];\n this.instructions.push(moveToLineToInstruction);\n this.hitDetectionInstructions.push(moveToLineToInstruction);\n return end;\n };\n /**\n * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} lineStringGeometry Line string geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasLineStringBuilder.prototype.drawLineString = function (lineStringGeometry, feature) {\n var state = this.state;\n var strokeStyle = state.strokeStyle;\n var lineWidth = state.lineWidth;\n if (strokeStyle === undefined || lineWidth === undefined) {\n return;\n }\n this.updateStrokeStyle(state, this.applyStroke);\n this.beginGeometry(lineStringGeometry, feature);\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n defaultLineDash,\n defaultLineDashOffset,\n ], beginPathInstruction);\n var flatCoordinates = lineStringGeometry.getFlatCoordinates();\n var stride = lineStringGeometry.getStride();\n this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);\n this.hitDetectionInstructions.push(strokeInstruction);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasLineStringBuilder.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) {\n var state = this.state;\n var strokeStyle = state.strokeStyle;\n var lineWidth = state.lineWidth;\n if (strokeStyle === undefined || lineWidth === undefined) {\n return;\n }\n this.updateStrokeStyle(state, this.applyStroke);\n this.beginGeometry(multiLineStringGeometry, feature);\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ], beginPathInstruction);\n var ends = multiLineStringGeometry.getEnds();\n var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n var stride = multiLineStringGeometry.getStride();\n var offset = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.drawFlatCoordinates_(flatCoordinates, offset, \n /** @type {number} */ (ends[i]), stride);\n }\n this.hitDetectionInstructions.push(strokeInstruction);\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasLineStringBuilder.prototype.finish = function () {\n var state = this.state;\n if (state.lastStroke != undefined &&\n state.lastStroke != this.coordinates.length) {\n this.instructions.push(strokeInstruction);\n }\n this.reverseHitDetectionInstructions();\n this.state = null;\n return _super.prototype.finish.call(this);\n };\n /**\n * @param {import(\"../canvas.js\").FillStrokeState} state State.\n */\n CanvasLineStringBuilder.prototype.applyStroke = function (state) {\n if (state.lastStroke != undefined &&\n state.lastStroke != this.coordinates.length) {\n this.instructions.push(strokeInstruction);\n state.lastStroke = this.coordinates.length;\n }\n state.lastStroke = 0;\n _super.prototype.applyStroke.call(this, state);\n this.instructions.push(beginPathInstruction);\n };\n return CanvasLineStringBuilder;\n}(CanvasBuilder));\nexport default CanvasLineStringBuilder;\n//# sourceMappingURL=LineStringBuilder.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/PolygonBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, { beginPathInstruction, closePathInstruction, fillInstruction, strokeInstruction, } from './Instruction.js';\nimport { defaultFillStyle } from '../canvas.js';\nimport { snap } from '../../geom/flat/simplify.js';\nvar CanvasPolygonBuilder = /** @class */ (function (_super) {\n __extends(CanvasPolygonBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasPolygonBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n }\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\n CanvasPolygonBuilder.prototype.drawFlatCoordinatess_ = function (flatCoordinates, offset, ends, stride) {\n var state = this.state;\n var fill = state.fillStyle !== undefined;\n var stroke = state.strokeStyle !== undefined;\n var numEnds = ends.length;\n this.instructions.push(beginPathInstruction);\n this.hitDetectionInstructions.push(beginPathInstruction);\n for (var i = 0; i < numEnds; ++i) {\n var end = ends[i];\n var myBegin = this.coordinates.length;\n var myEnd = this.appendFlatLineCoordinates(flatCoordinates, offset, end, stride, true, !stroke);\n var moveToLineToInstruction = [\n CanvasInstruction.MOVE_TO_LINE_TO,\n myBegin,\n myEnd,\n ];\n this.instructions.push(moveToLineToInstruction);\n this.hitDetectionInstructions.push(moveToLineToInstruction);\n if (stroke) {\n // Performance optimization: only call closePath() when we have a stroke.\n // Otherwise the ring is closed already (see appendFlatLineCoordinates above).\n this.instructions.push(closePathInstruction);\n this.hitDetectionInstructions.push(closePathInstruction);\n }\n offset = end;\n }\n if (fill) {\n this.instructions.push(fillInstruction);\n this.hitDetectionInstructions.push(fillInstruction);\n }\n if (stroke) {\n this.instructions.push(strokeInstruction);\n this.hitDetectionInstructions.push(strokeInstruction);\n }\n return offset;\n };\n /**\n * @param {import(\"../../geom/Circle.js\").default} circleGeometry Circle geometry.\n * @param {import(\"../../Feature.js\").default} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawCircle = function (circleGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(circleGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var flatCoordinates = circleGeometry.getFlatCoordinates();\n var stride = circleGeometry.getStride();\n var myBegin = this.coordinates.length;\n this.appendFlatLineCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);\n var circleInstruction = [CanvasInstruction.CIRCLE, myBegin];\n this.instructions.push(beginPathInstruction, circleInstruction);\n this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);\n if (state.fillStyle !== undefined) {\n this.instructions.push(fillInstruction);\n this.hitDetectionInstructions.push(fillInstruction);\n }\n if (state.strokeStyle !== undefined) {\n this.instructions.push(strokeInstruction);\n this.hitDetectionInstructions.push(strokeInstruction);\n }\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} polygonGeometry Polygon geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawPolygon = function (polygonGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(polygonGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var ends = polygonGeometry.getEnds();\n var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();\n var stride = polygonGeometry.getStride();\n this.drawFlatCoordinatess_(flatCoordinates, 0, \n /** @type {Array} */ (ends), stride);\n this.endGeometry(feature);\n };\n /**\n * @param {import(\"../../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasPolygonBuilder.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) {\n var state = this.state;\n var fillStyle = state.fillStyle;\n var strokeStyle = state.strokeStyle;\n if (fillStyle === undefined && strokeStyle === undefined) {\n return;\n }\n this.setFillStrokeStyles_();\n this.beginGeometry(multiPolygonGeometry, feature);\n if (state.fillStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_FILL_STYLE,\n defaultFillStyle,\n ]);\n }\n if (state.strokeStyle !== undefined) {\n this.hitDetectionInstructions.push([\n CanvasInstruction.SET_STROKE_STYLE,\n state.strokeStyle,\n state.lineWidth,\n state.lineCap,\n state.lineJoin,\n state.miterLimit,\n state.lineDash,\n state.lineDashOffset,\n ]);\n }\n var endss = multiPolygonGeometry.getEndss();\n var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();\n var stride = multiPolygonGeometry.getStride();\n var offset = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride);\n }\n this.endGeometry(feature);\n };\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasPolygonBuilder.prototype.finish = function () {\n this.reverseHitDetectionInstructions();\n this.state = null;\n // We want to preserve topology when drawing polygons. Polygons are\n // simplified using quantization and point elimination. However, we might\n // have received a mix of quantized and non-quantized geometries, so ensure\n // that all are quantized by quantizing all coordinates in the batch.\n var tolerance = this.tolerance;\n if (tolerance !== 0) {\n var coordinates = this.coordinates;\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n coordinates[i] = snap(coordinates[i], tolerance);\n }\n }\n return _super.prototype.finish.call(this);\n };\n /**\n * @private\n */\n CanvasPolygonBuilder.prototype.setFillStrokeStyles_ = function () {\n var state = this.state;\n var fillStyle = state.fillStyle;\n if (fillStyle !== undefined) {\n this.updateFillStyle(state, this.createFill);\n }\n if (state.strokeStyle !== undefined) {\n this.updateStrokeStyle(state, this.applyStroke);\n }\n };\n return CanvasPolygonBuilder;\n}(CanvasBuilder));\nexport default CanvasPolygonBuilder;\n//# sourceMappingURL=PolygonBuilder.js.map","/**\n * @module ol/geom/flat/straightchunk\n */\n/**\n * @param {number} maxAngle Maximum acceptable angle delta between segments.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Array} Start and end of the first suitable chunk of the\n * given `flatCoordinates`.\n */\nexport function matchingChunk(maxAngle, flatCoordinates, offset, end, stride) {\n var chunkStart = offset;\n var chunkEnd = offset;\n var chunkM = 0;\n var m = 0;\n var start = offset;\n var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;\n for (i = offset; i < end; i += stride) {\n var x2 = flatCoordinates[i];\n var y2 = flatCoordinates[i + 1];\n if (x1 !== undefined) {\n x23 = x2 - x1;\n y23 = y2 - y1;\n m23 = Math.sqrt(x23 * x23 + y23 * y23);\n if (x12 !== undefined) {\n m += m12;\n acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));\n if (acos > maxAngle) {\n if (m > chunkM) {\n chunkM = m;\n chunkStart = start;\n chunkEnd = i;\n }\n m = 0;\n start = i - stride;\n }\n }\n m12 = m23;\n x12 = x23;\n y12 = y23;\n }\n x1 = x2;\n y1 = y2;\n }\n m += m23;\n return m > chunkM ? [start, i] : [chunkStart, chunkEnd];\n}\n//# sourceMappingURL=straightchunk.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/render/canvas/TextBuilder\n */\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport TextPlacement from '../../style/TextPlacement.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultPadding, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, registerFont, } from '../canvas.js';\nimport { getUid } from '../../util.js';\nimport { intersects } from '../../extent.js';\nimport { matchingChunk } from '../../geom/flat/straightchunk.js';\n/**\n * @const\n * @enum {number}\n */\nexport var TEXT_ALIGN = {\n 'left': 0,\n 'end': 0,\n 'center': 0.5,\n 'right': 1,\n 'start': 1,\n 'top': 0,\n 'middle': 0.5,\n 'hanging': 0.2,\n 'alphabetic': 0.8,\n 'ideographic': 0.8,\n 'bottom': 1,\n};\nvar CanvasTextBuilder = /** @class */ (function (_super) {\n __extends(CanvasTextBuilder, _super);\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function CanvasTextBuilder(tolerance, maxExtent, resolution, pixelRatio) {\n var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;\n /**\n * @private\n * @type {Array}\n */\n _this.labels_ = null;\n /**\n * @private\n * @type {string}\n */\n _this.text_ = '';\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetY_ = 0;\n /**\n * @private\n * @type {boolean|undefined}\n */\n _this.textRotateWithView_ = undefined;\n /**\n * @private\n * @type {number}\n */\n _this.textRotation_ = 0;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.textFillState_ = null;\n /**\n * @type {!Object}\n */\n _this.fillStates = {};\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.textStrokeState_ = null;\n /**\n * @type {!Object}\n */\n _this.strokeStates = {};\n /**\n * @private\n * @type {import(\"../canvas.js\").TextState}\n */\n _this.textState_ = /** @type {import(\"../canvas.js\").TextState} */ ({});\n /**\n * @type {!Object}\n */\n _this.textStates = {};\n /**\n * @private\n * @type {string}\n */\n _this.textKey_ = '';\n /**\n * @private\n * @type {string}\n */\n _this.fillKey_ = '';\n /**\n * @private\n * @type {string}\n */\n _this.strokeKey_ = '';\n /**\n * Data shared with an image builder for combined decluttering.\n * @private\n * @type {import(\"../canvas.js\").DeclutterImageWithText}\n */\n _this.declutterImageWithText_ = undefined;\n return _this;\n }\n /**\n * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n */\n CanvasTextBuilder.prototype.finish = function () {\n var instructions = _super.prototype.finish.call(this);\n instructions.textStates = this.textStates;\n instructions.fillStates = this.fillStates;\n instructions.strokeStates = this.strokeStates;\n return instructions;\n };\n /**\n * @param {import(\"../../geom/SimpleGeometry.js\").default|import(\"../Feature.js\").default} geometry Geometry.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n */\n CanvasTextBuilder.prototype.drawText = function (geometry, feature) {\n var fillState = this.textFillState_;\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n if (this.text_ === '' || !textState || (!fillState && !strokeState)) {\n return;\n }\n var coordinates = this.coordinates;\n var begin = coordinates.length;\n var geometryType = geometry.getType();\n var flatCoordinates = null;\n var stride = geometry.getStride();\n if (textState.placement === TextPlacement.LINE &&\n (geometryType == GeometryType.LINE_STRING ||\n geometryType == GeometryType.MULTI_LINE_STRING ||\n geometryType == GeometryType.POLYGON ||\n geometryType == GeometryType.MULTI_POLYGON)) {\n if (!intersects(this.getBufferedMaxExtent(), geometry.getExtent())) {\n return;\n }\n var ends = void 0;\n flatCoordinates = geometry.getFlatCoordinates();\n if (geometryType == GeometryType.LINE_STRING) {\n ends = [flatCoordinates.length];\n }\n else if (geometryType == GeometryType.MULTI_LINE_STRING) {\n ends = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getEnds();\n }\n else if (geometryType == GeometryType.POLYGON) {\n ends = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry)\n .getEnds()\n .slice(0, 1);\n }\n else if (geometryType == GeometryType.MULTI_POLYGON) {\n var endss = \n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getEndss();\n ends = [];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n ends.push(endss[i][0]);\n }\n }\n this.beginGeometry(geometry, feature);\n var textAlign = textState.textAlign;\n var flatOffset = 0;\n var flatEnd = void 0;\n for (var o = 0, oo = ends.length; o < oo; ++o) {\n if (textAlign == undefined) {\n var range = matchingChunk(textState.maxAngle, flatCoordinates, flatOffset, ends[o], stride);\n flatOffset = range[0];\n flatEnd = range[1];\n }\n else {\n flatEnd = ends[o];\n }\n for (var i = flatOffset; i < flatEnd; i += stride) {\n coordinates.push(flatCoordinates[i], flatCoordinates[i + 1]);\n }\n var end = coordinates.length;\n flatOffset = ends[o];\n this.drawChars_(begin, end);\n begin = end;\n }\n this.endGeometry(feature);\n }\n else {\n var geometryWidths = textState.overflow ? null : [];\n switch (geometryType) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT:\n flatCoordinates =\n /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry).getFlatCoordinates();\n break;\n case GeometryType.LINE_STRING:\n flatCoordinates =\n /** @type {import(\"../../geom/LineString.js\").default} */ (geometry).getFlatMidpoint();\n break;\n case GeometryType.CIRCLE:\n flatCoordinates =\n /** @type {import(\"../../geom/Circle.js\").default} */ (geometry).getCenter();\n break;\n case GeometryType.MULTI_LINE_STRING:\n flatCoordinates =\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry).getFlatMidpoints();\n stride = 2;\n break;\n case GeometryType.POLYGON:\n flatCoordinates =\n /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry).getFlatInteriorPoint();\n if (!textState.overflow) {\n geometryWidths.push(flatCoordinates[2] / this.resolution);\n }\n stride = 3;\n break;\n case GeometryType.MULTI_POLYGON:\n var interiorPoints = \n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry).getFlatInteriorPoints();\n flatCoordinates = [];\n for (var i = 0, ii = interiorPoints.length; i < ii; i += 3) {\n if (!textState.overflow) {\n geometryWidths.push(interiorPoints[i + 2] / this.resolution);\n }\n flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);\n }\n if (flatCoordinates.length === 0) {\n return;\n }\n stride = 2;\n break;\n default:\n }\n var end = this.appendFlatPointCoordinates(flatCoordinates, stride);\n if (end === begin) {\n return;\n }\n if (geometryWidths &&\n (end - begin) / 2 !== flatCoordinates.length / stride) {\n var beg_1 = begin / 2;\n geometryWidths = geometryWidths.filter(function (w, i) {\n var keep = coordinates[(beg_1 + i) * 2] === flatCoordinates[i * stride] &&\n coordinates[(beg_1 + i) * 2 + 1] === flatCoordinates[i * stride + 1];\n if (!keep) {\n --beg_1;\n }\n return keep;\n });\n }\n this.saveTextStates_();\n if (textState.backgroundFill || textState.backgroundStroke) {\n this.setFillStrokeStyle(textState.backgroundFill, textState.backgroundStroke);\n if (textState.backgroundFill) {\n this.updateFillStyle(this.state, this.createFill);\n this.hitDetectionInstructions.push(this.createFill(this.state));\n }\n if (textState.backgroundStroke) {\n this.updateStrokeStyle(this.state, this.applyStroke);\n this.hitDetectionInstructions.push(this.createStroke(this.state));\n }\n }\n this.beginGeometry(geometry, feature);\n // adjust padding for negative scale\n var padding = textState.padding;\n if (padding != defaultPadding &&\n (textState.scale[0] < 0 || textState.scale[1] < 0)) {\n var p0 = textState.padding[0];\n var p1 = textState.padding[1];\n var p2 = textState.padding[2];\n var p3 = textState.padding[3];\n if (textState.scale[0] < 0) {\n p1 = -p1;\n p3 = -p3;\n }\n if (textState.scale[1] < 0) {\n p0 = -p0;\n p2 = -p2;\n }\n padding = [p0, p1, p2, p3];\n }\n // The image is unknown at this stage so we pass null; it will be computed at render time.\n // For clarity, we pass NaN for offsetX, offsetY, width and height, which will be computed at\n // render time.\n var pixelRatio_1 = this.pixelRatio;\n this.instructions.push([\n CanvasInstruction.DRAW_IMAGE,\n begin,\n end,\n null,\n NaN,\n NaN,\n NaN,\n 1,\n 0,\n 0,\n this.textRotateWithView_,\n this.textRotation_,\n [1, 1],\n NaN,\n this.declutterImageWithText_,\n padding == defaultPadding\n ? defaultPadding\n : padding.map(function (p) {\n return p * pixelRatio_1;\n }),\n !!textState.backgroundFill,\n !!textState.backgroundStroke,\n this.text_,\n this.textKey_,\n this.strokeKey_,\n this.fillKey_,\n this.textOffsetX_,\n this.textOffsetY_,\n geometryWidths,\n ]);\n var scale = 1 / pixelRatio_1;\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_IMAGE,\n begin,\n end,\n null,\n NaN,\n NaN,\n NaN,\n 1,\n 0,\n 0,\n this.textRotateWithView_,\n this.textRotation_,\n [scale, scale],\n NaN,\n this.declutterImageWithText_,\n padding,\n !!textState.backgroundFill,\n !!textState.backgroundStroke,\n this.text_,\n this.textKey_,\n this.strokeKey_,\n this.fillKey_,\n this.textOffsetX_,\n this.textOffsetY_,\n geometryWidths,\n ]);\n this.endGeometry(feature);\n }\n };\n /**\n * @private\n */\n CanvasTextBuilder.prototype.saveTextStates_ = function () {\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n var fillState = this.textFillState_;\n var strokeKey = this.strokeKey_;\n if (strokeState) {\n if (!(strokeKey in this.strokeStates)) {\n this.strokeStates[strokeKey] = {\n strokeStyle: strokeState.strokeStyle,\n lineCap: strokeState.lineCap,\n lineDashOffset: strokeState.lineDashOffset,\n lineWidth: strokeState.lineWidth,\n lineJoin: strokeState.lineJoin,\n miterLimit: strokeState.miterLimit,\n lineDash: strokeState.lineDash,\n };\n }\n }\n var textKey = this.textKey_;\n if (!(textKey in this.textStates)) {\n this.textStates[textKey] = {\n font: textState.font,\n textAlign: textState.textAlign || defaultTextAlign,\n textBaseline: textState.textBaseline || defaultTextBaseline,\n scale: textState.scale,\n };\n }\n var fillKey = this.fillKey_;\n if (fillState) {\n if (!(fillKey in this.fillStates)) {\n this.fillStates[fillKey] = {\n fillStyle: fillState.fillStyle,\n };\n }\n }\n };\n /**\n * @private\n * @param {number} begin Begin.\n * @param {number} end End.\n */\n CanvasTextBuilder.prototype.drawChars_ = function (begin, end) {\n var strokeState = this.textStrokeState_;\n var textState = this.textState_;\n var strokeKey = this.strokeKey_;\n var textKey = this.textKey_;\n var fillKey = this.fillKey_;\n this.saveTextStates_();\n var pixelRatio = this.pixelRatio;\n var baseline = TEXT_ALIGN[textState.textBaseline];\n var offsetY = this.textOffsetY_ * pixelRatio;\n var text = this.text_;\n var strokeWidth = strokeState\n ? (strokeState.lineWidth * Math.abs(textState.scale[0])) / 2\n : 0;\n this.instructions.push([\n CanvasInstruction.DRAW_CHARS,\n begin,\n end,\n baseline,\n textState.overflow,\n fillKey,\n textState.maxAngle,\n pixelRatio,\n offsetY,\n strokeKey,\n strokeWidth * pixelRatio,\n text,\n textKey,\n 1,\n ]);\n this.hitDetectionInstructions.push([\n CanvasInstruction.DRAW_CHARS,\n begin,\n end,\n baseline,\n textState.overflow,\n fillKey,\n textState.maxAngle,\n 1,\n offsetY,\n strokeKey,\n strokeWidth,\n text,\n textKey,\n 1 / pixelRatio,\n ]);\n };\n /**\n * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n * @param {Object} [opt_sharedData] Shared data.\n */\n CanvasTextBuilder.prototype.setTextStyle = function (textStyle, opt_sharedData) {\n var textState, fillState, strokeState;\n if (!textStyle) {\n this.text_ = '';\n }\n else {\n var textFillStyle = textStyle.getFill();\n if (!textFillStyle) {\n fillState = null;\n this.textFillState_ = fillState;\n }\n else {\n fillState = this.textFillState_;\n if (!fillState) {\n fillState = /** @type {import(\"../canvas.js\").FillState} */ ({});\n this.textFillState_ = fillState;\n }\n fillState.fillStyle = asColorLike(textFillStyle.getColor() || defaultFillStyle);\n }\n var textStrokeStyle = textStyle.getStroke();\n if (!textStrokeStyle) {\n strokeState = null;\n this.textStrokeState_ = strokeState;\n }\n else {\n strokeState = this.textStrokeState_;\n if (!strokeState) {\n strokeState = /** @type {import(\"../canvas.js\").StrokeState} */ ({});\n this.textStrokeState_ = strokeState;\n }\n var lineDash = textStrokeStyle.getLineDash();\n var lineDashOffset = textStrokeStyle.getLineDashOffset();\n var lineWidth = textStrokeStyle.getWidth();\n var miterLimit = textStrokeStyle.getMiterLimit();\n strokeState.lineCap = textStrokeStyle.getLineCap() || defaultLineCap;\n strokeState.lineDash = lineDash ? lineDash.slice() : defaultLineDash;\n strokeState.lineDashOffset =\n lineDashOffset === undefined ? defaultLineDashOffset : lineDashOffset;\n strokeState.lineJoin = textStrokeStyle.getLineJoin() || defaultLineJoin;\n strokeState.lineWidth =\n lineWidth === undefined ? defaultLineWidth : lineWidth;\n strokeState.miterLimit =\n miterLimit === undefined ? defaultMiterLimit : miterLimit;\n strokeState.strokeStyle = asColorLike(textStrokeStyle.getColor() || defaultStrokeStyle);\n }\n textState = this.textState_;\n var font = textStyle.getFont() || defaultFont;\n registerFont(font);\n var textScale = textStyle.getScaleArray();\n textState.overflow = textStyle.getOverflow();\n textState.font = font;\n textState.maxAngle = textStyle.getMaxAngle();\n textState.placement = textStyle.getPlacement();\n textState.textAlign = textStyle.getTextAlign();\n textState.textBaseline =\n textStyle.getTextBaseline() || defaultTextBaseline;\n textState.backgroundFill = textStyle.getBackgroundFill();\n textState.backgroundStroke = textStyle.getBackgroundStroke();\n textState.padding = textStyle.getPadding() || defaultPadding;\n textState.scale = textScale === undefined ? [1, 1] : textScale;\n var textOffsetX = textStyle.getOffsetX();\n var textOffsetY = textStyle.getOffsetY();\n var textRotateWithView = textStyle.getRotateWithView();\n var textRotation = textStyle.getRotation();\n this.text_ = textStyle.getText() || '';\n this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;\n this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;\n this.textRotateWithView_ =\n textRotateWithView === undefined ? false : textRotateWithView;\n this.textRotation_ = textRotation === undefined ? 0 : textRotation;\n this.strokeKey_ = strokeState\n ? (typeof strokeState.strokeStyle == 'string'\n ? strokeState.strokeStyle\n : getUid(strokeState.strokeStyle)) +\n strokeState.lineCap +\n strokeState.lineDashOffset +\n '|' +\n strokeState.lineWidth +\n strokeState.lineJoin +\n strokeState.miterLimit +\n '[' +\n strokeState.lineDash.join() +\n ']'\n : '';\n this.textKey_ =\n textState.font +\n textState.scale +\n (textState.textAlign || '?') +\n (textState.textBaseline || '?');\n this.fillKey_ = fillState\n ? typeof fillState.fillStyle == 'string'\n ? fillState.fillStyle\n : '|' + getUid(fillState.fillStyle)\n : '';\n }\n this.declutterImageWithText_ = opt_sharedData;\n };\n return CanvasTextBuilder;\n}(CanvasBuilder));\nexport default CanvasTextBuilder;\n//# sourceMappingURL=TextBuilder.js.map","/**\n * @module ol/render/canvas/BuilderGroup\n */\nimport Builder from './Builder.js';\nimport ImageBuilder from './ImageBuilder.js';\nimport LineStringBuilder from './LineStringBuilder.js';\nimport PolygonBuilder from './PolygonBuilder.js';\nimport TextBuilder from './TextBuilder.js';\n/**\n * @type {Object}\n */\nvar BATCH_CONSTRUCTORS = {\n 'Circle': PolygonBuilder,\n 'Default': Builder,\n 'Image': ImageBuilder,\n 'LineString': LineStringBuilder,\n 'Polygon': PolygonBuilder,\n 'Text': TextBuilder,\n};\nvar BuilderGroup = /** @class */ (function () {\n /**\n * @param {number} tolerance Tolerance.\n * @param {import(\"../../extent.js\").Extent} maxExtent Max extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n */\n function BuilderGroup(tolerance, maxExtent, resolution, pixelRatio) {\n /**\n * @private\n * @type {number}\n */\n this.tolerance_ = tolerance;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n this.maxExtent_ = maxExtent;\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {number}\n */\n this.resolution_ = resolution;\n /**\n * @private\n * @type {!Object>}\n */\n this.buildersByZIndex_ = {};\n }\n /**\n * @return {!Object>} The serializable instructions\n */\n BuilderGroup.prototype.finish = function () {\n var builderInstructions = {};\n for (var zKey in this.buildersByZIndex_) {\n builderInstructions[zKey] = builderInstructions[zKey] || {};\n var builders = this.buildersByZIndex_[zKey];\n for (var builderKey in builders) {\n var builderInstruction = builders[builderKey].finish();\n builderInstructions[zKey][builderKey] = builderInstruction;\n }\n }\n return builderInstructions;\n };\n /**\n * @param {number|undefined} zIndex Z index.\n * @param {import(\"./BuilderType.js\").default} builderType Replay type.\n * @return {import(\"../VectorContext.js\").default} Replay.\n */\n BuilderGroup.prototype.getBuilder = function (zIndex, builderType) {\n var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n var replays = this.buildersByZIndex_[zIndexKey];\n if (replays === undefined) {\n replays = {};\n this.buildersByZIndex_[zIndexKey] = replays;\n }\n var replay = replays[builderType];\n if (replay === undefined) {\n var Constructor = BATCH_CONSTRUCTORS[builderType];\n replay = new Constructor(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_);\n replays[builderType] = replay;\n }\n return replay;\n };\n return BuilderGroup;\n}());\nexport default BuilderGroup;\n//# sourceMappingURL=BuilderGroup.js.map","/**\n * @module ol/render/canvas/BuilderType\n */\n/**\n * @enum {string}\n */\nexport default {\n CIRCLE: 'Circle',\n DEFAULT: 'Default',\n IMAGE: 'Image',\n LINE_STRING: 'LineString',\n POLYGON: 'Polygon',\n TEXT: 'Text',\n};\n//# sourceMappingURL=BuilderType.js.map","/**\n * @module ol/geom/flat/textpath\n */\nimport { lerp } from '../../math.js';\nimport { rotate } from './transform.js';\n/**\n * @param {Array} flatCoordinates Path to put text on.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @param {string} text Text to place on the path.\n * @param {number} startM m along the path where the text starts.\n * @param {number} maxAngle Max angle between adjacent chars in radians.\n * @param {number} scale The product of the text scale and the device pixel ratio.\n * @param {function(string, string, Object):number} measureAndCacheTextWidth Measure and cache text width.\n * @param {string} font The font.\n * @param {Object} cache A cache of measured widths.\n * @param {number} rotation Rotation to apply to the flatCoordinates to determine whether text needs to be reversed.\n * @return {Array>} The result array (or null if `maxAngle` was\n * exceeded). Entries of the array are x, y, anchorX, angle, chunk.\n */\nexport function drawTextOnPath(flatCoordinates, offset, end, stride, text, startM, maxAngle, scale, measureAndCacheTextWidth, font, cache, rotation) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n var x1 = 0;\n var y1 = 0;\n var segmentLength = 0;\n var segmentM = 0;\n function advance() {\n x1 = x2;\n y1 = y2;\n offset += stride;\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n segmentM += segmentLength;\n segmentLength = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n do {\n advance();\n } while (offset < end - stride && segmentM + segmentLength < startM);\n var interpolate = segmentLength === 0 ? 0 : (startM - segmentM) / segmentLength;\n var beginX = lerp(x1, x2, interpolate);\n var beginY = lerp(y1, y2, interpolate);\n var startOffset = offset - stride;\n var startLength = segmentM;\n var endM = startM + scale * measureAndCacheTextWidth(font, text, cache);\n while (offset < end - stride && segmentM + segmentLength < endM) {\n advance();\n }\n interpolate = segmentLength === 0 ? 0 : (endM - segmentM) / segmentLength;\n var endX = lerp(x1, x2, interpolate);\n var endY = lerp(y1, y2, interpolate);\n // Keep text upright\n var reverse;\n if (rotation) {\n var flat = [beginX, beginY, endX, endY];\n rotate(flat, 0, 4, 2, rotation, flat, flat);\n reverse = flat[0] > flat[2];\n }\n else {\n reverse = beginX > endX;\n }\n var PI = Math.PI;\n var result = [];\n var singleSegment = startOffset + stride === offset;\n offset = startOffset;\n segmentLength = 0;\n segmentM = startLength;\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n var previousAngle;\n // All on the same segment\n if (singleSegment) {\n advance();\n previousAngle = Math.atan2(y2 - y1, x2 - x1);\n if (reverse) {\n previousAngle += previousAngle > 0 ? -PI : PI;\n }\n var x = (endX + beginX) / 2;\n var y = (endY + beginY) / 2;\n result[0] = [x, y, (endM - startM) / 2, previousAngle, text];\n return result;\n }\n for (var i = 0, ii = text.length; i < ii;) {\n advance();\n var angle = Math.atan2(y2 - y1, x2 - x1);\n if (reverse) {\n angle += angle > 0 ? -PI : PI;\n }\n if (previousAngle !== undefined) {\n var delta = angle - previousAngle;\n delta += delta > PI ? -2 * PI : delta < -PI ? 2 * PI : 0;\n if (Math.abs(delta) > maxAngle) {\n return null;\n }\n }\n previousAngle = angle;\n var iStart = i;\n var charLength = 0;\n for (; i < ii; ++i) {\n var index = reverse ? ii - i - 1 : i;\n var len = scale * measureAndCacheTextWidth(font, text[index], cache);\n if (offset + stride < end &&\n segmentM + segmentLength < startM + charLength + len / 2) {\n break;\n }\n charLength += len;\n }\n if (i === iStart) {\n continue;\n }\n var chars = reverse\n ? text.substring(ii - iStart, ii - i)\n : text.substring(iStart, i);\n interpolate =\n segmentLength === 0\n ? 0\n : (startM + charLength / 2 - segmentM) / segmentLength;\n var x = lerp(x1, x2, interpolate);\n var y = lerp(y1, y2, interpolate);\n result.push([x, y, charLength / 2, angle, chars]);\n startM += charLength;\n }\n return result;\n}\n//# sourceMappingURL=textpath.js.map","/**\n * @module ol/render/canvas/Executor\n */\nimport CanvasInstruction from './Instruction.js';\nimport { TEXT_ALIGN } from './TextBuilder.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../../has.js';\nimport { apply as applyTransform, compose as composeTransform, create as createTransform, setFromArray as transformSetFromArray, } from '../../transform.js';\nimport { createEmpty, createOrUpdate, intersects } from '../../extent.js';\nimport { defaultPadding, defaultTextBaseline, drawImageOrLabel, } from '../canvas.js';\nimport { defaultTextAlign, measureAndCacheTextWidth, measureTextHeight, measureTextWidths, } from '../canvas.js';\nimport { drawTextOnPath } from '../../geom/flat/textpath.js';\nimport { equals } from '../../array.js';\nimport { lineStringLength } from '../../geom/flat/length.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @typedef {Object} BBox\n * @property {number} minX Minimal x.\n * @property {number} minY Minimal y.\n * @property {number} maxX Maximal x.\n * @property {number} maxY Maximal y\n * @property {*} value Value.\n */\n/**\n * @typedef {Object} ImageOrLabelDimensions\n * @property {number} drawImageX DrawImageX.\n * @property {number} drawImageY DrawImageY.\n * @property {number} drawImageW DrawImageW.\n * @property {number} drawImageH DrawImageH.\n * @property {number} originX OriginX.\n * @property {number} originY OriginY.\n * @property {Array} scale Scale.\n * @property {BBox} declutterBox DeclutterBox.\n * @property {import(\"../../transform.js\").Transform} canvasTransform CanvasTransform.\n */\n/**\n * @typedef {{0: CanvasRenderingContext2D, 1: number, 2: import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement, 3: ImageOrLabelDimensions, 4: number, 5: Array<*>, 6: Array<*>}} ReplayImageOrLabelArgs\n */\n/**\n * @template T\n * @typedef {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * @type {import(\"../../extent.js\").Extent}\n */\nvar tmpExtent = createEmpty();\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p1 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p2 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p3 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nvar p4 = [];\n/**\n * @param {ReplayImageOrLabelArgs} replayImageOrLabelArgs Arguments to replayImageOrLabel\n * @return {BBox} Declutter bbox.\n */\nfunction getDeclutterBox(replayImageOrLabelArgs) {\n return replayImageOrLabelArgs[3].declutterBox;\n}\nvar rtlRegEx = new RegExp(\n/* eslint-disable prettier/prettier */\n'[' +\n String.fromCharCode(0x00591) + '-' + String.fromCharCode(0x008ff) +\n String.fromCharCode(0x0fb1d) + '-' + String.fromCharCode(0x0fdff) +\n String.fromCharCode(0x0fe70) + '-' + String.fromCharCode(0x0fefc) +\n String.fromCharCode(0x10800) + '-' + String.fromCharCode(0x10fff) +\n String.fromCharCode(0x1e800) + '-' + String.fromCharCode(0x1efff) +\n ']'\n/* eslint-enable prettier/prettier */\n);\n/**\n * @param {string} text Text.\n * @param {string} align Alignment.\n * @return {number} Text alignment.\n */\nfunction horizontalTextAlign(text, align) {\n if ((align === 'start' || align === 'end') && !rtlRegEx.test(text)) {\n align = align === 'start' ? 'left' : 'right';\n }\n return TEXT_ALIGN[align];\n}\nvar Executor = /** @class */ (function () {\n /**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The replay can have overlapping geometries.\n * @param {import(\"../canvas.js\").SerializableInstructions} instructions The serializable instructions\n */\n function Executor(resolution, pixelRatio, overlaps, instructions) {\n /**\n * @protected\n * @type {boolean}\n */\n this.overlaps = overlaps;\n /**\n * @protected\n * @type {number}\n */\n this.pixelRatio = pixelRatio;\n /**\n * @protected\n * @const\n * @type {number}\n */\n this.resolution = resolution;\n /**\n * @private\n * @type {boolean}\n */\n this.alignFill_;\n /**\n * @protected\n * @type {Array<*>}\n */\n this.instructions = instructions.instructions;\n /**\n * @protected\n * @type {Array}\n */\n this.coordinates = instructions.coordinates;\n /**\n * @private\n * @type {!Object|Array>>}\n */\n this.coordinateCache_ = {};\n /**\n * @private\n * @type {!import(\"../../transform.js\").Transform}\n */\n this.renderedTransform_ = createTransform();\n /**\n * @protected\n * @type {Array<*>}\n */\n this.hitDetectionInstructions = instructions.hitDetectionInstructions;\n /**\n * @private\n * @type {Array}\n */\n this.pixelCoordinates_ = null;\n /**\n * @private\n * @type {number}\n */\n this.viewRotation_ = 0;\n /**\n * @type {!Object}\n */\n this.fillStates = instructions.fillStates || {};\n /**\n * @type {!Object}\n */\n this.strokeStates = instructions.strokeStates || {};\n /**\n * @type {!Object}\n */\n this.textStates = instructions.textStates || {};\n /**\n * @private\n * @type {Object>}\n */\n this.widths_ = {};\n /**\n * @private\n * @type {Object}\n */\n this.labels_ = {};\n }\n /**\n * @param {string} text Text.\n * @param {string} textKey Text style key.\n * @param {string} fillKey Fill style key.\n * @param {string} strokeKey Stroke style key.\n * @return {import(\"../canvas.js\").Label} Label.\n */\n Executor.prototype.createLabel = function (text, textKey, fillKey, strokeKey) {\n var key = text + textKey + fillKey + strokeKey;\n if (this.labels_[key]) {\n return this.labels_[key];\n }\n var strokeState = strokeKey ? this.strokeStates[strokeKey] : null;\n var fillState = fillKey ? this.fillStates[fillKey] : null;\n var textState = this.textStates[textKey];\n var pixelRatio = this.pixelRatio;\n var scale = [\n textState.scale[0] * pixelRatio,\n textState.scale[1] * pixelRatio,\n ];\n var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n var strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;\n var lines = text.split('\\n');\n var numLines = lines.length;\n var widths = [];\n var width = measureTextWidths(textState.font, lines, widths);\n var lineHeight = measureTextHeight(textState.font);\n var height = lineHeight * numLines;\n var renderWidth = width + strokeWidth;\n var contextInstructions = [];\n // make canvas 2 pixels wider to account for italic text width measurement errors\n var w = (renderWidth + 2) * scale[0];\n var h = (height + strokeWidth) * scale[1];\n /** @type {import(\"../canvas.js\").Label} */\n var label = {\n width: w < 0 ? Math.floor(w) : Math.ceil(w),\n height: h < 0 ? Math.floor(h) : Math.ceil(h),\n contextInstructions: contextInstructions,\n };\n if (scale[0] != 1 || scale[1] != 1) {\n contextInstructions.push('scale', scale);\n }\n contextInstructions.push('font', textState.font);\n if (strokeKey) {\n contextInstructions.push('strokeStyle', strokeState.strokeStyle);\n contextInstructions.push('lineWidth', strokeWidth);\n contextInstructions.push('lineCap', strokeState.lineCap);\n contextInstructions.push('lineJoin', strokeState.lineJoin);\n contextInstructions.push('miterLimit', strokeState.miterLimit);\n // eslint-disable-next-line\n var Context = WORKER_OFFSCREEN_CANVAS ? OffscreenCanvasRenderingContext2D : CanvasRenderingContext2D;\n if (Context.prototype.setLineDash) {\n contextInstructions.push('setLineDash', [strokeState.lineDash]);\n contextInstructions.push('lineDashOffset', strokeState.lineDashOffset);\n }\n }\n if (fillKey) {\n contextInstructions.push('fillStyle', fillState.fillStyle);\n }\n contextInstructions.push('textBaseline', 'middle');\n contextInstructions.push('textAlign', 'center');\n var leftRight = 0.5 - align;\n var x = align * renderWidth + leftRight * strokeWidth;\n var i;\n if (strokeKey) {\n for (i = 0; i < numLines; ++i) {\n contextInstructions.push('strokeText', [\n lines[i],\n x + leftRight * widths[i],\n 0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n ]);\n }\n }\n if (fillKey) {\n for (i = 0; i < numLines; ++i) {\n contextInstructions.push('fillText', [\n lines[i],\n x + leftRight * widths[i],\n 0.5 * (strokeWidth + lineHeight) + i * lineHeight,\n ]);\n }\n }\n this.labels_[key] = label;\n return label;\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../coordinate.js\").Coordinate} p1 1st point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p2 2nd point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p3 3rd point of the background box.\n * @param {import(\"../../coordinate.js\").Coordinate} p4 4th point of the background box.\n * @param {Array<*>} fillInstruction Fill instruction.\n * @param {Array<*>} strokeInstruction Stroke instruction.\n */\n Executor.prototype.replayTextBackground_ = function (context, p1, p2, p3, p4, fillInstruction, strokeInstruction) {\n context.beginPath();\n context.moveTo.apply(context, p1);\n context.lineTo.apply(context, p2);\n context.lineTo.apply(context, p3);\n context.lineTo.apply(context, p4);\n context.lineTo.apply(context, p1);\n if (fillInstruction) {\n this.alignFill_ = /** @type {boolean} */ (fillInstruction[2]);\n this.fill_(context);\n }\n if (strokeInstruction) {\n this.setStrokeStyle_(context, \n /** @type {Array<*>} */ (strokeInstruction));\n context.stroke();\n }\n };\n /**\n * @private\n * @param {number} sheetWidth Width of the sprite sheet.\n * @param {number} sheetHeight Height of the sprite sheet.\n * @param {number} centerX X.\n * @param {number} centerY Y.\n * @param {number} width Width.\n * @param {number} height Height.\n * @param {number} anchorX Anchor X.\n * @param {number} anchorY Anchor Y.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} rotation Rotation.\n * @param {import(\"../../size.js\").Size} scale Scale.\n * @param {boolean} snapToPixel Snap to pixel.\n * @param {Array} padding Padding.\n * @param {boolean} fillStroke Background fill or stroke.\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @return {ImageOrLabelDimensions} Dimensions for positioning and decluttering the image or label.\n */\n Executor.prototype.calculateImageOrLabelDimensions_ = function (sheetWidth, sheetHeight, centerX, centerY, width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, fillStroke, feature) {\n anchorX *= scale[0];\n anchorY *= scale[1];\n var x = centerX - anchorX;\n var y = centerY - anchorY;\n var w = width + originX > sheetWidth ? sheetWidth - originX : width;\n var h = height + originY > sheetHeight ? sheetHeight - originY : height;\n var boxW = padding[3] + w * scale[0] + padding[1];\n var boxH = padding[0] + h * scale[1] + padding[2];\n var boxX = x - padding[3];\n var boxY = y - padding[0];\n if (fillStroke || rotation !== 0) {\n p1[0] = boxX;\n p4[0] = boxX;\n p1[1] = boxY;\n p2[1] = boxY;\n p2[0] = boxX + boxW;\n p3[0] = p2[0];\n p3[1] = boxY + boxH;\n p4[1] = p3[1];\n }\n var transform;\n if (rotation !== 0) {\n transform = composeTransform(createTransform(), centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n applyTransform(transform, p1);\n applyTransform(transform, p2);\n applyTransform(transform, p3);\n applyTransform(transform, p4);\n createOrUpdate(Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1]), tmpExtent);\n }\n else {\n createOrUpdate(Math.min(boxX, boxX + boxW), Math.min(boxY, boxY + boxH), Math.max(boxX, boxX + boxW), Math.max(boxY, boxY + boxH), tmpExtent);\n }\n if (snapToPixel) {\n x = Math.round(x);\n y = Math.round(y);\n }\n return {\n drawImageX: x,\n drawImageY: y,\n drawImageW: w,\n drawImageH: h,\n originX: originX,\n originY: originY,\n declutterBox: {\n minX: tmpExtent[0],\n minY: tmpExtent[1],\n maxX: tmpExtent[2],\n maxY: tmpExtent[3],\n value: feature,\n },\n canvasTransform: transform,\n scale: scale,\n };\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} imageOrLabel Image.\n * @param {ImageOrLabelDimensions} dimensions Dimensions.\n * @param {number} opacity Opacity.\n * @param {Array<*>} fillInstruction Fill instruction.\n * @param {Array<*>} strokeInstruction Stroke instruction.\n * @return {boolean} The image or label was rendered.\n */\n Executor.prototype.replayImageOrLabel_ = function (context, contextScale, imageOrLabel, dimensions, opacity, fillInstruction, strokeInstruction) {\n var fillStroke = !!(fillInstruction || strokeInstruction);\n var box = dimensions.declutterBox;\n var canvas = context.canvas;\n var strokePadding = strokeInstruction\n ? (strokeInstruction[2] * dimensions.scale[0]) / 2\n : 0;\n var intersects = box.minX - strokePadding <= canvas.width / contextScale &&\n box.maxX + strokePadding >= 0 &&\n box.minY - strokePadding <= canvas.height / contextScale &&\n box.maxY + strokePadding >= 0;\n if (intersects) {\n if (fillStroke) {\n this.replayTextBackground_(context, p1, p2, p3, p4, \n /** @type {Array<*>} */ (fillInstruction), \n /** @type {Array<*>} */ (strokeInstruction));\n }\n drawImageOrLabel(context, dimensions.canvasTransform, opacity, imageOrLabel, dimensions.originX, dimensions.originY, dimensions.drawImageW, dimensions.drawImageH, dimensions.drawImageX, dimensions.drawImageY, dimensions.scale);\n }\n return true;\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n */\n Executor.prototype.fill_ = function (context) {\n if (this.alignFill_) {\n var origin_1 = applyTransform(this.renderedTransform_, [0, 0]);\n var repeatSize = 512 * this.pixelRatio;\n context.save();\n context.translate(origin_1[0] % repeatSize, origin_1[1] % repeatSize);\n context.rotate(this.viewRotation_);\n }\n context.fill();\n if (this.alignFill_) {\n context.restore();\n }\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {Array<*>} instruction Instruction.\n */\n Executor.prototype.setStrokeStyle_ = function (context, instruction) {\n context['strokeStyle'] =\n /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n context.lineWidth = /** @type {number} */ (instruction[2]);\n context.lineCap = /** @type {CanvasLineCap} */ (instruction[3]);\n context.lineJoin = /** @type {CanvasLineJoin} */ (instruction[4]);\n context.miterLimit = /** @type {number} */ (instruction[5]);\n if (context.setLineDash) {\n context.lineDashOffset = /** @type {number} */ (instruction[7]);\n context.setLineDash(/** @type {Array} */ (instruction[6]));\n }\n };\n /**\n * @private\n * @param {string} text The text to draw.\n * @param {string} textKey The key of the text state.\n * @param {string} strokeKey The key for the stroke state.\n * @param {string} fillKey The key for the fill state.\n * @return {{label: import(\"../canvas.js\").Label, anchorX: number, anchorY: number}} The text image and its anchor.\n */\n Executor.prototype.drawLabelWithPointPlacement_ = function (text, textKey, strokeKey, fillKey) {\n var textState = this.textStates[textKey];\n var label = this.createLabel(text, textKey, fillKey, strokeKey);\n var strokeState = this.strokeStates[strokeKey];\n var pixelRatio = this.pixelRatio;\n var align = horizontalTextAlign(text, textState.textAlign || defaultTextAlign);\n var baseline = TEXT_ALIGN[textState.textBaseline || defaultTextBaseline];\n var strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;\n // Remove the 2 pixels we added in createLabel() for the anchor\n var width = label.width / pixelRatio - 2 * textState.scale[0];\n var anchorX = align * width + 2 * (0.5 - align) * strokeWidth;\n var anchorY = (baseline * label.height) / pixelRatio +\n 2 * (0.5 - baseline) * strokeWidth;\n return {\n label: label,\n anchorX: anchorX,\n anchorY: anchorY,\n };\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array<*>} instructions Instructions array.\n * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n * @param {FeatureCallback} [opt_featureCallback] Feature callback.\n * @param {import(\"../../extent.js\").Extent} [opt_hitExtent] Only check\n * features that intersect this extent.\n * @param {import(\"rbush\").default} [opt_declutterTree] Declutter tree.\n * @return {T|undefined} Callback result.\n * @template T\n */\n Executor.prototype.execute_ = function (context, contextScale, transform, instructions, snapToPixel, opt_featureCallback, opt_hitExtent, opt_declutterTree) {\n /** @type {Array} */\n var pixelCoordinates;\n if (this.pixelCoordinates_ && equals(transform, this.renderedTransform_)) {\n pixelCoordinates = this.pixelCoordinates_;\n }\n else {\n if (!this.pixelCoordinates_) {\n this.pixelCoordinates_ = [];\n }\n pixelCoordinates = transform2D(this.coordinates, 0, this.coordinates.length, 2, transform, this.pixelCoordinates_);\n transformSetFromArray(this.renderedTransform_, transform);\n }\n var i = 0; // instruction index\n var ii = instructions.length; // end of instructions\n var d = 0; // data index\n var dd; // end of per-instruction data\n var anchorX, anchorY, prevX, prevY, roundX, roundY, image, text, textKey, strokeKey, fillKey;\n var pendingFill = 0;\n var pendingStroke = 0;\n var lastFillInstruction = null;\n var lastStrokeInstruction = null;\n var coordinateCache = this.coordinateCache_;\n var viewRotation = this.viewRotation_;\n var viewRotationFromTransform = Math.round(Math.atan2(-transform[1], transform[0]) * 1e12) / 1e12;\n var state = /** @type {import(\"../../render.js\").State} */ ({\n context: context,\n pixelRatio: this.pixelRatio,\n resolution: this.resolution,\n rotation: viewRotation,\n });\n // When the batch size gets too big, performance decreases. 200 is a good\n // balance between batch size and number of fill/stroke instructions.\n var batchSize = this.instructions != instructions || this.overlaps ? 0 : 200;\n var /** @type {import(\"../../Feature.js\").FeatureLike} */ feature;\n var x, y, currentGeometry;\n while (i < ii) {\n var instruction = instructions[i];\n var type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n switch (type) {\n case CanvasInstruction.BEGIN_GEOMETRY:\n feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n currentGeometry = instruction[3];\n if (!feature.getGeometry()) {\n i = /** @type {number} */ (instruction[2]);\n }\n else if (opt_hitExtent !== undefined &&\n !intersects(opt_hitExtent, currentGeometry.getExtent())) {\n i = /** @type {number} */ (instruction[2]) + 1;\n }\n else {\n ++i;\n }\n break;\n case CanvasInstruction.BEGIN_PATH:\n if (pendingFill > batchSize) {\n this.fill_(context);\n pendingFill = 0;\n }\n if (pendingStroke > batchSize) {\n context.stroke();\n pendingStroke = 0;\n }\n if (!pendingFill && !pendingStroke) {\n context.beginPath();\n prevX = NaN;\n prevY = NaN;\n }\n ++i;\n break;\n case CanvasInstruction.CIRCLE:\n d = /** @type {number} */ (instruction[1]);\n var x1 = pixelCoordinates[d];\n var y1 = pixelCoordinates[d + 1];\n var x2 = pixelCoordinates[d + 2];\n var y2 = pixelCoordinates[d + 3];\n var dx = x2 - x1;\n var dy = y2 - y1;\n var r = Math.sqrt(dx * dx + dy * dy);\n context.moveTo(x1 + r, y1);\n context.arc(x1, y1, r, 0, 2 * Math.PI, true);\n ++i;\n break;\n case CanvasInstruction.CLOSE_PATH:\n context.closePath();\n ++i;\n break;\n case CanvasInstruction.CUSTOM:\n d = /** @type {number} */ (instruction[1]);\n dd = instruction[2];\n var geometry = \n /** @type {import(\"../../geom/SimpleGeometry.js\").default} */ (instruction[3]);\n var renderer = instruction[4];\n var fn = instruction.length == 6 ? instruction[5] : undefined;\n state.geometry = geometry;\n state.feature = feature;\n if (!(i in coordinateCache)) {\n coordinateCache[i] = [];\n }\n var coords = coordinateCache[i];\n if (fn) {\n fn(pixelCoordinates, d, dd, 2, coords);\n }\n else {\n coords[0] = pixelCoordinates[d];\n coords[1] = pixelCoordinates[d + 1];\n coords.length = 2;\n }\n renderer(coords, state);\n ++i;\n break;\n case CanvasInstruction.DRAW_IMAGE:\n d = /** @type {number} */ (instruction[1]);\n dd = /** @type {number} */ (instruction[2]);\n image =\n /** @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} */ (instruction[3]);\n // Remaining arguments in DRAW_IMAGE are in alphabetical order\n anchorX = /** @type {number} */ (instruction[4]);\n anchorY = /** @type {number} */ (instruction[5]);\n var height = /** @type {number} */ (instruction[6]);\n var opacity = /** @type {number} */ (instruction[7]);\n var originX = /** @type {number} */ (instruction[8]);\n var originY = /** @type {number} */ (instruction[9]);\n var rotateWithView = /** @type {boolean} */ (instruction[10]);\n var rotation = /** @type {number} */ (instruction[11]);\n var scale = /** @type {import(\"../../size.js\").Size} */ (instruction[12]);\n var width = /** @type {number} */ (instruction[13]);\n var declutterImageWithText = \n /** @type {import(\"../canvas.js\").DeclutterImageWithText} */ (instruction[14]);\n if (!image && instruction.length >= 19) {\n // create label images\n text = /** @type {string} */ (instruction[18]);\n textKey = /** @type {string} */ (instruction[19]);\n strokeKey = /** @type {string} */ (instruction[20]);\n fillKey = /** @type {string} */ (instruction[21]);\n var labelWithAnchor = this.drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey);\n image = labelWithAnchor.label;\n instruction[3] = image;\n var textOffsetX = /** @type {number} */ (instruction[22]);\n anchorX = (labelWithAnchor.anchorX - textOffsetX) * this.pixelRatio;\n instruction[4] = anchorX;\n var textOffsetY = /** @type {number} */ (instruction[23]);\n anchorY = (labelWithAnchor.anchorY - textOffsetY) * this.pixelRatio;\n instruction[5] = anchorY;\n height = image.height;\n instruction[6] = height;\n width = image.width;\n instruction[13] = width;\n }\n var geometryWidths = void 0;\n if (instruction.length > 24) {\n geometryWidths = /** @type {number} */ (instruction[24]);\n }\n var padding = void 0, backgroundFill = void 0, backgroundStroke = void 0;\n if (instruction.length > 16) {\n padding = /** @type {Array} */ (instruction[15]);\n backgroundFill = /** @type {boolean} */ (instruction[16]);\n backgroundStroke = /** @type {boolean} */ (instruction[17]);\n }\n else {\n padding = defaultPadding;\n backgroundFill = false;\n backgroundStroke = false;\n }\n if (rotateWithView && viewRotationFromTransform) {\n // Canvas is expected to be rotated to reverse view rotation.\n rotation += viewRotation;\n }\n else if (!rotateWithView && !viewRotationFromTransform) {\n // Canvas is not rotated, images need to be rotated back to be north-up.\n rotation -= viewRotation;\n }\n var widthIndex = 0;\n for (; d < dd; d += 2) {\n if (geometryWidths &&\n geometryWidths[widthIndex++] < width / this.pixelRatio) {\n continue;\n }\n var dimensions = this.calculateImageOrLabelDimensions_(image.width, image.height, pixelCoordinates[d], pixelCoordinates[d + 1], width, height, anchorX, anchorY, originX, originY, rotation, scale, snapToPixel, padding, backgroundFill || backgroundStroke, feature);\n /** @type {ReplayImageOrLabelArgs} */\n var args = [\n context,\n contextScale,\n image,\n dimensions,\n opacity,\n backgroundFill\n ? /** @type {Array<*>} */ (lastFillInstruction)\n : null,\n backgroundStroke\n ? /** @type {Array<*>} */ (lastStrokeInstruction)\n : null,\n ];\n var imageArgs = void 0;\n var imageDeclutterBox = void 0;\n if (opt_declutterTree && declutterImageWithText) {\n var index = dd - d;\n if (!declutterImageWithText[index]) {\n // We now have the image for an image+text combination.\n declutterImageWithText[index] = args;\n // Don't render anything for now, wait for the text.\n continue;\n }\n imageArgs = declutterImageWithText[index];\n delete declutterImageWithText[index];\n imageDeclutterBox = getDeclutterBox(imageArgs);\n if (opt_declutterTree.collides(imageDeclutterBox)) {\n continue;\n }\n }\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n continue;\n }\n if (imageArgs) {\n // We now have image and text for an image+text combination.\n if (opt_declutterTree) {\n opt_declutterTree.insert(imageDeclutterBox);\n }\n // Render the image before we render the text.\n this.replayImageOrLabel_.apply(this, imageArgs);\n }\n if (opt_declutterTree) {\n opt_declutterTree.insert(dimensions.declutterBox);\n }\n this.replayImageOrLabel_.apply(this, args);\n }\n ++i;\n break;\n case CanvasInstruction.DRAW_CHARS:\n var begin = /** @type {number} */ (instruction[1]);\n var end = /** @type {number} */ (instruction[2]);\n var baseline = /** @type {number} */ (instruction[3]);\n var overflow = /** @type {number} */ (instruction[4]);\n fillKey = /** @type {string} */ (instruction[5]);\n var maxAngle = /** @type {number} */ (instruction[6]);\n var measurePixelRatio = /** @type {number} */ (instruction[7]);\n var offsetY = /** @type {number} */ (instruction[8]);\n strokeKey = /** @type {string} */ (instruction[9]);\n var strokeWidth = /** @type {number} */ (instruction[10]);\n text = /** @type {string} */ (instruction[11]);\n textKey = /** @type {string} */ (instruction[12]);\n var pixelRatioScale = [\n /** @type {number} */ (instruction[13]),\n /** @type {number} */ (instruction[13]),\n ];\n var textState = this.textStates[textKey];\n var font = textState.font;\n var textScale = [\n textState.scale[0] * measurePixelRatio,\n textState.scale[1] * measurePixelRatio,\n ];\n var cachedWidths = void 0;\n if (font in this.widths_) {\n cachedWidths = this.widths_[font];\n }\n else {\n cachedWidths = {};\n this.widths_[font] = cachedWidths;\n }\n var pathLength = lineStringLength(pixelCoordinates, begin, end, 2);\n var textLength = Math.abs(textScale[0]) *\n measureAndCacheTextWidth(font, text, cachedWidths);\n if (overflow || textLength <= pathLength) {\n var textAlign = this.textStates[textKey].textAlign;\n var startM = (pathLength - textLength) * TEXT_ALIGN[textAlign];\n var parts = drawTextOnPath(pixelCoordinates, begin, end, 2, text, startM, maxAngle, Math.abs(textScale[0]), measureAndCacheTextWidth, font, cachedWidths, viewRotationFromTransform ? 0 : this.viewRotation_);\n drawChars: if (parts) {\n /** @type {Array} */\n var replayImageOrLabelArgs = [];\n var c = void 0, cc = void 0, chars = void 0, label = void 0, part = void 0;\n if (strokeKey) {\n for (c = 0, cc = parts.length; c < cc; ++c) {\n part = parts[c]; // x, y, anchorX, rotation, chunk\n chars = /** @type {string} */ (part[4]);\n label = this.createLabel(chars, textKey, '', strokeKey);\n anchorX =\n /** @type {number} */ (part[2]) +\n (textScale[0] < 0 ? -strokeWidth : strokeWidth);\n anchorY =\n baseline * label.height +\n ((0.5 - baseline) * 2 * strokeWidth * textScale[1]) /\n textScale[0] -\n offsetY;\n var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n break drawChars;\n }\n replayImageOrLabelArgs.push([\n context,\n contextScale,\n label,\n dimensions,\n 1,\n null,\n null,\n ]);\n }\n }\n if (fillKey) {\n for (c = 0, cc = parts.length; c < cc; ++c) {\n part = parts[c]; // x, y, anchorX, rotation, chunk\n chars = /** @type {string} */ (part[4]);\n label = this.createLabel(chars, textKey, fillKey, '');\n anchorX = /** @type {number} */ (part[2]);\n anchorY = baseline * label.height - offsetY;\n var dimensions = this.calculateImageOrLabelDimensions_(label.width, label.height, part[0], part[1], label.width, label.height, anchorX, anchorY, 0, 0, part[3], pixelRatioScale, false, defaultPadding, false, feature);\n if (opt_declutterTree &&\n opt_declutterTree.collides(dimensions.declutterBox)) {\n break drawChars;\n }\n replayImageOrLabelArgs.push([\n context,\n contextScale,\n label,\n dimensions,\n 1,\n null,\n null,\n ]);\n }\n }\n if (opt_declutterTree) {\n opt_declutterTree.load(replayImageOrLabelArgs.map(getDeclutterBox));\n }\n for (var i_1 = 0, ii_1 = replayImageOrLabelArgs.length; i_1 < ii_1; ++i_1) {\n this.replayImageOrLabel_.apply(this, replayImageOrLabelArgs[i_1]);\n }\n }\n }\n ++i;\n break;\n case CanvasInstruction.END_GEOMETRY:\n if (opt_featureCallback !== undefined) {\n feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (instruction[1]);\n var result = opt_featureCallback(feature, currentGeometry);\n if (result) {\n return result;\n }\n }\n ++i;\n break;\n case CanvasInstruction.FILL:\n if (batchSize) {\n pendingFill++;\n }\n else {\n this.fill_(context);\n }\n ++i;\n break;\n case CanvasInstruction.MOVE_TO_LINE_TO:\n d = /** @type {number} */ (instruction[1]);\n dd = /** @type {number} */ (instruction[2]);\n x = pixelCoordinates[d];\n y = pixelCoordinates[d + 1];\n roundX = (x + 0.5) | 0;\n roundY = (y + 0.5) | 0;\n if (roundX !== prevX || roundY !== prevY) {\n context.moveTo(x, y);\n prevX = roundX;\n prevY = roundY;\n }\n for (d += 2; d < dd; d += 2) {\n x = pixelCoordinates[d];\n y = pixelCoordinates[d + 1];\n roundX = (x + 0.5) | 0;\n roundY = (y + 0.5) | 0;\n if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {\n context.lineTo(x, y);\n prevX = roundX;\n prevY = roundY;\n }\n }\n ++i;\n break;\n case CanvasInstruction.SET_FILL_STYLE:\n lastFillInstruction = instruction;\n this.alignFill_ = instruction[2];\n if (pendingFill) {\n this.fill_(context);\n pendingFill = 0;\n if (pendingStroke) {\n context.stroke();\n pendingStroke = 0;\n }\n }\n context.fillStyle =\n /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n ++i;\n break;\n case CanvasInstruction.SET_STROKE_STYLE:\n lastStrokeInstruction = instruction;\n if (pendingStroke) {\n context.stroke();\n pendingStroke = 0;\n }\n this.setStrokeStyle_(context, /** @type {Array<*>} */ (instruction));\n ++i;\n break;\n case CanvasInstruction.STROKE:\n if (batchSize) {\n pendingStroke++;\n }\n else {\n context.stroke();\n }\n ++i;\n break;\n default:\n ++i; // consume the instruction anyway, to avoid an infinite loop\n break;\n }\n }\n if (pendingFill) {\n this.fill_(context);\n }\n if (pendingStroke) {\n context.stroke();\n }\n return undefined;\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n * @param {import(\"rbush\").default} [opt_declutterTree] Declutter tree.\n */\n Executor.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree) {\n this.viewRotation_ = viewRotation;\n this.execute_(context, contextScale, transform, this.instructions, snapToPixel, undefined, undefined, opt_declutterTree);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {FeatureCallback} [opt_featureCallback] Feature callback.\n * @param {import(\"../../extent.js\").Extent} [opt_hitExtent] Only check\n * features that intersect this extent.\n * @return {T|undefined} Callback result.\n * @template T\n */\n Executor.prototype.executeHitDetection = function (context, transform, viewRotation, opt_featureCallback, opt_hitExtent) {\n this.viewRotation_ = viewRotation;\n return this.execute_(context, 1, transform, this.hitDetectionInstructions, true, opt_featureCallback, opt_hitExtent);\n };\n return Executor;\n}());\nexport default Executor;\n//# sourceMappingURL=Executor.js.map","/**\n * @module ol/render/canvas/ExecutorGroup\n */\nimport BuilderType from './BuilderType.js';\nimport Executor from './Executor.js';\nimport { buffer, createEmpty, extendCoordinate } from '../../extent.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { isEmpty } from '../../obj.js';\nimport { numberSafeCompareFunction } from '../../array.js';\nimport { transform2D } from '../../geom/flat/transform.js';\n/**\n * @const\n * @type {Array}\n */\nvar ORDER = [\n BuilderType.POLYGON,\n BuilderType.CIRCLE,\n BuilderType.LINE_STRING,\n BuilderType.IMAGE,\n BuilderType.TEXT,\n BuilderType.DEFAULT,\n];\nvar ExecutorGroup = /** @class */ (function () {\n /**\n * @param {import(\"../../extent.js\").Extent} maxExtent Max extent for clipping. When a\n * `maxExtent` was set on the Builder for this executor group, the same `maxExtent`\n * should be set here, unless the target context does not exceed that extent (which\n * can be the case when rendering to tiles).\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {boolean} overlaps The executor group can have overlapping geometries.\n * @param {!Object>} allInstructions\n * The serializable instructions.\n * @param {number} [opt_renderBuffer] Optional rendering buffer.\n */\n function ExecutorGroup(maxExtent, resolution, pixelRatio, overlaps, allInstructions, opt_renderBuffer) {\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n this.maxExtent_ = maxExtent;\n /**\n * @private\n * @type {boolean}\n */\n this.overlaps_ = overlaps;\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {number}\n */\n this.resolution_ = resolution;\n /**\n * @private\n * @type {number|undefined}\n */\n this.renderBuffer_ = opt_renderBuffer;\n /**\n * @private\n * @type {!Object>}\n */\n this.executorsByZIndex_ = {};\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n this.hitDetectionContext_ = null;\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n this.hitDetectionTransform_ = createTransform();\n this.createExecutors_(allInstructions);\n }\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n */\n ExecutorGroup.prototype.clip = function (context, transform) {\n var flatClipCoords = this.getClipCoords(transform);\n context.beginPath();\n context.moveTo(flatClipCoords[0], flatClipCoords[1]);\n context.lineTo(flatClipCoords[2], flatClipCoords[3]);\n context.lineTo(flatClipCoords[4], flatClipCoords[5]);\n context.lineTo(flatClipCoords[6], flatClipCoords[7]);\n context.clip();\n };\n /**\n * Create executors and populate them using the provided instructions.\n * @private\n * @param {!Object>} allInstructions The serializable instructions\n */\n ExecutorGroup.prototype.createExecutors_ = function (allInstructions) {\n for (var zIndex in allInstructions) {\n var executors = this.executorsByZIndex_[zIndex];\n if (executors === undefined) {\n executors = {};\n this.executorsByZIndex_[zIndex] = executors;\n }\n var instructionByZindex = allInstructions[zIndex];\n for (var builderType in instructionByZindex) {\n var instructions = instructionByZindex[builderType];\n executors[builderType] = new Executor(this.resolution_, this.pixelRatio_, this.overlaps_, instructions);\n }\n }\n };\n /**\n * @param {Array} executors Executors.\n * @return {boolean} Has executors of the provided types.\n */\n ExecutorGroup.prototype.hasExecutors = function (executors) {\n for (var zIndex in this.executorsByZIndex_) {\n var candidates = this.executorsByZIndex_[zIndex];\n for (var i = 0, ii = executors.length; i < ii; ++i) {\n if (executors[i] in candidates) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default, number): T} callback Feature callback.\n * @param {Array} declutteredFeatures Decluttered features.\n * @return {T|undefined} Callback result.\n * @template T\n */\n ExecutorGroup.prototype.forEachFeatureAtCoordinate = function (coordinate, resolution, rotation, hitTolerance, callback, declutteredFeatures) {\n hitTolerance = Math.round(hitTolerance);\n var contextSize = hitTolerance * 2 + 1;\n var transform = composeTransform(this.hitDetectionTransform_, hitTolerance + 0.5, hitTolerance + 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]);\n var newContext = !this.hitDetectionContext_;\n if (newContext) {\n this.hitDetectionContext_ = createCanvasContext2D(contextSize, contextSize);\n }\n var context = this.hitDetectionContext_;\n if (context.canvas.width !== contextSize ||\n context.canvas.height !== contextSize) {\n context.canvas.width = contextSize;\n context.canvas.height = contextSize;\n }\n else if (!newContext) {\n context.clearRect(0, 0, contextSize, contextSize);\n }\n /**\n * @type {import(\"../../extent.js\").Extent}\n */\n var hitExtent;\n if (this.renderBuffer_ !== undefined) {\n hitExtent = createEmpty();\n extendCoordinate(hitExtent, coordinate);\n buffer(hitExtent, resolution * (this.renderBuffer_ + hitTolerance), hitExtent);\n }\n var indexes = getPixelIndexArray(hitTolerance);\n var builderType;\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function featureCallback(feature, geometry) {\n var imageData = context.getImageData(0, 0, contextSize, contextSize).data;\n for (var i_1 = 0, ii = indexes.length; i_1 < ii; i_1++) {\n if (imageData[indexes[i_1]] > 0) {\n if (!declutteredFeatures ||\n (builderType !== BuilderType.IMAGE &&\n builderType !== BuilderType.TEXT) ||\n declutteredFeatures.indexOf(feature) !== -1) {\n var idx = (indexes[i_1] - 3) / 4;\n var x = hitTolerance - (idx % contextSize);\n var y = hitTolerance - ((idx / contextSize) | 0);\n var result_1 = callback(feature, geometry, x * x + y * y);\n if (result_1) {\n return result_1;\n }\n }\n context.clearRect(0, 0, contextSize, contextSize);\n break;\n }\n }\n return undefined;\n }\n /** @type {Array} */\n var zs = Object.keys(this.executorsByZIndex_).map(Number);\n zs.sort(numberSafeCompareFunction);\n var i, j, executors, executor, result;\n for (i = zs.length - 1; i >= 0; --i) {\n var zIndexKey = zs[i].toString();\n executors = this.executorsByZIndex_[zIndexKey];\n for (j = ORDER.length - 1; j >= 0; --j) {\n builderType = ORDER[j];\n executor = executors[builderType];\n if (executor !== undefined) {\n result = executor.executeHitDetection(context, transform, rotation, featureCallback, hitExtent);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n };\n /**\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @return {Array} Clip coordinates.\n */\n ExecutorGroup.prototype.getClipCoords = function (transform) {\n var maxExtent = this.maxExtent_;\n if (!maxExtent) {\n return null;\n }\n var minX = maxExtent[0];\n var minY = maxExtent[1];\n var maxX = maxExtent[2];\n var maxY = maxExtent[3];\n var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];\n transform2D(flatClipCoords, 0, 8, 2, transform, flatClipCoords);\n return flatClipCoords;\n };\n /**\n * @return {boolean} Is empty.\n */\n ExecutorGroup.prototype.isEmpty = function () {\n return isEmpty(this.executorsByZIndex_);\n };\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} contextScale Scale of the context.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {boolean} snapToPixel Snap point symbols and test to integer pixel.\n * @param {Array} [opt_builderTypes] Ordered replay types to replay.\n * Default is {@link module:ol/render/replay~ORDER}\n * @param {import(\"rbush\").default} [opt_declutterTree] Declutter tree.\n */\n ExecutorGroup.prototype.execute = function (context, contextScale, transform, viewRotation, snapToPixel, opt_builderTypes, opt_declutterTree) {\n /** @type {Array} */\n var zs = Object.keys(this.executorsByZIndex_).map(Number);\n zs.sort(numberSafeCompareFunction);\n // setup clipping so that the parts of over-simplified geometries are not\n // visible outside the current extent when panning\n if (this.maxExtent_) {\n context.save();\n this.clip(context, transform);\n }\n var builderTypes = opt_builderTypes ? opt_builderTypes : ORDER;\n var i, ii, j, jj, replays, replay;\n if (opt_declutterTree) {\n zs.reverse();\n }\n for (i = 0, ii = zs.length; i < ii; ++i) {\n var zIndexKey = zs[i].toString();\n replays = this.executorsByZIndex_[zIndexKey];\n for (j = 0, jj = builderTypes.length; j < jj; ++j) {\n var builderType = builderTypes[j];\n replay = replays[builderType];\n if (replay !== undefined) {\n replay.execute(context, contextScale, transform, viewRotation, snapToPixel, opt_declutterTree);\n }\n }\n }\n if (this.maxExtent_) {\n context.restore();\n }\n };\n return ExecutorGroup;\n}());\n/**\n * This cache is used to store arrays of indexes for calculated pixel circles\n * to increase performance.\n * It is a static property to allow each Replaygroup to access it.\n * @type {Object>}\n */\nvar circlePixelIndexArrayCache = {};\n/**\n * This methods creates an array with indexes of all pixels within a circle,\n * ordered by how close they are to the center.\n * A cache is used to increase performance.\n * @param {number} radius Radius.\n * @return {Array} An array with indexes within a circle.\n */\nexport function getPixelIndexArray(radius) {\n if (circlePixelIndexArrayCache[radius] !== undefined) {\n return circlePixelIndexArrayCache[radius];\n }\n var size = radius * 2 + 1;\n var maxDistanceSq = radius * radius;\n var distances = new Array(maxDistanceSq + 1);\n for (var i = 0; i <= radius; ++i) {\n for (var j = 0; j <= radius; ++j) {\n var distanceSq = i * i + j * j;\n if (distanceSq > maxDistanceSq) {\n break;\n }\n var distance = distances[distanceSq];\n if (!distance) {\n distance = [];\n distances[distanceSq] = distance;\n }\n distance.push(((radius + i) * size + (radius + j)) * 4 + 3);\n if (i > 0) {\n distance.push(((radius - i) * size + (radius + j)) * 4 + 3);\n }\n if (j > 0) {\n distance.push(((radius + i) * size + (radius - j)) * 4 + 3);\n if (i > 0) {\n distance.push(((radius - i) * size + (radius - j)) * 4 + 3);\n }\n }\n }\n }\n var pixelIndex = [];\n for (var i = 0, ii = distances.length; i < ii; ++i) {\n if (distances[i]) {\n pixelIndex.push.apply(pixelIndex, distances[i]);\n }\n }\n circlePixelIndexArrayCache[radius] = pixelIndex;\n return pixelIndex;\n}\nexport default ExecutorGroup;\n//# sourceMappingURL=ExecutorGroup.js.map","/**\n * @module ol/render/canvas/Immediate\n */\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol/geom/flat/transform~transform2D?\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport GeometryType from '../../geom/GeometryType.js';\nimport VectorContext from '../VectorContext.js';\nimport { asColorLike } from '../../colorlike.js';\nimport { compose as composeTransform, create as createTransform, } from '../../transform.js';\nimport { defaultFillStyle, defaultFont, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextAlign, defaultTextBaseline, } from '../canvas.js';\nimport { equals } from '../../array.js';\nimport { intersects } from '../../extent.js';\nimport { transform2D } from '../../geom/flat/transform.js';\nimport { transformGeom2D } from '../../geom/SimpleGeometry.js';\n/**\n * @classdesc\n * A concrete subclass of {@link module:ol/render/VectorContext VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link module:ol/render/Event~RenderEvent RenderEvent} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n */\nvar CanvasImmediateRenderer = /** @class */ (function (_super) {\n __extends(CanvasImmediateRenderer, _super);\n /**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {number} viewRotation View rotation.\n * @param {number} [opt_squaredTolerance] Optional squared tolerance for simplification.\n * @param {import(\"../../proj.js\").TransformFunction} [opt_userTransform] Transform from user to view projection.\n */\n function CanvasImmediateRenderer(context, pixelRatio, extent, transform, viewRotation, opt_squaredTolerance, opt_userTransform) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {CanvasRenderingContext2D}\n */\n _this.context_ = context;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ = pixelRatio;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.extent_ = extent;\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.transform_ = transform;\n /**\n * @private\n * @type {number}\n */\n _this.viewRotation_ = viewRotation;\n /**\n * @private\n * @type {number}\n */\n _this.squaredTolerance_ = opt_squaredTolerance;\n /**\n * @private\n * @type {import(\"../../proj.js\").TransformFunction}\n */\n _this.userTransform_ = opt_userTransform;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.contextFillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.contextStrokeState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n _this.contextTextState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.fillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.strokeState_ = null;\n /**\n * @private\n * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}\n */\n _this.image_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.imageAnchorX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageAnchorY_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageHeight_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOpacity_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOriginX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.imageOriginY_ = 0;\n /**\n * @private\n * @type {boolean}\n */\n _this.imageRotateWithView_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.imageRotation_ = 0;\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n _this.imageScale_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.imageWidth_ = 0;\n /**\n * @private\n * @type {string}\n */\n _this.text_ = '';\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetX_ = 0;\n /**\n * @private\n * @type {number}\n */\n _this.textOffsetY_ = 0;\n /**\n * @private\n * @type {boolean}\n */\n _this.textRotateWithView_ = false;\n /**\n * @private\n * @type {number}\n */\n _this.textRotation_ = 0;\n /**\n * @private\n * @type {import(\"../../size.js\").Size}\n */\n _this.textScale_ = [0, 0];\n /**\n * @private\n * @type {?import(\"../canvas.js\").FillState}\n */\n _this.textFillState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").StrokeState}\n */\n _this.textStrokeState_ = null;\n /**\n * @private\n * @type {?import(\"../canvas.js\").TextState}\n */\n _this.textState_ = null;\n /**\n * @private\n * @type {Array}\n */\n _this.pixelCoordinates_ = [];\n /**\n * @private\n * @type {import(\"../../transform.js\").Transform}\n */\n _this.tmpLocalTransform_ = createTransform();\n return _this;\n }\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n CanvasImmediateRenderer.prototype.drawImages_ = function (flatCoordinates, offset, end, stride) {\n if (!this.image_) {\n return;\n }\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n var context = this.context_;\n var localTransform = this.tmpLocalTransform_;\n var alpha = context.globalAlpha;\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha * this.imageOpacity_;\n }\n var rotation = this.imageRotation_;\n if (this.imageRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (var i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n var x = pixelCoordinates[i] - this.imageAnchorX_;\n var y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n if (rotation !== 0 ||\n this.imageScale_[0] != 1 ||\n this.imageScale_[1] != 1) {\n var centerX = x + this.imageAnchorX_;\n var centerY = y + this.imageAnchorY_;\n composeTransform(localTransform, centerX, centerY, 1, 1, rotation, -centerX, -centerY);\n context.setTransform.apply(context, localTransform);\n context.translate(centerX, centerY);\n context.scale(this.imageScale_[0], this.imageScale_[1]);\n context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, -this.imageAnchorX_, -this.imageAnchorY_, this.imageWidth_, this.imageHeight_);\n context.setTransform(1, 0, 0, 1, 0, 0);\n }\n else {\n context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, x, y, this.imageWidth_, this.imageHeight_);\n }\n }\n if (this.imageOpacity_ != 1) {\n context.globalAlpha = alpha;\n }\n };\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @private\n */\n CanvasImmediateRenderer.prototype.drawText_ = function (flatCoordinates, offset, end, stride) {\n if (!this.textState_ || this.text_ === '') {\n return;\n }\n if (this.textFillState_) {\n this.setContextFillState_(this.textFillState_);\n }\n if (this.textStrokeState_) {\n this.setContextStrokeState_(this.textStrokeState_);\n }\n this.setContextTextState_(this.textState_);\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n var context = this.context_;\n var rotation = this.textRotation_;\n if (this.textRotateWithView_) {\n rotation += this.viewRotation_;\n }\n for (; offset < end; offset += stride) {\n var x = pixelCoordinates[offset] + this.textOffsetX_;\n var y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n if (rotation !== 0 ||\n this.textScale_[0] != 1 ||\n this.textScale_[1] != 1) {\n var localTransform = composeTransform(this.tmpLocalTransform_, x, y, 1, 1, rotation, -x, -y);\n context.setTransform.apply(context, localTransform);\n context.translate(x, y);\n context.scale(this.textScale_[0], this.textScale_[1]);\n if (this.textStrokeState_) {\n context.strokeText(this.text_, 0, 0);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, 0, 0);\n }\n context.setTransform(1, 0, 0, 1, 0, 0);\n }\n else {\n if (this.textStrokeState_) {\n context.strokeText(this.text_, x, y);\n }\n if (this.textFillState_) {\n context.fillText(this.text_, x, y);\n }\n }\n }\n };\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {boolean} close Close.\n * @private\n * @return {number} end End.\n */\n CanvasImmediateRenderer.prototype.moveToLineTo_ = function (flatCoordinates, offset, end, stride, close) {\n var context = this.context_;\n var pixelCoordinates = transform2D(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);\n context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n var length = pixelCoordinates.length;\n if (close) {\n length -= 2;\n }\n for (var i = 2; i < length; i += 2) {\n context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n }\n if (close) {\n context.closePath();\n }\n return end;\n };\n /**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @private\n * @return {number} End.\n */\n CanvasImmediateRenderer.prototype.drawRings_ = function (flatCoordinates, offset, ends, stride) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, true);\n }\n return offset;\n };\n /**\n * Render a circle geometry into the canvas. Rendering is immediate and uses\n * the current fill and stroke styles.\n *\n * @param {import(\"../../geom/Circle.js\").default} geometry Circle geometry.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawCircle = function (geometry) {\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.fillState_ || this.strokeState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var pixelCoordinates = transformGeom2D(geometry, this.transform_, this.pixelCoordinates_);\n var dx = pixelCoordinates[2] - pixelCoordinates[0];\n var dy = pixelCoordinates[3] - pixelCoordinates[1];\n var radius = Math.sqrt(dx * dx + dy * dy);\n var context = this.context_;\n context.beginPath();\n context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n this.drawText_(geometry.getCenter(), 0, 2, 2);\n }\n };\n /**\n * Set the rendering style. Note that since this is an immediate rendering API,\n * any `zIndex` on the provided style will be ignored.\n *\n * @param {import(\"../../style/Style.js\").default} style The rendering style.\n * @api\n */\n CanvasImmediateRenderer.prototype.setStyle = function (style) {\n this.setFillStrokeStyle(style.getFill(), style.getStroke());\n this.setImageStyle(style.getImage());\n this.setTextStyle(style.getText());\n };\n /**\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n */\n CanvasImmediateRenderer.prototype.setTransform = function (transform) {\n this.transform_ = transform;\n };\n /**\n * Render a geometry into the canvas. Call\n * {@link module:ol/render/canvas/Immediate~CanvasImmediateRenderer#setStyle renderer.setStyle()} first to set the rendering style.\n *\n * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry to render.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawGeometry = function (geometry) {\n var type = geometry.getType();\n switch (type) {\n case GeometryType.POINT:\n this.drawPoint(\n /** @type {import(\"../../geom/Point.js\").default} */ (geometry));\n break;\n case GeometryType.LINE_STRING:\n this.drawLineString(\n /** @type {import(\"../../geom/LineString.js\").default} */ (geometry));\n break;\n case GeometryType.POLYGON:\n this.drawPolygon(\n /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_POINT:\n this.drawMultiPoint(\n /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_LINE_STRING:\n this.drawMultiLineString(\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry));\n break;\n case GeometryType.MULTI_POLYGON:\n this.drawMultiPolygon(\n /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry));\n break;\n case GeometryType.GEOMETRY_COLLECTION:\n this.drawGeometryCollection(\n /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (geometry));\n break;\n case GeometryType.CIRCLE:\n this.drawCircle(\n /** @type {import(\"../../geom/Circle.js\").default} */ (geometry));\n break;\n default:\n }\n };\n /**\n * Render a feature into the canvas. Note that any `zIndex` on the provided\n * style will be ignored - features are rendered immediately in the order that\n * this method is called. If you need `zIndex` support, you should be using an\n * {@link module:ol/layer/Vector~VectorLayer VectorLayer} instead.\n *\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @param {import(\"../../style/Style.js\").default} style Style.\n * @api\n */\n CanvasImmediateRenderer.prototype.drawFeature = function (feature, style) {\n var geometry = style.getGeometryFunction()(feature);\n if (!geometry || !intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n this.setStyle(style);\n this.drawGeometry(geometry);\n };\n /**\n * Render a GeometryCollection to the canvas. Rendering is immediate and\n * uses the current styles appropriate for each geometry in the collection.\n *\n * @param {import(\"../../geom/GeometryCollection.js\").default} geometry Geometry collection.\n */\n CanvasImmediateRenderer.prototype.drawGeometryCollection = function (geometry) {\n var geometries = geometry.getGeometriesArray();\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n this.drawGeometry(geometries[i]);\n }\n };\n /**\n * Render a Point geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} geometry Point geometry.\n */\n CanvasImmediateRenderer.prototype.drawPoint = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Point.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var flatCoordinates = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n };\n /**\n * Render a MultiPoint geometry into the canvas. Rendering is immediate and\n * uses the current style.\n *\n * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} geometry MultiPoint geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiPoint = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var flatCoordinates = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n if (this.image_) {\n this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n if (this.text_ !== '') {\n this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n }\n };\n /**\n * Render a LineString into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} geometry LineString geometry.\n */\n CanvasImmediateRenderer.prototype.drawLineString = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/LineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n var context = this.context_;\n var flatCoordinates = geometry.getFlatCoordinates();\n context.beginPath();\n this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), false);\n context.stroke();\n }\n if (this.text_ !== '') {\n var flatMidpoint = geometry.getFlatMidpoint();\n this.drawText_(flatMidpoint, 0, 2, 2);\n }\n };\n /**\n * Render a MultiLineString geometry into the canvas. Rendering is immediate\n * and uses the current style.\n *\n * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} geometry MultiLineString geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiLineString = function (geometry) {\n if (this.squaredTolerance_) {\n geometry =\n /** @type {import(\"../../geom/MultiLineString.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n var geometryExtent = geometry.getExtent();\n if (!intersects(this.extent_, geometryExtent)) {\n return;\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n var context = this.context_;\n var flatCoordinates = geometry.getFlatCoordinates();\n var offset = 0;\n var ends = /** @type {Array} */ (geometry.getEnds());\n var stride = geometry.getStride();\n context.beginPath();\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, false);\n }\n context.stroke();\n }\n if (this.text_ !== '') {\n var flatMidpoints = geometry.getFlatMidpoints();\n this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n }\n };\n /**\n * Render a Polygon geometry into the canvas. Rendering is immediate and uses\n * the current style.\n *\n * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} geometry Polygon geometry.\n */\n CanvasImmediateRenderer.prototype.drawPolygon = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var context = this.context_;\n context.beginPath();\n this.drawRings_(geometry.getOrientedFlatCoordinates(), 0, \n /** @type {Array} */ (geometry.getEnds()), geometry.getStride());\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n var flatInteriorPoint = geometry.getFlatInteriorPoint();\n this.drawText_(flatInteriorPoint, 0, 2, 2);\n }\n };\n /**\n * Render MultiPolygon geometry into the canvas. Rendering is immediate and\n * uses the current style.\n * @param {import(\"../../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n */\n CanvasImmediateRenderer.prototype.drawMultiPolygon = function (geometry) {\n if (this.squaredTolerance_) {\n geometry = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_));\n }\n if (!intersects(this.extent_, geometry.getExtent())) {\n return;\n }\n if (this.strokeState_ || this.fillState_) {\n if (this.fillState_) {\n this.setContextFillState_(this.fillState_);\n }\n if (this.strokeState_) {\n this.setContextStrokeState_(this.strokeState_);\n }\n var context = this.context_;\n var flatCoordinates = geometry.getOrientedFlatCoordinates();\n var offset = 0;\n var endss = geometry.getEndss();\n var stride = geometry.getStride();\n context.beginPath();\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n offset = this.drawRings_(flatCoordinates, offset, ends, stride);\n }\n if (this.fillState_) {\n context.fill();\n }\n if (this.strokeState_) {\n context.stroke();\n }\n }\n if (this.text_ !== '') {\n var flatInteriorPoints = geometry.getFlatInteriorPoints();\n this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n }\n };\n /**\n * @param {import(\"../canvas.js\").FillState} fillState Fill state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextFillState_ = function (fillState) {\n var context = this.context_;\n var contextFillState = this.contextFillState_;\n if (!contextFillState) {\n context.fillStyle = fillState.fillStyle;\n this.contextFillState_ = {\n fillStyle: fillState.fillStyle,\n };\n }\n else {\n if (contextFillState.fillStyle != fillState.fillStyle) {\n contextFillState.fillStyle = fillState.fillStyle;\n context.fillStyle = fillState.fillStyle;\n }\n }\n };\n /**\n * @param {import(\"../canvas.js\").StrokeState} strokeState Stroke state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextStrokeState_ = function (strokeState) {\n var context = this.context_;\n var contextStrokeState = this.contextStrokeState_;\n if (!contextStrokeState) {\n context.lineCap = strokeState.lineCap;\n if (context.setLineDash) {\n context.setLineDash(strokeState.lineDash);\n context.lineDashOffset = strokeState.lineDashOffset;\n }\n context.lineJoin = strokeState.lineJoin;\n context.lineWidth = strokeState.lineWidth;\n context.miterLimit = strokeState.miterLimit;\n context.strokeStyle = strokeState.strokeStyle;\n this.contextStrokeState_ = {\n lineCap: strokeState.lineCap,\n lineDash: strokeState.lineDash,\n lineDashOffset: strokeState.lineDashOffset,\n lineJoin: strokeState.lineJoin,\n lineWidth: strokeState.lineWidth,\n miterLimit: strokeState.miterLimit,\n strokeStyle: strokeState.strokeStyle,\n };\n }\n else {\n if (contextStrokeState.lineCap != strokeState.lineCap) {\n contextStrokeState.lineCap = strokeState.lineCap;\n context.lineCap = strokeState.lineCap;\n }\n if (context.setLineDash) {\n if (!equals(contextStrokeState.lineDash, strokeState.lineDash)) {\n context.setLineDash((contextStrokeState.lineDash = strokeState.lineDash));\n }\n if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n contextStrokeState.lineDashOffset = strokeState.lineDashOffset;\n context.lineDashOffset = strokeState.lineDashOffset;\n }\n }\n if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n contextStrokeState.lineJoin = strokeState.lineJoin;\n context.lineJoin = strokeState.lineJoin;\n }\n if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n contextStrokeState.lineWidth = strokeState.lineWidth;\n context.lineWidth = strokeState.lineWidth;\n }\n if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n contextStrokeState.miterLimit = strokeState.miterLimit;\n context.miterLimit = strokeState.miterLimit;\n }\n if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n contextStrokeState.strokeStyle = strokeState.strokeStyle;\n context.strokeStyle = strokeState.strokeStyle;\n }\n }\n };\n /**\n * @param {import(\"../canvas.js\").TextState} textState Text state.\n * @private\n */\n CanvasImmediateRenderer.prototype.setContextTextState_ = function (textState) {\n var context = this.context_;\n var contextTextState = this.contextTextState_;\n var textAlign = textState.textAlign\n ? textState.textAlign\n : defaultTextAlign;\n if (!contextTextState) {\n context.font = textState.font;\n context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n this.contextTextState_ = {\n font: textState.font,\n textAlign: textAlign,\n textBaseline: textState.textBaseline,\n };\n }\n else {\n if (contextTextState.font != textState.font) {\n contextTextState.font = textState.font;\n context.font = textState.font;\n }\n if (contextTextState.textAlign != textAlign) {\n contextTextState.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n context.textAlign = /** @type {CanvasTextAlign} */ (textAlign);\n }\n if (contextTextState.textBaseline != textState.textBaseline) {\n contextTextState.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n context.textBaseline = /** @type {CanvasTextBaseline} */ (textState.textBaseline);\n }\n }\n };\n /**\n * Set the fill and stroke style for subsequent draw operations. To clear\n * either fill or stroke styles, pass null for the appropriate parameter.\n *\n * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n */\n CanvasImmediateRenderer.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {\n var _this = this;\n if (!fillStyle) {\n this.fillState_ = null;\n }\n else {\n var fillStyleColor = fillStyle.getColor();\n this.fillState_ = {\n fillStyle: asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle),\n };\n }\n if (!strokeStyle) {\n this.strokeState_ = null;\n }\n else {\n var strokeStyleColor = strokeStyle.getColor();\n var strokeStyleLineCap = strokeStyle.getLineCap();\n var strokeStyleLineDash = strokeStyle.getLineDash();\n var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n var strokeStyleLineJoin = strokeStyle.getLineJoin();\n var strokeStyleWidth = strokeStyle.getWidth();\n var strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n var lineDash = strokeStyleLineDash\n ? strokeStyleLineDash\n : defaultLineDash;\n this.strokeState_ = {\n lineCap: strokeStyleLineCap !== undefined\n ? strokeStyleLineCap\n : defaultLineCap,\n lineDash: this.pixelRatio_ === 1\n ? lineDash\n : lineDash.map(function (n) { return n * _this.pixelRatio_; }),\n lineDashOffset: (strokeStyleLineDashOffset\n ? strokeStyleLineDashOffset\n : defaultLineDashOffset) * this.pixelRatio_,\n lineJoin: strokeStyleLineJoin !== undefined\n ? strokeStyleLineJoin\n : defaultLineJoin,\n lineWidth: (strokeStyleWidth !== undefined\n ? strokeStyleWidth\n : defaultLineWidth) * this.pixelRatio_,\n miterLimit: strokeStyleMiterLimit !== undefined\n ? strokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(strokeStyleColor ? strokeStyleColor : defaultStrokeStyle),\n };\n }\n };\n /**\n * Set the image style for subsequent draw operations. Pass null to remove\n * the image style.\n *\n * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n */\n CanvasImmediateRenderer.prototype.setImageStyle = function (imageStyle) {\n var imageSize;\n if (!imageStyle || !(imageSize = imageStyle.getSize())) {\n this.image_ = null;\n return;\n }\n var imageAnchor = imageStyle.getAnchor();\n var imageOrigin = imageStyle.getOrigin();\n this.image_ = imageStyle.getImage(this.pixelRatio_);\n this.imageAnchorX_ = imageAnchor[0] * this.pixelRatio_;\n this.imageAnchorY_ = imageAnchor[1] * this.pixelRatio_;\n this.imageHeight_ = imageSize[1] * this.pixelRatio_;\n this.imageOpacity_ = imageStyle.getOpacity();\n this.imageOriginX_ = imageOrigin[0];\n this.imageOriginY_ = imageOrigin[1];\n this.imageRotateWithView_ = imageStyle.getRotateWithView();\n this.imageRotation_ = imageStyle.getRotation();\n this.imageScale_ = imageStyle.getScaleArray();\n this.imageWidth_ = imageSize[0] * this.pixelRatio_;\n };\n /**\n * Set the text style for subsequent draw operations. Pass null to\n * remove the text style.\n *\n * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n */\n CanvasImmediateRenderer.prototype.setTextStyle = function (textStyle) {\n if (!textStyle) {\n this.text_ = '';\n }\n else {\n var textFillStyle = textStyle.getFill();\n if (!textFillStyle) {\n this.textFillState_ = null;\n }\n else {\n var textFillStyleColor = textFillStyle.getColor();\n this.textFillState_ = {\n fillStyle: asColorLike(textFillStyleColor ? textFillStyleColor : defaultFillStyle),\n };\n }\n var textStrokeStyle = textStyle.getStroke();\n if (!textStrokeStyle) {\n this.textStrokeState_ = null;\n }\n else {\n var textStrokeStyleColor = textStrokeStyle.getColor();\n var textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n var textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n var textStrokeStyleLineDashOffset = textStrokeStyle.getLineDashOffset();\n var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n var textStrokeStyleWidth = textStrokeStyle.getWidth();\n var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n this.textStrokeState_ = {\n lineCap: textStrokeStyleLineCap !== undefined\n ? textStrokeStyleLineCap\n : defaultLineCap,\n lineDash: textStrokeStyleLineDash\n ? textStrokeStyleLineDash\n : defaultLineDash,\n lineDashOffset: textStrokeStyleLineDashOffset\n ? textStrokeStyleLineDashOffset\n : defaultLineDashOffset,\n lineJoin: textStrokeStyleLineJoin !== undefined\n ? textStrokeStyleLineJoin\n : defaultLineJoin,\n lineWidth: textStrokeStyleWidth !== undefined\n ? textStrokeStyleWidth\n : defaultLineWidth,\n miterLimit: textStrokeStyleMiterLimit !== undefined\n ? textStrokeStyleMiterLimit\n : defaultMiterLimit,\n strokeStyle: asColorLike(textStrokeStyleColor ? textStrokeStyleColor : defaultStrokeStyle),\n };\n }\n var textFont = textStyle.getFont();\n var textOffsetX = textStyle.getOffsetX();\n var textOffsetY = textStyle.getOffsetY();\n var textRotateWithView = textStyle.getRotateWithView();\n var textRotation = textStyle.getRotation();\n var textScale = textStyle.getScaleArray();\n var textText = textStyle.getText();\n var textTextAlign = textStyle.getTextAlign();\n var textTextBaseline = textStyle.getTextBaseline();\n this.textState_ = {\n font: textFont !== undefined ? textFont : defaultFont,\n textAlign: textTextAlign !== undefined ? textTextAlign : defaultTextAlign,\n textBaseline: textTextBaseline !== undefined\n ? textTextBaseline\n : defaultTextBaseline,\n };\n this.text_ = textText !== undefined ? textText : '';\n this.textOffsetX_ =\n textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;\n this.textOffsetY_ =\n textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;\n this.textRotateWithView_ =\n textRotateWithView !== undefined ? textRotateWithView : false;\n this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n this.textScale_ = [\n this.pixelRatio_ * textScale[0],\n this.pixelRatio_ * textScale[1],\n ];\n }\n };\n return CanvasImmediateRenderer;\n}(VectorContext));\nexport default CanvasImmediateRenderer;\n//# sourceMappingURL=Immediate.js.map","/**\n * @module ol/render/canvas/hitdetect\n */\nimport CanvasImmediateRenderer from './Immediate.js';\nimport GeometryType from '../../geom/GeometryType.js';\nimport IconAnchorUnits from '../../style/IconAnchorUnits.js';\nimport { Icon } from '../../style.js';\nimport { clamp } from '../../math.js';\nimport { createCanvasContext2D } from '../../dom.js';\nimport { intersects } from '../../extent.js';\nimport { numberSafeCompareFunction } from '../../array.js';\nexport var HIT_DETECT_RESOLUTION = 0.5;\n/**\n * @param {import(\"../../size.js\").Size} size Canvas size in css pixels.\n * @param {Array} transforms Transforms\n * for rendering features to all worlds of the viewport, from coordinates to css\n * pixels.\n * @param {Array} features\n * Features to consider for hit detection.\n * @param {import(\"../../style/Style.js\").StyleFunction|undefined} styleFunction\n * Layer style function.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {ImageData} Hit detection image data.\n */\nexport function createHitDetectionImageData(size, transforms, features, styleFunction, extent, resolution, rotation) {\n var width = size[0] * HIT_DETECT_RESOLUTION;\n var height = size[1] * HIT_DETECT_RESOLUTION;\n var context = createCanvasContext2D(width, height);\n context.imageSmoothingEnabled = false;\n var canvas = context.canvas;\n var renderer = new CanvasImmediateRenderer(context, HIT_DETECT_RESOLUTION, extent, null, rotation);\n var featureCount = features.length;\n // Stretch hit detection index to use the whole available color range\n var indexFactor = Math.floor((256 * 256 * 256 - 1) / featureCount);\n var featuresByZIndex = {};\n for (var i = 1; i <= featureCount; ++i) {\n var feature = features[i - 1];\n var featureStyleFunction = feature.getStyleFunction() || styleFunction;\n if (!styleFunction) {\n continue;\n }\n var styles = featureStyleFunction(feature, resolution);\n if (!styles) {\n continue;\n }\n if (!Array.isArray(styles)) {\n styles = [styles];\n }\n var index = i * indexFactor;\n var color = '#' + ('000000' + index.toString(16)).slice(-6);\n for (var j = 0, jj = styles.length; j < jj; ++j) {\n var originalStyle = styles[j];\n var geometry = originalStyle.getGeometryFunction()(feature);\n if (!geometry || !intersects(extent, geometry.getExtent())) {\n continue;\n }\n var style = originalStyle.clone();\n var fill = style.getFill();\n if (fill) {\n fill.setColor(color);\n }\n var stroke = style.getStroke();\n if (stroke) {\n stroke.setColor(color);\n stroke.setLineDash(null);\n }\n style.setText(undefined);\n var image = originalStyle.getImage();\n if (image && image.getOpacity() !== 0) {\n var imgSize = image.getImageSize();\n if (!imgSize) {\n continue;\n }\n var imgContext = createCanvasContext2D(imgSize[0], imgSize[1], undefined, { alpha: false });\n var img = imgContext.canvas;\n imgContext.fillStyle = color;\n imgContext.fillRect(0, 0, img.width, img.height);\n style.setImage(new Icon({\n img: img,\n imgSize: imgSize,\n anchor: image.getAnchor(),\n anchorXUnits: IconAnchorUnits.PIXELS,\n anchorYUnits: IconAnchorUnits.PIXELS,\n offset: image.getOrigin(),\n opacity: 1,\n size: image.getSize(),\n scale: image.getScale(),\n rotation: image.getRotation(),\n rotateWithView: image.getRotateWithView(),\n }));\n }\n var zIndex = style.getZIndex() || 0;\n var byGeometryType = featuresByZIndex[zIndex];\n if (!byGeometryType) {\n byGeometryType = {};\n featuresByZIndex[zIndex] = byGeometryType;\n byGeometryType[GeometryType.POLYGON] = [];\n byGeometryType[GeometryType.CIRCLE] = [];\n byGeometryType[GeometryType.LINE_STRING] = [];\n byGeometryType[GeometryType.POINT] = [];\n }\n byGeometryType[geometry.getType().replace('Multi', '')].push(geometry, style);\n }\n }\n var zIndexKeys = Object.keys(featuresByZIndex)\n .map(Number)\n .sort(numberSafeCompareFunction);\n for (var i = 0, ii = zIndexKeys.length; i < ii; ++i) {\n var byGeometryType = featuresByZIndex[zIndexKeys[i]];\n for (var type in byGeometryType) {\n var geomAndStyle = byGeometryType[type];\n for (var j = 0, jj = geomAndStyle.length; j < jj; j += 2) {\n renderer.setStyle(geomAndStyle[j + 1]);\n for (var k = 0, kk = transforms.length; k < kk; ++k) {\n renderer.setTransform(transforms[k]);\n renderer.drawGeometry(geomAndStyle[j]);\n }\n }\n }\n }\n return context.getImageData(0, 0, canvas.width, canvas.height);\n}\n/**\n * @param {import(\"../../pixel\").Pixel} pixel Pixel coordinate on the hit\n * detection canvas in css pixels.\n * @param {Array} features Features. Has to\n * match the `features` array that was passed to `createHitDetectionImageData()`.\n * @param {ImageData} imageData Hit detection image data generated by\n * `createHitDetectionImageData()`.\n * @return {Array} features Features.\n */\nexport function hitDetect(pixel, features, imageData) {\n var resultFeatures = [];\n if (imageData) {\n var x = Math.floor(Math.round(pixel[0]) * HIT_DETECT_RESOLUTION);\n var y = Math.floor(Math.round(pixel[1]) * HIT_DETECT_RESOLUTION);\n // The pixel coordinate is clamped down to the hit-detect canvas' size to account\n // for browsers returning coordinates slightly larger than the actual canvas size\n // due to a non-integer pixel ratio.\n var index = (clamp(x, 0, imageData.width - 1) +\n clamp(y, 0, imageData.height - 1) * imageData.width) *\n 4;\n var r = imageData.data[index];\n var g = imageData.data[index + 1];\n var b = imageData.data[index + 2];\n var i = b + 256 * (g + 256 * r);\n var indexFactor = Math.floor((256 * 256 * 256 - 1) / features.length);\n if (i && i % indexFactor === 0) {\n resultFeatures.push(features[i / indexFactor - 1]);\n }\n }\n return resultFeatures;\n}\n//# sourceMappingURL=hitdetect.js.map","/**\n * @module ol/renderer/vector\n */\nimport BuilderType from '../render/canvas/BuilderType.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport ImageState from '../ImageState.js';\nimport { getUid } from '../util.js';\n/**\n * Feature callback. The callback will be called with three arguments. The first\n * argument is one {@link module:ol/Feature feature} or {@link module:ol/render/Feature render feature}\n * at the pixel, the second is the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. The third is the {@link module:ol/geom/SimpleGeometry} of the feature. For features\n * with a GeometryCollection geometry, it will be the first detected geometry from the collection.\n * @template T\n * @typedef {function(import(\"../Feature.js\").FeatureLike, import(\"../layer/Layer.js\").default, import(\"../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n/**\n * Tolerance for geometry simplification in device pixels.\n * @type {number}\n */\nvar SIMPLIFY_TOLERANCE = 0.5;\n/**\n * @const\n * @type {Object}\n */\nvar GEOMETRY_RENDERERS = {\n 'Point': renderPointGeometry,\n 'LineString': renderLineStringGeometry,\n 'Polygon': renderPolygonGeometry,\n 'MultiPoint': renderMultiPointGeometry,\n 'MultiLineString': renderMultiLineStringGeometry,\n 'MultiPolygon': renderMultiPolygonGeometry,\n 'GeometryCollection': renderGeometryCollectionGeometry,\n 'Circle': renderCircleGeometry,\n};\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature1 Feature 1.\n * @param {import(\"../Feature.js\").FeatureLike} feature2 Feature 2.\n * @return {number} Order.\n */\nexport function defaultOrder(feature1, feature2) {\n return parseInt(getUid(feature1), 10) - parseInt(getUid(feature2), 10);\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nexport function getSquaredTolerance(resolution, pixelRatio) {\n var tolerance = getTolerance(resolution, pixelRatio);\n return tolerance * tolerance;\n}\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nexport function getTolerance(resolution, pixelRatio) {\n return (SIMPLIFY_TOLERANCE * resolution) / pixelRatio;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderCircleGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n var circleReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.CIRCLE);\n circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n circleReplay.drawCircle(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Transform from user to view projection.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n * @return {boolean} `true` if style is loading.\n */\nexport function renderFeature(replayGroup, feature, style, squaredTolerance, listener, opt_transform, opt_declutterBuilderGroup) {\n var loading = false;\n var imageStyle = style.getImage();\n if (imageStyle) {\n var imageState = imageStyle.getImageState();\n if (imageState == ImageState.LOADED || imageState == ImageState.ERROR) {\n imageStyle.unlistenImageChange(listener);\n }\n else {\n if (imageState == ImageState.IDLE) {\n imageStyle.load();\n }\n imageState = imageStyle.getImageState();\n imageStyle.listenImageChange(listener);\n loading = true;\n }\n }\n renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup);\n return loading;\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform, opt_declutterBuilderGroup) {\n var geometry = style.getGeometryFunction()(feature);\n if (!geometry) {\n return;\n }\n var simplifiedGeometry = geometry.simplifyTransformed(squaredTolerance, opt_transform);\n var renderer = style.getRenderer();\n if (renderer) {\n renderGeometry(replayGroup, simplifiedGeometry, style, feature);\n }\n else {\n var geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];\n geometryRenderer(replayGroup, simplifiedGeometry, style, feature, opt_declutterBuilderGroup);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n */\nfunction renderGeometry(replayGroup, geometry, style, feature) {\n if (geometry.getType() == GeometryType.GEOMETRY_COLLECTION) {\n var geometries = \n /** @type {import(\"../geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n renderGeometry(replayGroup, geometries[i], style, feature);\n }\n return;\n }\n var replay = replayGroup.getBuilder(style.getZIndex(), BuilderType.DEFAULT);\n replay.drawCustom(\n /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geometry), feature, style.getRenderer(), style.getHitDetectionRenderer());\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderGeometryCollectionGeometry(replayGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var geometries = geometry.getGeometriesArray();\n var i, ii;\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n var geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];\n geometryRenderer(replayGroup, geometries[i], style, feature, opt_declutterBuilderGroup);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/LineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var strokeStyle = style.getStroke();\n if (strokeStyle) {\n var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawLineString(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiLineStringGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var strokeStyle = style.getStroke();\n if (strokeStyle) {\n var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING);\n lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n lineStringReplay.drawMultiLineString(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (strokeStyle || fillStyle) {\n var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawMultiPolygon(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Point.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var imageStyle = style.getImage();\n var textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n var declutterImageWithText;\n if (opt_declutterBuilderGroup) {\n builderGroup = opt_declutterBuilderGroup;\n declutterImageWithText =\n imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n }\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n var textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderMultiPointGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var imageStyle = style.getImage();\n var textStyle = style.getText();\n /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n var declutterImageWithText;\n if (opt_declutterBuilderGroup) {\n builderGroup = opt_declutterBuilderGroup;\n declutterImageWithText =\n imageStyle && textStyle && textStyle.getText() ? {} : undefined;\n }\n if (imageStyle) {\n if (imageStyle.getImageState() != ImageState.LOADED) {\n return;\n }\n var imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE);\n imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n imageReplay.drawMultiPoint(geometry, feature);\n }\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle, declutterImageWithText);\n textReplay.drawText(geometry, feature);\n }\n}\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Polygon.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n */\nfunction renderPolygonGeometry(builderGroup, geometry, style, feature, opt_declutterBuilderGroup) {\n var fillStyle = style.getFill();\n var strokeStyle = style.getStroke();\n if (fillStyle || strokeStyle) {\n var polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON);\n polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n polygonReplay.drawPolygon(geometry, feature);\n }\n var textStyle = style.getText();\n if (textStyle && textStyle.getText()) {\n var textReplay = (opt_declutterBuilderGroup || builderGroup).getBuilder(style.getZIndex(), BuilderType.TEXT);\n textReplay.setTextStyle(textStyle);\n textReplay.drawText(geometry, feature);\n }\n}\n//# sourceMappingURL=vector.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/canvas/VectorLayer\n */\nimport CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';\nimport CanvasLayerRenderer from './Layer.js';\nimport ExecutorGroup from '../../render/canvas/ExecutorGroup.js';\nimport ViewHint from '../../ViewHint.js';\nimport { HIT_DETECT_RESOLUTION, createHitDetectionImageData, hitDetect, } from '../../render/canvas/hitdetect.js';\nimport { apply, makeInverse, makeScale, toString as transformToString, } from '../../transform.js';\nimport { buffer, containsExtent, createEmpty, getWidth, intersects as intersectsExtent, wrapX as wrapExtentX, } from '../../extent.js';\nimport { cssOpacity } from '../../css.js';\nimport { defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature, } from '../vector.js';\nimport { equals } from '../../array.js';\nimport { fromUserExtent, getTransformFromProjections, getUserProjection, toUserExtent, toUserResolution, } from '../../proj.js';\nimport { getUid } from '../../util.js';\nimport { wrapX as wrapCoordinateX } from '../../coordinate.js';\n/**\n * @classdesc\n * Canvas renderer for vector layers.\n * @api\n */\nvar CanvasVectorLayerRenderer = /** @class */ (function (_super) {\n __extends(CanvasVectorLayerRenderer, _super);\n /**\n * @param {import(\"../../layer/Vector.js\").default} vectorLayer Vector layer.\n */\n function CanvasVectorLayerRenderer(vectorLayer) {\n var _this = _super.call(this, vectorLayer) || this;\n /** @private */\n _this.boundHandleStyleImageChange_ = _this.handleStyleImageChange_.bind(_this);\n /**\n * @type {boolean}\n */\n _this.animatingOrInteracting_;\n /**\n * @private\n * @type {boolean}\n */\n _this.dirty_ = false;\n /**\n * @type {ImageData}\n */\n _this.hitDetectionImageData_ = null;\n /**\n * @type {Array}\n */\n _this.renderedFeatures_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.renderedRevision_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.renderedResolution_ = NaN;\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.renderedExtent_ = createEmpty();\n /**\n * @private\n * @type {import(\"../../extent.js\").Extent}\n */\n _this.wrappedRenderedExtent_ = createEmpty();\n /**\n * @private\n * @type {number}\n */\n _this.renderedRotation_;\n /**\n * @private\n * @type {import(\"../../coordinate\").Coordinate}\n */\n _this.renderedCenter_ = null;\n /**\n * @private\n * @type {import(\"../../proj/Projection\").default}\n */\n _this.renderedProjection_ = null;\n /**\n * @private\n * @type {function(import(\"../../Feature.js\").default, import(\"../../Feature.js\").default): number|null}\n */\n _this.renderedRenderOrder_ = null;\n /**\n * @private\n * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n */\n _this.replayGroup_ = null;\n /**\n * A new replay group had to be created by `prepareFrame()`\n * @type {boolean}\n */\n _this.replayGroupChanged = true;\n /**\n * @type {import(\"../../render/canvas/ExecutorGroup\").default}\n */\n _this.declutterExecutorGroup = null;\n /**\n * Clipping to be performed by `renderFrame()`\n * @type {boolean}\n */\n _this.clipping = true;\n return _this;\n }\n /**\n * Get a rendering container from an existing target, if compatible.\n * @param {HTMLElement} target Potential render target.\n * @param {string} transform CSS Transform.\n * @param {number} opacity Opacity.\n */\n CanvasVectorLayerRenderer.prototype.useContainer = function (target, transform, opacity) {\n if (opacity < 1) {\n target = null;\n }\n _super.prototype.useContainer.call(this, target, transform, opacity);\n };\n /**\n * @param {ExecutorGroup} executorGroup Executor group.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {import(\"rbush\").default} [opt_declutterTree] Declutter tree.\n */\n CanvasVectorLayerRenderer.prototype.renderWorlds = function (executorGroup, frameState, opt_declutterTree) {\n var extent = frameState.extent;\n var viewState = frameState.viewState;\n var center = viewState.center;\n var resolution = viewState.resolution;\n var projection = viewState.projection;\n var rotation = viewState.rotation;\n var projectionExtent = projection.getExtent();\n var vectorSource = this.getLayer().getSource();\n var pixelRatio = frameState.pixelRatio;\n var viewHints = frameState.viewHints;\n var snapToPixel = !(viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]);\n var context = this.context;\n var width = Math.round(frameState.size[0] * pixelRatio);\n var height = Math.round(frameState.size[1] * pixelRatio);\n var multiWorld = vectorSource.getWrapX() && projection.canWrapX();\n var worldWidth = multiWorld ? getWidth(projectionExtent) : null;\n var endWorld = multiWorld\n ? Math.ceil((extent[2] - projectionExtent[2]) / worldWidth) + 1\n : 1;\n var world = multiWorld\n ? Math.floor((extent[0] - projectionExtent[0]) / worldWidth)\n : 0;\n do {\n var transform = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, world * worldWidth);\n executorGroup.execute(context, 1, transform, rotation, snapToPixel, undefined, opt_declutterTree);\n } while (++world < endWorld);\n };\n /**\n * Render declutter items for this layer\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CanvasVectorLayerRenderer.prototype.renderDeclutter = function (frameState) {\n if (this.declutterExecutorGroup) {\n this.renderWorlds(this.declutterExecutorGroup, frameState, frameState.declutterTree);\n }\n };\n /**\n * Render the layer.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target that may be used to render content to.\n * @return {HTMLElement} The rendered element.\n */\n CanvasVectorLayerRenderer.prototype.renderFrame = function (frameState, target) {\n var pixelRatio = frameState.pixelRatio;\n var layerState = frameState.layerStatesArray[frameState.layerIndex];\n // set forward and inverse pixel transforms\n makeScale(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);\n makeInverse(this.inversePixelTransform, this.pixelTransform);\n var canvasTransform = transformToString(this.pixelTransform);\n this.useContainer(target, canvasTransform, layerState.opacity);\n var context = this.context;\n var canvas = context.canvas;\n var replayGroup = this.replayGroup_;\n var declutterExecutorGroup = this.declutterExecutorGroup;\n if ((!replayGroup || replayGroup.isEmpty()) &&\n (!declutterExecutorGroup || declutterExecutorGroup.isEmpty())) {\n return null;\n }\n // resize and clear\n var width = Math.round(frameState.size[0] * pixelRatio);\n var height = Math.round(frameState.size[1] * pixelRatio);\n if (canvas.width != width || canvas.height != height) {\n canvas.width = width;\n canvas.height = height;\n if (canvas.style.transform !== canvasTransform) {\n canvas.style.transform = canvasTransform;\n }\n }\n else if (!this.containerReused) {\n context.clearRect(0, 0, width, height);\n }\n this.preRender(context, frameState);\n var viewState = frameState.viewState;\n var projection = viewState.projection;\n // clipped rendering if layer extent is set\n var clipped = false;\n var render = true;\n if (layerState.extent && this.clipping) {\n var layerExtent = fromUserExtent(layerState.extent, projection);\n render = intersectsExtent(layerExtent, frameState.extent);\n clipped = render && !containsExtent(layerExtent, frameState.extent);\n if (clipped) {\n this.clipUnrotated(context, frameState, layerExtent);\n }\n }\n if (render) {\n this.renderWorlds(replayGroup, frameState);\n }\n if (clipped) {\n context.restore();\n }\n this.postRender(context, frameState);\n var opacity = cssOpacity(layerState.opacity);\n var container = this.container;\n if (opacity !== container.style.opacity) {\n container.style.opacity = opacity;\n }\n if (this.renderedRotation_ !== viewState.rotation) {\n this.renderedRotation_ = viewState.rotation;\n this.hitDetectionImageData_ = null;\n }\n return this.container;\n };\n /**\n * Asynchronous layer level hit detection.\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with an array of features.\n */\n CanvasVectorLayerRenderer.prototype.getFeatures = function (pixel) {\n return new Promise(\n /**\n * @param {function(Array): void} resolve Resolver function.\n * @this {CanvasVectorLayerRenderer}\n */\n function (resolve) {\n if (!this.hitDetectionImageData_ && !this.animatingOrInteracting_) {\n var size = [this.context.canvas.width, this.context.canvas.height];\n apply(this.pixelTransform, size);\n var center = this.renderedCenter_;\n var resolution = this.renderedResolution_;\n var rotation = this.renderedRotation_;\n var projection = this.renderedProjection_;\n var extent = this.wrappedRenderedExtent_;\n var layer = this.getLayer();\n var transforms = [];\n var width = size[0] * HIT_DETECT_RESOLUTION;\n var height = size[1] * HIT_DETECT_RESOLUTION;\n transforms.push(this.getRenderTransform(center, resolution, rotation, HIT_DETECT_RESOLUTION, width, height, 0).slice());\n var source = layer.getSource();\n var projectionExtent = projection.getExtent();\n if (source.getWrapX() &&\n projection.canWrapX() &&\n !containsExtent(projectionExtent, extent)) {\n var startX = extent[0];\n var worldWidth = getWidth(projectionExtent);\n var world = 0;\n var offsetX = void 0;\n while (startX < projectionExtent[0]) {\n --world;\n offsetX = worldWidth * world;\n transforms.push(this.getRenderTransform(center, resolution, rotation, HIT_DETECT_RESOLUTION, width, height, offsetX).slice());\n startX += worldWidth;\n }\n world = 0;\n startX = extent[2];\n while (startX > projectionExtent[2]) {\n ++world;\n offsetX = worldWidth * world;\n transforms.push(this.getRenderTransform(center, resolution, rotation, HIT_DETECT_RESOLUTION, width, height, offsetX).slice());\n startX -= worldWidth;\n }\n }\n this.hitDetectionImageData_ = createHitDetectionImageData(size, transforms, this.renderedFeatures_, layer.getStyleFunction(), extent, resolution, rotation);\n }\n resolve(hitDetect(pixel, this.renderedFeatures_, this.hitDetectionImageData_));\n }.bind(this));\n };\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {import(\"../vector.js\").FeatureCallback} callback Feature callback.\n * @param {Array>} matches The hit detected matches with tolerance.\n * @return {T|undefined} Callback result.\n * @template T\n */\n CanvasVectorLayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, matches) {\n var _this = this;\n if (!this.replayGroup_) {\n return undefined;\n }\n var resolution = frameState.viewState.resolution;\n var rotation = frameState.viewState.rotation;\n var layer = this.getLayer();\n /** @type {!Object|true>} */\n var features = {};\n /**\n * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {number} distanceSq The squared distance to the click position\n * @return {T|undefined} Callback result.\n */\n var featureCallback = function (feature, geometry, distanceSq) {\n var key = getUid(feature);\n var match = features[key];\n if (!match) {\n if (distanceSq === 0) {\n features[key] = true;\n return callback(feature, layer, geometry);\n }\n matches.push((features[key] = {\n feature: feature,\n layer: layer,\n geometry: geometry,\n distanceSq: distanceSq,\n callback: callback,\n }));\n }\n else if (match !== true && distanceSq < match.distanceSq) {\n if (distanceSq === 0) {\n features[key] = true;\n matches.splice(matches.lastIndexOf(match), 1);\n return callback(feature, layer, geometry);\n }\n match.geometry = geometry;\n match.distanceSq = distanceSq;\n }\n return undefined;\n };\n var result;\n var executorGroups = [this.replayGroup_];\n if (this.declutterExecutorGroup) {\n executorGroups.push(this.declutterExecutorGroup);\n }\n executorGroups.some(function (executorGroup) {\n return (result = executorGroup.forEachFeatureAtCoordinate(coordinate, resolution, rotation, hitTolerance, featureCallback, executorGroup === _this.declutterExecutorGroup\n ? frameState.declutterTree.all().map(function (item) { return item.value; })\n : null));\n });\n return result;\n };\n /**\n * Perform action necessary to get the layer rendered after new fonts have loaded\n */\n CanvasVectorLayerRenderer.prototype.handleFontsChanged = function () {\n var layer = this.getLayer();\n if (layer.getVisible() && this.replayGroup_) {\n layer.changed();\n }\n };\n /**\n * Handle changes in image style state.\n * @param {import(\"../../events/Event.js\").default} event Image style change event.\n * @private\n */\n CanvasVectorLayerRenderer.prototype.handleStyleImageChange_ = function (event) {\n this.renderIfReadyAndVisible();\n };\n /**\n * Determine whether render should be called.\n * @param {import(\"../../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {boolean} Layer is ready to be rendered.\n */\n CanvasVectorLayerRenderer.prototype.prepareFrame = function (frameState) {\n var vectorLayer = this.getLayer();\n var vectorSource = vectorLayer.getSource();\n if (!vectorSource) {\n return false;\n }\n var animating = frameState.viewHints[ViewHint.ANIMATING];\n var interacting = frameState.viewHints[ViewHint.INTERACTING];\n var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n if ((!this.dirty_ && !updateWhileAnimating && animating) ||\n (!updateWhileInteracting && interacting)) {\n this.animatingOrInteracting_ = true;\n return true;\n }\n this.animatingOrInteracting_ = false;\n var frameStateExtent = frameState.extent;\n var viewState = frameState.viewState;\n var projection = viewState.projection;\n var resolution = viewState.resolution;\n var pixelRatio = frameState.pixelRatio;\n var vectorLayerRevision = vectorLayer.getRevision();\n var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n var vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n if (vectorLayerRenderOrder === undefined) {\n vectorLayerRenderOrder = defaultRenderOrder;\n }\n var center = viewState.center.slice();\n var extent = buffer(frameStateExtent, vectorLayerRenderBuffer * resolution);\n var renderedExtent = extent.slice();\n var loadExtents = [extent.slice()];\n var projectionExtent = projection.getExtent();\n if (vectorSource.getWrapX() &&\n projection.canWrapX() &&\n !containsExtent(projectionExtent, frameState.extent)) {\n // For the replay group, we need an extent that intersects the real world\n // (-180° to +180°). To support geometries in a coordinate range from -540°\n // to +540°, we add at least 1 world width on each side of the projection\n // extent. If the viewport is wider than the world, we need to add half of\n // the viewport width to make sure we cover the whole viewport.\n var worldWidth = getWidth(projectionExtent);\n var gutter = Math.max(getWidth(extent) / 2, worldWidth);\n extent[0] = projectionExtent[0] - gutter;\n extent[2] = projectionExtent[2] + gutter;\n wrapCoordinateX(center, projection);\n var loadExtent = wrapExtentX(loadExtents[0], projection);\n // If the extent crosses the date line, we load data for both edges of the worlds\n if (loadExtent[0] < projectionExtent[0] &&\n loadExtent[2] < projectionExtent[2]) {\n loadExtents.push([\n loadExtent[0] + worldWidth,\n loadExtent[1],\n loadExtent[2] + worldWidth,\n loadExtent[3],\n ]);\n }\n else if (loadExtent[0] > projectionExtent[0] &&\n loadExtent[2] > projectionExtent[2]) {\n loadExtents.push([\n loadExtent[0] - worldWidth,\n loadExtent[1],\n loadExtent[2] - worldWidth,\n loadExtent[3],\n ]);\n }\n }\n if (!this.dirty_ &&\n this.renderedResolution_ == resolution &&\n this.renderedRevision_ == vectorLayerRevision &&\n this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n containsExtent(this.wrappedRenderedExtent_, extent)) {\n if (!equals(this.renderedExtent_, renderedExtent)) {\n this.hitDetectionImageData_ = null;\n this.renderedExtent_ = renderedExtent;\n }\n this.renderedCenter_ = center;\n this.replayGroupChanged = false;\n return true;\n }\n this.replayGroup_ = null;\n this.dirty_ = false;\n var replayGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n var declutterBuilderGroup;\n if (this.getLayer().getDeclutter()) {\n declutterBuilderGroup = new CanvasBuilderGroup(getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio);\n }\n var userProjection = getUserProjection();\n var userTransform;\n if (userProjection) {\n for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n var extent_1 = loadExtents[i];\n var userExtent_1 = toUserExtent(extent_1, projection);\n vectorSource.loadFeatures(userExtent_1, toUserResolution(resolution, projection), userProjection);\n }\n userTransform = getTransformFromProjections(userProjection, projection);\n }\n else {\n for (var i = 0, ii = loadExtents.length; i < ii; ++i) {\n vectorSource.loadFeatures(loadExtents[i], resolution, projection);\n }\n }\n var squaredTolerance = getSquaredRenderTolerance(resolution, pixelRatio);\n var render = \n /**\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @this {CanvasVectorLayerRenderer}\n */\n function (feature) {\n var styles;\n var styleFunction = feature.getStyleFunction() || vectorLayer.getStyleFunction();\n if (styleFunction) {\n styles = styleFunction(feature, resolution);\n }\n if (styles) {\n var dirty = this.renderFeature(feature, squaredTolerance, styles, replayGroup, userTransform, declutterBuilderGroup);\n this.dirty_ = this.dirty_ || dirty;\n }\n }.bind(this);\n var userExtent = toUserExtent(extent, projection);\n /** @type {Array} */\n var features = vectorSource.getFeaturesInExtent(userExtent);\n if (vectorLayerRenderOrder) {\n features.sort(vectorLayerRenderOrder);\n }\n for (var i = 0, ii = features.length; i < ii; ++i) {\n render(features[i]);\n }\n this.renderedFeatures_ = features;\n var replayGroupInstructions = replayGroup.finish();\n var executorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), replayGroupInstructions, vectorLayer.getRenderBuffer());\n if (declutterBuilderGroup) {\n this.declutterExecutorGroup = new ExecutorGroup(extent, resolution, pixelRatio, vectorSource.getOverlaps(), declutterBuilderGroup.finish(), vectorLayer.getRenderBuffer());\n }\n this.renderedResolution_ = resolution;\n this.renderedRevision_ = vectorLayerRevision;\n this.renderedRenderOrder_ = vectorLayerRenderOrder;\n this.renderedExtent_ = renderedExtent;\n this.wrappedRenderedExtent_ = extent;\n this.renderedCenter_ = center;\n this.renderedProjection_ = projection;\n this.replayGroup_ = executorGroup;\n this.hitDetectionImageData_ = null;\n this.replayGroupChanged = true;\n return true;\n };\n /**\n * @param {import(\"../../Feature.js\").default} feature Feature.\n * @param {number} squaredTolerance Squared render tolerance.\n * @param {import(\"../../style/Style.js\").default|Array} styles The style or array of styles.\n * @param {import(\"../../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../../proj.js\").TransformFunction} [opt_transform] Transform from user to view projection.\n * @param {import(\"../../render/canvas/BuilderGroup.js\").default} [opt_declutterBuilderGroup] Builder for decluttering.\n * @return {boolean} `true` if an image is loading.\n */\n CanvasVectorLayerRenderer.prototype.renderFeature = function (feature, squaredTolerance, styles, builderGroup, opt_transform, opt_declutterBuilderGroup) {\n if (!styles) {\n return false;\n }\n var loading = false;\n if (Array.isArray(styles)) {\n for (var i = 0, ii = styles.length; i < ii; ++i) {\n loading =\n renderFeature(builderGroup, feature, styles[i], squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup) || loading;\n }\n }\n else {\n loading = renderFeature(builderGroup, feature, styles, squaredTolerance, this.boundHandleStyleImageChange_, opt_transform, opt_declutterBuilderGroup);\n }\n return loading;\n };\n return CanvasVectorLayerRenderer;\n}(CanvasLayerRenderer));\nexport default CanvasVectorLayerRenderer;\n//# sourceMappingURL=VectorLayer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/layer/Vector\n */\nimport BaseVectorLayer from './BaseVector.js';\nimport CanvasVectorLayerRenderer from '../renderer/canvas/VectorLayer.js';\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Vector.js\").default} VectorSourceType\n * @extends {BaseVectorLayer}\n * @api\n */\nvar VectorLayer = /** @class */ (function (_super) {\n __extends(VectorLayer, _super);\n /**\n * @param {import(\"./BaseVector.js\").Options} [opt_options] Options.\n */\n function VectorLayer(opt_options) {\n return _super.call(this, opt_options) || this;\n }\n /**\n * Create a renderer for this layer.\n * @return {import(\"../renderer/Layer.js\").default} A layer renderer.\n */\n VectorLayer.prototype.createRenderer = function () {\n return new CanvasVectorLayerRenderer(this);\n };\n return VectorLayer;\n}(BaseVectorLayer));\nexport default VectorLayer;\n//# sourceMappingURL=Vector.js.map","/**\n * @module ol/ViewHint\n */\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n//# sourceMappingURL=ViewHint.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/Feature\n */\nimport BaseObject from './Object.js';\nimport EventType from './events/EventType.js';\nimport { assert } from './asserts.js';\nimport { listen, unlistenByKey } from './events.js';\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} FeatureOnSignature\n */\n/***\n * @template Geometry\n * @typedef {Object & { geometry?: Geometry }} ObjectWithGeometry\n */\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature. For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature';\n * import Polygon from 'ol/geom/Polygon';\n * import Point from 'ol/geom/Point';\n *\n * var feature = new Feature({\n * geometry: new Polygon(polyCoords),\n * labelPoint: new Point(labelCoords),\n * name: 'My Polygon'\n * });\n *\n * // get the polygon geometry\n * var poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * var point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} Geometry\n */\nvar Feature = /** @class */ (function (_super) {\n __extends(Feature, _super);\n /**\n * @param {Geometry|ObjectWithGeometry} [opt_geometryOrProperties]\n * You may pass a Geometry object directly, or an object literal containing\n * properties. If you pass an object literal, you may include a Geometry\n * associated with a `geometry` key.\n */\n function Feature(opt_geometryOrProperties) {\n var _this = _super.call(this) || this;\n /***\n * @type {FeatureOnSignature}\n */\n _this.on;\n /***\n * @type {FeatureOnSignature}\n */\n _this.once;\n /***\n * @type {FeatureOnSignature}\n */\n _this.un;\n /**\n * @private\n * @type {number|string|undefined}\n */\n _this.id_ = undefined;\n /**\n * @type {string}\n * @private\n */\n _this.geometryName_ = 'geometry';\n /**\n * User provided style.\n * @private\n * @type {import(\"./style/Style.js\").StyleLike}\n */\n _this.style_ = null;\n /**\n * @private\n * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n */\n _this.styleFunction_ = undefined;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.geometryChangeKey_ = null;\n _this.addChangeListener(_this.geometryName_, _this.handleGeometryChanged_);\n if (opt_geometryOrProperties) {\n if (typeof (\n /** @type {?} */ (opt_geometryOrProperties).getSimplifiedGeometry) === 'function') {\n var geometry = /** @type {Geometry} */ (opt_geometryOrProperties);\n _this.setGeometry(geometry);\n }\n else {\n /** @type {Object} */\n var properties = opt_geometryOrProperties;\n _this.setProperties(properties);\n }\n }\n return _this;\n }\n /**\n * Clone this feature. If the original feature has a geometry it\n * is also cloned. The feature id is not set in the clone.\n * @return {Feature} The clone.\n * @api\n */\n Feature.prototype.clone = function () {\n var clone = /** @type {Feature} */ (new Feature(this.hasProperties() ? this.getProperties() : null));\n clone.setGeometryName(this.getGeometryName());\n var geometry = this.getGeometry();\n if (geometry) {\n clone.setGeometry(/** @type {Geometry} */ (geometry.clone()));\n }\n var style = this.getStyle();\n if (style) {\n clone.setStyle(style);\n }\n return clone;\n };\n /**\n * Get the feature's default geometry. A feature may have any number of named\n * geometries. The \"default\" geometry (the one that is rendered by default) is\n * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n * @return {Geometry|undefined} The default geometry for the feature.\n * @api\n * @observable\n */\n Feature.prototype.getGeometry = function () {\n return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n };\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is either set when reading data from a remote source or set explicitly by\n * calling {@link module:ol/Feature~Feature#setId}.\n * @return {number|string|undefined} Id.\n * @api\n */\n Feature.prototype.getId = function () {\n return this.id_;\n };\n /**\n * Get the name of the feature's default geometry. By default, the default\n * geometry is named `geometry`.\n * @return {string} Get the property name associated with the default geometry\n * for this feature.\n * @api\n */\n Feature.prototype.getGeometryName = function () {\n return this.geometryName_;\n };\n /**\n * Get the feature's style. Will return what was provided to the\n * {@link module:ol/Feature~Feature#setStyle} method.\n * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n * @api\n */\n Feature.prototype.getStyle = function () {\n return this.style_;\n };\n /**\n * Get the feature's style function.\n * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n * representing the current style of this feature.\n * @api\n */\n Feature.prototype.getStyleFunction = function () {\n return this.styleFunction_;\n };\n /**\n * @private\n */\n Feature.prototype.handleGeometryChange_ = function () {\n this.changed();\n };\n /**\n * @private\n */\n Feature.prototype.handleGeometryChanged_ = function () {\n if (this.geometryChangeKey_) {\n unlistenByKey(this.geometryChangeKey_);\n this.geometryChangeKey_ = null;\n }\n var geometry = this.getGeometry();\n if (geometry) {\n this.geometryChangeKey_ = listen(geometry, EventType.CHANGE, this.handleGeometryChange_, this);\n }\n this.changed();\n };\n /**\n * Set the default geometry for the feature. This will update the property\n * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n * @param {Geometry|undefined} geometry The new geometry.\n * @api\n * @observable\n */\n Feature.prototype.setGeometry = function (geometry) {\n this.set(this.geometryName_, geometry);\n };\n /**\n * Set the style for the feature to override the layer style. This can be a\n * single style object, an array of styles, or a function that takes a\n * resolution and returns an array of styles. To unset the feature style, call\n * `setStyle()` without arguments or a falsey value.\n * @param {import(\"./style/Style.js\").StyleLike} [opt_style] Style for this feature.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n Feature.prototype.setStyle = function (opt_style) {\n this.style_ = opt_style;\n this.styleFunction_ = !opt_style\n ? undefined\n : createStyleFunction(opt_style);\n this.changed();\n };\n /**\n * Set the feature id. The feature id is considered stable and may be used when\n * requesting features or comparing identifiers returned from a remote source.\n * The feature id can be used with the\n * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n * @param {number|string|undefined} id The feature id.\n * @api\n * @fires module:ol/events/Event~BaseEvent#event:change\n */\n Feature.prototype.setId = function (id) {\n this.id_ = id;\n this.changed();\n };\n /**\n * Set the property name to be used when getting the feature's default geometry.\n * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n * this name will be returned.\n * @param {string} name The property name of the default geometry.\n * @api\n */\n Feature.prototype.setGeometryName = function (name) {\n this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.geometryName_ = name;\n this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n this.handleGeometryChanged_();\n };\n return Feature;\n}(BaseObject));\n/**\n * Convert the provided object into a feature style function. Functions passed\n * through unchanged. Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array|!import(\"./style/Style.js\").default} obj\n * A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n if (typeof obj === 'function') {\n return obj;\n }\n else {\n /**\n * @type {Array}\n */\n var styles_1;\n if (Array.isArray(obj)) {\n styles_1 = obj;\n }\n else {\n assert(typeof ( /** @type {?} */(obj).getZIndex) === 'function', 41); // Expected an `import(\"./style/Style.js\").Style` or an array of `import(\"./style/Style.js\").Style`\n var style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n styles_1 = [style];\n }\n return function () {\n return styles_1;\n };\n }\n}\nexport default Feature;\n//# sourceMappingURL=Feature.js.map","/**\n * @module ol/geom/flat/reverse\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 (var i = 0; i < stride; ++i) {\n var 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//# sourceMappingURL=reverse.js.map","/**\n * @module ol/geom/flat/orient\n */\nimport { coordinates as reverseCoordinates } from './reverse.js';\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n var edge = 0;\n var x1 = flatCoordinates[end - stride];\n var y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var 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 * 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 `opt_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} [opt_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(flatCoordinates, offset, ends, stride, opt_right) {\n var right = opt_right !== undefined ? opt_right : false;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n }\n else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\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 `opt_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} [opt_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(flatCoordinates, offset, endss, stride, opt_right) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\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 `opt_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} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(flatCoordinates, offset, ends, stride, opt_right) {\n var right = opt_right !== undefined ? opt_right : false;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);\n var reverse = 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 * 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 `opt_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} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(flatCoordinates, offset, endss, stride, opt_right) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(flatCoordinates, offset, endss[i], stride, opt_right);\n }\n return offset;\n}\n//# sourceMappingURL=orient.js.map","/**\n * @module ol/geom/GeometryLayout\n */\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM',\n};\n//# sourceMappingURL=GeometryLayout.js.map","/**\n * @module ol/structs/RBush\n */\nimport RBush_ from 'rbush';\nimport { createOrUpdate, equals } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { isEmpty } from '../obj.js';\n/**\n * @typedef {Object} Entry\n * @property {number} minX MinX.\n * @property {number} minY MinY.\n * @property {number} maxX MaxX.\n * @property {number} maxY MaxY.\n * @property {Object} [value] Value.\n */\n/**\n * @classdesc\n * Wrapper around the RBush by Vladimir Agafonkin.\n * See https://github.com/mourner/rbush.\n *\n * @template T\n */\nvar RBush = /** @class */ (function () {\n /**\n * @param {number} [opt_maxEntries] Max entries.\n */\n function RBush(opt_maxEntries) {\n /**\n * @private\n */\n this.rbush_ = new RBush_(opt_maxEntries);\n /**\n * A mapping between the objects added to this rbush wrapper\n * and the objects that are actually added to the internal rbush.\n * @private\n * @type {Object}\n */\n this.items_ = {};\n }\n /**\n * Insert a value into the RBush.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {T} value Value.\n */\n RBush.prototype.insert = function (extent, value) {\n /** @type {Entry} */\n var item = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n value: value,\n };\n this.rbush_.insert(item);\n this.items_[getUid(value)] = item;\n };\n /**\n * Bulk-insert values into the RBush.\n * @param {Array} extents Extents.\n * @param {Array} values Values.\n */\n RBush.prototype.load = function (extents, values) {\n var items = new Array(values.length);\n for (var i = 0, l = values.length; i < l; i++) {\n var extent = extents[i];\n var value = values[i];\n /** @type {Entry} */\n var item = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n value: value,\n };\n items[i] = item;\n this.items_[getUid(value)] = item;\n }\n this.rbush_.load(items);\n };\n /**\n * Remove a value from the RBush.\n * @param {T} value Value.\n * @return {boolean} Removed.\n */\n RBush.prototype.remove = function (value) {\n var uid = getUid(value);\n // get the object in which the value was wrapped when adding to the\n // internal rbush. then use that object to do the removal.\n var item = this.items_[uid];\n delete this.items_[uid];\n return this.rbush_.remove(item) !== null;\n };\n /**\n * Update the extent of a value in the RBush.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {T} value Value.\n */\n RBush.prototype.update = function (extent, value) {\n var item = this.items_[getUid(value)];\n var bbox = [item.minX, item.minY, item.maxX, item.maxY];\n if (!equals(bbox, extent)) {\n this.remove(value);\n this.insert(extent, value);\n }\n };\n /**\n * Return all values in the RBush.\n * @return {Array} All.\n */\n RBush.prototype.getAll = function () {\n var items = this.rbush_.all();\n return items.map(function (item) {\n return item.value;\n });\n };\n /**\n * Return all values in the given extent.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {Array} All in extent.\n */\n RBush.prototype.getInExtent = function (extent) {\n /** @type {Entry} */\n var bbox = {\n minX: extent[0],\n minY: extent[1],\n maxX: extent[2],\n maxY: extent[3],\n };\n var items = this.rbush_.search(bbox);\n return items.map(function (item) {\n return item.value;\n });\n };\n /**\n * Calls a callback function with each value in the tree.\n * If the callback returns a truthy value, this value is returned without\n * checking the rest of the tree.\n * @param {function(T): *} callback Callback.\n * @return {*} Callback return value.\n */\n RBush.prototype.forEach = function (callback) {\n return this.forEach_(this.getAll(), callback);\n };\n /**\n * Calls a callback function with each value in the provided extent.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(T): *} callback Callback.\n * @return {*} Callback return value.\n */\n RBush.prototype.forEachInExtent = function (extent, callback) {\n return this.forEach_(this.getInExtent(extent), callback);\n };\n /**\n * @param {Array} values Values.\n * @param {function(T): *} callback Callback.\n * @private\n * @return {*} Callback return value.\n */\n RBush.prototype.forEach_ = function (values, callback) {\n var result;\n for (var i = 0, l = values.length; i < l; i++) {\n result = callback(values[i]);\n if (result) {\n return result;\n }\n }\n return result;\n };\n /**\n * @return {boolean} Is empty.\n */\n RBush.prototype.isEmpty = function () {\n return isEmpty(this.items_);\n };\n /**\n * Remove all values from the RBush.\n */\n RBush.prototype.clear = function () {\n this.rbush_.clear();\n this.items_ = {};\n };\n /**\n * @param {import(\"../extent.js\").Extent} [opt_extent] Extent.\n * @return {import(\"../extent.js\").Extent} Extent.\n */\n RBush.prototype.getExtent = function (opt_extent) {\n var data = this.rbush_.toJSON();\n return createOrUpdate(data.minX, data.minY, data.maxX, data.maxY, opt_extent);\n };\n /**\n * @param {RBush} rbush R-Tree.\n */\n RBush.prototype.concat = function (rbush) {\n this.rbush_.load(rbush.rbush_.all());\n for (var i in rbush.items_) {\n this.items_[i] = rbush.items_[i];\n }\n };\n return RBush;\n}());\nexport default RBush;\n//# sourceMappingURL=RBush.js.map","/**\n * @module ol/source/VectorEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a feature is added to the source.\n * @event module:ol/source/Vector.VectorSourceEvent#addfeature\n * @api\n */\n ADDFEATURE: 'addfeature',\n /**\n * Triggered when a feature is updated.\n * @event module:ol/source/Vector.VectorSourceEvent#changefeature\n * @api\n */\n CHANGEFEATURE: 'changefeature',\n /**\n * Triggered when the clear method is called on the source.\n * @event module:ol/source/Vector.VectorSourceEvent#clear\n * @api\n */\n CLEAR: 'clear',\n /**\n * Triggered when a feature is removed from the source.\n * See {@link module:ol/source/Vector~VectorSource#clear source.clear()} for exceptions.\n * @event module:ol/source/Vector.VectorSourceEvent#removefeature\n * @api\n */\n REMOVEFEATURE: 'removefeature',\n /**\n * Triggered when features starts loading.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloadstart\n * @api\n */\n FEATURESLOADSTART: 'featuresloadstart',\n /**\n * Triggered when features finishes loading.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloadend\n * @api\n */\n FEATURESLOADEND: 'featuresloadend',\n /**\n * Triggered if feature loading results in an error.\n * @event module:ol/source/Vector.VectorSourceEvent#featuresloaderror\n * @api\n */\n FEATURESLOADERROR: 'featuresloaderror',\n};\n/**\n * @typedef {'addfeature'|'changefeature'|'clear'|'removefeature'|'featuresloadstart'|'featuresloadend'|'featuresloaderror'} VectorSourceEventTypes\n */\n//# sourceMappingURL=VectorEventType.js.map","/**\n * @module ol/loadingstrategy\n */\nimport { fromUserExtent, fromUserResolution, toUserExtent } from './proj.js';\n/**\n * Strategy function for loading all features with a single request.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n * @api\n */\nexport function all(extent, resolution) {\n return [[-Infinity, -Infinity, Infinity, Infinity]];\n}\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array} Extents.\n * @api\n */\nexport function bbox(extent, resolution) {\n return [extent];\n}\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {function(import(\"./extent.js\").Extent, number, import(\"./proj.js\").Projection): Array} Loading strategy.\n * @api\n */\nexport function tile(tileGrid) {\n return (\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj.js\").Projection} projection Projection.\n * @return {Array} Extents.\n */\n function (extent, resolution, projection) {\n var z = tileGrid.getZForResolution(fromUserResolution(resolution, projection));\n var tileRange = tileGrid.getTileRangeForExtentAndZ(fromUserExtent(extent, projection), z);\n /** @type {Array} */\n var extents = [];\n /** @type {import(\"./tilecoord.js\").TileCoord} */\n var tileCoord = [z, 0, 0];\n for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX; ++tileCoord[1]) {\n for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY; ++tileCoord[2]) {\n extents.push(toUserExtent(tileGrid.getTileCoordExtent(tileCoord), projection));\n }\n }\n return extents;\n });\n}\n//# sourceMappingURL=loadingstrategy.js.map","/**\n * @module ol/featureloader\n */\nimport FormatType from './format/FormatType.js';\nimport { VOID } from './functions.js';\n/**\n *\n * @type {boolean}\n * @private\n */\nvar withCredentials = false;\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * load features.\n *\n * This function takes up to 5 arguments. These are an {@link module:ol/extent~Extent} representing\n * the area to be loaded, a `{number}` representing the resolution (map units per pixel), an\n * {@link module:ol/proj/Projection} for the projection, an optional success callback that should get\n * the loaded features passed as an argument and an optional failure callback with no arguments. If\n * the callbacks are not used, the corresponding vector source will not fire `'featuresloadend'` and\n * `'featuresloaderror'` events. `this` within the function is bound to the\n * {@link module:ol/source/Vector} it's called from.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n * @typedef {function(this:(import(\"./source/Vector\").default|import(\"./VectorTile.js\").default),\n * import(\"./extent.js\").Extent,\n * number,\n * import(\"./proj/Projection.js\").default,\n * function(Array): void=,\n * function(): void=): void} FeatureLoader\n * @api\n */\n/**\n * {@link module:ol/source/Vector} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection} for the projection as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n/**\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array, import(\"./proj/Projection.js\").default): void} success Success\n * Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n * Function called when loading failed.\n */\nexport function loadFeaturesXhr(url, format, extent, resolution, projection, success, failure) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', typeof url === 'function' ? url(extent, resolution, projection) : url, true);\n if (format.getType() == FormatType.ARRAY_BUFFER) {\n xhr.responseType = 'arraybuffer';\n }\n xhr.withCredentials = withCredentials;\n /**\n * @param {Event} event Event.\n * @private\n */\n xhr.onload = function (event) {\n // status will be 0 for file:// urls\n if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n var type = format.getType();\n /** @type {Document|Node|Object|string|undefined} */\n var source = void 0;\n if (type == FormatType.JSON || type == FormatType.TEXT) {\n source = xhr.responseText;\n }\n else if (type == FormatType.XML) {\n source = xhr.responseXML;\n if (!source) {\n source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');\n }\n }\n else if (type == FormatType.ARRAY_BUFFER) {\n source = /** @type {ArrayBuffer} */ (xhr.response);\n }\n if (source) {\n success(\n /** @type {Array} */\n (format.readFeatures(source, {\n extent: extent,\n featureProjection: projection,\n })), format.readProjection(source));\n }\n else {\n failure();\n }\n }\n else {\n failure();\n }\n };\n /**\n * @private\n */\n xhr.onerror = failure;\n xhr.send();\n}\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default} format Feature format.\n * @return {FeatureLoader} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array): void} [success] Success\n * Function called when loading succeeded.\n * @param {function(): void} [failure] Failure\n * Function called when loading failed.\n * @this {import(\"./source/Vector\").default}\n */\n return function (extent, resolution, projection, success, failure) {\n var source = /** @type {import(\"./source/Vector\").default} */ (this);\n loadFeaturesXhr(url, format, extent, resolution, projection, \n /**\n * @param {Array} features The loaded features.\n * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n * projection.\n */\n function (features, dataProjection) {\n source.addFeatures(features);\n if (success !== undefined) {\n success(features);\n }\n }, \n /* FIXME handle error */ failure ? failure : VOID);\n };\n}\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n withCredentials = xhrWithCredentials;\n}\n//# sourceMappingURL=featureloader.js.map","/**\n * @module ol/source/Vector\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RBush from '../structs/RBush.js';\nimport Source from './Source.js';\nimport SourceState from './State.js';\nimport VectorEventType from './VectorEventType.js';\nimport { TRUE, VOID } from '../functions.js';\nimport { all as allStrategy } from '../loadingstrategy.js';\nimport { assert } from '../asserts.js';\nimport { containsExtent, equals } from '../extent.js';\nimport { extend } from '../array.js';\nimport { getUid } from '../util.js';\nimport { getValues, isEmpty } from '../obj.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { xhr } from '../featureloader.js';\n/**\n * A function that takes an {@link module:ol/extent~Extent} and a resolution as arguments, and\n * returns an array of {@link module:ol/extent~Extent} with the extents to load. Usually this\n * is one of the standard {@link module:ol/loadingstrategy} strategies.\n *\n * @typedef {function(import(\"../extent.js\").Extent, number, import(\"../proj/Projection.js\").default): Array} LoadingStrategy\n * @api\n */\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Vector} instances are instances of this\n * type.\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSourceEvent = /** @class */ (function (_super) {\n __extends(VectorSourceEvent, _super);\n /**\n * @param {string} type Type.\n * @param {import(\"../Feature.js\").default} [opt_feature] Feature.\n * @param {Array>} [opt_features] Features.\n */\n function VectorSourceEvent(type, opt_feature, opt_features) {\n var _this = _super.call(this, type) || this;\n /**\n * The added or removed feature for the `ADDFEATURE` and `REMOVEFEATURE` events, `undefined` otherwise.\n * @type {import(\"../Feature.js\").default|undefined}\n * @api\n */\n _this.feature = opt_feature;\n /**\n * The loaded features for the `FEATURESLOADED` event, `undefined` otherwise.\n * @type {Array>|undefined}\n * @api\n */\n _this.features = opt_features;\n return _this;\n }\n return VectorSourceEvent;\n}(Event));\nexport { VectorSourceEvent };\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} VectorSourceOnSignature\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {Array|Collection} [features]\n * Features. If provided as {@link module:ol/Collection}, the features in the source\n * and the collection will stay in sync.\n * @property {import(\"../format/Feature.js\").default} [format] The feature format used by the XHR\n * feature loader when `url` is set. Required if `url` is set, otherwise ignored.\n * @property {import(\"../featureloader.js\").FeatureLoader} [loader]\n * The loader function used to load features, from a remote source for example.\n * If this is not set and `url` is set, the source will create and use an XHR\n * feature loader. The `'featuresloadend'` and `'featuresloaderror'` events\n * will only fire if the `success` and `failure` callbacks are used.\n *\n * Example:\n *\n * ```js\n * import {Vector} from 'ol/source';\n * import {GeoJSON} from 'ol/format';\n * import {bbox} from 'ol/loadingstrategy';\n *\n * var vectorSource = new Vector({\n * format: new GeoJSON(),\n * loader: function(extent, resolution, projection, success, failure) {\n * var proj = projection.getCode();\n * var url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +\n * 'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +\n * 'outputFormat=application/json&srsname=' + proj + '&' +\n * 'bbox=' + extent.join(',') + ',' + proj;\n * var xhr = new XMLHttpRequest();\n * xhr.open('GET', url);\n * var onError = function() {\n * vectorSource.removeLoadedExtent(extent);\n * failure();\n * }\n * xhr.onerror = onError;\n * xhr.onload = function() {\n * if (xhr.status == 200) {\n * var features = vectorSource.getFormat().readFeatures(xhr.responseText);\n * vectorSource.addFeatures(features);\n * success(features);\n * } else {\n * onError();\n * }\n * }\n * xhr.send();\n * },\n * strategy: bbox\n * });\n * ```\n * @property {boolean} [overlaps=true] This source may have overlapping geometries.\n * Setting this to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {LoadingStrategy} [strategy] The loading strategy to use.\n * By default an {@link module:ol/loadingstrategy.all}\n * strategy is used, a one-off strategy which loads all features at once.\n * @property {string|import(\"../featureloader.js\").FeatureUrlFunction} [url]\n * Setting this option instructs the source to load features using an XHR loader\n * (see {@link module:ol/featureloader.xhr}). Use a `string` and an\n * {@link module:ol/loadingstrategy.all} for a one-off download of all features from\n * the given URL. Use a {@link module:ol/featureloader~FeatureUrlFunction} to generate the url with\n * other loading strategies.\n * Requires `format` to be set as well.\n * When default XHR feature loader is provided, the features will\n * be transformed from the data projection to the view projection\n * during parsing. If your remote data source does not advertise its projection\n * properly, this transformation will be incorrect. For some formats, the\n * default projection (usually EPSG:4326) can be overridden by setting the\n * dataProjection constructor option on the format.\n * Note that if a source contains non-feature data, such as a GeoJSON geometry\n * or a KML NetworkLink, these will be ignored. Use a custom loader to load these.\n * @property {boolean} [useSpatialIndex=true]\n * By default, an RTree is used as spatial index. When features are removed and\n * added frequently, and the total number of features is low, setting this to\n * `false` may improve performance.\n *\n * Note that\n * {@link module:ol/source/Vector~VectorSource#getFeaturesInExtent},\n * {@link module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate} and\n * {@link module:ol/source/Vector~VectorSource#getExtent} cannot be used when `useSpatialIndex` is\n * set to `false`, and {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent} will loop\n * through all features.\n *\n * When set to `false`, the features will be maintained in an\n * {@link module:ol/Collection}, which can be retrieved through\n * {@link module:ol/source/Vector~VectorSource#getFeaturesCollection}.\n * @property {boolean} [wrapX=true] Wrap the world horizontally. For vector editing across the\n * -180° and 180° meridians to work properly, this should be set to `false`. The\n * resulting geometry coordinates will then exceed the world bounds.\n */\n/**\n * @classdesc\n * Provides a source of features for vector layers. Vector features provided\n * by this source are suitable for editing. See {@link module:ol/source/VectorTile~VectorTile} for\n * vector data that is optimized for rendering.\n *\n * @fires VectorSourceEvent\n * @api\n * @template {import(\"../geom/Geometry.js\").default} Geometry\n */\nvar VectorSource = /** @class */ (function (_super) {\n __extends(VectorSource, _super);\n /**\n * @param {Options} [opt_options] Vector source options.\n */\n function VectorSource(opt_options) {\n var _this = this;\n var options = opt_options || {};\n _this = _super.call(this, {\n attributions: options.attributions,\n projection: undefined,\n state: SourceState.READY,\n wrapX: options.wrapX !== undefined ? options.wrapX : true,\n }) || this;\n /***\n * @type {VectorSourceOnSignature}\n */\n _this.on;\n /***\n * @type {VectorSourceOnSignature}\n */\n _this.once;\n /***\n * @type {VectorSourceOnSignature}\n */\n _this.un;\n /**\n * @private\n * @type {import(\"../featureloader.js\").FeatureLoader}\n */\n _this.loader_ = VOID;\n /**\n * @private\n * @type {import(\"../format/Feature.js\").default|undefined}\n */\n _this.format_ = options.format;\n /**\n * @private\n * @type {boolean}\n */\n _this.overlaps_ = options.overlaps === undefined ? true : options.overlaps;\n /**\n * @private\n * @type {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined}\n */\n _this.url_ = options.url;\n if (options.loader !== undefined) {\n _this.loader_ = options.loader;\n }\n else if (_this.url_ !== undefined) {\n assert(_this.format_, 7); // `format` must be set when `url` is set\n // create a XHR feature loader for \"url\" and \"format\"\n _this.loader_ = xhr(_this.url_, \n /** @type {import(\"../format/Feature.js\").default} */ (_this.format_));\n }\n /**\n * @private\n * @type {LoadingStrategy}\n */\n _this.strategy_ =\n options.strategy !== undefined ? options.strategy : allStrategy;\n var useSpatialIndex = options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;\n /**\n * @private\n * @type {RBush>}\n */\n _this.featuresRtree_ = useSpatialIndex ? new RBush() : null;\n /**\n * @private\n * @type {RBush<{extent: import(\"../extent.js\").Extent}>}\n */\n _this.loadedExtentsRtree_ = new RBush();\n /**\n * @type {number}\n * @private\n */\n _this.loadingExtentsCount_ = 0;\n /**\n * @private\n * @type {!Object>}\n */\n _this.nullGeometryFeatures_ = {};\n /**\n * A lookup of features by id (the return from feature.getId()).\n * @private\n * @type {!Object>}\n */\n _this.idIndex_ = {};\n /**\n * A lookup of features by uid (using getUid(feature)).\n * @private\n * @type {!Object>}\n */\n _this.uidIndex_ = {};\n /**\n * @private\n * @type {Object>}\n */\n _this.featureChangeKeys_ = {};\n /**\n * @private\n * @type {Collection>}\n */\n _this.featuresCollection_ = null;\n var collection, features;\n if (Array.isArray(options.features)) {\n features = options.features;\n }\n else if (options.features) {\n collection = options.features;\n features = collection.getArray();\n }\n if (!useSpatialIndex && collection === undefined) {\n collection = new Collection(features);\n }\n if (features !== undefined) {\n _this.addFeaturesInternal(features);\n }\n if (collection !== undefined) {\n _this.bindFeaturesCollection_(collection);\n }\n return _this;\n }\n /**\n * Add a single feature to the source. If you want to add a batch of features\n * at once, call {@link module:ol/source/Vector~VectorSource#addFeatures #addFeatures()}\n * instead. A feature will not be added to the source if feature with\n * the same id is already there. The reason for this behavior is to avoid\n * feature duplication when using bbox or tile loading strategies.\n * Note: this also applies if an {@link module:ol/Collection} is used for features,\n * meaning that if a feature with a duplicate id is added in the collection, it will\n * be removed from it right away.\n * @param {import(\"../Feature.js\").default} feature Feature to add.\n * @api\n */\n VectorSource.prototype.addFeature = function (feature) {\n this.addFeatureInternal(feature);\n this.changed();\n };\n /**\n * Add a feature without firing a `change` event.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @protected\n */\n VectorSource.prototype.addFeatureInternal = function (feature) {\n var featureKey = getUid(feature);\n if (!this.addToIndex_(featureKey, feature)) {\n if (this.featuresCollection_) {\n this.featuresCollection_.remove(feature);\n }\n return;\n }\n this.setupChangeEvents_(featureKey, feature);\n var geometry = feature.getGeometry();\n if (geometry) {\n var extent = geometry.getExtent();\n if (this.featuresRtree_) {\n this.featuresRtree_.insert(extent, feature);\n }\n }\n else {\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, feature));\n };\n /**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {import(\"../Feature.js\").default} feature The feature.\n * @private\n */\n VectorSource.prototype.setupChangeEvents_ = function (featureKey, feature) {\n this.featureChangeKeys_[featureKey] = [\n listen(feature, EventType.CHANGE, this.handleFeatureChange_, this),\n listen(feature, ObjectEventType.PROPERTYCHANGE, this.handleFeatureChange_, this),\n ];\n };\n /**\n * @param {string} featureKey Unique identifier for the feature.\n * @param {import(\"../Feature.js\").default} feature The feature.\n * @return {boolean} The feature is \"valid\", in the sense that it is also a\n * candidate for insertion into the Rtree.\n * @private\n */\n VectorSource.prototype.addToIndex_ = function (featureKey, feature) {\n var valid = true;\n var id = feature.getId();\n if (id !== undefined) {\n if (!(id.toString() in this.idIndex_)) {\n this.idIndex_[id.toString()] = feature;\n }\n else {\n valid = false;\n }\n }\n if (valid) {\n assert(!(featureKey in this.uidIndex_), 30); // The passed `feature` was already added to the source\n this.uidIndex_[featureKey] = feature;\n }\n return valid;\n };\n /**\n * Add a batch of features to the source.\n * @param {Array>} features Features to add.\n * @api\n */\n VectorSource.prototype.addFeatures = function (features) {\n this.addFeaturesInternal(features);\n this.changed();\n };\n /**\n * Add features without firing a `change` event.\n * @param {Array>} features Features.\n * @protected\n */\n VectorSource.prototype.addFeaturesInternal = function (features) {\n var extents = [];\n var newFeatures = [];\n var geometryFeatures = [];\n for (var i = 0, length_1 = features.length; i < length_1; i++) {\n var feature = features[i];\n var featureKey = getUid(feature);\n if (this.addToIndex_(featureKey, feature)) {\n newFeatures.push(feature);\n }\n }\n for (var i = 0, length_2 = newFeatures.length; i < length_2; i++) {\n var feature = newFeatures[i];\n var featureKey = getUid(feature);\n this.setupChangeEvents_(featureKey, feature);\n var geometry = feature.getGeometry();\n if (geometry) {\n var extent = geometry.getExtent();\n extents.push(extent);\n geometryFeatures.push(feature);\n }\n else {\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n }\n if (this.featuresRtree_) {\n this.featuresRtree_.load(extents, geometryFeatures);\n }\n for (var i = 0, length_3 = newFeatures.length; i < length_3; i++) {\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]));\n }\n };\n /**\n * @param {!Collection>} collection Collection.\n * @private\n */\n VectorSource.prototype.bindFeaturesCollection_ = function (collection) {\n var modifyingCollection = false;\n this.addEventListener(VectorEventType.ADDFEATURE, \n /**\n * @param {VectorSourceEvent} evt The vector source event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n collection.push(evt.feature);\n modifyingCollection = false;\n }\n });\n this.addEventListener(VectorEventType.REMOVEFEATURE, \n /**\n * @param {VectorSourceEvent} evt The vector source event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n collection.remove(evt.feature);\n modifyingCollection = false;\n }\n });\n collection.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n this.addFeature(\n /** @type {import(\"../Feature.js\").default} */ (evt.element));\n modifyingCollection = false;\n }\n }.bind(this));\n collection.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"../Collection.js\").CollectionEvent} evt The collection event\n */\n function (evt) {\n if (!modifyingCollection) {\n modifyingCollection = true;\n this.removeFeature(\n /** @type {import(\"../Feature.js\").default} */ (evt.element));\n modifyingCollection = false;\n }\n }.bind(this));\n this.featuresCollection_ = collection;\n };\n /**\n * Remove all features from the source.\n * @param {boolean} [opt_fast] Skip dispatching of {@link module:ol/source/Vector.VectorSourceEvent#event:removefeature removefeature} events.\n * @api\n */\n VectorSource.prototype.clear = function (opt_fast) {\n if (opt_fast) {\n for (var featureId in this.featureChangeKeys_) {\n var keys = this.featureChangeKeys_[featureId];\n keys.forEach(unlistenByKey);\n }\n if (!this.featuresCollection_) {\n this.featureChangeKeys_ = {};\n this.idIndex_ = {};\n this.uidIndex_ = {};\n }\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.forEach(this.removeFeatureInternal.bind(this));\n for (var id in this.nullGeometryFeatures_) {\n this.removeFeatureInternal(this.nullGeometryFeatures_[id]);\n }\n }\n }\n if (this.featuresCollection_) {\n this.featuresCollection_.clear();\n }\n if (this.featuresRtree_) {\n this.featuresRtree_.clear();\n }\n this.nullGeometryFeatures_ = {};\n var clearEvent = new VectorSourceEvent(VectorEventType.CLEAR);\n this.dispatchEvent(clearEvent);\n this.changed();\n };\n /**\n * Iterate through all features on the source, calling the provided callback\n * with each one. If the callback returns any \"truthy\" value, iteration will\n * stop and the function will return the same value.\n * Note: this function only iterate through the feature that have a defined geometry.\n *\n * @param {function(import(\"../Feature.js\").default): T} callback Called with each feature\n * on the source. Return a truthy value to stop iteration.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeature = function (callback) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.forEach(callback);\n }\n else if (this.featuresCollection_) {\n this.featuresCollection_.forEach(callback);\n }\n };\n /**\n * Iterate through all features whose geometries contain the provided\n * coordinate, calling the callback with each feature. If the callback returns\n * a \"truthy\" value, iteration will stop and the function will return the same\n * value.\n *\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {function(import(\"../Feature.js\").default): T} callback Called with each feature\n * whose goemetry contains the provided coordinate.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n */\n VectorSource.prototype.forEachFeatureAtCoordinateDirect = function (coordinate, callback) {\n var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];\n return this.forEachFeatureInExtent(extent, function (feature) {\n var geometry = feature.getGeometry();\n if (geometry.intersectsCoordinate(coordinate)) {\n return callback(feature);\n }\n else {\n return undefined;\n }\n });\n };\n /**\n * Iterate through all features whose bounding box intersects the provided\n * extent (note that the feature's geometry may not intersect the extent),\n * calling the callback with each feature. If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you are interested in features whose geometry intersects an extent, call\n * the {@link module:ol/source/Vector~VectorSource#forEachFeatureIntersectingExtent #forEachFeatureIntersectingExtent()} method instead.\n *\n * When `useSpatialIndex` is set to false, this method will loop through all\n * features, equivalent to {@link module:ol/source/Vector~VectorSource#forEachFeature #forEachFeature()}.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(import(\"../Feature.js\").default): T} callback Called with each feature\n * whose bounding box intersects the provided extent.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeatureInExtent = function (extent, callback) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.forEachInExtent(extent, callback);\n }\n else if (this.featuresCollection_) {\n this.featuresCollection_.forEach(callback);\n }\n };\n /**\n * Iterate through all features whose geometry intersects the provided extent,\n * calling the callback with each feature. If the callback returns a \"truthy\"\n * value, iteration will stop and the function will return the same value.\n *\n * If you only want to test for bounding box intersection, call the\n * {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent #forEachFeatureInExtent()} method instead.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {function(import(\"../Feature.js\").default): T} callback Called with each feature\n * whose geometry intersects the provided extent.\n * @return {T|undefined} The return value from the last call to the callback.\n * @template T\n * @api\n */\n VectorSource.prototype.forEachFeatureIntersectingExtent = function (extent, callback) {\n return this.forEachFeatureInExtent(extent, \n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @return {T|undefined} The return value from the last call to the callback.\n */\n function (feature) {\n var geometry = feature.getGeometry();\n if (geometry.intersectsExtent(extent)) {\n var result = callback(feature);\n if (result) {\n return result;\n }\n }\n });\n };\n /**\n * Get the features collection associated with this source. Will be `null`\n * unless the source was configured with `useSpatialIndex` set to `false`, or\n * with an {@link module:ol/Collection} as `features`.\n * @return {Collection>} The collection of features.\n * @api\n */\n VectorSource.prototype.getFeaturesCollection = function () {\n return this.featuresCollection_;\n };\n /**\n * Get a snapshot of the features currently on the source in random order. The returned array\n * is a copy, the features are references to the features in the source.\n * @return {Array>} Features.\n * @api\n */\n VectorSource.prototype.getFeatures = function () {\n var features;\n if (this.featuresCollection_) {\n features = this.featuresCollection_.getArray().slice(0);\n }\n else if (this.featuresRtree_) {\n features = this.featuresRtree_.getAll();\n if (!isEmpty(this.nullGeometryFeatures_)) {\n extend(features, getValues(this.nullGeometryFeatures_));\n }\n }\n return /** @type {Array>} */ (features);\n };\n /**\n * Get all features whose geometry intersects the provided coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {Array>} Features.\n * @api\n */\n VectorSource.prototype.getFeaturesAtCoordinate = function (coordinate) {\n var features = [];\n this.forEachFeatureAtCoordinateDirect(coordinate, function (feature) {\n features.push(feature);\n });\n return features;\n };\n /**\n * Get all features whose bounding box intersects the provided extent. Note that this returns an array of\n * all features intersecting the given extent in random order (so it may include\n * features whose geometries do not intersect the extent).\n *\n * When `useSpatialIndex` is set to false, this method will return all\n * features.\n *\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {Array>} Features.\n * @api\n */\n VectorSource.prototype.getFeaturesInExtent = function (extent) {\n if (this.featuresRtree_) {\n return this.featuresRtree_.getInExtent(extent);\n }\n else if (this.featuresCollection_) {\n return this.featuresCollection_.getArray().slice(0);\n }\n else {\n return [];\n }\n };\n /**\n * Get the closest feature to the provided coordinate.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {function(import(\"../Feature.js\").default):boolean} [opt_filter] Feature filter function.\n * The filter function will receive one argument, the {@link module:ol/Feature feature}\n * and it should return a boolean value. By default, no filtering is made.\n * @return {import(\"../Feature.js\").default} Closest feature.\n * @api\n */\n VectorSource.prototype.getClosestFeatureToCoordinate = function (coordinate, opt_filter) {\n // Find the closest feature using branch and bound. We start searching an\n // infinite extent, and find the distance from the first feature found. This\n // becomes the closest feature. We then compute a smaller extent which any\n // closer feature must intersect. We continue searching with this smaller\n // extent, trying to find a closer feature. Every time we find a closer\n // feature, we update the extent being searched so that any even closer\n // feature must intersect it. We continue until we run out of features.\n var x = coordinate[0];\n var y = coordinate[1];\n var closestFeature = null;\n var closestPoint = [NaN, NaN];\n var minSquaredDistance = Infinity;\n var extent = [-Infinity, -Infinity, Infinity, Infinity];\n var filter = opt_filter ? opt_filter : TRUE;\n this.featuresRtree_.forEachInExtent(extent, \n /**\n * @param {import(\"../Feature.js\").default} feature Feature.\n */\n function (feature) {\n if (filter(feature)) {\n var geometry = feature.getGeometry();\n var previousMinSquaredDistance = minSquaredDistance;\n minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);\n if (minSquaredDistance < previousMinSquaredDistance) {\n closestFeature = feature;\n // This is sneaky. Reduce the extent that it is currently being\n // searched while the R-Tree traversal using this same extent object\n // is still in progress. This is safe because the new extent is\n // strictly contained by the old extent.\n var minDistance = Math.sqrt(minSquaredDistance);\n extent[0] = x - minDistance;\n extent[1] = y - minDistance;\n extent[2] = x + minDistance;\n extent[3] = y + minDistance;\n }\n }\n });\n return closestFeature;\n };\n /**\n * Get the extent of the features currently in the source.\n *\n * This method is not available when the source is configured with\n * `useSpatialIndex` set to `false`.\n * @param {import(\"../extent.js\").Extent} [opt_extent] Destination extent. If provided, no new extent\n * will be created. Instead, that extent's coordinates will be overwritten.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n VectorSource.prototype.getExtent = function (opt_extent) {\n return this.featuresRtree_.getExtent(opt_extent);\n };\n /**\n * Get a feature by its identifier (the value returned by feature.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.\n *\n * @param {string|number} id Feature identifier.\n * @return {import(\"../Feature.js\").default} The feature (or `null` if not found).\n * @api\n */\n VectorSource.prototype.getFeatureById = function (id) {\n var feature = this.idIndex_[id.toString()];\n return feature !== undefined ? feature : null;\n };\n /**\n * Get a feature by its internal unique identifier (using `getUid`).\n *\n * @param {string} uid Feature identifier.\n * @return {import(\"../Feature.js\").default} The feature (or `null` if not found).\n */\n VectorSource.prototype.getFeatureByUid = function (uid) {\n var feature = this.uidIndex_[uid];\n return feature !== undefined ? feature : null;\n };\n /**\n * Get the format associated with this source.\n *\n * @return {import(\"../format/Feature.js\").default|undefined} The feature format.\n * @api\n */\n VectorSource.prototype.getFormat = function () {\n return this.format_;\n };\n /**\n * @return {boolean} The source can have overlapping geometries.\n */\n VectorSource.prototype.getOverlaps = function () {\n return this.overlaps_;\n };\n /**\n * Get the url associated with this source.\n *\n * @return {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined} The url.\n * @api\n */\n VectorSource.prototype.getUrl = function () {\n return this.url_;\n };\n /**\n * @param {Event} event Event.\n * @private\n */\n VectorSource.prototype.handleFeatureChange_ = function (event) {\n var feature = /** @type {import(\"../Feature.js\").default} */ (event.target);\n var featureKey = getUid(feature);\n var geometry = feature.getGeometry();\n if (!geometry) {\n if (!(featureKey in this.nullGeometryFeatures_)) {\n if (this.featuresRtree_) {\n this.featuresRtree_.remove(feature);\n }\n this.nullGeometryFeatures_[featureKey] = feature;\n }\n }\n else {\n var extent = geometry.getExtent();\n if (featureKey in this.nullGeometryFeatures_) {\n delete this.nullGeometryFeatures_[featureKey];\n if (this.featuresRtree_) {\n this.featuresRtree_.insert(extent, feature);\n }\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.update(extent, feature);\n }\n }\n }\n var id = feature.getId();\n if (id !== undefined) {\n var sid = id.toString();\n if (this.idIndex_[sid] !== feature) {\n this.removeFromIdIndex_(feature);\n this.idIndex_[sid] = feature;\n }\n }\n else {\n this.removeFromIdIndex_(feature);\n this.uidIndex_[featureKey] = feature;\n }\n this.changed();\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.CHANGEFEATURE, feature));\n };\n /**\n * Returns true if the feature is contained within the source.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @return {boolean} Has feature.\n * @api\n */\n VectorSource.prototype.hasFeature = function (feature) {\n var id = feature.getId();\n if (id !== undefined) {\n return id in this.idIndex_;\n }\n else {\n return getUid(feature) in this.uidIndex_;\n }\n };\n /**\n * @return {boolean} Is empty.\n */\n VectorSource.prototype.isEmpty = function () {\n return this.featuresRtree_.isEmpty() && isEmpty(this.nullGeometryFeatures_);\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n */\n VectorSource.prototype.loadFeatures = function (extent, resolution, projection) {\n var loadedExtentsRtree = this.loadedExtentsRtree_;\n var extentsToLoad = this.strategy_(extent, resolution, projection);\n var _loop_1 = function (i, ii) {\n var extentToLoad = extentsToLoad[i];\n var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad, \n /**\n * @param {{extent: import(\"../extent.js\").Extent}} object Object.\n * @return {boolean} Contains.\n */\n function (object) {\n return containsExtent(object.extent, extentToLoad);\n });\n if (!alreadyLoaded) {\n ++this_1.loadingExtentsCount_;\n this_1.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADSTART));\n this_1.loader_.call(this_1, extentToLoad, resolution, projection, function (features) {\n --this.loadingExtentsCount_;\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADEND, undefined, features));\n }.bind(this_1), function () {\n --this.loadingExtentsCount_;\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.FEATURESLOADERROR));\n }.bind(this_1));\n loadedExtentsRtree.insert(extentToLoad, { extent: extentToLoad.slice() });\n }\n };\n var this_1 = this;\n for (var i = 0, ii = extentsToLoad.length; i < ii; ++i) {\n _loop_1(i, ii);\n }\n this.loading =\n this.loader_.length < 4 ? false : this.loadingExtentsCount_ > 0;\n };\n VectorSource.prototype.refresh = function () {\n this.clear(true);\n this.loadedExtentsRtree_.clear();\n _super.prototype.refresh.call(this);\n };\n /**\n * Remove an extent from the list of loaded extents.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n VectorSource.prototype.removeLoadedExtent = function (extent) {\n var loadedExtentsRtree = this.loadedExtentsRtree_;\n var obj;\n loadedExtentsRtree.forEachInExtent(extent, function (object) {\n if (equals(object.extent, extent)) {\n obj = object;\n return true;\n }\n });\n if (obj) {\n loadedExtentsRtree.remove(obj);\n }\n };\n /**\n * Remove a single feature from the source. If you want to remove all features\n * at once, use the {@link module:ol/source/Vector~VectorSource#clear #clear()} method\n * instead.\n * @param {import(\"../Feature.js\").default} feature Feature to remove.\n * @api\n */\n VectorSource.prototype.removeFeature = function (feature) {\n var featureKey = getUid(feature);\n if (featureKey in this.nullGeometryFeatures_) {\n delete this.nullGeometryFeatures_[featureKey];\n }\n else {\n if (this.featuresRtree_) {\n this.featuresRtree_.remove(feature);\n }\n }\n this.removeFeatureInternal(feature);\n this.changed();\n };\n /**\n * Remove feature without firing a `change` event.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @protected\n */\n VectorSource.prototype.removeFeatureInternal = function (feature) {\n var featureKey = getUid(feature);\n this.featureChangeKeys_[featureKey].forEach(unlistenByKey);\n delete this.featureChangeKeys_[featureKey];\n var id = feature.getId();\n if (id !== undefined) {\n delete this.idIndex_[id.toString()];\n }\n delete this.uidIndex_[featureKey];\n this.dispatchEvent(new VectorSourceEvent(VectorEventType.REMOVEFEATURE, feature));\n };\n /**\n * Remove a feature from the id index. Called internally when the feature id\n * may have changed.\n * @param {import(\"../Feature.js\").default} feature The feature.\n * @return {boolean} Removed the feature from the index.\n * @private\n */\n VectorSource.prototype.removeFromIdIndex_ = function (feature) {\n var removed = false;\n for (var id in this.idIndex_) {\n if (this.idIndex_[id] === feature) {\n delete this.idIndex_[id];\n removed = true;\n break;\n }\n }\n return removed;\n };\n /**\n * Set the new loader of the source. The next render cycle will use the\n * new loader.\n * @param {import(\"../featureloader.js\").FeatureLoader} loader The loader to set.\n * @api\n */\n VectorSource.prototype.setLoader = function (loader) {\n this.loader_ = loader;\n };\n /**\n * Points the source to a new url. The next render cycle will use the new url.\n * @param {string|import(\"../featureloader.js\").FeatureUrlFunction} url Url.\n * @api\n */\n VectorSource.prototype.setUrl = function (url) {\n assert(this.format_, 7); // `format` must be set when `url` is set\n this.url_ = url;\n this.setLoader(xhr(url, this.format_));\n };\n return VectorSource;\n}(Source));\nexport default VectorSource;\n//# sourceMappingURL=Vector.js.map","/**\n * @module ol/MapEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n};\n/***\n * @typedef {'postrender'|'movestart'|'moveend'} Types\n */\n//# sourceMappingURL=MapEventType.js.map","/**\n * @module ol/geom/flat/length\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} Length.\n */\nexport function lineStringLength(flatCoordinates, offset, end, stride) {\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n var length = 0;\n for (var i = offset + stride; i < end; i += stride) {\n var x2 = flatCoordinates[i];\n var y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n x1 = x2;\n y1 = y2;\n }\n return length;\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} Perimeter.\n */\nexport function linearRingLength(flatCoordinates, offset, end, stride) {\n var perimeter = lineStringLength(flatCoordinates, offset, end, stride);\n var dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n perimeter += Math.sqrt(dx * dx + dy * dy);\n return perimeter;\n}\n//# sourceMappingURL=length.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/LinearRing\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\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 * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nvar LinearRing = /** @class */ (function (_super) {\n __extends(LinearRing, _super);\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n function LinearRing(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.maxDeltaRevision_ = -1;\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array} */ (coordinates));\n }\n else {\n _this.setCoordinates(\n /** @type {Array} */ (coordinates), opt_layout);\n }\n return _this;\n }\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n */\n LinearRing.prototype.clone = function () {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n LinearRing.prototype.closestPointXY = function (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(maxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n LinearRing.prototype.getArea = function () {\n return linearRingArea(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @api\n */\n LinearRing.prototype.getCoordinates = function () {\n return inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n */\n LinearRing.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);\n return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n LinearRing.prototype.getType = function () {\n return GeometryType.LINEAR_RING;\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n LinearRing.prototype.intersectsExtent = function (extent) {\n return false;\n };\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n LinearRing.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n };\n return LinearRing;\n}(SimpleGeometry));\nexport default LinearRing;\n//# sourceMappingURL=LinearRing.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/geom/Polygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { arrayMaxSquaredDelta, assignClosestArrayPoint } from './flat/closest.js';\nimport { closestSquaredDistanceXY, getCenter } from '../extent.js';\nimport { deflateCoordinatesArray } from './flat/deflate.js';\nimport { extend } from '../array.js';\nimport { getInteriorPointOfArray } from './flat/interiorpoint.js';\nimport { inflateCoordinatesArray } from './flat/inflate.js';\nimport { intersectsLinearRingArray } from './flat/intersectsextent.js';\nimport { linearRingsAreOriented, orientLinearRings } from './flat/orient.js';\nimport { linearRings as linearRingsArea } from './flat/area.js';\nimport { linearRingsContainsXY } from './flat/contains.js';\nimport { modulo } from '../math.js';\nimport { quantizeArray } from './flat/simplify.js';\nimport { offset as sphereOffset } from '../sphere.js';\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nvar Polygon = /** @class */ (function (_super) {\n __extends(Polygon, _super);\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 * `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array} [opt_ends] Ends (for internal use with flat coordinates).\n */\n function Polygon(coordinates, opt_layout, opt_ends) {\n var _this = _super.call(this) || this;\n /**\n * @type {Array}\n * @private\n */\n _this.ends_ = [];\n /**\n * @private\n * @type {number}\n */\n _this.flatInteriorPointRevision_ = -1;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.flatInteriorPoint_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.maxDelta_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.maxDeltaRevision_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.orientedRevision_ = -1;\n /**\n * @private\n * @type {Array}\n */\n _this.orientedFlatCoordinates_ = null;\n if (opt_layout !== undefined && opt_ends) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array} */ (coordinates));\n _this.ends_ = opt_ends;\n }\n else {\n _this.setCoordinates(\n /** @type {Array>} */ (coordinates), opt_layout);\n }\n return _this;\n }\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n Polygon.prototype.appendLinearRing = function (linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n }\n else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n */\n Polygon.prototype.clone = function () {\n var polygon = new Polygon(this.flatCoordinates.slice(), this.layout, this.ends_.slice());\n polygon.applyProperties(this);\n return polygon;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n Polygon.prototype.closestPointXY = function (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(arrayMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n Polygon.prototype.containsXY = function (x, y) {\n return linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);\n };\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n Polygon.prototype.getArea = function () {\n return linearRingsArea(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);\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} [opt_right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @api\n */\n Polygon.prototype.getCoordinates = function (opt_right) {\n var flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, opt_right);\n }\n else {\n flatCoordinates = this.flatCoordinates;\n }\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n };\n /**\n * @return {Array} Ends.\n */\n Polygon.prototype.getEnds = function () {\n return this.ends_;\n };\n /**\n * @return {Array} Interior point.\n */\n Polygon.prototype.getFlatInteriorPoint = function () {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n var flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0);\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\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 Polygon.prototype.getInteriorPoint = function () {\n return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\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 Polygon.prototype.getLinearRingCount = function () {\n return this.ends_.length;\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} Linear ring.\n * @api\n */\n Polygon.prototype.getLinearRing = function (index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);\n };\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n Polygon.prototype.getLinearRings = function () {\n var layout = this.layout;\n var flatCoordinates = this.flatCoordinates;\n var ends = this.ends_;\n var linearRings = [];\n var offset = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var linearRing = new LinearRing(flatCoordinates.slice(offset, end), layout);\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n };\n /**\n * @return {Array} Oriented flat coordinates.\n */\n Polygon.prototype.getOrientedFlatCoordinates = function () {\n if (this.orientedRevision_ != this.getRevision()) {\n var flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n }\n else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(this.orientedFlatCoordinates_, 0, this.ends_, this.stride);\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n */\n Polygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n var simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds);\n return new Polygon(simplifiedFlatCoordinates, GeometryLayout.XY, simplifiedEnds);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n Polygon.prototype.getType = function () {\n return GeometryType.POLYGON;\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n Polygon.prototype.intersectsExtent = function (extent) {\n return intersectsLinearRingArray(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);\n };\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n Polygon.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n var ends = deflateCoordinatesArray(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n };\n return Polygon;\n}(SimpleGeometry));\nexport default Polygon;\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} [opt_n] Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number} [opt_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, opt_n, opt_sphereRadius) {\n var n = opt_n ? opt_n : 32;\n /** @type {Array} */\n var flatCoordinates = [];\n for (var i = 0; i < n; ++i) {\n extend(flatCoordinates, sphereOffset(center, radius, (2 * Math.PI * i) / n, opt_sphereRadius));\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n 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 var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var 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, GeometryLayout.XY, [\n 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} [opt_sides] Number of sides of the polygon. Default is 32.\n * @param {number} [opt_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, opt_sides, opt_angle) {\n var sides = opt_sides ? opt_sides : 32;\n var stride = circle.getStride();\n var layout = circle.getLayout();\n var center = circle.getCenter();\n var arrayLength = stride * (sides + 1);\n var flatCoordinates = new Array(arrayLength);\n for (var i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (var j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n var ends = [flatCoordinates.length];\n var polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), opt_angle);\n return polygon;\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} [opt_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, opt_angle) {\n var flatCoordinates = polygon.getFlatCoordinates();\n var stride = polygon.getStride();\n var sides = flatCoordinates.length / stride - 1;\n var startAngle = opt_angle ? opt_angle : 0;\n for (var i = 0; i <= sides; ++i) {\n var offset = i * stride;\n var 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//# sourceMappingURL=Polygon.js.map","/**\n * @module ol/color\n */\nimport { assert } from './asserts.js';\nimport { clamp } from './math.js';\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 * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nvar HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nvar NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\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 else {\n return toString(color);\n }\n}\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n var el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n var rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n }\n else {\n return '';\n }\n}\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport var fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n /**\n * @const\n * @type {number}\n */\n var MAX_CACHE_SIZE = 1024;\n /**\n * @type {Object}\n */\n var cache = {};\n /**\n * @type {number}\n */\n var cacheSize = 0;\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n var color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n }\n else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n var i = 0;\n for (var key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n });\n})();\n/**\n * 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 else {\n return fromString(color);\n }\n}\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n var r, g, b, a, color;\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n var n = s.length - 1; // number of hex digits\n var d = // number of digits per channel\n void 0; // number of digits per channel\n if (n <= 4) {\n d = 1;\n }\n else {\n d = 2;\n }\n var hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n }\n else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n }\n else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n }\n else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n }\n else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n var r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n var g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n var b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n var a = color[3] === undefined ? 1 : color[3];\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0);\n}\n//# sourceMappingURL=color.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport { TRUE } from '../functions.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, makeInverse } from '../transform.js';\nimport { getWidth } from '../extent.js';\nimport { shared as iconImageCache } from '../style/IconImageCache.js';\nimport { inView } from '../layer/Layer.js';\nimport { wrapX } from '../coordinate.js';\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n * @template T\n */\n/**\n * @abstract\n */\nvar MapRenderer = /** @class */ (function (_super) {\n __extends(MapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function MapRenderer(map) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = map;\n return _this;\n }\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @protected\n */\n MapRenderer.prototype.calculateMatrices2D = function (frameState) {\n var viewState = frameState.viewState;\n var coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n composeTransform(coordinateToPixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / viewState.resolution, -1 / viewState.resolution, -viewState.rotation, -viewState.center[0], -viewState.center[1]);\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n MapRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, callback, thisArg, layerFilter, thisArg2) {\n var result;\n var viewState = frameState.viewState;\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n var projection = viewState.projection;\n var translatedCoordinate = wrapX(coordinate.slice(), projection);\n var offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n var projectionExtent = projection.getExtent();\n var worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n var matches = /** @type {Array>} */ ([]);\n var tmpCoord = [];\n for (var i = 0; i < offsets.length; i++) {\n for (var j = numLayers - 1; j >= 0; --j) {\n var layerState = layerStates[j];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)) {\n var layerRenderer = layer.getRenderer();\n var source = layer.getSource();\n if (layerRenderer && source) {\n var coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n var callback_1 = forEachFeatureAtCoordinate.bind(null, layerState.managed);\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(tmpCoord, frameState, hitTolerance, callback_1, matches);\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n var order = 1 / matches.length;\n matches.forEach(function (m, i) { return (m.distanceSq += i * order); });\n matches.sort(function (a, b) { return a.distanceSq - b.distanceSq; });\n matches.some(function (m) {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n };\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n MapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n return abstract();\n };\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n MapRenderer.prototype.hasFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, layerFilter, thisArg) {\n var hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, checkWrapped, TRUE, this, layerFilter, thisArg);\n return hasFeature !== undefined;\n };\n /**\n * @return {import(\"../PluggableMap.js\").default} Map.\n */\n MapRenderer.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Render.\n * @abstract\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n MapRenderer.prototype.renderFrame = function (frameState) {\n abstract();\n };\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n MapRenderer.prototype.scheduleExpireIconCache = function (frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n };\n return MapRenderer;\n}(Disposable));\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\nexport default MapRenderer;\n//# sourceMappingURL=Map.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport { CLASS_UNSELECTABLE } from '../css.js';\nimport { checkedFonts } from '../render/canvas.js';\nimport { inView } from '../layer/Layer.js';\nimport { listen, unlistenByKey } from '../events.js';\nimport { replaceChildren } from '../dom.js';\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nvar CompositeMapRenderer = /** @class */ (function (_super) {\n __extends(CompositeMapRenderer, _super);\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n function CompositeMapRenderer(map) {\n var _this = _super.call(this, map) || this;\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n _this.fontChangeListenerKey_ = listen(checkedFonts, ObjectEventType.PROPERTYCHANGE, map.redrawText.bind(map));\n /**\n * @private\n * @type {HTMLDivElement}\n */\n _this.element_ = document.createElement('div');\n var style = _this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n _this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n var container = map.getViewport();\n container.insertBefore(_this.element_, container.firstChild || null);\n /**\n * @private\n * @type {Array}\n */\n _this.children_ = [];\n /**\n * @private\n * @type {boolean}\n */\n _this.renderedVisible_ = true;\n return _this;\n }\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {\n var map = this.getMap();\n if (map.hasListener(type)) {\n var event_1 = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event_1);\n }\n };\n CompositeMapRenderer.prototype.disposeInternal = function () {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Render.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n CompositeMapRenderer.prototype.renderFrame = function (frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n var layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n var viewState = frameState.viewState;\n this.children_.length = 0;\n /**\n * @type {Array}\n */\n var declutterLayers = [];\n var previousElement = null;\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n if (!inView(layerState, viewState) ||\n (layerState.sourceState != SourceState.READY &&\n layerState.sourceState != SourceState.UNDEFINED)) {\n continue;\n }\n var layer = layerState.layer;\n var element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(\n /** @type {import(\"../layer/BaseVector.js\").default} */ (layer));\n }\n }\n for (var i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n replaceChildren(this.element_, this.children_);\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n this.scheduleExpireIconCache(frameState);\n };\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n CompositeMapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {\n var viewState = frameState.viewState;\n var layerStates = frameState.layerStatesArray;\n var numLayers = layerStates.length;\n for (var i = numLayers - 1; i >= 0; --i) {\n var layerState = layerStates[i];\n var layer = layerState.layer;\n if (layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter(layer)) {\n var layerRenderer = layer.getRenderer();\n var data = layerRenderer.getDataAtPixel(pixel, frameState, hitTolerance);\n if (data) {\n var result = callback(layer, data);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n };\n return CompositeMapRenderer;\n}(MapRenderer));\nexport default CompositeMapRenderer;\n//# sourceMappingURL=Composite.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nvar MapEvent = /** @class */ (function (_super) {\n __extends(MapEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n function MapEvent(type, map, opt_frameState) {\n var _this = _super.call(this, type) || this;\n /**\n * The map where the event occurred.\n * @type {import(\"./PluggableMap.js\").default}\n * @api\n */\n _this.map = map;\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./PluggableMap.js\").FrameState}\n * @api\n */\n _this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n return _this;\n }\n return MapEvent;\n}(Event));\nexport default MapEvent;\n//# sourceMappingURL=MapEvent.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nvar MapBrowserEvent = /** @class */ (function (_super) {\n __extends(MapBrowserEvent, _super);\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [opt_dragging] Is the map currently being dragged?\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n function MapBrowserEvent(type, map, originalEvent, opt_dragging, opt_frameState) {\n var _this = _super.call(this, type, map, opt_frameState) || this;\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n _this.originalEvent = originalEvent;\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n _this.pixel_ = null;\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n _this.coordinate_ = null;\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n _this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n return _this;\n }\n Object.defineProperty(MapBrowserEvent.prototype, \"pixel\", {\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get: function () {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n },\n set: function (pixel) {\n this.pixel_ = pixel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(MapBrowserEvent.prototype, \"coordinate\", {\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get: function () {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n },\n set: function (coordinate) {\n this.coordinate_ = coordinate;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n MapBrowserEvent.prototype.preventDefault = function () {\n _super.prototype.preventDefault.call(this);\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n };\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n MapBrowserEvent.prototype.stopPropagation = function () {\n _super.prototype.stopPropagation.call(this);\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n };\n return MapBrowserEvent;\n}(MapEvent));\nexport default MapBrowserEvent;\n//# sourceMappingURL=MapBrowserEvent.js.map","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n//# sourceMappingURL=MapBrowserEventType.js.map","/**\n * @module ol/pointer/EventType\n */\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/MapBrowserEventHandler\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport { PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { VOID } from './functions.js';\nimport { listen, unlistenByKey } from './events.js';\nvar MapBrowserEventHandler = /** @class */ (function (_super) {\n __extends(MapBrowserEventHandler, _super);\n /**\n * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n function MapBrowserEventHandler(map, moveTolerance) {\n var _this = _super.call(this, map) || this;\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./PluggableMap.js\").default}\n * @private\n */\n _this.map_ = map;\n /**\n * @type {any}\n * @private\n */\n _this.clickTimeoutId_;\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n _this.emulateClicks_ = false;\n /**\n * @type {boolean}\n * @private\n */\n _this.dragging_ = false;\n /**\n * @type {!Array}\n * @private\n */\n _this.dragListenerKeys_ = [];\n /**\n * @type {number}\n * @private\n */\n _this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent}\n * @private\n */\n _this.down_ = null;\n var element = _this.map_.getViewport();\n /**\n * @type {number}\n * @private\n */\n _this.activePointers_ = 0;\n /**\n * @type {!Object}\n * @private\n */\n _this.trackedTouches_ = {};\n _this.element_ = element;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.pointerdownListenerKey_ = listen(element, PointerEventType.POINTERDOWN, _this.handlePointerDown_, _this);\n /**\n * @type {PointerEvent}\n * @private\n */\n _this.originalPointerMoveEvent_;\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n _this.relayedListenerKey_ = listen(element, PointerEventType.POINTERMOVE, _this.relayEvent_, _this);\n /**\n * @private\n */\n _this.boundHandleTouchMove_ = _this.handleTouchMove_.bind(_this);\n _this.element_.addEventListener(EventType.TOUCHMOVE, _this.boundHandleTouchMove_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n return _this;\n }\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.emulateClick_ = function (pointerEvent) {\n var newEvent = new MapBrowserEvent(MapBrowserEventType.CLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }\n else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }.bind(this), 250);\n }\n };\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.updateActivePointers_ = function (pointerEvent) {\n var event = pointerEvent;\n if (event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL) {\n delete this.trackedTouches_[event.pointerId];\n }\n else if (event.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedTouches_[event.pointerId] = true;\n }\n this.activePointers_ = Object.keys(this.trackedTouches_).length;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerUp_ = function (pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)) {\n this.emulateClick_(this.down_);\n }\n if (this.activePointers_ === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n MapBrowserEventHandler.prototype.isMouseActionButton_ = function (pointerEvent) {\n return pointerEvent.button === 0;\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerDown_ = function (pointerEvent) {\n this.emulateClicks_ = this.activePointers_ === 0;\n this.updateActivePointers_(pointerEvent);\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n // Store a copy of the down event\n this.down_ = /** @type {PointerEvent} */ ({});\n for (var property in pointerEvent) {\n var value = pointerEvent[property];\n this.down_[property] = typeof value === 'function' ? VOID : value;\n }\n if (this.dragListenerKeys_.length === 0) {\n var doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), \n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(this.element_, MapBrowserEventType.POINTERCANCEL, this.handlePointerUp_, this));\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(listen(this.element_.getRootNode(), MapBrowserEventType.POINTERUP, this.handlePointerUp_, this));\n }\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.handlePointerMove_ = function (pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.dragging_ = true;\n var newEvent = new MapBrowserEvent(MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent, this.dragging_);\n this.dispatchEvent(newEvent);\n }\n };\n /**\n * Wrap and relay a pointer event. Note that this requires that the type\n * string for the MapBrowserEvent matches the PointerEvent type.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n MapBrowserEventHandler.prototype.relayEvent_ = function (pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n var dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(new MapBrowserEvent(pointerEvent.type, this.map_, pointerEvent, dragging));\n };\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n MapBrowserEventHandler.prototype.handleTouchMove_ = function (event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n var originalEvent = this.originalPointerMoveEvent_;\n if ((!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)) {\n event.preventDefault();\n }\n };\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n MapBrowserEventHandler.prototype.isMoving_ = function (pointerEvent) {\n return (this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_);\n };\n /**\n * Clean up.\n */\n MapBrowserEventHandler.prototype.disposeInternal = function () {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(EventType.TOUCHMOVE, this.boundHandleTouchMove_);\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.element_ = null;\n _super.prototype.disposeInternal.call(this);\n };\n return MapBrowserEventHandler;\n}(Target));\nexport default MapBrowserEventHandler;\n//# sourceMappingURL=MapBrowserEventHandler.js.map","/**\n * @module ol/MapProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n//# sourceMappingURL=MapProperty.js.map","/**\n * @module ol/structs/PriorityQueue\n */\nimport { assert } from '../asserts.js';\nimport { clear } from '../obj.js';\n/**\n * @type {number}\n */\nexport var DROP = Infinity;\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nvar PriorityQueue = /** @class */ (function () {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n function PriorityQueue(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.clear = function () {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n };\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n PriorityQueue.prototype.dequeue = function () {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n }\n else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n var elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n };\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n PriorityQueue.prototype.enqueue = function (element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n var priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n };\n /**\n * @return {number} Count.\n */\n PriorityQueue.prototype.getCount = function () {\n return this.elements_.length;\n };\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n PriorityQueue.prototype.getLeftChildIndex_ = function (index) {\n return index * 2 + 1;\n };\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n PriorityQueue.prototype.getRightChildIndex_ = function (index) {\n return index * 2 + 2;\n };\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n PriorityQueue.prototype.getParentIndex_ = function (index) {\n return (index - 1) >> 1;\n };\n /**\n * Make this a heap. O(N).\n * @private\n */\n PriorityQueue.prototype.heapify_ = function () {\n var i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n };\n /**\n * @return {boolean} Is empty.\n */\n PriorityQueue.prototype.isEmpty = function () {\n return this.elements_.length === 0;\n };\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n PriorityQueue.prototype.isKeyQueued = function (key) {\n return key in this.queuedElements_;\n };\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n PriorityQueue.prototype.isQueued = function (element) {\n return this.isKeyQueued(this.keyFunction_(element));\n };\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n PriorityQueue.prototype.siftUp_ = function (index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var count = elements.length;\n var element = elements[index];\n var priority = priorities[index];\n var startIndex = index;\n while (index < count >> 1) {\n var lIndex = this.getLeftChildIndex_(index);\n var rIndex = this.getRightChildIndex_(index);\n var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n };\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n PriorityQueue.prototype.siftDown_ = function (startIndex, index) {\n var elements = this.elements_;\n var priorities = this.priorities_;\n var element = elements[index];\n var priority = priorities[index];\n while (index > startIndex) {\n var parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n }\n else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n };\n /**\n * FIXME empty description for jsdoc\n */\n PriorityQueue.prototype.reprioritize = function () {\n var priorityFunction = this.priorityFunction_;\n var elements = this.elements_;\n var priorities = this.priorities_;\n var index = 0;\n var n = elements.length;\n var element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n }\n else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n };\n return PriorityQueue;\n}());\nexport default PriorityQueue;\n//# sourceMappingURL=PriorityQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, { DROP } from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\nvar TileQueue = /** @class */ (function (_super) {\n __extends(TileQueue, _super);\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n function TileQueue(tilePriorityFunction, tileChangeCallback) {\n var _this = _super.call(this, \n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n }, \n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }) || this;\n /** @private */\n _this.boundHandleTileChange_ = _this.handleTileChange.bind(_this);\n /**\n * @private\n * @type {function(): ?}\n */\n _this.tileChangeCallback_ = tileChangeCallback;\n /**\n * @private\n * @type {number}\n */\n _this.tilesLoading_ = 0;\n /**\n * @private\n * @type {!Object}\n */\n _this.tilesLoadingKeys_ = {};\n return _this;\n }\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n TileQueue.prototype.enqueue = function (element) {\n var added = _super.prototype.enqueue.call(this, element);\n if (added) {\n var tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n };\n /**\n * @return {number} Number of tiles loading.\n */\n TileQueue.prototype.getTilesLoading = function () {\n return this.tilesLoading_;\n };\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n TileQueue.prototype.handleTileChange = function (event) {\n var tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n var state = tile.getState();\n if (state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n var tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n };\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n TileQueue.prototype.loadMoreTiles = function (maxTotalLoading, maxNewLoads) {\n var newLoads = 0;\n var state, tile, tileKey;\n while (this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n };\n return TileQueue;\n}(PriorityQueue));\nexport default TileQueue;\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(frameState, tile, tileSourceKey, tileCenter, tileResolution) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n var center = frameState.viewState.center;\n var deltaX = tileCenter[0] - center[0];\n var deltaY = tileCenter[1] - center[1];\n return (65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution);\n}\n//# sourceMappingURL=TileQueue.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/PluggableMap\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport LayerGroup from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, { getTilePriority } from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport { DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { TRUE } from './functions.js';\nimport { apply as applyTransform, create as createTransform, } from './transform.js';\nimport { assert } from './asserts.js';\nimport { clone, createOrUpdateEmpty, equals, getForViewAndSize, isEmpty, } from './extent.js';\nimport { fromUserCoordinate, toUserCoordinate } from './proj.js';\nimport { hasArea } from './size.js';\nimport { listen, unlistenByKey } from './events.js';\nimport { removeNode } from './dom.js';\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n */\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} PluggableMapOnSignature\n */\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nvar PluggableMap = /** @class */ (function (_super) {\n __extends(PluggableMap, _super);\n /**\n * @param {MapOptions} options Map options.\n */\n function PluggableMap(options) {\n var _this = _super.call(this) || this;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.on;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.once;\n /***\n * @type {PluggableMapOnSignature}\n */\n _this.un;\n var optionsInternal = createOptionsInternal(options);\n /** @private */\n _this.boundHandleBrowserEvent_ = _this.handleBrowserEvent.bind(_this);\n /**\n * @type {number}\n * @private\n */\n _this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n /**\n * @private\n * @type {number}\n */\n _this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n /**\n * @private\n * @type {*}\n */\n _this.postRenderTimeoutHandle_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.animationDelayKey_;\n /**\n * @private\n */\n _this.animationDelay_ = /** @this {PluggableMap} */ function () {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }.bind(_this);\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.coordinateToPixelTransform_ = createTransform();\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n _this.pixelToCoordinateTransform_ = createTransform();\n /**\n * @private\n * @type {number}\n */\n _this.frameIndex_ = 0;\n /**\n * @private\n * @type {?FrameState}\n */\n _this.frameState_ = null;\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n _this.previousExtent_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewPropertyListenerKey_ = null;\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n _this.viewChangeListenerKey_ = null;\n /**\n * @private\n * @type {?Array}\n */\n _this.layerGroupPropertyListenerKeys_ = null;\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.viewport_ = document.createElement('div');\n _this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n _this.viewport_.style.position = 'relative';\n _this.viewport_.style.overflow = 'hidden';\n _this.viewport_.style.width = '100%';\n _this.viewport_.style.height = '100%';\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainer_ = document.createElement('div');\n _this.overlayContainer_.style.position = 'absolute';\n _this.overlayContainer_.style.zIndex = '0';\n _this.overlayContainer_.style.width = '100%';\n _this.overlayContainer_.style.height = '100%';\n _this.overlayContainer_.style.pointerEvents = 'none';\n _this.overlayContainer_.className = 'ol-overlaycontainer';\n _this.viewport_.appendChild(_this.overlayContainer_);\n /**\n * @private\n * @type {!HTMLElement}\n */\n _this.overlayContainerStopEvent_ = document.createElement('div');\n _this.overlayContainerStopEvent_.style.position = 'absolute';\n _this.overlayContainerStopEvent_.style.zIndex = '0';\n _this.overlayContainerStopEvent_.style.width = '100%';\n _this.overlayContainerStopEvent_.style.height = '100%';\n _this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n _this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n _this.viewport_.appendChild(_this.overlayContainerStopEvent_);\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n _this.mapBrowserEventHandler_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.moveTolerance_ = options.moveTolerance;\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n _this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n /**\n * @private\n * @type {?Array}\n */\n _this.keyHandlerKeys_ = null;\n /**\n * @type {Collection}\n * @protected\n */\n _this.controls = optionsInternal.controls || new Collection();\n /**\n * @type {Collection}\n * @protected\n */\n _this.interactions = optionsInternal.interactions || new Collection();\n /**\n * @type {Collection}\n * @private\n */\n _this.overlays_ = optionsInternal.overlays;\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n _this.overlayIdIndex_ = {};\n /**\n * @type {import(\"./renderer/Map.js\").default}\n * @private\n */\n _this.renderer_ = null;\n /**\n * @type {undefined|function(Event): void}\n * @private\n */\n _this.handleResize_;\n /**\n * @private\n * @type {!Array}\n */\n _this.postRenderFunctions_ = [];\n /**\n * @private\n * @type {TileQueue}\n */\n _this.tileQueue_ = new TileQueue(_this.getTilePriority.bind(_this), _this.handleTileChange_.bind(_this));\n _this.addChangeListener(MapProperty.LAYERGROUP, _this.handleLayerGroupChanged_);\n _this.addChangeListener(MapProperty.VIEW, _this.handleViewChanged_);\n _this.addChangeListener(MapProperty.SIZE, _this.handleSizeChanged_);\n _this.addChangeListener(MapProperty.TARGET, _this.handleTargetChanged_);\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n _this.setProperties(optionsInternal.values);\n var map = _this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n _this.controls.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.controls.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(_this));\n _this.interactions.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.ADD, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(\n /** @type {import(\"./Overlay.js\").default} */ (event.element));\n }.bind(_this));\n _this.overlays_.addEventListener(CollectionEventType.REMOVE, \n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n var overlay = /** @type {import(\"./Overlay.js\").default} */ (event.element);\n var id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(_this));\n _this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {PluggableMap}\n */\n function (control) {\n control.setMap(this);\n }.bind(_this));\n _this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {PluggableMap}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(_this));\n _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this));\n return _this;\n }\n /**\n * @abstract\n * @return {import(\"./renderer/Map.js\").default} The map renderer\n */\n PluggableMap.prototype.createRenderer = function () {\n throw new Error('Use a map type that has a createRenderer method');\n };\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n PluggableMap.prototype.addControl = function (control) {\n this.getControls().push(control);\n };\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteraction()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n PluggableMap.prototype.addInteraction = function (interaction) {\n this.getInteractions().push(interaction);\n };\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n PluggableMap.prototype.addLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n };\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n PluggableMap.prototype.addOverlay = function (overlay) {\n this.getOverlays().push(overlay);\n };\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n PluggableMap.prototype.addOverlayInternal_ = function (overlay) {\n var id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n };\n /**\n *\n * Clean up.\n */\n PluggableMap.prototype.disposeInternal = function () {\n this.setTarget(null);\n _super.prototype.disposeInternal.call(this);\n };\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature feature} or\n * {@link module:ol/render/Feature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n PluggableMap.prototype.forEachFeatureAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);\n };\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n PluggableMap.prototype.getFeaturesAtPixel = function (pixel, opt_options) {\n var features = [];\n this.forEachFeatureAtPixel(pixel, function (feature) {\n features.push(feature);\n }, opt_options);\n return features;\n };\n /**\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n *\n * Note: this may give false positives unless the map layers have had different `className`\n * properties assigned to them.\n *\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {AtPixelOptions} [opt_options] Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n PluggableMap.prototype.forEachLayerAtPixel = function (pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n var options = opt_options || {};\n var hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance : 0;\n var layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(pixel, this.frameState_, hitTolerance, callback, layerFilter);\n };\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n PluggableMap.prototype.hasFeatureAtPixel = function (pixel, opt_options) {\n if (!this.frameState_) {\n return false;\n }\n var coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n var checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);\n };\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n PluggableMap.prototype.getEventCoordinate = function (event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n };\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n PluggableMap.prototype.getEventCoordinateInternal = function (event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n };\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n PluggableMap.prototype.getEventPixel = function (event) {\n var viewportPosition = this.viewport_.getBoundingClientRect();\n var eventPosition = \n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n };\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.getTarget = function () {\n return /** @type {HTMLElement|string|undefined} */ (this.get(MapProperty.TARGET));\n };\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n PluggableMap.prototype.getTargetElement = function () {\n var target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n }\n else {\n return null;\n }\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n PluggableMap.prototype.getCoordinateFromPixel = function (pixel) {\n return toUserCoordinate(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());\n };\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n PluggableMap.prototype.getCoordinateFromPixelInternal = function (pixel) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n };\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n PluggableMap.prototype.getControls = function () {\n return this.controls;\n };\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n PluggableMap.prototype.getOverlays = function () {\n return this.overlays_;\n };\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n PluggableMap.prototype.getOverlayById = function (id) {\n var overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n };\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n PluggableMap.prototype.getInteractions = function () {\n return this.interactions;\n };\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getLayerGroup = function () {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n };\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n PluggableMap.prototype.setLayers = function (layers) {\n var group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n var collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n };\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n PluggableMap.prototype.getLayers = function () {\n var layers = this.getLayerGroup().getLayers();\n return layers;\n };\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n PluggableMap.prototype.getLoading = function () {\n var layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n var layer = layerStatesArray[i].layer;\n var source = /** @type {import(\"./layer/Layer.js\").default} */ (layer).getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n PluggableMap.prototype.getPixelFromCoordinate = function (coordinate) {\n var viewCoordinate = fromUserCoordinate(coordinate, this.getView().getProjection());\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n };\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n PluggableMap.prototype.getPixelFromCoordinateInternal = function (coordinate) {\n var frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n else {\n return applyTransform(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n }\n };\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default} Renderer\n */\n PluggableMap.prototype.getRenderer = function () {\n return this.renderer_;\n };\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.getSize = function () {\n return /** @type {import(\"./size.js\").Size|undefined} */ (this.get(MapProperty.SIZE));\n };\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.getView = function () {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n };\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n PluggableMap.prototype.getViewport = function () {\n return this.viewport_;\n };\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n PluggableMap.prototype.getOverlayContainer = function () {\n return this.overlayContainer_;\n };\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n PluggableMap.prototype.getOverlayContainerStopEvent = function () {\n return this.overlayContainerStopEvent_;\n };\n /**\n * @return {!Document} The document where the map is displayed.\n */\n PluggableMap.prototype.getOwnerDocument = function () {\n var targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n };\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n PluggableMap.prototype.getTilePriority = function (tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(this.frameState_, tile, tileSourceKey, tileCenter, tileResolution);\n };\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [opt_type] Type.\n */\n PluggableMap.prototype.handleBrowserEvent = function (browserEvent, opt_type) {\n var type = opt_type || browserEvent.type;\n var mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n };\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n PluggableMap.prototype.handleMapBrowserEvent = function (mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n var originalEvent = /** @type {PointerEvent} */ (mapBrowserEvent.originalEvent);\n var eventType = originalEvent.type;\n if (eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN) {\n var doc = this.getOwnerDocument();\n var rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n var target = /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n var interactionsArray = this.getInteractions().getArray().slice();\n for (var i = interactionsArray.length - 1; i >= 0; i--) {\n var interaction = interactionsArray[i];\n if (interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()) {\n continue;\n }\n var cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n };\n /**\n * @protected\n */\n PluggableMap.prototype.handlePostRender = function () {\n var frameState = this.frameState_;\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n var tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n var maxTotalLoading = this.maxTilesLoading_;\n var maxNewLoads = maxTotalLoading;\n if (frameState) {\n var hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n var lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n if (frameState &&\n this.hasListener(RenderEventType.RENDERCOMPLETE) &&\n !frameState.animate &&\n !this.tileQueue_.getTilesLoading() &&\n !this.getLoading()) {\n this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState);\n }\n var postRenderFunctions = this.postRenderFunctions_;\n for (var i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleSizeChanged_ = function () {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTargetChanged_ = function () {\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n var targetElement;\n if (this.getTarget()) {\n targetElement = this.getTargetElement();\n }\n if (this.mapBrowserEventHandler_) {\n for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.keyHandlerKeys_[i]);\n }\n this.keyHandlerKeys_ = null;\n this.viewport_.removeEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_);\n this.viewport_.removeEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_);\n if (this.handleResize_ !== undefined) {\n removeEventListener(EventType.RESIZE, this.handleResize_, false);\n this.handleResize_ = undefined;\n }\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n }\n else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(this, this.moveTolerance_);\n for (var key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(MapBrowserEventType[key], this.handleMapBrowserEvent.bind(this));\n }\n this.viewport_.addEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_, false);\n this.viewport_.addEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_, PASSIVE_EVENT_LISTENERS ? { passive: false } : false);\n var keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.keyHandlerKeys_ = [\n listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this),\n ];\n if (!this.handleResize_) {\n this.handleResize_ = this.updateSize.bind(this);\n window.addEventListener(EventType.RESIZE, this.handleResize_, false);\n }\n }\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleTileChange_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewPropertyChanged_ = function () {\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleViewChanged_ = function () {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n var view = this.getView();\n if (view) {\n this.updateViewportSize_();\n this.viewPropertyListenerKey_ = listen(view, ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, this);\n this.viewChangeListenerKey_ = listen(view, EventType.CHANGE, this.handleViewPropertyChanged_, this);\n view.resolveConstraints(0);\n }\n this.render();\n };\n /**\n * @private\n */\n PluggableMap.prototype.handleLayerGroupChanged_ = function () {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n var layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n ];\n }\n this.render();\n };\n /**\n * @return {boolean} Is rendered.\n */\n PluggableMap.prototype.isRendered = function () {\n return !!this.frameState_;\n };\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n PluggableMap.prototype.renderSync = function () {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n };\n /**\n * Redraws all text after new fonts have loaded\n */\n PluggableMap.prototype.redrawText = function () {\n var layerStates = this.getLayerGroup().getLayerStatesArray();\n for (var i = 0, ii = layerStates.length; i < ii; ++i) {\n var layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n };\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n PluggableMap.prototype.render = function () {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n };\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n PluggableMap.prototype.removeControl = function (control) {\n return this.getControls().remove(control);\n };\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n PluggableMap.prototype.removeInteraction = function (interaction) {\n return this.getInteractions().remove(interaction);\n };\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n PluggableMap.prototype.removeLayer = function (layer) {\n var layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n };\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n PluggableMap.prototype.removeOverlay = function (overlay) {\n return this.getOverlays().remove(overlay);\n };\n /**\n * @param {number} time Time.\n * @private\n */\n PluggableMap.prototype.renderFrame_ = function (time) {\n var _this = this;\n var size = this.getSize();\n var view = this.getView();\n var previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n var frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n var viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(viewState.center, viewState.resolution, viewState.rotation, size),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n var rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n frameState.nextExtent = getForViewAndSize(viewState.nextCenter, viewState.nextResolution, rotation, size);\n }\n }\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n if (previousFrameState) {\n var moveStart = !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVESTART, this, previousFrameState));\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n var idle = this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n if (idle) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVEEND, this, frameState));\n clone(frameState.extent, this.previousExtent_);\n }\n }\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(function () {\n _this.postRenderTimeoutHandle_ = undefined;\n _this.handlePostRender();\n }, 0);\n }\n };\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n PluggableMap.prototype.setLayerGroup = function (layerGroup) {\n this.set(MapProperty.LAYERGROUP, layerGroup);\n };\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n PluggableMap.prototype.setSize = function (size) {\n this.set(MapProperty.SIZE, size);\n };\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n PluggableMap.prototype.setTarget = function (target) {\n this.set(MapProperty.TARGET, target);\n };\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n PluggableMap.prototype.setView = function (view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n var map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n };\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n PluggableMap.prototype.updateSize = function () {\n var targetElement = this.getTargetElement();\n var size = undefined;\n if (targetElement) {\n var computedStyle = getComputedStyle(targetElement);\n var width = targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n var height = targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (!hasArea(size) &&\n !!(targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length)) {\n // eslint-disable-next-line\n console.warn(\"No map visible because the map container's width or height are 0.\");\n }\n }\n }\n this.setSize(size);\n this.updateViewportSize_();\n };\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n PluggableMap.prototype.updateViewportSize_ = function () {\n var view = this.getView();\n if (view) {\n var size = undefined;\n var computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n };\n return PluggableMap;\n}(BaseObject));\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n var keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n /**\n * @type {Object}\n */\n var values = {};\n var layerGroup = options.layers &&\n typeof ( /** @type {?} */(options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({ layers: /** @type {Collection} */ (options.layers) });\n values[MapProperty.LAYERGROUP] = layerGroup;\n values[MapProperty.TARGET] = options.target;\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n var controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.controls).getArray) === 'function', 47); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = /** @type {Collection} */ (options.controls);\n }\n }\n var interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.interactions).getArray) ===\n 'function', 48); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = /** @type {Collection} */ (options.interactions);\n }\n }\n var overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n }\n else {\n assert(typeof ( /** @type {?} */(options.overlays).getArray) === 'function', 49); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n }\n else {\n overlays = new Collection();\n }\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default PluggableMap;\n//# sourceMappingURL=PluggableMap.js.map","/**\n * @module ol/interaction/Property\n */\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n//# sourceMappingURL=Property.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport { easeOut, linear } from '../easing.js';\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} InteractionOnSignature\n */\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nvar Interaction = /** @class */ (function (_super) {\n __extends(Interaction, _super);\n /**\n * @param {InteractionOptions} [opt_options] Options.\n */\n function Interaction(opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {InteractionOnSignature}\n */\n _this.on;\n /***\n * @type {InteractionOnSignature}\n */\n _this.once;\n /***\n * @type {InteractionOnSignature}\n */\n _this.un;\n if (opt_options && opt_options.handleEvent) {\n _this.handleEvent = opt_options.handleEvent;\n }\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n _this.map_ = null;\n _this.setActive(true);\n return _this;\n }\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n Interaction.prototype.getActive = function () {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n };\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../PluggableMap.js\").default} Map.\n * @api\n */\n Interaction.prototype.getMap = function () {\n return this.map_;\n };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n Interaction.prototype.handleEvent = function (mapBrowserEvent) {\n return true;\n };\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n Interaction.prototype.setActive = function (active) {\n this.set(InteractionProperty.ACTIVE, active);\n };\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n Interaction.prototype.setMap = function (map) {\n this.map_ = map;\n };\n return Interaction;\n}(BaseObject));\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [opt_duration] Duration.\n */\nexport function pan(view, delta, opt_duration) {\n var currentCenter = view.getCenterInternal();\n if (currentCenter) {\n var center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] Anchor coordinate in the user projection.\n * @param {number} [opt_duration] Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n var currentZoom = view.getZoom();\n if (currentZoom === undefined) {\n return;\n }\n var newZoom = view.getConstrainedZoom(currentZoom + delta);\n var newResolution = view.getResolutionForZoom(newZoom);\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: opt_anchor,\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: easeOut,\n });\n}\nexport default Interaction;\n//# sourceMappingURL=Interaction.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, { zoomByDelta } from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nvar DoubleClickZoom = /** @class */ (function (_super) {\n __extends(DoubleClickZoom, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function DoubleClickZoom(opt_options) {\n var _this = _super.call(this) || this;\n var options = opt_options ? opt_options : {};\n /**\n * @private\n * @type {number}\n */\n _this.delta_ = options.delta ? options.delta : 1;\n /**\n * @private\n * @type {number}\n */\n _this.duration_ = options.duration !== undefined ? options.duration : 250;\n return _this;\n }\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n DoubleClickZoom.prototype.handleEvent = function (mapBrowserEvent) {\n var stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n var browserEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n var map = mapBrowserEvent.map;\n var anchor = mapBrowserEvent.coordinate;\n var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n var view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n };\n return DoubleClickZoom;\n}(Interaction));\nexport default DoubleClickZoom;\n//# sourceMappingURL=DoubleClickZoom.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { getValues } from '../obj.js';\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nvar PointerInteraction = /** @class */ (function (_super) {\n __extends(PointerInteraction, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function PointerInteraction(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, \n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)) || this;\n if (options.handleDownEvent) {\n _this.handleDownEvent = options.handleDownEvent;\n }\n if (options.handleDragEvent) {\n _this.handleDragEvent = options.handleDragEvent;\n }\n if (options.handleMoveEvent) {\n _this.handleMoveEvent = options.handleMoveEvent;\n }\n if (options.handleUpEvent) {\n _this.handleUpEvent = options.handleUpEvent;\n }\n if (options.stopDown) {\n _this.stopDown = options.stopDown;\n }\n /**\n * @type {boolean}\n * @protected\n */\n _this.handlingDownUpSequence = false;\n /**\n * @type {!Object}\n * @private\n */\n _this.trackedPointers_ = {};\n /**\n * @type {Array}\n * @protected\n */\n _this.targetPointers = [];\n return _this;\n }\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n PointerInteraction.prototype.getPointerCount = function () {\n return this.targetPointers.length;\n };\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n PointerInteraction.prototype.handleDownEvent = function (mapBrowserEvent) {\n return false;\n };\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n PointerInteraction.prototype.handleDragEvent = function (mapBrowserEvent) { };\n /**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n PointerInteraction.prototype.handleEvent = function (mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n var stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n var handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n }\n else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n var handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n };\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n PointerInteraction.prototype.handleMoveEvent = function (mapBrowserEvent) { };\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n PointerInteraction.prototype.handleUpEvent = function (mapBrowserEvent) {\n return false;\n };\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n PointerInteraction.prototype.stopDown = function (handled) {\n return handled;\n };\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n PointerInteraction.prototype.updateTrackedPointers_ = function (mapBrowserEvent) {\n if (isPointerDraggingEvent(mapBrowserEvent)) {\n var event_1 = mapBrowserEvent.originalEvent;\n var id = event_1.pointerId.toString();\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n delete this.trackedPointers_[id];\n }\n else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedPointers_[id] = event_1;\n }\n else if (id in this.trackedPointers_) {\n // update only when there was a pointerdown event for this pointer\n this.trackedPointers_[id] = event_1;\n }\n this.targetPointers = getValues(this.trackedPointers_);\n }\n };\n return PointerInteraction;\n}(Interaction));\n/**\n * @param {Array} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n var length = pointerEvents.length;\n var clientX = 0;\n var clientY = 0;\n for (var i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return [clientX / length, clientY / length];\n}\n/**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} Whether the event is a pointerdown, pointerdrag\n * or pointerup event.\n */\nfunction isPointerDraggingEvent(mapBrowserEvent) {\n var type = mapBrowserEvent.type;\n return (type === MapBrowserEventType.POINTERDOWN ||\n type === MapBrowserEventType.POINTERDRAG ||\n type === MapBrowserEventType.POINTERUP);\n}\nexport default PointerInteraction;\n//# sourceMappingURL=Pointer.js.map","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport { FALSE, TRUE } from '../functions.js';\nimport { MAC, WEBKIT } from '../has.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n var conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n var pass = true;\n for (var i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport var altKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport var altShiftKeysOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport var focus = function (event) {\n return event.target.getTargetElement().contains(document.activeElement);\n};\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport var focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport var always = TRUE;\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport var click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport var mouseActionButton = function (mapBrowserEvent) {\n var originalEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent);\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport var never = FALSE;\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport var pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport var singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport var doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport var noModifierKeys = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport var platformModifierKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport var shiftKeyOnly = function (mapBrowserEvent) {\n var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent);\n return (!originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n/**\n * Return `true` if the target element is not editable, i.e. not a ``-,\n * `