{"version":3,"sources":["webpack:///./src/components/organisms/Slides/Slide1.vue?3006","webpack:///./node_modules/core-js/internals/native-url.js","webpack:///./src/components/organisms/Map/Location.vue?620e","webpack:///./node_modules/rbush/rbush.min.js","webpack:///./src/components/atoms/Form/Switch.vue?1afd","webpack:///./node_modules/core-js/modules/web.url.js","webpack:///./src/components/molecules/Titles/FilterBox.vue?f3a7","webpack:///./src/components/atoms/Accordion/Accordion.vue?30c2","webpack:///./src/components/organisms/Map/Legend.vue?4d97","webpack:///./node_modules/core-js/modules/es.string.replace-all.js","webpack:///./src/components/organisms/Slides/Slider.vue?a7c5","webpack:///./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///./src/components/molecules/Accordion/List.vue?c80b","webpack:///./node_modules/core-js/modules/web.url-search-params.js","webpack:///./src/components/molecules/Titles/LegendBox.vue?799a","webpack:///./src/components/organisms/Map/Filters/Items.vue?ed78","webpack:///./node_modules/core-js/internals/array-sort.js","webpack:///./src/components/organisms/Map/Filters.vue?1f22","webpack:///./src/components/templates/Map/Map.vue?9197","webpack:///./src/components/atoms/Badge.vue?f87c","webpack:///./src/components/atoms/Form/SwitchTwoLabels.vue?939e","webpack:///./src/components/molecules/Slide/Slide.vue?677a","webpack:///./src/components/molecules/Legend/Item.vue?a50e","webpack:///./src/components/organisms/Map/OpenLayer.vue?782f","webpack:///./src/components/pages/Map.vue","webpack:///./src/components/templates/Map/Map.vue","webpack:///./src/components/organisms/Map/Filters.vue","webpack:///./src/components/organisms/Map/Filters/FilterCounterTotal.vue","webpack:///./src/components/molecules/Badge/CounterTotal.vue","webpack:///./src/components/atoms/Badge.vue","webpack:///./src/components/atoms/Badge.vue?b498","webpack:///./src/components/molecules/Badge/CounterTotal.vue?e258","webpack:///./src/components/organisms/Map/Filters/FilterCounterTotal.vue?ef3a","webpack:///./src/components/molecules/Accordion/List.vue","webpack:///./src/components/molecules/Accordion/ListNode.vue","webpack:///./src/components/molecules/Accordion/ListNode.vue?7479","webpack:///./src/components/molecules/Accordion/List.vue?dcc5","webpack:///./src/components/organisms/Map/Filters/Items.vue","webpack:///./src/components/atoms/Form/Switch.vue","webpack:///./src/components/atoms/Form/Switch.vue?e166","webpack:///./src/components/atoms/Form/SwitchTwoLabels.vue","webpack:///./src/components/atoms/Form/SwitchTwoLabels.vue?8894","webpack:///./src/components/atoms/Accordion/Item.vue","webpack:///./src/components/atoms/Accordion/Item.vue?f97b","webpack:///./src/components/organisms/Map/Filters/FilterCounter.vue","webpack:///./src/components/molecules/Badge/Counter.vue","webpack:///./src/components/molecules/Badge/Counter.vue?f6ec","webpack:///./src/components/organisms/Map/Filters/FilterCounter.vue?ba06","webpack:///./src/components/organisms/Map/Filters/Items.vue?e0b2","webpack:///./src/components/molecules/Titles/FilterBox.vue","webpack:///./src/components/molecules/Titles/FilterBox.vue?3698","webpack:///./src/components/atoms/Accordion/Accordion.vue","webpack:///./src/components/atoms/Accordion/Accordion.vue?b259","webpack:///./src/components/organisms/Map/Filters.vue?08ec","webpack:///./src/components/organisms/Map/Legend.vue","webpack:///./src/components/molecules/Titles/LegendBox.vue","webpack:///./src/components/molecules/Titles/LegendBox.vue?1227","webpack:///./src/components/molecules/Legend/Item.vue","webpack:///./src/components/molecules/Legend/Item.vue?1290","webpack:///./src/components/organisms/Map/Legend.vue?9c2b","webpack:///./src/components/organisms/Map/Location.vue","webpack:///./src/components/molecules/Thypeaheads/Cities.vue","webpack:///./src/components/molecules/Thypeaheads/Cities.vue?264b","webpack:///./node_modules/ol/util.js","webpack:///./node_modules/ol/AssertionError.js","webpack:///./node_modules/ol/events/Event.js","webpack:///./node_modules/ol/ObjectEventType.js","webpack:///./node_modules/ol/Disposable.js","webpack:///./node_modules/ol/array.js","webpack:///./node_modules/ol/functions.js","webpack:///./node_modules/ol/obj.js","webpack:///./node_modules/ol/events/Target.js","webpack:///./node_modules/ol/events/EventType.js","webpack:///./node_modules/ol/events.js","webpack:///./node_modules/ol/Observable.js","webpack:///./node_modules/ol/Object.js","webpack:///./node_modules/ol/CollectionEventType.js","webpack:///./node_modules/ol/Collection.js","webpack:///./node_modules/ol/extent/Corner.js","webpack:///./node_modules/ol/extent/Relationship.js","webpack:///./node_modules/ol/asserts.js","webpack:///./node_modules/ol/extent.js","webpack:///./node_modules/ol/structs/RBush.js","webpack:///./node_modules/ol/source/State.js","webpack:///./node_modules/ol/proj/Units.js","webpack:///./node_modules/ol/proj/Projection.js","webpack:///./node_modules/ol/math.js","webpack:///./node_modules/ol/proj/epsg3857.js","webpack:///./node_modules/ol/proj/epsg4326.js","webpack:///./node_modules/ol/proj/projections.js","webpack:///./node_modules/ol/proj/transforms.js","webpack:///./node_modules/ol/geom/GeometryType.js","webpack:///./node_modules/ol/sphere.js","webpack:///./node_modules/ol/string.js","webpack:///./node_modules/ol/coordinate.js","webpack:///./node_modules/ol/proj.js","webpack:///./node_modules/ol/source/Source.js","webpack:///./node_modules/ol/source/VectorEventType.js","webpack:///./node_modules/ol/loadingstrategy.js","webpack:///./node_modules/ol/format/FormatType.js","webpack:///./node_modules/ol/featureloader.js","webpack:///./node_modules/ol/source/Vector.js","webpack:///./node_modules/ol/Feature.js","webpack:///./node_modules/ol/transform.js","webpack:///./node_modules/ol/has.js","webpack:///./node_modules/ol/geom/flat/transform.js","webpack:///./node_modules/ol/geom/Geometry.js","webpack:///./node_modules/ol/geom/GeometryCollection.js","webpack:///./node_modules/ol/format/Feature.js","webpack:///./node_modules/ol/format/JSONFeature.js","webpack:///./node_modules/ol/geom/GeometryLayout.js","webpack:///./node_modules/ol/geom/SimpleGeometry.js","webpack:///./node_modules/ol/geom/flat/closest.js","webpack:///./node_modules/ol/geom/flat/deflate.js","webpack:///./node_modules/ol/geom/flat/simplify.js","webpack:///./node_modules/ol/geom/flat/segments.js","webpack:///./node_modules/ol/geom/flat/inflate.js","webpack:///./node_modules/ol/geom/flat/interpolate.js","webpack:///./node_modules/ol/geom/flat/contains.js","webpack:///./node_modules/ol/geom/flat/intersectsextent.js","webpack:///./node_modules/ol/geom/flat/length.js","webpack:///./node_modules/ol/geom/LineString.js","webpack:///./node_modules/ol/geom/MultiLineString.js","webpack:///./node_modules/ol/geom/Point.js","webpack:///./node_modules/ol/geom/MultiPoint.js","webpack:///./node_modules/ol/geom/flat/area.js","webpack:///./node_modules/ol/geom/LinearRing.js","webpack:///./node_modules/ol/geom/flat/interiorpoint.js","webpack:///./node_modules/ol/geom/flat/reverse.js","webpack:///./node_modules/ol/geom/flat/orient.js","webpack:///./node_modules/ol/geom/Polygon.js","webpack:///./node_modules/ol/geom/flat/center.js","webpack:///./node_modules/ol/geom/MultiPolygon.js","webpack:///./node_modules/ol/format/GeoJSON.js","webpack:///./node_modules/ol/ImageState.js","webpack:///./node_modules/ol/size.js","webpack:///./node_modules/ol/style/Image.js","webpack:///./node_modules/ol/color.js","webpack:///./node_modules/ol/colorlike.js","webpack:///./node_modules/ol/dom.js","webpack:///./node_modules/ol/css.js","webpack:///./node_modules/ol/render/canvas.js","webpack:///./node_modules/ol/style/RegularShape.js","webpack:///./node_modules/ol/style/Circle.js","webpack:///./node_modules/ol/style/Fill.js","webpack:///./node_modules/ol/style/Stroke.js","webpack:///./node_modules/ol/style/Style.js","webpack:///./node_modules/ol/layer/Property.js","webpack:///./node_modules/ol/layer/Base.js","webpack:///./node_modules/ol/render/EventType.js","webpack:///./node_modules/ol/layer/Layer.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/style/TextPlacement.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/renderer/Layer.js","webpack:///./node_modules/ol/render/Event.js","webpack:///./node_modules/ol/renderer/canvas/Layer.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/ViewHint.js","webpack:///./node_modules/ol/render/canvas/Immediate.js","webpack:///./node_modules/ol/style/IconAnchorUnits.js","webpack:///./node_modules/ol/style/IconOrigin.js","webpack:///./node_modules/ol/style/IconImageCache.js","webpack:///./node_modules/ol/ImageBase.js","webpack:///./node_modules/ol/Image.js","webpack:///./node_modules/ol/style/IconImage.js","webpack:///./node_modules/ol/style/Icon.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/easing.js","webpack:///./src/components/organisms/Map/Location.vue?fc85","webpack:///./src/components/organisms/Slides/Slider.vue","webpack:///./src/components/atoms/Modals/Modal.vue","webpack:///./src/components/atoms/Modals/Modal.vue?c4f0","webpack:///./src/components/organisms/Slides/Slide1.vue","webpack:///./src/components/molecules/Slide/Slide.vue","webpack:///./src/components/atoms/CloseButton.vue","webpack:///./src/components/atoms/CloseButton.vue?c7ef","webpack:///./src/components/molecules/Links/SeeAll.vue","webpack:///./src/components/molecules/Links/SeeAll.vue?88ef","webpack:///./src/components/molecules/Slide/Slide.vue?84be","webpack:///./src/components/molecules/Charts/DoughnutDeficitAppHa.vue","webpack:///./src/components/molecules/Charts/DoughnutDeficitAppHa.vue?4fdb","webpack:///./src/components/molecules/Charts/DoughnutDeficitRLHa.vue","webpack:///./src/components/molecules/Charts/DoughnutDeficitRLHa.vue?bac9","webpack:///./src/components/organisms/Slides/Slide1.vue?fe1f","webpack:///./src/components/organisms/Slides/Slide2.vue","webpack:///./src/components/organisms/Slides/Slide2.vue?35d9","webpack:///./src/components/organisms/Slides/Slider.vue?7ccf","webpack:///./src/components/organisms/Map/OpenLayer.vue","webpack:///./node_modules/ol/ViewProperty.js","webpack:///./node_modules/ol/tilegrid/common.js","webpack:///./node_modules/ol/centerconstraint.js","webpack:///./node_modules/ol/resolutionconstraint.js","webpack:///./node_modules/ol/rotationconstraint.js","webpack:///./node_modules/ol/View.js","webpack:///./node_modules/ol/renderer/Map.js","webpack:///./node_modules/ol/renderer/Composite.js","webpack:///./node_modules/ol/layer/Group.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/MapEventType.js","webpack:///./node_modules/ol/MapProperty.js","webpack:///./node_modules/ol/structs/PriorityQueue.js","webpack:///./node_modules/ol/TileState.js","webpack:///./node_modules/ol/TileQueue.js","webpack:///./node_modules/ol/PluggableMap.js","webpack:///./node_modules/ol/control/Control.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/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/source/common.js","webpack:///./node_modules/ol/Tile.js","webpack:///./node_modules/ol/ImageTile.js","webpack:///./node_modules/ol/reproj.js","webpack:///./node_modules/ol/reproj/common.js","webpack:///./node_modules/ol/reproj/Triangulation.js","webpack:///./node_modules/ol/renderer/canvas/common.js","webpack:///./node_modules/ol/reproj/Tile.js","webpack:///./node_modules/ol/structs/LRUCache.js","webpack:///./node_modules/ol/tilecoord.js","webpack:///./node_modules/ol/TileCache.js","webpack:///./node_modules/ol/source/TileEventType.js","webpack:///./node_modules/ol/TileRange.js","webpack:///./node_modules/ol/tilegrid/TileGrid.js","webpack:///./node_modules/ol/tilegrid.js","webpack:///./node_modules/ol/source/Tile.js","webpack:///./node_modules/ol/tileurlfunction.js","webpack:///./node_modules/ol/source/UrlTile.js","webpack:///./node_modules/ol/source/TileImage.js","webpack:///./node_modules/ol/source/WMSServerType.js","webpack:///./node_modules/ol/uri.js","webpack:///./node_modules/ol/source/TileWMS.js","webpack:///./node_modules/ol/layer/TileProperty.js","webpack:///./node_modules/ol/layer/BaseTile.js","webpack:///./node_modules/ol/renderer/canvas/TileLayer.js","webpack:///./node_modules/ol/layer/Tile.js","webpack:///./src/components/atoms/Map/Layer.vue","webpack:///./src/components/atoms/Map/Layer.vue?7e66","webpack:///./node_modules/ol/source/XYZ.js","webpack:///./node_modules/ol/source/OSM.js","webpack:///./src/components/organisms/Map/OpenLayer.vue?9713","webpack:///./src/components/templates/Map/Map.vue?09fe","webpack:///./src/components/pages/Map.vue?2b3b"],"names":["fails","wellKnownSymbol","IS_PURE","ITERATOR","module","exports","url","URL","searchParams","result","pathname","forEach","value","key","toJSON","sort","href","get","String","URLSearchParams","username","host","hash","undefined","t","i","this","r","e","a","h","n","o","s","l","Math","log","f","exp","u","sqrt","m","max","floor","c","min","p","d","x","length","_maxEntries","_minEntries","ceil","clear","indexOf","children","minX","minY","maxX","maxY","leaf","height","pop","push","prototype","all","_all","data","search","toBBox","collides","load","insert","_build","slice","_splitRoot","_insert","remove","splice","_condense","compareMinX","compareMinY","fromJSON","apply","pow","_chooseSubtree","_split","_adjustParentBBoxes","_chooseSplitAxis","_chooseSplitIndex","v","M","_allDistMargin","EOF","$","DESCRIPTORS","USE_NATIVE_URL","global","bind","uncurryThis","defineProperties","redefine","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","charAt","exec","join","numberToString","toString","replace","shift","split","stringSlice","toLowerCase","unshift","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseIPv4","input","partsLength","numbers","index","part","radix","number","ipv4","parts","parseIPv6","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","chr","findLongestZeroSequence","ipv6","maxIndex","maxLength","currStart","currLength","serializeHost","ignore0","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","string","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","base","baseState","failure","urlString","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","buffer","seenAt","seenBracket","seenPasswordToken","scheme","password","port","path","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","cannotHaveUsernamePasswordPort","pathSize","serialize","output","setHref","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","arguments","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","forced","sham","call","requireObjectCoercible","isCallable","isRegExp","getMethod","regExpFlags","getSubstitution","REPLACE","RegExpPrototype","RegExp","getFlags","stringIndexOf","searchValue","fromIndex","target","proto","replaceAll","replaceValue","IS_REG_EXP","flags","replacer","searchString","functionalReplace","searchLength","advanceBy","replacement","O","position","endOfLastMatch","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","RangeError","fromCharCode","charCodeAt","ucs2decode","counter","extra","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","encode","currentValue","inputLength","bias","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","baseMinusT","label","encoded","labels","getBuiltIn","redefineAll","createIteratorConstructor","classof","anObject","isObject","create","createPropertyDescriptor","getIterator","getIteratorMethod","arraySort","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","n$Fetch","N$Request","Headers","RequestPrototype","HeadersPrototype","decodeURIComponent","plus","sequences","Array","percentSequence","bytes","percentDecode","sequence","deserialize","it","find","replacements","match","validateArgumentsLength","passed","required","URLSearchParamsIterator","params","kind","iterator","entries","step","next","entry","done","URLSearchParamsState","init","parseObject","parseQuery","object","entryIterator","entryNext","first","iteratorMethod","attribute","attributes","updateURL","URLSearchParamsConstructor","URLSearchParamsPrototype","append","name","getAll","has","found","val","b","callback","boundFunction","keys","values","headersHas","headersSet","wrapRequestOptions","headers","body","fetch","RequestConstructor","constructor","Request","mergeSort","array","comparefn","middle","insertionSort","merge","element","j","left","right","llength","rlength","lindex","rindex","class","loadingStatus","olMap","cd_mun","cd_uf","mun_uf_name","id","data-bs-toggle","data-bs-target","aria-expanded","aria-controls","aria-labelledby","data-bs-parent","accordionItem","resetFilters","list","getFilters","node","slotProps","count","Count","content","$t","__exports__","components","Badge","props","Number","Counter","mounted","emitter","on","filterChanged","methods","noCounter","checked","nodeComputed","Object","subitems","subitem","computed","ListNode","accordionId","itemBody","subitemBody","$event","ref","label2","value2","for","default","$refs","$emit","NodeElm","document","querySelector","searchForFilter","IsChecked","elm","DefaultValue","Checkbox","Item","Radio","Switch","SwitchTwoLabels","created","reset","emit","Title","List","TitleFilterBox","Accordion","Link","CounterTotal","Items","style","loading","legendsJson","endpoint","layer","display","group","groupStyle","Boolean","getLegendList","loadingStatusLegend","getLegend","addLegendPng","imgBlob","img","createElement","src","getElementById","$props","$store","dispatch","then","response","TitleLegendBox","getImport","toggleLegend","event","displayMode","groupId","legendItems","getElementsByClassName","item","getAttribute","checkboxId","fitStateZoom","fitCityZoom","siglaUf","sigla_uf","actionHandler","handler","actionDeselect","deselected","options","formatedCities","currentCdMun","selectedId","placeholder","inputId","vSelect","emits","states","cities","getFormatedCities","watch","newVal","filterCitiesByCdUf","filter","city","Error","uidCounter_","getUid","obj","ol_uid","VERSION","__extends","extendStatics","setPrototypeOf","__proto__","hasOwnProperty","__","_super","AssertionError","_this","message","BaseEvent","propagationStopped","defaultPrevented","preventDefault","stopPropagation","PROPERTYCHANGE","Disposable","disposed","dispose","disposeInternal","binarySearch","haystack","needle","opt_comparator","mid","cmp","comparator","numberSafeCompareFunction","low","high","linearFindNearest","arr","direction","reverseSubArray","begin","end","tmp","extend","extension","isArray","equals","arr1","arr2","len1","isSorted","opt_func","opt_strict","compare","every","currentVal","res","TRUE","FALSE","VOID","memoizeOne","fn","lastResult","lastArgs","lastThis","called","nextArgs","var_sources","ii","source","property","getValues","isEmpty","Target","opt_target","eventTarget_","pendingRemovals_","dispatching_","listeners_","addEventListener","listener","listeners","listenersForType","dispatchEvent","evt","Event","propagate","dispatching","pendingRemovals","handleEvent","pr","removeEventListener","getListeners","hasListener","opt_type","CHANGE","ERROR","BLUR","CLEAR","CONTEXTMENU","CLICK","DBLCLICK","DRAGENTER","DRAGOVER","DROP","FOCUS","KEYDOWN","KEYPRESS","LOAD","RESIZE","TOUCHMOVE","WHEEL","listen","opt_this","opt_once","originalListener_1","eventsKey","listenOnce","unlistenByKey","Observable","once","un","revision_","changed","EventType","getRevision","onInternal","len","onceInternal","ol_key","unInternal","unByKey","ObjectEvent","oldValue","BaseObject","opt_values","values_","setProperties","getKeys","getProperties","hasProperties","notify","eventType","ObjectEventType","addChangeListener","removeChangeListener","opt_silent","applyProperties","unset","ADD","REMOVE","Property","LENGTH","CollectionEvent","opt_element","opt_index","Collection","opt_array","opt_options","unique_","unique","array_","assertUnique_","updateLength_","getLength","getArray","insertAt","elem","CollectionEventType","removeAt","prev","setAt","opt_except","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNKNOWN","INTERSECTING","ABOVE","RIGHT","BELOW","LEFT","assert","assertion","errorCode","boundingExtent","coordinates","extent","createEmpty","extendCoordinate","_boundingExtentXYs","xs","ys","opt_extent","createOrUpdate","clone","closestSquaredDistanceXY","y","dx","dy","containsCoordinate","coordinate","containsXY","containsExtent","extent1","extent2","coordinateRelationship","relationship","Relationship","Infinity","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromFlatCoordinates","flatCoordinates","offset","stride","extendFlatCoordinates","extendXY","forEachCorner","getBottomLeft","getBottomRight","getTopRight","getTopLeft","getArea","area","getWidth","getHeight","getCenter","getCorner","corner","Corner","getForViewAndSize","center","resolution","rotation","size","cosRotation","cos","sinRotation","sin","xCos","xSin","yCos","ySin","x0","x1","x2","x3","y0","y1","y2","y3","getIntersection","intersection","returnOrUpdate","intersectsSegment","start","intersects","startRel","endRel","startX","startY","endX","endY","slope","applyTransform","transformFn","opt_stops","width","wrapX","projection","projectionExtent","getExtent","canWrapX","worldWidth","worldsAway","RBush","opt_maxEntries","rbush_","items_","extents","items","uid","bbox","map","getInExtent","forEach_","forEachInExtent","concat","rbush","UNDEFINED","LOADING","READY","Units","RADIANS","DEGREES","FEET","METERS","PIXELS","TILE_PIXELS","USFEET","METERS_PER_UNIT","PI","Projection","code_","units_","extent_","worldExtent_","worldExtent","axisOrientation_","axisOrientation","global_","canWrapX_","getPointResolutionFunc_","getPointResolution","defaultTileGrid_","metersPerUnit_","metersPerUnit","getCode","getUnits","getMetersPerUnit","getWorldExtent","getAxisOrientation","isGlobal","setGlobal","getDefaultTileGrid","setDefaultTileGrid","tileGrid","setExtent","setWorldExtent","setGetPointResolution","func","getPointResolutionFunc","clamp","cosh","log2","LOG2E","squaredSegmentDistance","solveLinearSystem","mat","maxRow","maxEl","abs","absValue","coef","toRadians","angleInDegrees","modulo","lerp","toFixed","decimals","factor","round","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","MAX_SAFE_Y","tan","EPSG3857Projection","units","point","PROJECTIONS","fromEPSG4326","opt_output","opt_dimension","dimension","toEPSG4326","atan","EPSG4326Projection","opt_axisOrientation","destination","sourceCode","destinationCode","transform","POINT","LINE_STRING","LINEAR_RING","POLYGON","MULTI_POINT","MULTI_LINE_STRING","MULTI_POLYGON","GEOMETRY_COLLECTION","CIRCLE","DEFAULT_RADIUS","getDistance","c1","c2","opt_radius","radius","lat1","lat2","deltaLatBy2","deltaLonBy2","atan2","compareVersions","v1","v2","s1","s2","n1","n2","coordinate1","coordinate2","rotate","angle","cosAngle","sinAngle","scale","getWorldsAway","opt_sourceExtentWidth","sourceExtentWidth","cloneTransform","identityTransform","addProjection","addProjections","projections","projectionLike","opt_units","pointResolution","toEPSG4326_1","getTransformFromProjections","vertices","addEquivalentProjections","addEquivalentTransforms","projections1","projections2","forwardTransform","inverseTransform","projection1","projection2","createProjection","defaultCode","equivalent","equalUnits","transformFunc","sourceProjection","destinationProjection","getTransform","transformExtent","getUserProjection","toUserCoordinate","fromUserCoordinate","destProjection","toUserExtent","fromUserExtent","toUserResolution","sourceUnits","userUnits","addCommon","Source","attributions_","adaptAttributions","attributions","attributionsCollapsible_","attributionsCollapsible","state_","wrapX_","interpolate_","interpolate","viewResolver","viewRejector","self","viewPromise_","Promise","resolve","reject","getAttributions","getAttributionsCollapsible","getProjection","getResolutions","getView","getWrapX","getInterpolate","refresh","setAttributions","setState","attributionLike","frameState","ADDFEATURE","CHANGEFEATURE","REMOVEFEATURE","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","ARRAY_BUFFER","JSON","TEXT","XML","withCredentials","loadFeaturesXhr","format","success","xhr","XMLHttpRequest","open","getType","FormatType","responseType","onload","status","responseText","responseXML","DOMParser","parseFromString","readFeatures","featureProjection","readProjection","onerror","send","features","dataProjection","addFeatures","VectorSourceEvent","opt_feature","opt_features","feature","VectorSource","loader_","format_","overlaps_","overlaps","url_","loader","strategy_","strategy","collection","useSpatialIndex","featuresRtree_","loadedExtentsRtree_","loadingExtentsCount_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","featuresCollection_","addFeaturesInternal","bindFeaturesCollection_","addFeature","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","geometry","getGeometry","VectorEventType","handleFeatureChange_","valid","getId","newFeatures","geometryFeatures","length_1","length_2","length_3","modifyingCollection","removeFeature","opt_fast","featureId","removeAndIgnoreReturn","removeFeatureInternal","clearEvent","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","intersectsCoordinate","forEachFeatureIntersectingExtent","intersectsExtent","getFeaturesCollection","getFeatures","getFeaturesAtCoordinate","getFeaturesInExtent","getClosestFeatureToCoordinate","opt_filter","closestFeature","closestPoint","NaN","minSquaredDistance","previousMinSquaredDistance","closestPointXY","minDistance","getFeatureById","getFeatureByUid","getFormat","getOverlaps","getUrl","sid","removeFromIdIndex_","hasFeature","loadFeatures","loadedExtentsRtree","extentsToLoad","_loop_1","extentToLoad","alreadyLoaded","this_1","removeLoadedExtent","featureChangeKeys","removed","setLoader","setUrl","Vector","Feature","opt_geometryOrProperties","id_","geometryName_","style_","styleFunction_","geometryChangeKey_","handleGeometryChanged_","setGeometry","properties","setGeometryName","getGeometryName","getStyle","setStyle","getStyleFunction","handleGeometryChange_","opt_style","createStyleFunction","setId","styles_1","transformStringDiv","ua","navigator","userAgent","FIREFOX","WEBKIT","MAC","DEVICE_PIXEL_RATIO","devicePixelRatio","WORKER_OFFSCREEN_CANVAS","WorkerGlobalScope","OffscreenCanvas","IMAGE_DECODE","Image","decode","PASSIVE_EVENT_LISTENERS","passive","defineProperty","window","setFromArray","transform1","transform2","makeScale","compose","dx1","dy1","sx","sy","dx2","dy2","makeInverse","det","determinant","transformString","transform2D","opt_dest","dest","anchor","anchorX","anchorY","deltaX","deltaY","tmpTransform","Geometry","extentRevision_","simplifiedGeometryMaxMinSquaredTolerance","simplifiedGeometryRevision","simplifyTransformedInternal","revision","squaredTolerance","opt_transform","getSimplifiedGeometry","simplifyTransformed","coord","getClosestPoint","opt_closestPoint","computeExtent","isNaN","opt_sy","opt_anchor","simplify","tolerance","translate","sourceProj","inCoordinates","outCoordinates","pixelExtent","projectedExtent","GeometryCollection","opt_geometries","geometries_","changeEventsKeys_","listenGeometriesChange_","unlistenGeometriesChange_","geometryCollection","setGeometries","geometries","getGeometries","cloneGeometries","getGeometriesArray","getGeometriesArrayRecursive","geometriesArray","simplifiedGeometries","simplified","simplifiedGeometry","simplifiedGeometryCollection","setGeometriesArray","GeometryType","clonedGeometries","FeatureFormat","defaultFeatureProjection","supportedMediaTypes","getReadOptions","adaptOptions","readFeature","readGeometry","writeFeature","writeFeatures","writeGeometry","transformGeometryWithOptions","write","transformed","power_1","JSONFeature","readFeatureFromObject","getObject","readFeaturesFromObject","readGeometryFromObject","readProjectionFromObject","stringify","writeFeatureObject","writeFeaturesObject","writeGeometryObject","XY","XYZ","XYM","XYZM","SimpleGeometry","layout","GeometryLayout","getCoordinates","getFirstCoordinate","getFlatCoordinates","getLastCoordinate","getLayout","getSimplifiedGeometryInternal","simplifiedFlatCoordinates","getStride","setFlatCoordinates","getStrideForLayout","setCoordinates","opt_layout","setLayout","nesting","getLayoutForStride","transformGeom2D","simpleGeometry","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","ends","multiArrayMaxSquaredDelta","endss","assignClosestPoint","maxDelta","isRing","opt_tmpPoint","squaredDistance","tmpPoint","assignClosestArrayPoint","assignClosestMultiArrayPoint","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","opt_ends","jj","deflateMultiCoordinatesArray","coordinatesss","opt_endss","douglasPeucker","simplifiedOffset","markers","stack","last","maxSquaredDistance","squaredDistance_1","douglasPeuckerArray","simplifiedEnds","snap","quantize","quantizeArray","quantizeMultiArray","simplifiedEndss","ret","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","opt_coordinatess","inflateMultiCoordinatesArray","opt_coordinatesss","interpolatePoint","fraction","cumulativeLengths","lineStringCoordinateAtM","extrapolate","lo","hi","m0","m1","lineStringsCoordinateAtM","linearRingContainsExtent","outside","linearRingContainsXY","wn","linearRingsContainsXY","linearRingssContainsXY","intersectsLineString","coordinatesExtent","point1","point2","intersectsLineStringArray","intersectsLinearRing","intersectsLinearRingArray","intersectsLinearRingMultiArray","lineStringLength","LineString","flatMidpoint_","flatMidpointRevision_","maxDelta_","maxDeltaRevision_","appendCoordinate","lineString","forEachSegment","getCoordinateAtM","opt_extrapolate","getCoordinateAt","getFlatMidpoint","MultiLineString","ends_","lineStrings","appendLineString","multiLineString","opt_interpolate","getEnds","getLineString","getLineStrings","getFlatMidpoints","midpoints","midpoint","Point","MultiPoint","appendPoint","multiPoint","getPoint","getPoints","points","twiceArea","linearRingss","LinearRing","getInteriorPointOfArray","flatCenters","flatCentersOffset","intersections","rr","pointX","maxSegmentLength","segmentLength","getInteriorPointsOfMultiArray","interiorPoints","linearRingIsClockwise","edge","linearRingsAreOriented","opt_right","isClockwise","linearRingssAreOriented","orientLinearRings","reverse","orientLinearRingsArray","Polygon","flatInteriorPointRevision_","flatInteriorPoint_","orientedRevision_","orientedFlatCoordinates_","appendLinearRing","linearRing","polygon","getOrientedFlatCoordinates","getFlatInteriorPoint","flatCenter","getInteriorPoint","getLinearRingCount","getLinearRing","getLinearRings","linearRings","fromExtent","MultiPolygon","endss_","flatInteriorPointsRevision_","flatInteriorPoints_","polygons","appendPolygon","newEndss","multiPolygon","getEndss","getFlatInteriorPoints","getInteriorPoints","getPolygon","prevEnds","getPolygons","lastEnds","GeoJSON","geometryName","extractGeometryName_","extractGeometryName","geoJSONFeature","geoJSONObject","geoJSONFeatureCollection","geoJSONFeatures","crs","objects","readPointGeometry","readLineStringGeometry","readPolygonGeometry","readMultiPointGeometry","readMultiLineStringGeometry","readMultiPolygonGeometry","readGeometryCollectionGeometry","geoJSON","writePointGeometry","writeLineStringGeometry","writePolygonGeometry","writeMultiPointGeometry","writeMultiLineStringGeometry","writeMultiPolygonGeometry","writeGeometryCollectionGeometry","rightHanded","IDLE","LOADED","EMPTY","num","opt_size","hasArea","ratio","toSize","ImageStyle","opacity_","opacity","rotateWithView_","rotateWithView","rotation_","scale_","scaleArray_","displacement_","displacement","getScale","getOpacity","getRotation","getRotateWithView","getDisplacement","getScaleArray","getAnchor","getImage","pixelRatio","getHitDetectionImage","getPixelRatio","getImageState","getImageSize","getSize","setDisplacement","setOpacity","setRotateWithView","setRotation","setScale","listenImageChange","unlistenImageChange","HEX_COLOR_RE_","NAMED_COLOR_RE_","asString","color","fromNamed","el","appendChild","rgb","getComputedStyle","removeChild","fromString","MAX_CACHE_SIZE","cache","cacheSize","fromStringInternal_","asArray","g","hasAlpha","substr","normalize","asColorLike","createCanvasContext2D","opt_width","opt_height","opt_canvasPool","opt_Context2DSettings","canvas","getContext","replaceNode","newNode","oldNode","parent","parentNode","replaceChild","removeNode","removeChildren","lastChild","replaceChildren","oldChildren","childNodes","oldChild","newChild","insertBefore","CLASS_HIDDEN","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","getFontParameters","fontSpec","lineHeight","weight","variant","families","family","cssOpacity","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","labelCache","setSize","console","warn","measureFont","measureContext","textHeights","registerFont","interval","referenceWidth","retries","referenceFonts","text","isAvailable","fontStyle","fontWeight","fontFamily","available","referenceFont","measureTextWidth","check","fonts","font","clearInterval","setInterval","measureTextHeight","measureElement","metrics","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","innerHTML","minHeight","maxHeight","padding","border","offsetHeight","measureTextWidths","lines","widths","numLines","currentWidth","drawImageOrLabel","context","labelOrImage","originX","originY","w","save","globalAlpha","setTransform","contextInstructions","executeLabelInstructions","drawImage","restore","RegularShape","canvas_","hitDetectionCanvas_","fill_","fill","origin_","points_","radius_","radius1","radius2_","radius2","angle_","stroke_","stroke","size_","renderOptions_","render","getFill","getRadius","getRadius2","getAngle","getStroke","createHitDetectionCanvas_","image","renderOptions","draw_","ImageState","calculateLineJoinSize_","lineJoin","strokeWidth","miterLimit","r1","r2","alpha","miterRatio","maxr","bevelAdd","aa","bb","dd","ee","innerMiterRatio","innerLength","createRenderOptions","strokeStyle","lineDash","lineDashOffset","getColor","getLineDash","getLineDashOffset","getLineJoin","getMiterLimit","add","maxRadius","createPath_","fillStyle","lineWidth","setLineDash","drawHitDetectionCanvas_","arc","startAngle","angle0","radiusC","lineTo","closePath","CircleStyle","setRadius","Circle","Fill","color_","setColor","Stroke","lineCap_","lineCap","lineDash_","lineDashOffset_","lineJoin_","miterLimit_","width_","getLineCap","setLineCap","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","Style","geometry_","geometryFunction_","defaultGeometryFunction","image_","renderer_","renderer","hitDetectionRenderer_","hitDetectionRenderer","text_","zIndex_","zIndex","getRenderer","getText","getZIndex","setRenderer","setHitDetectionRenderer","getHitDetectionRenderer","getGeometryFunction","setFill","setImage","setStroke","setText","setZIndex","toFunction","styleFunction","defaultStyles","createDefaultStyle","OPACITY","VISIBLE","Z_INDEX","MAX_RESOLUTION","MIN_RESOLUTION","MAX_ZOOM","MIN_ZOOM","SOURCE","MAP","BaseLayer","background_","background","visible","maxResolution","minResolution","minZoom","maxZoom","className_","className","getBackground","getClassName","getLayerState","opt_managed","managed","sourceState","getSourceState","getVisible","getMaxResolution","getMinResolution","getMinZoom","getMaxZoom","getLayersArray","getLayerStatesArray","opt_states","setBackground","opt_background","setMaxResolution","setMinResolution","setMaxZoom","setMinZoom","setVisible","zindex","Base","PRERENDER","POSTRENDER","PRECOMPOSE","POSTCOMPOSE","RENDERCOMPLETE","Layer","baseOptions","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","setMap","handleSourcePropertyChange_","setSource","getSource","handleSourceChange_","pixel","layerRenderer","prepareFrame","renderFrame","setMapInternal","getMapInternal","renderEvent","layerStatesArray","layerState","some","arrayLayerState","createRenderer","hasRenderer","inView","viewState","zoom","RENDER_ORDER","BaseVectorLayer","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","declutter","renderBuffer_","updateWhileAnimating_","updateWhileInteracting_","getDeclutter","getRenderBuffer","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","renderDeclutter","declutterTree","setRenderOrder","renderOrder","BaseVector","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","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","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","setImageStyle","imageStyle","opt_declutterImageWithText","setTextStyle","textStyle","CanvasBuilder","maxExtent","maxLineWidth","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","tmpCoordinate_","hitDetectionInstructions","applyPixelRatio","dashArray","dash","appendFlatPointCoordinates","getBufferedMaxExtent","tmpCoord","myEnd","appendFlatLineCoordinates","closed","skipFirst","lastRel","nextRel","lastXCoord","lastYCoord","nextCoord","skipped","drawCustomCoordinates_","builderEnds","builderEnd","beginGeometry","builderEndss","builderBegin","myEnds","endGeometry","finish","reverseHitDetectionInstructions","instruction","fillStyleColor","strokeStyleColor","strokeStyleLineCap","strokeStyleLineDash","strokeStyleLineDashOffset","strokeStyleLineJoin","strokeStyleWidth","strokeStyleMiterLimit","createFill","fillInstruction","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","CanvasImageBuilder","hitDetectionImage_","imagePixelRatio_","anchorX_","anchorY_","height_","originX_","originY_","declutterImageWithText_","myBegin","opt_sharedData","hitDetectionImage","CanvasLineStringBuilder","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","CanvasPolygonBuilder","drawFlatCoordinatess_","numEnds","setFillStrokeStyles_","circleInstruction","LINE","matchingChunk","maxAngle","acos","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","TEXT_ALIGN","CanvasTextBuilder","labels_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textFillState_","fillStates","textStrokeState_","strokeStates","textState_","textStates","textKey_","fillKey_","strokeKey_","fillState","strokeState","textState","geometryType","placement","TextPlacement","geometryWidths","overflow","beg_1","keep","saveTextStates_","backgroundFill","backgroundStroke","p0","p1","p2","p3","pixelRatio_1","textAlign","flatOffset","flatEnd","oo","range","drawChars_","strokeKey","textKey","textBaseline","fillKey","baseline","offsetY","textFillStyle","textStrokeStyle","getFont","textScale","getOverflow","getMaxAngle","getPlacement","getTextAlign","getTextBaseline","getBackgroundFill","getBackgroundStroke","getPadding","textOffsetX","getOffsetX","textOffsetY","getOffsetY","textRotateWithView","textRotation","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","TextBuilder","BuilderGroup","tolerance_","maxExtent_","pixelRatio_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","builderType","zIndexKey","replays","replay","Constructor","LayerRenderer","boundHandleImageChange_","handleImageChange_","layer_","declutterExecutorGroup","loadedTileCallback","tiles","tile","tileCoord","createLoadedTileFinder","tileRange","forEachLoadedTile","forEachFeatureAtCoordinate","hitTolerance","matches","getDataAtPixel","getLayer","handleFontsChanged","renderIfReadyAndVisible","loadImage","imageState","RenderEvent","opt_inversePixelTransform","opt_frameState","opt_context","inversePixelTransform","CanvasLayerRenderer","container","renderedResolution","tempTransform","pixelTransform","containerReused","pixelContext_","useContainer","opt_backgroundColor","layerClassName","backgroundColor","firstElementChild","HTMLCanvasElement","transformOrigin","clipUnrotated","topLeft","topRight","bottomRight","bottomLeft","coordinateToPixelTransform","inverted","beginPath","moveTo","clip","dispatchRenderEvent_","event_1","preRender","postRender","getRenderTransform","offsetX","renderPixel","layerExtent","renderCoordinate","pixelToCoordinateTransform","pixelContext","pixelCanvas","clearRect","getImageData","err","Uint8Array","DEFAULT","IMAGE","drawTextOnPath","startM","measureAndCacheTextWidth","segmentM","advance","beginX","beginY","startOffset","startLength","endM","flat","previousAngle","singleSegment","iStart","charLength","chars","substring","p4","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","horizontalTextAlign","align","test","Executor","alignFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","widths_","createLabel","renderWidth","Context","OffscreenCanvasRenderingContext2D","CanvasRenderingContext2D","leftRight","replayTextBackground_","strokeInstruction","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","centerX","centerY","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","drawImageX","drawImageY","drawImageW","drawImageH","canvasTransform","replayImageOrLabel_","contextScale","imageOrLabel","dimensions","box","strokePadding","origin_1","repeatSize","drawLabelWithPointPlacement_","execute_","opt_featureCallback","opt_hitExtent","opt_declutterTree","pixelCoordinates","prevX","prevY","roundX","roundY","currentGeometry","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","viewRotation","viewRotationFromTransform","batchSize","coords","declutterImageWithText","labelWithAnchor","widthIndex","args","imageArgs","imageDeclutterBox","measurePixelRatio","pixelRatioScale","cachedWidths","pathLength","textLength","drawChars","cc","i_1","ii_1","execute","executeHitDetection","ORDER","BuilderType","ExecutorGroup","allInstructions","opt_renderBuffer","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","createExecutors_","flatClipCoords","getClipCoords","executors","instructionByZindex","hasExecutors","candidates","declutteredFeatures","contextSize","newContext","hitExtent","indexes","getPixelIndexArray","featureCallback","imageData","idx","result_1","executor","zs","opt_builderTypes","builderTypes","circlePixelIndexArrayCache","maxDistanceSq","distances","distanceSq","distance","pixelIndex","ANIMATING","INTERACTING","CanvasImmediateRenderer","opt_squaredTolerance","opt_userTransform","context_","transform_","squaredTolerance_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textScale_","tmpLocalTransform_","drawImages_","localTransform","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","fillText","moveToLineTo_","close","drawRings_","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageSize","imageAnchor","imageOrigin","textFillStyleColor","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","textText","textTextAlign","textTextBaseline","FRACTION","IconImageCache","cache_","cacheSize_","maxCacheSize_","canExpireCache","expire","iconImage","crossOrigin","getKey","maxCacheSize","colorString","shared","ImageBase","getResolution","ImageWrapper","imageLoadFunction","src_","unlisten_","imageLoadFunction_","handleImageError_","unlistenImage_","handleImageLoad_","listenImage","loadHandler","errorHandler","listening","decoding","loaded","listenerKeys","catch","taintedTestContext","IconImage","imageState_","tainted_","isTainted_","dispatchChangeEvent_","replaceColor_","fillRect","getSrc","ctx","globalCompositeOperation","imgData","putImageData","Icon","anchor_","normalizedAnchor_","anchorOrigin_","anchorOrigin","IconOrigin","anchorXUnits_","anchorXUnits","IconAnchorUnits","anchorYUnits_","anchorYUnits","crossOrigin_","imgSize","iconImage_","offset_","offsetOrigin_","offsetOrigin","setAnchor","iconImageSize","HIT_DETECT_RESOLUTION","createHitDetectionImageData","transforms","imageSmoothingEnabled","featureCount","indexFactor","featuresByZIndex","featureStyleFunction","styles","originalStyle","imgContext","byGeometryType","zIndexKeys","geomAndStyle","kk","hitDetect","resultFeatures","SIMPLIFY_TOLERANCE","GEOMETRY_RENDERERS","renderPointGeometry","renderLineStringGeometry","renderPolygonGeometry","renderMultiPointGeometry","renderMultiLineStringGeometry","renderMultiPolygonGeometry","renderGeometryCollectionGeometry","renderCircleGeometry","defaultOrder","feature1","feature2","getSquaredTolerance","getTolerance","builderGroup","opt_declutterBuilderGroup","circleReplay","textReplay","renderFeature","replayGroup","renderFeatureInternal","renderGeometry","geometryRenderer","lineStringReplay","polygonReplay","imageReplay","CanvasVectorLayerRenderer","vectorLayer","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","dirty_","hitDetectionImageData_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","wrappedRenderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedRenderOrder_","replayGroup_","replayGroupChanged","clipping","renderWorlds","executorGroup","vectorSource","viewHints","ViewHint","multiWorld","endWorld","world","layerIndex","clipped","lastIndexOf","executorGroups","animating","interacting","frameStateExtent","vectorLayerRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","renderedExtent","loadExtents","gutter","loadExtent","declutterBuilderGroup","userTransform","userProjection","extent_1","userExtent_1","dirty","userExtent","replayGroupInstructions","VectorLayer","easeIn","easeOut","inAndOut","linear","States","Cities","view","getBbox","getGeoJsonObject","doFlyTo","ufArr","removeLayer","geoJsonObj","lightStroke","darkStroke","addLayer","fit","easing","duration","data-bs-ride","data-bs-interval","data-bs-slide-to","aria-current","aria-label","data-bs-slide","aria-hidden","modalBody","slideId","tabindex","targetId","modalInstance","openModal","closeModal","deactivated","show","hide","title","$parent","getBigNumbersCount","paragraph","formatNumber","getBigNumbersArea","loadingStatusDeficits","dataChart","getDeficitsApp","getDeficitsLR","openDashboardPage","alt","data-bs-dismiss","icon","CloseButton","SeeAll","$router","Doughnut","Slide","DoughnutDeficitAppHa","BigNumber","DoughnutDeficitRLHa","getLtenureFormated","TableDashboard","Modal","Slide1","Slide2","mapLoaded","listLayers","CENTER","RESOLUTION","ROTATION","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","createExtent","onlyCenter","smooth","opt_isMoving","opt_centerShift","viewWidth","viewHeight","shiftX","shiftY","none","getViewportClampedResolution","viewportSize","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","createSnapToResolutions","resolutions","opt_smooth","opt_maxExtent","opt_showFullExtent","cappedMaxRes","capped","z","createSnapToPower","power","opt_minResolution","minZoomLevel","cappedZoomLevel","zoomLevel","newResolution","createMinMaxResolution","disable","createSnapToN","theta","createSnapToZero","opt_tolerance","DEFAULT_MIN_ZOOM","View","hints_","animations_","updateAnimationKey_","projection_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","nextCenter_","nextResolution_","nextRotation_","cancelAnchor_","applyOptions_","ViewProperty","resolutionConstraintInfo","createResolutionConstraint","maxResolution_","minResolution_","zoomFactor_","zoomFactor","resolutions_","padding_","minZoom_","centerConstraint","createCenterConstraint","resolutionConstraint","constraint","rotationConstraint","createRotationConstraint","constraints_","setCenterInternal","setResolution","setZoom","oldPadding","newPadding","getUpdatedOptions_","newOptions","getZoom","getCenterInternal","animate","var_args","isDef","getAnimating","resolveConstraints","animateInternal","animationCount","Date","now","series","animation","complete","sourceCenter","targetCenter","sourceResolution","targetResolution","getResolutionForZoom","sourceRotation","targetRotation","isNoopAnimation","setHint","updateAnimations_","animationCallback","getInteracting","cancelAnimations","cancelAnimationFrame","more","seriesComplete","elapsed","progress","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","requestAnimationFrame","currentCenter","currentResolution","opt_rotation","setViewportSize","getConstraints","getConstrainResolution","getHints","opt_hints","calculateExtent","calculateExtentInternal","getViewportSizeMinusPadding_","getZoomForResolution","setConstrainResolution","enabled","constrainResolution","getResolutionForExtent","getResolutionForExtentInternal","getResolutionForValueFunction","opt_power","getConstrainedResolution","getValueForResolutionFunction","logPower","reducedSize","calculateCenterOn","nextCenter","nextResolution","nextRotation","nearest","baseLevel","geometryOrExtent","fitInternal","rotatedExtentForGeometry","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","rotatedExtent","centerRot","getConstrainedCenter","centerOn","centerOnInternal","calculateCenterShift","centerShift","shiftedCenter","adjustCenter","deltaCoordinates","setCenter","adjustCenterInternal","adjustResolution","adjustResolutionInternal","isMoving","adjustZoom","adjustRotation","adjustRotationInternal","newRotation","hint","opt_doNotCancelAnims","opt_forceMoving","newCenter","opt_duration","opt_resolutionDirection","beginInteraction","endInteraction","endInteractionInternal","opt_targetResolution","getConstrainedZoom","targetZoom","opt_direction","targetRes","returnValue","setTimeout","smoothExtentConstraint","constrainOnlyCenter","defaultMaxZoom","defaultZoomFactor","smoothResolutionConstraint","projExtent","defaultMaxResolution","defaultMinResolution","enableRotation","constrainRotation","MapRenderer","map_","dispatchRenderEvent","calculateMatrices2D","checkWrapped","thisArg","layerFilter","thisArg2","translatedCoordinate","offsets","layerStates","numLayers","callback_1","order","forEachLayerAtPixel","hasFeatureAtCoordinate","getMap","scheduleExpireIconCache","postRenderFunctions","expireIconCache","CompositeMapRenderer","fontChangeListenerKey_","redrawText","element_","getViewport","firstChild","children_","renderedVisible_","declutterLayers","previousElement","Composite","GroupEvent","LAYERS","LayerGroup","layers","layersListenerKeys_","listenerKeys_","handleLayersChanged_","setLayers","handleLayerChange_","getLayers","handleLayersAdd_","handleLayersRemove_","layersArray","registerLayerListeners_","handleLayerGroupAdd_","handleLayerGroupRemove_","collectionEvent","currentLayers","pos","ownLayerState","defaultZIndex","MapEvent","MapBrowserEvent","originalEvent","opt_dragging","pixel_","coordinate_","dragging","getEventPixel","getCoordinateFromPixel","SINGLECLICK","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_","emulateClick_","pointerEvent","newEvent","MapBrowserEventType","clearTimeout","updateActivePointers_","pointerId","handlePointerUp_","isMouseActionButton_","button","doc","getOwnerDocument","handlePointerMove_","getRootNode","isMoving_","cancelable","clientX","clientY","MOVESTART","MOVEEND","LAYERGROUP","SIZE","TARGET","VIEW","PriorityQueue","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","elements","priorities","siftUp_","elementKey","enqueue","priority","siftDown_","getCount","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","startIndex","lIndex","rIndex","smallerChildIndex","parentIndex","reprioritize","TileQueue","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","handleTileChange","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","getTilesLoading","TileState","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","getTilePriority","tileSourceKey","tileCenter","tileResolution","wantedTiles","removeLayerMapProperty","setLayerMapProperty","PluggableMap","optionsInternal","createOptionsInternal","renderComplete_","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","renderFrame_","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","overlayContainer_","pointerEvents","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","keyboardEventTarget","targetChangeHandlerKeys_","controls","interactions","overlays_","overlays","overlayIdIndex_","postRenderFunctions_","tileQueue_","handleTileChange_","MapProperty","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","viewOptions","setView","addOverlayInternal_","overlay","control","interaction","addControl","getControls","addInteraction","getInteractions","getLayerGroup","handleLayerAdd_","addOverlay","getOverlays","setTarget","forEachFeatureAtPixel","getCoordinateFromPixelInternal","getFeaturesAtPixel","getAllLayers","addLayersFrom","layerGroup","hasFeatureAtPixel","getEventCoordinate","getEventCoordinateInternal","viewportPosition","getBoundingClientRect","eventPosition","changedTouches","top","getTarget","getTargetElement","getOverlayById","getLoading","getPixelFromCoordinate","viewCoordinate","getPixelFromCoordinateInternal","getOverlayContainer","getOverlayContainerStopEvent","targetElement","ownerDocument","browserEvent","mapBrowserEvent","handleMapBrowserEvent","rootNode","contains","documentElement","interactionsArray","getActive","cont","handlePostRender","tileQueue","hints","lowOnFrameBudget","time","defaultView","updateSize","handleViewPropertyChanged_","updateViewportSize_","handleLayerRemove_","isRendered","renderSync","removeControl","removeInteraction","removeOverlay","previousFrameState","usedTiles","mapId","renderTargets","nextExtent","moveStart","MapEventType","idle","setLayerGroup","oldLayerGroup","computedStyle","offsetWidth","parseFloat","getClientRects","Control","target_","mapEvent","Attribution","ulElement_","collapsed_","collapsed","userCollapsed_","overrideCollapsible_","collapsible","collapsible_","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","textContent","label_","activeLabel","toggleButton_","setAttribute","handleClick_","cssClasses","renderedAttributions_","collectSourceAttributions_","lookup","visibleAttributions","attributionGetter","setCollapsible","updateElement_","handleToggle_","classList","toggle","getCollapsible","setCollapsed","getCollapsed","Rotate","compassClassName","callResetNorth_","resetNorth","duration_","autoHide_","autoHide","resetNorth_","Zoom","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","createTextNode","outElement","zoomByDelta_","currentZoom","newZoom","defaults","zoomControl","zoomOptions","rotateControl","rotateOptions","attributionControl","attribution","attributionOptions","ACTIVE","Interaction","setActive","active","pan","zoomByDelta","DoubleClickZoom","delta_","stopEvent","shiftKey","PointerInteraction","handleDownEvent","handleDragEvent","handleMoveEvent","handleUpEvent","stopDown","handlingDownUpSequence","trackedPointers_","targetPointers","getPointerCount","updateTrackedPointers_","handledUp","handled","isPointerDraggingEvent","Pointer","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_","centroid","centerpx","DragRotate","lastAngle_","RenderBox","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","UP","DOWN","KeyboardPan","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","keyCode","KeyCode","mapUnitsDelta","KeyboardZoom","charCode","Kinetic","decay","minVelocity","delay","decay_","minVelocity_","delay_","initialVelocity_","lastIndex","firstIndex","Mode","TRACKPAD","MouseWheelZoom","totalDelta_","lastDelta_","timeout_","timeout","useAnchor_","useAnchor","constrainResolution_","lastAnchor_","startTime_","timeoutId_","mode_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","endInteraction_","wheelEvent","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","timeLeft","handleWheelZoom_","setMouseAnchor","PinchRotate","pointerOptions","rotating_","rotationDelta_","threshold_","threshold","rotationDelta","touch0","touch1","PinchZoom","lastDistance_","lastScaleDelta_","scaleDelta","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","keyboard","mouseWheelZoom","shiftDragZoom","Map","DEFAULT_WMS_VERSION","Tile","interimTile","transition_","transition","transitionStarts_","release","getInterimTile","refreshInterimChain","getTileCoord","getAlpha","inTransition","endTransition","ImageTile","tileLoadFunction","tileLoadFunction_","getBlankImage","naturalWidth","naturalHeight","brokenDiagonalRendering_","ERROR_THRESHOLD","ENABLE_RASTER_REPROJECTION","MAX_SUBDIVISION","MAX_TRIANGLE_WIDTH","Triangulation","targetProj","targetExtent","maxSourceExtent","errorThreshold","opt_destinationResolution","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","addQuad_","leftBound_1","triangle","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","targetQuadExtent","targetCoverageX","isFinite","isNotFinite","centerSrc","centerSrcEstimX","centerSrcErrorSquared","bc","bcSrc","da","daSrc","ab","abSrc","cd","cdSrc","calculateSourceExtent","getTriangles","IMAGE_SMOOTHING_DISABLED","msImageSmoothingEnabled","IMAGE_SMOOTHING_ENABLED","drawTestTriangle","u1","u2","verifyBrokenDiagonalRendering","isBrokenDiagonalRendering","calculateSourceResolution","targetMetersPerUnit","sourceMetersPerUnit","sourceExtent","compensationFactor","calculateSourceExtentResolution","triangulation","sources","opt_renderEdges","pixelRound","sourceDataExtent","canvasWidthInUnits","canvasHeightInUnits","stitchContext","stitchScale","xPos","yPos","srcWidth","srcHeight","targetTopLeft","u0","v0","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","steps","ud","vd","ReprojTile","sourceTileGrid","targetTileGrid","wrappedTileCoord","getTileFunction","opt_errorThreshold","renderEdges_","gutter_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","getTileCoordExtent","maxTargetExtent","limitedTargetExtent","sourceProjExtent","errorThresholdInPixels","triangulation_","getZForResolution","sourceRange","getTileRangeForExtentAndZ","srcX","srcY","reproject_","getTileSize","leftToLoad_1","sourceListenKey_1","unlistenSources_","LRUCache","opt_highWaterMark","highWaterMark","count_","entries_","oldest_","newest_","containsKey","value_","key_","newer","older","peekLast","peekLastKey","peekFirstKey","opt_tileCoord","getKeyZXY","fromKey","withinExtentAndZ","getFullTileRange","TileCache","expireCache","pruneExceptNewestZ","TILELOADSTART","TILELOADEND","TILELOADERROR","TileRange","containsTileRange","tmpTileCoord","DECIMALS","TileGrid","origins","origins_","tileSizes_","tileSizes","tileSize_","tileSize","fullTileRanges_","tmpSize_","tmpExtent_","sizes","restrictedTileRange","calculateTileRanges_","forEachTileCoord","forEachTileCoordParentTileRange","opt_tileRange","tileCoordExtent","getTileCoordChildTileRange","getTileRangeForTileCoordAndZ","tileCoordZ","tileCoordX","tileCoordY","getTileRangeExtent","getTileCoordForXYAndZ_","getTileCoordCenter","getTileCoordForCoordAndResolution","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getTileCoordForCoordAndZ","getTileCoordResolution","fullTileRanges","getForProjection","createForProjection","extentFromProjection","createForExtent","opt_maxZoom","opt_tileSize","opt_corner","resolutionsFromExtent","createXYZ","xyzOptions","gridOptions","opt_maxResolution","half","TileSource","opaque_","opaque","tilePixelRatio_","tilePixelRatio","tileCache","tmpSize","tileOptions","zDirection","getTileCacheForProjection","tileCoordKey","covered","getGutterForProjection","setKey","getOpaque","getTile","getTileGrid","getTileGridForProjection","getTilePixelRatio","getTilePixelSize","getTileCoordForTileUrlFunction","opt_projection","updateCacheSize","tileCount","useTile","TileSourceEvent","createFromTemplate","template","zRegEx","xRegEx","yRegEx","dashYRegEx","createFromTemplates","templates","tileUrlFunctions","createFromTileUrlFunctions","expandUrl","urls","startCharCode","stopCharCode","stop_1","UrlTile","generateTileUrlFunction_","tileUrlFunction","setUrls","tileLoadingKeys_","getTileLoadFunction","getTileUrlFunction","getPrototypeOf","getUrls","tileState","TileEventType","setTileLoadFunction","setTileUrlFunction","TileImage","imageSmoothing","defaultTileLoadFunction","tileClass","tileCacheForProjection","tileGridForProjection","reprojectionErrorThreshold_","reprojectionErrorThreshold","renderReprojectionEdges_","usedTileCache","getGutter","thisProj","projKey","createTile_","urlTileCoord","tileUrl","newTile","getTileInternal","setRenderReprojectionEdges","setTileGridForProjection","tilegrid","proj","imageTile","CARMENTA_SERVER","GEOSERVER","MAPSERVER","QGIS","appendParams","uri","keyParams","qs","TileWMS","transparent","params_","v13_","serverType_","hidpi_","hidpi","updateV13_","getKeyForParams_","getFeatureInfoUrl","projectionObj","sourceProjectionObj","tileExtent","baseParams","getRequestUrl_","getLegendUrl","isSingleLayer","mpu","pixelSize","getParams","WMSServerType","dpi","updateParams","version","PRELOAD","USE_INTERIM_TILES_ON_ERROR","BaseTileLayer","preload","useInterimTilesOnError","setPreload","setUseInterimTilesOnError","getPreload","TileProperty","getUseInterimTilesOnError","BaseTile","CanvasTileLayerRenderer","tileLayer","extentChanged","renderedPixelRatio","renderedProjection","renderedRevision","renderedTiles","newTiles_","tmpExtent","tmpTileRange_","isDrawableTile","tileSource","viewResolution","viewCenter","sourceRevision","canvasExtent","tilesToDrawByZ","findLoadedTiles","tmpTileRange","childTileRange","canvasScale","clips","clipZs","currentClip","currentZ","currentTilePixelSize","currentScale","dx_1","dy_1","originTileCoord","originTileExtent","tileGutter","tilesToDraw","xIndex","nextX","yIndex","nextY","drawTileImage","updateUsedTiles","manageTilePyramid","scheduleExpireCache","getTileImage","alphaChanged","postRenderFunction","opt_tileCallback","TileLayer","OlLayer","layerObj","currentTypeVar","newTypeVar","filterLayer","setOlLayer","STYLES","viewparams","serverType","setLayer","isChecked","filterVisible","setViewparams","changeFilterStyleVariable","viewsparams","currentStyle","newStyle","ATTRIBUTION","OSM","selectedLayer","cursor","vueObj","wmsSource","json","$data","nm_mun","OpenLayer","Slider","Filters","Legend","Location"],"mappings":"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","file":"js/map.ffa454fd.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Slide1.vue?vue&type=style&index=0&id=3263ee55&lang=css\"","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Location.vue?vue&type=style&index=0&id=a4a6e2de&lang=scss&scoped=true\"","!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","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Switch.vue?vue&type=style&index=0&id=5118bedf&lang=scss&scoped=true\"","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor('serialize', 'setHref'),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor('getOrigin'),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor('getProtocol', 'setProtocol'),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor('getUsername', 'setUsername'),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor('getPassword', 'setPassword'),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor('getHost', 'setHost'),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor('getHostname', 'setHostname'),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor('getPort', 'setPort'),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor('getPathname', 'setPathname'),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor('getSearch', 'setSearch'),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor('getSearchParams'),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor('getHash', 'setHash')\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FilterBox.vue?vue&type=style&index=0&id=7bd57f54&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Accordion.vue?vue&type=style&index=0&id=734a5bf8&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Legend.vue?vue&type=style&index=0&id=3e5e7285&lang=scss&scoped=true\"","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpFlags = require('../internals/regexp-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\nvar stringIndexOf = function (string, searchValue, fromIndex) {\n if (fromIndex > string.length) return -1;\n if (searchValue === '') return fromIndex;\n return indexOf(string, searchValue, fromIndex);\n};\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n replaceAll: function replaceAll(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;\n var position = 0;\n var endOfLastMatch = 0;\n var result = '';\n if (searchValue != null) {\n IS_REG_EXP = isRegExp(searchValue);\n if (IS_REG_EXP) {\n flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n ? searchValue.flags\n : getFlags(searchValue)\n ));\n if (!~indexOf(flags, 'g')) throw TypeError('`.replaceAll` does not allow non-global regexes');\n }\n replacer = getMethod(searchValue, REPLACE);\n if (replacer) {\n return call(replacer, searchValue, O, replaceValue);\n } else if (IS_PURE && IS_REG_EXP) {\n return replace(toString(O), searchValue, replaceValue);\n }\n }\n string = toString(O);\n searchString = toString(searchValue);\n functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n searchLength = searchString.length;\n advanceBy = max(1, searchLength);\n position = stringIndexOf(string, searchString, 0);\n while (position !== -1) {\n replacement = functionalReplace\n ? toString(replaceValue(searchString, position, string))\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n result += stringSlice(string, endOfLastMatch, position) + replacement;\n endOfLastMatch = position + searchLength;\n position = stringIndexOf(string, searchString, position + advanceBy);\n }\n if (endOfLastMatch < string.length) {\n result += stringSlice(string, endOfLastMatch);\n }\n return result;\n }\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Slider.vue?vue&type=style&index=0&id=60417150&lang=scss\"","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./List.vue?vue&type=style&index=0&id=22d371d8&lang=scss\"","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arraySort = require('../internals/array-sort');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar n$Fetch = getBuiltIn('fetch');\nvar N$Request = getBuiltIn('Request');\nvar Headers = getBuiltIn('Headers');\nvar RequestPrototype = N$Request && N$Request.prototype;\nvar HeadersPrototype = Headers && Headers.prototype;\nvar RegExp = global.RegExp;\nvar TypeError = global.TypeError;\nvar decodeURIComponent = global.decodeURIComponent;\nvar encodeURIComponent = global.encodeURIComponent;\nvar charAt = uncurryThis(''.charAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar splice = uncurryThis([].splice);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = replace(it, plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = replace(result, percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replacements = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replacements[match];\n};\n\nvar serialize = function (it) {\n return replace(encodeURIComponent(it), find, replacer);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n}, true);\n\nvar URLSearchParamsState = function (init) {\n this.entries = [];\n this.url = null;\n\n if (init !== undefined) {\n if (isObject(init)) this.parseObject(init);\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\n }\n};\n\nURLSearchParamsState.prototype = {\n type: URL_SEARCH_PARAMS,\n bindURL: function (url) {\n this.url = url;\n this.update();\n },\n parseObject: function (object) {\n var iteratorMethod = getIteratorMethod(object);\n var iterator, next, step, entryIterator, entryNext, first, second;\n\n if (iteratorMethod) {\n iterator = getIterator(object, iteratorMethod);\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = call(entryNext, entryIterator)).done ||\n (second = call(entryNext, entryIterator)).done ||\n !call(entryNext, entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (var key in object) if (hasOwn(object, key)) {\n push(this.entries, { key: key, value: $toString(object[key]) });\n }\n },\n parseQuery: function (query) {\n if (query) {\n var attributes = split(query, '&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = split(attribute, '=');\n push(this.entries, {\n key: deserialize(shift(entry)),\n value: deserialize(join(entry, '='))\n });\n }\n }\n }\n },\n serialize: function () {\n var entries = this.entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\n } return join(result, '&');\n },\n update: function () {\n this.entries.length = 0;\n this.parseQuery(this.url.query);\n },\n updateURL: function () {\n if (this.url) this.url.update();\n }\n};\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsPrototype);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n setInternalState(this, new URLSearchParamsState(init));\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n push(state.entries, { key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) splice(entries, index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) push(result, entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) splice(entries, index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) push(entries, { key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n arraySort(state.entries, function (a, b) {\n return a.key > b.key ? 1 : -1;\n });\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n return getInternalParamsState(this).serialize();\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && isCallable(Headers)) {\n var headersHas = uncurryThis(HeadersPrototype.has);\n var headersSet = uncurryThis(HeadersPrototype.set);\n\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headersHas(headers, 'content-type')) {\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, $toString(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (isCallable(n$Fetch)) {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return n$Fetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (isCallable(N$Request)) {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestPrototype);\n return new N$Request(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, forced: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./LegendBox.vue?vue&type=style&index=0&id=0d0a79df&lang=scss\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Items.vue?vue&type=style&index=0&id=39b96f9d&lang=scss\"","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Filters.vue?vue&type=style&index=0&id=628ac776&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Map.vue?vue&type=style&index=0&id=3b210bb6&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Badge.vue?vue&type=style&index=0&id=ecb9c92c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SwitchTwoLabels.vue?vue&type=style&index=0&id=0f651dca&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Slide.vue?vue&type=style&index=0&id=12e4f51c&lang=scss\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Item.vue?vue&type=style&index=0&id=8ff96ce2&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./OpenLayer.vue?vue&type=style&index=0&id=95f798dc&lang=scss\"","\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n","\n\n\n\n","\n\n\n\n","import { render } from \"./Badge.vue?vue&type=template&id=ecb9c92c&scoped=true\"\nimport script from \"./Badge.vue?vue&type=script&lang=js\"\nexport * from \"./Badge.vue?vue&type=script&lang=js\"\n\nimport \"./Badge.vue?vue&type=style&index=0&id=ecb9c92c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ecb9c92c\"]])\n\nexport default __exports__","import { render } from \"./CounterTotal.vue?vue&type=template&id=54ce0f02\"\nimport script from \"./CounterTotal.vue?vue&type=script&lang=js\"\nexport * from \"./CounterTotal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./FilterCounterTotal.vue?vue&type=template&id=02fc7f20\"\nimport script from \"./FilterCounterTotal.vue?vue&type=script&lang=js\"\nexport * from \"./FilterCounterTotal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","\n\n\n\n","import { render } from \"./ListNode.vue?vue&type=template&id=90de937a\"\nimport script from \"./ListNode.vue?vue&type=script&lang=js\"\nexport * from \"./ListNode.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./List.vue?vue&type=template&id=22d371d8\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\n\nimport \"./List.vue?vue&type=style&index=0&id=22d371d8&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","\n\n\n\n\n","import { render } from \"./Switch.vue?vue&type=template&id=5118bedf&scoped=true\"\nimport script from \"./Switch.vue?vue&type=script&lang=js\"\nexport * from \"./Switch.vue?vue&type=script&lang=js\"\n\nimport \"./Switch.vue?vue&type=style&index=0&id=5118bedf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5118bedf\"]])\n\nexport default __exports__","\n\n\n\n\n","import { render } from \"./SwitchTwoLabels.vue?vue&type=template&id=0f651dca&scoped=true\"\nimport script from \"./SwitchTwoLabels.vue?vue&type=script&lang=js\"\nexport * from \"./SwitchTwoLabels.vue?vue&type=script&lang=js\"\n\nimport \"./SwitchTwoLabels.vue?vue&type=style&index=0&id=0f651dca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f651dca\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./Item.vue?vue&type=template&id=2ef2cb08\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","\n\n\n\n","import { render } from \"./Counter.vue?vue&type=template&id=65959650\"\nimport script from \"./Counter.vue?vue&type=script&lang=js\"\nexport * from \"./Counter.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./FilterCounter.vue?vue&type=template&id=b011b42a\"\nimport script from \"./FilterCounter.vue?vue&type=script&lang=js\"\nexport * from \"./FilterCounter.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Items.vue?vue&type=template&id=39b96f9d\"\nimport script from \"./Items.vue?vue&type=script&lang=js\"\nexport * from \"./Items.vue?vue&type=script&lang=js\"\n\nimport \"./Items.vue?vue&type=style&index=0&id=39b96f9d&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./FilterBox.vue?vue&type=template&id=7bd57f54\"\nimport script from \"./FilterBox.vue?vue&type=script&lang=js\"\nexport * from \"./FilterBox.vue?vue&type=script&lang=js\"\n\nimport \"./FilterBox.vue?vue&type=style&index=0&id=7bd57f54&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./Accordion.vue?vue&type=template&id=734a5bf8\"\nimport script from \"./Accordion.vue?vue&type=script&lang=js\"\nexport * from \"./Accordion.vue?vue&type=script&lang=js\"\n\nimport \"./Accordion.vue?vue&type=style&index=0&id=734a5bf8&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Filters.vue?vue&type=template&id=628ac776&scoped=true\"\nimport script from \"./Filters.vue?vue&type=script&lang=js\"\nexport * from \"./Filters.vue?vue&type=script&lang=js\"\n\nimport \"./Filters.vue?vue&type=style&index=0&id=628ac776&lang=scss&scoped=true\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-628ac776\"]])\n\nexport default __exports__","\n\n\n\n","\n\n\n\n","import { render } from \"./LegendBox.vue?vue&type=template&id=0d0a79df\"\nimport script from \"./LegendBox.vue?vue&type=script&lang=js\"\nexport * from \"./LegendBox.vue?vue&type=script&lang=js\"\n\nimport \"./LegendBox.vue?vue&type=style&index=0&id=0d0a79df&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./Item.vue?vue&type=template&id=8ff96ce2&scoped=true\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\n\nimport \"./Item.vue?vue&type=style&index=0&id=8ff96ce2&scoped=true&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8ff96ce2\"]])\n\nexport default __exports__","import { render } from \"./Legend.vue?vue&type=template&id=3e5e7285&scoped=true\"\nimport script from \"./Legend.vue?vue&type=script&lang=js\"\nexport * from \"./Legend.vue?vue&type=script&lang=js\"\n\nimport \"./Legend.vue?vue&type=style&index=0&id=3e5e7285&lang=scss&scoped=true\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3e5e7285\"]])\n\nexport default __exports__","\n\n\n\n","\n\n","import { render } from \"./Cities.vue?vue&type=template&id=63a12cb8\"\nimport script from \"./Cities.vue?vue&type=script&lang=js\"\nexport * from \"./Cities.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/**\n * @module ol/util\n */\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n return /** @type {?} */ ((function () {\n throw new Error('Unimplemented abstract method.');\n })());\n}\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nvar uidCounter_ = 0;\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport var VERSION = '6.12.0';\n//# sourceMappingURL=util.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/AssertionError\n */\nimport { VERSION } from './util.js';\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nvar AssertionError = /** @class */ (function (_super) {\n __extends(AssertionError, _super);\n /**\n * @param {number} code Error code.\n */\n function AssertionError(code) {\n var _this = this;\n var path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n var message = 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n _this = _super.call(this, message) || this;\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n _this.code = code;\n /**\n * @type {string}\n */\n _this.name = 'AssertionError';\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n _this.message = message;\n return _this;\n }\n return AssertionError;\n}(Error));\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","/**\n * @module ol/events/Event\n */\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nvar BaseEvent = /** @class */ (function () {\n /**\n * @param {string} type Type.\n */\n function BaseEvent(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n BaseEvent.prototype.preventDefault = function () {\n this.defaultPrevented = true;\n };\n /**\n * Stop event propagation.\n * @api\n */\n BaseEvent.prototype.stopPropagation = function () {\n this.propagationStopped = true;\n };\n return BaseEvent;\n}());\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\nexport default BaseEvent;\n//# sourceMappingURL=Event.js.map","/**\n * @module ol/ObjectEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n/**\n * @typedef {'propertychange'} Types\n */\n//# sourceMappingURL=ObjectEventType.js.map","/**\n * @module ol/Disposable\n */\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nvar Disposable = /** @class */ (function () {\n function Disposable() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n /**\n * Clean up.\n */\n Disposable.prototype.dispose = function () {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n };\n /**\n * Extension point for disposable objects.\n * @protected\n */\n Disposable.prototype.disposeInternal = function () { };\n return Disposable;\n}());\nexport default Disposable;\n//# sourceMappingURL=Disposable.js.map","/**\n * @module ol/array\n */\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [opt_comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n var mid, cmp;\n var comparator = opt_comparator || numberSafeCompareFunction;\n var low = 0;\n var high = haystack.length;\n var found = false;\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n }\n else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n /* Key not found. */\n return found ? low : ~low;\n}\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n var n = arr.length;\n if (arr[0] <= target) {\n return 0;\n }\n else if (target <= arr[n - 1]) {\n return n - 1;\n }\n else {\n var i = void 0;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n }\n else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n }\n else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n else if (arr[i] < target) {\n if (typeof direction === 'function') {\n if (direction(target, arr[i - 1], arr[i]) > 0) {\n return i - 1;\n }\n else {\n return i;\n }\n }\n else if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n var tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n var extension = Array.isArray(data) ? data : [data];\n var length = extension.length;\n for (var i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n var i = arr.indexOf(obj);\n var found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n/**\n * @param {Array} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n var length = arr.length >>> 0;\n var value;\n for (var i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n var len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (var i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n var length = arr.length;\n var tmp = Array(arr.length);\n var i;\n for (i = 0; i < length; i++) {\n tmp[i] = { index: i, value: arr[i] };\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n var index;\n var found = !arr.every(function (el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [opt_func] Comparison function.\n * @param {boolean} [opt_strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n var compare = opt_func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n var res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (opt_strict && res === 0));\n });\n}\n//# sourceMappingURL=array.js.map","/**\n * @module ol/functions\n */\nimport { equals as arrayEquals } from './array.js';\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() { }\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n var called = false;\n /** @type {ReturnType} */\n var lastResult;\n /** @type {Array} */\n var lastArgs;\n var lastThis;\n return function () {\n var nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n var value;\n try {\n value = getter();\n }\n catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n//# sourceMappingURL=functions.js.map","/**\n * @module ol/obj\n */\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport var assign = typeof Object.assign === 'function'\n ? Object.assign\n : function (target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n var output = Object(target);\n for (var i = 1, ii = arguments.length; i < ii; ++i) {\n var source = arguments[i];\n if (source !== undefined && source !== null) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (var property in object) {\n delete object[property];\n }\n}\n/**\n * Polyfill for Object.values(). Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} object The object from which to get the values.\n * @return {!Array} The property values.\n * @template K,V\n */\nexport var getValues = typeof Object.values === 'function'\n ? Object.values\n : function (object) {\n var values = [];\n for (var property in object) {\n values.push(object[property]);\n }\n return values;\n };\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n var property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n//# sourceMappingURL=obj.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/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport { VOID } from '../functions.js';\nimport { clear } from '../obj.js';\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nvar Target = /** @class */ (function (_super) {\n __extends(Target, _super);\n /**\n * @param {*} [opt_target] Default event target for dispatched events.\n */\n function Target(opt_target) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {*}\n */\n _this.eventTarget_ = opt_target;\n /**\n * @private\n * @type {Object}\n */\n _this.pendingRemovals_ = null;\n /**\n * @private\n * @type {Object}\n */\n _this.dispatching_ = null;\n /**\n * @private\n * @type {Object>}\n */\n _this.listeners_ = null;\n return _this;\n }\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.addEventListener = function (type, listener) {\n if (!type || !listener) {\n return;\n }\n var listeners = this.listeners_ || (this.listeners_ = {});\n var listenersForType = listeners[type] || (listeners[type] = []);\n if (listenersForType.indexOf(listener) === -1) {\n listenersForType.push(listener);\n }\n };\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n Target.prototype.dispatchEvent = function (event) {\n /** @type {import(\"./Event.js\").default|Event} */\n var evt = typeof event === 'string' ? new Event(event) : event;\n var type = evt.type;\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n var listeners = this.listeners_ && this.listeners_[type];\n var propagate;\n if (listeners) {\n var dispatching = this.dispatching_ || (this.dispatching_ = {});\n var pendingRemovals = this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n for (var i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (listeners[i]).handleEvent(evt);\n }\n else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (listeners[i]).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n --dispatching[type];\n if (dispatching[type] === 0) {\n var pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n };\n /**\n * Clean up.\n */\n Target.prototype.disposeInternal = function () {\n this.listeners_ && clear(this.listeners_);\n };\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n Target.prototype.getListeners = function (type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n };\n /**\n * @param {string} [opt_type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n Target.prototype.hasListener = function (opt_type) {\n if (!this.listeners_) {\n return false;\n }\n return opt_type\n ? opt_type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n };\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n Target.prototype.removeEventListener = function (type, listener) {\n var listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n var index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n }\n else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n };\n return Target;\n}(Disposable));\nexport default Target;\n//# sourceMappingURL=Target.js.map","/**\n * @module ol/events/EventType\n */\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n//# sourceMappingURL=EventType.js.map","/**\n * @module ol/events\n */\nimport { clear } from './obj.js';\n/**\n * Key to use with {@link module:ol/Observable~Observable#unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [opt_once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n if (opt_this && opt_this !== target) {\n listener = listener.bind(opt_this);\n }\n if (opt_once) {\n var originalListener_1 = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener_1.apply(this, arguments);\n };\n }\n var eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n//# sourceMappingURL=events.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/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport { listen, listenOnce, unlistenByKey } from './events.js';\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nvar Observable = /** @class */ (function (_super) {\n __extends(Observable, _super);\n function Observable() {\n var _this = _super.call(this) || this;\n _this.on =\n /** @type {ObservableOnSignature} */ (_this.onInternal);\n _this.once =\n /** @type {ObservableOnSignature} */ (_this.onceInternal);\n _this.un = /** @type {ObservableOnSignature} */ (_this.unInternal);\n /**\n * @private\n * @type {number}\n */\n _this.revision_ = 0;\n return _this;\n }\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n Observable.prototype.changed = function () {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n };\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n Observable.prototype.getRevision = function () {\n return this.revision_;\n };\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n Observable.prototype.onInternal = function (type, listener) {\n if (Array.isArray(type)) {\n var len = type.length;\n var keys = new Array(len);\n for (var i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n }\n else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n };\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n Observable.prototype.onceInternal = function (type, listener) {\n var key;\n if (Array.isArray(type)) {\n var len = type.length;\n key = new Array(len);\n for (var i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n }\n else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n };\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n Observable.prototype.unInternal = function (type, listener) {\n var key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n }\n else if (Array.isArray(type)) {\n for (var i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n }\n else {\n this.removeEventListener(type, listener);\n }\n };\n return Observable;\n}(EventTarget));\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (var i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n }\n else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\nexport default Observable;\n//# sourceMappingURL=Observable.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/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport { assign, isEmpty } from './obj.js';\nimport { getUid } from './util.js';\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nvar ObjectEvent = /** @class */ (function (_super) {\n __extends(ObjectEvent, _super);\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n function ObjectEvent(type, key, oldValue) {\n var _this = _super.call(this, type) || this;\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n _this.key = key;\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n _this.oldValue = oldValue;\n return _this;\n }\n return ObjectEvent;\n}(Event));\nexport { ObjectEvent };\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nvar BaseObject = /** @class */ (function (_super) {\n __extends(BaseObject, _super);\n /**\n * @param {Object} [opt_values] An object with key-value pairs.\n */\n function BaseObject(opt_values) {\n var _this = _super.call(this) || this;\n /***\n * @type {ObjectOnSignature}\n */\n _this.on;\n /***\n * @type {ObjectOnSignature}\n */\n _this.once;\n /***\n * @type {ObjectOnSignature}\n */\n _this.un;\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(_this);\n /**\n * @private\n * @type {Object}\n */\n _this.values_ = null;\n if (opt_values !== undefined) {\n _this.setProperties(opt_values);\n }\n return _this;\n }\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n BaseObject.prototype.get = function (key) {\n var value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n };\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n BaseObject.prototype.getKeys = function () {\n return (this.values_ && Object.keys(this.values_)) || [];\n };\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n BaseObject.prototype.getProperties = function () {\n return (this.values_ && assign({}, this.values_)) || {};\n };\n /**\n * @return {boolean} The object has properties.\n */\n BaseObject.prototype.hasProperties = function () {\n return !!this.values_;\n };\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n BaseObject.prototype.notify = function (key, oldValue) {\n var eventType;\n eventType = \"change:\" + key;\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n eventType = ObjectEventType.PROPERTYCHANGE;\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n };\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n BaseObject.prototype.addChangeListener = function (key, listener) {\n this.addEventListener(\"change:\" + key, listener);\n };\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n BaseObject.prototype.removeChangeListener = function (key, listener) {\n this.removeEventListener(\"change:\" + key, listener);\n };\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n BaseObject.prototype.set = function (key, value, opt_silent) {\n var values = this.values_ || (this.values_ = {});\n if (opt_silent) {\n values[key] = value;\n }\n else {\n var oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n };\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n BaseObject.prototype.setProperties = function (values, opt_silent) {\n for (var key in values) {\n this.set(key, values[key], opt_silent);\n }\n };\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n BaseObject.prototype.applyProperties = function (source) {\n if (!source.values_) {\n return;\n }\n assign(this.values_ || (this.values_ = {}), source.values_);\n };\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [opt_silent] Unset without triggering an event.\n * @api\n */\n BaseObject.prototype.unset = function (key, opt_silent) {\n if (this.values_ && key in this.values_) {\n var oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n };\n return BaseObject;\n}(Observable));\nexport default BaseObject;\n//# sourceMappingURL=Object.js.map","/**\n * @module ol/CollectionEventType\n */\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n//# sourceMappingURL=CollectionEventType.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/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n/**\n * @enum {string}\n * @private\n */\nvar Property = {\n LENGTH: 'length',\n};\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nvar CollectionEvent = /** @class */ (function (_super) {\n __extends(CollectionEvent, _super);\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {*} [opt_element] Element.\n * @param {number} [opt_index] The index of the added or removed element.\n */\n function CollectionEvent(type, opt_element, opt_index) {\n var _this = _super.call(this, type) || this;\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n _this.element = opt_element;\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n _this.index = opt_index;\n return _this;\n }\n return CollectionEvent;\n}(Event));\nexport { CollectionEvent };\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nvar Collection = /** @class */ (function (_super) {\n __extends(Collection, _super);\n /**\n * @param {Array} [opt_array] Array.\n * @param {Options} [opt_options] Collection options.\n */\n function Collection(opt_array, opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {CollectionOnSignature}\n */\n _this.on;\n /***\n * @type {CollectionOnSignature}\n */\n _this.once;\n /***\n * @type {CollectionOnSignature}\n */\n _this.un;\n var options = opt_options || {};\n /**\n * @private\n * @type {boolean}\n */\n _this.unique_ = !!options.unique;\n /**\n * @private\n * @type {!Array}\n */\n _this.array_ = opt_array ? opt_array : [];\n if (_this.unique_) {\n for (var i = 0, ii = _this.array_.length; i < ii; ++i) {\n _this.assertUnique_(_this.array_[i], i);\n }\n }\n _this.updateLength_();\n return _this;\n }\n /**\n * Remove all elements from the collection.\n * @api\n */\n Collection.prototype.clear = function () {\n while (this.getLength() > 0) {\n this.pop();\n }\n };\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n Collection.prototype.extend = function (arr) {\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n };\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n Collection.prototype.forEach = function (f) {\n var array = this.array_;\n for (var i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n };\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n Collection.prototype.getArray = function () {\n return this.array_;\n };\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n Collection.prototype.item = function (index) {\n return this.array_[index];\n };\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n Collection.prototype.getLength = function () {\n return this.get(Property.LENGTH);\n };\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.insertAt = function (index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n };\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n Collection.prototype.pop = function () {\n return this.removeAt(this.getLength() - 1);\n };\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n Collection.prototype.push = function (elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n var n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n };\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n Collection.prototype.remove = function (elem) {\n var arr = this.array_;\n for (var i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n };\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n Collection.prototype.removeAt = function (index) {\n var prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n return prev;\n };\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n Collection.prototype.setAt = function (index, elem) {\n var n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n var prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev, index));\n this.dispatchEvent(new CollectionEvent(CollectionEventType.ADD, elem, index));\n }\n else {\n for (var j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n };\n /**\n * @private\n */\n Collection.prototype.updateLength_ = function () {\n this.set(Property.LENGTH, this.array_.length);\n };\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [opt_except] Optional index to ignore.\n */\n Collection.prototype.assertUnique_ = function (elem, opt_except) {\n for (var i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n };\n return Collection;\n}(BaseObject));\nexport default Collection;\n//# sourceMappingURL=Collection.js.map","/**\n * @module ol/extent/Corner\n */\n/**\n * Extent corner.\n * @enum {string}\n */\nexport default {\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n};\n//# sourceMappingURL=Corner.js.map","/**\n * @module ol/extent/Relationship\n */\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n//# sourceMappingURL=Relationship.js.map","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n//# sourceMappingURL=asserts.js.map","/**\n * @module ol/extent\n */\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\nimport { assert } from './asserts.js';\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n var extent = createEmpty();\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [opt_extent] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n var minX = Math.min.apply(null, xs);\n var minY = Math.min.apply(null, ys);\n var maxX = Math.max.apply(null, xs);\n var maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0] - value;\n opt_extent[1] = extent[1] - value;\n opt_extent[2] = extent[2] + value;\n opt_extent[3] = extent[3] + value;\n return opt_extent;\n }\n else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n }\n}\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n }\n else {\n return extent.slice();\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n var dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n }\n else if (extent[2] < x) {\n dx = x - extent[2];\n }\n else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n }\n else if (extent[3] < y) {\n dy = y - extent[3];\n }\n else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]);\n}\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var x = coordinate[0];\n var y = coordinate[1];\n var relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n }\n else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n }\n else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = minX;\n opt_extent[1] = minY;\n opt_extent[2] = maxX;\n opt_extent[3] = maxY;\n return opt_extent;\n }\n else {\n return [minX, minY, maxX, maxY];\n }\n}\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n var x = coordinate[0];\n var y = coordinate[1];\n return createOrUpdate(x, y, x, y, opt_extent);\n}\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendCoordinates(extent, coordinates);\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n var extent = createOrUpdateEmpty(opt_extent);\n return extendRings(extent, rings);\n}\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]);\n}\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance);\n}\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (var i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n var val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n var area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./extent/Corner.js\").default} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n var coordinate;\n if (corner === Corner.BOTTOM_LEFT) {\n coordinate = getBottomLeft(extent);\n }\n else if (corner === Corner.BOTTOM_RIGHT) {\n coordinate = getBottomRight(extent);\n }\n else if (corner === Corner.TOP_LEFT) {\n coordinate = getTopLeft(extent);\n }\n else if (corner === Corner.TOP_RIGHT) {\n coordinate = getTopRight(extent);\n }\n else {\n assert(false, 13); // Invalid corner\n }\n return coordinate;\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n var minX = Math.min(extent1[0], extent2[0]);\n var minY = Math.min(extent1[1], extent2[1]);\n var maxX = Math.max(extent1[2], extent2[2]);\n var maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, opt_extent) {\n var dx = (resolution * size[0]) / 2;\n var dy = (resolution * size[1]) / 2;\n var cosRotation = Math.cos(rotation);\n var sinRotation = Math.sin(rotation);\n var xCos = dx * cosRotation;\n var xSin = dx * sinRotation;\n var yCos = dy * cosRotation;\n var ySin = dy * sinRotation;\n var x = center[0];\n var y = center[1];\n var x0 = x - xCos + ySin;\n var x1 = x - xCos - ySin;\n var x2 = x + xCos - ySin;\n var x3 = x + xCos + ySin;\n var y0 = y - xSin - yCos;\n var y1 = y - xSin + yCos;\n var y2 = y + xSin + yCos;\n var y3 = y + xSin - yCos;\n return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), opt_extent);\n}\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n var intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [opt_extent] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n var intersection = opt_extent ? opt_extent : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n }\n else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n }\n else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n }\n else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n }\n else {\n intersection[3] = extent2[3];\n }\n }\n else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]);\n}\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n }\n else {\n return extent;\n }\n}\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n var intersects = false;\n var startRel = coordinateRelationship(extent, start);\n var endRel = coordinateRelationship(extent, end);\n if (startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING) {\n intersects = true;\n }\n else {\n var minX = extent[0];\n var minY = extent[1];\n var maxX = extent[2];\n var maxY = extent[3];\n var startX = start[0];\n var startY = start[1];\n var endX = end[0];\n var endY = end[1];\n var slope = (endY - startY) / (endX - startX);\n var x = void 0, y = void 0;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (!intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [opt_extent] Destination extent.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n var coordinates = [];\n if (opt_stops > 1) {\n var width = extent[2] - extent[0];\n var height = extent[3] - extent[1];\n for (var i = 0; i < opt_stops; ++i) {\n coordinates.push(extent[0] + (width * i) / opt_stops, extent[1], extent[2], extent[1] + (height * i) / opt_stops, extent[2] - (width * i) / opt_stops, extent[3], extent[0], extent[3] - (height * i) / opt_stops);\n }\n }\n else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n var xs = [];\n var ys = [];\n for (var i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, opt_extent);\n}\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n var projectionExtent = projection.getExtent();\n var center = getCenter(extent);\n if (projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])) {\n var worldWidth = getWidth(projectionExtent);\n var worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);\n var offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n//# sourceMappingURL=extent.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/State\n */\n/**\n * @enum {string}\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n */\nexport default {\n UNDEFINED: 'undefined',\n LOADING: 'loading',\n READY: 'ready',\n ERROR: 'error',\n};\n//# sourceMappingURL=State.js.map","/**\n * @module ol/proj/Units\n */\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nvar Units = {\n /**\n * Radians\n * @api\n */\n RADIANS: 'radians',\n /**\n * Degrees\n * @api\n */\n DEGREES: 'degrees',\n /**\n * Feet\n * @api\n */\n FEET: 'ft',\n /**\n * Meters\n * @api\n */\n METERS: 'm',\n /**\n * Pixels\n * @api\n */\n PIXELS: 'pixels',\n /**\n * Tile Pixels\n * @api\n */\n TILE_PIXELS: 'tile-pixels',\n /**\n * US Feet\n * @api\n */\n USFEET: 'us-ft',\n};\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nvar unitByCode = {\n '9001': Units.METERS,\n '9002': Units.FEET,\n '9003': Units.USFEET,\n '9101': Units.RADIANS,\n '9102': Units.DEGREES,\n};\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object}\n * @api\n */\nexport var METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.RADIANS] = 6370997 / (2 * Math.PI);\nMETERS_PER_UNIT[Units.DEGREES] = (2 * Math.PI * 6370997) / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\nexport default Units;\n//# sourceMappingURL=Units.js.map","/**\n * @module ol/proj/Projection\n */\nimport { METERS_PER_UNIT } from './Units.js';\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").default|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution getPointResolution()} function will be used.\n */\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj.get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4.register} function.\n *\n * @api\n */\nvar Projection = /** @class */ (function () {\n /**\n * @param {Options} options Projection options.\n */\n function Projection(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").default}\n */\n this.units_ = /** @type {import(\"./Units.js\").default} */ (options.units);\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n Projection.prototype.canWrapX = function () {\n return this.canWrapX_;\n };\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n Projection.prototype.getCode = function () {\n return this.code_;\n };\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n Projection.prototype.getExtent = function () {\n return this.extent_;\n };\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").default} Units.\n * @api\n */\n Projection.prototype.getUnits = function () {\n return this.units_;\n };\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n Projection.prototype.getMetersPerUnit = function () {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n };\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n Projection.prototype.getWorldExtent = function () {\n return this.worldExtent_;\n };\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n Projection.prototype.getAxisOrientation = function () {\n return this.axisOrientation_;\n };\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n Projection.prototype.isGlobal = function () {\n return this.global_;\n };\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n Projection.prototype.setGlobal = function (global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n };\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n Projection.prototype.getDefaultTileGrid = function () {\n return this.defaultTileGrid_;\n };\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n Projection.prototype.setDefaultTileGrid = function (tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n };\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n Projection.prototype.setExtent = function (extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n };\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n Projection.prototype.setWorldExtent = function (worldExtent) {\n this.worldExtent_ = worldExtent;\n };\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n Projection.prototype.setGetPointResolution = function (func) {\n this.getPointResolutionFunc_ = func;\n };\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n Projection.prototype.getPointResolutionFunc = function () {\n return this.getPointResolutionFunc_;\n };\n return Projection;\n}());\nexport default Projection;\n//# sourceMappingURL=Projection.js.map","/**\n * @module ol/math\n */\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport var cosh = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n }\n else {\n // … else, use the reference implementation of MDN:\n cosh = function (x) {\n var y = /** @type {Math} */ (Math).exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n})();\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport var log2 = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n var log2;\n if ('log2' in Math) {\n // The environment supports the native Math.log2 function, use it…\n log2 = Math.log2;\n }\n else {\n // … else, use the reference implementation of MDN:\n log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n }\n return log2;\n})();\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n }\n else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n var n = mat.length;\n for (var i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n var maxRow = i;\n var maxEl = Math.abs(mat[i][i]);\n for (var r = i + 1; r < n; r++) {\n var absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n // Swap max row with i-th (current) row\n var tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (var j = i + 1; j < n; j++) {\n var coef = -mat[j][i] / mat[i][i];\n for (var k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n }\n else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n // Solve Ax=b for upper triangular matrix A (mat)\n var x = new Array(n);\n for (var l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (var m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n var r = a % b;\n return r * b < 0 ? r + b : r;\n}\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n var factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n//# sourceMappingURL=math.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/proj/epsg3857\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\nimport { cosh } from '../math.js';\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * @const\n * @type {number}\n */\nexport var HALF_SIZE = Math.PI * RADIUS;\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var WORLD_EXTENT = [-180, -85, 180, 85];\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport var MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nvar EPSG3857Projection = /** @class */ (function (_super) {\n __extends(EPSG3857Projection, _super);\n /**\n * @param {string} code Code.\n */\n function EPSG3857Projection(code) {\n return _super.call(this, {\n code: code,\n units: Units.METERS,\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / cosh(point[1] / RADIUS);\n },\n }) || this;\n }\n return EPSG3857Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport var PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension > 1 ? opt_dimension : 2;\n var output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n }\n else {\n output = new Array(length);\n }\n }\n for (var i = 0; i < length; i += dimension) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n var y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n }\n else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension > 1 ? opt_dimension : 2;\n var output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n }\n else {\n output = new Array(length);\n }\n }\n for (var i = 0; i < length; i += dimension) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n//# sourceMappingURL=epsg3857.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/proj/epsg4326\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport var RADIUS = 6378137;\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport var EXTENT = [-180, -90, 180, 90];\n/**\n * @const\n * @type {number}\n */\nexport var METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nvar EPSG4326Projection = /** @class */ (function (_super) {\n __extends(EPSG4326Projection, _super);\n /**\n * @param {string} code Code.\n * @param {string} [opt_axisOrientation] Axis orientation.\n */\n function EPSG4326Projection(code, opt_axisOrientation) {\n return _super.call(this, {\n code: code,\n units: Units.DEGREES,\n extent: EXTENT,\n axisOrientation: opt_axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n }) || this;\n }\n return EPSG4326Projection;\n}(Projection));\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport var PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n//# sourceMappingURL=epsg4326.js.map","/**\n * @module ol/proj/projections\n */\n/**\n * @type {Object}\n */\nvar cache = {};\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n return (cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null);\n}\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n//# sourceMappingURL=projections.js.map","/**\n * @module ol/proj/transforms\n */\nimport { isEmpty } from '../obj.js';\n/**\n * @private\n * @type {!Object>}\n */\nvar transforms = {};\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n var sourceCode = source.getCode();\n var destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n var sourceCode = source.getCode();\n var destinationCode = destination.getCode();\n var transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n var transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n//# sourceMappingURL=transforms.js.map","/**\n * @module ol/geom/GeometryType\n */\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nexport default {\n POINT: 'Point',\n LINE_STRING: 'LineString',\n LINEAR_RING: 'LinearRing',\n POLYGON: 'Polygon',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection',\n CIRCLE: 'Circle',\n};\n//# sourceMappingURL=GeometryType.js.map","/**\n * @module ol/sphere\n */\nimport GeometryType from './geom/GeometryType.js';\nimport { toDegrees, toRadians } from './math.js';\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the geometry. By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius. By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport var DEFAULT_RADIUS = 6371008.8;\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, opt_radius) {\n var radius = opt_radius || DEFAULT_RADIUS;\n var lat1 = toRadians(c1[1]);\n var lat2 = toRadians(c2[1]);\n var deltaLatBy2 = (lat2 - lat1) / 2;\n var deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n Math.sin(deltaLonBy2) *\n Math.sin(deltaLonBy2) *\n Math.cos(lat1) *\n Math.cos(lat2);\n return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n var length = 0;\n for (var i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n length += getDistance(coordinates[i], coordinates[i + 1], radius);\n }\n return length;\n}\n/**\n * Get the spherical length of a geometry. This length is the sum of the\n * great circle distances between coordinates. For polygons, the length is\n * the sum of all rings. For points, the length is zero. For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the\n * length calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, opt_options) {\n var options = opt_options || {};\n var radius = options.radius || DEFAULT_RADIUS;\n var projection = options.projection || 'EPSG:3857';\n var type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n var length = 0;\n var coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT: {\n break;\n }\n case GeometryType.LINE_STRING:\n case GeometryType.LINEAR_RING: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n length = getLengthInternal(coordinates, radius);\n break;\n }\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n length += getLengthInternal(coordinates[i], radius);\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n for (j = 0, jj = coords.length; j < jj; ++j) {\n length += getLengthInternal(coords[j], radius);\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n var geometries = \n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n length += getLength(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return length;\n}\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n var area = 0;\n var len = coordinates.length;\n var x1 = coordinates[len - 1][0];\n var y1 = coordinates[len - 1][1];\n for (var i = 0; i < len; i++) {\n var x2 = coordinates[i][0];\n var y2 = coordinates[i][1];\n area +=\n toRadians(x2 - x1) *\n (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n x1 = x2;\n y1 = y2;\n }\n return (area * radius * radius) / 2.0;\n}\n/**\n * Get the spherical area of a geometry. This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the area\n * calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, opt_options) {\n var options = opt_options || {};\n var radius = options.radius || DEFAULT_RADIUS;\n var projection = options.projection || 'EPSG:3857';\n var type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n var area = 0;\n var coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT:\n case GeometryType.LINE_STRING:\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.LINEAR_RING: {\n break;\n }\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (geometry).getCoordinates();\n area = Math.abs(getAreaInternal(coordinates[0], radius));\n for (i = 1, ii = coordinates.length; i < ii; ++i) {\n area -= Math.abs(getAreaInternal(coordinates[i], radius));\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometry).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n area += Math.abs(getAreaInternal(coords[0], radius));\n for (j = 1, jj = coords.length; j < jj; ++j) {\n area -= Math.abs(getAreaInternal(coords[j], radius));\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n var geometries = \n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (geometry).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n area += getArea(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return area;\n}\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n * point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, opt_radius) {\n var radius = opt_radius || DEFAULT_RADIUS;\n var lat1 = toRadians(c1[1]);\n var lon1 = toRadians(c1[0]);\n var dByR = distance / radius;\n var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) +\n Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));\n var lon = lon1 +\n Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));\n return [toDegrees(lon), toDegrees(lat)];\n}\n//# sourceMappingURL=sphere.js.map","/**\n * @module ol/string\n */\n/**\n * @param {number} number Number to be formatted\n * @param {number} width The desired width\n * @param {number} [opt_precision] Precision of the output string (i.e. number of decimal places)\n * @return {string} Formatted string\n */\nexport function padNumber(number, width, opt_precision) {\n var numberString = opt_precision !== undefined ? number.toFixed(opt_precision) : '' + number;\n var decimal = numberString.indexOf('.');\n decimal = decimal === -1 ? numberString.length : decimal;\n return decimal > width\n ? numberString\n : new Array(1 + width - decimal).join('0') + numberString;\n}\n/**\n * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js\n * @param {string|number} v1 First version\n * @param {string|number} v2 Second version\n * @return {number} Value\n */\nexport function compareVersions(v1, v2) {\n var s1 = ('' + v1).split('.');\n var s2 = ('' + v2).split('.');\n for (var i = 0; i < Math.max(s1.length, s2.length); i++) {\n var n1 = parseInt(s1[i] || '0', 10);\n var n2 = parseInt(s2[i] || '0', 10);\n if (n1 > n2) {\n return 1;\n }\n if (n2 > n1) {\n return -1;\n }\n }\n return 0;\n}\n//# sourceMappingURL=string.js.map","/**\n * @module ol/coordinate\n */\nimport { getWidth } from './extent.js';\nimport { modulo } from './math.js';\nimport { padNumber } from './string.js';\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n var r = circle.getRadius();\n var center = circle.getCenter();\n var x0 = center[0];\n var y0 = center[1];\n var x1 = coordinate[0];\n var y1 = coordinate[1];\n var dx = x1 - x0;\n var dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n var d = Math.sqrt(dx * dx + dy * dy);\n var x = x0 + (r * dx) / d;\n var y = y0 + (r * dy) / d;\n return [x, y];\n}\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n var x0 = coordinate[0];\n var y0 = coordinate[1];\n var start = segment[0];\n var end = segment[1];\n var x1 = start[0];\n var y1 = start[1];\n var x2 = end[0];\n var y2 = end[1];\n var dx = x2 - x1;\n var dy = y2 - y1;\n var along = dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n var x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n }\n else if (along >= 1) {\n x = x2;\n y = y2;\n }\n else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n });\n}\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n var normalizedDegrees = modulo(degrees + 180, 360) - 180;\n var x = Math.abs(3600 * normalizedDegrees);\n var dflPrecision = opt_fractionDigits || 0;\n var precision = Math.pow(10, dflPrecision);\n var deg = Math.floor(x / 3600);\n var min = Math.floor((x - deg * 3600) / 60);\n var sec = x - deg * 3600 - min * 60;\n sec = Math.ceil(sec * precision) / precision;\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n return (deg +\n '\\u00b0 ' +\n padNumber(min, 2) +\n '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) +\n '\\u2033' +\n (normalizedDegrees == 0\n ? ''\n : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)));\n}\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n var equals = true;\n for (var i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n var dx = coord1[0] - coord2[0];\n var dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return (degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits));\n }\n else {\n return '';\n }\n}\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n var worldWidth = getWidth(projection.getExtent());\n var worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [opt_sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n var projectionExtent = projection.getExtent();\n var worldsAway = 0;\n if (projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])) {\n var sourceExtentWidth = opt_sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor((coordinate[0] - projectionExtent[0]) / sourceExtentWidth);\n }\n return worldsAway;\n}\n//# sourceMappingURL=coordinate.js.map","/**\n * @module ol/proj\n */\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport Units, { METERS_PER_UNIT } from './proj/Units.js';\nimport { PROJECTIONS as EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326, } from './proj/epsg3857.js';\nimport { PROJECTIONS as EPSG4326_PROJECTIONS } from './proj/epsg4326.js';\nimport { add as addProj, clear as clearProj, get as getProj, } from './proj/projections.js';\nimport { add as addTransformFunc, clear as clearTransformFuncs, get as getTransformFunc, } from './proj/transforms.js';\nimport { applyTransform, getWidth } from './extent.js';\nimport { clamp, modulo } from './math.js';\nimport { getDistance } from './sphere.js';\nimport { getWorldsAway } from './coordinate.js';\n/**\n * A projection as {@link module:ol/proj/Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array, Array=, number=): Array} TransformFunction\n * @api\n */\nexport { METERS_PER_UNIT };\nexport { Projection };\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n var output;\n if (opt_output !== undefined) {\n for (var i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n output = opt_output;\n }\n else {\n output = input.slice();\n }\n return output;\n}\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n if (opt_output !== undefined && input !== opt_output) {\n for (var i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n input = opt_output;\n }\n return input;\n}\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n return typeof projectionLike === 'string'\n ? getProj(/** @type {string} */ (projectionLike))\n : /** @type {Projection} */ (projectionLike) || null;\n}\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the 'point' pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").default} [opt_units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n projection = get(projection);\n var pointResolution;\n var getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (opt_units && opt_units !== projection.getUnits()) {\n var metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[opt_units];\n }\n }\n }\n else {\n var units = projection.getUnits();\n if ((units == Units.DEGREES && !opt_units) || opt_units == Units.DEGREES) {\n pointResolution = resolution;\n }\n else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n var toEPSG4326_1 = getTransformFromProjections(projection, get('EPSG:4326'));\n if (toEPSG4326_1 === identityTransform && units !== Units.DEGREES) {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n }\n else {\n var vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326_1(vertices, vertices, 2);\n var width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n var height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n var metersPerUnit = opt_units\n ? METERS_PER_UNIT[opt_units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(projections1, projections2, forwardTransform, inverseTransform) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n else if (typeof projection === 'string') {\n return get(projection);\n }\n else {\n return /** @type {Projection} */ (projection);\n }\n}\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [opt_output] Output.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output.\n */\n function (input, opt_output, opt_dimension) {\n var length = input.length;\n var dimension = opt_dimension !== undefined ? opt_dimension : 2;\n var output = opt_output !== undefined ? opt_output : new Array(length);\n for (var i = 0; i < length; i += dimension) {\n var point = coordTransform([input[i], input[i + 1]]);\n output[i] = point[0];\n output[i + 1] = point[1];\n for (var j = dimension - 1; j >= 2; --j) {\n output[i + j] = input[i + j];\n }\n }\n return output;\n });\n}\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n var sourceProj = get(source);\n var destProj = get(destination);\n addTransformFunc(sourceProj, destProj, createTransformFromCoordinateTransform(forward));\n addTransformFunc(destProj, sourceProj, createTransformFromCoordinateTransform(inverse));\n}\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [opt_projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n return transform(coordinate, 'EPSG:4326', opt_projection !== undefined ? opt_projection : 'EPSG:3857');\n}\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [opt_projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n var lonLat = transform(coordinate, opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');\n var lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n var equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n else {\n var transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n * object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(sourceProjection, destinationProjection) {\n var sourceCode = sourceProjection.getCode();\n var destinationCode = destinationProjection.getCode();\n var transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n var sourceProjection = get(source);\n var destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n var transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, opt_stops) {\n var transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, opt_stops);\n}\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(point, sourceProjection, destinationProjection) {\n var transformFunc = getTransformFromProjections(sourceProjection, destinationProjection);\n return transformFunc(point);\n}\n/**\n * @type {?Projection}\n */\nvar userProjection = null;\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @param {ProjectionLike} projection The user projection.\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n/**\n * Clear the user projection if set. Note that this method is not yet a part of\n * the stable API. Support for user projections is not yet complete and should\n * be considered experimental.\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @return {?Projection} The user projection (or null if not set).\n */\nexport function getUserProjection() {\n return userProjection;\n}\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods. Note that this\n * method is not yet a part of the stable API. Support for user projections is\n * not yet complete and should be considered experimental.\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n var sourceUnits = get(sourceProjection).getUnits();\n var userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[sourceUnits]) / METERS_PER_UNIT[userUnits]\n : resolution;\n}\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n var sourceUnits = get(destProjection).getUnits();\n var userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[userUnits]) / METERS_PER_UNIT[sourceUnits]\n : resolution;\n}\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n var sourceX = coord[0];\n var sourceY = coord[1];\n var transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n var sourceExtent = sourceProj.getExtent();\n var sourceExtentWidth = getWidth(sourceExtent);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n sourceX = sourceX - worldsAway * sourceExtentWidth;\n }\n sourceX = clamp(sourceX, sourceExtent[0], sourceExtent[2]);\n sourceY = clamp(sourceY, sourceExtent[1], sourceExtent[3]);\n transformed = transform([sourceX, sourceY]);\n }\n else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(EPSG4326_PROJECTIONS, EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326);\n}\naddCommon();\n//# sourceMappingURL=proj.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/source/Source\n */\nimport BaseObject from '../Object.js';\nimport SourceState from './State.js';\nimport { abstract } from '../util.js';\nimport { get as getProjection } from '../proj.js';\n/**\n * A function that takes a {@link module:ol/PluggableMap~FrameState} and returns a string or\n * an array of strings representing source attributions.\n *\n * @typedef {function(import(\"../PluggableMap.js\").FrameState): (string|Array)} Attribution\n */\n/**\n * A type that can be used to provide attribution information for data sources.\n *\n * It represents either\n * * a simple string (e.g. `'© Acme Inc.'`)\n * * an array of simple strings (e.g. `['© Acme Inc.', '© Bacme Inc.']`)\n * * a function that returns a string or array of strings ({@link module:ol/source/Source~Attribution})\n *\n * @typedef {string|Array|Attribution} AttributionLike\n */\n/**\n * @typedef {Object} Options\n * @property {AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {import(\"./State.js\").default} [state='ready'] State.\n * @property {boolean} [wrapX=false] WrapX.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for {@link module:ol/layer/Layer~Layer} sources.\n *\n * A generic `change` event is triggered when the state of the source changes.\n * @abstract\n * @api\n */\nvar Source = /** @class */ (function (_super) {\n __extends(Source, _super);\n /**\n * @param {Options} options Source options.\n */\n function Source(options) {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {import(\"../proj/Projection.js\").default}\n */\n _this.projection = getProjection(options.projection);\n /**\n * @private\n * @type {?Attribution}\n */\n _this.attributions_ = adaptAttributions(options.attributions);\n /**\n * @private\n * @type {boolean}\n */\n _this.attributionsCollapsible_ =\n options.attributionsCollapsible !== undefined\n ? options.attributionsCollapsible\n : true;\n /**\n * This source is currently loading data. Sources that defer loading to the\n * map's tile queue never set this to `true`.\n * @type {boolean}\n */\n _this.loading = false;\n /**\n * @private\n * @type {import(\"./State.js\").default}\n */\n _this.state_ =\n options.state !== undefined ? options.state : SourceState.READY;\n /**\n * @private\n * @type {boolean}\n */\n _this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;\n /**\n * @private\n * @type {boolean}\n */\n _this.interpolate_ = !!options.interpolate;\n /**\n * @protected\n * @type {function(import(\"../View.js\").ViewOptions):void}\n */\n _this.viewResolver = null;\n /**\n * @protected\n * @type {function(Error):void}\n */\n _this.viewRejector = null;\n var self = _this;\n /**\n * @private\n * @type {Promise}\n */\n _this.viewPromise_ = new Promise(function (resolve, reject) {\n self.viewResolver = resolve;\n self.viewRejector = reject;\n });\n return _this;\n }\n /**\n * Get the attribution function for the source.\n * @return {?Attribution} Attribution function.\n * @api\n */\n Source.prototype.getAttributions = function () {\n return this.attributions_;\n };\n /**\n * @return {boolean} Attributions are collapsible.\n * @api\n */\n Source.prototype.getAttributionsCollapsible = function () {\n return this.attributionsCollapsible_;\n };\n /**\n * Get the projection of the source.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n * @api\n */\n Source.prototype.getProjection = function () {\n return this.projection;\n };\n /**\n * @abstract\n * @return {Array|undefined} Resolutions.\n */\n Source.prototype.getResolutions = function () {\n return abstract();\n };\n /**\n * @return {Promise} A promise for view-related properties.\n */\n Source.prototype.getView = function () {\n return this.viewPromise_;\n };\n /**\n * Get the state of the source, see {@link module:ol/source/State~State} for possible states.\n * @return {import(\"./State.js\").default} State.\n * @api\n */\n Source.prototype.getState = function () {\n return this.state_;\n };\n /**\n * @return {boolean|undefined} Wrap X.\n */\n Source.prototype.getWrapX = function () {\n return this.wrapX_;\n };\n /**\n * @return {boolean} Use linear interpolation when resampling.\n */\n Source.prototype.getInterpolate = function () {\n return this.interpolate_;\n };\n /**\n * Refreshes the source. The source will be cleared, and data from the server will be reloaded.\n * @api\n */\n Source.prototype.refresh = function () {\n this.changed();\n };\n /**\n * Set the attributions of the source.\n * @param {AttributionLike|undefined} attributions Attributions.\n * Can be passed as `string`, `Array`, {@link module:ol/source/Source~Attribution},\n * or `undefined`.\n * @api\n */\n Source.prototype.setAttributions = function (attributions) {\n this.attributions_ = adaptAttributions(attributions);\n this.changed();\n };\n /**\n * Set the state of the source.\n * @param {import(\"./State.js\").default} state State.\n */\n Source.prototype.setState = function (state) {\n this.state_ = state;\n this.changed();\n };\n return Source;\n}(BaseObject));\n/**\n * Turns the attributions option into an attributions function.\n * @param {AttributionLike|undefined} attributionLike The attribution option.\n * @return {?Attribution} An attribution function (or null).\n */\nfunction adaptAttributions(attributionLike) {\n if (!attributionLike) {\n return null;\n }\n if (Array.isArray(attributionLike)) {\n return function (frameState) {\n return attributionLike;\n };\n }\n if (typeof attributionLike === 'function') {\n return attributionLike;\n }\n return function (frameState) {\n return [attributionLike];\n };\n}\nexport default Source;\n//# sourceMappingURL=Source.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/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","/**\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 interpolate: true,\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 var removeAndIgnoreReturn = function (feature) {\n this.removeFeatureInternal(feature);\n }.bind(this);\n this.featuresRtree_.forEach(removeAndIgnoreReturn);\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 if (!feature) {\n return;\n }\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 var result = this.removeFeatureInternal(feature);\n if (result) {\n this.changed();\n }\n };\n /**\n * Remove feature without firing a `change` event.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @return {import(\"../Feature.js\").default|undefined} The removed feature\n * (or undefined if the feature was not found).\n * @protected\n */\n VectorSource.prototype.removeFeatureInternal = function (feature) {\n var featureKey = getUid(feature);\n var featureChangeKeys = this.featureChangeKeys_[featureKey];\n if (!featureChangeKeys) {\n return;\n }\n featureChangeKeys.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 return 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","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/transform\n */\nimport { WORKER_OFFSCREEN_CANVAS } from './has.js';\nimport { assert } from './asserts.js';\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n/**\n * @private\n * @type {Transform}\n */\nvar tmp_ = new Array(6);\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n var a1 = transform1[0];\n var b1 = transform1[1];\n var c1 = transform1[2];\n var d1 = transform1[3];\n var e1 = transform1[4];\n var f1 = transform1[5];\n var a2 = transform2[0];\n var b2 = transform2[1];\n var c2 = transform2[2];\n var d2 = transform2[3];\n var e2 = transform2[4];\n var f2 = transform2[5];\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n return transform1;\n}\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n var x = coordinate[0];\n var y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n var det = determinant(source);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n var a = source[0];\n var b = source[1];\n var c = source[2];\n var d = source[3];\n var e = source[4];\n var f = source[5];\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n return target;\n}\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n/**\n * @type {HTMLElement}\n * @private\n */\nvar transformStringDiv;\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n var transformString = 'matrix(' + mat.join(', ') + ')';\n if (WORKER_OFFSCREEN_CANVAS) {\n return transformString;\n }\n var node = transformStringDiv || (transformStringDiv = document.createElement('div'));\n node.style.transform = transformString;\n return node.style.transform;\n}\n//# sourceMappingURL=transform.js.map","/**\n * @module ol/has\n */\nvar ua = typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport var FIREFOX = ua.indexOf('firefox') !== -1;\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport var SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport var WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport var MAC = ua.indexOf('macintosh') !== -1;\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport var DEVICE_PIXEL_RATIO = typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport var WORKER_OFFSCREEN_CANVAS = typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport var IMAGE_DECODE = typeof Image !== 'undefined' && Image.prototype.decode;\n/**\n * @type {boolean}\n */\nexport var PASSIVE_EVENT_LISTENERS = (function () {\n var passive = false;\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n }\n catch (error) {\n // passive not supported\n }\n return passive;\n})();\n//# sourceMappingURL=has.js.map","/**\n * @module ol/geom/flat/transform\n */\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(flatCoordinates, offset, end, stride, transform, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var x = flatCoordinates[j];\n var y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var anchorX = anchor[0];\n var anchorY = anchor[1];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var deltaX = flatCoordinates[j] - anchorX;\n var deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var anchorX = anchor[0];\n var anchorY = anchor[1];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n var deltaX = flatCoordinates[j] - anchorX;\n var deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {\n var dest = opt_dest ? opt_dest : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (var k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n//# sourceMappingURL=transform.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/Geometry\n */\nimport BaseObject from '../Object.js';\nimport Units from '../proj/Units.js';\nimport { abstract } from '../util.js';\nimport { compose as composeTransform, create as createTransform, } from '../transform.js';\nimport { createEmpty, createOrUpdateEmpty, getHeight, returnOrUpdate, } from '../extent.js';\nimport { get as getProjection, getTransform } from '../proj.js';\nimport { memoizeOne } from '../functions.js';\nimport { transform2D } from './flat/transform.js';\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nvar tmpTransform = createTransform();\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nvar Geometry = /** @class */ (function (_super) {\n __extends(Geometry, _super);\n function Geometry() {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n _this.extent_ = createEmpty();\n /**\n * @private\n * @type {number}\n */\n _this.extentRevision_ = -1;\n /**\n * @protected\n * @type {number}\n */\n _this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n /**\n * @protected\n * @type {number}\n */\n _this.simplifiedGeometryRevision = 0;\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n _this.simplifyTransformedInternal = memoizeOne(function (revision, squaredTolerance, opt_transform) {\n if (!opt_transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n var clone = this.clone();\n clone.applyTransform(opt_transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n return _this;\n }\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n Geometry.prototype.simplifyTransformed = function (squaredTolerance, opt_transform) {\n return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, opt_transform);\n };\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n Geometry.prototype.clone = function () {\n return abstract();\n };\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n Geometry.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n return abstract();\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n Geometry.prototype.containsXY = function (x, y) {\n var coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n };\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n Geometry.prototype.getClosestPoint = function (point, opt_closestPoint) {\n var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n };\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n Geometry.prototype.intersectsCoordinate = function (coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n };\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n Geometry.prototype.computeExtent = function (extent) {\n return abstract();\n };\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [opt_extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n Geometry.prototype.getExtent = function (opt_extent) {\n if (this.extentRevision_ != this.getRevision()) {\n var extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, opt_extent);\n };\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n Geometry.prototype.rotate = function (angle, anchor) {\n abstract();\n };\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n Geometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n abstract();\n };\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n Geometry.prototype.simplify = function (tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n };\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n Geometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n return abstract();\n };\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n */\n Geometry.prototype.getType = function () {\n return abstract();\n };\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n Geometry.prototype.applyTransform = function (transformFn) {\n abstract();\n };\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n Geometry.prototype.intersectsExtent = function (extent) {\n return abstract();\n };\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n Geometry.prototype.translate = function (deltaX, deltaY) {\n abstract();\n };\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n Geometry.prototype.transform = function (source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n var sourceProj = getProjection(source);\n var transformFn = sourceProj.getUnits() == Units.TILE_PIXELS\n ? function (inCoordinates, outCoordinates, stride) {\n var pixelExtent = sourceProj.getExtent();\n var projectedExtent = sourceProj.getWorldExtent();\n var scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(tmpTransform, projectedExtent[0], projectedExtent[3], scale, -scale, 0, 0, 0);\n transform2D(inCoordinates, 0, inCoordinates.length, stride, tmpTransform, outCoordinates);\n return getTransform(sourceProj, destination)(inCoordinates, outCoordinates, stride);\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n };\n return Geometry;\n}(BaseObject));\nexport default Geometry;\n//# sourceMappingURL=Geometry.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/GeometryCollection\n */\nimport EventType from '../events/EventType.js';\nimport Geometry from './Geometry.js';\nimport GeometryType from './GeometryType.js';\nimport { closestSquaredDistanceXY, createOrUpdateEmpty, extend, getCenter, } from '../extent.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @classdesc\n * An array of {@link module:ol/geom/Geometry} objects.\n *\n * @api\n */\nvar GeometryCollection = /** @class */ (function (_super) {\n __extends(GeometryCollection, _super);\n /**\n * @param {Array} [opt_geometries] Geometries.\n */\n function GeometryCollection(opt_geometries) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {Array}\n */\n _this.geometries_ = opt_geometries ? opt_geometries : null;\n /**\n * @type {Array}\n */\n _this.changeEventsKeys_ = [];\n _this.listenGeometriesChange_();\n return _this;\n }\n /**\n * @private\n */\n GeometryCollection.prototype.unlistenGeometriesChange_ = function () {\n this.changeEventsKeys_.forEach(unlistenByKey);\n this.changeEventsKeys_.length = 0;\n };\n /**\n * @private\n */\n GeometryCollection.prototype.listenGeometriesChange_ = function () {\n if (!this.geometries_) {\n return;\n }\n for (var i = 0, ii = this.geometries_.length; i < ii; ++i) {\n this.changeEventsKeys_.push(listen(this.geometries_[i], EventType.CHANGE, this.changed, this));\n }\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!GeometryCollection} Clone.\n * @api\n */\n GeometryCollection.prototype.clone = function () {\n var geometryCollection = new GeometryCollection(null);\n geometryCollection.setGeometries(this.geometries_);\n geometryCollection.applyProperties(this);\n return geometryCollection;\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 GeometryCollection.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n minSquaredDistance = geometries[i].closestPointXY(x, y, closestPoint, minSquaredDistance);\n }\n return minSquaredDistance;\n };\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n GeometryCollection.prototype.containsXY = function (x, y) {\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].containsXY(x, y)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n GeometryCollection.prototype.computeExtent = function (extent) {\n createOrUpdateEmpty(extent);\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n extend(extent, geometries[i].getExtent());\n }\n return extent;\n };\n /**\n * Return the geometries that make up this geometry collection.\n * @return {Array} Geometries.\n * @api\n */\n GeometryCollection.prototype.getGeometries = function () {\n return cloneGeometries(this.geometries_);\n };\n /**\n * @return {Array} Geometries.\n */\n GeometryCollection.prototype.getGeometriesArray = function () {\n return this.geometries_;\n };\n /**\n * @return {Array} Geometries.\n */\n GeometryCollection.prototype.getGeometriesArrayRecursive = function () {\n /** @type {Array} */\n var geometriesArray = [];\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].getType() === this.getType()) {\n geometriesArray = geometriesArray.concat(\n /** @type {GeometryCollection} */ (geometries[i]).getGeometriesArrayRecursive());\n }\n else {\n geometriesArray.push(geometries[i]);\n }\n }\n return geometriesArray;\n };\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {GeometryCollection} Simplified GeometryCollection.\n */\n GeometryCollection.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n if (squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)) {\n return this;\n }\n var simplifiedGeometries = [];\n var geometries = this.geometries_;\n var simplified = false;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n var geometry = geometries[i];\n var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);\n simplifiedGeometries.push(simplifiedGeometry);\n if (simplifiedGeometry !== geometry) {\n simplified = true;\n }\n }\n if (simplified) {\n var simplifiedGeometryCollection = new GeometryCollection(null);\n simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);\n return simplifiedGeometryCollection;\n }\n else {\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n GeometryCollection.prototype.getType = function () {\n return GeometryType.GEOMETRY_COLLECTION;\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 GeometryCollection.prototype.intersectsExtent = function (extent) {\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n if (geometries[i].intersectsExtent(extent)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @return {boolean} Is empty.\n */\n GeometryCollection.prototype.isEmpty = function () {\n return this.geometries_.length === 0;\n };\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n GeometryCollection.prototype.rotate = function (angle, anchor) {\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].rotate(angle, anchor);\n }\n this.changed();\n };\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n GeometryCollection.prototype.scale = function (sx, opt_sy, opt_anchor) {\n var anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].scale(sx, opt_sy, anchor);\n }\n this.changed();\n };\n /**\n * Set the geometries that make up this geometry collection.\n * @param {Array} geometries Geometries.\n * @api\n */\n GeometryCollection.prototype.setGeometries = function (geometries) {\n this.setGeometriesArray(cloneGeometries(geometries));\n };\n /**\n * @param {Array} geometries Geometries.\n */\n GeometryCollection.prototype.setGeometriesArray = function (geometries) {\n this.unlistenGeometriesChange_();\n this.geometries_ = geometries;\n this.listenGeometriesChange_();\n this.changed();\n };\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n GeometryCollection.prototype.applyTransform = function (transformFn) {\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].applyTransform(transformFn);\n }\n this.changed();\n };\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n GeometryCollection.prototype.translate = function (deltaX, deltaY) {\n var geometries = this.geometries_;\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n geometries[i].translate(deltaX, deltaY);\n }\n this.changed();\n };\n /**\n * Clean up.\n */\n GeometryCollection.prototype.disposeInternal = function () {\n this.unlistenGeometriesChange_();\n _super.prototype.disposeInternal.call(this);\n };\n return GeometryCollection;\n}(Geometry));\n/**\n * @param {Array} geometries Geometries.\n * @return {Array} Cloned geometries.\n */\nfunction cloneGeometries(geometries) {\n var clonedGeometries = [];\n for (var i = 0, ii = geometries.length; i < ii; ++i) {\n clonedGeometries.push(geometries[i].clone());\n }\n return clonedGeometries;\n}\nexport default GeometryCollection;\n//# sourceMappingURL=GeometryCollection.js.map","/**\n * @module ol/format/Feature\n */\nimport Units from '../proj/Units.js';\nimport { abstract } from '../util.js';\nimport { assign } from '../obj.js';\nimport { equivalent as equivalentProjection, get as getProjection, transformExtent, } from '../proj.js';\n/**\n * @typedef {Object} ReadOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are reading.\n * If not provided, the projection will be derived from the data (where possible) or\n * the `dataProjection` of the format is assigned (where set). If the projection\n * can not be derived from the data and if no `dataProjection` is set for a format,\n * the features will not be reprojected.\n * @property {import(\"../extent.js\").Extent} [extent] Tile extent in map units of the tile being read.\n * This is only required when reading data with tile pixels as geometry units. When configured,\n * a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be\n * provided.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * created by the format reader. If not provided, features will be returned in the\n * `dataProjection`.\n */\n/**\n * @typedef {Object} WriteOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are writing.\n * If not provided, the `dataProjection` of the format is assigned (where set).\n * If no `dataProjection` is set for a format, the features will be returned\n * in the `featureProjection`.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * that will be serialized by the format writer. If not provided, geometries are assumed\n * to be in the `dataProjection` if that is set; in other words, they are not transformed.\n * @property {boolean} [rightHanded] When writing geometries, follow the right-hand\n * rule for linear ring orientation. This means that polygons will have counter-clockwise\n * exterior rings and clockwise interior rings. By default, coordinates are serialized\n * as they are provided at construction. If `true`, the right-hand rule will\n * be applied. If `false`, the left-hand rule will be applied (clockwise for\n * exterior and counter-clockwise for interior rings). Note that not all\n * formats support this. The GeoJSON format does use this property when writing\n * geometries.\n * @property {number} [decimals] Maximum number of decimal places for coordinates.\n * Coordinates are stored internally as floats, but floating-point arithmetic can create\n * coordinates with a large number of decimal places, not generally wanted on output.\n * Set a number here to round coordinates. Can also be used to ensure that\n * coordinates read in can be written back out with the same number of decimals.\n * Default is no rounding.\n */\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for feature formats.\n * {@link module:ol/format/Feature~FeatureFormat} subclasses provide the ability to decode and encode\n * {@link module:ol/Feature~Feature} objects from a variety of commonly used geospatial\n * file formats. See the documentation for each format for more details.\n *\n * @abstract\n * @api\n */\nvar FeatureFormat = /** @class */ (function () {\n function FeatureFormat() {\n /**\n * @protected\n * @type {import(\"../proj/Projection.js\").default|undefined}\n */\n this.dataProjection = undefined;\n /**\n * @protected\n * @type {import(\"../proj/Projection.js\").default|undefined}\n */\n this.defaultFeatureProjection = undefined;\n /**\n * A list media types supported by the format in descending order of preference.\n * @type {Array}\n */\n this.supportedMediaTypes = null;\n }\n /**\n * Adds the data projection to the read options.\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Options.\n * @return {ReadOptions|undefined} Options.\n * @protected\n */\n FeatureFormat.prototype.getReadOptions = function (source, opt_options) {\n var options;\n if (opt_options) {\n var dataProjection = opt_options.dataProjection\n ? getProjection(opt_options.dataProjection)\n : this.readProjection(source);\n if (opt_options.extent &&\n dataProjection &&\n dataProjection.getUnits() === Units.TILE_PIXELS) {\n dataProjection = getProjection(dataProjection);\n dataProjection.setWorldExtent(opt_options.extent);\n }\n options = {\n dataProjection: dataProjection,\n featureProjection: opt_options.featureProjection,\n };\n }\n return this.adaptOptions(options);\n };\n /**\n * Sets the `dataProjection` on the options, if no `dataProjection`\n * is set.\n * @param {WriteOptions|ReadOptions|undefined} options\n * Options.\n * @protected\n * @return {WriteOptions|ReadOptions|undefined}\n * Updated options.\n */\n FeatureFormat.prototype.adaptOptions = function (options) {\n return assign({\n dataProjection: this.dataProjection,\n featureProjection: this.defaultFeatureProjection,\n }, options);\n };\n /**\n * @abstract\n * @return {import(\"./FormatType.js\").default} Format.\n */\n FeatureFormat.prototype.getType = function () {\n return abstract();\n };\n /**\n * Read a single feature from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").FeatureLike} Feature.\n */\n FeatureFormat.prototype.readFeature = function (source, opt_options) {\n return abstract();\n };\n /**\n * Read all features from a source.\n *\n * @abstract\n * @param {Document|Element|ArrayBuffer|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n */\n FeatureFormat.prototype.readFeatures = function (source, opt_options) {\n return abstract();\n };\n /**\n * Read a single geometry from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n FeatureFormat.prototype.readGeometry = function (source, opt_options) {\n return abstract();\n };\n /**\n * Read the projection from a source.\n *\n * @abstract\n * @param {Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n */\n FeatureFormat.prototype.readProjection = function (source) {\n return abstract();\n };\n /**\n * Encode a feature in this format.\n *\n * @abstract\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n FeatureFormat.prototype.writeFeature = function (feature, opt_options) {\n return abstract();\n };\n /**\n * Encode an array of features in this format.\n *\n * @abstract\n * @param {Array} features Features.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n FeatureFormat.prototype.writeFeatures = function (features, opt_options) {\n return abstract();\n };\n /**\n * Write a single geometry in this format.\n *\n * @abstract\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {WriteOptions} [opt_options] Write options.\n * @return {string|ArrayBuffer} Result.\n */\n FeatureFormat.prototype.writeGeometry = function (geometry, opt_options) {\n return abstract();\n };\n return FeatureFormat;\n}());\nexport default FeatureFormat;\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {boolean} write Set to true for writing, false for reading.\n * @param {WriteOptions|ReadOptions} [opt_options] Options.\n * @return {import(\"../geom/Geometry.js\").default} Transformed geometry.\n */\nexport function transformGeometryWithOptions(geometry, write, opt_options) {\n var featureProjection = opt_options\n ? getProjection(opt_options.featureProjection)\n : null;\n var dataProjection = opt_options\n ? getProjection(opt_options.dataProjection)\n : null;\n var transformed;\n if (featureProjection &&\n dataProjection &&\n !equivalentProjection(featureProjection, dataProjection)) {\n transformed = (write ? geometry.clone() : geometry).transform(write ? featureProjection : dataProjection, write ? dataProjection : featureProjection);\n }\n else {\n transformed = geometry;\n }\n if (write &&\n opt_options &&\n /** @type {WriteOptions} */ (opt_options).decimals !== undefined) {\n var power_1 = Math.pow(10, \n /** @type {WriteOptions} */ (opt_options).decimals);\n // if decimals option on write, round each coordinate appropriately\n /**\n * @param {Array} coordinates Coordinates.\n * @return {Array} Transformed coordinates.\n */\n var transform = function (coordinates) {\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n coordinates[i] = Math.round(coordinates[i] * power_1) / power_1;\n }\n return coordinates;\n };\n if (transformed === geometry) {\n transformed = geometry.clone();\n }\n transformed.applyTransform(transform);\n }\n return transformed;\n}\n/**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {ReadOptions} [opt_options] Read options.\n * @return {import(\"../extent.js\").Extent} Transformed extent.\n */\nexport function transformExtentWithOptions(extent, opt_options) {\n var featureProjection = opt_options\n ? getProjection(opt_options.featureProjection)\n : null;\n var dataProjection = opt_options\n ? getProjection(opt_options.dataProjection)\n : null;\n if (featureProjection &&\n dataProjection &&\n !equivalentProjection(featureProjection, dataProjection)) {\n return transformExtent(extent, dataProjection, featureProjection);\n }\n else {\n return extent;\n }\n}\n//# sourceMappingURL=Feature.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/format/JSONFeature\n */\nimport FeatureFormat from './Feature.js';\nimport FormatType from './FormatType.js';\nimport { abstract } from '../util.js';\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for JSON feature formats.\n *\n * @abstract\n */\nvar JSONFeature = /** @class */ (function (_super) {\n __extends(JSONFeature, _super);\n function JSONFeature() {\n return _super.call(this) || this;\n }\n /**\n * @return {import(\"./FormatType.js\").default} Format.\n */\n JSONFeature.prototype.getType = function () {\n return FormatType.JSON;\n };\n /**\n * Read a feature. Only works for a single feature. Use `readFeatures` to\n * read a feature collection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../Feature.js\").default} Feature.\n * @api\n */\n JSONFeature.prototype.readFeature = function (source, opt_options) {\n return this.readFeatureFromObject(getObject(source), this.getReadOptions(source, opt_options));\n };\n /**\n * Read all features. Works with both a single feature and a feature\n * collection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {Array} Features.\n * @api\n */\n JSONFeature.prototype.readFeatures = function (source, opt_options) {\n return this.readFeaturesFromObject(getObject(source), this.getReadOptions(source, opt_options));\n };\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\n JSONFeature.prototype.readFeatureFromObject = function (object, opt_options) {\n return abstract();\n };\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n JSONFeature.prototype.readFeaturesFromObject = function (object, opt_options) {\n return abstract();\n };\n /**\n * Read a geometry.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n * @api\n */\n JSONFeature.prototype.readGeometry = function (source, opt_options) {\n return this.readGeometryFromObject(getObject(source), this.getReadOptions(source, opt_options));\n };\n /**\n * @abstract\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n JSONFeature.prototype.readGeometryFromObject = function (object, opt_options) {\n return abstract();\n };\n /**\n * Read the projection.\n *\n * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n * @return {import(\"../proj/Projection.js\").default} Projection.\n * @api\n */\n JSONFeature.prototype.readProjection = function (source) {\n return this.readProjectionFromObject(getObject(source));\n };\n /**\n * @abstract\n * @param {Object} object Object.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n JSONFeature.prototype.readProjectionFromObject = function (object) {\n return abstract();\n };\n /**\n * Encode a feature as string.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded feature.\n * @api\n */\n JSONFeature.prototype.writeFeature = function (feature, opt_options) {\n return JSON.stringify(this.writeFeatureObject(feature, opt_options));\n };\n /**\n * @abstract\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n JSONFeature.prototype.writeFeatureObject = function (feature, opt_options) {\n return abstract();\n };\n /**\n * Encode an array of features as string.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded features.\n * @api\n */\n JSONFeature.prototype.writeFeatures = function (features, opt_options) {\n return JSON.stringify(this.writeFeaturesObject(features, opt_options));\n };\n /**\n * @abstract\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n JSONFeature.prototype.writeFeaturesObject = function (features, opt_options) {\n return abstract();\n };\n /**\n * Encode a geometry as string.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {string} Encoded geometry.\n * @api\n */\n JSONFeature.prototype.writeGeometry = function (geometry, opt_options) {\n return JSON.stringify(this.writeGeometryObject(geometry, opt_options));\n };\n /**\n * @abstract\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {Object} Object.\n */\n JSONFeature.prototype.writeGeometryObject = function (geometry, opt_options) {\n return abstract();\n };\n return JSONFeature;\n}(FeatureFormat));\n/**\n * @param {Document|Element|Object|string} source Source.\n * @return {Object} Object.\n */\nfunction getObject(source) {\n if (typeof source === 'string') {\n var object = JSON.parse(source);\n return object ? /** @type {Object} */ (object) : null;\n }\n else if (source !== null) {\n return source;\n }\n else {\n return null;\n }\n}\nexport default JSONFeature;\n//# sourceMappingURL=JSONFeature.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","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/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport GeometryLayout from './GeometryLayout.js';\nimport { abstract } from '../util.js';\nimport { createOrUpdateFromFlatCoordinates, getCenter } from '../extent.js';\nimport { rotate, scale, transform2D, translate } from './flat/transform.js';\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nvar SimpleGeometry = /** @class */ (function (_super) {\n __extends(SimpleGeometry, _super);\n function SimpleGeometry() {\n var _this = _super.call(this) || this;\n /**\n * @protected\n * @type {import(\"./GeometryLayout.js\").default}\n */\n _this.layout = GeometryLayout.XY;\n /**\n * @protected\n * @type {number}\n */\n _this.stride = 2;\n /**\n * @protected\n * @type {Array}\n */\n _this.flatCoordinates = null;\n return _this;\n }\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n SimpleGeometry.prototype.computeExtent = function (extent) {\n return createOrUpdateFromFlatCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);\n };\n /**\n * @abstract\n * @return {Array<*>} Coordinates.\n */\n SimpleGeometry.prototype.getCoordinates = function () {\n return abstract();\n };\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n SimpleGeometry.prototype.getFirstCoordinate = function () {\n return this.flatCoordinates.slice(0, this.stride);\n };\n /**\n * @return {Array} Flat coordinates.\n */\n SimpleGeometry.prototype.getFlatCoordinates = function () {\n return this.flatCoordinates;\n };\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n SimpleGeometry.prototype.getLastCoordinate = function () {\n return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);\n };\n /**\n * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.\n * @return {import(\"./GeometryLayout.js\").default} Layout.\n * @api\n */\n SimpleGeometry.prototype.getLayout = function () {\n return this.layout;\n };\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n */\n SimpleGeometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {\n return this;\n }\n var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance);\n var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n }\n else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n SimpleGeometry.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n return this;\n };\n /**\n * @return {number} Stride.\n */\n SimpleGeometry.prototype.getStride = function () {\n return this.stride;\n };\n /**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n SimpleGeometry.prototype.setFlatCoordinates = function (layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n };\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n SimpleGeometry.prototype.setCoordinates = function (coordinates, opt_layout) {\n abstract();\n };\n /**\n * @param {import(\"./GeometryLayout.js\").default|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n SimpleGeometry.prototype.setLayout = function (layout, coordinates, nesting) {\n /** @type {number} */\n var stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n }\n else {\n for (var i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = GeometryLayout.XY;\n this.stride = 2;\n return;\n }\n else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n };\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n SimpleGeometry.prototype.applyTransform = function (transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n };\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n SimpleGeometry.prototype.rotate = function (angle, anchor) {\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n rotate(flatCoordinates, 0, flatCoordinates.length, stride, angle, anchor, flatCoordinates);\n this.changed();\n }\n };\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n SimpleGeometry.prototype.scale = function (sx, opt_sy, opt_anchor) {\n var sy = opt_sy;\n if (sy === undefined) {\n sy = sx;\n }\n var anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n scale(flatCoordinates, 0, flatCoordinates.length, stride, sx, sy, anchor, flatCoordinates);\n this.changed();\n }\n };\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n SimpleGeometry.prototype.translate = function (deltaX, deltaY) {\n var flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n var stride = this.getStride();\n translate(flatCoordinates, 0, flatCoordinates.length, stride, deltaX, deltaY, flatCoordinates);\n this.changed();\n }\n };\n return SimpleGeometry;\n}(Geometry));\n/**\n * @param {number} stride Stride.\n * @return {import(\"./GeometryLayout.js\").default} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n var layout;\n if (stride == 2) {\n layout = GeometryLayout.XY;\n }\n else if (stride == 3) {\n layout = GeometryLayout.XYZ;\n }\n else if (stride == 4) {\n layout = GeometryLayout.XYZM;\n }\n return /** @type {import(\"./GeometryLayout.js\").default} */ (layout);\n}\n/**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n var stride;\n if (layout == GeometryLayout.XY) {\n stride = 2;\n }\n else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n stride = 3;\n }\n else if (layout == GeometryLayout.XYZM) {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n var flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n }\n else {\n var stride = simpleGeometry.getStride();\n return transform2D(flatCoordinates, 0, flatCoordinates.length, stride, transform, opt_dest);\n }\n}\nexport default SimpleGeometry;\n//# sourceMappingURL=SimpleGeometry.js.map","/**\n * @module ol/geom/flat/closest\n */\nimport { lerp, squaredDistance as squaredDx } from '../../math.js';\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {\n var x1 = flatCoordinates[offset1];\n var y1 = flatCoordinates[offset1 + 1];\n var dx = flatCoordinates[offset2] - x1;\n var dy = flatCoordinates[offset2 + 1] - y1;\n var offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n }\n else {\n var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n }\n else if (t > 0) {\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t);\n }\n closestPoint.length = stride;\n return;\n }\n else {\n offset = offset1;\n }\n }\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n var x2 = flatCoordinates[offset];\n var y2 = flatCoordinates[offset + 1];\n var squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(flatCoordinates, offset, endss, stride, max) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n if (offset == end) {\n return minSquaredDistance;\n }\n var i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n else {\n return minSquaredDistance;\n }\n }\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n var index = offset + stride;\n while (index < end) {\n assignClosest(flatCoordinates, index - stride, index, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n }\n else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0, 1);\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n minSquaredDistance = assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = end;\n }\n return minSquaredDistance;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {\n var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n//# sourceMappingURL=closest.js.map","/**\n * @module ol/geom/flat/deflate\n */\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (var i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(flatCoordinates, offset, coordinates, stride) {\n for (var i = 0, ii = coordinates.length; i < ii; ++i) {\n var coordinate = coordinates[i];\n for (var j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array} [opt_ends] Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(flatCoordinates, offset, coordinatess, stride, opt_ends) {\n var ends = opt_ends ? opt_ends : [];\n var i = 0;\n for (var j = 0, jj = coordinatess.length; j < jj; ++j) {\n var end = deflateCoordinates(flatCoordinates, offset, coordinatess[j], stride);\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>} [opt_endss] Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(flatCoordinates, offset, coordinatesss, stride, opt_endss) {\n var endss = opt_endss ? opt_endss : [];\n var i = 0;\n for (var j = 0, jj = coordinatesss.length; j < jj; ++j) {\n var ends = deflateCoordinatesArray(flatCoordinates, offset, coordinatesss[j], stride, endss[i]);\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n//# sourceMappingURL=deflate.js.map","/**\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/geom/flat/segments\n */\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n var ret;\n offset += stride;\n for (; offset < end; offset += stride) {\n ret = callback(flatCoordinates.slice(offset - stride, offset), flatCoordinates.slice(offset, offset + stride));\n if (ret) {\n return ret;\n }\n }\n return false;\n}\n//# sourceMappingURL=segments.js.map","/**\n * @module ol/geom/flat/inflate\n */\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array} [opt_coordinates] Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(flatCoordinates, offset, end, stride, opt_coordinates) {\n var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n var i = 0;\n for (var j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>} [opt_coordinatess] Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(flatCoordinates, offset, ends, stride, opt_coordinatess) {\n var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n var i = 0;\n for (var j = 0, jj = ends.length; j < jj; ++j) {\n var end = ends[j];\n coordinatess[i++] = inflateCoordinates(flatCoordinates, offset, end, stride, coordinatess[i]);\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\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>>} [opt_coordinatesss]\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(flatCoordinates, offset, endss, stride, opt_coordinatesss) {\n var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n var i = 0;\n for (var j = 0, jj = endss.length; j < jj; ++j) {\n var ends = endss[j];\n coordinatesss[i++] = inflateCoordinatesArray(flatCoordinates, offset, ends, stride, coordinatesss[i]);\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n//# sourceMappingURL=inflate.js.map","/**\n * @module ol/geom/flat/interpolate\n */\nimport { binarySearch } from '../../array.js';\nimport { lerp } 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} fraction Fraction.\n * @param {Array} [opt_dest] Destination.\n * @param {number} [opt_dimension] Destination dimension (default is `2`)\n * @return {Array} Destination.\n */\nexport function interpolatePoint(flatCoordinates, offset, end, stride, fraction, opt_dest, opt_dimension) {\n var o, t;\n var n = (end - offset) / stride;\n if (n === 1) {\n o = offset;\n }\n else if (n === 2) {\n o = offset;\n t = fraction;\n }\n else if (n !== 0) {\n var x1 = flatCoordinates[offset];\n var y1 = flatCoordinates[offset + 1];\n var length_1 = 0;\n var cumulativeLengths = [0];\n for (var i = offset + stride; i < end; i += stride) {\n var x2 = flatCoordinates[i];\n var y2 = flatCoordinates[i + 1];\n length_1 += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length_1);\n x1 = x2;\n y1 = y2;\n }\n var target = fraction * length_1;\n var index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n t =\n (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n o = offset + (-index - 2) * stride;\n }\n else {\n o = offset + index * stride;\n }\n }\n var dimension = opt_dimension > 1 ? opt_dimension : 2;\n var dest = opt_dest ? opt_dest : new Array(dimension);\n for (var i = 0; i < dimension; ++i) {\n dest[i] =\n o === undefined\n ? NaN\n : t === undefined\n ? flatCoordinates[o + i]\n : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n }\n return dest;\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} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\nexport function lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, extrapolate) {\n if (end == offset) {\n return null;\n }\n var coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n else {\n return null;\n }\n }\n else if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n else {\n return null;\n }\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n var lo = offset / stride;\n var hi = end / stride;\n while (lo < hi) {\n var mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n }\n else {\n lo = mid + 1;\n }\n }\n var m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n var m1 = flatCoordinates[(lo + 1) * stride - 1];\n var t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (var i = 0; i < stride - 1; ++i) {\n coordinate.push(lerp(flatCoordinates[(lo - 1) * stride + i], flatCoordinates[lo * stride + i], t));\n }\n coordinate.push(m);\n return coordinate;\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} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate} Coordinate.\n */\nexport function lineStringsCoordinateAtM(flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {\n if (interpolate) {\n return lineStringCoordinateAtM(flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate);\n }\n var coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n else {\n return null;\n }\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n }\n else {\n return null;\n }\n }\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n }\n else if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, false);\n }\n offset = end;\n }\n return null;\n}\n//# sourceMappingURL=interpolate.js.map","/**\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/geom/flat/intersectsextent\n */\nimport { containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment, } from '../../extent.js';\nimport { forEach as forEachSegment } from './segments.js';\nimport { linearRingContainsExtent, linearRingContainsXY } from './contains.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} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(flatCoordinates, offset, end, stride, extent) {\n var coordinatesExtent = extendFlatCoordinates(createEmpty(), flatCoordinates, offset, end, stride);\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(flatCoordinates, offset, end, stride, \n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n });\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n if (intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[3])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[3])) {\n return true;\n }\n return false;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (var i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n if (!intersectsLineString(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n return false;\n }\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 {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n if (intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n//# sourceMappingURL=intersectsextent.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/LineString\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 { extend } from '../array.js';\nimport { forEach as forEachSegment } from './flat/segments.js';\nimport { inflateCoordinates } from './flat/inflate.js';\nimport { interpolatePoint, lineStringCoordinateAtM } from './flat/interpolate.js';\nimport { intersectsLineString } from './flat/intersectsextent.js';\nimport { lineStringLength } from './flat/length.js';\n/**\n * @classdesc\n * Linestring geometry.\n *\n * @api\n */\nvar LineString = /** @class */ (function (_super) {\n __extends(LineString, _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 LineString(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n _this.flatMidpoint_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.flatMidpointRevision_ = -1;\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 * Append the passed coordinate to the coordinates of the linestring.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @api\n */\n LineString.prototype.appendCoordinate = function (coordinate) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = coordinate.slice();\n }\n else {\n extend(this.flatCoordinates, coordinate);\n }\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!LineString} Clone.\n * @api\n */\n LineString.prototype.clone = function () {\n var lineString = new LineString(this.flatCoordinates.slice(), this.layout);\n lineString.applyProperties(this);\n return lineString;\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 LineString.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_, false, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * Iterate over each segment, calling the provided callback.\n * If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n *\n * @param {function(this: S, import(\"../coordinate.js\").Coordinate, import(\"../coordinate.js\").Coordinate): T} callback Function\n * called for each segment. The function will receive two arguments, the start and end coordinates of the segment.\n * @return {T|boolean} Value.\n * @template T,S\n * @api\n */\n LineString.prototype.forEachSegment = function (callback) {\n return forEachSegment(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, callback);\n };\n /**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * @param {number} m M.\n * @param {boolean} [opt_extrapolate] Extrapolate. Default is `false`.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n LineString.prototype.getCoordinateAtM = function (m, opt_extrapolate) {\n if (this.layout != GeometryLayout.XYM &&\n this.layout != GeometryLayout.XYZM) {\n return null;\n }\n var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n return lineStringCoordinateAtM(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, m, extrapolate);\n };\n /**\n * Return the coordinates of the linestring.\n * @return {Array} Coordinates.\n * @api\n */\n LineString.prototype.getCoordinates = function () {\n return inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * Return the coordinate at the provided fraction along the linestring.\n * The `fraction` is a number between 0 and 1, where 0 is the start of the\n * linestring and 1 is the end.\n * @param {number} fraction Fraction.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_dest] Optional coordinate whose values will\n * be modified. If not provided, a new coordinate will be returned.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinate of the interpolated point.\n * @api\n */\n LineString.prototype.getCoordinateAt = function (fraction, opt_dest) {\n return interpolatePoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, fraction, opt_dest, this.stride);\n };\n /**\n * Return the length of the linestring on projected plane.\n * @return {number} Length (on projected plane).\n * @api\n */\n LineString.prototype.getLength = function () {\n return lineStringLength(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * @return {Array} Flat midpoint.\n */\n LineString.prototype.getFlatMidpoint = function () {\n if (this.flatMidpointRevision_ != this.getRevision()) {\n this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);\n this.flatMidpointRevision_ = this.getRevision();\n }\n return this.flatMidpoint_;\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LineString} Simplified LineString.\n * @protected\n */\n LineString.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 LineString(simplifiedFlatCoordinates, GeometryLayout.XY);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n LineString.prototype.getType = function () {\n return GeometryType.LINE_STRING;\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 LineString.prototype.intersectsExtent = function (extent) {\n return intersectsLineString(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);\n };\n /**\n * Set the coordinates of the linestring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n LineString.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 LineString;\n}(SimpleGeometry));\nexport default LineString;\n//# sourceMappingURL=LineString.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/MultiLineString\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport LineString from './LineString.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { arrayMaxSquaredDelta, assignClosestArrayPoint } from './flat/closest.js';\nimport { closestSquaredDistanceXY } from '../extent.js';\nimport { deflateCoordinatesArray } from './flat/deflate.js';\nimport { douglasPeuckerArray } from './flat/simplify.js';\nimport { extend } from '../array.js';\nimport { inflateCoordinatesArray } from './flat/inflate.js';\nimport { interpolatePoint, lineStringsCoordinateAtM, } from './flat/interpolate.js';\nimport { intersectsLineStringArray } from './flat/intersectsextent.js';\n/**\n * @classdesc\n * Multi-linestring geometry.\n *\n * @api\n */\nvar MultiLineString = /** @class */ (function (_super) {\n __extends(MultiLineString, _super);\n /**\n * @param {Array|LineString>|Array} coordinates\n * Coordinates or LineString geometries. (For internal use, flat coordinates in\n * combination with `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array} [opt_ends] Flat coordinate ends for internal use.\n */\n function MultiLineString(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.maxDelta_ = -1;\n /**\n * @private\n * @type {number}\n */\n _this.maxDeltaRevision_ = -1;\n if (Array.isArray(coordinates[0])) {\n _this.setCoordinates(\n /** @type {Array>} */ (coordinates), opt_layout);\n }\n else if (opt_layout !== undefined && opt_ends) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array} */ (coordinates));\n _this.ends_ = opt_ends;\n }\n else {\n var layout = _this.getLayout();\n var lineStrings = /** @type {Array} */ (coordinates);\n var flatCoordinates = [];\n var ends = [];\n for (var i = 0, ii = lineStrings.length; i < ii; ++i) {\n var lineString = lineStrings[i];\n if (i === 0) {\n layout = lineString.getLayout();\n }\n extend(flatCoordinates, lineString.getFlatCoordinates());\n ends.push(flatCoordinates.length);\n }\n _this.setFlatCoordinates(layout, flatCoordinates);\n _this.ends_ = ends;\n }\n return _this;\n }\n /**\n * Append the passed linestring to the multilinestring.\n * @param {LineString} lineString LineString.\n * @api\n */\n MultiLineString.prototype.appendLineString = function (lineString) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = lineString.getFlatCoordinates().slice();\n }\n else {\n extend(this.flatCoordinates, lineString.getFlatCoordinates().slice());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiLineString} Clone.\n * @api\n */\n MultiLineString.prototype.clone = function () {\n var multiLineString = new MultiLineString(this.flatCoordinates.slice(), this.layout, this.ends_.slice());\n multiLineString.applyProperties(this);\n return multiLineString;\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 MultiLineString.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_, false, x, y, closestPoint, minSquaredDistance);\n };\n /**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * `opt_interpolate` controls interpolation between consecutive LineStrings\n * within the MultiLineString. If `opt_interpolate` is `true` the coordinates\n * will be linearly interpolated between the last coordinate of one LineString\n * and the first coordinate of the next LineString. If `opt_interpolate` is\n * `false` then the function will return `null` for Ms falling between\n * LineStrings.\n *\n * @param {number} m M.\n * @param {boolean} [opt_extrapolate] Extrapolate. Default is `false`.\n * @param {boolean} [opt_interpolate] Interpolate. Default is `false`.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n MultiLineString.prototype.getCoordinateAtM = function (m, opt_extrapolate, opt_interpolate) {\n if ((this.layout != GeometryLayout.XYM &&\n this.layout != GeometryLayout.XYZM) ||\n this.flatCoordinates.length === 0) {\n return null;\n }\n var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n var interpolate = opt_interpolate !== undefined ? opt_interpolate : false;\n return lineStringsCoordinateAtM(this.flatCoordinates, 0, this.ends_, this.stride, m, extrapolate, interpolate);\n };\n /**\n * Return the coordinates of the multilinestring.\n * @return {Array>} Coordinates.\n * @api\n */\n MultiLineString.prototype.getCoordinates = function () {\n return inflateCoordinatesArray(this.flatCoordinates, 0, this.ends_, this.stride);\n };\n /**\n * @return {Array} Ends.\n */\n MultiLineString.prototype.getEnds = function () {\n return this.ends_;\n };\n /**\n * Return the linestring at the specified index.\n * @param {number} index Index.\n * @return {LineString} LineString.\n * @api\n */\n MultiLineString.prototype.getLineString = function (index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LineString(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);\n };\n /**\n * Return the linestrings of this multilinestring.\n * @return {Array} LineStrings.\n * @api\n */\n MultiLineString.prototype.getLineStrings = function () {\n var flatCoordinates = this.flatCoordinates;\n var ends = this.ends_;\n var layout = this.layout;\n /** @type {Array} */\n var lineStrings = [];\n var offset = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var lineString = new LineString(flatCoordinates.slice(offset, end), layout);\n lineStrings.push(lineString);\n offset = end;\n }\n return lineStrings;\n };\n /**\n * @return {Array} Flat midpoints.\n */\n MultiLineString.prototype.getFlatMidpoints = function () {\n var midpoints = [];\n var flatCoordinates = this.flatCoordinates;\n var offset = 0;\n var ends = this.ends_;\n var stride = this.stride;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n var midpoint = interpolatePoint(flatCoordinates, offset, end, stride, 0.5);\n extend(midpoints, midpoint);\n offset = end;\n }\n return midpoints;\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {MultiLineString} Simplified MultiLineString.\n * @protected\n */\n MultiLineString.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n var simplifiedEnds = [];\n simplifiedFlatCoordinates.length = douglasPeuckerArray(this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0, simplifiedEnds);\n return new MultiLineString(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 MultiLineString.prototype.getType = function () {\n return GeometryType.MULTI_LINE_STRING;\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 MultiLineString.prototype.intersectsExtent = function (extent) {\n return intersectsLineStringArray(this.flatCoordinates, 0, this.ends_, this.stride, extent);\n };\n /**\n * Set the coordinates of the multilinestring.\n * @param {!Array>} coordinates Coordinates.\n * @param {GeometryLayout} [opt_layout] Layout.\n * @api\n */\n MultiLineString.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 MultiLineString;\n}(SimpleGeometry));\nexport default MultiLineString;\n//# sourceMappingURL=MultiLineString.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/Point\n */\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { containsXY, createOrUpdateFromCoordinate } from '../extent.js';\nimport { deflateCoordinate } from './flat/deflate.js';\nimport { squaredDistance as squaredDx } from '../math.js';\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nvar Point = /** @class */ (function (_super) {\n __extends(Point, _super);\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n function Point(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n _this.setCoordinates(coordinates, opt_layout);\n return _this;\n }\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n */\n Point.prototype.clone = function () {\n var point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\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 Point.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n var flatCoordinates = this.flatCoordinates;\n var squaredDistance = squaredDx(x, y, flatCoordinates[0], flatCoordinates[1]);\n if (squaredDistance < minSquaredDistance) {\n var stride = this.stride;\n for (var i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n else {\n return minSquaredDistance;\n }\n };\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n */\n Point.prototype.getCoordinates = function () {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n };\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n Point.prototype.computeExtent = function (extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n Point.prototype.getType = function () {\n return GeometryType.POINT;\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 Point.prototype.intersectsExtent = function (extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n };\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n Point.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n };\n return Point;\n}(SimpleGeometry));\nexport default Point;\n//# sourceMappingURL=Point.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/MultiPoint\n */\nimport GeometryType from './GeometryType.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { closestSquaredDistanceXY, containsXY } from '../extent.js';\nimport { deflateCoordinates } from './flat/deflate.js';\nimport { extend } from '../array.js';\nimport { inflateCoordinates } from './flat/inflate.js';\nimport { squaredDistance as squaredDx } from '../math.js';\n/**\n * @classdesc\n * Multi-point geometry.\n *\n * @api\n */\nvar MultiPoint = /** @class */ (function (_super) {\n __extends(MultiPoint, _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 MultiPoint(coordinates, opt_layout) {\n var _this = _super.call(this) || this;\n if (opt_layout && !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 * Append the passed point to this multipoint.\n * @param {Point} point Point.\n * @api\n */\n MultiPoint.prototype.appendPoint = function (point) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = point.getFlatCoordinates().slice();\n }\n else {\n extend(this.flatCoordinates, point.getFlatCoordinates());\n }\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiPoint} Clone.\n * @api\n */\n MultiPoint.prototype.clone = function () {\n var multiPoint = new MultiPoint(this.flatCoordinates.slice(), this.layout);\n multiPoint.applyProperties(this);\n return multiPoint;\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 MultiPoint.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n var flatCoordinates = this.flatCoordinates;\n var stride = this.stride;\n for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n var squaredDistance = squaredDx(x, y, flatCoordinates[i], flatCoordinates[i + 1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (var j = 0; j < stride; ++j) {\n closestPoint[j] = flatCoordinates[i + j];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n };\n /**\n * Return the coordinates of the multipoint.\n * @return {Array} Coordinates.\n * @api\n */\n MultiPoint.prototype.getCoordinates = function () {\n return inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n };\n /**\n * Return the point at the specified index.\n * @param {number} index Index.\n * @return {Point} Point.\n * @api\n */\n MultiPoint.prototype.getPoint = function (index) {\n var n = !this.flatCoordinates\n ? 0\n : this.flatCoordinates.length / this.stride;\n if (index < 0 || n <= index) {\n return null;\n }\n return new Point(this.flatCoordinates.slice(index * this.stride, (index + 1) * this.stride), this.layout);\n };\n /**\n * Return the points of this multipoint.\n * @return {Array} Points.\n * @api\n */\n MultiPoint.prototype.getPoints = function () {\n var flatCoordinates = this.flatCoordinates;\n var layout = this.layout;\n var stride = this.stride;\n /** @type {Array} */\n var points = [];\n for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n var point = new Point(flatCoordinates.slice(i, i + stride), layout);\n points.push(point);\n }\n return points;\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n MultiPoint.prototype.getType = function () {\n return GeometryType.MULTI_POINT;\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 MultiPoint.prototype.intersectsExtent = function (extent) {\n var flatCoordinates = this.flatCoordinates;\n var stride = this.stride;\n for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n var x = flatCoordinates[i];\n var y = flatCoordinates[i + 1];\n if (containsXY(extent, x, y)) {\n return true;\n }\n }\n return false;\n };\n /**\n * Set the coordinates of the multipoint.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n MultiPoint.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 MultiPoint;\n}(SimpleGeometry));\nexport default MultiPoint;\n//# sourceMappingURL=MultiPoint.js.map","/**\n * @module ol/geom/flat/area\n */\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n var twiceArea = 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 twiceArea += y1 * x2 - x1 * y2;\n x1 = x2;\n y1 = y2;\n }\n return twiceArea / 2;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n var area = 0;\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n var end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n var area = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n//# sourceMappingURL=area.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","/**\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","/**\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","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/geom/flat/center\n */\nimport { createEmpty, createOrUpdateFromFlatCoordinates } from '../../extent.js';\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n var flatCenters = [];\n var extent = createEmpty();\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i];\n extent = createOrUpdateFromFlatCoordinates(flatCoordinates, offset, ends[0], stride);\n flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n offset = ends[ends.length - 1];\n }\n return flatCenters;\n}\n//# sourceMappingURL=center.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/MultiPolygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport MultiPoint from './MultiPoint.js';\nimport Polygon from './Polygon.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport { assignClosestMultiArrayPoint, multiArrayMaxSquaredDelta, } from './flat/closest.js';\nimport { closestSquaredDistanceXY } from '../extent.js';\nimport { deflateMultiCoordinatesArray } from './flat/deflate.js';\nimport { extend } from '../array.js';\nimport { getInteriorPointsOfMultiArray } from './flat/interiorpoint.js';\nimport { inflateMultiCoordinatesArray } from './flat/inflate.js';\nimport { intersectsLinearRingMultiArray } from './flat/intersectsextent.js';\nimport { linearRingssAreOriented, orientLinearRingsArray, } from './flat/orient.js';\nimport { linearRingss as linearRingssArea } from './flat/area.js';\nimport { linearRingss as linearRingssCenter } from './flat/center.js';\nimport { linearRingssContainsXY } from './flat/contains.js';\nimport { quantizeMultiArray } from './flat/simplify.js';\n/**\n * @classdesc\n * Multi-polygon geometry.\n *\n * @api\n */\nvar MultiPolygon = /** @class */ (function (_super) {\n __extends(MultiPolygon, _super);\n /**\n * @param {Array>|Polygon>|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` and `opt_endss` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array>} [opt_endss] Array of ends for internal use with flat coordinates.\n */\n function MultiPolygon(coordinates, opt_layout, opt_endss) {\n var _this = _super.call(this) || this;\n /**\n * @type {Array>}\n * @private\n */\n _this.endss_ = [];\n /**\n * @private\n * @type {number}\n */\n _this.flatInteriorPointsRevision_ = -1;\n /**\n * @private\n * @type {Array}\n */\n _this.flatInteriorPoints_ = 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_endss && !Array.isArray(coordinates[0])) {\n var layout = _this.getLayout();\n var polygons = /** @type {Array} */ (coordinates);\n var flatCoordinates = [];\n var endss = [];\n for (var i = 0, ii = polygons.length; i < ii; ++i) {\n var polygon = polygons[i];\n if (i === 0) {\n layout = polygon.getLayout();\n }\n var offset = flatCoordinates.length;\n var ends = polygon.getEnds();\n for (var j = 0, jj = ends.length; j < jj; ++j) {\n ends[j] += offset;\n }\n extend(flatCoordinates, polygon.getFlatCoordinates());\n endss.push(ends);\n }\n opt_layout = layout;\n coordinates = flatCoordinates;\n opt_endss = endss;\n }\n if (opt_layout !== undefined && opt_endss) {\n _this.setFlatCoordinates(opt_layout, \n /** @type {Array} */ (coordinates));\n _this.endss_ = opt_endss;\n }\n else {\n _this.setCoordinates(\n /** @type {Array>>} */ (coordinates), opt_layout);\n }\n return _this;\n }\n /**\n * Append the passed polygon to this multipolygon.\n * @param {Polygon} polygon Polygon.\n * @api\n */\n MultiPolygon.prototype.appendPolygon = function (polygon) {\n /** @type {Array} */\n var ends;\n if (!this.flatCoordinates) {\n this.flatCoordinates = polygon.getFlatCoordinates().slice();\n ends = polygon.getEnds().slice();\n this.endss_.push();\n }\n else {\n var offset = this.flatCoordinates.length;\n extend(this.flatCoordinates, polygon.getFlatCoordinates());\n ends = polygon.getEnds().slice();\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n ends[i] += offset;\n }\n }\n this.endss_.push(ends);\n this.changed();\n };\n /**\n * Make a complete copy of the geometry.\n * @return {!MultiPolygon} Clone.\n * @api\n */\n MultiPolygon.prototype.clone = function () {\n var len = this.endss_.length;\n var newEndss = new Array(len);\n for (var i = 0; i < len; ++i) {\n newEndss[i] = this.endss_[i].slice();\n }\n var multiPolygon = new MultiPolygon(this.flatCoordinates.slice(), this.layout, newEndss);\n multiPolygon.applyProperties(this);\n return multiPolygon;\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 MultiPolygon.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(multiArrayMaxSquaredDelta(this.flatCoordinates, 0, this.endss_, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestMultiArrayPoint(this.getOrientedFlatCoordinates(), 0, this.endss_, 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 MultiPolygon.prototype.containsXY = function (x, y) {\n return linearRingssContainsXY(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);\n };\n /**\n * Return the area of the multipolygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n MultiPolygon.prototype.getArea = function () {\n return linearRingssArea(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride);\n };\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for multi-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 MultiPolygon.prototype.getCoordinates = function (opt_right) {\n var flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRingsArray(flatCoordinates, 0, this.endss_, this.stride, opt_right);\n }\n else {\n flatCoordinates = this.flatCoordinates;\n }\n return inflateMultiCoordinatesArray(flatCoordinates, 0, this.endss_, this.stride);\n };\n /**\n * @return {Array>} Endss.\n */\n MultiPolygon.prototype.getEndss = function () {\n return this.endss_;\n };\n /**\n * @return {Array} Flat interior points.\n */\n MultiPolygon.prototype.getFlatInteriorPoints = function () {\n if (this.flatInteriorPointsRevision_ != this.getRevision()) {\n var flatCenters = linearRingssCenter(this.flatCoordinates, 0, this.endss_, this.stride);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, flatCenters);\n this.flatInteriorPointsRevision_ = this.getRevision();\n }\n return this.flatInteriorPoints_;\n };\n /**\n * Return the interior points as {@link module:ol/geom/MultiPoint multipoint}.\n * @return {MultiPoint} Interior points as XYM coordinates, where M is\n * the length of the horizontal intersection that the point belongs to.\n * @api\n */\n MultiPolygon.prototype.getInteriorPoints = function () {\n return new MultiPoint(this.getFlatInteriorPoints().slice(), GeometryLayout.XYM);\n };\n /**\n * @return {Array} Oriented flat coordinates.\n */\n MultiPolygon.prototype.getOrientedFlatCoordinates = function () {\n if (this.orientedRevision_ != this.getRevision()) {\n var flatCoordinates = this.flatCoordinates;\n if (linearRingssAreOriented(flatCoordinates, 0, this.endss_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n }\n else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRingsArray(this.orientedFlatCoordinates_, 0, this.endss_, this.stride);\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n };\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {MultiPolygon} Simplified MultiPolygon.\n * @protected\n */\n MultiPolygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {\n var simplifiedFlatCoordinates = [];\n var simplifiedEndss = [];\n simplifiedFlatCoordinates.length = quantizeMultiArray(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEndss);\n return new MultiPolygon(simplifiedFlatCoordinates, GeometryLayout.XY, simplifiedEndss);\n };\n /**\n * Return the polygon at the specified index.\n * @param {number} index Index.\n * @return {Polygon} Polygon.\n * @api\n */\n MultiPolygon.prototype.getPolygon = function (index) {\n if (index < 0 || this.endss_.length <= index) {\n return null;\n }\n var offset;\n if (index === 0) {\n offset = 0;\n }\n else {\n var prevEnds = this.endss_[index - 1];\n offset = prevEnds[prevEnds.length - 1];\n }\n var ends = this.endss_[index].slice();\n var end = ends[ends.length - 1];\n if (offset !== 0) {\n for (var i = 0, ii = ends.length; i < ii; ++i) {\n ends[i] -= offset;\n }\n }\n return new Polygon(this.flatCoordinates.slice(offset, end), this.layout, ends);\n };\n /**\n * Return the polygons of this multipolygon.\n * @return {Array} Polygons.\n * @api\n */\n MultiPolygon.prototype.getPolygons = function () {\n var layout = this.layout;\n var flatCoordinates = this.flatCoordinates;\n var endss = this.endss_;\n var polygons = [];\n var offset = 0;\n for (var i = 0, ii = endss.length; i < ii; ++i) {\n var ends = endss[i].slice();\n var end = ends[ends.length - 1];\n if (offset !== 0) {\n for (var j = 0, jj = ends.length; j < jj; ++j) {\n ends[j] -= offset;\n }\n }\n var polygon = new Polygon(flatCoordinates.slice(offset, end), layout, ends);\n polygons.push(polygon);\n offset = end;\n }\n return polygons;\n };\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n MultiPolygon.prototype.getType = function () {\n return GeometryType.MULTI_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 MultiPolygon.prototype.intersectsExtent = function (extent) {\n return intersectsLinearRingMultiArray(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, extent);\n };\n /**\n * Set the coordinates of the multipolygon.\n * @param {!Array>>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n MultiPolygon.prototype.setCoordinates = function (coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 3);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n var endss = deflateMultiCoordinatesArray(this.flatCoordinates, 0, coordinates, this.stride, this.endss_);\n if (endss.length === 0) {\n this.flatCoordinates.length = 0;\n }\n else {\n var lastEnds = endss[endss.length - 1];\n this.flatCoordinates.length =\n lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1];\n }\n this.changed();\n };\n return MultiPolygon;\n}(SimpleGeometry));\nexport default MultiPolygon;\n//# sourceMappingURL=MultiPolygon.js.map","/**\n * @module ol/format/GeoJSON\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 Feature from '../Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport JSONFeature from './JSONFeature.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport { assert } from '../asserts.js';\nimport { assign, isEmpty } from '../obj.js';\nimport { get as getProjection } from '../proj.js';\nimport { transformGeometryWithOptions } from './Feature.js';\n/**\n * @typedef {import(\"geojson\").GeoJSON} GeoJSONObject\n * @typedef {import(\"geojson\").Feature} GeoJSONFeature\n * @typedef {import(\"geojson\").FeatureCollection} GeoJSONFeatureCollection\n * @typedef {import(\"geojson\").Geometry} GeoJSONGeometry\n * @typedef {import(\"geojson\").Point} GeoJSONPoint\n * @typedef {import(\"geojson\").LineString} GeoJSONLineString\n * @typedef {import(\"geojson\").Polygon} GeoJSONPolygon\n * @typedef {import(\"geojson\").MultiPoint} GeoJSONMultiPoint\n * @typedef {import(\"geojson\").MultiLineString} GeoJSONMultiLineString\n * @typedef {import(\"geojson\").MultiPolygon} GeoJSONMultiPolygon\n * @typedef {import(\"geojson\").GeometryCollection} GeoJSONGeometryCollection\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection='EPSG:4326'] Default data projection.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection for features read or\n * written by the format. Options passed to read or write methods will take precedence.\n * @property {string} [geometryName] Geometry name to use when creating features.\n * @property {boolean} [extractGeometryName=false] Certain GeoJSON providers include\n * the geometry_name field in the feature GeoJSON. If set to `true` the GeoJSON reader\n * will look for that field to set the geometry name. If both this field is set to `true`\n * and a `geometryName` is provided, the `geometryName` will take precedence.\n */\n/**\n * @classdesc\n * Feature format for reading and writing data in the GeoJSON format.\n *\n * @api\n */\nvar GeoJSON = /** @class */ (function (_super) {\n __extends(GeoJSON, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function GeoJSON(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this) || this;\n /**\n * @type {import(\"../proj/Projection.js\").default}\n */\n _this.dataProjection = getProjection(options.dataProjection ? options.dataProjection : 'EPSG:4326');\n if (options.featureProjection) {\n _this.defaultFeatureProjection = getProjection(options.featureProjection);\n }\n /**\n * Name of the geometry attribute for features.\n * @type {string|undefined}\n * @private\n */\n _this.geometryName_ = options.geometryName;\n /**\n * Look for the geometry name in the feature GeoJSON\n * @type {boolean|undefined}\n * @private\n */\n _this.extractGeometryName_ = options.extractGeometryName;\n _this.supportedMediaTypes = [\n 'application/geo+json',\n 'application/vnd.geo+json',\n ];\n return _this;\n }\n /**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../Feature.js\").default} Feature.\n */\n GeoJSON.prototype.readFeatureFromObject = function (object, opt_options) {\n /**\n * @type {GeoJSONFeature}\n */\n var geoJSONFeature = null;\n if (object['type'] === 'Feature') {\n geoJSONFeature = /** @type {GeoJSONFeature} */ (object);\n }\n else {\n geoJSONFeature = {\n 'type': 'Feature',\n 'geometry': /** @type {GeoJSONGeometry} */ (object),\n 'properties': null,\n };\n }\n var geometry = readGeometry(geoJSONFeature['geometry'], opt_options);\n var feature = new Feature();\n if (this.geometryName_) {\n feature.setGeometryName(this.geometryName_);\n }\n else if (this.extractGeometryName_ &&\n 'geometry_name' in geoJSONFeature !== undefined) {\n feature.setGeometryName(geoJSONFeature['geometry_name']);\n }\n feature.setGeometry(geometry);\n if ('id' in geoJSONFeature) {\n feature.setId(geoJSONFeature['id']);\n }\n if (geoJSONFeature['properties']) {\n feature.setProperties(geoJSONFeature['properties'], true);\n }\n return feature;\n };\n /**\n * @param {Object} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {Array} Features.\n */\n GeoJSON.prototype.readFeaturesFromObject = function (object, opt_options) {\n var geoJSONObject = /** @type {GeoJSONObject} */ (object);\n /** @type {Array} */\n var features = null;\n if (geoJSONObject['type'] === 'FeatureCollection') {\n var geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */ (object);\n features = [];\n var geoJSONFeatures = geoJSONFeatureCollection['features'];\n for (var i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {\n features.push(this.readFeatureFromObject(geoJSONFeatures[i], opt_options));\n }\n }\n else {\n features = [this.readFeatureFromObject(object, opt_options)];\n }\n return features;\n };\n /**\n * @param {GeoJSONGeometry} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @protected\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\n GeoJSON.prototype.readGeometryFromObject = function (object, opt_options) {\n return readGeometry(object, opt_options);\n };\n /**\n * @param {Object} object Object.\n * @protected\n * @return {import(\"../proj/Projection.js\").default} Projection.\n */\n GeoJSON.prototype.readProjectionFromObject = function (object) {\n var crs = object['crs'];\n var projection;\n if (crs) {\n if (crs['type'] == 'name') {\n projection = getProjection(crs['properties']['name']);\n }\n else if (crs['type'] === 'EPSG') {\n projection = getProjection('EPSG:' + crs['properties']['code']);\n }\n else {\n assert(false, 36); // Unknown SRS type\n }\n }\n else {\n projection = this.dataProjection;\n }\n return /** @type {import(\"../proj/Projection.js\").default} */ (projection);\n };\n /**\n * Encode a feature as a GeoJSON Feature object.\n *\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONFeature} Object.\n * @api\n */\n GeoJSON.prototype.writeFeatureObject = function (feature, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n /** @type {GeoJSONFeature} */\n var object = {\n 'type': 'Feature',\n geometry: null,\n properties: null,\n };\n var id = feature.getId();\n if (id !== undefined) {\n object.id = id;\n }\n if (!feature.hasProperties()) {\n return object;\n }\n var properties = feature.getProperties();\n var geometry = feature.getGeometry();\n if (geometry) {\n object.geometry = writeGeometry(geometry, opt_options);\n delete properties[feature.getGeometryName()];\n }\n if (!isEmpty(properties)) {\n object.properties = properties;\n }\n return object;\n };\n /**\n * Encode an array of features as a GeoJSON object.\n *\n * @param {Array} features Features.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONFeatureCollection} GeoJSON Object.\n * @api\n */\n GeoJSON.prototype.writeFeaturesObject = function (features, opt_options) {\n opt_options = this.adaptOptions(opt_options);\n var objects = [];\n for (var i = 0, ii = features.length; i < ii; ++i) {\n objects.push(this.writeFeatureObject(features[i], opt_options));\n }\n return {\n type: 'FeatureCollection',\n features: objects,\n };\n };\n /**\n * Encode a geometry as a GeoJSON object.\n *\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.\n * @api\n */\n GeoJSON.prototype.writeGeometryObject = function (geometry, opt_options) {\n return writeGeometry(geometry, this.adaptOptions(opt_options));\n };\n return GeoJSON;\n}(JSONFeature));\n/**\n * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\nfunction readGeometry(object, opt_options) {\n if (!object) {\n return null;\n }\n /**\n * @type {import(\"../geom/Geometry.js\").default}\n */\n var geometry;\n switch (object['type']) {\n case GeometryType.POINT: {\n geometry = readPointGeometry(/** @type {GeoJSONPoint} */ (object));\n break;\n }\n case GeometryType.LINE_STRING: {\n geometry = readLineStringGeometry(\n /** @type {GeoJSONLineString} */ (object));\n break;\n }\n case GeometryType.POLYGON: {\n geometry = readPolygonGeometry(/** @type {GeoJSONPolygon} */ (object));\n break;\n }\n case GeometryType.MULTI_POINT: {\n geometry = readMultiPointGeometry(\n /** @type {GeoJSONMultiPoint} */ (object));\n break;\n }\n case GeometryType.MULTI_LINE_STRING: {\n geometry = readMultiLineStringGeometry(\n /** @type {GeoJSONMultiLineString} */ (object));\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n geometry = readMultiPolygonGeometry(\n /** @type {GeoJSONMultiPolygon} */ (object));\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n geometry = readGeometryCollectionGeometry(\n /** @type {GeoJSONGeometryCollection} */ (object));\n break;\n }\n default: {\n throw new Error('Unsupported GeoJSON type: ' + object.type);\n }\n }\n return transformGeometryWithOptions(geometry, false, opt_options);\n}\n/**\n * @param {GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [opt_options] Read options.\n * @return {GeometryCollection} Geometry collection.\n */\nfunction readGeometryCollectionGeometry(object, opt_options) {\n var geometries = object['geometries'].map(\n /**\n * @param {GeoJSONGeometry} geometry Geometry.\n * @return {import(\"../geom/Geometry.js\").default} geometry Geometry.\n */\n function (geometry) {\n return readGeometry(geometry, opt_options);\n });\n return new GeometryCollection(geometries);\n}\n/**\n * @param {GeoJSONPoint} object Object.\n * @return {Point} Point.\n */\nfunction readPointGeometry(object) {\n return new Point(object['coordinates']);\n}\n/**\n * @param {GeoJSONLineString} object Object.\n * @return {LineString} LineString.\n */\nfunction readLineStringGeometry(object) {\n return new LineString(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiLineString} object Object.\n * @return {MultiLineString} MultiLineString.\n */\nfunction readMultiLineStringGeometry(object) {\n return new MultiLineString(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiPoint} object Object.\n * @return {MultiPoint} MultiPoint.\n */\nfunction readMultiPointGeometry(object) {\n return new MultiPoint(object['coordinates']);\n}\n/**\n * @param {GeoJSONMultiPolygon} object Object.\n * @return {MultiPolygon} MultiPolygon.\n */\nfunction readMultiPolygonGeometry(object) {\n return new MultiPolygon(object['coordinates']);\n}\n/**\n * @param {GeoJSONPolygon} object Object.\n * @return {Polygon} Polygon.\n */\nfunction readPolygonGeometry(object) {\n return new Polygon(object['coordinates']);\n}\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeGeometry(geometry, opt_options) {\n geometry = transformGeometryWithOptions(geometry, true, opt_options);\n var type = geometry.getType();\n /** @type {GeoJSONGeometry} */\n var geoJSON;\n switch (type) {\n case GeometryType.POINT: {\n geoJSON = writePointGeometry(\n /** @type {Point} */ (geometry), opt_options);\n break;\n }\n case GeometryType.LINE_STRING: {\n geoJSON = writeLineStringGeometry(\n /** @type {LineString} */ (geometry), opt_options);\n break;\n }\n case GeometryType.POLYGON: {\n geoJSON = writePolygonGeometry(\n /** @type {Polygon} */ (geometry), opt_options);\n break;\n }\n case GeometryType.MULTI_POINT: {\n geoJSON = writeMultiPointGeometry(\n /** @type {MultiPoint} */ (geometry), opt_options);\n break;\n }\n case GeometryType.MULTI_LINE_STRING: {\n geoJSON = writeMultiLineStringGeometry(\n /** @type {MultiLineString} */ (geometry), opt_options);\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n geoJSON = writeMultiPolygonGeometry(\n /** @type {MultiPolygon} */ (geometry), opt_options);\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n geoJSON = writeGeometryCollectionGeometry(\n /** @type {GeometryCollection} */ (geometry), opt_options);\n break;\n }\n case GeometryType.CIRCLE: {\n geoJSON = {\n type: 'GeometryCollection',\n geometries: [],\n };\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return geoJSON;\n}\n/**\n * @param {GeometryCollection} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.\n */\nfunction writeGeometryCollectionGeometry(geometry, opt_options) {\n var geometries = geometry.getGeometriesArray().map(function (geometry) {\n var options = assign({}, opt_options);\n delete options.featureProjection;\n return writeGeometry(geometry, options);\n });\n return {\n type: 'GeometryCollection',\n geometries: geometries,\n };\n}\n/**\n * @param {LineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeLineStringGeometry(geometry, opt_options) {\n return {\n type: 'LineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiLineString} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiLineStringGeometry(geometry, opt_options) {\n return {\n type: 'MultiLineString',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiPoint} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPointGeometry(geometry, opt_options) {\n return {\n type: 'MultiPoint',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {MultiPolygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPolygonGeometry(geometry, opt_options) {\n var right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'MultiPolygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\n/**\n * @param {Point} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePointGeometry(geometry, opt_options) {\n return {\n type: 'Point',\n coordinates: geometry.getCoordinates(),\n };\n}\n/**\n * @param {Polygon} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [opt_options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePolygonGeometry(geometry, opt_options) {\n var right;\n if (opt_options) {\n right = opt_options.rightHanded;\n }\n return {\n type: 'Polygon',\n coordinates: geometry.getCoordinates(right),\n };\n}\nexport default GeoJSON;\n//# sourceMappingURL=GeoJSON.js.map","/**\n * @module ol/ImageState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=ImageState.js.map","/**\n * @module ol/size\n */\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n }\n else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n }\n else {\n opt_size[0] = size;\n opt_size[1] = size;\n }\n return opt_size;\n }\n}\n//# sourceMappingURL=size.js.map","/**\n * @module ol/style/Image\n */\nimport { abstract } from '../util.js';\nimport { toSize } from '../size.js';\n/**\n * @typedef {Object} Options\n * @property {number} opacity Opacity.\n * @property {boolean} rotateWithView If the image should get rotated with the view.\n * @property {number} rotation Rotation.\n * @property {number|import(\"../size.js\").Size} scale Scale.\n * @property {Array} displacement Displacement.\n */\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nvar ImageStyle = /** @class */ (function () {\n /**\n * @param {Options} options Options.\n */\n function ImageStyle(options) {\n /**\n * @private\n * @type {number}\n */\n this.opacity_ = options.opacity;\n /**\n * @private\n * @type {boolean}\n */\n this.rotateWithView_ = options.rotateWithView;\n /**\n * @private\n * @type {number}\n */\n this.rotation_ = options.rotation;\n /**\n * @private\n * @type {number|import(\"../size.js\").Size}\n */\n this.scale_ = options.scale;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n this.scaleArray_ = toSize(options.scale);\n /**\n * @private\n * @type {Array}\n */\n this.displacement_ = options.displacement;\n }\n /**\n * Clones the style.\n * @return {ImageStyle} The cloned style.\n * @api\n */\n ImageStyle.prototype.clone = function () {\n var scale = this.getScale();\n return new ImageStyle({\n opacity: this.getOpacity(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n });\n };\n /**\n * Get the symbolizer opacity.\n * @return {number} Opacity.\n * @api\n */\n ImageStyle.prototype.getOpacity = function () {\n return this.opacity_;\n };\n /**\n * Determine whether the symbolizer rotates with the map.\n * @return {boolean} Rotate with map.\n * @api\n */\n ImageStyle.prototype.getRotateWithView = function () {\n return this.rotateWithView_;\n };\n /**\n * Get the symoblizer rotation.\n * @return {number} Rotation.\n * @api\n */\n ImageStyle.prototype.getRotation = function () {\n return this.rotation_;\n };\n /**\n * Get the symbolizer scale.\n * @return {number|import(\"../size.js\").Size} Scale.\n * @api\n */\n ImageStyle.prototype.getScale = function () {\n return this.scale_;\n };\n /**\n * Get the symbolizer scale array.\n * @return {import(\"../size.js\").Size} Scale array.\n */\n ImageStyle.prototype.getScaleArray = function () {\n return this.scaleArray_;\n };\n /**\n * Get the displacement of the shape\n * @return {Array} Shape's center displacement\n * @api\n */\n ImageStyle.prototype.getDisplacement = function () {\n return this.displacement_;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @abstract\n * @return {Array} Anchor.\n */\n ImageStyle.prototype.getAnchor = function () {\n return abstract();\n };\n /**\n * Get the image element for the symbolizer.\n * @abstract\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getImage = function (pixelRatio) {\n return abstract();\n };\n /**\n * @abstract\n * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.\n */\n ImageStyle.prototype.getHitDetectionImage = function () {\n return abstract();\n };\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n ImageStyle.prototype.getPixelRatio = function (pixelRatio) {\n return 1;\n };\n /**\n * @abstract\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n ImageStyle.prototype.getImageState = function () {\n return abstract();\n };\n /**\n * @abstract\n * @return {import(\"../size.js\").Size} Image size.\n */\n ImageStyle.prototype.getImageSize = function () {\n return abstract();\n };\n /**\n * Get the origin of the symbolizer.\n * @abstract\n * @return {Array} Origin.\n */\n ImageStyle.prototype.getOrigin = function () {\n return abstract();\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @abstract\n * @return {import(\"../size.js\").Size} Size.\n */\n ImageStyle.prototype.getSize = function () {\n return abstract();\n };\n /**\n * Set the displacement.\n *\n * @param {Array} displacement Displacement.\n * @api\n */\n ImageStyle.prototype.setDisplacement = function (displacement) {\n this.displacement_ = displacement;\n };\n /**\n * Set the opacity.\n *\n * @param {number} opacity Opacity.\n * @api\n */\n ImageStyle.prototype.setOpacity = function (opacity) {\n this.opacity_ = opacity;\n };\n /**\n * Set whether to rotate the style with the view.\n *\n * @param {boolean} rotateWithView Rotate with map.\n * @api\n */\n ImageStyle.prototype.setRotateWithView = function (rotateWithView) {\n this.rotateWithView_ = rotateWithView;\n };\n /**\n * Set the rotation.\n *\n * @param {number} rotation Rotation.\n * @api\n */\n ImageStyle.prototype.setRotation = function (rotation) {\n this.rotation_ = rotation;\n };\n /**\n * Set the scale.\n *\n * @param {number|import(\"../size.js\").Size} scale Scale.\n * @api\n */\n ImageStyle.prototype.setScale = function (scale) {\n this.scale_ = scale;\n this.scaleArray_ = toSize(scale);\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.listenImageChange = function (listener) {\n abstract();\n };\n /**\n * Load not yet loaded URI.\n * @abstract\n */\n ImageStyle.prototype.load = function () {\n abstract();\n };\n /**\n * @abstract\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n ImageStyle.prototype.unlistenImageChange = function (listener) {\n abstract();\n };\n return ImageStyle;\n}());\nexport default ImageStyle;\n//# sourceMappingURL=Image.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 : Math.round(color[3] * 100) / 100;\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","/**\n * @module ol/colorlike\n */\nimport { toString } from './color.js';\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n/**\n * @param {import(\"./color.js\").Color|ColorLike} color Color.\n * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (Array.isArray(color)) {\n return toString(color);\n }\n else {\n return color;\n }\n}\n//# sourceMappingURL=colorlike.js.map","import { WORKER_OFFSCREEN_CANVAS } from './has.js';\n/**\n * @module ol/dom\n */\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [opt_width] Canvas width.\n * @param {number} [opt_height] Canvas height.\n * @param {Array} [opt_canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [opt_Context2DSettings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height, opt_canvasPool, opt_Context2DSettings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n var canvas;\n if (opt_canvasPool && opt_canvasPool.length) {\n canvas = opt_canvasPool.shift();\n }\n else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(opt_width || 300, opt_height || 300);\n }\n else {\n canvas = document.createElement('canvas');\n }\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d', opt_Context2DSettings));\n}\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n return width;\n}\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n var height = element.offsetHeight;\n var style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n return height;\n}\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n var parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n/**\n * @param {Node} node The node to remove.\n * @return {Node} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n var oldChildren = node.childNodes;\n for (var i = 0; true; ++i) {\n var oldChild = oldChildren[i];\n var newChild = children[i];\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n//# sourceMappingURL=dom.js.map","/**\n * @module ol/css\n */\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_HIDDEN = 'ol-hidden';\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_SELECTABLE = 'ol-selectable';\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSELECTABLE = 'ol-unselectable';\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_UNSUPPORTED = 'ol-unsupported';\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_CONTROL = 'ol-control';\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport var CLASS_COLLAPSED = 'ol-collapsed';\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nvar fontRegEx = new RegExp([\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n].join(''), 'i');\nvar fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters} The font parameters (or null if the input spec is invalid).\n */\nexport var getFontParameters = function (fontSpec) {\n var match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n var style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (var i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n var value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n/**\n * @param {number} opacity Opacity (0..1).\n * @return {string} CSS opacity.\n */\nexport function cssOpacity(opacity) {\n return opacity === 1 ? '' : String(Math.round(opacity * 100) / 100);\n}\n//# sourceMappingURL=css.js.map","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport { WORKER_OFFSCREEN_CANVAS } from '../has.js';\nimport { clear } from '../obj.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { getFontParameters } from '../css.js';\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array} contextInstructions ContextInstructions.\n */\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n */\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {string} [textAlign] TextAlign.\n * @property {string} textBaseline TextBaseline.\n * @property {string} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array} [padding] Padding.\n */\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array} coordinates The array of all coordinates.\n * @property {!Object} [textStates] The text states (decluttering).\n * @property {!Object} [fillStates] The fill states (decluttering).\n * @property {!Object} [strokeStates] The stroke states (decluttering).\n */\n/**\n * @typedef {Object} DeclutterImageWithText\n */\n/**\n * @const\n * @type {string}\n */\nexport var defaultFont = '10px sans-serif';\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultFillStyle = '#000';\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport var defaultLineCap = 'round';\n/**\n * @const\n * @type {Array}\n */\nexport var defaultLineDash = [];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineDashOffset = 0;\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport var defaultLineJoin = 'round';\n/**\n * @const\n * @type {number}\n */\nexport var defaultMiterLimit = 10;\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport var defaultStrokeStyle = '#000';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextAlign = 'center';\n/**\n * @const\n * @type {string}\n */\nexport var defaultTextBaseline = 'middle';\n/**\n * @const\n * @type {Array}\n */\nexport var defaultPadding = [0, 0, 0, 0];\n/**\n * @const\n * @type {number}\n */\nexport var defaultLineWidth = 1;\n/**\n * @type {BaseObject}\n */\nexport var checkedFonts = new BaseObject();\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache~LRUCache#setSize cache.setSize()}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport var labelCache = new EventTarget();\nlabelCache.setSize = function () {\n console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n/**\n * @type {CanvasRenderingContext2D}\n */\nvar measureContext = null;\n/**\n * @type {string}\n */\nvar measureFont;\n/**\n * @type {!Object}\n */\nexport var textHeights = {};\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport var registerFont = (function () {\n var retries = 100;\n var size = '32px ';\n var referenceFonts = ['monospace', 'serif'];\n var len = referenceFonts.length;\n var text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n var interval, referenceWidth;\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n var available = true;\n for (var i = 0; i < len; ++i) {\n var referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(fontStyle + ' ' + fontWeight + ' ' + size + referenceFont, text);\n if (fontFamily != referenceFont) {\n var width = measureTextWidth(fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont, text);\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n function check() {\n var done = true;\n var fonts = checkedFonts.getKeys();\n for (var i = 0, ii = fonts.length; i < ii; ++i) {\n var font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n }\n else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n return function (fontSpec) {\n var font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n var families = font.families;\n for (var i = 0, ii = families.length; i < ii; ++i) {\n var family = families[i];\n var key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport var measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n var measureElement;\n return function (fontSpec) {\n var height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n var font = getFontParameters(fontSpec);\n var metrics = measureText(fontSpec, 'Žg');\n var lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n }\n else {\n if (!measureElement) {\n measureElement = document.createElement('div');\n measureElement.innerHTML = 'M';\n measureElement.style.minHeight = '0';\n measureElement.style.maxHeight = 'none';\n measureElement.style.height = 'auto';\n measureElement.style.padding = '0';\n measureElement.style.border = 'none';\n measureElement.style.position = 'absolute';\n measureElement.style.display = 'block';\n measureElement.style.left = '-99999px';\n }\n measureElement.style.font = fontSpec;\n document.body.appendChild(measureElement);\n height = measureElement.offsetHeight;\n document.body.removeChild(measureElement);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n var width = measureTextWidth(font, text);\n cache[text] = width;\n return width;\n}\n/**\n * @param {string} font Font to use for measuring.\n * @param {Array} lines Lines to measure.\n * @param {Array} widths Array will be populated with the widths of\n * each line.\n * @return {number} Width of the whole text.\n */\nexport function measureTextWidths(font, lines, widths) {\n var numLines = lines.length;\n var width = 0;\n for (var i = 0; i < numLines; ++i) {\n var currentWidth = measureTextWidth(font, lines[i]);\n width = Math.max(width, currentWidth);\n widths.push(currentWidth);\n }\n return width;\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(context, transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) {\n context.save();\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n if ( /** @type {*} */(labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n }\n else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, 0, 0, w, h);\n }\n else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale[0], h * scale[1]);\n }\n context.restore();\n}\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n var contextInstructions = label.contextInstructions;\n for (var i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(context, contextInstructions[i + 1]);\n }\n else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n//# sourceMappingURL=canvas.js.map","/**\n * @module ol/style/RegularShape\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 ImageState from '../ImageState.js';\nimport ImageStyle from './Image.js';\nimport { asArray } from '../color.js';\nimport { asColorLike } from '../colorlike.js';\nimport { createCanvasContext2D } from '../dom.js';\nimport { defaultFillStyle, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, } from '../render/canvas.js';\n/**\n * Specify radius for regular polygons, or radius1 and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} [radius] Radius of a regular polygon.\n * @property {number} [radius1] First radius of a star. Ignored if radius is set.\n * @property {number} [radius2] Second radius of a star.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.\n * @property {Array} [displacement=[0,0]] Displacement of the shape\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius`, `radius1` and `radius2`.\n */\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} miterLimit MiterLimit.\n */\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when `radius1` and\n * `radius2` are provided.\n * @api\n */\nvar RegularShape = /** @class */ (function (_super) {\n __extends(RegularShape, _super);\n /**\n * @param {Options} options Options.\n */\n function RegularShape(options) {\n var _this = this;\n /**\n * @type {boolean}\n */\n var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;\n _this = _super.call(this, {\n opacity: 1,\n rotateWithView: rotateWithView,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n scale: options.scale !== undefined ? options.scale : 1,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n }) || this;\n /**\n * @private\n * @type {Object}\n */\n _this.canvas_ = undefined;\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n _this.hitDetectionCanvas_ = null;\n /**\n * @private\n * @type {import(\"./Fill.js\").default}\n */\n _this.fill_ = options.fill !== undefined ? options.fill : null;\n /**\n * @private\n * @type {Array}\n */\n _this.origin_ = [0, 0];\n /**\n * @private\n * @type {number}\n */\n _this.points_ = options.points;\n /**\n * @protected\n * @type {number}\n */\n _this.radius_ =\n options.radius !== undefined ? options.radius : options.radius1;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.radius2_ = options.radius2;\n /**\n * @private\n * @type {number}\n */\n _this.angle_ = options.angle !== undefined ? options.angle : 0;\n /**\n * @private\n * @type {import(\"./Stroke.js\").default}\n */\n _this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n /**\n * @private\n * @type {import(\"../size.js\").Size}\n */\n _this.size_ = null;\n /**\n * @private\n * @type {RenderOptions}\n */\n _this.renderOptions_ = null;\n _this.render();\n return _this;\n }\n /**\n * Clones the style.\n * @return {RegularShape} The cloned style.\n * @api\n */\n RegularShape.prototype.clone = function () {\n var scale = this.getScale();\n var style = new RegularShape({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n points: this.getPoints(),\n radius: this.getRadius(),\n radius2: this.getRadius2(),\n angle: this.getAngle(),\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n displacement: this.getDisplacement().slice(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Get the anchor point in pixels. The anchor determines the center point for the\n * symbolizer.\n * @return {Array} Anchor.\n * @api\n */\n RegularShape.prototype.getAnchor = function () {\n var size = this.size_;\n if (!size) {\n return null;\n }\n var displacement = this.getDisplacement();\n return [size[0] / 2 - displacement[0], size[1] / 2 + displacement[1]];\n };\n /**\n * Get the angle used in generating the shape.\n * @return {number} Shape's rotation in radians.\n * @api\n */\n RegularShape.prototype.getAngle = function () {\n return this.angle_;\n };\n /**\n * Get the fill style for the shape.\n * @return {import(\"./Fill.js\").default} Fill style.\n * @api\n */\n RegularShape.prototype.getFill = function () {\n return this.fill_;\n };\n /**\n * @return {HTMLCanvasElement} Image element.\n */\n RegularShape.prototype.getHitDetectionImage = function () {\n if (!this.hitDetectionCanvas_) {\n this.createHitDetectionCanvas_(this.renderOptions_);\n }\n return this.hitDetectionCanvas_;\n };\n /**\n * Get the image icon.\n * @param {number} pixelRatio Pixel ratio.\n * @return {HTMLCanvasElement} Image or Canvas element.\n * @api\n */\n RegularShape.prototype.getImage = function (pixelRatio) {\n var image = this.canvas_[pixelRatio];\n if (!image) {\n var renderOptions = this.renderOptions_;\n var context = createCanvasContext2D(renderOptions.size * pixelRatio, renderOptions.size * pixelRatio);\n this.draw_(renderOptions, context, pixelRatio);\n image = context.canvas;\n this.canvas_[pixelRatio] = image;\n }\n return image;\n };\n /**\n * Get the image pixel ratio.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel ratio.\n */\n RegularShape.prototype.getPixelRatio = function (pixelRatio) {\n return pixelRatio;\n };\n /**\n * @return {import(\"../size.js\").Size} Image size.\n */\n RegularShape.prototype.getImageSize = function () {\n return this.size_;\n };\n /**\n * @return {import(\"../ImageState.js\").default} Image state.\n */\n RegularShape.prototype.getImageState = function () {\n return ImageState.LOADED;\n };\n /**\n * Get the origin of the symbolizer.\n * @return {Array} Origin.\n * @api\n */\n RegularShape.prototype.getOrigin = function () {\n return this.origin_;\n };\n /**\n * Get the number of points for generating the shape.\n * @return {number} Number of points for stars and regular polygons.\n * @api\n */\n RegularShape.prototype.getPoints = function () {\n return this.points_;\n };\n /**\n * Get the (primary) radius for the shape.\n * @return {number} Radius.\n * @api\n */\n RegularShape.prototype.getRadius = function () {\n return this.radius_;\n };\n /**\n * Get the secondary radius for the shape.\n * @return {number|undefined} Radius2.\n * @api\n */\n RegularShape.prototype.getRadius2 = function () {\n return this.radius2_;\n };\n /**\n * Get the size of the symbolizer (in pixels).\n * @return {import(\"../size.js\").Size} Size.\n * @api\n */\n RegularShape.prototype.getSize = function () {\n return this.size_;\n };\n /**\n * Get the stroke style for the shape.\n * @return {import(\"./Stroke.js\").default} Stroke style.\n * @api\n */\n RegularShape.prototype.getStroke = function () {\n return this.stroke_;\n };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.listenImageChange = function (listener) { };\n /**\n * Load not yet loaded URI.\n */\n RegularShape.prototype.load = function () { };\n /**\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n */\n RegularShape.prototype.unlistenImageChange = function (listener) { };\n /**\n * Calculate additional canvas size needed for the miter.\n * @param {string} lineJoin Line join\n * @param {number} strokeWidth Stroke width\n * @param {number} miterLimit Miter limit\n * @return {number} Additional canvas size needed\n * @private\n */\n RegularShape.prototype.calculateLineJoinSize_ = function (lineJoin, strokeWidth, miterLimit) {\n if (strokeWidth === 0 ||\n this.points_ === Infinity ||\n (lineJoin !== 'bevel' && lineJoin !== 'miter')) {\n return strokeWidth;\n }\n // m | ^\n // i | |\\ .\n // t >| #\\\n // e | |\\ \\ .\n // r \\s\\\n // | \\t\\ . .\n // \\r\\ . .\n // | \\o\\ . . . . .\n // e \\k\\ . . . .\n // | \\e\\ . . . . .\n // d \\ \\ . . . .\n // | _ _a_ _\\# . . .\n // r1 / ` . .\n // | . .\n // b / . .\n // | . .\n // / r2 . .\n // | . .\n // / . .\n // |α . .\n // / . .\n // ° center\n var r1 = this.radius_;\n var r2 = this.radius2_ === undefined ? r1 : this.radius2_;\n if (r1 < r2) {\n var tmp = r1;\n r1 = r2;\n r2 = tmp;\n }\n var points = this.radius2_ === undefined ? this.points_ : this.points_ * 2;\n var alpha = (2 * Math.PI) / points;\n var a = r2 * Math.sin(alpha);\n var b = Math.sqrt(r2 * r2 - a * a);\n var d = r1 - b;\n var e = Math.sqrt(a * a + d * d);\n var miterRatio = e / a;\n if (lineJoin === 'miter' && miterRatio <= miterLimit) {\n return miterRatio * strokeWidth;\n }\n // Calculate the distnce from center to the stroke corner where\n // it was cut short because of the miter limit.\n // l\n // ----+---- <= distance from center to here is maxr\n // /####|k ##\\\n // /#####^#####\\\n // /#### /+\\# s #\\\n // /### h/+++\\# t #\\\n // /### t/+++++\\# r #\\\n // /### a/+++++++\\# o #\\\n // /### p/++ fill +\\# k #\\\n ///#### /+++++^+++++\\# e #\\\n //#####/+++++/+\\+++++\\#####\\\n var k = strokeWidth / 2 / miterRatio;\n var l = (strokeWidth / 2) * (d / e);\n var maxr = Math.sqrt((r1 + k) * (r1 + k) + l * l);\n var bevelAdd = maxr - r1;\n if (this.radius2_ === undefined || lineJoin === 'bevel') {\n return bevelAdd * 2;\n }\n // If outer miter is over the miter limit the inner miter may reach through the\n // center and be longer than the bevel, same calculation as above but swap r1 / r2.\n var aa = r1 * Math.sin(alpha);\n var bb = Math.sqrt(r1 * r1 - aa * aa);\n var dd = r2 - bb;\n var ee = Math.sqrt(aa * aa + dd * dd);\n var innerMiterRatio = ee / aa;\n if (innerMiterRatio <= miterLimit) {\n var innerLength = (innerMiterRatio * strokeWidth) / 2 - r2 - r1;\n return 2 * Math.max(bevelAdd, innerLength);\n }\n return bevelAdd * 2;\n };\n /**\n * @return {RenderOptions} The render options\n * @protected\n */\n RegularShape.prototype.createRenderOptions = function () {\n var lineJoin = defaultLineJoin;\n var miterLimit = 0;\n var lineDash = null;\n var lineDashOffset = 0;\n var strokeStyle;\n var strokeWidth = 0;\n if (this.stroke_) {\n strokeStyle = this.stroke_.getColor();\n if (strokeStyle === null) {\n strokeStyle = defaultStrokeStyle;\n }\n strokeStyle = asColorLike(strokeStyle);\n strokeWidth = this.stroke_.getWidth();\n if (strokeWidth === undefined) {\n strokeWidth = defaultLineWidth;\n }\n lineDash = this.stroke_.getLineDash();\n lineDashOffset = this.stroke_.getLineDashOffset();\n lineJoin = this.stroke_.getLineJoin();\n if (lineJoin === undefined) {\n lineJoin = defaultLineJoin;\n }\n miterLimit = this.stroke_.getMiterLimit();\n if (miterLimit === undefined) {\n miterLimit = defaultMiterLimit;\n }\n }\n var add = this.calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit);\n var maxRadius = Math.max(this.radius_, this.radius2_ || 0);\n var size = Math.ceil(2 * maxRadius + add);\n return {\n strokeStyle: strokeStyle,\n strokeWidth: strokeWidth,\n size: size,\n lineDash: lineDash,\n lineDashOffset: lineDashOffset,\n lineJoin: lineJoin,\n miterLimit: miterLimit,\n };\n };\n /**\n * @protected\n */\n RegularShape.prototype.render = function () {\n this.renderOptions_ = this.createRenderOptions();\n var size = this.renderOptions_.size;\n this.canvas_ = {};\n this.size_ = [size, size];\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The rendering context.\n * @param {number} pixelRatio The pixel ratio.\n */\n RegularShape.prototype.draw_ = function (renderOptions, context, pixelRatio) {\n context.scale(pixelRatio, pixelRatio);\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n this.createPath_(context);\n if (this.fill_) {\n var color = this.fill_.getColor();\n if (color === null) {\n color = defaultFillStyle;\n }\n context.fillStyle = asColorLike(color);\n context.fill();\n }\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (context.setLineDash && renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n */\n RegularShape.prototype.createHitDetectionCanvas_ = function (renderOptions) {\n if (this.fill_) {\n var color = this.fill_.getColor();\n // determine if fill is transparent (or pattern or gradient)\n var opacity = 0;\n if (typeof color === 'string') {\n color = asArray(color);\n }\n if (color === null) {\n opacity = 1;\n }\n else if (Array.isArray(color)) {\n opacity = color.length === 4 ? color[3] : 1;\n }\n if (opacity === 0) {\n // if a transparent fill style is set, create an extra hit-detection image\n // with a default fill style\n var context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n this.hitDetectionCanvas_ = context.canvas;\n this.drawHitDetectionCanvas_(renderOptions, context);\n }\n }\n if (!this.hitDetectionCanvas_) {\n this.hitDetectionCanvas_ = this.getImage(1);\n }\n };\n /**\n * @private\n * @param {CanvasRenderingContext2D} context The context to draw in.\n */\n RegularShape.prototype.createPath_ = function (context) {\n var points = this.points_;\n var radius = this.radius_;\n if (points === Infinity) {\n context.arc(0, 0, radius, 0, 2 * Math.PI);\n }\n else {\n var radius2 = this.radius2_ === undefined ? radius : this.radius2_;\n if (this.radius2_ !== undefined) {\n points *= 2;\n }\n var startAngle = this.angle_ - Math.PI / 2;\n var step = (2 * Math.PI) / points;\n for (var i = 0; i < points; i++) {\n var angle0 = startAngle + i * step;\n var radiusC = i % 2 === 0 ? radius : radius2;\n context.lineTo(radiusC * Math.cos(angle0), radiusC * Math.sin(angle0));\n }\n context.closePath();\n }\n };\n /**\n * @private\n * @param {RenderOptions} renderOptions Render options.\n * @param {CanvasRenderingContext2D} context The context.\n */\n RegularShape.prototype.drawHitDetectionCanvas_ = function (renderOptions, context) {\n // set origin to canvas center\n context.translate(renderOptions.size / 2, renderOptions.size / 2);\n this.createPath_(context);\n context.fillStyle = defaultFillStyle;\n context.fill();\n if (this.stroke_) {\n context.strokeStyle = renderOptions.strokeStyle;\n context.lineWidth = renderOptions.strokeWidth;\n if (renderOptions.lineDash) {\n context.setLineDash(renderOptions.lineDash);\n context.lineDashOffset = renderOptions.lineDashOffset;\n }\n context.lineJoin = renderOptions.lineJoin;\n context.miterLimit = renderOptions.miterLimit;\n context.stroke();\n }\n };\n return RegularShape;\n}(ImageStyle));\nexport default RegularShape;\n//# sourceMappingURL=RegularShape.js.map","/**\n * @module ol/style/Circle\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 RegularShape from './RegularShape.js';\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n */\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nvar CircleStyle = /** @class */ (function (_super) {\n __extends(CircleStyle, _super);\n /**\n * @param {Options} [opt_options] Options.\n */\n function CircleStyle(opt_options) {\n var _this = this;\n var options = opt_options ? opt_options : {};\n _this = _super.call(this, {\n points: Infinity,\n fill: options.fill,\n radius: options.radius,\n stroke: options.stroke,\n scale: options.scale !== undefined ? options.scale : 1,\n rotation: options.rotation !== undefined ? options.rotation : 0,\n rotateWithView: options.rotateWithView !== undefined ? options.rotateWithView : false,\n displacement: options.displacement !== undefined ? options.displacement : [0, 0],\n }) || this;\n return _this;\n }\n /**\n * Clones the style.\n * @return {CircleStyle} The cloned style.\n * @api\n */\n CircleStyle.prototype.clone = function () {\n var scale = this.getScale();\n var style = new CircleStyle({\n fill: this.getFill() ? this.getFill().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n radius: this.getRadius(),\n scale: Array.isArray(scale) ? scale.slice() : scale,\n rotation: this.getRotation(),\n rotateWithView: this.getRotateWithView(),\n displacement: this.getDisplacement().slice(),\n });\n style.setOpacity(this.getOpacity());\n return style;\n };\n /**\n * Set the circle radius.\n *\n * @param {number} radius Circle radius.\n * @api\n */\n CircleStyle.prototype.setRadius = function (radius) {\n this.radius_ = radius;\n this.render();\n };\n return CircleStyle;\n}(RegularShape));\nexport default CircleStyle;\n//# sourceMappingURL=Circle.js.map","/**\n * @module ol/style/Fill\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color=null] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nvar Fill = /** @class */ (function () {\n /**\n * @param {Options} [opt_options] Options.\n */\n function Fill(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n }\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {Fill} The cloned style.\n * @api\n */\n Fill.prototype.clone = function () {\n var color = this.getColor();\n return new Fill({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n });\n };\n /**\n * Get the fill color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n Fill.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n Fill.prototype.setColor = function (color) {\n this.color_ = color;\n };\n return Fill;\n}());\nexport default Fill;\n//# sourceMappingURL=Fill.js.map","/**\n * @module ol/style/Stroke\n */\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array} [lineDash] Line dash pattern. Default is `null` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nvar Stroke = /** @class */ (function () {\n /**\n * @param {Options} [opt_options] Options.\n */\n function Stroke(opt_options) {\n var options = opt_options || {};\n /**\n * @private\n * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n /**\n * @private\n * @type {CanvasLineCap|undefined}\n */\n this.lineCap_ = options.lineCap;\n /**\n * @private\n * @type {Array}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n /**\n * @private\n * @type {CanvasLineJoin|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n }\n /**\n * Clones the style.\n * @return {Stroke} The cloned style.\n * @api\n */\n Stroke.prototype.clone = function () {\n var color = this.getColor();\n return new Stroke({\n color: Array.isArray(color) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth(),\n });\n };\n /**\n * Get the stroke color.\n * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n * @api\n */\n Stroke.prototype.getColor = function () {\n return this.color_;\n };\n /**\n * Get the line cap type for the stroke.\n * @return {CanvasLineCap|undefined} Line cap.\n * @api\n */\n Stroke.prototype.getLineCap = function () {\n return this.lineCap_;\n };\n /**\n * Get the line dash style for the stroke.\n * @return {Array} Line dash.\n * @api\n */\n Stroke.prototype.getLineDash = function () {\n return this.lineDash_;\n };\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n Stroke.prototype.getLineDashOffset = function () {\n return this.lineDashOffset_;\n };\n /**\n * Get the line join type for the stroke.\n * @return {CanvasLineJoin|undefined} Line join.\n * @api\n */\n Stroke.prototype.getLineJoin = function () {\n return this.lineJoin_;\n };\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n Stroke.prototype.getMiterLimit = function () {\n return this.miterLimit_;\n };\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n Stroke.prototype.getWidth = function () {\n return this.width_;\n };\n /**\n * Set the color.\n *\n * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n * @api\n */\n Stroke.prototype.setColor = function (color) {\n this.color_ = color;\n };\n /**\n * Set the line cap.\n *\n * @param {CanvasLineCap|undefined} lineCap Line cap.\n * @api\n */\n Stroke.prototype.setLineCap = function (lineCap) {\n this.lineCap_ = lineCap;\n };\n /**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array} lineDash Line dash.\n * @api\n */\n Stroke.prototype.setLineDash = function (lineDash) {\n this.lineDash_ = lineDash;\n };\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n Stroke.prototype.setLineDashOffset = function (lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n };\n /**\n * Set the line join.\n *\n * @param {CanvasLineJoin|undefined} lineJoin Line join.\n * @api\n */\n Stroke.prototype.setLineJoin = function (lineJoin) {\n this.lineJoin_ = lineJoin;\n };\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n Stroke.prototype.setMiterLimit = function (miterLimit) {\n this.miterLimit_ = miterLimit;\n };\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n Stroke.prototype.setWidth = function (width) {\n this.width_ = width;\n };\n return Stroke;\n}());\nexport default Stroke;\n//# sourceMappingURL=Stroke.js.map","/**\n * @module ol/style/Style\n */\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport Stroke from './Stroke.js';\nimport { assert } from '../asserts.js';\n/**\n * A function that takes an {@link module:ol/Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style~Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array","\n\n","import { render } from \"./Modal.vue?vue&type=template&id=201911f2\"\nimport script from \"./Modal.vue?vue&type=script&lang=js\"\nexport * from \"./Modal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","\n\n\n\n","\n","import { render } from \"./CloseButton.vue?vue&type=template&id=051f3839\"\nimport script from \"./CloseButton.vue?vue&type=script&lang=js\"\nexport * from \"./CloseButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./SeeAll.vue?vue&type=template&id=6734825d\"\nimport script from \"./SeeAll.vue?vue&type=script&lang=js\"\nexport * from \"./SeeAll.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Slide.vue?vue&type=template&id=12e4f51c\"\nimport script from \"./Slide.vue?vue&type=script&lang=js\"\nexport * from \"./Slide.vue?vue&type=script&lang=js\"\n\nimport \"./Slide.vue?vue&type=style&index=0&id=12e4f51c&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./DoughnutDeficitAppHa.vue?vue&type=template&id=7c9e97ae\"\nimport script from \"./DoughnutDeficitAppHa.vue?vue&type=script&lang=js\"\nexport * from \"./DoughnutDeficitAppHa.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./DoughnutDeficitRLHa.vue?vue&type=template&id=1087b4d0\"\nimport script from \"./DoughnutDeficitRLHa.vue?vue&type=script&lang=js\"\nexport * from \"./DoughnutDeficitRLHa.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Slide1.vue?vue&type=template&id=3263ee55\"\nimport script from \"./Slide1.vue?vue&type=script&lang=js\"\nexport * from \"./Slide1.vue?vue&type=script&lang=js\"\n\nimport \"./Slide1.vue?vue&type=style&index=0&id=3263ee55&lang=css\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n\n","import { render } from \"./Slide2.vue?vue&type=template&id=288983f4\"\nimport script from \"./Slide2.vue?vue&type=script&lang=js\"\nexport * from \"./Slide2.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Slider.vue?vue&type=template&id=60417150\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=60417150&lang=scss\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","/**\n * @module ol/ViewProperty\n */\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n//# sourceMappingURL=ViewProperty.js.map","/**\n * @module ol/tilegrid/common\n */\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport var DEFAULT_MAX_ZOOM = 42;\n/**\n * Default tile size.\n * @type {number}\n */\nexport var DEFAULT_TILE_SIZE = 256;\n//# sourceMappingURL=common.js.map","/**\n * @module ol/centerconstraint\n */\nimport { clamp } from './math.js';\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @param {Array} [opt_centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, opt_isMoving, opt_centerShift) {\n if (center) {\n var viewWidth = onlyCenter ? 0 : size[0] * resolution;\n var viewHeight = onlyCenter ? 0 : size[1] * resolution;\n var shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n var shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n var minX = extent[0] + viewWidth / 2 + shiftX;\n var maxX = extent[2] - viewWidth / 2 + shiftX;\n var minY = extent[1] + viewHeight / 2 + shiftY;\n var maxY = extent[3] - viewHeight / 2 + shiftY;\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n var x = clamp(center[0], minX, maxX);\n var y = clamp(center[1], minY, maxY);\n var ratio = 30 * resolution;\n // during an interaction, allow some overscroll\n if (opt_isMoving && smooth) {\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n return [x, y];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n//# sourceMappingURL=centerconstraint.js.map","/**\n * @module ol/resolutionconstraint\n */\nimport { clamp } from './math.js';\nimport { getHeight, getWidth } from './extent.js';\nimport { linearFindNearest } from './array.js';\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(resolution, maxExtent, viewportSize, showFullExtent) {\n var xResolution = getWidth(maxExtent) / viewportSize[0];\n var yResolution = getHeight(maxExtent) / viewportSize[1];\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n var result = Math.min(resolution, maxResolution);\n var ratio = 50;\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var maxResolution = resolutions[0];\n var minResolution = resolutions[resolutions.length - 1];\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var capped = Math.min(cappedMaxRes, resolution);\n var z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [opt_minResolution] Minimum resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var minResolution = opt_minResolution !== undefined ? opt_minResolution : 0;\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n var tolerance = 1e-9;\n var minZoomLevel = Math.ceil(Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance);\n var offset = -direction * (0.5 - tolerance) + 0.5;\n var capped = Math.min(cappedMaxRes, resolution);\n var cappedZoomLevel = Math.floor(Math.log(maxResolution / capped) / Math.log(power) + offset);\n var zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n var newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n var cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent)\n : maxResolution;\n var smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth || !opt_isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);\n }\n else {\n return undefined;\n }\n });\n}\n//# sourceMappingURL=resolutionconstraint.js.map","/**\n * @module ol/rotationconstraint\n */\nimport { toRadians } from './math.js';\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n }\n else {\n return undefined;\n }\n}\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n }\n else {\n return undefined;\n }\n}\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n var theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n }\n else {\n return undefined;\n }\n });\n}\n/**\n * @param {number} [opt_tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n var tolerance = opt_tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n if (rotation !== undefined) {\n if (Math.abs(rotation) <= tolerance) {\n return 0;\n }\n else {\n return rotation;\n }\n }\n else {\n return undefined;\n }\n });\n}\n//# sourceMappingURL=rotationconstraint.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/View\n */\nimport BaseObject from './Object.js';\nimport GeometryType from './geom/GeometryType.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport { DEFAULT_TILE_SIZE } from './tilegrid/common.js';\nimport { METERS_PER_UNIT, createProjection, fromUserCoordinate, fromUserExtent, getUserProjection, toUserCoordinate, toUserExtent, } from './proj.js';\nimport { VOID } from './functions.js';\nimport { add as addCoordinate, equals as coordinatesEqual, rotate as rotateCoordinate, } from './coordinate.js';\nimport { assert } from './asserts.js';\nimport { assign } from './obj.js';\nimport { none as centerNone, createExtent } from './centerconstraint.js';\nimport { clamp, modulo } from './math.js';\nimport { createMinMaxResolution } from './resolutionconstraint.js';\nimport { createSnapToN, createSnapToZero, disable, none as rotationNone, } from './rotationconstraint.js';\nimport { createSnapToPower, createSnapToResolutions, } from './resolutionconstraint.js';\nimport { easeOut } from './easing.js';\nimport { equals } from './coordinate.js';\nimport { getCenter, getForViewAndSize, getHeight, getWidth, isEmpty, } from './extent.js';\nimport { inAndOut } from './easing.js';\nimport { linearFindNearest } from './array.js';\nimport { fromExtent as polygonFromExtent } from './geom/Polygon.js';\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center.\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nvar DEFAULT_MIN_ZOOM = 0;\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Spherical Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nvar View = /** @class */ (function (_super) {\n __extends(View, _super);\n /**\n * @param {ViewOptions} [opt_options] View options.\n */\n function View(opt_options) {\n var _this = _super.call(this) || this;\n /***\n * @type {ViewOnSignature}\n */\n _this.on;\n /***\n * @type {ViewOnSignature}\n */\n _this.once;\n /***\n * @type {ViewOnSignature}\n */\n _this.un;\n var options = assign({}, opt_options);\n /**\n * @private\n * @type {Array}\n */\n _this.hints_ = [0, 0];\n /**\n * @private\n * @type {Array>}\n */\n _this.animations_ = [];\n /**\n * @private\n * @type {number|undefined}\n */\n _this.updateAnimationKey_;\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n _this.projection_ = createProjection(options.projection, 'EPSG:3857');\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n _this.viewportSize_ = [100, 100];\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.targetCenter_ = null;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetResolution_;\n /**\n * @private\n * @type {number|undefined}\n */\n _this.targetRotation_;\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n _this.nextCenter_ = null;\n /**\n * @private\n * @type {number}\n */\n _this.nextResolution_;\n /**\n * @private\n * @type {number}\n */\n _this.nextRotation_;\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n _this.cancelAnchor_ = undefined;\n if (options.center) {\n options.center = fromUserCoordinate(options.center, _this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, _this.projection_);\n }\n _this.applyOptions_(options);\n return _this;\n }\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n View.prototype.applyOptions_ = function (options) {\n var properties = assign({}, options);\n for (var key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n var resolutionConstraintInfo = createResolutionConstraint(options);\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n var centerConstraint = createCenterConstraint(options);\n var resolutionConstraint = resolutionConstraintInfo.constraint;\n var rotationConstraint = createRotationConstraint(options);\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(options.center !== undefined ? options.center : null);\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n }\n else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n };\n Object.defineProperty(View.prototype, \"padding\", {\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get: function () {\n return this.padding_;\n },\n set: function (padding) {\n var oldPadding = this.padding_;\n this.padding_ = padding;\n var center = this.getCenter();\n if (center) {\n var newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n var resolution = this.getResolution();\n var offsetX = (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n var offsetY = (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n View.prototype.getUpdatedOptions_ = function (newOptions) {\n var options = this.getProperties();\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n }\n else {\n options.zoom = this.getZoom();\n }\n // preserve center\n options.center = this.getCenterInternal();\n // preserve rotation\n options.rotation = this.getRotation();\n return assign({}, options, newOptions);\n };\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n View.prototype.animate = function (var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n var options = arguments[i];\n if (options.center) {\n options = assign({}, options);\n options.center = fromUserCoordinate(options.center, this.getProjection());\n }\n if (options.anchor) {\n options = assign({}, options);\n options.anchor = fromUserCoordinate(options.anchor, this.getProjection());\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n };\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n View.prototype.animateInternal = function (var_args) {\n var animationCount = arguments.length;\n var callback;\n if (animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function') {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n var i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n var state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n }\n else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n var start = Date.now();\n var center = this.targetCenter_.slice();\n var resolution = this.targetResolution_;\n var rotation = this.targetRotation_;\n var series = [];\n for (; i < animationCount; ++i) {\n var options = /** @type {AnimationOptions} */ (arguments[i]);\n var animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n }\n else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n var delta = modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n }\n else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n };\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n View.prototype.getAnimating = function () {\n return this.hints_[ViewHint.ANIMATING] > 0;\n };\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n View.prototype.getInteracting = function () {\n return this.hints_[ViewHint.INTERACTING] > 0;\n };\n /**\n * Cancel any ongoing animations.\n * @api\n */\n View.prototype.cancelAnimations = function () {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n var anchor;\n for (var i = 0, ii = this.animations_.length; i < ii; ++i) {\n var series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n };\n /**\n * Update all animations.\n */\n View.prototype.updateAnimations_ = function () {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n var now = Date.now();\n var more = false;\n for (var i = this.animations_.length - 1; i >= 0; --i) {\n var series = this.animations_[i];\n var seriesComplete = true;\n for (var j = 0, jj = series.length; j < jj; ++j) {\n var animation = series[j];\n if (animation.complete) {\n continue;\n }\n var elapsed = now - animation.start;\n var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n }\n else {\n seriesComplete = false;\n }\n var progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n var x0 = animation.sourceCenter[0];\n var y0 = animation.sourceCenter[1];\n var x1 = animation.targetCenter[0];\n var y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n var x = x0 + progress * (x1 - x0);\n var y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n var resolution = progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n var size = this.getViewportSize_(this.getRotation());\n var constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);\n this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined) {\n var rotation = progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n var constrainedRotation = this.constraints_.rotation(rotation, true);\n this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n var callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));\n }\n };\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n View.prototype.calculateCenterRotate = function (rotation, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n };\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n View.prototype.calculateCenterZoom = function (resolution, anchor) {\n var center;\n var currentCenter = this.getCenterInternal();\n var currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n var x = anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n var y = anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n };\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n View.prototype.getViewportSize_ = function (opt_rotation) {\n var size = this.viewportSize_;\n if (opt_rotation) {\n var w = size[0];\n var h = size[1];\n return [\n Math.abs(w * Math.cos(opt_rotation)) +\n Math.abs(h * Math.sin(opt_rotation)),\n Math.abs(w * Math.sin(opt_rotation)) +\n Math.abs(h * Math.cos(opt_rotation)),\n ];\n }\n else {\n return size;\n }\n };\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [opt_size] Viewport size; if undefined, [100, 100] is assumed\n */\n View.prototype.setViewportSize = function (opt_size) {\n this.viewportSize_ = Array.isArray(opt_size)\n ? opt_size.slice()\n : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n };\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n View.prototype.getCenter = function () {\n var center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n };\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n View.prototype.getCenterInternal = function () {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (this.get(ViewProperty.CENTER));\n };\n /**\n * @return {Constraints} Constraints.\n */\n View.prototype.getConstraints = function () {\n return this.constraints_;\n };\n /**\n * @return {boolean} Resolution constraint is set\n */\n View.prototype.getConstrainResolution = function () {\n return this.get('constrainResolution');\n };\n /**\n * @param {Array} [opt_hints] Destination array.\n * @return {Array} Hint.\n */\n View.prototype.getHints = function (opt_hints) {\n if (opt_hints !== undefined) {\n opt_hints[0] = this.hints_[0];\n opt_hints[1] = this.hints_[1];\n return opt_hints;\n }\n else {\n return this.hints_.slice();\n }\n };\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n View.prototype.calculateExtent = function (opt_size) {\n var extent = this.calculateExtentInternal(opt_size);\n return toUserExtent(extent, this.getProjection());\n };\n /**\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n View.prototype.calculateExtentInternal = function (opt_size) {\n var size = opt_size || this.getViewportSizeMinusPadding_();\n var center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n assert(center, 1); // The view center is not defined\n var resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n var rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n return getForViewAndSize(center, resolution, rotation, size);\n };\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n View.prototype.getMaxResolution = function () {\n return this.maxResolution_;\n };\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n View.prototype.getMinResolution = function () {\n return this.minResolution_;\n };\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n View.prototype.getMaxZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.minResolution_));\n };\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n View.prototype.setMaxZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ maxZoom: zoom }));\n };\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n View.prototype.getMinZoom = function () {\n return /** @type {number} */ (this.getZoomForResolution(this.maxResolution_));\n };\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n View.prototype.setMinZoom = function (zoom) {\n this.applyOptions_(this.getUpdatedOptions_({ minZoom: zoom }));\n };\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n View.prototype.setConstrainResolution = function (enabled) {\n this.applyOptions_(this.getUpdatedOptions_({ constrainResolution: enabled }));\n };\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n View.prototype.getProjection = function () {\n return this.projection_;\n };\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.getResolution = function () {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n };\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n View.prototype.getResolutions = function () {\n return this.resolutions_;\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n View.prototype.getResolutionForExtent = function (extent, opt_size) {\n return this.getResolutionForExtentInternal(fromUserExtent(extent, this.getProjection()), opt_size);\n };\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n View.prototype.getResolutionForExtentInternal = function (extent, opt_size) {\n var size = opt_size || this.getViewportSizeMinusPadding_();\n var xResolution = getWidth(extent) / size[0];\n var yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n };\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n View.prototype.getResolutionForValueFunction = function (opt_power) {\n var power = opt_power || 2;\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n var resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n });\n };\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.getRotation = function () {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n };\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n View.prototype.getValueForResolutionFunction = function (opt_power) {\n var logPower = Math.log(opt_power || 2);\n var maxResolution = this.getConstrainedResolution(this.maxResolution_);\n var minResolution = this.minResolution_;\n var max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n var value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n });\n };\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n View.prototype.getViewportSizeMinusPadding_ = function (opt_rotation) {\n var size = this.getViewportSize_(opt_rotation);\n var padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n };\n /**\n * @return {State} View state.\n */\n View.prototype.getState = function () {\n var projection = this.getProjection();\n var resolution = this.getResolution();\n var rotation = this.getRotation();\n var center = /** @type {import(\"./coordinate.js\").Coordinate} */ (this.getCenterInternal());\n var padding = this.padding_;\n if (padding) {\n var reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(center, this.getViewportSize_(), [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n };\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n View.prototype.getZoom = function () {\n var zoom;\n var resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n };\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n View.prototype.getZoomForResolution = function (resolution) {\n var offset = this.minZoom_ || 0;\n var max, zoomFactor;\n if (this.resolutions_) {\n var nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n }\n else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n }\n else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n };\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n View.prototype.getResolutionForZoom = function (zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n var baseLevel = clamp(Math.floor(zoom), 0, this.resolutions_.length - 2);\n var zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1)));\n }\n else {\n return (this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_));\n }\n };\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [opt_options] Options.\n * @api\n */\n View.prototype.fit = function (geometryOrExtent, opt_options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n var geometry;\n assert(Array.isArray(geometryOrExtent) ||\n typeof ( /** @type {?} */(geometryOrExtent).getSimplifiedGeometry) ===\n 'function', 24); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n var extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n }\n else if (geometryOrExtent.getType() === GeometryType.CIRCLE) {\n var extent = fromUserExtent(geometryOrExtent.getExtent(), this.getProjection());\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n }\n else {\n var userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection()));\n }\n else {\n geometry = geometryOrExtent;\n }\n }\n this.fitInternal(geometry, opt_options);\n };\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n View.prototype.rotatedExtentForGeometry = function (geometry) {\n var rotation = this.getRotation();\n var cosAngle = Math.cos(rotation);\n var sinAngle = Math.sin(-rotation);\n var coords = geometry.getFlatCoordinates();\n var stride = geometry.getStride();\n var minRotX = +Infinity;\n var minRotY = +Infinity;\n var maxRotX = -Infinity;\n var maxRotY = -Infinity;\n for (var i = 0, ii = coords.length; i < ii; i += stride) {\n var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n };\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [opt_options] Options.\n */\n View.prototype.fitInternal = function (geometry, opt_options) {\n var options = opt_options || {};\n var size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n var nearest = options.nearest !== undefined ? options.nearest : false;\n var minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n }\n else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n }\n else {\n minResolution = 0;\n }\n var rotatedExtent = this.rotatedExtentForGeometry(geometry);\n // calculate resolution\n var resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n // calculate center\n var rotation = this.getRotation();\n var sinAngle = Math.sin(rotation);\n var cosAngle = Math.cos(rotation);\n var centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n var centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n var centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n var center = this.getConstrainedCenter([centerX, centerY], resolution);\n var callback = options.callback ? options.callback : VOID;\n if (options.duration !== undefined) {\n this.animateInternal({\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n }, callback);\n }\n else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n };\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n View.prototype.centerOn = function (coordinate, size, position) {\n this.centerOnInternal(fromUserCoordinate(coordinate, this.getProjection()), size, position);\n };\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n View.prototype.centerOnInternal = function (coordinate, size, position) {\n this.setCenterInternal(calculateCenterOn(coordinate, size, position, this.getResolution(), this.getRotation()));\n };\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n View.prototype.calculateCenterShift = function (center, resolution, rotation, size) {\n var centerShift;\n var padding = this.padding_;\n if (padding && center) {\n var reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n var shiftedCenter = calculateCenterOn(center, size, [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]], resolution, rotation);\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n };\n /**\n * @return {boolean} Is defined.\n */\n View.prototype.isDef = function () {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n View.prototype.adjustCenter = function (deltaCoordinates) {\n var center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n View.prototype.adjustCenterInternal = function (deltaCoordinates) {\n var center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.adjustResolution = function (ratio, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n };\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.adjustResolutionInternal = function (ratio, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var size = this.getViewportSize_(this.getRotation());\n var newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n }\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n };\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.adjustZoom = function (delta, opt_anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n };\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n * @api\n */\n View.prototype.adjustRotation = function (delta, opt_anchor) {\n if (opt_anchor) {\n opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, opt_anchor);\n };\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n */\n View.prototype.adjustRotationInternal = function (delta, opt_anchor) {\n var isMoving = this.getAnimating() || this.getInteracting();\n var newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n };\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n View.prototype.setCenter = function (center) {\n this.setCenterInternal(fromUserCoordinate(center, this.getProjection()));\n };\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n View.prototype.setCenterInternal = function (center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n };\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n View.prototype.setHint = function (hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n };\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n View.prototype.setResolution = function (resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n };\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n View.prototype.setRotation = function (rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n };\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n View.prototype.setZoom = function (zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n };\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [opt_doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [opt_forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n View.prototype.applyTargetState_ = function (opt_doNotCancelAnims, opt_forceMoving) {\n var isMoving = this.getAnimating() || this.getInteracting() || opt_forceMoving;\n // compute rotation\n var newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (!newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n if (this.getAnimating() && !opt_doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n };\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [opt_duration] The animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.resolveConstraints = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var duration = opt_duration !== undefined ? opt_duration : 200;\n var direction = opt_resolutionDirection || 0;\n var newRotation = this.constraints_.rotation(this.targetRotation_);\n var size = this.getViewportSize_(newRotation);\n var newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);\n var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, false, this.calculateCenterShift(this.targetCenter_, newResolution, newRotation, size));\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n var anchor = opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n if (this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n };\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n View.prototype.beginInteraction = function () {\n this.resolveConstraints(0);\n this.setHint(ViewHint.INTERACTING, 1);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n View.prototype.endInteraction = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n var anchor = opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n };\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n View.prototype.endInteractionInternal = function (opt_duration, opt_resolutionDirection, opt_anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n };\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [opt_targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n View.prototype.getConstrainedCenter = function (targetCenter, opt_targetResolution) {\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size);\n };\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n View.prototype.getConstrainedZoom = function (targetZoom, opt_direction) {\n var targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(this.getConstrainedResolution(targetRes, opt_direction));\n };\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n View.prototype.getConstrainedResolution = function (targetResolution, opt_direction) {\n var direction = opt_direction || 0;\n var size = this.getViewportSize_(this.getRotation());\n return this.constraints_.resolution(targetResolution, direction, size);\n };\n return View;\n}(BaseObject));\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n var smooth = options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n var projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n var extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n return centerNone;\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n var resolutionConstraint;\n var maxResolution;\n var minResolution;\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n var defaultMaxZoom = 28;\n var defaultZoomFactor = 2;\n var minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n var maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n var zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n var multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;\n var smooth = options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n var showFullExtent = options.showFullExtent !== undefined ? options.showFullExtent : false;\n var projection = createProjection(options.projection, 'EPSG:3857');\n var projExtent = projection.getExtent();\n var constrainOnlyCenter = options.constrainOnlyCenter;\n var extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n if (options.resolutions !== undefined) {\n var resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(resolutions, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n else {\n // calculate the default min and max resolution\n var size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n var defaultMaxResolution = size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n var defaultMinResolution = defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n }\n else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n }\n else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n }\n else {\n minResolution = defaultMinResolution;\n }\n }\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n else {\n resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent, showFullExtent);\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n var enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n var constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n else if (constrainRotation === false) {\n return rotationNone;\n }\n else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n else {\n return rotationNone;\n }\n }\n else {\n return disable;\n }\n}\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n var cosAngle = Math.cos(-rotation);\n var sinAngle = Math.sin(-rotation);\n var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n var centerX = rotX * cosAngle - rotY * sinAngle;\n var centerY = rotY * cosAngle + rotX * sinAngle;\n return [centerX, centerY];\n}\nexport default View;\n//# sourceMappingURL=View.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/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport SourceState from '../source/State.js';\nimport { assert } from '../asserts.js';\nimport { assign, clear } from '../obj.js';\nimport { getIntersection } from '../extent.js';\nimport { getUid } from '../util.js';\nimport { listen, unlistenByKey } from '../events.js';\n/**\n * @typedef {'addlayer'|'removelayer'} EventType\n */\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nvar GroupEvent = /** @class */ (function (_super) {\n __extends(GroupEvent, _super);\n /**\n * @param {EventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n function GroupEvent(type, layer) {\n var _this = _super.call(this, type) || this;\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n _this.layer = layer;\n return _this;\n }\n return GroupEvent;\n}(Event));\nexport { GroupEvent };\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|import(\"../Collection.js\").default} [layers] Child layers.\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 LAYERS: 'layers',\n};\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nvar LayerGroup = /** @class */ (function (_super) {\n __extends(LayerGroup, _super);\n /**\n * @param {Options} [opt_options] Layer options.\n */\n function LayerGroup(opt_options) {\n var _this = this;\n var options = opt_options || {};\n var baseOptions = /** @type {Options} */ (assign({}, options));\n delete baseOptions.layers;\n var layers = options.layers;\n _this = _super.call(this, baseOptions) || this;\n /***\n * @type {GroupOnSignature}\n */\n _this.on;\n /***\n * @type {GroupOnSignature}\n */\n _this.once;\n /***\n * @type {GroupOnSignature}\n */\n _this.un;\n /**\n * @private\n * @type {Array}\n */\n _this.layersListenerKeys_ = [];\n /**\n * @private\n * @type {Object>}\n */\n _this.listenerKeys_ = {};\n _this.addChangeListener(Property.LAYERS, _this.handleLayersChanged_);\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), { unique: true });\n }\n else {\n assert(typeof ( /** @type {?} */(layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n }\n }\n else {\n layers = new Collection(undefined, { unique: true });\n }\n _this.setLayers(layers);\n return _this;\n }\n /**\n * @private\n */\n LayerGroup.prototype.handleLayerChange_ = function () {\n this.changed();\n };\n /**\n * @private\n */\n LayerGroup.prototype.handleLayersChanged_ = function () {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n var layers = this.getLayers();\n this.layersListenerKeys_.push(listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this), listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this));\n for (var id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n var layersArray = layers.getArray();\n for (var i = 0, ii = layersArray.length; i < ii; i++) {\n var layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n };\n /**\n * @param {BaseLayer} layer The layer.\n */\n LayerGroup.prototype.registerLayerListeners_ = function (layer) {\n var listenerKeys = [\n listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n if (layer instanceof LayerGroup) {\n listenerKeys.push(listen(layer, 'addlayer', this.handleLayerGroupAdd_, this), listen(layer, 'removelayer', this.handleLayerGroupRemove_, this));\n }\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n };\n /**\n * @param {GroupEvent} event The layer group event.\n */\n LayerGroup.prototype.handleLayerGroupAdd_ = function (event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n };\n /**\n * @param {GroupEvent} event The layer group event.\n */\n LayerGroup.prototype.handleLayerGroupRemove_ = function (event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n };\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n LayerGroup.prototype.handleLayersAdd_ = function (collectionEvent) {\n var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n };\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n LayerGroup.prototype.handleLayersRemove_ = function (collectionEvent) {\n var layer = /** @type {import(\"./Base.js\").default} */ (collectionEvent.element);\n var key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n };\n /**\n * Returns the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!import(\"../Collection.js\").default} Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n LayerGroup.prototype.getLayers = function () {\n return /** @type {!import(\"../Collection.js\").default} */ (this.get(Property.LAYERS));\n };\n /**\n * Set the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!import(\"../Collection.js\").default} layers Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n LayerGroup.prototype.setLayers = function (layers) {\n var collection = this.getLayers();\n if (collection) {\n var currentLayers = collection.getArray();\n for (var i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n this.set(Property.LAYERS, layers);\n };\n /**\n * @param {Array} [opt_array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n LayerGroup.prototype.getLayersArray = function (opt_array) {\n var array = opt_array !== undefined ? opt_array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n };\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If opt_states is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [opt_states] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n LayerGroup.prototype.getLayerStatesArray = function (opt_states) {\n var states = opt_states !== undefined ? opt_states : [];\n var pos = states.length;\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n var ownLayerState = this.getLayerState();\n var defaultZIndex = ownLayerState.zIndex;\n if (!opt_states && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (var i = pos, ii = states.length; i < ii; i++) {\n var layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution);\n layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution);\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(layerState.extent, ownLayerState.extent);\n }\n else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n return states;\n };\n /**\n * @return {import(\"../source/State.js\").default} Source state.\n */\n LayerGroup.prototype.getSourceState = function () {\n return SourceState.READY;\n };\n return LayerGroup;\n}(BaseLayer));\nexport default LayerGroup;\n//# sourceMappingURL=Group.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/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/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","/**\n * @module ol/TileState\n */\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n//# sourceMappingURL=TileState.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 Layer from './layer/Layer.js';\nimport LayerGroup, { GroupEvent } from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, { getTilePriority } from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport { DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS } from './has.js';\nimport { TRUE } from './functions.js';\nimport { 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 { getUid } from './util.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 * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\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 * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {PluggableMap} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n var layers = layer.getLayers().getArray();\n for (var i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\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 /**\n * @private\n * @type {boolean}\n */\n _this.renderComplete_;\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.targetChangeHandlerKeys_ = 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 * @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 * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n PluggableMap.prototype.handleLayerAdd_ = function (event) {\n setLayerMapProperty(event.layer, this);\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 * Get all layers from all layer groups.\n * @return {Array} Layers.\n */\n PluggableMap.prototype.getAllLayers = function () {\n var layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n }\n else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\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: In maps with more than one layer, this method will typically return pixel data\n * representing the composed image of all layers visible at the given pixel – because layers\n * will generally share the same rendering context. To force layers to render separately, and\n * to get pixel data representing only one layer at a time, you can assign each layer a unique\n * `className` in its constructor.\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.renderComplete_) {\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 if (this.mapBrowserEventHandler_) {\n for (var i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(EventType.CONTEXTMENU, this.boundHandleBrowserEvent_);\n this.viewport_.removeEventListener(EventType.WHEEL, this.boundHandleBrowserEvent_);\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n var targetElement = this.getTargetElement();\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n }\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 defaultView = this.getOwnerDocument().defaultView;\n var keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.targetChangeHandlerKeys_ = [\n listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this),\n listen(defaultView, EventType.RESIZE, this.updateSize, this),\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.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n };\n /**\n * @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 * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n PluggableMap.prototype.handleLayerRemove_ = function (event) {\n removeLayerMapProperty(event.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 mapId: getUid(this),\n renderTargets: {},\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 this.renderComplete_ =\n !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoading();\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 var oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\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","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","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","/**\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 var targetElement = event.map.getTargetElement();\n var activeElement = event.map.getOwnerDocument().activeElement;\n return targetElement.contains(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 * `