leaflet-city-mapper 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -36
- package/cucumber.mjs +9 -9
- package/dist/leaflet-city-mapper-src.js +16302 -0
- package/dist/leaflet-city-mapper-src.js.map +7 -0
- package/dist/leaflet-city-mapper-worker-src.js +955 -0
- package/dist/leaflet-city-mapper-worker-src.js.map +7 -0
- package/dist/leaflet-city-mapper-worker.js +2 -0
- package/dist/leaflet-city-mapper-worker.js.map +7 -0
- package/dist/leaflet-city-mapper.js +4 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +122 -0
- package/libs/leaflet.js +76 -0
- package/libs/openlayers-bindings.js +1128 -0
- package/libs/openlayers-bindings.min.js +99 -0
- package/libs/openlayers-bindings.min.js.map +7 -0
- package/package.json +6 -4
- package/src/animations/cancelCameraAnimation.js +17 -0
- package/src/animations/cancelGridFade.js +15 -0
- package/src/animations/endZoom.js +27 -0
- package/src/animations/mapAnimateCamera.js +26 -0
- package/src/animations/mapStopPitchBearingAnimation.js +6 -0
- package/src/animations/onZoomAnim.js +19 -0
- package/src/animations/renderPendingZoomAnimation.js +13 -0
- package/src/animations/runCameraAnimations.js +33 -0
- package/src/animations/runGridFades.js +20 -0
- package/src/animations/runMarkerPanFrame.js +14 -0
- package/src/animations/scheduleCameraAnimation.js +14 -0
- package/src/animations/scheduleGridFade.js +16 -0
- package/src/animations/scheduleMarkerPan.js +11 -0
- package/src/{scene → animations}/startZoom.js +5 -1
- package/src/animations/synchronizeZoomView.js +28 -0
- package/src/animations/updateZoomCamera.js +21 -0
- package/src/archives/decodeDirectory.js +44 -26
- package/src/archives/decodeHeader.js +15 -11
- package/src/archives/decompress.js +7 -2
- package/src/archives/findDirectoryEntry.js +9 -0
- package/src/archives/findTile.js +31 -0
- package/src/archives/getDirectoryEntries.js +19 -0
- package/src/archives/getHeader.js +12 -4
- package/src/archives/getTileData.js +13 -0
- package/src/archives/getZxy.js +10 -65
- package/src/archives/loadDirectory.js +3 -3
- package/src/archives/loadSource.js +25 -10
- package/src/archives/readArchiveRange.js +34 -0
- package/src/archives/readVarint.js +19 -0
- package/src/archives/tileId.js +7 -3
- package/src/astronomy/horizontalPosition.js +16 -0
- package/src/astronomy/moonPosition.js +18 -0
- package/src/astronomy/solarPosition.js +18 -0
- package/src/astronomy/solarTime.js +11 -0
- package/src/camera/cameraMapReady.js +5 -1
- package/src/camera/cleanupCameraMap.js +10 -5
- package/src/camera/createSceneCamera.js +21 -0
- package/src/camera/fitCameraBounds.js +36 -26
- package/src/camera/getBearing.js +5 -0
- package/src/camera/getPitch.js +5 -0
- package/src/camera/initializeCameraMap.js +10 -3
- package/src/camera/mapCamera.js +23 -43
- package/src/camera/mapContainerPointToLayerPoint.js +6 -4
- package/src/camera/mapGetBearing.js +5 -1
- package/src/camera/mapGetBounds.js +14 -8
- package/src/camera/mapGetBoundsCenterZoom.js +6 -3
- package/src/camera/mapGetBoundsZoom.js +19 -9
- package/src/camera/mapGetCenterLayerPoint.js +3 -2
- package/src/camera/mapGetPitch.js +5 -1
- package/src/camera/mapLayerPointToContainerPoint.js +5 -4
- package/src/camera/mapLimitCenter.js +13 -8
- package/src/camera/mapLimitOffset.js +7 -3
- package/src/camera/mapPanBy.js +5 -4
- package/src/camera/mapPanInside.js +17 -11
- package/src/camera/mapResetNorth.js +4 -1
- package/src/camera/mapResetNorthPitch.js +4 -1
- package/src/camera/mapSetBearing.js +3 -1
- package/src/camera/mapSetPitch.js +3 -1
- package/src/camera/mapSetPitchAndBearing.js +21 -11
- package/src/camera/mapSetZoomAround.js +12 -8
- package/src/camera/mapTryAnimatedPan.js +3 -2
- package/src/camera/mapUpdateCameraOverlays.js +3 -2
- package/src/camera/updateMapCamera.js +50 -0
- package/src/camera/updateSceneCamera.js +57 -0
- package/src/camera/updateSky.js +21 -14
- package/src/cog/decodeCogTile.js +24 -0
- package/src/cog/finiteCogValues.js +5 -0
- package/src/cog/getCogAssetEntry.js +15 -0
- package/src/cog/getCogBase.js +10 -0
- package/src/cog/getCogHeader.js +3 -0
- package/src/cog/getCogProfile.js +16 -0
- package/src/cog/getCogTile.js +12 -0
- package/src/cog/getColorTile.js +25 -0
- package/src/cog/getElevationTile.js +16 -0
- package/src/cog/hasCogProjection.js +9 -0
- package/src/cog/initCog.js +7 -0
- package/src/cog/invalidCogFullResponse.js +3 -0
- package/src/cog/openCog.js +30 -0
- package/src/cog/openCogAsset.js +14 -0
- package/src/cog/readCog.js +25 -0
- package/src/cog/readCogBlock.js +8 -0
- package/src/cog/readCogBody.js +20 -0
- package/src/cog/readCogDirectories.js +20 -0
- package/src/cog/readCogDirectory.js +21 -0
- package/src/cog/readCogLevel.js +27 -0
- package/src/cog/readCogTag.js +15 -0
- package/src/cog/validCogDimensions.js +6 -0
- package/src/cog/validCogEncoding.js +5 -0
- package/src/cog/validCogGeoArrays.js +8 -0
- package/src/cog/validCogGrid.js +9 -0
- package/src/cog/validCogTileCoordinates.js +4 -0
- package/src/cog/validateCogContainer.js +9 -0
- package/src/cog/validateCogContentRange.js +8 -0
- package/src/cog/validateCogOffsets.js +10 -0
- package/src/cog/validateCogRange.js +7 -0
- package/src/cog/validateCogResponse.js +15 -0
- package/src/collision/collider.js +31 -24
- package/src/collision/hiddenLightHit.js +8 -0
- package/src/collision/indexTriangle.js +11 -0
- package/src/collision/insideMesh.js +53 -0
- package/src/collision/insideWalker.js +46 -0
- package/src/collision/intersectMeshes.js +32 -133
- package/src/collision/localRay.js +21 -0
- package/src/collision/mergeHits.js +11 -0
- package/src/collision/rayBounds.js +19 -0
- package/src/collision/readTriangle.js +20 -0
- package/src/collision/sortHits.js +5 -11
- package/src/collision/trafficCollision.js +60 -0
- package/src/collision/transformTriangle.js +9 -0
- package/src/collision/triangleDistance.js +21 -0
- package/src/collision/worldHit.js +18 -0
- package/src/colors/formatRGB.js +8 -0
- package/src/colors/mixColor.js +7 -0
- package/src/{utils → colors}/parseColor.js +5 -5
- package/src/controls/addCameraHandler.js +11 -0
- package/src/controls/adjustCameraDrag.js +9 -3
- package/src/controls/cameraControls.js +56 -22
- package/src/controls/cameraDragClick.js +8 -7
- package/src/controls/cameraDragContextMenu.js +3 -2
- package/src/controls/cameraDragDown.js +21 -18
- package/src/controls/cameraDragEnd.js +3 -2
- package/src/controls/cameraDragMove.js +11 -6
- package/src/controls/changeCameraTouch.js +8 -2
- package/src/controls/cleanupCameraTouch.js +23 -16
- package/src/controls/compassAddHooks.js +13 -10
- package/src/controls/compassOrientation.js +2 -1
- package/src/controls/containerResizeAddHooks.js +3 -3
- package/src/controls/dragCamera.js +18 -14
- package/src/controls/endAllCameraDrags.js +4 -2
- package/src/controls/endAllCameraTouches.js +4 -2
- package/src/controls/endCameraTouch.js +3 -2
- package/src/controls/endCameraTouchEvent.js +5 -2
- package/src/controls/failCompassPermission.js +4 -0
- package/src/controls/finishCompassPermission.js +10 -9
- package/src/controls/loadCameraControls.js +2 -2
- package/src/controls/moveCameraTouch.js +18 -9
- package/src/controls/pitchDragAddHooks.js +3 -1
- package/src/controls/refreshRotateControl.js +9 -6
- package/src/controls/removeCameraDrag.js +7 -4
- package/src/controls/rotateButtonClick.js +8 -4
- package/src/controls/rotateButtonKeydown.js +8 -4
- package/src/controls/rotateControl.js +3 -2
- package/src/controls/rotateOnAdd.js +32 -28
- package/src/controls/shiftRotateAddHooks.js +6 -4
- package/src/controls/shiftRotateWheel.js +4 -2
- package/src/controls/startCameraTouch.js +34 -22
- package/src/core/adjustCameraMarkerPan.js +26 -20
- package/src/core/cameraCircleBounds.js +3 -2
- package/src/core/cameraMarkerDrag.js +16 -13
- package/src/core/cameraMarkerOnDrag.js +7 -2
- package/src/core/closestCameraLayerPoint.js +3 -2
- package/src/core/fireRasterLoad.js +3 -2
- package/src/core/gridlayerGetEvents.js +7 -4
- package/src/core/gridlayerGetTiledPixelBounds.js +8 -4
- package/src/core/initializeGridContainer.js +3 -2
- package/src/core/initializeNativeLayer.js +19 -20
- package/src/core/layerCallInitHooks.js +15 -0
- package/src/core/markerGetEvents.js +6 -2
- package/src/core/markerInitInteraction.js +4 -2
- package/src/core/markerSetIcon.js +6 -3
- package/src/core/markerSetPos.js +11 -6
- package/src/core/markerSetRotation.js +9 -7
- package/src/core/markerUpdateZIndex.js +10 -5
- package/src/core/popupAdjustPan.js +25 -19
- package/src/core/popupGetEvents.js +5 -2
- package/src/core/popupUpdatePosition.js +6 -3
- package/src/core/redrawPath.js +6 -0
- package/src/core/removeLayer.js +23 -0
- package/src/core/setRotation.js +5 -0
- package/src/core/tooltipGetEvents.js +5 -2
- package/src/core/tooltipSetPosition.js +6 -3
- package/src/core/updateGridOpacity.js +9 -5
- package/src/core/whenReady.js +11 -0
- package/src/geometry/addBridges.js +33 -87
- package/src/geometry/addGeneratedTriangle.js +7 -0
- package/src/{sources/addTriangle.js → geometry/appendAreaTriangle.js} +5 -5
- package/src/geometry/appendRouteDash.js +15 -0
- package/src/geometry/appendRouteSegment.js +15 -0
- package/src/geometry/assembleAreaGeometry.js +41 -0
- package/src/geometry/boundsQuad.js +12 -0
- package/src/geometry/box.js +6 -1
- package/src/geometry/bridgeEdge.js +11 -0
- package/src/geometry/bridgeElevation.js +3 -1
- package/src/geometry/bridgeFaces.js +15 -0
- package/src/geometry/bridgePaths.js +11 -0
- package/src/geometry/bridgePolygon.js +31 -0
- package/src/geometry/bridgeSides.js +11 -0
- package/src/geometry/buildExtrudedPolygon.js +10 -0
- package/src/geometry/{build.js → buildGeometryParts.js} +10 -6
- package/src/geometry/buildProjectedPoint.js +21 -0
- package/src/{sources/buildAreaPolygon.js → geometry/buildProjectedPolygon.js} +25 -29
- package/src/geometry/circleAt.js +4 -2
- package/src/geometry/circleGeometry.js +34 -0
- package/src/geometry/clipLine.js +1 -1
- package/src/geometry/clipSegment.js +11 -7
- package/src/geometry/computeBounds.js +28 -12
- package/src/geometry/conformModelToTerrain.js +25 -14
- package/src/geometry/createLampRing.js +14 -0
- package/src/geometry/createModelGeometry.js +41 -0
- package/src/geometry/createRasterQuadGeometry.js +29 -0
- package/src/geometry/createTreeRing.js +15 -0
- package/src/geometry/crossVector.js +7 -0
- package/src/geometry/dashValues.js +14 -0
- package/src/geometry/dashedSegment.js +16 -0
- package/src/geometry/disk.js +1 -1
- package/src/geometry/diskAt.js +4 -2
- package/src/geometry/emitter.js +2 -2
- package/src/{sources → geometry}/generateTreeGeometry.js +5 -3
- package/src/geometry/indexBridge.js +30 -0
- package/src/{sources → geometry}/instanceAreaGeometry.js +9 -7
- package/src/{traffic/along.js → geometry/interpolateRoute.js} +8 -2
- package/src/geometry/lampPostGeometry.js +14 -8
- package/src/geometry/lightGeometry.js +3 -3
- package/src/geometry/line.js +21 -54
- package/src/geometry/lineJoin.js +26 -0
- package/src/geometry/markerImageBounds.js +11 -0
- package/src/geometry/markerQuadCorners.js +51 -0
- package/src/geometry/meshShadowBounds.js +24 -0
- package/src/geometry/nativeGeometry.js +11 -45
- package/src/geometry/offsetBelowGround.js +3 -0
- package/src/geometry/polygon.js +5 -4
- package/src/geometry/quad.js +8 -3
- package/src/geometry/restoreGeometry.js +23 -0
- package/src/geometry/roofCoverage.js +26 -52
- package/src/geometry/roofFootprint.js +32 -0
- package/src/geometry/routeGeometry.js +21 -0
- package/src/geometry/segment.js +3 -2
- package/src/geometry/setVertexColor.js +3 -1
- package/src/geometry/shadowBounds.js +23 -0
- package/src/geometry/subtractRoofTile.js +19 -0
- package/src/geometry/subtractVector.js +6 -0
- package/src/geometry/surface.js +3 -2
- package/src/geometry/terrainBuffers.js +29 -0
- package/src/geometry/terrainGrid.js +32 -0
- package/src/geometry/terrainTileGeometry.js +19 -0
- package/src/geometry/treeGeometry.js +7 -8
- package/src/geometry/triangle.js +8 -7
- package/src/geometry/validateTree.js +7 -0
- package/src/geometry/vertexNormals.js +10 -16
- package/src/geometry/{visit.js → visitNativeCoordinates.js} +2 -1
- package/src/{constants → globals}/CELL.js +0 -1
- package/src/globals/Compass.js +1 -0
- package/src/globals/ContainerResize.js +1 -0
- package/src/{constants → globals}/HEIGHT.js +1 -1
- package/src/globals/L.js +1 -0
- package/src/globals/PitchDrag.js +1 -0
- package/src/globals/ShiftRotate.js +1 -0
- package/src/globals/TouchMode.js +1 -0
- package/src/globals/alphaBlend.js +12 -0
- package/src/globals/archiveDecoder.js +1 -0
- package/src/globals/archiveNorthWest.js +1 -0
- package/src/globals/archiveSouthEast.js +1 -0
- package/src/globals/atmosphereColor.js +1 -0
- package/src/globals/atmosphereStops.js +22 -0
- package/src/globals/blobParts.js +1 -0
- package/src/globals/cameraAngles.js +1 -0
- package/src/globals/cameraAnimatedOptions.js +3 -0
- package/src/globals/cameraAnimationFrame.js +1 -0
- package/src/globals/cameraAnimations.js +1 -0
- package/src/globals/cameraBearingSensitivity.js +1 -0
- package/src/globals/cameraDragSensitivity.js +1 -0
- package/src/globals/cameraDrags.js +1 -0
- package/src/globals/cameraEmptyOptions.js +1 -0
- package/src/globals/cameraFocusOptions.js +3 -0
- package/src/globals/cameraFov.js +3 -0
- package/src/globals/cameraListenerOptions.js +4 -0
- package/src/globals/cameraTouchStates.js +1 -0
- package/src/globals/cameraZeroPadding.js +1 -0
- package/src/globals/cogTags.js +1 -0
- package/src/globals/colorLayout.js +8 -0
- package/src/globals/coreEventTypes.js +4 -0
- package/src/globals/coreMatrixKeys.js +4 -0
- package/src/globals/coreQuadIndices.js +1 -0
- package/src/globals/coreQuadUV.js +1 -0
- package/src/globals/coreSampler.js +4 -0
- package/src/globals/coreWhite.js +1 -0
- package/src/globals/cosObliquity.js +3 -0
- package/src/globals/coverageTiles.js +1 -0
- package/src/globals/defaultMaterial.js +1 -0
- package/src/globals/degrees.js +1 -0
- package/src/globals/demBuffer.js +4 -0
- package/src/globals/demLayout.js +3 -0
- package/src/globals/demSize.js +1 -0
- package/src/globals/demTarget.js +3 -0
- package/src/globals/demTexture.js +5 -0
- package/src/globals/depthBindGroup.js +9 -0
- package/src/globals/depthTexture.js +5 -0
- package/src/globals/directoryReader.js +4 -0
- package/src/globals/disabledShadow.js +1 -0
- package/src/globals/drawEntries.js +1 -0
- package/src/globals/drawFrameEntry.js +7 -0
- package/src/globals/drawMeshEntry.js +7 -0
- package/src/globals/drawSamplerEntries.js +18 -0
- package/src/globals/drawTerrainEntry.js +4 -0
- package/src/globals/drawTextureEntries.js +18 -0
- package/src/globals/earthCirc.js +1 -0
- package/src/{constants → globals}/elevationWGSL.js +1 -1
- package/src/globals/fragmentShader.js +3 -0
- package/src/globals/frameBuffer.js +4 -0
- package/src/globals/frameCommands.js +1 -0
- package/src/globals/frameLayoutEntry.js +7 -0
- package/src/globals/geometryDecoder.js +1 -0
- package/src/globals/geometryEmpty.js +1 -0
- package/src/globals/geometryImageOptions.js +4 -0
- package/src/globals/geometryPixelStates.js +1 -0
- package/src/globals/geometryQuaternion.js +1 -0
- package/src/globals/geometryScale.js +1 -0
- package/src/globals/geometrySemantics.js +5 -0
- package/src/globals/geometryTranslation.js +1 -0
- package/src/globals/geometryWorkerUrl.js +3 -0
- package/src/globals/gridEvents.js +1 -0
- package/src/globals/gridFadeFrame.js +1 -0
- package/src/globals/halfRadians.js +1 -0
- package/src/globals/headerBounds.js +1 -0
- package/src/globals/headerFlags.js +1 -0
- package/src/globals/headerOffsets.js +5 -0
- package/src/globals/hull.js +10 -0
- package/src/globals/instanceLayout.js +9 -0
- package/src/globals/lampDirections.js +8 -0
- package/src/globals/layerCallInitHooks.js +1 -0
- package/src/globals/layerProto.js +1 -0
- package/src/globals/lightScale.js +1 -0
- package/src/{constants → globals}/limbs.js +0 -1
- package/src/globals/loading.js +1 -0
- package/src/globals/mapMethods.js +1 -0
- package/src/globals/markerMethods.js +1 -0
- package/src/globals/markerPanFrame.js +1 -0
- package/src/globals/meshBindGroup.js +4 -0
- package/src/globals/meshBuffer.js +4 -0
- package/src/globals/meshCopySize.js +1 -0
- package/src/globals/meshImage.js +4 -0
- package/src/globals/meshLayoutEntry.js +8 -0
- package/src/globals/meshOffsets.js +1 -0
- package/src/globals/meshPipeline.js +27 -0
- package/src/globals/meshStack.js +3 -0
- package/src/globals/meshTarget.js +3 -0
- package/src/globals/nativeMethodHandlers.js +31 -0
- package/src/globals/nextId.js +1 -0
- package/src/globals/normalLayout.js +8 -0
- package/src/globals/parts.js +24 -0
- package/src/globals/pendingGridFades.js +1 -0
- package/src/globals/pendingInitializations.js +1 -0
- package/src/globals/pendingMapChanges.js +1 -0
- package/src/globals/pendingMarkerPan.js +1 -0
- package/src/globals/pendingPlacements.js +1 -0
- package/src/globals/pendingRasterLoads.js +1 -0
- package/src/globals/pendingZoomAnimations.js +1 -0
- package/src/globals/pipelineLayout.js +3 -0
- package/src/globals/popupEvents.js +1 -0
- package/src/globals/popupPan.js +1 -0
- package/src/globals/popupPosition.js +1 -0
- package/src/globals/positionLayout.js +8 -0
- package/src/globals/programEntries.js +1 -0
- package/src/globals/programLayout.js +3 -0
- package/src/globals/radians.js +1 -0
- package/src/globals/rasterBuffer.js +4 -0
- package/src/globals/rasterIndices.js +1 -0
- package/src/globals/rasterNormals.js +1 -0
- package/src/globals/rasterPoint.js +4 -0
- package/src/globals/rasterPositions.js +1 -0
- package/src/globals/rasterSampler.js +6 -0
- package/src/globals/rasterTexture.js +5 -0
- package/src/globals/rasterUVs.js +1 -0
- package/src/globals/removeLayer.js +1 -0
- package/src/globals/renderEmpty.js +1 -0
- package/src/globals/ringDirections.js +49 -0
- package/src/globals/roofBindGroup.js +17 -0
- package/src/globals/roofBlitSampler.js +4 -0
- package/src/globals/roofBuffer.js +4 -0
- package/src/globals/roofCommands.js +1 -0
- package/src/globals/roofCopySize.js +1 -0
- package/src/globals/roofImage.js +3 -0
- package/src/globals/roofMin.js +4 -0
- package/src/globals/roofOpacities.js +1 -0
- package/src/globals/roofPass.js +13 -0
- package/src/globals/roofPipeline.js +29 -0
- package/src/globals/roofSampler.js +4 -0
- package/src/globals/roofShader.js +16 -0
- package/src/globals/roofSignatures.js +1 -0
- package/src/globals/roofSize.js +4 -0
- package/src/globals/roofTarget.js +3 -0
- package/src/globals/roofTexture.js +5 -0
- package/src/globals/roofTiles.js +1 -0
- package/src/globals/roundProfile.js +7 -0
- package/src/globals/samplerLayoutEntries.js +36 -0
- package/src/globals/sceneCleanupFields.js +1 -0
- package/src/globals/sceneEmptyOptions.js +1 -0
- package/src/globals/scenePass.js +19 -0
- package/src/globals/sceneSunlightUniforms.js +3 -0
- package/src/globals/sceneTransferFields.js +1 -0
- package/src/globals/sceneWalkHandlers.js +1 -0
- package/src/globals/shadowBindGroup.js +10 -0
- package/src/globals/shadowBounds.js +4 -0
- package/src/globals/shadowCamera.js +15 -0
- package/src/globals/shadowDepthLayout.js +9 -0
- package/src/globals/shadowHigh.js +1 -0
- package/src/globals/shadowInstanceLayouts.js +4 -0
- package/src/globals/shadowLayouts.js +3 -0
- package/src/globals/shadowLow.js +1 -0
- package/src/globals/shadowMeshLayout.js +10 -0
- package/src/globals/shadowOffsets.js +1 -0
- package/src/globals/shadowPass.js +9 -0
- package/src/globals/shadowPipeline.js +24 -0
- package/src/globals/shadowPipelineLayout.js +3 -0
- package/src/globals/shadowShader.js +3 -0
- package/src/globals/shadowTexture.js +5 -0
- package/src/globals/shadowValues.js +1 -0
- package/src/globals/sinObliquity.js +3 -0
- package/src/globals/sizes.js +6 -0
- package/src/globals/sunBindGroup.js +20 -0
- package/src/globals/tau.js +1 -0
- package/src/globals/terrainLayoutEntry.js +8 -0
- package/src/globals/textureLayoutEntries.js +41 -0
- package/src/globals/tiledBounds.js +1 -0
- package/src/globals/tooltipEvents.js +1 -0
- package/src/globals/tooltipPosition.js +1 -0
- package/src/globals/trafficClocks.js +1 -0
- package/src/globals/trafficEmptyList.js +1 -0
- package/src/globals/trafficEmptyOptions.js +1 -0
- package/src/globals/trafficRouteMaterial.js +1 -0
- package/src/{constants → globals}/trafficShader.js +49 -49
- package/src/globals/triangleContexts.js +1 -0
- package/src/globals/uVLayout.js +8 -0
- package/src/{constants → globals}/vehicles.js +24 -9
- package/src/globals/vertexShader.js +3 -0
- package/src/globals/wantedTiles.js +1 -0
- package/src/gpu/initializeRendererResources.js +36 -0
- package/src/gpu/initializeSharedRenderer.js +52 -0
- package/src/gpu/mountRenderer.js +26 -0
- package/src/{scene → gpu}/releaseRenderer.js +2 -2
- package/src/gpu/rendererDeviceError.js +16 -0
- package/src/gpu/rendererDeviceLost.js +16 -0
- package/src/gpu/reportShaderCompilation.js +17 -0
- package/src/gpu/requestAdapter.js +12 -0
- package/src/gpu/requestDevice.js +9 -0
- package/src/index.js +34 -37
- package/src/layer-controls/layerCountTitle.js +6 -0
- package/src/{scene → layer-controls}/placeEntry.js +3 -1
- package/src/layer-controls/placeEntryElement.js +22 -0
- package/src/{scene → layer-controls}/removeEntry.js +2 -0
- package/src/layer-controls/renderLayerCount.js +20 -0
- package/src/{scene → layer-controls}/replaceEntry.js +4 -2
- package/src/{scene → layer-controls}/runPlacements.js +4 -2
- package/src/{scene → layer-controls}/underEntry.js +2 -3
- package/src/layer-controls/updateLayerCount.js +24 -0
- package/src/lighting/cacheLightGrid.js +14 -5
- package/src/lighting/collectLightMeshes.js +4 -1
- package/src/lighting/lightGrid.js +10 -9
- package/src/lighting/updatePointLights.js +19 -12
- package/src/lighting/visitLightCells.js +13 -0
- package/src/lighting/visitLightGridCells.js +8 -0
- package/src/lighting/worldLights.js +10 -12
- package/src/lighting/writeLightCell.js +5 -0
- package/src/materials/createProgram.js +76 -0
- package/src/materials/createProgramLayout.js +36 -0
- package/src/materials/createProgramUniforms.js +17 -0
- package/src/materials/modelMaterialFor.js +21 -0
- package/src/materials/prepareMeshCutout.js +12 -0
- package/src/materials/terrainRasterProgram.js +58 -0
- package/src/materials/validateRoofMaterial.js +10 -0
- package/src/models/applyModelTransform.js +14 -0
- package/src/models/buildModelNodes.js +14 -0
- package/src/models/createModelContext.js +15 -0
- package/src/models/decodeModel.js +9 -6
- package/src/models/loadBuffer.js +2 -2
- package/src/models/loadModel.js +31 -51
- package/src/models/loadModelResources.js +20 -0
- package/src/models/modelNode.js +26 -71
- package/src/models/normalizeAccessor.js +11 -0
- package/src/models/readAccessor.js +11 -31
- package/src/models/readAccessorValue.js +7 -0
- package/src/models/readAccessorValues.js +10 -6
- package/src/models/readModelAttributes.js +20 -0
- package/src/models/readModelIndices.js +16 -0
- package/src/models/readSparseAccessor.js +19 -0
- package/src/models/releaseModelResources.js +10 -0
- package/src/{core → native}/beforeNativeRender.js +1 -1
- package/src/native/bypassNativeEvent.js +11 -0
- package/src/{core → native}/disposeNativeLayer.js +14 -10
- package/src/native/forwardNativeError.js +3 -0
- package/src/native/handleNativeMapEvent.js +28 -0
- package/src/{core → native}/hideTargets.js +6 -4
- package/src/{core → native}/initNativeGPU.js +14 -7
- package/src/native/isCurrentNativeLayer.js +7 -0
- package/src/native/nativeEventSource.js +18 -0
- package/src/{core → native}/nativeEvents.js +8 -3
- package/src/native/nativeLayer.js +79 -0
- package/src/{core → native}/nativeLayerMethod.js +17 -3
- package/src/native/pruneNativeResources.js +20 -0
- package/src/{core → native}/putNativeMesh.js +12 -9
- package/src/native/quadNativeMesh.js +20 -0
- package/src/native/readyNativeGPU.js +10 -0
- package/src/native/refreshNativeLayer.js +35 -0
- package/src/native/refreshNativeLayerContract.js +9 -0
- package/src/{core → native}/rejectNativeReady.js +1 -0
- package/src/{core → native}/removeNativeEvents.js +2 -1
- package/src/native/removeTargets.js +13 -0
- package/src/native/reorderNativeLayer.js +17 -0
- package/src/{core → native}/resolveNativeReady.js +1 -0
- package/src/{core → native}/styleNativeMesh.js +6 -1
- package/src/{core → native}/syncGridLayer.js +11 -4
- package/src/{core → native}/syncImageOverlay.js +1 -1
- package/src/{core → native}/syncMarker.js +5 -3
- package/src/native/syncVectorLayer.js +29 -0
- package/src/{core → native}/synchronizeNativeLayer.js +10 -18
- package/src/native/updateNativeHover.js +7 -0
- package/src/native/updateNativeLayerView.js +10 -0
- package/src/picking/findFeature.js +17 -10
- package/src/picking/hit.js +23 -14
- package/src/picking/hitColliderCell.js +19 -0
- package/src/picking/hitMesh.js +12 -16
- package/src/picking/onClick.js +6 -2
- package/src/picking/onPointerLeave.js +6 -2
- package/src/picking/onPointerMove.js +15 -6
- package/src/picking/raycast.js +50 -38
- package/src/picking/setHighlight.js +16 -8
- package/src/picking/shouldSkipOther.js +5 -1
- package/src/picking/showFeature.js +21 -13
- package/src/picking/validateCameraInverse.js +8 -0
- package/src/projections/cameraAngles.js +14 -0
- package/src/projections/groundBounds.js +18 -0
- package/src/projections/localPixelForGeometry.js +7 -0
- package/src/projections/localPosition.js +11 -0
- package/src/projections/markerCameraIconPoint.js +12 -0
- package/src/projections/projectBridgePoint.js +5 -0
- package/src/projections/projectCameraPoint.js +27 -0
- package/src/projections/projectCelestialBody.js +13 -0
- package/src/projections/projectRing.js +26 -0
- package/src/projections/projectTreePoint.js +17 -0
- package/src/projections/toPoint.js +5 -0
- package/src/{camera/animationPoint.js → projections/transformZoomAnimationPoint.js} +5 -1
- package/src/projections/walkerLocalPosition.js +18 -0
- package/src/raster/addRasterTile.js +55 -90
- package/src/raster/comparePendingTiles.js +2 -2
- package/src/raster/createRasterMesh.js +78 -44
- package/src/raster/finishRasterAttachment.js +17 -0
- package/src/raster/finishRasterTile.js +58 -41
- package/src/raster/getRasterEvents.js +3 -3
- package/src/raster/getRasterTileSize.js +5 -3
- package/src/raster/initRaster.js +28 -24
- package/src/raster/isRasterLoading.js +8 -0
- package/src/raster/loadRasterTile.js +11 -7
- package/src/raster/onPMTileAdd.js +11 -7
- package/src/raster/onPMTileRemove.js +8 -4
- package/src/raster/pruneRasterTiles.js +23 -14
- package/src/raster/pumpRasterTiles.js +14 -8
- package/src/raster/rasterTileRange.js +23 -0
- package/src/raster/readyRaster.js +14 -10
- package/src/raster/registerTerrainTile.js +14 -9
- package/src/raster/releaseRasterTile.js +20 -14
- package/src/raster/releaseRasterTiles.js +15 -9
- package/src/raster/removeRasterTile.js +10 -5
- package/src/raster/{reportError.js → reportRasterError.js} +3 -3
- package/src/raster/retainRasterTiles.js +16 -0
- package/src/raster/setPMTileOpacity.js +4 -4
- package/src/raster/setPMTileZIndex.js +4 -4
- package/src/raster/setRasterOpacity.js +10 -5
- package/src/raster/setRasterTerrain.js +15 -8
- package/src/raster/setRasterZIndex.js +10 -5
- package/src/raster/updateAttachedTiles.js +8 -4
- package/src/raster/updateRasterTiles.js +40 -43
- package/src/rendering/collectFrameMeshes.js +26 -12
- package/src/rendering/collectMeshes.js +2 -24
- package/src/rendering/collectVisibleMesh.js +36 -0
- package/src/rendering/compareMeshDepth.js +6 -0
- package/src/rendering/compareMeshes.js +8 -10
- package/src/rendering/createMesh.js +28 -15
- package/src/rendering/disposeMesh.js +3 -3
- package/src/rendering/drawGeometry.js +22 -108
- package/src/rendering/drawPipeline.js +34 -0
- package/src/rendering/drawSceneMeshes.js +20 -21
- package/src/rendering/prepareFrameBuffer.js +18 -0
- package/src/rendering/prepareFrameMeshes.js +12 -14
- package/src/rendering/prepareFrameUniforms.js +12 -14
- package/src/rendering/prepareMeshUniforms.js +25 -0
- package/src/rendering/render.js +50 -31
- package/src/rendering/resizeRenderer.js +23 -16
- package/src/rendering/revealRoofMesh.js +34 -0
- package/src/scene/addRegisteredLayer.js +47 -0
- package/src/scene/addSceneLayer.js +18 -0
- package/src/scene/attachLayer.js +9 -5
- package/src/scene/attachSharedScene.js +69 -0
- package/src/scene/callLayer.js +28 -0
- package/src/scene/cancelUpdate.js +9 -5
- package/src/scene/createLayer.js +7 -0
- package/src/scene/createSceneNode.js +12 -0
- package/src/scene/emptyEvents.js +1 -1
- package/src/scene/failAttachment.js +9 -5
- package/src/scene/get3DEvents.js +14 -9
- package/src/scene/getLocation.js +8 -0
- package/src/scene/init3D.js +40 -25
- package/src/scene/initializeLayer.js +13 -5
- package/src/scene/initializerFor.js +3 -1
- package/src/scene/isNativeLayer.js +13 -0
- package/src/scene/layerInitialize.js +29 -14
- package/src/scene/onAdd3DLayer.js +33 -23
- package/src/scene/onMapChange.js +10 -7
- package/src/scene/onRemove3DLayer.js +61 -49
- package/src/scene/ready3D.js +40 -21
- package/src/scene/releaseSharedScene.js +31 -0
- package/src/scene/removeLayerEvents.js +12 -0
- package/src/scene/removeSceneLayer.js +16 -0
- package/src/scene/renderPendingMapChange.js +12 -5
- package/src/scene/renderPendingUpdates.js +14 -7
- package/src/scene/reportLayerError.js +3 -0
- package/src/scene/resolveNextInitialization.js +7 -6
- package/src/scene/restoreObject.js +26 -60
- package/src/scene/scheduleSceneUpdate.js +25 -0
- package/src/shaders/materialBaseShader.js +17 -0
- package/src/shaders/materialShaders.js +15 -131
- package/src/shaders/materialSurfaceShader.js +47 -0
- package/src/shaders/materialVertexShader.js +72 -0
- package/src/shaders/roofVertexShader.js +9 -0
- package/src/shadows/bindSunlight.js +19 -9
- package/src/shadows/drawShadowMeshes.js +26 -15
- package/src/shadows/ensureShadowPipeline.js +46 -35
- package/src/shadows/renderSunlight.js +14 -11
- package/src/shadows/resizeSunlight.js +17 -10
- package/src/shadows/shadowCacheMatches.js +3 -9
- package/src/shadows/shadowMatrix.js +38 -28
- package/src/shadows/shadowMeshMatches.js +11 -0
- package/src/sources/attachAreaMesh.js +44 -33
- package/src/sources/buildArea.js +25 -13
- package/src/sources/buildAreaFeature.js +24 -20
- package/src/sources/buildAreaPoint.js +3 -21
- package/src/sources/compareAreaDistance.js +1 -2
- package/src/sources/extrusionStyle.js +10 -0
- package/src/sources/featureAnchor.js +9 -0
- package/src/sources/initializeGeoJSON.js +5 -2
- package/src/sources/pendingSourceAreas.js +21 -0
- package/src/sources/prepareAreaGeometryJob.js +33 -0
- package/src/sources/pumpSourceAreas.js +37 -0
- package/src/sources/releaseArea.js +12 -7
- package/src/sources/setGeoJSONData.js +6 -2
- package/src/sources/sourceAreaContext.js +19 -8
- package/src/sources/updateArea.js +36 -25
- package/src/sources/updateSourceStatus.js +16 -0
- package/src/sunlight/{addTo.js → addTimeControlToMap.js} +2 -1
- package/src/sunlight/addTimeLayer.js +5 -1
- package/src/sunlight/atmosphere.js +9 -12
- package/src/sunlight/createSun.js +54 -0
- package/src/sunlight/initSunlight.js +8 -5
- package/src/sunlight/initializeTimeControl.js +16 -0
- package/src/sunlight/onAddSun.js +27 -65
- package/src/sunlight/onRemoveSun.js +10 -0
- package/src/sunlight/removeSun.js +12 -4
- package/src/sunlight/{remove.js → removeTimeControl.js} +1 -0
- package/src/sunlight/removeTimeLayer.js +6 -1
- package/src/sunlight/requestSunlightRender.js +9 -0
- package/src/sunlight/styleTimeControl.js +3 -3
- package/src/sunlight/updateCelestialDisc.js +12 -0
- package/src/sunlight/updateSky.js +14 -15
- package/src/sunlight/updateSun.js +15 -7
- package/src/sunlight/useSelectedTime.js +9 -5
- package/src/terrain/applyTerrain.js +24 -0
- package/src/terrain/clearLayerTerrain.js +9 -5
- package/src/terrain/copyTerrainTile.js +12 -0
- package/src/terrain/getElevation.js +12 -4
- package/src/terrain/initTerrain.js +17 -9
- package/src/terrain/loadTerrain.js +37 -48
- package/src/terrain/loadTerrainTiles.js +9 -4
- package/src/terrain/mapElevationOf.js +7 -0
- package/src/terrain/onTerrainAdd.js +17 -9
- package/src/terrain/onTerrainChange.js +6 -2
- package/src/terrain/onTerrainRemove.js +37 -19
- package/src/terrain/readBridges.js +1 -1
- package/src/terrain/readyTerrainOf.js +7 -0
- package/src/terrain/setLayerTerrain.js +9 -5
- package/src/terrain/setTerrainHeight.js +19 -10
- package/src/terrain/terrainAtlas.js +7 -13
- package/src/terrain/terrainElevation.js +6 -11
- package/src/terrain/terrainTileQueue.js +27 -0
- package/src/textures/addImageState.js +8 -0
- package/src/{core/addRasterImage.js → textures/attachRasterImage.js} +5 -3
- package/src/textures/bindMeshTextures.js +50 -0
- package/src/textures/collectRoofTiles.js +16 -0
- package/src/{rendering → textures}/compareRoofTiles.js +4 -4
- package/src/textures/composeRoofAtlas.js +71 -0
- package/src/textures/destroyTexture.js +10 -0
- package/src/{rendering/destroyAfterSubmission.js → textures/destroyTextureAfterSubmission.js} +8 -8
- package/src/textures/ensureRoofBlit.js +20 -0
- package/src/textures/loadModelImage.js +19 -0
- package/src/{models/textureFor.js → textures/modelTextureFor.js} +12 -8
- package/src/textures/modelTextureSampler.js +10 -0
- package/src/textures/nativeImageError.js +13 -0
- package/src/textures/nativeImageRefresh.js +11 -0
- package/src/{core/textureFor.js → textures/nativeTextureFor.js} +43 -44
- package/src/textures/prepareMeshTextures.js +23 -0
- package/src/textures/rebuildRoofAtlas.js +55 -0
- package/src/textures/removeImageState.js +9 -0
- package/src/textures/resizeRoofTexture.js +25 -0
- package/src/textures/restoreMaterialTextures.js +16 -0
- package/src/{rendering → textures}/textureBinding.js +7 -7
- package/src/textures/updateRoofAtlas.js +23 -0
- package/src/textures/updateRoofRaster.js +29 -0
- package/src/{core → textures}/uploadCanvasTexture.js +20 -17
- package/src/textures/uploadMeshTexture.js +26 -0
- package/src/textures/uploadNativeImage.js +13 -0
- package/src/textures/uploadRoofTile.js +23 -0
- package/src/traffic/addTraffic.js +6 -3
- package/src/traffic/destroyTrafficGpu.js +4 -2
- package/src/traffic/disposeTrafficObject.js +7 -2
- package/src/traffic/drawTrafficRoute.js +6 -3
- package/src/traffic/failTraffic.js +2 -2
- package/src/traffic/featuresToTrafficLanes.js +24 -0
- package/src/traffic/fetchTrafficLanes.js +4 -4
- package/src/traffic/groundTraffic.js +7 -3
- package/src/traffic/initTraffic.js +60 -48
- package/src/traffic/loadTraffic.js +9 -9
- package/src/traffic/loadedTrafficLanes.js +1 -1
- package/src/traffic/locateTraffic.js +8 -6
- package/src/traffic/moveTraffic.js +2 -2
- package/src/traffic/placeTraffic.js +2 -1
- package/src/traffic/prepareTraffic.js +12 -6
- package/src/traffic/rebaseTraffic.js +33 -30
- package/src/traffic/rebuildTrafficMesh.js +10 -6
- package/src/traffic/refreshTrafficTrips.js +32 -0
- package/src/traffic/removeTraffic.js +16 -13
- package/src/traffic/routeColor.js +3 -3
- package/src/traffic/scheduledTrips.js +22 -11
- package/src/traffic/startTraffic.js +1 -1
- package/src/traffic/tickTraffic.js +11 -41
- package/src/traffic/trafficBounds.js +6 -2
- package/src/traffic/trafficNow.js +10 -3
- package/src/traffic/trafficStatusText.js +5 -0
- package/src/traffic/trafficStorage.js +2 -2
- package/src/traffic/trafficTooltip.js +9 -0
- package/src/traffic/tripsAt.js +4 -4
- package/src/traffic/updateTraffic.js +5 -1
- package/src/traffic/updateTrafficLights.js +18 -0
- package/src/traffic/updateTrafficPose.js +8 -0
- package/src/traffic/uploadTrafficLanes.js +21 -0
- package/src/traffic/vehicleOffsets.js +3 -2
- package/src/transforms/composeLocalTransform.js +16 -0
- package/src/{models/nodeMatrix.js → transforms/modelNodeMatrix.js} +8 -3
- package/src/transforms/transformNativePoint.js +7 -0
- package/src/transforms/updateWorldMatrix.js +43 -0
- package/src/transforms/worldMatrixChanged.js +18 -0
- package/src/triangulation/clean.js +1 -1
- package/src/triangulation/clipEars.js +23 -0
- package/src/triangulation/connectHole.js +18 -0
- package/src/triangulation/mergeHoles.js +11 -0
- package/src/triangulation/minimumX.js +3 -3
- package/src/triangulation/polygonRings.js +14 -0
- package/src/triangulation/sortHoles.js +7 -12
- package/src/triangulation/triangulate.js +18 -56
- package/src/triangulation/validateArea.js +10 -0
- package/src/vehicles/bicycleModel.js +21 -20
- package/src/vehicles/boatBenches.js +4 -3
- package/src/vehicles/boatModel.js +26 -18
- package/src/vehicles/buildCarriage.js +20 -0
- package/src/vehicles/busModel.js +1 -1
- package/src/vehicles/carModel.js +27 -11
- package/src/vehicles/metroModel.js +2 -2
- package/src/vehicles/mirrorVehiclePart.js +8 -0
- package/src/vehicles/pedestrianModel.js +15 -14
- package/src/vehicles/tramModel.js +2 -2
- package/src/walk/animateWalker.js +52 -0
- package/src/walk/createWalk.js +70 -60
- package/src/walk/initWalk.js +5 -4
- package/src/walk/{initialize.js → initializeWalkControl.js} +1 -0
- package/src/walk/{blocked.js → isWalkBlocked.js} +4 -4
- package/src/walk/landWalker.js +38 -0
- package/src/walk/moveWalker.js +24 -0
- package/src/walk/onAddWalkControl.js +31 -0
- package/src/walk/onRemoveWalkControl.js +12 -0
- package/src/walk/{onKey.js → onWalkKey.js} +13 -10
- package/src/walk/onWalkPointer.js +18 -0
- package/src/walk/{onTerrain.js → onWalkTerrain.js} +1 -1
- package/src/walk/{place.js → placeWalker.js} +6 -4
- package/src/walk/resolveWalkerPosition.js +28 -0
- package/src/walk/startWalking.js +49 -0
- package/src/walk/stepWalkerHeight.js +11 -0
- package/src/walk/{stop.js → stopWalking.js} +11 -8
- package/src/walk/{toggle.js → toggleWalking.js} +2 -2
- package/src/walk/updateWalkerView.js +22 -0
- package/src/weakmaps/addedByLayer.js +1 -0
- package/src/weakmaps/archiveHeaderByLayer.js +1 -0
- package/src/weakmaps/areasByLayer.js +1 -0
- package/src/weakmaps/boundsMethods.js +1 -0
- package/src/weakmaps/bridgeMeshByLayer.js +1 -0
- package/src/weakmaps/bridgesByLayer.js +1 -0
- package/src/weakmaps/cameraAnimationByMap.js +1 -0
- package/src/weakmaps/cameraBearingByMap.js +1 -0
- package/src/weakmaps/cameraByLayer.js +1 -0
- package/src/weakmaps/cameraDraggableByMap.js +1 -0
- package/src/weakmaps/cameraFields.js +37 -0
- package/src/weakmaps/cameraFrameByMap.js +1 -0
- package/src/weakmaps/cameraHandlersByMap.js +1 -0
- package/src/weakmaps/cameraMaps.js +1 -0
- package/src/weakmaps/cameraPitchByMap.js +1 -0
- package/src/weakmaps/cameraReadyByMap.js +1 -0
- package/src/weakmaps/cameraTouchStateByMap.js +1 -0
- package/src/weakmaps/cameraViewByMap.js +1 -0
- package/src/weakmaps/cameraZIndexOffsetByLayer.js +1 -0
- package/src/weakmaps/closestMethods.js +1 -0
- package/src/{constants → weakmaps}/colliders.js +0 -1
- package/src/weakmaps/containerByLayer.js +1 -0
- package/src/weakmaps/controlByLayer.js +1 -0
- package/src/weakmaps/countStatusByLayer.js +1 -0
- package/src/weakmaps/cursorByLayer.js +1 -0
- package/src/weakmaps/demByLayer.js +1 -0
- package/src/weakmaps/directoriesByLayer.js +1 -0
- package/src/weakmaps/dragByHandler.js +1 -0
- package/src/weakmaps/dragStates.js +1 -0
- package/src/weakmaps/etagByLayer.js +1 -0
- package/src/weakmaps/eventMapByLayer.js +1 -0
- package/src/weakmaps/eventsByLayer.js +1 -0
- package/src/weakmaps/fadeFrameByLayer.js +1 -0
- package/src/weakmaps/fadeVersionByLayer.js +1 -0
- package/src/weakmaps/frameByLayer.js +1 -0
- package/src/weakmaps/geojsonByLayer.js +1 -0
- package/src/weakmaps/geometryWorkersByMap.js +1 -0
- package/src/weakmaps/gridInitializers.js +1 -0
- package/src/weakmaps/groupByLayer.js +1 -0
- package/src/weakmaps/headerByLayer.js +1 -0
- package/src/weakmaps/highlightedFeatureByLayer.js +1 -0
- package/src/weakmaps/hoveredFeatureByLayer.js +1 -0
- package/src/weakmaps/imageStates.js +1 -0
- package/src/weakmaps/inflightByLayer.js +1 -0
- package/src/weakmaps/kindByLayer.js +1 -0
- package/src/weakmaps/layersByLayer.js +1 -0
- package/src/weakmaps/loadingTilesByLayer.js +1 -0
- package/src/weakmaps/locationByLayer.js +1 -0
- package/src/weakmaps/modelByLayer.js +1 -0
- package/src/weakmaps/modelUrlByLayer.js +1 -0
- package/src/weakmaps/nativeGPUBackByMap.js +1 -0
- package/src/weakmaps/nativeGPUByLayer.js +1 -0
- package/src/weakmaps/nativeGPUOrderByMap.js +1 -0
- package/src/weakmaps/nativeRenderByLayer.js +1 -0
- package/src/weakmaps/pitchSkyByMap.js +1 -0
- package/src/weakmaps/pointerEventsByLayer.js +1 -0
- package/src/weakmaps/pruneAfterByLayer.js +1 -0
- package/src/weakmaps/pruneVersionByLayer.js +1 -0
- package/src/weakmaps/pruneWantedByLayer.js +1 -0
- package/src/weakmaps/queuedByLayer.js +1 -0
- package/src/weakmaps/rasterGeometryByLayer.js +1 -0
- package/src/weakmaps/rasterProgramByLayer.js +1 -0
- package/src/weakmaps/rasterTilesByLayer.js +1 -0
- package/src/weakmaps/rasterVersionByLayer.js +1 -0
- package/src/weakmaps/raycasterByLayer.js +1 -0
- package/src/weakmaps/readyByLayer.js +1 -0
- package/src/weakmaps/rendererByLayer.js +1 -0
- package/src/weakmaps/rendererDevices.js +1 -0
- package/src/weakmaps/rendererReadyByLayer.js +1 -0
- package/src/weakmaps/roofRasterByLayer.js +1 -0
- package/src/weakmaps/roofRastersByLayer.js +1 -0
- package/src/weakmaps/rootByLayer.js +1 -0
- package/src/weakmaps/rotateControlByMap.js +1 -0
- package/src/weakmaps/sceneByLayer.js +1 -0
- package/src/weakmaps/sceneFields.js +159 -0
- package/src/weakmaps/sceneLayers.js +1 -0
- package/src/weakmaps/sceneOriginByLayer.js +1 -0
- package/src/weakmaps/shadowMeshesByLayer.js +1 -0
- package/src/weakmaps/sharedByLayer.js +1 -0
- package/src/weakmaps/sizeByLayer.js +1 -0
- package/src/weakmaps/state3dByLayer.js +1 -0
- package/src/weakmaps/sunByMap.js +1 -0
- package/src/weakmaps/sunlightByControl.js +1 -0
- package/src/weakmaps/sunlightByMap.js +1 -0
- package/src/weakmaps/terrain3DByLayer.js +1 -0
- package/src/weakmaps/terrain3DByMap.js +1 -0
- package/src/weakmaps/terrainArchiveByLayer.js +1 -0
- package/src/weakmaps/terrainBaseYByLayer.js +1 -0
- package/src/weakmaps/terrainBoundsByLayer.js +1 -0
- package/src/weakmaps/terrainControllerByLayer.js +1 -0
- package/src/weakmaps/terrainGridsByLayer.js +1 -0
- package/src/weakmaps/terrainLoadingByLayer.js +1 -0
- package/src/weakmaps/terrainOriginElevationByLayer.js +1 -0
- package/src/weakmaps/terrainPromiseByLayer.js +1 -0
- package/src/weakmaps/terrainReadyByLayer.js +1 -0
- package/src/weakmaps/terrainRequestByLayer.js +1 -0
- package/src/weakmaps/terrainSourceByLayer.js +1 -0
- package/src/weakmaps/terrainTilesByLayer.js +1 -0
- package/src/weakmaps/terrainZoomByLayer.js +1 -0
- package/src/weakmaps/tileZoomByLayer.js +1 -0
- package/src/weakmaps/timeControlByMap.js +1 -0
- package/src/weakmaps/tooltipByLayer.js +1 -0
- package/src/weakmaps/touchByContainer.js +1 -0
- package/src/weakmaps/touchPitchByMap.js +1 -0
- package/src/weakmaps/touchRotateByMap.js +1 -0
- package/src/weakmaps/trafficByLayer.js +1 -0
- package/src/weakmaps/typeByLayer.js +1 -0
- package/src/weakmaps/urlByLayer.js +1 -0
- package/src/weakmaps/visibleMeshesByLayer.js +1 -0
- package/src/weakmaps/walkByMap.js +1 -0
- package/src/weakmaps/walkerByLayer.js +1 -0
- package/src/weakmaps/wantedRasterTilesByLayer.js +1 -0
- package/src/weakmaps/zoomLevelByLayer.js +1 -0
- package/src/weakmaps/zoomTransitionsByLayer.js +1 -0
- package/src/weakmaps/zoomViewByLayer.js +1 -0
- package/src/workers/acquireGeometryWorker.js +32 -0
- package/src/workers/buildAreaInWorker.js +36 -0
- package/src/workers/closeGeometryWorkers.js +11 -0
- package/src/workers/geometryWorker.js +14 -0
- package/src/workers/settleGeometryWorker.js +10 -0
- package/src/workers/startGeometryWorker.js +16 -0
- package/src/archives/read.js +0 -29
- package/src/archives/varint.js +0 -15
- package/src/camera/angles.js +0 -6
- package/src/camera/cancelCameraAnimation.js +0 -11
- package/src/camera/groundBounds.js +0 -11
- package/src/camera/mapAnimateCamera.js +0 -17
- package/src/camera/mapStopPitchBearingAnimation.js +0 -6
- package/src/camera/pointOf.js +0 -3
- package/src/camera/project.js +0 -20
- package/src/camera/runCameraAnimations.js +0 -28
- package/src/camera/scheduleCameraAnimation.js +0 -8
- package/src/constants/Compass.js +0 -7
- package/src/constants/ContainerResize.js +0 -7
- package/src/constants/PitchDrag.js +0 -7
- package/src/constants/ShiftRotate.js +0 -7
- package/src/constants/TouchMode.js +0 -6
- package/src/constants/accessorSizes.js +0 -1
- package/src/constants/attachState.js +0 -1
- package/src/constants/cameraControlsState.js +0 -1
- package/src/constants/cityMapper.js +0 -6
- package/src/constants/hull.js +0 -1
- package/src/constants/indexState.js +0 -1
- package/src/constants/mapCameraState.js +0 -1
- package/src/constants/nativeLayerState.js +0 -1
- package/src/constants/nativeMethodHandlers.js +0 -31
- package/src/constants/onMapChangeState.js +0 -1
- package/src/constants/onZoomAnimState.js +0 -1
- package/src/constants/parts.js +0 -19
- package/src/constants/pumpState.js +0 -1
- package/src/constants/ringDirections.js +0 -10
- package/src/constants/roundProfile.js +0 -1
- package/src/constants/underEntryState.js +0 -1
- package/src/core/addImageState.js +0 -7
- package/src/core/boundsQuad.js +0 -11
- package/src/core/bringNativeLayerToBack.js +0 -3
- package/src/core/bringNativeLayerToFront.js +0 -3
- package/src/core/cancelGridFade.js +0 -10
- package/src/core/current.js +0 -3
- package/src/core/forwardNativeError.js +0 -3
- package/src/core/handleNativeMapEvent.js +0 -47
- package/src/core/localPixelForGeometry.js +0 -6
- package/src/core/localPosition.js +0 -6
- package/src/core/markerCameraIconPoint.js +0 -9
- package/src/core/markerQuadCorners.js +0 -31
- package/src/core/nativeImageError.js +0 -8
- package/src/core/nativeImageRefresh.js +0 -7
- package/src/core/nativeLayer.js +0 -97
- package/src/core/quadNativeMesh.js +0 -15
- package/src/core/readyNativeGPU.js +0 -6
- package/src/core/refreshNativeLayer.js +0 -29
- package/src/core/refreshNativeLayerContract.js +0 -3
- package/src/core/removeImageState.js +0 -8
- package/src/core/removeTargets.js +0 -8
- package/src/core/reorderNativeLayer.js +0 -6
- package/src/core/runGridFades.js +0 -14
- package/src/core/runMarkerPanFrame.js +0 -12
- package/src/core/scheduleGridFade.js +0 -9
- package/src/core/scheduleMarkerPan.js +0 -8
- package/src/core/syncVectorLayer.js +0 -26
- package/src/core/updateNativeLayerView.js +0 -6
- package/src/geometry/below.js +0 -3
- package/src/geometry/bridgeLocal.js +0 -4
- package/src/geometry/cross.js +0 -3
- package/src/geometry/dot.js +0 -6
- package/src/geometry/lampRing.js +0 -11
- package/src/geometry/push.js +0 -3
- package/src/geometry/sub.js +0 -6
- package/src/geometry/treeRing.js +0 -14
- package/src/lighting/visitCells.js +0 -15
- package/src/models/loadImage.js +0 -15
- package/src/models/materialFor.js +0 -21
- package/src/models/textureSampler.js +0 -10
- package/src/raster/createGeometry.js +0 -22
- package/src/raster/finishAttachment.js +0 -11
- package/src/raster/isLoading.js +0 -5
- package/src/rendering/composeRoofAtlas.js +0 -52
- package/src/rendering/createProgram.js +0 -92
- package/src/rendering/destroyTexture.js +0 -6
- package/src/rendering/ensureRoofBlit.js +0 -40
- package/src/rendering/rebuildRoofAtlas.js +0 -67
- package/src/rendering/reportCompilation.js +0 -17
- package/src/rendering/sortMeshes.js +0 -6
- package/src/rendering/synchronizeZoomView.js +0 -34
- package/src/rendering/updateMapCamera.js +0 -32
- package/src/rendering/updateRoofRaster.js +0 -32
- package/src/scene/attach.js +0 -161
- package/src/scene/emptyNode.js +0 -11
- package/src/scene/endZoom.js +0 -16
- package/src/scene/layerLayerAdd.js +0 -21
- package/src/scene/onZoomAnim.js +0 -16
- package/src/scene/renderPendingZoomAnimation.js +0 -7
- package/src/scene/rendererDeviceError.js +0 -10
- package/src/scene/rendererDeviceLost.js +0 -11
- package/src/scene/reportError.js +0 -3
- package/src/scene/requestAdapter.js +0 -12
- package/src/scene/requestDevice.js +0 -9
- package/src/scene/update.js +0 -19
- package/src/scene/updateCamera.js +0 -34
- package/src/scene/updateWorldMatrix.js +0 -48
- package/src/shadows/shadowBounds.js +0 -32
- package/src/sources/addGeneratedTriangle.js +0 -6
- package/src/sources/projectRing.js +0 -20
- package/src/sources/projectedTree.js +0 -13
- package/src/sources/pump.js +0 -54
- package/src/sources/updateStatus.js +0 -12
- package/src/sunlight/horizontalPosition.js +0 -16
- package/src/sunlight/initialize.js +0 -11
- package/src/sunlight/mix.js +0 -6
- package/src/sunlight/moonPosition.js +0 -17
- package/src/sunlight/projectCelestialBody.js +0 -13
- package/src/sunlight/render.js +0 -7
- package/src/sunlight/rgb.js +0 -6
- package/src/sunlight/solarPosition.js +0 -17
- package/src/terrain/terrainGrid.js +0 -24
- package/src/traffic/routeGeometry.js +0 -31
- package/src/traffic/toLanes.js +0 -16
- package/src/traffic/tooltip.js +0 -11
- package/src/vehicles/carriage.js +0 -19
- package/src/vehicles/mirror.js +0 -8
- package/src/walk/local.js +0 -10
- package/src/walk/onAdd.js +0 -4
- package/src/walk/onPointer.js +0 -13
- package/src/walk/onRemove.js +0 -4
- package/src/walk/start.js +0 -37
- package/src/walk/step.js +0 -53
- /package/src/{utils/channel.js → colors/hslChannel.js} +0 -0
- /package/src/{utils → colors}/toSRGB.js +0 -0
- /package/src/controls/{editable.js → isEditableTarget.js} +0 -0
- /package/src/geometry/{nativeTriangle.js → appendNativeTriangle.js} +0 -0
- /package/src/{constants → globals}/TILE_RADIUS.js +0 -0
- /package/src/{constants → globals}/TILE_SIZE.js +0 -0
- /package/src/{constants → globals}/dark.js +0 -0
- /package/src/{constants → globals}/glass.js +0 -0
- /package/src/{constants → globals}/headlight.js +0 -0
- /package/src/{constants → globals}/moves.js +0 -0
- /package/src/{constants → globals}/paints.js +0 -0
- /package/src/{constants → globals}/pendingUpdates.js +0 -0
- /package/src/{constants → globals}/shirt.js +0 -0
- /package/src/{constants → globals}/skin.js +0 -0
- /package/src/{constants → globals}/speed.js +0 -0
- /package/src/{constants → globals}/taillight.js +0 -0
- /package/src/{constants → globals}/trousers.js +0 -0
- /package/src/{constants/accessorTypes.js → globals/types.js} +0 -0
- /package/src/{constants → globals}/tyre.js +0 -0
- /package/src/{constants → globals}/white.js +0 -0
- /package/src/{scene → gpu}/showWebGPUWarning.js +0 -0
- /package/src/{scene → layer-controls}/placeUnderEntry.js +0 -0
- /package/src/{core → native}/compareNativeHits.js +0 -0
- /package/src/{core → native}/nativeAddLatLng.js +0 -0
- /package/src/{core → native}/nativeBringToBack.js +0 -0
- /package/src/{core → native}/nativeBringToFront.js +0 -0
- /package/src/{core → native}/nativeRedraw.js +0 -0
- /package/src/{core → native}/nativeSetBounds.js +0 -0
- /package/src/{core → native}/nativeSetIcon.js +0 -0
- /package/src/{core → native}/nativeSetLatLng.js +0 -0
- /package/src/{core → native}/nativeSetLatLngs.js +0 -0
- /package/src/{core → native}/nativeSetOpacity.js +0 -0
- /package/src/{core → native}/nativeSetRadius.js +0 -0
- /package/src/{core → native}/nativeSetStyle.js +0 -0
- /package/src/{core → native}/nativeSetUrl.js +0 -0
- /package/src/{core → native}/nativeSetZIndex.js +0 -0
- /package/src/{core → native}/nativeSetZIndexOffset.js +0 -0
- /package/src/{core → native}/refreshNativeEvent.js +0 -0
- /package/src/{core → native}/restoreNativeEvents.js +0 -0
- /package/src/{camera/displayPoint.js → projections/displayContainerPoint.js} +0 -0
- /package/src/{core → projections}/localPixel.js +0 -0
- /package/src/{camera → projections}/verticalGroundY.js +0 -0
- /package/src/sunlight/{onAdd.js → onAddTimeControl.js} +0 -0
- /package/src/terrain/{sample.js → sampleTerrainTile.js} +0 -0
- /package/src/walk/{onBlur.js → onWalkBlur.js} +0 -0
- /package/src/{constants → weakmaps}/nativeEventMaps.js +0 -0
- /package/src/{constants → weakmaps}/renderers.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
(()=>{var ql=Object.defineProperty;var I=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var Hl=(e,t)=>{for(var r in t)ql(e,r,{get:t[r],enumerable:!0})};function wr(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var No=I(()=>{});function Sa(e){let t=this._cameraShiftRotate;!e.shiftKey||wr(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),t._map.setBearing(t._map.getBearing()+Math.sign(e.deltaY)*5))}var ba=I(()=>{No()});function Ca(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=Sa,e.addEventListener("wheel",this._wheel,{passive:!1,capture:!0})}var jo=I(()=>{ba()});function Ea(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var Zo=I(()=>{});var Ba,Aa=I(()=>{jo();Zo();Ba=L.Handler.extend({addHooks:Ca,removeHooks:Ea})});var N,fe=I(()=>{N={}});function _r(e){let t=N.dragStates.get(this);if(t.drag||!t.accept(e)||wr(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.({preventScroll:!0}),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var $o=I(()=>{fe();No()});function Pr(e){let t=N.dragStates.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;t.map._stopPitchBearingAnimation(),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*180/Math.PI}else i*=e.clientY<t.drag.cy?1:-1;t.map._setPitchAndBearing(t.map.getPitch()-o*t.sensitivity[1],t.map.getBearing()+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Vo=I(()=>{fe()});function ht(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Tr=I(()=>{});function Ne(e){ht(N.dragStates.get(this),e)}var qo=I(()=>{Tr();fe()});function Lr(e){let t=N.dragStates.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Ho=I(()=>{fe()});function Sr(e){let t=N.dragStates.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Wo=I(()=>{fe()});function br(){let e;for(e of N.cameraDrags)ht(e)}var Yo=I(()=>{fe();Tr()});function Cr(e,t,r,o=[.8,.5],i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return N.dragStates.set(t,n),N.cameraDrags.add(n),t.addEventListener("pointerdown",_r,!0),t.addEventListener("pointermove",Pr),t.addEventListener("pointerup",Ne),t.addEventListener("pointercancel",Ne),t.addEventListener("lostpointercapture",Ne),t.addEventListener("click",Lr,!0),t.addEventListener("contextmenu",Sr),window.addEventListener("blur",br),n}var Xo=I(()=>{fe();$o();Vo();qo();Ho();Wo();Yo()});function za(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var Ia=I(()=>{});function Da(){this._dragState=Cr(this._map,this._map.getContainer(),za,[.8,.5],!0)}var Ko=I(()=>{Xo();Ia()});function Ra(e){ht(e);let{element:t}=e;t.removeEventListener("pointerdown",_r,!0),t.removeEventListener("pointermove",Pr),t.removeEventListener("pointerup",Ne),t.removeEventListener("pointercancel",Ne),t.removeEventListener("lostpointercapture",Ne),t.removeEventListener("click",Lr,!0),t.removeEventListener("contextmenu",Sr),N.dragStates.delete(t),N.cameraDrags.delete(e),N.cameraDrags.size||window.removeEventListener("blur",br)}var Ua=I(()=>{Tr();$o();Vo();qo();Ho();Wo();fe();Yo()});function Er(){Ra(this._dragState)}var Br=I(()=>{Ua()});var Oa,Ga=I(()=>{Ko();Br();Oa=L.Handler.extend({addHooks:Da,removeHooks:Er})});function Fa(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&t._map.setBearing(r-o)}var Na=I(()=>{});function ja([e,t]){let{handler:r,generation:o}=e.value;try{if(!r.enabled()||r._generation!==o)return;if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")throw t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied");window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){r.disable(),r._map.fire("error",{error:i})}}var Za=I(()=>{});function $a(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:Fa};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(ja)}var Jo=I(()=>{Na();Za()});function Va(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Qo=I(()=>{});var qa,Ha=I(()=>{Jo();Qo();qa=L.Handler.extend({addHooks:$a,removeHooks:Va})});function Wa(e){e[0]?.target._containerResizeMap.invalidateSize()}var Ya=I(()=>{});function Xa(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Wa),this._observer.observe(e)}var ko=I(()=>{Ya()});function Ka(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var ei=I(()=>{});var Ja,Qa=I(()=>{ko();ei();Ja=L.Handler.extend({addHooks:Xa,removeHooks:Ka})});function ti(){this._map.fire("cameratouchchange")}var ka=I(()=>{});var ri,es=I(()=>{ka();ri=L.Handler.extend({addHooks:ti,removeHooks:ti})});function ts(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?r.resetNorthPitch():r.resetNorth(),e.detail&&r.getContainer().focus({preventScroll:!0})}var rs=I(()=>{});function os(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")r.setBearing(r.getBearing()-o);else if(e.key==="ArrowRight")r.setBearing(r.getBearing()+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)r.setPitch(r.getPitch()+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)r.setPitch(r.getPitch()-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var is=I(()=>{});function Ar(){let e=this._map,t=this.options.visualizePitch?e.getPitch():0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.cos(t*Math.PI/180))}) rotateX(${t}deg) rotate(${e.getBearing()}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(e.getBearing())} degrees, pitch ${Math.round(e.getPitch())} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!e.getBearing()&&!t&&!this._container.contains(document.activeElement)?"none":""}var oi=I(()=>{});function ns(e){return e.button===0}var as=I(()=>{});function ss(){Ar.call(this._rotateControl)}var fs=I(()=>{oi()});function ms(e){let t=L.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=L.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=L.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=ts,r.onkeydown=os,this._refresh=Ar,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Cr(e,r,ns,[.8,this.options.visualizePitch?.5:0]),r.addEventListener("focusout",ss),L.DomEvent.on(r,"dblclick contextmenu",L.DomEvent.stop),L.DomEvent.disableClickPropagation(t),L.DomEvent.disableScrollPropagation(t),t}var ls=I(()=>{rs();is();oi();Xo();as();fs()});function ps(e){e.off("rotate pitch",this._refresh,this),Er.call(this)}var us=I(()=>{Br()});function cs(e){return new L.Control.Rotate(e)}var ds=I(()=>{});function zr(e){let t=this._cameraTouchState,{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!r.touchRotate.enabled()&&!r.touchPitch.enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;r._stopPitchBearingAnimation();let a=new L.Point((i.clientX+n.clientX)/2,(i.clientY+n.clientY)/2).subtract(new L.Point(o.getBoundingClientRect().left,o.getBoundingClientRect().top));t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:a,anchor:r.containerPointToLatLng(a),zoom:r.getZoom(),bearing:r.getBearing(),pitch:r.getPitch(),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled()},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var ii=I(()=>{});function Ir(e){let t=this._cameraTouchState,{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),f=new L.Point((n.clientX+a.clientX)/2,(n.clientY+a.clientY)/2).subtract(new L.Point(o.getBoundingClientRect().left,o.getBoundingClientRect().top)),m=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*180/Math.PI;r._setPitchAndBearing(r.touchPitch.enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,r.touchRotate.enabled()?i.bearing+m:i.bearing);let l=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(l<1)return;let p=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(l/i.distance))):i.zoom;if(r.setView(r.getCenter(),p,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var ni=I(()=>{});function je(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Ut=I(()=>{});function gt(e){je(this._cameraTouchState,e)}var ai=I(()=>{Ut()});function Dr(){let e=this._cameraTouchState,{map:t,container:r}=e,o=t.touchRotate.enabled()||t.touchPitch.enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(je(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var si=I(()=>{Ut()});function Rr(){let e;for(e of N.cameraTouchStates)je(e)}var fi=I(()=>{fe();Ut()});function hs(){let e=this._cameraTouchState;if(!e)return;let{container:t,map:r}=e;je(e),t.removeEventListener("touchstart",zr,!0),t.removeEventListener("touchmove",Ir,!0),t.removeEventListener("touchend",gt,!0),t.removeEventListener("touchcancel",gt,!0),N.cameraTouchStates.delete(e),N.cameraTouchStates.size||window.removeEventListener("blur",Rr),r.off("cameratouchchange",Dr,r),r.rotateControl?.remove(),delete t._cameraTouchState,delete r._cameraTouchState}var gs=I(()=>{Ut();ii();ni();ai();fe();fi();si()});var xs={};Hl(xs,{cameraControls:()=>Yl});function Yl(e){if(e.addHandler("trackContainerMutation",Ja),!e.options.rotate)return;e.addHandler("shiftKeyRotate",Ba),e.addHandler("pitchDrag",Oa),e.addHandler("compassBearing",qa),e.addHandler("touchRotate",ri),e.addHandler("touchPitch",ri);let t=e.getContainer(),r=e._cameraTouchState={map:e,container:t,touch:null,nativeZoom:void 0};t._cameraTouchState=r,N.cameraTouchStates.add(r),t.addEventListener("touchstart",zr,{capture:!0,passive:!1}),t.addEventListener("touchmove",Ir,{capture:!0,passive:!1}),t.addEventListener("touchend",gt,!0),t.addEventListener("touchcancel",gt,!0),window.addEventListener("blur",Rr),e.on("cameratouchchange",Dr,e),e.options.rotateControl&&(e.rotateControl=new L.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:{}),e.rotateControl.addTo(e)),e.once("unload",hs,e)}var ys=I(()=>{Aa();Ga();Ha();Qa();es();fe();ls();us();ds();jo();Zo();Ko();Br();Jo();Qo();ko();ei();ii();ni();ai();si();gs();fi();N.cameraDrags=new Set;N.dragStates=new WeakMap;N.cameraTouchStates=new Set;L.Control.Rotate=L.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:ms,onRemove:ps});L.control&&(L.control.rotate=cs)});var W={};function Bt(e){let t;for(t of W.imageStates.get(e.currentTarget)||[])re(t)}function At(e){let t;for(t of W.imageStates.get(e.currentTarget)||[])t.source.fire("error",{error:new Error("Unable to load native layer image")})}function Jt(e,t){let r=W.imageStates.get(e);r&&(r.delete(t),r.size||W.imageStates.delete(e))}function Ti(e,t){let r=W.imageStates.get(e);r||W.imageStates.set(e,r=new Set),r.add(t)}function Li(e,t){let r=e._map,o,i,n;if(r._animatingZoom){e._zoomTransitions||=new Map;for(o of r.getContainer().getAnimations({subtree:!0}))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||e._zoomTransitions.has(o)||(i=o.currentTime||0,o.pause(),e._zoomTransitions.set(o,{start:t,time:i}));for([o,{start:n,time:i}]of e._zoomTransitions)o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);if(e._zoomView){let a=e._zoomView,s;for(o of e._zoomTransitions.keys())if(o.effect.target===r._proxy){s=o;break}let f=s?.effect.getComputedTiming().progress??Math.min(1,(t-a.start)/250),m=r.getZoomScale(a.targetZoom,a.zoom),l=1+(m-1)*f,p=r.project(a.from,a.zoom),u=r.project(a.to,a.zoom);r._cameraView={zoom:r.getScaleZoom(l,a.zoom),center:r.unproject(p.add(u.subtract(p).multiplyBy(m*f/l)),a.zoom)},r._updateCameraOverlays()}}}async function Si(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function O(e,t){Si(e,t,e.renderer.device.queue.onSubmittedWorkDone())}function bi(e,t){(!e._size||!e._size.equals(t))&&(e.renderer.width=t.x,e.renderer.height=t.y,e.renderer.canvas.width=Math.round(t.x*e.renderer.dpr),e.renderer.canvas.height=Math.round(t.y*e.renderer.dpr),e.renderer.canvas.style.width=`${t.x}px`,e.renderer.canvas.style.height=`${t.y}px`,e.renderer.depthTexture&&O(e,e.renderer.depthTexture),e.renderer.depthTexture=e.renderer.device.createTexture({size:[e.renderer.canvas.width,e.renderer.canvas.height],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT}),e._size=t)}function et(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function tt(e){let t=[],r,o;for(r=0;r<e.position.length;r++)t.push(e.position[r]-e.target[r]);let i=Math.hypot(...t)||1;for(r=0;r<3;r++)t[r]/=i;let n=et(e.up,t),a=Math.hypot(...n)||1;for(r=0;r<3;r++)n[r]/=a;let s=et(t,n),f=new DOMMatrix([n[0],n[1],n[2],0,s[0],s[1],s[2],0,t[0],t[1],t[2],0,...e.position,1]).inverse().toFloat64Array();for(o of f)if(!Number.isFinite(o))throw new Error("Singular 3D transform");for(r=0;r<16;r++)e.viewMatrix[r]=f[r];let m=1/Math.tan(e.fov*Math.PI/360),l=e.near,p=e.far,u=[m/e.aspect,0,0,0,0,m,0,0,0,0,p/(l-p),-1,0,0,p*l/(l-p),0];for(r=0;r<16;r++)e.projectionMatrix[r]=u[r];let d=new DOMMatrix(e.projectionMatrix).multiply(new DOMMatrix(e.viewMatrix)).toFloat64Array();for(r=0;r<16;r++)e.projectionViewMatrix[r]=d[r]}function Ci(e,t){let r,o,i,n,a,s,f;for(r of t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`)||[])if(!(e.x<r.min[0]||e.x>r.max[0]||e.y<r.min[1]||e.y>r.max[1])){for([o,i,n]of r.triangles)if(a=(i[1]-n[1])*(o[0]-n[0])+(n[0]-i[0])*(o[1]-n[1]),s=((i[1]-n[1])*(e.x-n[0])+(n[0]-i[0])*(e.y-n[1]))/a,f=((n[1]-o[1])*(e.x-n[0])+(o[0]-n[0])*(e.y-n[1]))/a,s>=0&&f>=0&&s+f<=1)return s*o[2]+f*i[2]+(1-s-f)*n[2]}return null}function zt(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Ei(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,f=[zt(t,i,n),zt(t,i+1,n),zt(t,i,n+1),zt(t,i+1,n+1)],m=0,l=null,p;for(p of f)Number.isFinite(p)&&(m||(l=p),m++);return m<4?l:(f[0]*(1-a)+f[1]*a)*(1-s)+(f[2]*(1-a)+f[3]*a)*s}function Y(e,t){if(!e._map||!e._terrainReady)return null;let r=t instanceof L.Point?t:e._map.project(t,e._terrainZoom);return Ci(r,e._bridges)??Ei(r,e._terrainTiles)}function Bi(e,t){let r=e._map,o=r._cameraView?.zoom??r.getZoom(),i=r._cameraView?.center??r.getCenter(),n=r.options.crs.scale(o)/(4007501668557849e-8*Math.cos(e._sceneOrigin.lat*Math.PI/180)),a=r.project(i,o).subtract(r.project(e._sceneOrigin,o)),s=t.y*1.5/n,f=[a.x/n,(r._terrain3D?Y(r._terrain3D,i):void 0)??0,a.y/n],m=r.getPitch()*Math.PI/180,l=r.getBearing()*Math.PI/180,p=e.camera;p.fov=2*Math.atan(1/3)*180/Math.PI,p.aspect=t.x/t.y,p.near=Math.max(.1,s/1e4),p.far=Math.max(1e4,s*10),p.position[0]=f[0]+Math.sin(l)*Math.sin(m)*s,p.position[1]=f[1]+Math.cos(m)*s,p.position[2]=f[2]+Math.cos(l)*Math.sin(m)*s,p.up[0]=-Math.sin(l)*Math.cos(m),p.up[1]=Math.sin(m),p.up[2]=-Math.cos(l)*Math.cos(m),p.target[0]=f[0],p.target[1]=f[1],p.target[2]=f[2],tt(p)}function ae(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n,a,s;if(e.matrix){let l=e._matrixState||=new Float64Array(16);for(n=0;n<16;n++)l[n]!==e.matrix[n]&&(i=!0),l[n]=e.matrix[n]}else{let l=e._transformState||=new Float64Array(9);for(n=0;n<9;n++)a=n<3?e.position[n]:n<6?e.rotation[n-3]:e.scale[n-6],l[n]!==a&&(i=!0),l[n]=a}if(!i){for(s of e.children)ae(s);return}let f;if(e.matrix)f=e.matrix;else{let l=180/Math.PI,p=new DOMMatrix().translate(...e.position);p.rotateAxisAngleSelf(0,1,0,e.rotation[1]*l),p.rotateAxisAngleSelf(1,0,0,e.rotation[0]*l),p.rotateAxisAngleSelf(0,0,1,e.rotation[2]*l),f=p.scale(...e.scale).toFloat64Array()}let m=t?new DOMMatrix(t.worldMatrix).multiply(new DOMMatrix(f)).toFloat64Array():f;for(n=0;n<16;n++)e.worldMatrix[n]=m[n];e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(s of e.children)ae(s)}function oe(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i;for(i=0;i<o.length;i++)t[i%3]=Math.min(t[i%3],o[i]),r[i%3]=Math.max(r[i%3],o[i]);let n=e.attributes.instanceOffset;if(n){let f,m,l,p;for(f=0;f<3;f++){for(l=1/0,p=-1/0,m=f;m<n.data.length;m+=n.size)l=Math.min(l,n.data[m]),p=Math.max(p,n.data[m]);t[f]=Math.fround(t[f]+l),r[f]=Math.fround(r[f]+p)}}let a=[];for(i=0;i<t.length;i++)a.push((t[i]+r[i])/2);let s=n?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:0;for(i=0;!n&&i<o.length;i+=3)s=Math.max(s,Math.hypot(o[i]-a[0],o[i+1]-a[1],o[i+2]-a[2]));e.bounds={min:t,max:r,center:a,radius:s}}function bo(e,t,r,o,i,n,a){if(!e.visible)return;if(e.geometry){t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),e.geometry.bounds||oe(e.geometry);let f=e.geometry.bounds,m=e.worldMatrix,l=f.center,p=m[0]*l[0]+m[4]*l[1]+m[8]*l[2]+m[12],u=m[1]*l[0]+m[5]*l[1]+m[9]*l[2]+m[13],d=m[2]*l[0]+m[6]*l[1]+m[10]*l[2]+m[14],c=r[2]*p+r[6]*u+r[10]*d+r[14],h=r[3]*p+r[7]*u+r[11]*d+r[15];e._sortDepth=c/h;let g=f.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));e._visibleInFrame=o[0][0]*p+o[0][1]*u+o[0][2]*d+o[0][3]>=-g*i[0]&&o[1][0]*p+o[1][1]*u+o[1][2]*d+o[1][3]>=-g*i[1]&&o[2][0]*p+o[2][1]*u+o[2][2]*d+o[2][3]>=-g*i[2]&&o[3][0]*p+o[3][1]*u+o[3][2]*d+o[3][3]>=-g*i[3]&&o[4][0]*p+o[4][1]*u+o[4][2]*d+o[4][3]>=-g*i[4]&&o[5][0]*p+o[5][1]*u+o[5][2]*d+o[5][3]>=-g*i[5],e._visibleInFrame&&n.push(e)}let s;for(s of e.children)bo(s,t,r,o,i,n,a)}function Ai(e,t,r){let i=e.camera.projectionViewMatrix,n=e.renderer,a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),f,m,l,p,u;for(f=0;f<6;f++){for(m=Math.floor(f/2),l=a[f],p=0;p<4;p++)u=p*4,l[p]=f===4?i[u+2]:f%2?i[u+3]-i[u+m]:i[u+3]+i[u+m];s[f]=Math.hypot(l[0],l[1],l[2])}let d=e._visibleMeshes||=[];d.length=0;let c=e._shadowMeshes||=[];c.length=0,r&&ae(e.scene),bo(e.scene,t,i,a,s,d,c)}function zi(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule({code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"});e.roofBlit={pipeline:t.createRenderPipeline({layout:"auto",vertex:{module:r,entryPoint:"vertexMain"},fragment:{module:r,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}}),sampler:t.createSampler({magFilter:"linear",minFilter:"linear"})}}}function rt(){return new L.Point(256,256)}function Ii(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Di(e,t,r,o,i,n,a){let s=e.renderer,f=s.device,m=e._map,l=new Float32Array(Math.max(1,t.length)*64),p=f.createBuffer({size:l.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),u=f.createCommandEncoder(),d=u.beginRenderPass({colorAttachments:[{view:e._roofRaster.texture.texture.createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]});d.setPipeline(s.roofBlit.pipeline),t.sort(Ii);let c,h,g,y,x,v,w,P,M,S;for([c,{tile:h,layer:g}]of t.entries())({coords:y,image:x}=h),v=h.texture,v.uploaded!==v.image&&(f.queue.copyExternalImageToTexture({source:x},{texture:v.texture},[v.texture.width,v.texture.height]),v.uploaded=v.image),l[c*64]=g.options.opacity,w=rt().multiplyBy(m.getZoomScale(r,y.z)),P=new L.Point(y.x,y.y).scaleBy(w).subtract(o),M=P.x*n/i.x,S=P.y*a/i.y,d.setViewport(M,S,Math.min(w.x*n/i.x,n-M),Math.min(w.y*a/i.y,a-S),0,1),d.setBindGroup(0,f.createBindGroup({layout:s.roofBlit.pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:v.texture.createView()},{binding:1,resource:s.roofBlit.sampler},{binding:2,resource:{buffer:p,offset:c*256,size:4}}]})),d.draw(4);d.end(),f.queue.writeBuffer(p,0,l),f.queue.submit([u.finish()]),p.destroy()}function Ri(e,t,r,o){let i=e._map,n=e.renderer,a=[],s=-1/0,f,m,l,p;for(f of t)for(m of f._rasterTiles.values())m.done&&!m.request.signal.aborted&&m.image&&(a.push({tile:m,layer:f}),s=Math.max(s,m.coords.z));a.length||(s=i.getZoom());let u=new L.Bounds;for({tile:{coords:l},layer:f}of a)p=rt().multiplyBy(i.getZoomScale(s,l.z)),u.extend(new L.Point(l.x,l.y).scaleBy(p)),u.extend(new L.Point(l.x+1,l.y+1).scaleBy(p));let d=u.min||i.project(e._sceneOrigin,s),c=u.isValid()?u.getSize():new L.Point(1,1),g=Math.min(1,4096/Math.max(c.x,c.y)),y=Math.max(1,Math.ceil(c.x*g)),x=Math.max(1,Math.ceil(c.y*g)),v=i.project(e._sceneOrigin,s),w=i.options.crs.scale(s)/(4007501668557849e-8*Math.cos(e._sceneOrigin.lat*Math.PI/180)),P=new DOMMatrix;P.m11=w/c.x,P.m33=w/c.y,P.m41=(v.x-d.x)/c.x,P.m43=(v.y-d.y)/c.y;let M=e._roofRaster?.texture;M&&(M.width!==y||M.height!==x)&&(O(e,M.texture),M.texture=n.device.createTexture({size:[y,x],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),M.width=y,M.height=x),e._roofRaster={signature:r,updatedAt:o,matrix:Array.from(P.toFloat64Array()),texture:M||{device:n.device,texture:n.device.createTexture({size:[y,x],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:n.device.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:y,height:x,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}},zi(n),Di(e,a,s,d,c,y,x)}function Ui(e,t){let r=e._map,o=[],i=!1,n;for(n of e._layers)if(n.options.roofTexture){i=!0;break}if(i){for(n of Object.values(r._layers))n._type==="pmtiles"&&n._rasterTiles&&n.options.opacity>0&&o.push(n);let a=[],s=!1;for(n of o)a.push(`${L.Util.stamp(n)}:${n._rasterVersion||0}:${n.options.opacity}:${n.options.zIndex}`),s||=!!n._loadingTiles;let f=a.join("|");(!e._roofRaster||e._roofRaster.signature!==f&&(!s||t-e._roofRaster.updatedAt>=50))&&Ri(e,o,f,t)}else e._roofRaster&&(O(e,e._roofRaster.texture.texture),e._roofRaster=null);return o}function Oi(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||(e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id)}function Gi(e){return e.sort(Oi)}function Fi(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=!1,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V;for(s of r){for(f=s._tileZoom,m=o.project(t._sceneOrigin,f),l=o.options.crs.scale(f)/(4007501668557849e-8*Math.cos(t._sceneOrigin.lat*Math.PI/180)),p=[1/0,1/0],u=[-1/0,-1/0],d=0;d<8;d++)c=d&1?i.max[0]:i.min[0],h=d&2?i.max[1]:i.min[1],g=d&4?i.max[2]:i.min[2],y=m.x+(n[0]*c+n[4]*h+n[8]*g+n[12])*l,x=m.y+(n[2]*c+n[6]*h+n[10]*g+n[14])*l,p[0]=Math.min(p[0],y),p[1]=Math.min(p[1],x),u[0]=Math.max(u[0],y),u[1]=Math.max(u[1],x);if(!(s.header.maxLat!==void 0&&s.header.minLon!==void 0&&s.header.minLat!==void 0&&s.header.maxLon!==void 0&&(v=o.project([s.header.maxLat,s.header.minLon],f),w=o.project([s.header.minLat,s.header.maxLon],f),p[0]=Math.max(p[0],v.x),p[1]=Math.max(p[1],v.y),u[0]=Math.min(u[0],w.x),u[1]=Math.min(u[1],w.y),p[0]>=u[0]||p[1]>=u[1]))){a=!0,P=[[p[0],p[1],u[0],u[1]]];for(M of s._rasterTiles.values())if(!(!M.done&&!M.error)){S=256*2**(f-M.coords.z),z=M.coords.x*S,T=M.coords.y*S,E=[];for([b,R,D,U]of P){if(G=Math.max(b,z),$=Math.max(R,T),H=Math.min(D,z+S),V=Math.min(U,T+S),G>=H||$>=V){E.push([b,R,D,U]);continue}R<$&&E.push([b,R,D,$]),V<U&&E.push([b,V,D,U]),b<G&&E.push([b,$,G,V]),H<D&&E.push([H,$,D,V])}if(P=E,!P.length)return!0}}}return!a}function Ni(e,t,r,o){let i=e._visibleMeshes,n=e._shadowMeshes,a=e.renderer,s=!1,f,m;for(f of i){if(f.program.uniforms.roofTexture&&!t.length&&(f._roofRevealed=!0),f.program.uniforms.roofTexture&&!f._roofRevealed&&t.length){if(f._roofCoverageSignature!==e._roofRaster?.signature&&(f._roofCoverageSignature=e._roofRaster?.signature,f._roofCovered=Fi(f,e,t)),!f._roofCovered){f._appearance=0;continue}f._roofRevealed=!0}f.fadeDuration&&(f.fadeStart??=f.tile?.loadedAt??r,m=Math.min(1,(r-f.fadeStart)/f.fadeDuration),f._appearance=m*m*(3-2*m),s||=m<1),o.push(f)}i.length=0,Gi(o);let l=1/0,p=-1/0;for(f of o)f.ground&&(l=Math.min(l,f.tile.coords.z),p=Math.max(p,f.tile.coords.z));a.groundOverlap=l!==p;let u=0;for(f of n)f.visible&&f._appearance!==0&&(n[u++]=f);return n.length=u,s}function Qt(e){let t=e.renderer.sunlight;t.bindGroup=e.renderer.device.createBindGroup({layout:t.layout,entries:[{binding:0,resource:{buffer:t.buffer}},{binding:1,resource:t.texture.createView()},{binding:2,resource:t.sampler},{binding:3,resource:{buffer:t.lights}}]})}function Co(e,t,r,o,i,n,a){let s,f,m,l,p,u,d,c,h,g;for(s of e)for(f=0;f<s.length;f+=8)for(m=s[f+3],l=s[f]-t,p=s[f+2]-r,u=Math.floor((p-m)/o);u<=Math.floor((p+m)/o);u++)for(d=Math.floor((l-m)/o);d<=Math.floor((l+m)/o);d++)if(c=u*i+d,a){for(h=0,g=n[c]*4;h<8;h++)a[g+h]=s[f+h];n[c]+=2}else n[c]++}function ji(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,f=new Float32Array(8);if(r){let m=1/0,l=1/0,p=-1/0,u=-1/0;for(o of e)for(i=0;i<o.length;i+=8)m=Math.min(m,o[i]-o[i+3]),p=Math.max(p,o[i]+o[i+3]),l=Math.min(l,o[i+2]-o[i+3]),u=Math.max(u,o[i+2]+o[i+3]);let d=Math.ceil((p-m)/s)+1,c=Math.ceil((u-l)/s)+1,h=new Uint32Array(d*c),g=new Uint32Array(d*c);Co(e,m,l,s,d,h);let y=0;for(n of h)y+=n;let x=(2+d*c+y*2)*4;if(x*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");f=new Float32Array(x),f.set([m,l,s,d,c,r,0,0]);let v=2+d*c;for(a=0;a<h.length;a++)h[a]&&(f[(2+a)*4]=g[a]=v,f[(2+a)*4+1]=h[a],v+=h[a]*2);Co(e,m,l,s,d,g,f)}return{data:f,count:r}}function Zi(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,f,m,l;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:f,flux:m}=e[o]),l=t[3]*i+t[7]*n+t[11]*a+t[15],r.set([(t[0]*i+t[4]*n+t[8]*a+t[12])/l,(t[1]*i+t[5]*n+t[9]*a+t[13])/l,(t[2]*i+t[6]*n+t[10]*a+t[14])/l,s,...f,m/(4*Math.PI)*.03],o*8);return r}function Eo(e,t,r){let o=t?.meshes.length===e.length,i=[],n=[],a,s,f,m,l,p,u;for(a=0;a<e.length;a++){for(s=e[a],f=s.worldMatrix,m=s.extras.lights,l=s._worldLights,p=!!l,u=0;u<f.length&&p;u++)p=f[u]===l.matrix[u];(!p||l.lights!==m)&&(l=s._worldLights={lights:m,matrix:[...f],data:Zi(m,f)}),o&&=t.meshes[a].mesh===s&&t.meshes[a].cache===l,i.push(l.data),n.push({mesh:s,cache:l})}return o?t:{...ji(i,r),meshes:n}}function Bo(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||[])Bo(o,t,r)}function $i(e){let{device:t,sunlight:r}=e.renderer,o=[],i=[],n;for(n of e._layers)!n.options.nightLight||!n.root.visible||Bo(n.root,o,i);let a=t.limits.maxStorageBufferBindingSize,s=Eo(o,r.staticLightGrid,a),f=Eo(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&f===r.dynamicLightGrid)return;let m=s.data.byteLength+f.data.byteLength;if(m>a)throw new Error("Streetlight grid exceeds GPU storage limit");let l=s!==r.staticLightGrid;r.lights.size<m&&(O(e,r.lights),r.lights=t.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Qt(e),l=!0),s.data[6]=s.data.length/4,l&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,f.data),r.lightCount=s.count+f.count,r.staticLightGrid=s,r.dynamicLightGrid=f}function Vi(e,t,r,o){let i=e.renderer,n=e.camera,a=n.viewMatrix,s=o?.direction,f=s?s[0]:-300,m=s?s[1]:500,l=s?s[2]:300,p=a[0]*f+a[4]*m+a[8]*l,u=a[1]*f+a[5]*m+a[9]*l,d=a[2]*f+a[6]*m+a[10]*l,c=Math.hypot(p,u,d)||1,h=Math.hypot(a[4],a[5],a[6])||1;(!i.uniformBuffer||i.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(i.uniformBuffer&&O(e,i.uniformBuffer),i.uniformBuffer=i.device.createBuffer({size:Math.max(64,t.length*4+r.length*2)*256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i.uniformData=new Float32Array(i.uniformBuffer.size/4));let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),e._roofRaster?.matrix?g.set(e._roofRaster.matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=p/c,g[49]=u/c,g[50]=d/c,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/h,g[53]=a[5]/h,g[54]=a[6]/h;let y=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=y*y*(3-2*y);let x=o?.tint;g[56]=x?x[0]:1,g[57]=x?x[1]:1,g[58]=x?x[2]:1,g[59]=0,y>0&&$i(e),i.uniformSlot=1}function kt(e,t,r,o,i){let{geometry:n,program:a}=t,s=e.renderer.device,f=a.depthTest===!1||t.ground&&e.renderer.groundOverlap?"always":"less-equal",m=`${o}:${i}:${f}`,l=a.pipelineCache.get(m);l||(l=s.createRenderPipeline({layout:a.pipelineLayout,vertex:{module:a.vertex,entryPoint:"vertexMain",buffers:a.vertexBuffers},fragment:{module:a.fragment,entryPoint:"fragmentMain",targets:[{format:e.renderer.format,blend:a.transparent?{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}:void 0,writeMask:GPUColorWrite.ALL}]},primitive:{topology:"triangle-list",cullMode:o,frontFace:i},depthStencil:{format:"depth24plus",depthWriteEnabled:a.depthWrite,depthCompare:f}}),a.pipelineCache.set(m,l));let p=a.uniforms,u=e.renderer,d=u.uniformSlot++*256,c=u.uniformData,h=d/4;c.set(t.worldMatrix,h),c.set(p.baseColor.value,h+16),c[h+19]=1,c[h+20]=p.metallic.value,c[h+21]=p.roughness.value,c[h+22]=p.opacity.value*(t.ground?t._appearance??1:1),c[h+23]=p.alphaCutoff.value,c.set(p.emissive.value,h+24),c[h+27]=p.occlusionStrength.value,c[h+28]=t.terrain?.[0]??0,c[h+29]=t.terrain?.[1]??0,c[h+30]=t.terrain?.[2]??0,c[h+31]=t.terrain?.[3]??0,c[h+32]=t.highlight?.[0]??0,c[h+33]=t.highlight?.[1]??0,c[h+34]=a.nightSparkle?c[55]:0,c[h+35]=t.ground?1:t._appearance??1;let g=t._textures||=[];g.length=0;let y,x,v,w;for(y of a.bindings){if(x=p[y.name]?.value,!x)throw new Error(`Missing Layer3D texture: ${y.name}`);x.uploaded!==x.image&&(s.queue.copyExternalImageToTexture({source:x.image,flipY:!!x.flipY},{texture:x.texture},[x.image.width,x.image.height]),x.uploaded=x.image),g.push(x)}let P=!t.bindGroup||t.boundBuffer!==u.uniformBuffer||g.length!==t.boundTextures.length;for(v=0;!P&&v<g.length;v++)(g[v].texture!==t.boundTextures[v][0]||g[v].sampler!==t.boundTextures[v][1])&&(P=!0);if(P){let z=[{binding:0,resource:{buffer:u.uniformBuffer,size:144}},{binding:1,resource:{buffer:u.uniformBuffer,size:240}}];a.terrain&&z.push({binding:2,resource:a.terrain.texture.createView()}),t.boundBuffer=u.uniformBuffer;let T=t.boundTextures||=[];for(T.length=g.length,v=0;v<g.length;v++)y=a.bindings[v],x=g[v],z.push({binding:y.texture,resource:x.texture.createView()}),z.push({binding:y.sampler,resource:x.sampler}),T[v]||=[],T[v][0]=x.texture,T[v][1]=x.sampler;t.bindGroup=s.createBindGroup({layout:a.bindGroupLayout,entries:z})}r.setPipeline(l),r.setBindGroup(0,t.bindGroup,[d]),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let M=n.attributes.instanceOffset;M&&r.setVertexBuffer(4,M.buffer);for(w of Object.values(n.attributes))w.needsUpdate&&(s.queue.writeBuffer(w.buffer,0,w.data),w.needsUpdate=!1,n.bounds=null);let S=n.attributes.index;S?(r.setIndexBuffer(S.buffer,S.indexFormat),r.drawIndexed(n.drawRange.count,M?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,M?.count??1,n.drawRange.start,0)}function qi(e,t,r){let o=e.renderer,i=t.beginRenderPass({colorAttachments:[{view:o.context.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:o.depthTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,f,m,l;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=e._roofRaster?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(f=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(f)||f===0)throw new Error("Singular 3D transform");n._frontFace=f<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}m=n._frontFace,l=n.program,l.transparent&&l._layerMaterial.doubleSided&&!n._nativeSource?(kt(e,n,i,"front",m),kt(e,n,i,"back",m)):kt(e,n,i,l.cullMode,m)}i.end()}function Hi(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a,s,f,m;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i)for(a of t){if(s=o.meshes.get(a),f=a.geometry.drawRange,!(s&&s.world===a._worldMatrixVersion&&s.geometry===a.geometry&&s.start===f.start&&s.count===f.count&&s.appearance===(a._appearance??1))){i=!1;break}for(m of Object.values(a.geometry.attributes))if(m.needsUpdate){i=!1;break}if(!i)break}return i}function Wi(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o,i,n,a,s,f,m,l,p,u,d;for(o of e){if((!o.geometry.bounds||o.geometry.attributes.position.needsUpdate)&&oe(o.geometry),i=o.geometry.bounds,n=o.worldMatrix,a=o._shadowBounds,!a||a.version!==o._worldMatrixVersion||a.bounds!==i)for(a=o._shadowBounds={version:o._worldMatrixVersion,bounds:i,min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},s=0;s<8;s++)for(f=s&1?i.max[0]:i.min[0],m=s&2?i.max[1]:i.min[1],l=s&4?i.max[2]:i.min[2],p=n[3]*f+n[7]*m+n[11]*l+n[15],u=0;u<3;u++)d=(n[u]*f+n[u+4]*m+n[u+8]*l+n[u+12])/p,a.min[u]=Math.min(a.min[u],d),a.max[u]=Math.max(a.max[u],d);for(u=0;u<3;u++)t[u]=Math.min(t[u],a.min[u]),r[u]=Math.max(r[u],a.max[u])}return t[1]=Math.min(0,t[1]),{min:t,max:r}}function Yi(e,t){let{min:r,max:o}=Wi(e),i=[],n=[],a=[],s,f,m,l,p,u;for(s=0;s<3;s++)i[s]=o[s]-r[s],n[s]=(r[s]+o[s])/2;let d=Math.max(100,Math.hypot(...i));for(s=0;s<3;s++)a[s]=n[s]+t.direction[s]*d*2;let c={position:a,target:n,up:[0,0,-1],fov:45,aspect:1,near:1,far:d*5,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};tt(c);let h=new DOMMatrix(c.viewMatrix),g=[1/0,1/0,1/0],y=[-1/0,-1/0,-1/0];for(s=0;s<8;s++){for(f=[],m=0;m<3;m++)f[m]=s&1<<m?o[m]:r[m];for(l=new DOMPoint(...f,1).matrixTransform(h),p=[l.x,l.y,l.z],m=0;m<3;m++)u=p[m],g[m]=Math.min(g[m],u-20),y[m]=Math.max(y[m],u+20)}for(s=0;s<3;s++)i[s]=y[s]-g[s];return new DOMMatrix([2/i[0],0,0,0,0,2/i[1],0,0,0,0,-1/i[2],0,-(y[0]+g[0])/i[0],-(y[1]+g[1])/i[1],y[2]/i[2],1]).multiply(h).toFloat32Array()}function Ao(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}}]}),t.depthLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}}]}),t.depthBindGroup=e.createBindGroup({layout:t.depthLayout,entries:[{binding:0,resource:{buffer:t.buffer}}]}));let i=e.createShaderModule({code:` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`}),n=[{arrayStride:12,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]}];r&&n.push({arrayStride:16,stepMode:"instance",attributes:[{shaderLocation:4,offset:0,format:"float32x4"}]}),t[o]=e.createRenderPipeline({layout:e.createPipelineLayout({bindGroupLayouts:[t.meshLayout,t.depthLayout]}),vertex:{module:i,entryPoint:"main",buffers:n},fragment:{module:i,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}})}}function Xi(e,t,r){let o=e.renderer,i=o.device,n=o.sunlight,a=t.beginRenderPass({colorAttachments:[],depthStencilAttachment:{view:n.texture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}}),s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let f,m,l,p,u,d,c;for(f of r){m=f.geometry.attributes.instanceOffset,l=m?n.instancePipeline:n.pipeline,l!==s&&(s=l,a.setPipeline(s)),p=o.uniformSlot++*256,o.uniformData.set(f.worldMatrix,p/4),o.uniformData[p/4+35]=f._appearance??1,f._shadowBuffer!==o.uniformBuffer&&(f._shadowBuffer=o.uniformBuffer,f._shadowBindGroup=i.createBindGroup({layout:n.meshLayout,entries:[{binding:0,resource:{buffer:o.uniformBuffer,size:144}}]}));for(u of Object.values(f.geometry.attributes))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,f._shadowBindGroup,[p]),a.setVertexBuffer(0,f.geometry.attributes.position.buffer),m&&a.setVertexBuffer(1,m.buffer),d=f.geometry.attributes.index,c=f.geometry.drawRange,d?(a.setIndexBuffer(d.buffer,d.indexFormat),a.drawIndexed(c.count,m?.count??1,c.start,0,0)):a.draw(c.count,m?.count??1,c.start,0)}a.end()}function er(e,t){let r=e.renderer.device,o=e.renderer.sunlight;o.size!==t&&(o.texture&&O(e,o.texture),o.size=t,o.texture=r.createTexture({size:[t,t],format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}),Qt(e))}function Ki(e,t,r,o){let i=e.renderer,n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;let p=new Float32Array(20);p.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),n.queue.writeBuffer(a.buffer,0,p),a.enabled=!1,a.cache=null;return}if(Hi(a,r,o))return;let s=new Float32Array(20);a.enabled=!0,er(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Yi(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),Ao(n,a);let f;for(f of r)if(f.geometry.attributes.instanceOffset){Ao(n,a,!0);break}Xi(e,t,r);let m=new Map,l;for(l of r)m.set(l,{world:l._worldMatrixVersion,geometry:l.geometry,start:l.geometry.drawRange.start,count:l.geometry.drawRange.count,appearance:l._appearance??1});a.cache={direction:[...o.direction],meshes:m}}var Le=new Set;function tr(e){let t=e._frame;Le.delete(e),e._frame=null,!Le.size&&t!=null&&cancelAnimationFrame(t)}function j(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function ot(e,t){e._terrainRequest?.abort();let r=e._rasterTiles.get(t);r&&(j(r,null),B(e),r.texture!==t.texture&&O(e,r.texture.texture),e._rasterTiles.delete(t))}function it(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;e._rasterTiles.get(r)===t&&(e._rasterTiles.delete(r),e._rasterVersion=(e._rasterVersion||0)+1,t.request.abort(),e._terrain3D&&ot(e._terrain3D,t),t.mesh&&j(t.mesh,null),t.texture&&O(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),B(e))}function nt(e){let t=e._wantedRasterTiles,r=performance.now();if(e._pruneVersion===e._rasterVersion&&e._pruneWanted===t&&r<e._pruneAfter)return Number.isFinite(e._pruneAfter);e._pruneVersion=e._rasterVersion,e._pruneWanted=t,e._pruneAfter=1/0;let o=[],i,n,a,s,f,m;for(i of t)n=e._rasterTiles.get(i),n?.done&&r-n.loadedAt<250&&(e._pruneAfter=Math.min(e._pruneAfter,n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of e._rasterTiles)if(!t.has(i)){s=!1;for(f of o)if(m=Math.min(f.z,n.coords.z),Math.floor(f.x/2**(f.z-m))===Math.floor(n.coords.x/2**(n.coords.z-m))&&Math.floor(f.y/2**(f.z-m))===Math.floor(n.coords.y/2**(n.coords.z-m))){s=!0;break}s||it(e,n)}return Number.isFinite(e._pruneAfter)}function Oe(e){if(tr(e),e._shared!==e||!e.renderer)return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Li(e,r),bi(e,o),Bi(e,o),ae(e.scene);let i=!1,n;for(n of e._layers)n._beforeRender&&(n._beforeRender(),i=!0);let a=t._sunlight;Ai(e,a,i);let s=e._shadowMeshes,f=e.renderer,m=Ui(e,r),l=f.frameMeshes||=[];l.length=0;let p=Ni(e,m,r,l),u=f.device.createCommandEncoder();Vi(e,l,s,a),Ki(e,u,s,a),qi(e,u,l),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit([u.finish()]);for(n of e._layers)n._wantedRasterTiles&&(p=nt(n)||p);(t._animatingZoom||p)&&B(e)}function Ji(){let e=[...Le];Le.clear();let t,r;for(r of e)if(r._frame=null,!(r._shared!==r||!r.renderer))try{Oe(r)}catch(o){t||=o}if(t)throw t}function B(e){let t=e._shared;if(!t)return e;if(t!==e)return B(t),e;if(e._frame!=null)return e;let r=Le.values().next().value;return Le.add(e),e._frame=r?r._frame:requestAnimationFrame(Ji),e}function re(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.hide();let t=[e.source._icon,e.source._shadow,e.source._image],r;for(r of e.images)t.includes(r)||(r.removeEventListener("load",Bt),r.removeEventListener("error",At),Jt(r,e),e.images.delete(r));for(r of t)!(r instanceof HTMLImageElement)||e.images.has(r)||(e.images.add(r),Ti(r,e),r.addEventListener("load",Bt),r.addEventListener("error",At));e.backend._shared&&B(e.backend)}function Z(e,t,r){let o=t._nativeGPU,n=o.originalMethods.get(e).apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof L.GridLayer){let f=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof L.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,f=e==="bringToFront"?Math.max(f,s):Math.min(f,s));let m=e==="bringToFront"?f+1:f-1;Number.isFinite(m)&&t.setZIndex(m)}return e==="bringToFront"&&(o.order=++o.map._nativeGPUOrder),e==="bringToBack"&&(o.order=--o.map._nativeGPUBack),re(o),n}function Qi(...e){return Z("setLatLng",this,e)}function ki(...e){return Z("setLatLngs",this,e)}function en(...e){return Z("addLatLng",this,e)}function tn(...e){return Z("setRadius",this,e)}function rn(...e){return Z("setStyle",this,e)}function on(...e){return Z("redraw",this,e)}function nn(...e){return Z("setIcon",this,e)}function an(...e){return Z("setUrl",this,e)}function sn(...e){return Z("setBounds",this,e)}function fn(...e){return Z("setOpacity",this,e)}function mn(...e){return Z("setZIndex",this,e)}function ln(...e){return Z("setZIndexOffset",this,e)}function pn(...e){return Z("bringToFront",this,e)}function un(...e){return Z("bringToBack",this,e)}var cn={setLatLng:Qi,setLatLngs:ki,addLatLng:en,setRadius:tn,setStyle:rn,redraw:on,setIcon:nn,setUrl:an,setBounds:sn,setOpacity:fn,setZIndex:mn,setZIndexOffset:ln,bringToFront:pn,bringToBack:un};var dn=new WeakMap;var F={renderers:dn,nextId:0};function J(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0}}function at(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function hn(e={},t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!e.roofTexture,f=!!e.terrain,m=o||i||n||a||e.nightLight,l=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${f?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${e.instanced?" + input.instanceOffset.xyz":""};${f?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${e.instanced?" + input.instanceOffset.xyz":""};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${m?"output.uv = input.uv;":""} ${s?" output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,1.0,input.normal.y >= 0.5 && !highlighted);":""} output.position = frame.projectionMatrix * viewPosition;return output;}`,p=[],u=at(p,"baseTexture",o),d=at(p,"metalTexture",i),c=at(p,"emissiveTexture",n),h=at(p,"occlusionTexture",a),g=at(p,"roofTexture",s),y=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${u}${d}${c}${h}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${m?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${e.unlit?` let rasterTexel = ${o?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${o?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${s?" if(input.roof > 0.5 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a);}":""} let mr = ${i?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${a?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${n?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}}`;return{vertex:l,fragment:y,bindings:p,textured:m,hasTerrain:f}}var gn=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";async function xn(e,t){let r,o;try{let i=await Promise.all(t),n=[];for(r of i)for(o of r.messages)o.type==="error"&&n.push(o.message);n.length&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n.join(`
|
|
2
|
-
`)}`)})}catch(i){e.fire("error",{error:i})}}function se(e,t={}){let r=hn(t,!!e.options.nightSparkle,t.terrain?gn:""),o=e.renderer.device.createShaderModule({code:r.vertex}),i=e.renderer.device.createShaderModule({code:r.fragment});xn(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[{arrayStride:12,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]},{arrayStride:12,attributes:[{shaderLocation:1,offset:0,format:"float32x3"}]},t.vertexColors?{arrayStride:12,attributes:[{shaderLocation:2,offset:0,format:"float32x3"}]}:null,r.textured?{arrayStride:8,attributes:[{shaderLocation:3,offset:0,format:"float32x2"}]}:null];t.instanced&&n.push({arrayStride:16,stepMode:"instance",attributes:[{shaderLocation:4,offset:0,format:"float32x4"}]});let a=[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}];r.hasTerrain&&a.push({binding:2,visibility:GPUShaderStage.VERTEX,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}});let s;for(s of r.bindings)a.push({binding:s.texture,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d"}}),a.push({binding:s.sampler,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}});let f=e.renderer.device.createBindGroupLayout({entries:a}),m=e.renderer.device.createPipelineLayout({bindGroupLayouts:[f,e.renderer.sunlight.layout]});return{device:e.renderer.device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:f,pipelineLayout:m,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:{baseColor:{value:t.color||[1,1,1]},metallic:{value:t.metallic??0},roughness:{value:t.roughness??.85},opacity:{value:t.opacity??1},alphaCutoff:{value:t.alphaCutoff??.5},occlusionStrength:{value:t.occlusionStrength??1},emissive:{value:t.emissive||[0,0,0]},...t.baseTexture?{baseTexture:{value:t.baseTexture}}:{},...t.metalTexture?{metalTexture:{value:t.metalTexture}}:{},...t.emissiveTexture?{emissiveTexture:{value:t.emissiveTexture}}:{},...t.occlusionTexture?{occlusionTexture:{value:t.occlusionTexture}}:{},...t.roofTexture?{roofTexture:{value:null}}:{}},_layerMaterial:t}}function Ge(e,t,r={},o=0,i){let{device:n}=e.renderer,a={},s,f,m,l,p;for([s,f]of Object.entries(t))m=new Float32Array(f),l=s==="uv"?2:3,p=n.createBuffer({size:Math.max(4,m.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o}),n.queue.writeBuffer(p,0,m),a[s]={size:l,data:m,count:m.length/l,buffer:p};let u={...J(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||se(e,{vertexColors:!0,doubleSided:!0,...r}),id:F.nextId++,renderOrder:0,extras:{}};return j(u,e.root),B(e),u}function k(e,t){if(!t)return;j(t,null),B(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}function rr(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function Q(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ue(e,t){return e.x===t.x&&e.y===t.y}function Mn(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],ue(o,i)||Math.abs(Q(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function or(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function wn(e,t){let r;for(r=1;r<t.length;r++)if(or(e,t[r]))return!0;return!1}function It(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function _n(e,t,r,o){if(ue(e,r)||ue(e,o)||ue(t,r)||ue(t,o))return!1;let i=Q(e,t,r),n=Q(e,t,o),a=Q(r,o,e),s=Q(r,o,t);return i*n<0&&a*s<0||i===0&&It(e,t,r)||n===0&&It(e,t,o)||a===0&&It(r,o,e)||s===0&&It(r,o,t)}function zo(e,t,r){let o;for(o=0;o<r.length;o++)if(_n(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function Pn(e,t,r,o){if(zo(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(zo(e,t,o[i]))return!0;return!1}function Tn(e,t,r,o){let i;for(i of e)if(!ue(i,t)&&!ue(i,r)&&!ue(i,o)&&Q(t,r,i)>=0&&Q(r,o,i)>=0&&Q(o,t,i)>=0)return!0;return!1}function Io(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function Ln(e){let t=[],r;for(r of e)t.push(r.x);return Math.min(...t)}function Sn(e){let t=new Array(e.length),r=[],o,i,n,a,s,f,m,l,p,u;for(o of e)r.push({ring:o,x:Ln(o)});let d=r,c=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)for(a=Math.min(n+i,r.length),s=Math.min(n+i*2,r.length),f=n,m=a,l=n;l<s;l++)f<a&&(m>=s||d[f].x<=d[m].x)?c[l]=d[f++]:c[l]=d[m++];p=d,d=c,c=p}for(u=0;u<e.length;u++)e[u]=d[u].ring;return e}function st(e,t=[]){let r=[e,...t].flat(),o,i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w;for(o of r)if(!Number.isFinite(o.x)||!Number.isFinite(o.y))throw new Error("Invalid polygon coordinates");let P=[];for(i=0;i<r.length;i++)o=r[i],P.push({x:o.x-e[0].x,y:o.y-e[0].y,index:i});let M=0,S=[],z=[e,...t];for(i=0;i<z.length;i++)n=z[i],a=Mn(P.slice(M,M+=n.length)),rr(a)!==!!i&&a.reverse(),S.push(a);let T=S[0].slice(),E=Sn(S.slice(1));for(s of E){for(f=void 0,m=1/0,l=0;l<s.length;l++)for(o=0;o<T.length;o++)p=s[l],u=T[o],d=(p.x-u.x)**2+(p.y-u.y)**2,!(d>=m)&&(c={x:(p.x+u.x)/2,y:(p.y+u.y)/2},!(!or(c,S[0])||wn(c,S))&&(Pn(p,u,T,S)||(f=[l,o],m=d)));if(!f)throw new Error("Unable to connect polygon hole");[h,g]=f,T=[...T.slice(0,g+1),...s.slice(h),...s.slice(0,h+1),T[g],...T.slice(g+1)]}let b=[];for(;T.length>3;){for(y=!1,x=0;x<T.length;x++)if(p=T[(x+T.length-1)%T.length],u=T[x],v=T[(x+1)%T.length],!(Q(p,u,v)<=1e-10)&&!Tn(T,p,u,v)){b.push([p.index,u.index,v.index]),T.splice(x,1),y=!0;break}if(!y)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Q(...T)>1e-10){let G=[];for(o of T)G.push(o.index);b.push(G)}let R=0,D=0;for(x=1;x<S.length;x++)R+=Io(S[x]);let U=Io(S[0])-R;for(w of b)D+=Q(P[w[0]],P[w[1]],P[w[2]])/2;if(U<=0||Math.abs(D-U)>Math.max(1e-7,U*1e-8))throw new Error("Polygon triangulation area mismatch");return b}function ve(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}function Do(e,t,r,o,i){return new L.Point(e.x+t*Math.cos(i*2*Math.PI/o),e.y+r*Math.sin(i*2*Math.PI/o))}function Ye(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)ve(e,o,t,Do(t,r,i,n,a),Do(t,r,i,n,a+1))}function Fe(e,t,r,o,i,n=0){let a=i*Math.PI*2/o;return new L.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function Ro(e,t,r,o,i){let{options:n,width:a,stroke:s,point:f}=e,m=a/2,l=t.distanceTo(r);if(!l)return;let p=r.subtract(t).divideBy(l),u=new L.Point(-p.y*m,p.x*m);n.lineCap==="square"&&(o&&(t=t.subtract(p.multiplyBy(m))),i&&(r=r.add(p.multiplyBy(m)))),ve(f,s,t.add(u),t.subtract(u),r.add(u)),ve(f,s,r.add(u),t.subtract(u),r.subtract(u)),n.lineCap==="round"&&(o&&Ye(f,t,m,s),i&&Ye(f,r,m,s))}function ir(e,t,r){let{options:o,width:i,dash:n,stroke:a,point:s}=e;if(!o.stroke||i<=0||t.length<2)return;let f=i/2,m=Number(o.dashOffset)||0,l=0,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G;for(p of n)l+=p;for(u=0;u<t.length-(r?0:1);u++){if(d=t[u],c=t[(u+1)%t.length],h=d.distanceTo(c),!n.length)Ro(e,d,c,!r&&u===0,!r&&u===t.length-2),(r||u>0)&&(o.lineJoin==="round"?Ye(s,d,f,a):(g=d.subtract(t[(u+t.length-1)%t.length]),y=Math.hypot(g.x,g.y),y&&h&&(x=g.divideBy(y),v=c.subtract(d).divideBy(h),w=x.x*v.y-x.y*v.x>0?-1:1,P=new L.Point(-x.y*w,x.x*w),M=new L.Point(-v.y*w,v.x*w),S=d.add(P.multiplyBy(f)),z=d.add(M.multiplyBy(f)),T=1+P.x*M.x+P.y*M.y,E=T>0?P.add(M).multiplyBy(f/T):null,ve(s,a,S,d,z),o.lineJoin==="miter"&&E&&Math.hypot(E.x,E.y)<=f*4&&ve(s,a,S,d.add(E),z))));else for(b=0;b<h;){for(R=((m+b)%l+l)%l,D=0;R>=n[D];)R-=n[D++];U=Math.min(h,b+n[D]-R),D%2===0&&(G=c.subtract(d).divideBy(h),Ro(e,d.add(G.multiplyBy(b)),d.add(G.multiplyBy(U)),!0,!0)),b=U}m+=h}}function Uo(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],f,m,l,p;for(f of t){m=[];for(l of f)m.push(a.project(l));s.push(m)}if(r&&o.fill&&s[0]?.length>=3){let u=[];for(f of s)f.length>=3&&u.push(f);let d=u.flat();for(p of st(u[0],u.slice(1)))ve(n,i,d[p[0]],d[p[1]],d[p[2]])}for(f of s)ir(e,f,r)}function Oo(e,t,r){if(!t.length)return;let o;if(t[0]instanceof L.LatLng)Uo(e,[t],r);else if(r&&t[0][0]instanceof L.LatLng)Uo(e,t,r);else for(o of t)Oo(e,o,r)}function bn(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Array.isArray(n.dashArray)?n.dashArray:String(n.dashArray||"").trim().split(/[ ,]+/),f=[],m,l,p;for(m of s)f.push(Number(m));let u=!0;for(m of f){if(!Number.isFinite(m)||m<0)throw new Error("Invalid Leaflet dashArray");m!==0&&(u=!1)}u&&(f.length=0),f.length%2&&f.push(...f);let d={fill:o,stroke:i,options:n,width:a,dash:f,point:r,map:t};if(e instanceof L.CircleMarker){let c=t.project(e.getLatLng()),h=e.getRadius(),g=h;if(e instanceof L.Circle){e._project();let x=e._point.add(t.getPixelOrigin());c.x=x.x,c.y=x.y,h=e._radius,g=e._radiusY||h}n.fill&&Ye(r,c,h,o,g);let y=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(h,g)))));if(f.length){let x=[];for(l=0;l<y;l++)x.push(Fe(c,h,g,y,l));ir(d,x,!0)}else if(n.stroke&&a>0)for(p=0;p<y;p++)triangle(r,i,Fe(c,h,g,y,p,a/2),Fe(c,h,g,y,p,-a/2),Fe(c,h,g,y,p+1,a/2)),triangle(r,i,Fe(c,h,g,y,p+1,a/2),Fe(c,h,g,y,p,-a/2),Fe(c,h,g,y,p+1,-a/2))}else{let c=e instanceof L.Polygon;Oo(d,e.getLatLngs(),c)}return{fill:o,stroke:i}}function nr(e,t){let r=[],o;for(o=0;o<e.length;o++)r.push(e[o]-t[o]);return r}function Dt(e,t){let r=0,o;for(o=0;o<e.length;o++)r+=e[o]*t[o];return r}function Cn(e){let t=new Array(e.length),r=e,o=t,i,n,a,s,f,m,l,p,u;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)for(a=Math.min(n+i,e.length),s=Math.min(n+i*2,e.length),f=n,m=a,l=n;l<s;l++)f<a&&(m>=s||!(r[m].distance<r[f].distance))?o[l]=r[f++]:o[l]=r[m++];p=r,r=o,o=p}if(r!==e)for(u=0;u<e.length;u++)e[u]=r[u];return e}function En(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V,ee,he,Ie,ge,De,X,xe,te,le,pe,Te,ne,Re,ye,Ue;for(s of t){f=new DOMMatrix(s.worldMatrix).inverse(),m=f.toFloat64Array();for(l of m)if(!Number.isFinite(l))throw new Error("Singular 3D transform");for(p=new DOMPoint(...e.origin,1).matrixTransform(f),u=[p.x/p.w,p.y/p.w,p.z/p.w],d=new DOMPoint(...e.direction,0).matrixTransform(f),c=[d.x,d.y,d.z],h=Math.hypot(...c)||1,c[0]/=h,c[1]/=h,c[2]/=h,s.geometry.bounds||oe(s.geometry),g=0,y=1/0,x=0;x<3;x++)if(Math.abs(c[x])<1e-12){if(u[x]<s.geometry.bounds.min[x]||u[x]>s.geometry.bounds.max[x]){y=-1/0;break}}else v=(s.geometry.bounds.min[x]-u[x])/c[x],w=(s.geometry.bounds.max[x]-u[x])/c[x],g=Math.max(g,Math.min(v,w)),y=Math.min(y,Math.max(v,w));if(!(y<g)){for({position:P,index:M,instanceOffset:S}=s.geometry.attributes,z=M?.count||P.count,T=1/0,E=void 0,x=0;x<z*(S?.count??1);x+=3)b=S?x%z:x,R=S?Math.floor(x/z)*S.size:0,D=S?.data[R]??0,U=S?.data[R+1]??0,G=S?.data[R+2]??0,$=(M?M.data[b]:b)*P.size,H=(M?M.data[b+1]:b+1)*P.size,V=(M?M.data[b+2]:b+2)*P.size,i[0]=P.data[$],i[1]=P.data[$+1],i[2]=P.data[$+2],n[0]=P.data[H],n[1]=P.data[H+1],n[2]=P.data[H+2],a[0]=P.data[V],a[1]=P.data[V+1],a[2]=P.data[V+2],S&&(i[0]=Math.fround(i[0]+D),i[1]=Math.fround(i[1]+U),i[2]=Math.fround(i[2]+G),n[0]=Math.fround(n[0]+D),n[1]=Math.fround(n[1]+U),n[2]=Math.fround(n[2]+G),a[0]=Math.fround(a[0]+D),a[1]=Math.fround(a[1]+U),a[2]=Math.fround(a[2]+G)),ee=nr(n,i),he=nr(a,i),Ie=et(c,he),ge=Dt(ee,Ie),!(s.program.cullMode==="none"||s.program.cullFace===null?Math.abs(ge)<1e-9:ge<1e-9)&&(De=nr(u,i),X=Dt(De,Ie)/ge,!(X<0||X>1)&&(xe=et(De,ee),te=Dt(c,xe)/ge,!(te<0||X+te>1)&&(s.program.nightLight&&(le=s.geometry.attributes.uv.data,pe=M?[M.data[x],M.data[x+1],M.data[x+2]]:[x,x+1,x+2],Te=le[pe[0]*2]*(1-X-te)+le[pe[1]*2]*X+le[pe[2]*2]*te,ne=le[pe[0]*2+1]*(1-X-te)+le[pe[1]*2+1]*X+le[pe[2]*2+1]*te,Te<=2&&(!r||Te*Te+ne*ne>.9))||(Re=Dt(he,xe)/ge,Re>0&&Re<T&&(T=Re,E=x/3)))));E!==void 0&&(ye=new DOMPoint(c[0]*T+u[0],c[1]*T+u[1],c[2]*T+u[2],1).matrixTransform(new DOMMatrix(s.worldMatrix)),Ue=[ye.x/ye.w,ye.y/ye.w,ye.z/ye.w],o.push({faceIndex:E,object:s,point:Ue,distance:Math.hypot(Ue[0]-e.origin[0],Ue[1]-e.origin[1],Ue[2]-e.origin[2])}))}}return Cn(o)}function Rt(e,t,r){if(t(e,r))return;let o;for(o of e.children)Rt(o,t,r)}function Bn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function ar(e,t,r=e.root.children,o=!0){if(!e.renderer)return[];e._beforeRaycast?.();let i=e._map.getContainer().getBoundingClientRect();ae(e.scene),tt(e.camera);let n=new DOMMatrix(e.camera.projectionViewMatrix).inverse(),a=n.toFloat64Array(),s,f;for(s of a)if(!Number.isFinite(s))throw new Error("Singular 3D transform");e.raycaster.origin[0]=e.camera.position[0],e.raycaster.origin[1]=e.camera.position[1],e.raycaster.origin[2]=e.camera.position[2];let m=new DOMPoint((t.clientX-i.left)/i.width*2-1,-((t.clientY-i.top)/i.height)*2+1,0,1).matrixTransform(n),l=[m.x/m.w,m.y/m.w,m.z/m.w];e.raycaster.direction[0]=l[0]-e.raycaster.origin[0],e.raycaster.direction[1]=l[1]-e.raycaster.origin[1],e.raycaster.direction[2]=l[2]-e.raycaster.origin[2];let p=Math.hypot(...e.raycaster.direction)||1;e.raycaster.direction[0]/=p,e.raycaster.direction[1]/=p,e.raycaster.direction[2]/=p;let u=[];for(f of r)o?Rt(f,Bn,u):f.geometry&&f.visible&&f._appearance!==0&&u.push(f);return En(e.raycaster,u,e.renderer.uniformData?.[55])}var Xe=new WeakMap;function An(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}function zn(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function Go(e,t=e.type,r){let o=this,i=Xe.get(o),n=i.fireDOMEvent;if(!F.renderers.get(o)?.renderer||r||!["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"].includes(t))return n.call(this,e,t,r);let s=e.target,f=s instanceof Element&&s.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");if(f&&i.hovered&&(t===i.move||t===i.out)&&(n.call(o,e,i.out,[i.hovered]),i.hovered=null,o.getContainer().style.cursor=""),f||t===i.move&&(o.dragging?.moving()||o._animatingZoom))return n.call(this,e,t,r);let m=[],l,p,u;if(t!==i.out)for(l of i.states)({source:p,backend:u}=l),!(p instanceof L.Marker||p.options.interactive===!1||!(p instanceof L.Path)&&!p.options.interactive)&&m.push(...ar(u,e,l.meshes.values(),!1));m.sort(zn);let d=m[0]?.object._nativeSource||null;return(t==="click"||t==="preclick")&&d&&o._draggableMoved(d)&&(d=null),(t===i.move||t===i.out)&&i.hovered!==d&&(i.hovered&&n.call(o,e,i.out,[i.hovered]),i.hovered=d,d&&n.call(o,e,i.over,[d]),o.getContainer().style.cursor=d?"pointer":""),n.call(this,e,t,d?[d]:void 0)}function In(e){let{map:t}=e,r=Xe.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=L.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Go,r.restore=An,Xe.set(t,r),t._fireDOMEvent=Go}r.states.add(e),e._nativeEventContext=r}function Dn(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Xe.delete(r))}function sr(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function fr(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function ce(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:sr(fr(0,e.h,e.l,n)),g:sr(fr(8,e.h,e.l,n)),b:sr(fr(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function ft(e){return e.source._nativeGPU===e&&e.map.hasLayer(e.source)}function mt(){re(this)}function Rn(e){this.order=e?++this.map._nativeGPUOrder:--this.map._nativeGPUBack,re(this)}function mr(){this.viewDirty=!0,this.backend._shared&&B(this.backend)}function lr(){let e=this,{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",mt,e),r.off("zoomend",mt,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",mr,e),Dn(e),e.refresh=e.reorder=null;let f,m,l,p,u;for([f,m]of e.methods)m.own?Object.defineProperty(t,f,m.own):delete t[f];for(l of i.values())k(o,l);i.clear();for(p of n.values())O(o,p.texture);n.clear();for(u of a)u.removeEventListener("load",Bt),u.removeEventListener("error",At),Jt(u,e);o._beforeRender=null,o.remove()}function Un(){this.ready.resolve()}function On({error:e}){this.ready.reject(e)}function Gn({error:e}){this.source.fire("error",{error:e})}function pr(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof L.GridLayer&&(t.opacity=o);let f=n?i._zIndex+(i._cameraZIndexOffset||0):i.options.zIndex;t.renderOrder=a*1e6+(f||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}async function Fn(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!ft(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,re(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function Nn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let p=n.get(t);p&&k(o,p),n.delete(t),O(o,a.texture),i.delete(t)}let f=r.naturalWidth||r.width,m=r.naturalHeight||r.height;if(!f||!m)return;let{device:l}=o.renderer;if(a={device:l,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:l.createTexture({size:[f,m],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:l.createSampler({minFilter:"linear",magFilter:"linear"})},i.set(t,a),r instanceof HTMLCanvasElement)a.pending=!0,Fn(e,t,a,r,l,f,m);else{try{l.queue.copyExternalImageToTexture({source:r},{texture:a.texture},[f,m])}catch(p){throw a.texture.destroy(),i.delete(t),p}a.uploaded=r}}return a.used=!0,a.uploaded===r?a:void 0}function ur(e,t,r,o,i,n,a){let{backend:s,source:f,meshes:m}=e;if(!r.length)return;let l=m.get(t),p=[],u;for(u=0;u<r.length;u++)p.push(u%3===1?1:0);let d={position:r,normal:p,...a?{uv:a}:{}};if(!l||l.geometry.attributes.position.data.length!==r.length||l.program.uniforms.baseTexture?.value!==n)l&&k(s,l),l=Ge(s,d,{vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",...n?{baseTexture:n}:{}},0,f instanceof L.GridLayer?e.rasterProgram:void 0),f instanceof L.GridLayer&&(e.rasterProgram||=l.program,l.texture=n),m.set(t,l);else{let c=l.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,l.geometry.bounds=null}return pr(e,l,o,i),l}function lt(e,t,r,o,i){let n=Nn(e,t,r);if(!n)return;let a=[0,2,1,1,2,3],s=[],f=[],m=[[0,0],[1,0],[0,1],[1,1]],l;for(l of a)s.push(...o[l]),f.push(...m[l]);return ur(e,t,s,[1,1,1],i,n,f)}function pt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(o.location),a=i.project(t),s=Math.cos(o.location.lat*Math.PI/180);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function cr(e,t){let r=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],o=[],i;for(i of r)o.push(pt(e,i));return o}function jn(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,f,m,l;for([i,n]of Object.entries(t._tiles||{}))!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth||(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),f=o.get(i),f&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,pr(e,f,[1,1,1],a)):([m,l]=t._tileCoordsToNwSe(n.coords),f=lt(e,i,n.el,cr(e,new L.LatLngBounds(m,l)),a)),f&&(f.renderOrder+=n.coords.z/100))}function Zn(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&<(e,"image",t._image,cr(e,t.getBounds()),t.options.opacity??1)}function $n(e,t,r){let{source:o,map:i,backend:n}=e,s=new DOMPoint(...pt(e,o.getLatLng()),1).matrixTransform(new DOMMatrix(n.root.worldMatrix)).matrixTransform(new DOMMatrix(n.camera.projectionViewMatrix)),f=new DOMMatrix(n.camera.projectionViewMatrix).inverse(),m=new DOMMatrix(n.root.worldMatrix).inverse(),l=o.options.icon.options,p=i.getSize(),u=l[t==="shadow"?"shadowSize":"iconSize"]||[r.naturalWidth,r.naturalHeight],d=u.x??u[0],c=u.y??u[1],h=t==="shadow"&&l.shadowAnchor||l.iconAnchor||[Math.floor(d/2),Math.floor(c/2)],g=new L.Point((s.x/s.w+1)*p.x/2,(1-s.y/s.w)*p.y/2),y=g.x-(h.x??h[0]),x=g.y-(h.y??h[1]),v=[[y,x],[y+d,x],[y,x+c],[y+d,x+c]],w=[],P,M,S,z,T,E,b;for([P,M]of v)S=o._cameraIconPoint(P-g.x,M-g.y),z=g.x+S.x,T=g.y+S.y,E=new DOMPoint(z/p.x*2-1,1-T/p.y*2,s.z/s.w,1).matrixTransform(f),b=new DOMPoint(E.x/E.w,E.y/E.w,E.z/E.w,1).matrixTransform(m),w.push([b.x,b.y,b.z]);return w}function Vn(e){let{source:t}=e,r,o,i;for([r,o]of[["shadow",t._shadow],["icon",t._icon]])!(o instanceof HTMLImageElement)||!o.complete||!o.naturalWidth||(i=lt(e,r,o,$n(e,r,o),t.options.opacity??1),r==="shadow"&&i&&(i.renderOrder-=100*1e6))}function qn(e,t){return pt(e,e.map.unproject(t))}function Hn(e){return qn(W.geometryPixelStates[W.geometryPixelStates.length-1],e)}function Wn(e){let{source:t}=e;W.geometryPixelStates.push(e);let r;try{r=bn(t,e.map,Hn)}finally{W.geometryPixelStates.pop()}let{fill:o,stroke:i}=r,n,a,s,f,m,l,p;for([n,a,s,f]of[["fill",o,t.options.fillColor||t.options.color,t.options.fillOpacity],["stroke",i,t.options.color,t.options.opacity]])a.length&&({r:m,g:l,b:p}=ce(s),ur(e,n,a,[m,l,p],f??1))}function dr(e){let{source:t,meshes:r,textures:o}=e;if(!ft(e)||!e.backend.renderer||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n,a;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof L.GridLayer?jn(e):t instanceof L.ImageOverlay?Zn(e):e.marker?Vn(e):Wn(e);for([a,i]of r)i._nativeUsed||(k(e.backend,i),r.delete(a),n=o.get(a),n&&O(e.backend,n.texture),o.delete(a));for([a,n]of o)n.used||(O(e.backend,n.texture),o.delete(a))}function Yn(e){try{dr(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}W.imageStates=new WeakMap;W.geometryPixelStates=[];async function Xn(e){let{source:t,map:r}=e,o=e.backend=new L.Layer({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.originalMethods=new Map,e.images=new Set,r._nativeGPUOrder||=0,r._nativeGPUBack||=0,e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=++r._nativeGPUOrder,e.marker=t instanceof L.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.refresh=re,e.reorder=Rn,e.dispose=lr,t.on("load tileload tileunload move drag",mt,e),r.on("zoomend",mt,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",mr,e),In(e);let n,a,s;for(n of["setLatLng","setLatLngs","addLatLng","setRadius","setStyle","redraw","setIcon","setUrl","setBounds","setOpacity","setZIndex","setZIndexOffset","bringToFront","bringToBack"])typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),e.originalMethods.set(n,s),t[n]=cn[n]);let f=e.ready=Promise.withResolvers();o.once("ready",Un,e),o.once("error",On,e),o.on("error",Gn,e),re(e),o.addTo(r);try{await f.promise}catch(m){throw lr.call(e),m}if(!ft(e))return t;o._beforeRender=Yn.bind(null,e);try{dr(e)}catch(m){throw lr.call(e),m}return B(e.backend),t}function Kn(e){let{source:t}=e,r=t instanceof L.Marker&&t.options.icon instanceof L.DivIcon,o=[r?null:t._icon,r?null:t._shadow],i;for(i of e.hidden)o.includes(i)||(i.classList.remove("leaflet-webgpu-target"),e.hidden.delete(i));for(i of o)!i||e.hidden.has(i)||(i.classList.add("leaflet-webgpu-target"),e.hidden.add(i))}function Jn(e){e.source._nativeGPU===e&&(e.source._nativeGPU=null),e.dispose?.();let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function Qn(e){return e.source._nativeGPU!==e?e.source:Xn(e)}function kn(e,t){e.fire("error",{error:t})}function hr(e,t){if(e._nativeGPU)return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r=e._nativeGPU={source:e,map:t,hidden:new Set};r.hide=Kn.bind(null,r),r.hide(),e.once("remove",Jn.bind(null,r)),e.ready=Promise.resolve().then(Qn.bind(null,r)),e.ready.catch(kn.bind(null,e))}var _={};function ea(){return this._cameraBearing??0}function ta(){return this._cameraPitch??0}function ut(e){_.cameraAnimations.delete(e),e._cameraAnimation=null,e._cameraFrame=null,!_.cameraAnimations.size&&_.cameraAnimationFrame!==null&&(cancelAnimationFrame(_.cameraAnimationFrame),_.cameraAnimationFrame=null)}function ra(){return ut(this),this}function gr(){let e=this.getSize().y,t=this.getPitch()*_.radians,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.cos(t)*o/(o+Math.sin(t)*r);i>0&&!this._pitchSky&&(this._pitchSky=L.DomUtil.create("div","leaflet-pitch-sky",this.getContainer()),this._pitchSky.setAttribute("aria-hidden","true"),this._pitchSky.style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),this._pitchSky&&(this._pitchSky.style.height=`${Math.max(0,Math.ceil(i))}px`,this._pitchSky.style.display=i>0?"":"none")}function oa(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");let r=this.getPitch(),o=this.getBearing();return this._cameraPitch=Math.max(0,Math.min(85,e)),this._cameraBearing=(t%360+360)%360,this._loaded&&(gr.call(this),o!==this.getBearing()&&this.fire("rotate",{bearing:this.getBearing()}),r!==this.getPitch()&&this.fire("pitch",{pitch:this.getPitch()})),this}function ia(e){_.cameraAnimationFrame=null;let t=[..._.cameraAnimations];_.cameraAnimations.clear();let r,o,i,n,a;for([o,i]of t)if(o._cameraFrame=null,o._cameraAnimation===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{o._setPitchAndBearing(i.fromPitch+(Math.max(0,Math.min(85,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&o._cameraAnimation===i?xr(o,i):o._cameraAnimation===i&&(o._cameraAnimation=null)}catch(s){r||=s}}if(r)throw r}function xr(e,t){_.cameraAnimations.set(e,t),_.cameraAnimationFrame===null&&(_.cameraAnimationFrame=requestAnimationFrame(ia)),e._cameraFrame=_.cameraAnimationFrame}function na(e,t,r={}){if(ut(this),!Number.isFinite(e)||!Number.isFinite(t))throw new TypeError("Camera angles must be finite numbers");if(!r.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return this._setPitchAndBearing(e,t);let o=r.duration??.3;if(!Number.isFinite(o)||o<0)throw new TypeError("Camera duration must be nonnegative");let i=performance.now(),n=this.getPitch(),a=this.getBearing(),s=((t-a)%360+540)%360-180,f=this._cameraAnimation={duration:o,start:i,fromPitch:n,fromBearing:a,pitch:e,delta:s};return xr(this,f),this}function aa(e,t){return this._animateCamera(this.getPitch(),e,t)}function sa(e,t){return this._animateCamera(e,this.getBearing(),t)}function fa(e={animate:!0}){return this.setBearing(0,e)}function ma(e={animate:!0}){return this._animateCamera(0,0,e)}function q(e){return Array.isArray(e)?new L.Point(e[0],e[1]):new L.Point(e.x,e.y)}function yr(e){let t=e.getBearing()*_.radians,r=e.getPitch()*_.radians;return[Math.cos(t),Math.sin(t),Math.cos(r),Math.sin(r)]}function ie(e,t,r=!1,o=!1){let i=e.getSize().divideBy(2),n=e.getSize().y*1.5;if(!n)return q(t);let[a,s,f,m]=yr(e),l=q(t).subtract(i);if(r){let c=e.getSize().y*e.options.pitchMaxDistance,h=f*n+m*l.y,g=h>0?l.y*n/h:-c;o&&(g=Math.max(-c,Math.min(c,g)));let y=l.x*(n-m*g)/n;return new L.Point(a*y+s*g,-s*y+a*g).add(i)}let p=a*l.x-s*l.y,u=s*l.x+a*l.y,d=n/(n-m*u);return new L.Point(p*d,f*u*d).add(i)}function ct(e,t,r=!1){let o=e._cameraView;if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function la(e){return ie(this,ct(this,_.mapMethods.layerPointToContainerPoint.call(this,e)))}function pa(e){return _.mapMethods.containerPointToLayerPoint.call(this,ct(this,ie(this,e,!0),!0))}function ua(){return _.mapMethods.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function ca(){let e;for(e of Object.values(this._layers))e instanceof L.Marker?e.update():(e instanceof L.Popup||e instanceof L.Tooltip)&&e._updatePosition()}function da(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ie(this,r.subtract(q(e)),!0));return _.mapMethods.panBy.call(this,o,t)}function ha(e,t,r){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof L.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),f=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(f),t,{zoom:r})}function ga(e,t={}){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.panInside.call(this,e,t);let r=q(t.paddingTopLeft||t.padding||[0,0]),o=this.getSize().subtract(q(t.paddingBottomRight||t.padding||[0,0])),i=this.latLngToContainerPoint(e),n=new L.Point(Math.max(r.x,Math.min(o.x,i.x)),Math.max(r.y,Math.min(o.y,i.y)));if(n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}function dt(e,t=[0,0]){let r=q(t).divideBy(2),o=e.getSize().subtract(r),i=[[r.x,r.y],[o.x,r.y],[r.x,o.y],[o.x,o.y]],n=[],a;for(a of i)n.push(ie(e,a,!0,!0));return new L.Bounds(n)}function xa(e,t,r){if(!r||!this._loaded||!this.getPitch()&&!this.getBearing())return _.mapMethods._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=dt(this),n=this.project(e,t),a=new L.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}function ya(e,t){if(!t||!this.getPitch()&&!this.getBearing())return _.mapMethods._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ie(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ie(this,r.subtract(n.subtract(i))))}function Fo(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function vr(e,t,r={}){t=t.getBounds?t.getBounds():t instanceof L.LatLngBounds?t:new L.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=q(r.paddingTopLeft||r.padding||[0,0]).subtract(i),s=i.subtract(q(r.paddingBottomRight||r.padding||[0,0])),[f,m,l,p]=yr(e),u=e.getSize().y*e.options.pitchMaxDistance,d=Fo(a.y,l,n,p,u),c=Fo(s.y,l,n,p,u),h=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=[],y,x,v;for(y of[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()])x=e.project(y,o).subtract(h),g.push(new L.Point(f*x.x-m*x.y,m*x.x+f*x.y));let w=1/0,P=-1/0;for(v of g)w=Math.min(w,v.y),P=Math.max(P,v.y);let M=a.x*p/n,S=s.x*p/n,z=S-M,T=1/0,E=-1/0;for(v of g)T=Math.min(T,v.x+M*v.y),E=Math.max(E,v.x+S*v.y);let b=Math.min((c-d)/(P-w),(s.x-a.x-z*d)/(E-T-z*w)),R=e.getScaleZoom(b,o),D=e.options.zoomSnap;if(D&&(R=Math.floor(Math.round(R/(D/100))/100)*D),R=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,R)),!Number.isFinite(R))return{center:t.getCenter(),zoom:R};let U=e.getZoomScale(R,o),G=P*U-c,$=w*U-d,H=Math.max(G,z?(U*(E-T)-s.x+a.x)/z:G),V=(Math.min($,H)+$)/2,ee=(U*(T+E)-a.x-s.x-(M+S)*V)/2,he=h.add(new L.Point(f*ee+m*V,-m*ee+f*V).divideBy(U));return{center:e.unproject(he,o),zoom:R}}function va(e,t){return this.getPitch()||this.getBearing()?vr(this,e,t):_.mapMethods._getBoundsCenterZoom.call(this,e,t)}function Ma(e,t,r){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.getBoundsZoom.call(this,e,t,r);if(!t)return vr(this,e,{padding:q(r||[0,0]).divideBy(2)}).zoom;e=e instanceof L.LatLngBounds?e:new L.LatLngBounds(e);let o=dt(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function wa(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(_.mapMethods.panBy.call(this,r,t),!0)}function _a(){if(!this.getPitch()&&!this.getBearing())return _.mapMethods.getBounds.call(this);let e=dt(this),t=new L.LatLngBounds,r,o;for(r of[e.min,e.max])o=_.mapMethods.containerPointToLayerPoint.call(this,ct(this,r,!0)),t.extend(this.layerPointToLatLng(o));return t}function Pa(){this.options.maxBounds&&this._panInsideMaxBounds()}function Mr(){let e=this,t=e._cameraDraggable;if(!e.getPitch()&&!e.getBearing())return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ie(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Ta(){ut(this),this._pitchSky?.remove(),this._cameraDraggable&&(this._cameraDraggable.off("predrag",Mr,this),delete this._cameraDraggable)}function La(){let e=this.dragging?._draggable;e&&(this._cameraDraggable=e,e.on("predrag",Mr,this))}async function vs(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(ys(),xs));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function me(){}function Ms(){if(!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}this._setPitchAndBearing(this.options.pitch,this.options.bearing),this.on("load resize pitch",gr),this.on("rotate pitch",Pa,this),this.once("unload",Ta,this),this.whenReady(La,this),(this.options.rotate||this.options.trackContainerMutation)&&(this.cameraReady=vs(this),this.cameraReady.catch(me))}function ws(e){e instanceof L.DivIcon||(e.options.crossOrigin||=!0);let t=_.markerMethods.setIcon.call(this,e);return this._map&&!(e instanceof L.DivIcon)&&hr(this,this._map),t}function _s(e){if(!Number.isFinite(e))throw new TypeError("Marker rotation must be finite");return this.options.rotation=e,this.update(),this._nativeGPU?.refresh?.(),this}function Ps(e,t){let r=this.options.rotation+(this.options.rotateWithView?this._map.getBearing()*_.radians:0);this.options.keepUpright&&Math.cos(r)<0&&(r+=Math.PI);let o=this.options.scale;return new L.Point((e*Math.cos(r)-t*Math.sin(r))*o,(e*Math.sin(r)+t*Math.cos(r))*o)}function Ts(){return{..._.markerMethods.getEvents.call(this),rotate:this.update,pitch:this.update,move:this.update}}function xt(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Ls(e){_.markerMethods._setPos.call(this,xt(this._map,e));let t,r,o,i,n;for([t,r]of[[this._icon,"iconAnchor"],[this._shadow,"shadowAnchor"]])t&&(o=this._cameraIconPoint(1,0),i=this.options.icon.options,n=i[r]||i.iconAnchor,t.style.transformOrigin=n?`${n.x??n[0]}px ${n.y??n[1]}px`:"center",t.style.transform+=` rotate(${Math.atan2(o.y,o.x)}rad) scale(${this.options.scale})`)}function Ss(e){_.markerMethods._updateZIndex.call(this,e);let t=this._cameraZIndexOffset!==e;this._cameraZIndexOffset=e,t&&this._nativeGPU?.refresh?.()}function bs(e){let t=this._marker._map,r=L.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);L.DomUtil.setPosition(this._marker._icon,o),this._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}function Cs(){_.markerPanFrame=null;let e=[..._.pendingMarkerPan];_.pendingMarkerPan.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Es(e,t){_.pendingMarkerPan.set(e,t),_.markerPanFrame===null&&(_.markerPanFrame=requestAnimationFrame(Cs)),e._panRequest=_.markerPanFrame}function Bs(e){let t=this._marker,r=t._map;if(!r.getPitch()&&!r.getBearing())return this._cameraOriginalAdjustPan.call(this,e);let o=L.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=q(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=new L.Point((Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a);if(!s.x&&!s.y)return;let f=r._getMapPanePos();r.panBy(s,{animate:!1});let m=f.subtract(r._getMapPanePos());this._draggable._newPos._add(m),this._draggable._startPos._add(m),L.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Es(this,e)}function As(){if(!this.dragging||this.dragging._cameraDrag)return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;e._cameraOriginalOnDrag=t,e._cameraOriginalAdjustPan=r,e._onDrag=bs,e._adjustPan=Bs,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e)),e._cameraDrag=!0}function zs(){let e=_.markerMethods._initInteraction.call(this);return As.call(this),e}function Is(){return{..._.popupEvents.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}function Ds(){return{..._.tooltipEvents.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}function Rs(){let e=this._map;if(!e.getPitch()&&!e.getBearing())return _.popupPan.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=q(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(q(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,f=t.bottom-r.top,m=Math.min(0,n-o.x)||Math.max(0,s-i.x),l=Math.min(0,a-o.y)||Math.max(0,f-i.y);if(!m&&!l)return;this.options.keepInView&&(this._autopanning=!0);let p=e.latLngToContainerPoint(this._latlng).subtract(new L.Point(m,l)),u=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(p));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(u)))}function Us(){if(_.popupPosition.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=xt(this._map,e).subtract(e);this._zoomAnimated?L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}function Os(e){_.tooltipPosition.call(this,e);let t=xt(this._map,e).subtract(e);L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(t))}function Gs(){let e=_.gridEvents.call(this);return this._cameraGridUpdate||=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),{...e,rotate:this._cameraGridUpdate,pitch:this._cameraGridUpdate}}function Fs(e){if(!this._map.getBearing()&&!this._map.getPitch())return _.tiledBounds.call(this,e);let t=this._map.getBounds();return new L.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}_.mapMethods=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Map.prototype));_.radians=Math.PI/180;_.cameraAnimations=new Map;_.cameraAnimationFrame=null;L.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});L.Map.include({getBearing:ea,getPitch:ta,_stopPitchBearingAnimation:ra,_setPitchAndBearing:oa,_animateCamera:na,setBearing:aa,setPitch:sa,resetNorth:fa,resetNorthPitch:ma,layerPointToContainerPoint:la,containerPointToLayerPoint:pa,_getCenterLayerPoint:ua,_updateCameraOverlays:ca,panBy:da,setZoomAround:ha,panInside:ga,_limitCenter:xa,_limitOffset:ya,_getBoundsCenterZoom:va,getBoundsZoom:Ma,_tryAnimatedPan:wa,getBounds:_a});L.Map.addInitHook(Ms);_.markerMethods=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Marker.prototype));L.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});L.Marker.include({setIcon:ws,setRotation:_s,_cameraIconPoint:Ps,getEvents:Ts,_setPos:Ls,_updateZIndex:Ss,_initInteraction:zs});_.pendingMarkerPan=new Map;_.markerPanFrame=null;_.popupEvents=L.Popup.prototype.getEvents;L.Popup.include({getEvents:Is});_.tooltipEvents=L.Tooltip.prototype.getEvents;L.Tooltip.include({getEvents:Ds});_.popupPosition=L.Popup.prototype._updatePosition;_.popupPan=L.Popup.prototype._adjustPan;L.Popup.include({_adjustPan:Rs,_updatePosition:Us});_.tooltipPosition=L.Tooltip.prototype._setPosition;L.Tooltip.include({_setPosition:Os});_.tiledBounds=L.GridLayer.prototype._getTiledPixelBounds;_.gridEvents=L.GridLayer.prototype.getEvents;L.GridLayer.include({getEvents:Gs,_getTiledPixelBounds:Fs});function Ot(){let e=this,t;for(t of e._zoomTransitions?.keys()||[])t.finish();e._zoomTransitions=null,e._zoomView=null,delete e._map._cameraView,e._map.getContainer().classList.remove("leaflet-camera-zoom"),e._map._updateCameraOverlays(),e._zoomLevel=null,B(e)}var Gt={};function Ns(){let e=Gt.pendingMapChanges.shift();e._queued=!1,!(e._shared!==e||!e.renderer)&&(e._map._animatingZoom?B(e):Oe(e))}Gt.pendingMapChanges=[];function Ft(){let e=this;e._queued||(e._queued=!0,Gt.pendingMapChanges.push(e),queueMicrotask(Ns))}var Nt={};function js(){let e=Nt.pendingZoomAnimations.shift();e._shared===e&&e.renderer&&Oe(e)}Nt.pendingZoomAnimations=[];function jt(e){let t=this._map;e&&!this._zoomView&&(this._zoomView={from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()},t.getContainer().classList.add("leaflet-camera-zoom")),Nt.pendingZoomAnimations.push(this),queueMicrotask(js)}function Zt(){this._zoomLevel=null}function Zs(e,t){let r=[],o;for(o=0;o<6;o++)r.push({x:e.x+Math.cos(o*Math.PI/3)*t,y:e.y+Math.sin(o*Math.PI/3)*t,ground:e.ground,uv:[3,3]});return r}function $s(e,t,r){let o=ce(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,f,m,l,p,u,d,c,h;for([a,s,f]of[[i,0,t.top],[i*2.5,t.top-.25,t.top+.15]])for(m=Zs(e,a),l=0;l<6;l++)p=m[l],u=m[(l+1)%6],d=(l+.5)*Math.PI/3,c=Math.cos(d),h=-Math.sin(d),r(p,s,u,s,u,f,c,0,h,o),r(p,s,u,f,p,f,c,0,h,o),r(n,f,p,f,u,f,0,1,0,o),r(n,s,u,s,p,s,0,-1,0,o)}function Vs(e,t,r,o,i,n,a,s){e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)}function $t(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function qs(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=ce(t.color),i;for(i=0;i<3;i++)Vs(r,o,$t(e,-1,-1,i),$t(e,1,-1,i),$t(e,1,1,i),$t(e,-1,1,i),t.top,i===0?[0,1,0]:i===1?[0,0,1]:[1,0,0])}var Ur=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Or=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Vt(e,t){let r=[],o;for(o of Or)r.push({x:e.x+o.x*t,y:e.y+o.y*t,ground:e.ground});return r}function Gr(e,t,r,o,i,n,a){let s=Vt(e,r),f=Vt(e,i),m,l,p,u,d,c,h,g,y;for(m=0;m<8;m++)l=(m+1)%8,p=(r-i)/(n-o),u=Math.hypot(1,p),{nx:d,nz:c}=Or[m],h=p/u,g=d/u,y=c/u,r&&t(s[m],o,s[l],o,f[l],n,g,h,y,a),i&&t(s[m],o,f[l],n,f[m],n,g,h,y,a)}function Hs(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:f="round"}=t;if(!Number.isFinite(n)||!Number.isFinite(a)||!Number.isFinite(s)||n<=0||a<n||s<=i||s>=o||!["round","cone"].includes(f))throw new Error("Invalid tree dimensions or crown shape");let m=ce(t.trunkColor??7491898),l=ce(t.color??5210683);Gr(e,r,n,i,n,s+(o-s)*.25,m);let p,u,d,c,h;if(f==="cone"){let g=Vt(e,a);for(p=0;p<8;p++)r(e,s,g[p],s,g[(p+1)%8],s,0,-1,0,l);Gr(e,r,a,s,0,o,l)}else for(p=1;p<Ur.length;p++)[u,d]=Ur[p-1],[c,h]=Ur[p],Gr(e,r,d*a,s+u*(o-s),h*a,s+c*(o-s),l)}function Fr(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of e._areas.values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function yt(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function Ws(e){let t=new Uint8Array(e),r={bytes:t,cursor:0},o=yt(r);if(o>(t.length-r.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=[],n=0,a,s,f;for(a=0;a<o;a++){if(n+=yt(r),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i.push({tileId:n})}for(s of i)s.runLength=yt(r);for(s of i)if(s.length=yt(r),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],f=yt(r),!f&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=f?f-1:i[a-1].offset+i[a-1].length}if(r.cursor!==t.length)throw new Error("Trailing PMTiles directory data");return i}async function Nr(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);return new Response(new Blob([e]).stream().pipeThrough(new DecompressionStream("gzip"))).arrayBuffer()}async function Ze(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(e.url,{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(e._etag&&n!==e._etag)throw new Error("PMTiles archive changed; recreate the layer");n&&(e._etag=n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}async function Ys(e,t,r,o){return Ws(await Nr(await Ze(e,t,r),o))}function Xs(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),[t,r]=[r,t]);return o}function Ks(e){if(e.byteLength<127||new TextDecoder().decode(new Uint8Array(e,0,7))!=="PMTiles"||new Uint8Array(e)[7]!==3)throw new Error("Expected a PMTiles v3 archive");let t=new DataView(e),r={},o=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"],i=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"],n=["minLon","minLat","maxLon","maxLat"],a;for(a=0;a<o.length;a++)r[o[a]]=Number(t.getBigUint64(8+a*8,!0));for(a=0;a<i.length;a++)r[i[a]]=t.getUint8(96+a);for(a=0;a<n.length;a++)r[n[a]]=t.getInt32(102+a*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}function vt(e){return e.options.archive&&e.options.archive!==e?e.options.archive.getHeader():e._header||=Ze(e,0,127).then(Ks)}async function jr(e,t,r,o,i){if(e.options.archive&&e.options.archive!==e&&e.options.archive.getZxy)return e.options.archive.getZxy(t,r,o,i);let n=Xs(t,r,o);i?.throwIfAborted();let a=await vt(e);if(i?.throwIfAborted(),t<a.minZoom||t>a.maxZoom)return;let s=a.rootDirectoryOffset,f=a.rootDirectoryLength,m=new Set,l,p,u,d,c,h,g,y,x;for(l=0;l<4;l++){if(m.has(s))throw new Error("Cyclic PMTiles directory");m.add(s),p=`${s}:${f}`,e._directories.has(p)||(e._directories.size>=32&&e._directories.delete(e._directories.keys().next().value),e._directories.set(p,Ys(e,s,f,a.internalCompression))),u=e._directories.get(p),d=void 0;try{d=await u}catch(v){throw e._directories.get(p)===u&&e._directories.delete(p),v}for(i?.throwIfAborted(),c=0,h=d.length-1;c<=h;)g=c+h>>1,d[g].tileId<=n?c=g+1:h=g-1;if(y=d[h],!y)return;if(y.runLength){if(n-y.tileId>=y.runLength)return;if(y.offset+y.length>a.tileDataLength)throw new Error("PMTiles tile outside data section");return x=await Nr(await Ze(e,a.tileDataOffset+y.offset,y.length,i),a.tileCompression),i?.throwIfAborted(),{data:x}}if(y.offset+y.length>a.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");s=a.leafDirectoryOffset+y.offset,f=y.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Js(e,t){if(e._geojson){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=await fetch(new URL(i,document.baseURI),{signal:t.request.signal});if(!n.ok)throw new Error(`Unable to load GeoJSON: HTTP ${n.status}`);return n.json()}let r=await jr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(new TextDecoder().decode(r.data)):{type:"FeatureCollection",features:[]}}var $e={};function Zr(e,t){return e.distance-t.distance}function Qs(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,f=i.project(new L.LatLng(r,t)),m=s._terrain3D?Y(s._terrain3D,[r,t]):void 0;return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(m)&&Number.isFinite(o.root.position[1])?m-o.root.position[1]:0}}function $r(e){return e.ground||0}function Ke(e,t,r,o,i,n,a,s,f,m,l){let{backend:p,positions:u,normals:d,colors:c,uvs:h}=e,g=o.x-t.x,y=i-r,x=t.y-o.y,v=n.x-t.x,w=a-r,P=t.y-n.y;if((y*P-x*w)*s+(x*v-g*P)*f+(g*w-y*v)*m<0){let M=o,S=i;o=n,i=a,n=M,a=S}u.push(t.x,r+$r(t),-t.y,o.x,i+$r(o),-o.y,n.x,a+$r(n),-n.y),d.push(s,f,m,s,f,m,s,f,m),c.push(l.r,l.g,l.b,l.r,l.g,l.b,l.r,l.g,l.b),p.options.nightLight&&h.push(...t.uv,...o.uv,...n.uv)}function ks(...e){Ke($e.triangleContexts[$e.triangleContexts.length-1],...e)}function Vr(e,t,r,o){$e.triangleContexts.push(e);try{t(r,o,ks)}finally{$e.triangleContexts.pop()}}function ef(e,t,r,o,i,n){let{backend:a}=e,{top:s}=i,f=Qs(e,r,o);if(a.options.nightLight){if(!Number.isFinite(i.lightFlux)||i.lightFlux<=0)throw new Error("Invalid light flux");let m=t.properties?.cod_ouvrag||`${r},${o}`;i.poleRadius>0&&!e.supports.has(m)&&(Vr(e,$s,f,i),e.supports.add(m)),Vr(e,qs,f,i),e.lights.push({position:[f.x,f.ground+s,-f.y],radius:Math.hypot(s,i.lightRadius),color:[n.r,n.g,n.b],flux:i.lightFlux})}else Vr(e,Hs,f,i)}function tf(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],f,m,l,p;for([f,m]of t.slice(0,-1)){if(!Number.isFinite(f)||!Number.isFinite(m))throw new Error("Invalid GeoJSON coordinates");l=o.project(new L.LatLng(m,f)),p=a._terrain3D?Y(a._terrain3D,[m,f]):void 0,s.push({x:(l.x-i.x)*n,y:(l.y-i.y)*n,ground:Number.isFinite(p)&&Number.isFinite(r.root.position[1])?p-r.root.position[1]:0})}return s}function rf(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a,s,f,m,l,p,u,d,c,h,g,y;for(a of t)n.push(tf(e,a));let x=[];for(s of n)for(f of s)x.push(f);for([m,l,p]of st(n[0],n.slice(1)))Ke(e,x[m],r,x[l],r,x[p],r,0,1,0,i),o>0&&Ke(e,x[m],o,x[l],o,x[p],o,0,-1,0,i);for(u=0;u<n.length;u++)for(s=n[u],d=rr(s)===(u===0)?-1:1,c=0;c<s.length;c++)m=s[c],l=s[(c+1)%s.length],h=Math.hypot(l.x-m.x,l.y-m.y),h&&(g=d*(l.y-m.y)/h,y=d*(l.x-m.x)/h,Ke(e,m,o,l,o,l,r,g,0,y,i),Ke(e,m,o,l,r,m,r,g,0,y,i))}function of(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=t?.geometry,s=a?.type==="Point";if(r.options.nightLight&&!s)throw new Error("Night lights require Point geometry");let f=a?.type==="Polygon"?[a.coordinates]:a?.type==="MultiPolygon"?a.coordinates:null;if(!f&&!s)throw new Error("Unsupported GeoJSON geometry");let[m,l]=(s?a.coordinates:f[0]?.[0]?.[0])??[];if(!Number.isFinite(m)||!Number.isFinite(l))throw new Error("Invalid GeoJSON coordinates");if(n){let v=i.project(new L.LatLng(l,m),n.z);if(Math.floor(v.x/256)!==n.x||Math.floor(v.y/256)!==n.y)return}let p=r.options.style(t);if(p===null){e.skipped++;return}if(!p||typeof p!="object")throw new Error("style must return an extrusion style or null");let{top:u,bottom:d=0,color:c=14267276}=p;if(!Number.isFinite(u)||!Number.isFinite(d)||d<0||u<=d)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");let h=ce(c),g=e.positions.length/3;s&&ef(e,t,m,l,p,h);let y;for(y of f||[])rf(e,y,u,d,h);let x=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(a),properties:t.properties,baseColor:h,faceStart:g/3,faceEnd:x/3,vertexStart:g,vertexEnd:x})}function nf(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=[Math.trunc(t[0]),Math.trunc(t[1]),Math.trunc(t[2])],f=new Float32Array(a),m,l,p,u,d;for(m=0;m<a;m++)f[m]=t[m]-s[m%3];let c=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(p=0;p<3;p++)c[l*4+p]=s[p]+t[d+p]-t[p];for(c[l*4+3]=l*n,m=0;m<a;m++)if(Math.fround(f[m]+c[l*4+m%3])!==Math.fround(t[d+m])||Math.fround(r[m])!==Math.fround(r[d+m])||Math.fround(o[m])!==Math.fround(o[d+m]))return e}return{positions:f,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:c}}function af(e){let{backend:t,area:r}=e;if(!e.positions.length){Object.assign(r,{mesh:null,buildings:0,skipped:e.skipped,done:!0});return}let o=t.renderer.device,i=nf(e),n={position:{size:3,data:new Float32Array(i.positions)},normal:{size:3,data:new Float32Array(i.normals)},color:{size:3,data:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:new Float32Array(e.uvs)});let a,s;for([a,s]of Object.entries(n))s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let f={device:o,attributes:n,drawRange:{start:0,count:n.position.count}};Object.assign(r,{mesh:{...J(),device:o,geometry:f,program:se(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:!!t.options.roofTexture,...t.options.nightLight?{nightLight:!0,alphaMode:"BLEND",doubleSided:!0}:{}}),id:F.nextId++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},buildings:e.featureFaces.length,skipped:e.skipped,done:!0}),j(r.mesh,t.root),B(t)}function sf(e,t,r){let o=r.options.crs,i=o.project(e.location);return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(e.location.lat*Math.PI/180),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}async function ff(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await r._terrain3D?._terrainPromise,t.request.signal.aborted)return;let i=await Js(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(e._geojson&&typeof e.options.style!="function")throw new Error("style must be a function");let n=sf(e,t,r),a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}of(n,o)}af(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{e._inflight--,qt(e,r)}}$e.triangleContexts=[];function qt(e,t=e._map){let r=t&&F.renderers.get(t);if(!r)return;let o=[],i,n,a,s;for(i of r._layers)Number.isFinite(i._inflight)&&i._areas&&(i.url||i._geojson)&&o.push(i);let f=[];for(i of o)for(n of i._areas.values())n.started||n.request.signal.aborted||(a=n.coords&&t.project(t.getCenter(),n.coords.z).divideBy(256),f.push({layer:i,area:n,distance:a?Math.hypot(n.coords.x+.5-a.x,n.coords.y+.5-a.y)/2**n.coords.z:0}));f.sort(Zr);let m=0;for(i of o)m+=i._inflight;for({layer:s,area:n}of f){if(m>=4)break;s._inflight>=2||(n.started=!0,s._inflight++,m++,ff(s,n,t))}for(i of o)Fr(i)}function Me(e,t){t?.model&&(t=null),!(e.highlightedFeature?.mesh===t?.mesh&&e.highlightedFeature?.vertexStart===t?.vertexStart)&&(e.highlightedFeature&&(e.highlightedFeature.mesh.highlight=null),e.highlightedFeature=t,t&&(t.mesh.highlight=[t.vertexStart,t.vertexEnd]),B(e))}function we(e,t,r){let o=e._tooltip;if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=e.container.getBoundingClientRect(),s=r.clientX-a.left,f=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${f+o.offsetHeight+16>a.height?f-o.offsetHeight-12:f+12}px`}else o.hidden=!0;let i=e._shared,n;if(i){let a=!1;for(n of i._layers)if(n._tooltip&&!n._tooltip.hidden){a=!0;break}a?(i._cursor===void 0&&(i._cursor=e.container.style.cursor),e.container.style.cursor="pointer"):i._cursor!==void 0&&(e.container.style.cursor=i._cursor,delete i._cursor)}}function Ve(e,t){t.request.abort();let r;if(t.mesh){e.highlightedFeature?.mesh===t.mesh&&(Me(e,null),e.hoveredFeature=null,we(e,null)),j(t.mesh,null),B(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function mf(e,t){return Math.hypot(e[1].x-e[2].x,e[1].y-e[2].y)-Math.hypot(t[1].x-t[2].x,t[1].y-t[2].y)}function qe(e){if(!e._map||!e._shared)return;if(e._geojson){e._areas.has("geojson")||e._areas.set("geojson",{request:new AbortController}),qt(e);return}if(!e.header)return;let t=e.header.minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([e.header.maxLat,e.header.minLon],t).divideBy(256).floor(),s=e._map.project([e.header.minLat,e.header.maxLon],t).divideBy(256).floor(),f=new Map,m,l,p,u,d;for(m=Math.max(0,i.x-1,a.x);m<=Math.min(2**t-1,n.x+1,s.x);m++)for(l=Math.max(0,i.y-1,a.y);l<=Math.min(2**t-1,n.y+1,s.y);l++)f.set(`${m}/${l}`,{z:t,x:m,y:l});for([p,u]of e._areas)f.has(p)||(Ve(e,u),e._areas.delete(p));let c=[];for([p,d]of f)c.push([p,d,r]);c.sort(mf);for([p,d]of c)e._areas.has(p)||e._areas.set(p,{coords:d,request:new AbortController});qt(e)}function Mt(e){if(!e.root||!e.location)return;e._terrainBaseY??=e.root.position[1];let t=e._map?._terrain3D,r=t&&Y(t,e.location),o=Number.isFinite(r)?e.options.terrainOffset??0:0;e.root.position[1]=e._terrainBaseY+(r??0)+o}var Je={};function lf(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function He(e,t,r){throw lf(r),t._rendererReady.reject(e),F.renderers.delete(r),e}async function pf(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){He(o,e,t)}return r||He(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function uf(e,t,r){try{return await e.requestDevice()}catch(o){He(o,t,r)}}function cf(e){let t=Je.rendererDevices.get(e.currentTarget),r=F.renderers.get(t);if(r?.renderer?.device!==e.currentTarget)return;let o;for(o of r._layers||[])o.fire("error",{error:e.error})}function df([e,t]){let r=Je.rendererDevices.get(t),o=F.renderers.get(r);if(!o||o.renderer?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of o._layers)n.fire("error",{error:i})}function hf(e,t,r){let o,i,n,a,s,f,m,l;if(r.geometry&&r.geometry.device!==t.renderer.device){let p=r.geometry,u=r.program._layerMaterial,d={};for(o of["position","normal","color","uv","index","instanceOffset"])i=p.attributes[o],i&&({data:n,size:a,count:s,normalized:f}=i,d[o]={data:n.slice(0,s*a),size:a,normalized:f});let c=t.renderer.device;d.index?.data instanceof Uint8Array&&(d.index.data=Uint16Array.from(d.index.data));for([o,i]of Object.entries(d))i.size||=1,i.count=i.data.length/i.size,i.indexFormat=i.data instanceof Uint32Array?"uint32":"uint16",i.buffer=c.createBuffer({size:Math.max(4,i.data.byteLength),usage:o==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),c.queue.writeBuffer(i.buffer,0,i.data);r.geometry={device:c,attributes:d,drawRange:{start:0,count:d.index?.count||d.position.count}};for(i of Object.values(p.attributes))i.buffer.destroy();r.bindGroup=null,r.boundTextures=[];for(m of["baseTexture","metalTexture","emissiveTexture","occlusionTexture"])l=u[m],!(!l||l.device===c)&&(u[m]={...l,device:c,texture:c.createTexture({size:[l.image.width,l.image.height],format:l.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:c.createSampler(l.samplerOptions),uploaded:null});r.program.pipelineCache.clear(),r.program=se(e,u),r.device=c}r.texture&&r.texture.device!==t.renderer.device&&(r.texture={...r.texture,device:t.renderer.device,texture:t.renderer.device.createTexture({size:[r.texture.image.width,r.texture.image.height],format:r.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.renderer.device.createSampler(r.texture.samplerOptions),uploaded:null})}Je.rendererDevices=new WeakMap;async function wt(e,t){let r=F.renderers.get(t);if(r?._rendererReady&&await r._rendererReady.promise,!r){r=e,e._rendererReady=Promise.withResolvers(),e._rendererReady.promise.catch(me),F.renderers.set(t,r);let m=document.createElement("canvas");navigator.gpu||He(new Error("Layer3D requires WebGPU"),e,t);let l=await pf(e,t),p=await uf(l,e,t);Je.rendererDevices.set(p,t),p.addEventListener("uncapturederror",cf),Promise.all([p.lost,Promise.resolve(p)]).then(df);let u=m.getContext("webgpu");u||(p.destroy(),He(new Error("Unable to create a WebGPU canvas context"),e,t));let d=navigator.gpu.getPreferredCanvasFormat();u.configure({device:p,format:d,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),e._shared=e,e._layers=new Set,e._sceneOrigin=e.location,e.scene=J(),e.camera={position:[0,0,0],up:[0,1,0],target:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],fov:45,aspect:1,near:.1,far:1e4},e.renderer={device:p,context:u,format:d,canvas:m,dpr:Math.min(window.devicePixelRatio,2)};let c=p.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),h=e.renderer.device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),g=e.renderer.device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),y=e.renderer.device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});e.renderer.sunlight={layout:c,buffer:h,sampler:g,lights:y,size:0};let x=new Float32Array(20);x.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),e.renderer.device.queue.writeBuffer(h,0,x),er(e,1);let v=document.createElement("canvas");v.width=1,v.height=1,e.renderer.roofFallbackTexture={device:p,texture:p.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:v,format:"rgba8unorm",srgb:!1,uploaded:null},r._size=null,m.className="leaflet-3d",m.style.cssText="position:absolute;top:0;left:0;pointer-events:none",m.setAttribute("role","img"),m.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let w=t.getPane("webgpuPane");w||(w=t.createPane("webgpuPane",t.getContainer()),w.style.zIndex=1,w.style.pointerEvents="none"),w.append(m),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,r),t.on("zoomstart",Zt,r),t.on("zoomanim",jt,r),t.on("zoomend",Ot,r),e._rendererReady.resolve(),delete r._rendererReady,Oe(r),F.renderers.set(t,r)}let o=t.options.crs.project(r._sceneOrigin),i=t.options.crs.project(e.location),n=Math.cos(r._sceneOrigin.lat*Math.PI/180);e._terrainBaseY??=e.root.position[1],e.root.position[0]=(i.x-o.x)*n,e.root.position[1]=e._terrainBaseY,e.root.position[2]=-(i.y-o.y)*n,Mt(e),e.root.scale.fill(n/Math.cos(e.location.lat*Math.PI/180)),e._shared=r,e.renderer=r.renderer,e.scene=r.scene,e.camera=r.camera,r._layers.add(e),j(e.root,r.scene);let a=[e.root],s,f;for(;a.length;)for(s=a.pop(),hf(e,r,s),f=s.children.length-1;f>=0;f--)a.push(s.children[f]);B(r),(e.header&&e._type!=="pmtiles"||e._geojson)&&qe(e)}function qr(e,t){if(!e.root||!e.camera)return null;let r,o,i,n,a,s,f;for(r of ar(e,t,e.root.children,!!e.model)){if(e.model){for(o=r.object;o&&o!==e.model;)o=o.parent;if(o===e.model)return{id:e.model.id,properties:e.model.extras,model:e.model,mesh:r.object,point:r.point}}if(i=r.object.extras?.featureFaces,!!i)for(n=0,a=i.length-1;n<=a;)if(s=n+a>>1,f=i[s],r.faceIndex<f.faceStart)a=s-1;else if(r.faceIndex>=f.faceEnd)n=s+1;else return{...f,mesh:r.object,point:r.point}}return null}function gf(e,t){let r=qr(e,t);e.hoveredFeature=r,Me(e,r),we(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Hr(e){e.hoveredFeature=null,Me(e,null),we(e,null),e.fire("featurehover",{feature:null})}function yf(e,t){e.hoveredFeature=qr(e,t),Me(e,e.hoveredFeature),we(e,e.hoveredFeature,t),e.fire("featurehover",{feature:e.hoveredFeature,originalEvent:t})}function vf(e){yf(this,e)}function Mf(e){gf(this,e)}function wf(){Hr(this)}async function _f(e,t){try{await wt(e,t),e._added.resolve()}catch(r){e.fire("error",{error:r})}}function Wr(e,t){if(!e.location){let r=t.getCenter();e.location=new L.LatLng(r.lat,r.lng)}(e.url||e._geojson||e.options.tooltip||e.modelUrl)&&(e.container=t.getContainer(),e._pointerEvents||={mousemove:vf,click:Mf,mouseleave:wf},e.options.tooltip&&(e._tooltip=L.DomUtil.create("div","leaflet-3d-tooltip",e.container),e._tooltip.hidden=!0,e._tooltip.setAttribute("role","tooltip"),e._tooltip.setAttribute("aria-live","polite"),e._tooltip.style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),L.DomEvent.on(e.container,e._pointerEvents,e)),e.root&&_f(e,t)}async function Pf(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function _t(e,t){e._added=Promise.withResolvers(),e.container&&(Hr(e),L.DomEvent.off(e.container,e._pointerEvents,e),e.container=null);let r,o,i,n;for(r of e._areas.values())Ve(e,r);e._areas.clear(),e._tooltip?.remove(),e._tooltip=null,(e.url||e._geojson)&&Fr(e,!1);let a=e._shared;if(a){if(j(e.root,null),a._layers.delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,e),t.off("zoomstart",Zt,e),t.off("zoomanim",jt,e),t.off("zoomend",Ot,e),tr(e),e._layers.size){let s=e._layers.values().next().value;for(o of["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"])s[o]=e[o],delete e[o];for(i of s._layers)i._shared=s;F.renderers.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ft,s),t.on("zoomstart",Zt,s),t.on("zoomanim",jt,s),t.on("zoomend",Ot,s),B(s)}else{e._roofRaster&&O(e,e._roofRaster.texture.texture),e._roofRaster=null;for(n of e._zoomTransitions?.keys()||[])n.play();e._zoomTransitions=null,e._zoomView=null,delete t._cameraView,t.getContainer().classList.remove("leaflet-camera-zoom");let s=e.renderer;s.canvas.remove(),Pf(s,e),F.renderers.delete(t);for(o of["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"])delete e[o]}else B(a);e._shared=e.renderer=e.scene=e.camera=null}}function Tf(e){if(!e._map)return;let t;for(t of e._areas.values())Ve(e,t);e._areas.clear(),qe(e)}function Lf(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Sf(e){let t=new DataView(e),r=new TextDecoder,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let f;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(f=s),i+=n}if(!o)throw new Error("Missing GLB JSON");f&&(o.buffers[0].binary=f)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Lf(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}function Yr(e,t){let r=new Float32Array(e.length),o,i,n,a,s,f,m,l,p,u;for(o=0;o<(t?.length||e.length/3);o+=3){for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=[],f=[],m=0;m<3;m++)s.push(e[n*3+m]-e[i*3+m]),f.push(e[a*3+m]-e[i*3+m]);l=[s[1]*f[2]-s[2]*f[1],s[2]*f[0]-s[0]*f[2],s[0]*f[1]-s[1]*f[0]];for(p of[i,n,a])for(m=0;m<3;m++)r[p*3+m]+=l[m]}for(o=0;o<r.length;o+=3)for(u=Math.hypot(...r.subarray(o,o+3))||1,m=0;m<3;m++)r[o+m]/=u;return r}function mi(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)mi(r,t)}function Pt(e,t){if(!e.model)return;let r=[];mi(e.model,r);let o,i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M;if(!t?._terrainReady||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),oe(n));return}ae(e.root);let S=e._map,z=S.options.crs,T=z.project(e._shared._sceneOrigin),E=Math.cos(e._shared._sceneOrigin.lat*Math.PI/180),b=z.scale(t._terrainZoom);for(o of r){for(n=o.geometry,f=n.attributes.position,n._terrainBasePositions||=f.data.slice(),m=n.attributes.normal,n._terrainBaseNormals||=m.data.slice(),f.data.set(n._terrainBasePositions),l=o.worldMatrix,p=new DOMMatrix(l).inverse().toFloat64Array(),u=0;u<f.data.length;u+=3)d=f.data[u],c=f.data[u+1],h=f.data[u+2],g=l[1]*d+l[5]*c+l[9]*h+l[13],y=Math.max(0,Math.min(1,1-(g-e.root.position[1])/8)),y&&(x=l[0]*d+l[4]*c+l[8]*h+l[12],v=l[2]*d+l[6]*c+l[10]*h+l[14],w=z.transformation.transform(new L.Point(T.x+x/E,T.y-v/E),b),P=Y(t,w),Number.isFinite(P)&&(M=(P-g)*y,f.data[u]+=p[4]*M,f.data[u+1]+=p[5]*M,f.data[u+2]+=p[6]*M));o.device.queue.writeBuffer(f.buffer,0,f.data),m.data.set(Yr(f.data,n.attributes.index?.data)),o.device.queue.writeBuffer(m.buffer,0,m.data),oe(n)}B(e)}async function bf(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}async function Cf(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}function Ef(e){return{addressModeU:e.wrapS===33071?"clamp-to-edge":e.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e.wrapT===33071?"clamp-to-edge":e.wrapT===33648?"mirror-repeat":"repeat",magFilter:e.magFilter===9728?"nearest":"linear",minFilter:e.minFilter===9728||e.minFilter===9984||e.minFilter===9986?"nearest":"linear"}}function Ht(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=o.renderer.device,f=`${t.index}:${r}`;if(!a.has(f)){let m=i.textures[t.index],l=i.samplers?.[m.sampler]||{},p=n[m.source],u=r?"rgba8unorm-srgb":"rgba8unorm",d=Ef(l);a.set(f,{device:s,texture:s.createTexture({size:[p.width,p.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(d),samplerOptions:d,format:u,srgb:r,image:p,flipY:!1,uploaded:null})}return a.get(f)}function Bf(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness||{};return{color:(o.baseColorFactor||[1,1,1,1]).slice(0,3),opacity:o.baseColorFactor?.[3]??1,metallic:o.metallicFactor??1,roughness:o.roughnessFactor??1,baseTexture:Ht(e,o.baseColorTexture,!0),metalTexture:Ht(e,o.metallicRoughnessTexture),emissiveTexture:Ht(e,t.emissiveTexture,!0),occlusionTexture:Ht(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function Af(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||[0,0,0,1],[n,a,s]=e.scale||[1,1,1];return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||[0,0,0],1]}var li={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var zf={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function pi(e,t,r,o,i,n,a,s,f,m){let l=e.bufferViews[a],p=t.BYTES_PER_ELEMENT,u=e.buffers[l.buffer].binary;if(m||=r*p,!u||m<r*p||s<0||(l.byteOffset||0)+l.byteLength>u.byteLength||(f-1)*m+r*p+s>l.byteLength)throw new Error("glTF accessor outside buffer view");let d,c,h;for(d=0;d<f;d++){if(c=new t(u.slice((l.byteOffset||0)+s+d*m,(l.byteOffset||0)+s+d*m+r*p)),h=n?n[d]:d,n&&h>=i)throw new Error("Invalid sparse glTF index");o.set(c,h*r)}}function ui(e,t){let r=e.accessors[t],o=li[r.componentType],i=zf[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);if(r.bufferView!==void 0&&pi(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse){let f=r.sparse,m=li[f.indices.componentType];if(![Uint8Array,Uint16Array,Uint32Array].includes(m))throw new Error("Invalid sparse glTF indices");let l=e.bufferViews[f.indices.bufferView],p=(l.byteOffset||0)+(f.indices.byteOffset||0);if(f.count>r.count||(f.indices.byteOffset||0)+f.count*m.BYTES_PER_ELEMENT>l.byteLength)throw new Error("Invalid sparse glTF indices");let u=new m(e.buffers[l.buffer].binary.slice(p,p+f.count*m.BYTES_PER_ELEMENT));pi(e,o,i,n,r.count,u,f.values.bufferView,f.values.byteOffset||0,f.count,0)}if(r.componentType===5126)return{data:n,size:i};let a=new Float32Array(n.length),s;for(s=0;s<n.length;s++)a[s]=r.normalized?Math.max(-1,n[s]/(o===Int8Array?127:o===Int16Array?32767:o===Uint8Array?255:o===Uint32Array?4294967295:65535)):n[s];return{data:a,size:i,indices:n}}function ci(e,t){let{backend:r,description:o,materials:i,active:n,resources:a}=e;if(n.has(t))throw new Error("Cyclic glTF nodes");let s=o.nodes[t];if(!s)throw new Error("Invalid glTF node");n.add(t);let f={...J(),name:s.name};f.matrix=Af(s);let m,l,p,u,d,c,h,g,y,x,v,w,P,M,S;if(s.mesh!==void 0)for(m of o.meshes[s.mesh].primitives){l={};for([p,u]of[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]])m.attributes[p]!==void 0&&(l[u]=ui(o,m.attributes[p]));if(!l.position)throw new Error("glTF mesh has no positions");if(d=l.position.data.length/3,l.position.size!==3||d<3)throw new Error("Invalid glTF vertex attributes");for(c of Object.values(l))if(c.data.length/c.size!==d)throw new Error("Invalid glTF vertex attributes");if(m.indices!==void 0){if(h=ui(o,m.indices),l.index={size:1,data:h.indices},!(h.indices instanceof Uint8Array||h.indices instanceof Uint16Array||h.indices instanceof Uint32Array)||h.size!==1||h.indices.length%3)throw new Error("Invalid glTF triangle indices");for(g of h.indices)if(g>=d)throw new Error("Invalid glTF triangle indices")}if(!l.index&&d%3)throw new Error("Incomplete glTF triangle");if(l.normal||(y=Yr(l.position.data,l.index?.data),l.normal={size:3,data:y}),x=i[m.material]||{color:[1,1,1],metallic:1},(x.baseTexture||x.metalTexture||x.emissiveTexture||x.occlusionTexture)&&!l.uv)throw new Error("Textured model mesh requires UV coordinates");v=se(r,x),a.push(v),w=r.renderer.device,l.index?.data instanceof Uint8Array&&(l.index.data=Uint16Array.from(l.index.data));for([u,c]of Object.entries(l))c.size||=1,c.count=c.data.length/c.size,c.indexFormat=c.data instanceof Uint32Array?"uint32":"uint16",c.buffer=w.createBuffer({size:Math.max(4,c.data.byteLength),usage:u==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),w.queue.writeBuffer(c.buffer,0,c.data);P={device:w,attributes:l,drawRange:{start:0,count:l.index?.count||l.position.count}},a.push(P),M={...J(),device:w,geometry:P,program:v,fadeDuration:250,id:F.nextId++,renderOrder:0},M.name=o.meshes[s.mesh].name,M.extras=s.extras||{},j(M,f)}for(S of s.children||[])j(ci(e,S),f);return n.delete(t),f}async function If(e){await e._added.promise;let t=new URL(e.modelUrl,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Sf(o),n=new URL(".",t).href,a=[],s,f,m,l,p,u,d;for(s of i.buffers||[])a.push(bf(s,n));await Promise.all(a),await e._added.promise;let c=[];for(f of i.images||[])c.push(Cf(i,n,f));let h=await Promise.all(c);await e._map?._terrain3D?._terrainPromise;let g={backend:e,description:i,images:h,textures:new Map,materials:[],active:new Set,resources:[]};for(m of i.materials||[])g.materials.push(Bf(g,m));let y=i.scenes?.[i.scene||0];if(!y)throw new Error("Missing glTF scene");let x=[];try{for(l of y.nodes)x.push(ci(g,l))}catch(w){for(p of g.resources)if(p.attributes)for(u of Object.values(p.attributes))u.buffer.destroy();else p.pipelineCache.clear();throw w}let v={...J(),id:t,extras:i.extras||{}};if(!x.length)throw new Error("Expected a glTF model with a non-empty scene");for(d of x)j(d,v);if(e.model=v,e.options.rotation){let[w,P=w,M=w]=e.options.rotation;e.model.rotation[0]=w,e.model.rotation[1]=P,e.model.rotation[2]=M}if(e.options.scale){let[w,P=w,M=w]=e.options.scale;e.model.scale[0]=w,e.model.scale[1]=P,e.model.scale[2]=M}j(e.model,e.root),Pt(e,e._map?._terrain3D)}function Df(e){let t={};return e.url&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=qe.bind(null,e)),(e._geojson||e.url)&&(t.terrainchange=Tf.bind(null,e)),t}async function Rf(e){try{e.root=J(),e.raycaster={origin:[0,0,0],direction:[0,0,0]},(e.url||e._geojson)&&(e.group=e.root,e.url&&(e.header=await vt(e))),e._map&&(await wt(e,e._map),e._added.resolve()),e.modelUrl&&await If(e),e._shared&&B(e),e.fire("ready")}catch(t){e.fire("error",{error:t})}}function _e(e,t={}){e._3d=!0,L.Util.setOptions(e,{ariaLabel:"3D scene",...t}),e.onAdd=Wr.bind(null,e),e.onRemove=_t.bind(null,e),e.getEvents=Df.bind(null,e);let r=!e._geojson&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);e.modelUrl=r?e.options.url:null,e.url=e.options.url&&!r&&!e._geojson?new URL(e.options.url,document.baseURI).href:null,e._directories=new Map,e.options.center&&(e.location=new L.LatLng(e.options.center[0],e.options.center[1])),e._areas=new Map,e._inflight=0,e._added=Promise.withResolvers(),queueMicrotask(Rf.bind(null,e))}function Uf(e){return e._loadingTiles>0}function Of(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}function Gf(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,i=new Float32Array(r*o*65536).fill(-1e9),n=1/0,a=-1/0,s,f,m,l,p,u,d,c,h;for([s,f]of e)for(m=s.split("/"),l=Number(m[0]),p=Number(m[1]),u=(p-t.min.y)*256*r*256+(l-t.min.x)*256,d=0;d<256;d++)for(c=0;c<256;c++)h=f[d*256+c],!(!Number.isFinite(h)||h<=-1e3)&&(i[u+d*r*256+c]=h,n=Math.min(n,h),a=Math.max(a,h));return{elevations:i,low:n,high:a}}function Ff(e){let t=[],r=[],o=[],i=[],n,a,s,f,m,l;for(n=0;n<=e;n++)for(a=0;a<=e;a++)t.push(a/e,0,n/e),r.push(0,1,0),o.push(a/e,n/e),n<e&&a<e&&(s=n*(e+1)+a,f=s+1,m=s+e+1,l=m+1,i.push(s,m,f,f,m,l));return{position:{size:3,data:new Float32Array(t)},normal:{size:3,data:new Float32Array(r)},uv:{size:2,data:new Float32Array(o)},index:{data:new Uint16Array(i)}}}async function Nf(e,t,r,o){if(!await e._terrainPromise||!e._map||e._map._terrain3D!==e||t._terrain3D!==e||o.request.signal.aborted||!t._rasterTiles.has(`${r.z}/${r.x}/${r.y}`)||e._rasterTiles.has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-e._terrainZoom))),a=e._map,s=a.options.crs,f=s.project(e.location),m=Math.cos(e.location.lat*Math.PI/180),l=s.scale(r.z),p=2**(e._terrainZoom-r.z),u=s.transformation.untransform(new L.Point(r.x*256,r.y*256),l),d=s.transformation.untransform(new L.Point((r.x+1)*256,(r.y+1)*256),l),c=e.renderer.device,h=o.texture;if(!e._rasterProgram||e._rasterProgram.device!==c){let E=e._terrainBounds,b=E.max.x-E.min.x+1,R=E.max.y-E.min.y+1,{elevations:D,low:U,high:G}=Gf(e._terrainTiles,E);e._dem&&O(e,e._dem.texture),e._dem={texture:c.createTexture({size:[b*256,R*256],format:"r32float",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),low:Number.isFinite(U)?U:e._terrainOriginElevation,high:Number.isFinite(G)?G:e._terrainOriginElevation},c.queue.writeTexture({texture:e._dem.texture},D,{bytesPerRow:b*1024},[b*256,R*256]),e._terrainGrids=new Map,e._rasterProgram=se(e,{baseTexture:h,unlit:!0,terrain:e._dem,alphaMode:"BLEND",depthWrite:!0})}let g=e._terrainGrids.get(n),y,x;if(!g){g=Ff(n);for([y,x]of Object.entries(g))x.size||=1,x.count=x.data.length/x.size,x.indexFormat="uint16",x.buffer=c.createBuffer({size:Math.max(4,x.data.byteLength),usage:y==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),c.queue.writeBuffer(x.buffer,0,x.data);e._terrainGrids.set(n,g)}let v=e._terrainOriginElevation,w=Math.min(e._dem.low,v)-v,P=Math.max(e._dem.high,v)-v,M=(d.x-u.x)*m,S=-(d.y-u.y)*m,z={device:c,attributes:g,drawRange:{start:0,count:g.index.count},bounds:{min:[0,w,0],max:[1,P,1],center:[.5,(w+P)/2,.5],radius:Math.hypot(M,P-w,S)/2/Math.max(M,1,S)}},T={position:[(u.x-f.x)*m,0,-(u.y-f.y)*m],rotation:[0,0,0],scale:[M,1,S],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:c,geometry:z,program:e._rasterProgram,texture:h,terrain:[r.x*256*p-e._terrainBounds.min.x*256,r.y*256*p-e._terrainBounds.min.y*256,256*p,v],tile:o,opacity:t.options.opacity??1,id:F.nextId++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0};o.mesh.visible=!1,j(T,e.root),B(e),e._rasterTiles.set(o,T)}async function Xr(e,t,r){if(e._terrain3D&&r.done&&!r.request.signal.aborted&&e._rasterTiles.get(`${t.z}/${t.x}/${t.y}`)===r)try{await Nf(e._terrain3D,e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function jf(e){let t={position:{size:3,data:new Float32Array([0,0,0,1,0,0,0,0,1,1,0,1])},normal:{size:3,data:new Float32Array([0,1,0,0,1,0,0,1,0,0,1,0])},uv:{size:2,data:new Float32Array([0,0,1,0,0,1,1,1])},index:{data:new Uint16Array([0,2,1,1,2,3])}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer({size:o.data.byteLength,usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Zf(e,t){let r=e.renderer.device,o={device:r,texture:r.createTexture({size:[t.image.width,t.image.height],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:r.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"}),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null};e._rasterProgram||(e._rasterProgram=se(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND"})),e._rasterGeometry||(e._rasterGeometry=jf(r));let{coords:i}=t,n=e._map.options.crs,a=n.project(e.location),s=Math.cos(e.location.lat*Math.PI/180),f=n.scale(i.z),m=n.transformation.untransform(new L.Point(i.x*256,i.y*256),f),l=n.transformation.untransform(new L.Point((i.x+1)*256,(i.y+1)*256),f),p=(l.x-m.x)*s,u=-(l.y-m.y)*s;t.texture=o,t.mesh={position:[(m.x-a.x)*s,0,-(m.y-a.y)*s],rotation:[0,0,0],scale:[p,1,u],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:e._rasterGeometry,program:e._rasterProgram,texture:o,opacity:e.options.opacity,id:F.nextId++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0},j(t.mesh,e.root)}async function $f(e,t){try{await e.ready;let r=await e.options.archive.getZxy(t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted)return;if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{t.image=await createImageBitmap(new Blob([r.data]))}catch{throw new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Zf(e,t),t.loadedAt=performance.now(),t.done=!0,e._rasterVersion=(e._rasterVersion||0)+1,Xr(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),B(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,e._rasterVersion=(e._rasterVersion||0)+1,e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{e._loadingTiles--,e._map&&(Kr(e),nt(e),e._loadingTiles||e.fire("load"),B(e))}}function Vf(e,t){t.started=!0;let r=e._loadingTiles===0;return e._loadingTiles++,e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),$f(e,t)}function Kr(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of e._rasterTiles.values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Of);for({tile:i}of o){if(e._loadingTiles>=4)break;Vf(e,i)}}function Qr(e){let t=e._map;if(!t||!e._shared||!e.header)return;let r=Math.max(e.header.minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));e._tileZoom=r;let o=t.getBounds(),i=t.project(o.getNorthWest(),r).divideBy(256).floor(),n=t.project(o.getSouthEast(),r).divideBy(256).floor(),a=e.header.maxLat===void 0||e.header.minLon===void 0?new L.Point(0,0):t.project([e.header.maxLat,e.header.minLon],r).divideBy(256).floor(),s=e.header.minLat===void 0||e.header.maxLon===void 0?new L.Point(2**r-1,2**r-1):t.project([e.header.minLat,e.header.maxLon],r).divideBy(256).floor(),f=t.project(t.getCenter(),r).divideBy(256).floor(),m=new Map,l,p,u,d,c,h;for(l=Math.max(0,i.x,a.x,f.x-6);l<=Math.min(2**r-1,n.x,s.x,f.x+6);l++)for(p=Math.max(0,i.y,a.y,f.y-6);p<=Math.min(2**r-1,n.y,s.y,f.y+6);p++)m.set(`${r}/${l}/${p}`,{z:r,x:l,y:p});e._wantedRasterTiles=new Set(m.keys());let g=new Map,y=Math.max(e.header.minZoom??0,r-2),x=2**(r-y);if(y<r)for([u,d]of m)e._rasterTiles.get(u)?.done||(c={z:y,x:Math.floor(d.x/x),y:Math.floor(d.y/x)},g.set(`${c.z}/${c.x}/${c.y}`,c));let v=new Map([...g,...m]);for([u,h]of e._rasterTiles)!v.has(u)&&!h.done&&it(e,h);for([u,d]of v)e._rasterTiles.has(u)||(h={coords:d,request:new AbortController,done:!1},e._rasterTiles.set(u,h));Kr(e),nt(e)}function qf(e){let t=Qr.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Hf(e,t){let r=await t.getHeader();return e.options.archive=t,e.header=r,e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Wf(e,t){throw e.fire("error",{error:t}),t}function Tt(e,t){if(e._terrain3D===t)return;let r;for(r of e._rasterTiles.values())e._terrain3D&&ot(e._terrain3D,r),r.mesh&&(r.mesh.visible=!0,j(r.mesh,e.root));if(e._terrain3D=t||null,t)for(r of e._rasterTiles.values())r.done&&Xr(e,r.coords,r)}async function Yf(e,t,r){try{await r,e._added.resolve(),Tt(e,t._terrain3D)}catch(o){e.fire("error",{error:o})}}async function Xf(e,t,r){try{await Promise.all([r,e.ready]),e._map===t&&t.hasLayer(e)&&Qr(e)}catch(o){e.fire("error",{error:o})}}function Kf(e,t){e.location||(e.location=t.getCenter());let r=wt(e,t);Yf(e,t,r),Xf(e,t,r)}function Jf(e){let t,r;for(t of e._rasterTiles.values())it(e,t);if(e._rasterProgram?.pipelineCache.clear(),e._rasterProgram=null,e._rasterGeometry){for(r of Object.values(e._rasterGeometry.attributes))O(e,r.buffer);e._rasterGeometry=null}}function Qf(e,t){Jf(e),e._terrain3D=null,_t(e,t)}function kf(e,t){let r,o;for(r of e._rasterTiles.values())r.mesh&&(r.mesh.opacity=t),o=e._terrain3D?._rasterTiles.get(r),o&&(o.opacity=t);B(e)}function em(e,t){return e.options.opacity=t,kf(e,t),e}function tm(e,t){let r,o;for(r of e._rasterTiles.values())r.mesh&&(r.mesh.renderOrder=t),o=e._terrain3D?._rasterTiles.get(r),o&&(o.renderOrder=t);B(e)}function rm(e,t){return e.options.zIndex=t,tm(e,t),e}function om(e,t){e._read=Ze.bind(null,e),e.getHeader=vt.bind(null,e),e.getZxy=jr.bind(null,e),e.getTileSize=rt,e.isLoading=Uf.bind(null,e),e.setOpacity=em.bind(null,e),e.setZIndex=rm.bind(null,e),e.onAdd=Kf.bind(null,e),e.onRemove=Qf.bind(null,e),e.getEvents=qf.bind(null,e),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},L.Util.setOptions(e,t),e.root=J(),e._areas=new Map,e._rasterTiles=new Map,e._loadingTiles=0,e._added=Promise.withResolvers(),e.url=new URL(t.url,document.baseURI).href,e._directories=new Map,e.ready=Promise.resolve(e.options.archive||e).then(Hf.bind(null,e)).catch(Wf.bind(null,e))}function im(e,t){e.options.data=t,delete e.options.url;let r;for(r of e._areas.values())Ve(e,r);return e._areas.clear(),qe(e),e}function nm(e){e._type==="pmtiles"&&Tt(e,null)}function am(e,t){e._terrainController?.abort(),e._terrainLoading=!1,e._terrainReady=!1,t.eachLayer(nm);let r,o,i,n;for(r of e._rasterTiles.keys())ot(e,r);t._terrain3D===e&&delete t._terrain3D;for(o of Object.values(t._layers))Pt(o,null),Mt(o);t.fire("terrainchange"),e._terrainTiles.clear(),e._terrainOriginElevation=0,e._terrainPromise=null,e._rasterProgram&&e._rasterProgram.pipelineCache.clear(),e._rasterProgram=null,e._dem&&O(e,e._dem.texture),e._dem=null;for(i of e._terrainGrids?.values()||[])for(n of Object.values(i))O(e,n.buffer);e._terrainGrids=null,e._bridges=null,k(e,e._bridgeMesh),e._bridgeMesh=null,_t(e,t)}function sm([e,t,r],o,i,n,a){let s=o.project(new L.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function kr(e,t,r,o,i){e.push(...o),t.push(...i),r.push(.6,.58,.54)}function Wt(e){return[e[0],e[1]-1.2,e[2]]}function fm(e,t){let r=e._map,o=r.options.crs,i=e._terrainZoom,n=o.project(e.location),a=Math.cos(e.location.lat*Math.PI/180),s=e.root.position[1],f=[],m=[],l=[];e._bridges=new Map;let p,u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V,ee,he,Ie,ge,De,X,xe,te,le,pe,Te,ne,Re,ye,Ue;for({geometry:p}of t.features){u=p.type==="Polygon"?[p.coordinates]:p.type==="MultiPolygon"?p.coordinates:[];for(d of u){c=[];for(h of d)g=h.slice(0,-1),g.length>=3&&c.push(g);if(c.length){y=[],x=[];for(h of c)for([v,w,P]of h)M=r.project([w,v],i),y.push([M.x,M.y,P]);for(h of c)for(S of h)x.push(sm(S,o,n,a,s));z=void 0;try{T=[],E=0;for(h of c){for(g=[],b=0;b<h.length;b++)g.push({x:y[E+b][0],y:y[E+b][1]});T.push(g),E+=h.length}[R,...D]=T,z=st(R,D)}catch{continue}U=[],G=[],$=[];for(H of z){V=[];for(b of H)V.push(y[b]);U.push(V)}for(M of y)G.push(M[0]),$.push(M[1]);for(ee={triangles:U,min:[Math.min(...G),Math.min(...$)],max:[Math.max(...G),Math.max(...$)]},he=Math.floor(ee.min[0]/64);he<=Math.floor(ee.max[0]/64);he++)for(Ie=Math.floor(ee.min[1]/64);Ie<=Math.floor(ee.max[1]/64);Ie++)ge=`${he}/${Ie}`,e._bridges.set(ge,[...e._bridges.get(ge)||[],ee]);for([De,X,xe]of z){[te,le,pe]=[x[De],x[X],x[xe]],(le[2]-te[2])*(pe[0]-te[0])-(le[0]-te[0])*(pe[2]-te[2])<0&&([X,xe]=[xe,X]);for(b of[De,X,xe])kr(f,m,l,x[b],[0,1,0]);for(b of[De,xe,X])kr(f,m,l,Wt(x[b]),[0,-1,0])}Te=0;for(h of c){for(b=0;b<h.length;b++){M=x[Te+b],ne=x[Te+(b+1)%h.length],Re=Math.hypot(ne[0]-M[0],ne[2]-M[2])||1,ye=[(ne[2]-M[2])/Re,0,-(ne[0]-M[0])/Re];for(Ue of[M,ne,Wt(ne),M,Wt(ne),Wt(M)])kr(f,m,l,Ue,ye)}Te+=h.length}}}}f.length&&(e._bridgeMesh=Ge(e,{position:f,normal:m,color:l}))}async function mm(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await r.getZxy(n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);t._terrainTiles.set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function lm(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}async function eo(e){if(e._terrainLoading||!e._map)return;e._terrainLoading=!0,e._terrainReady=!1;let t=e._terrainController=new AbortController,r,o,i,n;try{if(!e.terrainSource)throw new Error("Terrain layer requires a PMTiles elevation archive");let a=e._terrainArchive=new L.Layer({source:{type:"pmtiles",url:e.terrainSource}});await a.ready;let s=a.header;if(s.tileType!==0||s.minZoom!==s.maxZoom)throw new Error("Expected a single-zoom Float32 PMTiles terrain archive");e._terrainZoom=s.maxZoom;let f=e._map,m=f.project([s.maxLat,s.minLon],e._terrainZoom).divideBy(256).floor(),l=f.project([s.minLat,s.maxLon],e._terrainZoom).divideBy(256).floor();e._terrainBounds=new L.Bounds(m,l);let p=[],u=f.project(f.getCenter(),e._terrainZoom).divideBy(256);for(r=m.x;r<=l.x;r++)for(o=m.y;o<=l.y;o++)p.push({z:e._terrainZoom,x:r,y:o,distance:Math.hypot(r+.5-u.x,o+.5-u.y)});p.sort(Zr);let d={backend:e,archive:a,controller:t,tiles:p,next:0},c=[];for(i=0;i<Math.min(4,p.length);i++)c.push(mm(d));await Promise.all(c);let h=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(lm);if(t.signal.aborted||e._map!==f)return;e._terrainReady=!0,e._terrainOriginElevation=Y(e,e.location)??0;for(n of Object.values(f._layers))Mt(n),Pt(n,e);return h&&fm(e,h),f.fire("terrainchange"),B(e),e.fire("terrainready"),!0}catch(a){return t.signal.aborted||e.fire("error",{error:a}),!1}finally{e._terrainLoading=!1}}function pm(){eo(this.backend).then(this.resolve,this.reject)}function um(e){e._type==="pmtiles"&&Tt(e,this)}function cm(e,t){if(t._terrain3D&&t._terrain3D!==e)throw new Error("Only one terrain layer can be active per map");if(t._terrain3D=e,Wr(e,t),e.root)e._terrainPromise=eo(e);else{let r=Promise.withResolvers();e._terrainPromise=r.promise,e.once("ready",pm,{backend:e,...r})}t.eachLayer(um,e),t.fire("terrainchange")}function dm(e,t){let r=t.url,o={...t};delete o.url,_e(e,o),e.terrainSource=r,e._terrainTiles=new Map,e._rasterTiles=new Map,e._terrainReady=!1,e.onAdd=cm.bind(null,e),e.onRemove=am.bind(null,e)}function to(e,t,r){let o=[],i;for(i=0;i<e.length;i++)o.push(e[i]+(t[i]-e[i])*r);return o}function di(e){let t=[],r;for(r of e)t.push(Math.round(r));return`rgb(${t.join(", ")})`}function hm(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]],r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${di(to(n[1],i[1],a))}, ${di(to(n[2],i[2],a))})`,tint:to(n[3],i[3],a)}}function ro(e,t,r,o,i){let n=Math.PI/180,a=(280.16+360.9856235*e+r)*n-o,s=t*n,f=Math.asin(Math.sin(s)*Math.sin(i)+Math.cos(s)*Math.cos(i)*Math.cos(a)),l=(Math.atan2(Math.sin(a),Math.cos(a)*Math.sin(s)-Math.tan(i)*Math.cos(s))/n+180+360)%360;return{altitude:f/n,azimuth:l,direction:[Math.sin(l*n)*Math.cos(f),Math.sin(f),-Math.cos(l*n)*Math.cos(f)]}}function oo(e,t,r){let o=new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");let i=Math.PI/180,n=o/864e5-10957.5,a=(357.5291+.98560028*n)*i,s=a+(1.9148*Math.sin(a)+.02*Math.sin(2*a)+3e-4*Math.sin(3*a)+102.9372+180)*i,f=23.4397*i,m=Math.asin(Math.sin(s)*Math.sin(f)),l=Math.atan2(Math.sin(s)*Math.cos(f),Math.cos(s));return ro(n,t,r,l,m)}function gm(e,t,r){oo(e,t,r);let o=Math.PI/180,i=new Date(e).getTime()/864e5-10957.5,n=(134.963+13.064993*i)*o,a=(218.316+13.176396*i+6.289*Math.sin(n))*o,s=5.128*Math.sin((93.272+13.22935*i)*o)*o,f=23.4397*o,m=Math.cos(s)*Math.cos(a),l=Math.cos(s)*Math.sin(a)*Math.cos(f)-Math.sin(s)*Math.sin(f),p=Math.cos(s)*Math.sin(a)*Math.sin(f)+Math.sin(s)*Math.cos(f);return ro(i,t,r,Math.atan2(l,m),Math.asin(p))}function xm(e,t,r,o){let[i,n,a]=e,s=-i*Math.sin(o)*Math.sin(r)-n*Math.cos(r)-a*Math.cos(o)*Math.sin(r);return s>0?{left:t.x/2+t.y*1.5*(i*Math.cos(o)-a*Math.sin(o))/s,top:t.y/2-t.y*1.5*(-i*Math.sin(o)*Math.cos(r)+n*Math.sin(r)-a*Math.cos(o)*Math.cos(r))/s}:null}function Se({map:e,originalSky:t,sunDisc:r,moonDisc:o}){let i=e._sunlight,n=e._pitchSky;i?e.getContainer().style.setProperty("--leaflet-sky-background",i.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let a=e.getSize(),s=e.getPitch()*Math.PI/180,f=e.getBearing()*Math.PI/180,m,l,p,u,d;for([m,l]of[[r,i],[o,i?.moon]])m.hidden=!0,!(!n||!l||l.altitude<=0||!i)&&(m.parentNode!==n&&n.append(m),p=xm(l.direction,a,s,f),p&&({left:u,top:d}=p,m.hidden=u<0||u>a.x||d<0||d>n.clientHeight||n.style.display==="none",m.style.left=`${u}px`,m.style.top=`${d}px`))}function Qe(e){let t=F.renderers.get(e);t&&B(t)}function We(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let f=r.getCenter(),m=r._sunlight=oo(t.time,f.lat,f.lng);Object.assign(m,hm(m.altitude)),m.moon=gm(t.time,f.lat,f.lng),a.textContent=m.altitude<=0?"Night \xB7 no direct sunlight":m.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${m.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Se(e),Qe(r)}catch(s){delete r._sunlight,Se(e),Qe(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function ym(e){e.control.live=!0,We(e)}function vm(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),delete r._sunlight,Se(e),Qe(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),We(e)}function Mm(e){e.control.live&&We(e)}function wm(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e;clearInterval(r),delete t._timeControl,t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),delete t._sunlight,Se(e),o.remove(),i.remove(),Qe(t)}function _m(e,t){t._timeControl=e;let r=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),o="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",i=L.DomUtil.create("div","sunlight-sun"),n=L.DomUtil.create("div","sunlight-moon");i.style.cssText=o+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",n.style.cssText=o+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",i.setAttribute("role","img"),i.setAttribute("aria-label","Sun"),n.setAttribute("role","img"),n.setAttribute("aria-label","Moon");let a=L.DomUtil.create("div","sunlight-control");a.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let s=document.createElement("input");s.type="date",s.style.cssText="width:100%;box-sizing:border-box;",s.setAttribute("aria-label","Solar date (UTC)");let f=document.createElement("input");f.type="range",f.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",f.min="0",f.max="1439",f.step="1",f.setAttribute("aria-label","Time of day (UTC)");let m=document.createElement("output");m.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",m.setAttribute("aria-live","off");let l=document.createElement("button");l.type="button",l.textContent="Now";let p=document.createElement("div");p.className="sunlight-time",p.style.cssText="display:flex;justify-content:space-between;align-items:center;",p.append(m,l);let u=document.createElement("div");u.className="sunlight-status",u.style.marginTop="5px",u.setAttribute("role","status");let d=document.createElement("small");d.style.color="#555",d.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",a.append(s,f,p,u,d);let c={control:e,map:t,originalSky:r,sunDisc:i,moonDisc:n,date:s,slider:f,output:m,status:u};return c.update=We.bind(null,c),c.updateSky=Se.bind(null,c),l.onclick=ym.bind(null,c),s.onchange=f.oninput=vm.bind(null,c),L.DomEvent.disableClickPropagation(a),L.DomEvent.disableScrollPropagation(a),c.update(),c.timer=setInterval(Mm,6e4,c),t.on("moveend",c.update),t.on("move rotate pitch resize",c.updateSky),e.onRemove=wm.bind(null,c),a}var Lt={};function Pm(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===L.Util.stamp(t)||i instanceof L.LayerGroup&&i.hasLayer(t))return o.closest("label").after(r),!0;return!1}function io(e){let t=Pm(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}function Tm(){let e=Lt.pendingPlacements.shift();e?.map.hasLayer(e.layer)&&io(e)}function no(){Lt.pendingPlacements.push(this),queueMicrotask(Tm)}function Lm(){this.map.off("layeradd layerremove",no,this),this.element.remove()}Lt.pendingPlacements=[];function ao(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",no,o),e.once("remove",Lm,o),io(o)}function Sm(e){return this.control.addTo(e)}function bm(){return L.Control.prototype.remove.call(this.control)}function Cm(e){L.Util.setOptions(this,e),this.live=!0,this.layer=new L.Layer,this.layer.control=this,this.layer.onAdd=Sm,this.layer.onRemove=bm}function Em(e){return _m(this,e)}function hi(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),Object.assign(e.style,t?{background:"",padding:"2px 0 6px 20px",margin:"0"}:{background:"#fff",padding:"8px",margin:""})}function Bm(e){L.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?ao(this.layer,t,hi.bind(null,t)):hi(t,!1),this}function Am(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):L.Control.prototype.remove.call(this)}L.Control.Time=L.Control.extend({options:{position:"bottomright"},initialize:Cm,onAdd:Em,addTo:Bm,remove:Am});function Yt(e,t,r,o,i,n,a){let s=[],f=[],m,l,p;for(m=0;m<i.length;m++)s.push(i[m]-o[m]);for(m=0;m<n.length;m++)f.push(n[m]-o[m]);let u=[s[1]*f[2]-s[2]*f[1],s[2]*f[0]-s[0]*f[2],s[0]*f[1]-s[1]*f[0]],d=Math.hypot(...u);for(l of[o,i,n]){e.push(...l);for(p of u)t.push(p/d);r.push(...a)}}function St(e){let t=[],r=[],o=[],i,n,a,s,f,m,l,p,u,d,c;for([i,n,a,s,f=i]of e){m=[],l=[];for([p,u]of i)m.push([p,n,u]);for([p,u]of f)l.push([p,a,u]);for(d=0;d<i.length;d++)c=(d+1)%i.length,Yt(t,r,o,m[d],m[c],l[c],s),Yt(t,r,o,m[d],l[c],l[d],s);for(d=1;d<i.length-1;d++)Yt(t,r,o,l[0],l[d],l[d+1],s),Yt(t,r,o,m[0],m[d+1],m[d],s)}return{position:t,normal:r,color:o}}function zm({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=[],o;for(o of[e.name,e.departure&&`Departure ${e.departure} ${e.timetable.timeZone}`,e.description])o&&r.push(o);return t.textContent=r.join(`
|
|
3
|
-
`),t}function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var ke=[.12,.15,.18];var bt=[.05,.05,.05];function be(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}var Ce=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var so=[1.9,1.85,1.7];var fo=[1.7,.06,.05];function Im(e){let t=Ce[e%Ce.length];return[...be(.7,.92,-1.68,-1.02,0,.64,bt),...be(.7,.92,1.02,1.68,0,.64,bt),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,ke,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...be(.38,.8,-2.3,-2.16,.56,.76,so),[C(-.78,.78,2.16,2.3),.6,.76,fo]]}var gi=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];var Pe=[.92,.93,.92];function Dm(){let e=[],t;for(t=0;t<12;t++)e.push(...be(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Rm(){return[[gi,0,.8,[.1,.16,.26]],[gi,.8,1.4,Pe],[C(-5,5,-18,26),1.4,3.7,ke,C(-4.6,4.6,-17.4,25.6)],...be(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Pe],...Dm(),...be(4.65,4.8,-13.6,25.8,3.9,4.8,Pe),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Pe],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Pe],[C(-2.2,2.2,-17.6,-14),4.7,5.5,ke],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Pe],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Pe],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}function Ct(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}function Et(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,ke],[C(-1.25,1.25,o,i),2.65,3.1,Pe],[C(-1.15,-.85,o+1,o+2),0,.7,bt],[C(.85,1.15,i-2,i-1),0,.7,bt],[C(-.9,.9,o-.03,o),.8,1.05,so],[C(-.9,.9,i,i+.03),.8,1.05,fo]]}function Um(e,t){return Et(0,12,Ct(t))}function Om(e,t){let r=Ct(t),o=[],i;for(i=0;i<5;i++)o.push(...Et((i-2)*6.5,6,r));return o}function Gm(e,t){let r=Ct(t),o=[],i;for(i=0;i<5;i++)o.push(...Et((i-2)*15,14,r));return o}var de=[.85,.64,.5];var Ee=[.16,.2,.32];var Be=[.08,.07,.06];function Fm(e){let t=Ce[e%Ce.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Be],[C(-.045,.045,.25,.85),.02,.62,Be],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Be],[C(-.1,.1,.15,.4),.85,.92,Be],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,de],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,de],[C(.15,.25,-.5,-.05),1,1.25,de],[C(-.2,-.08,0,.32),.3,1,Ee],[C(.08,.2,-.25,.07),.3,1,Ee]]}var xi=[.75,.2,.15];var mo={body:[[C(-.17,.17,-.1,.1),.82,.95,Ee],[C(-.19,.19,-.11,.11),.95,1.44,xi],[C(-.05,.05,-.05,.05),1.44,1.5,de],[C(-.1,.1,-.11,.1),1.5,1.72,de],[C(-.105,.105,-.06,.115),1.58,1.77,Be],[C(-.105,.105,-.115,-.06),1.7,1.77,Be]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ee],[C(-.07,.07,-.17,.07),-.9,-.82,Be]],arm:[[C(-.05,.05,-.05,.05),-.55,0,xi],[C(-.045,.045,-.045,.045),-.66,-.55,de]]};function Nm(e){let t=mo.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Ce[e%Ce.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ee],[C(.02,.16,-.07,.07),.08,.9,Ee],[C(-.3,-.2,-.05,.05),.76,1.42,de],[C(.2,.3,-.05,.05),.76,1.42,de]),t}var jm={bicycle:{side:.4,model:Fm},pedestrian:{side:.3,model:Nm},bus:{side:1.5,model:Um},tram:{side:0,model:Om},metro:{side:0,model:Gm},car:{side:1.8,model:Im,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Rm,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Zm=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function $m(e,t,r){let o=1,i=t.length-1,n;for(;o<i;)n=o+Math.floor((i-o)/2),t[n]<r?o=n+1:i=n;let a=e[o-1],s=e[o],f=t[o]-t[o-1]||1,m=(r-t[o-1])/f;return{x:a[0]+(s[0]-a[0])*m,y:(a[2]??0)+((s[2]??0)-(a[2]??0))*m,z:a[1]+(s[1]-a[1])*m,dx:(s[0]-a[0])/f,dz:(s[1]-a[1])/f}}function lo(e,t){let{points:r,lengths:o,length:i}=t.lane,n=t.distance+e.elapsed*t.speed;n-=i*Math.floor(n/i);let{x:a,y:s,z:f,dx:m,dz:l}=$m(r,o,n);return{x:a-l*e.side,y:s,z:f+m*e.side,dx:m,dz:l}}function po(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o,i,n,a,s,f,m,l,p,u,d,c,h;for(o=0;o<e.trips.length;o++)for(i=e.trips[o],{x:n,y:a,z:s,dx:f,dz:m}=lo(e,i),l=0,p=o*e.stride;l<e.stride;l+=3,p+=3)u=e.template.position[l],d=e.template.position[l+2],c=e.template.normal[l],h=e.template.normal[l+2],t.data[p]=n-u*m-d*f,t.data[p+1]=a+e.template.position[l+1],t.data[p+2]=s+u*f-d*m,r.data[p]=-c*m-h*f,r.data[p+1]=e.template.normal[l+1],r.data[p+2]=c*f-h*m}function uo(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),ao(e.layer,e.status),e.update()}function Vm(e){e.layer._beforeRaycast=po.bind(null,e),e.ready&&uo(e)}function Ae(e,t){t&&(e.layer.highlightedFeature?.mesh===t&&(Me(e.layer,null),e.layer.hoveredFeature=null,we(e.layer,null)),k(e.layer,t))}function co(e){let t;for(t of[e.gpu?.params,e.gpu?.template,e.gpu?.points,e.gpu?.vehicles])t?.destroy();e.gpu=null}function qm(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),Ae(e,e.mesh),Ae(e,e.route),e.mesh=e.route=null,delete e.layer._beforeRaycast,co(e),e.lanes=[],e.trips=[],e.tripsKey=e.loaded=null}function Hm(e){e.ready=!0,e.layer._map&&uo(e)}function Wm(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}function vi(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function Ym(e,t){return e-t}function Xm(e,{timeZone:t,duration:r,services:o}){let i=new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),a={},s,f,m,l,p,u,d;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let c=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,h=new Date(Date.UTC(a.year,a.month-1,a.day)).getUTCDay(),g=[];for({from:f,to:m,every:l=1/0,months:p,weekdays:u}of o)if(!(p?.includes(a.month)===!1||u?.includes(h)===!1))for(d=vi(f);d<=vi(m);d+=l)g.push(d);g.sort(Ym);let y=[];for(d of g)c>=d&&c<d+r&&y.push({id:`${a.year}-${a.month}-${a.day}-${d}`,departure:`${String(Math.floor(d/60)).padStart(2,"0")}:${String(d%60).padStart(2,"0")}`,progress:(c-d)/r});return y}function Km(e,t,r){let o=[],i,n,a,s,f,m,l,p;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(f of Xm(e,a))o.push({id:`${i}-${f.id}`,lane:n,distance:f.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:f.departure}});else for(m=e/1e3*r,l=n.offsets||=Wm(n.length,s,r),p=0;p<l.length;p++)o.push({id:`${i}-${p}`,lane:n,distance:(l[p]+m)%n.length,speed:r,properties:n.properties});return o}function ho(e){let t=e.layer._map?._timeControl||{live:!0};return{live:t.live,time:t.live?new Date:t.time}}function go(e,t){e.error=t,e.status.textContent=`Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}function Jm(e){let t=[],r=[],o=[],i,n,a,s,f,m,l,p,u,d,c,h,g,y,x,v,w,P,M,S;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,f=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,m=f===null?[.08,.7,.85]:[(f>>16&255)/255,(f>>8&255)/255,(f&255)/255],l=1;l<i.length;l++)if(p=i[l-1],u=i[l],d=u[0]-p[0],c=u[1]-p[1],h=n[l]-n[l-1],!!h){for(g=-c/h*2.5,y=d/h*2.5,x=Math.floor(n[l-1]/30)*30;x<n[l];x+=30)if(v=Math.max(0,(x-n[l-1])/h),w=Math.min(1,(x+18-n[l-1])/h),!(w<=v)){P=[p[0]+d*v,p[1]+c*v,p[2]+(u[2]-p[2])*v+.4],M=[p[0]+d*w,p[1]+c*w,p[2]+(u[2]-p[2])*w+.4];for(S of[[P[0]-g,P[2],P[1]-y],[P[0]+g,P[2],P[1]+y],[M[0]+g,M[2],M[1]+y],[P[0]-g,P[2],P[1]-y],[M[0]+g,M[2],M[1]+y],[M[0]-g,M[2],M[1]-y]])t.push(...S),r.push(0,1,0),o.push(...m)}}return{position:t,normal:r,color:o}}function xo(e,t,r,o,i=0){let n=Ge(e.layer,t,o,i);return n.extras.featureFaces=r,n}function Qm(e){e.route=xo(e,Jm(e.lanes),[],{unlit:!0})}function yo(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let f=[];for(i of e.lanes)for([n,a,s]of i.points)f.push(n-t,s,a-t,n+t,s+r,a+t);let m={attributes:{position:{data:f}}};oe(m),e.mesh.geometry.bounds=m.bounds}function km(e){let{trips:t,model:r,vertices:o}=e;if(Ae(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,f;for(a=0;a<t.length;a++){s=t[a];for(f of St(r(a,s.properties)).color)i.push(f);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let m=i.length/3;e.mesh=xo(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,{},GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=m,e.mesh.extras.dynamicLights=!0,yo(e)}function vo(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function el(e){let{device:t}=e.layer.renderer;e.gpu?.device!==t&&(co(e),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:vo(t,new Float32Array([...e.template.position,...e.template.normal]))},e.lanesDirty=!0);let r,o,i,n,a;if(e.lanesDirty){let d=0;for(r of e.lanes)d+=r.points.length;let c=new Float32Array(d*4),h=0;for(r of e.lanes)for(r.start=h/4,o=0;o<r.points.length;o++)i=r.points[o],c[h++]=i[0],c[h++]=i[1],c[h++]=i[2],c[h++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=vo(t,c),e.lanesDirty=!1}let s=new Float32Array(e.trips.length*4),f=new Uint32Array(s.buffer);for(o=0;o<e.trips.length;o++)n=e.trips[o],f[o*4]=n.lane.start,f[o*4+1]=n.lane.points.length,s[o*4+2]=n.distance,s[o*4+3]=n.speed,e.mesh.extras.featureFaces[o].properties=n.properties;e.gpu.vehicles?.size>=s.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,s):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=vo(t,s));let{position:m,normal:l}=e.mesh.geometry.attributes,p=[e.gpu.params,e.gpu.template,e.gpu.points,e.gpu.vehicles,m.buffer,l.buffer],u=[];for(a=0;a<p.length;a++)u.push({binding:a,resource:{buffer:p[a]}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:u})}function tl(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function rl(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!e.layer.renderer){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=ho(e),o=r?.getTime(),i=Number.isFinite(o),n=!1,a,s,f,m,l,p,u,d,c,h;if(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck)){let g;try{e.trips=i?Km(r,e.lanes,e.velocity):[],g=i?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:"Loading\u2026":"Select a valid simulation date"}catch(v){return go(e,v)}e.rebasedAt=o,e.nextCheck=o+1e3;let y=[];for(a of e.trips)y.push(a.id);let x=y.join();n=x!==e.tripsKey||e.outline&&!e.route&&e.lanes.length,e.outline&&!e.route&&e.lanes.length&&Qm(e),x!==e.tripsKey&&(km(e),e.tripsKey=x),e.mesh&&el(e),e.error||(e.status.textContent!==g&&(e.status.textContent=g),e.status.removeAttribute("role"))}if(e.mesh&&tl(e,(o-e.rebasedAt)/1e3),e.mesh&&e.lights&&(!t||!(performance.now()-e.litAt<100))){e.litAt=performance.now();let g=[];for(a of e.trips){({x:s,y:f,z:m,dx:l,dz:p}=lo(e,a));for({position:[u,d,c],...h}of e.lights)g.push({...h,position:[s-u*p-c*l,f+d,m+u*l-c*p]})}e.mesh.extras.lights=g}(e.mesh||n)&&B(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick))}async function ol(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}function il({features:e=[]}){let t=[],r,o,i,n,a,s,f;for({geometry:r,properties:o}of e){i=r?.type==="LineString"?[r.coordinates]:r?.type==="MultiLineString"?r.coordinates:[];for(n of i){a=[];for([s,f]of n)a.push([f,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}}return t}function Mo(e){let{layer:t,lanes:r}=e,o=t._map._terrain3D?._terrainReady&&t._map._terrain3D,i=t.root.position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??Y(o,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function nl(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(t.location),n=Math.cos(t.location.lat*Math.PI/180),a,s,f,m,l;for(a of r){a.points=[];for([s,f]of a.latlngs)m=o.project(new L.LatLng(s,f)),a.points.push([(m.x-i.x)*n,-(m.y-i.y)*n,0]);for(a.lengths=[0],l=1;l<a.points.length;l++)a.lengths.push(a.lengths[l-1]+Math.hypot(a.points[l][0]-a.points[l-1][0],a.points[l][1]-a.points[l-1][1]));a.length=a.lengths.at(-1)}Mo(e),Ae(e,e.route),e.route=null,e.tripsKey=null}function al(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=il(r),nl(e),e.frame||e.tick()}}function sl(e,t,r){!t.aborted&&r.name!=="AbortError"&&go(e,r)}function fl(e){let{time:t}=ho(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;ol(e,t,r).then(al.bind(null,e,r),sl.bind(null,e,r))}function ml(e,t){t?.layer&&!t.layer.control?.time||(cancelAnimationFrame(e.frame),fl(e),e.tick())}function ll(e){e.lanes.length&&(Mo(e),Ae(e,e.route),e.route=null,e.mesh&&yo(e),e.frame||e.tick())}function pl(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}={}){let{model:s,lights:f,side:m}=jm[r];o??=m,_e(e,{tooltip:zm,nightLight:!!f,...a});let l=L.DomUtil.create("small","traffic-status");l.style.cssText="display:block;max-width:200px;margin:0 0 4px 20px;color:#555;";let p=St(s(0)),u=p.position.length,d=u/3,c=new ArrayBuffer(16),h=new Float32Array(c),g=new Uint32Array(c),y={layer:e,url:t,model:s,lights:f,side:o,outline:i,velocity:n,vehicle:r,status:l,template:p,stride:u,vertices:d,params:c,paramFloats:h,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};y.shader=Zm,y.tick=rl.bind(null,y),y.update=ml.bind(null,y),y.terrain=ll.bind(null,y),e._beforeRaycast=po.bind(null,y),e.on("ready",Hm.bind(null,y)),e.on("add",Vm.bind(null,y)),e.on("remove",qm.bind(null,y))}function ul(){this.keys.clear()}var Xt={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};function cl(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.drag={x:e.clientX,y:e.clientY},t.getContainer().setPointerCapture(e.pointerId)}else this.drag&&e.type==="pointermove"?(t._setPitchAndBearing(Math.max(20,Math.min(85,t.getPitch()-(e.clientY-this.drag.y)*.2)),t.getBearing()-(e.clientX-this.drag.x)*.25),this.drag={x:e.clientX,y:e.clientY}):this.drag=null}var Kt=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];function wo(){let{layer:e,state:t}=this,r=e._map,o=r.options.crs,i=o.project(e.location),n=Math.cos(e.location.lat*Math.PI/180),a=o.project(t.latlng),s=r._terrain3D?._terrainReady&&r._terrain3D,f=s&&Y(s,t.latlng)||0;return[(a.x-i.x)*n,f-e.root.position[1],-(a.y-i.y)*n]}function _o(){let[e,t,r]=wo.call(this),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,f,m,l;for(a=0;a<Kt.length;a++)[,s,f,m]=Kt[a],l=this.meshes[a],l.position[0]=e+s*i,l.position[1]=t+f,l.position[2]=r-s*n,l.rotation[0]=m*this.swing*Math.sin(this.state.phase),l.rotation[1]=o;B(this.layer)}function dl(){this.meshes&&_o.call(this)}function Po(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.drag=null,L.DomEvent.off(document,"keydown keyup",this.onKey),L.DomEvent.off(window,"blur",this.onBlur);let t,r;for(t of this.meshes||[])k(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){L.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),e.setPitch(this.saved.pitch),this.saved=null}}function hl(e){if(!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}Xt[e.code]&&(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}function Mi(e){return Math.atan2(Math.sin(e),Math.cos(e))}var wi=new WeakMap;function gl(e){let t=wi.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a}=e.geometry.attributes,s=i?i.count:o.length/3,f=[],m=[],l=new Map,p=[],u,d,c,h,g,y,x,v,w,P,M,S,z,T,E,b,R,D,U,G,$,H,V;for(u=0;u<s;u+=3)if(d=i?i.data[u]:u,!(e.program.nightLight&&a&&a.data[d*2]<=2)){for(c=0;c<3;c++)h=(i?i.data[u+c]:u+c)*3,g=o[h],y=o[h+1],x=o[h+2],p[c*3]=r[0]*g+r[4]*y+r[8]*x+r[12],p[c*3+1]=r[1]*g+r[5]*y+r[9]*x+r[13],p[c*3+2]=r[2]*g+r[6]*y+r[10]*x+r[14];if(v=p[3]-p[0],w=p[4]-p[1],P=p[5]-p[2],M=p[6]-p[0],S=p[7]-p[1],z=p[8]-p[2],T=w*z-P*S,E=v*S-w*M,b=P*M-v*z,R=Math.hypot(T,b,E),!(!R||Math.abs(b)>.9*R))for(n&&(h=d*3,D=n.data,(r[0]*D[h]+r[4]*D[h+1]+r[8]*D[h+2])*T+(r[2]*D[h]+r[6]*D[h+1]+r[10]*D[h+2])*E<0&&(T=-T,E=-E)),U=Math.hypot(T,E),G=m.length/2,f.push(...p),m.push(T/U,E/U),$=Math.floor(Math.min(p[0],p[3],p[6])/8);$<=Math.floor(Math.max(p[0],p[3],p[6])/8);$++)for(H=Math.floor(Math.min(p[2],p[5],p[8])/8);H<=Math.floor(Math.max(p[2],p[5],p[8])/8);H++)V=$+","+H,l.has(V)||l.set(V,[]),l.get(V).push(G)}return t={tri:Float32Array.from(f),nrm:Float32Array.from(m),cells:l,origin:[r[12],r[13],r[14]]},wi.set(e.geometry,t),t}function xl(e,t,r,o,i,n,a){let s=t*9,f=e[s+3]-e[s],m=e[s+4]-e[s+1],l=e[s+5]-e[s+2],p=e[s+6]-e[s],u=e[s+7]-e[s+1],d=e[s+8]-e[s+2],c=-a*u,h=a*p-n*d,g=n*u,y=f*c+m*h+l*g;if(Math.abs(y)<1e-9)return-1;let x=r-e[s],v=o-e[s+1],w=i-e[s+2],P=(x*c+v*h+w*g)/y;if(P<0||P>1)return-1;let M=v*l-w*m,S=w*f-x*l,z=x*m-v*f,T=(n*M+a*z)/y;return T<0||P+T>1?-1:(p*M+u*S+d*z)/y}function yl(e,t){return e===t||e._type==="terrain"||e._type==="traffic"}function vl(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||oe(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:f,dz:m,reach:l}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+l)return;let p=gl(e),u=n-r[12]+p.origin[0],d=a-r[13]+p.origin[1],c=s-r[14]+p.origin[2],h=new Set,g,y,x,v,w;for(g=Math.floor(Math.min(u,u+f*l)/8);g<=Math.floor(Math.max(u,u+f*l)/8);g++)for(y=Math.floor(Math.min(c,c+m*l)/8);y<=Math.floor(Math.max(c,c+m*l)/8);y++)for(x of p.cells.get(g+","+y)||[])if(!(h.has(x)||f*p.nrm[x*2]+m*p.nrm[x*2+1]>=0)){h.add(x);for(v of[.4,1.5])w=xl(p.tri,x,u,d+v,c,f,m),w>=0&&w<t.best&&(t.best=w,t.found=[p.nrm[x*2],p.nrm[x*2+1]])}}function Ml(e,t,r,o,i,n,a){ae(e.scene);let s={x:t,y:r,z:o,dx:i,dz:n,reach:a,best:a,found:null},f;for(f of e._shared._layers)yl(f,e)||Rt(f.root,vl,s);return s.found}function _i(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Ml(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3)}function wl(e){let t=this.layer,r=t._map;this.frame=requestAnimationFrame(this.step);let o=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!t.renderer)return;let i=!1,n,a,s;if(!this.meshes){this.meshes=[];for([n]of Kt)this.meshes.push(Ge(t,St(mo[n])));i=!0}let f=0,m=0;for(a of this.keys)f+=Xt[a]?.[0]||0,m+=Xt[a]?.[1]||0;if(f=Math.sign(f),m=Math.sign(m),m&&(this.state.heading=Mi(this.state.heading+m*2.5*o),i=!0),f){let p=f*this.speed*o,{lat:u,lng:d}=this.state.latlng,{position:c,scale:h}=t.root,g=Math.sin(this.state.heading)*p,y=Math.cos(this.state.heading)*p,x=wo.call(this);for(s=0;s<x.length;s++)x[s]=c[s]+h[s]*x[s];let v=_i.call(this,g,y,x);if(v){let w=g*v[0]-y*v[1];g-=w*v[0],y+=w*v[1],_i.call(this,g,y,x)&&(g=y=0)}this.state.latlng=new L.LatLng(u+y/111320,d+g/(111320*Math.cos(u*Math.PI/180))),this.state.phase+=Math.hypot(g,y)/1.6*Math.PI,i=!0}if(f||m){let p=r.getBearing()*Math.PI/180,u=Mi(-this.state.heading-p);Math.abs(u)>.001&&r._setPitchAndBearing(r.getPitch(),(p+u*Math.min(1,o*4))*180/Math.PI),r.setView(this.state.latlng,r.getZoom(),{animate:!1})}let l=f?.9:0;Math.abs(this.swing-l)>.001&&(this.swing+=(l-this.swing)*Math.min(1,o*10),i=!0),i&&_o.call(this)}function To(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter();let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*4007501668557849e-8*Math.cos(this.state.latlng.lat*Math.PI/180)/256)),o=[],i;for(i of["dragging","keyboard","doubleClickZoom","boxZoom"])e[i]?.enabled()&&o.push(i);this.saved={zoom:e.getZoom(),pitch:e.getPitch(),scrollWheelZoom:e.options.scrollWheelZoom,handlers:o};for(i of this.saved.handlers)e[i].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-e.getBearing()*Math.PI/180,e.setView(this.state.latlng,r,{animate:!1}),e.setPitch(75),L.DomEvent.on(document,"keydown keyup",this.onKey),L.DomEvent.on(window,"blur",this.onBlur),L.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.frame=requestAnimationFrame(this.step)}function _l(){this.saved?Po.call(this):To.call(this)}function Pl(e,{speed:t,distance:r,...o}={}){let i=new L.Layer;i._type="walk",_e(i,o);let n=new Set,a=L.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=L.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let f=L.DomUtil.create("small","",a);f.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",f.textContent="W/S: run \xB7 A/D: turn \xB7 drag: look around \xB7 Esc: exit",L.DomEvent.disableClickPropagation(a);let m={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:f,meshes:null,frame:null,last:void 0,swing:0,saved:null,drag:null,state:e.walker=i.walker={latlng:null,heading:0,phase:0}};m.step=wl.bind(m),m.onKey=hl.bind(m),m.onBlur=ul.bind(m),m.onPointer=cl.bind(m),m.onTerrain=dl.bind(m),m.start=To.bind(m),m.stop=Po.bind(m),m.toggle=_l.bind(m),e._walk=m,L.DomEvent.on(s,"click",m.toggle)}function Tl(e){L.Util.setOptions(this,e),Pl(this,this.options)}function Ll(e){return this._walk.layer.addTo(e),this._walk.container}function Sl(){this._walk.stop(),this._walk.layer.remove()}L.Control.Walk=L.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Tl,onAdd:Ll,onRemove:Sl});var A={};function Pi(){return{}}function Lo(e=this){e?._nativeGPU?.refresh?.()}function bl(e=this){e?._nativeGPU?.reorder?.(!0)}function Cl(e=this){e?._nativeGPU?.reorder?.(!1)}function El(e){return this._project(),this._parts=this._rings,A.closestMethods.get(this).call(this,e)}function Bl(){return this._project(),A.boundsMethods.get(this).call(this)}function Al(){A.gridInitializers.get(this).call(this),this._container.remove()}function zl(e){A.pendingGridFades.delete(e),e._fadeFrame=null,!A.pendingGridFades.size&&A.gridFadeFrame!==null&&(cancelAnimationFrame(A.gridFadeFrame),A.gridFadeFrame=null)}function Il(){A.gridFadeFrame=null;let e=[...A.pendingGridFades],t,r;for([t,r]of e)A.pendingGridFades.get(t)===r&&(A.pendingGridFades.delete(t),t._fadeFrame=null,So.call(t))}function Dl(e){e._fadeVersion=(e._fadeVersion||0)+1,A.pendingGridFades.set(e,e._fadeVersion),A.gridFadeFrame===null&&(A.gridFadeFrame=requestAnimationFrame(Il)),e._fadeFrame=A.gridFadeFrame}function So(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i;for(i of Object.values(this._tiles||{}))!i.current||!i.loaded||(i._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-i.loaded)/200):1,i._gpuOpacity<1?r=!0:i.active||(this._onOpaqueTile(i),i.active=!0,o=!0));o&&!this._noPrune&&this._pruneTiles(),this._nativeGPU?.refresh?.(),zl(e),r&&Dl(e)}function Rl(){A.pendingRasterLoads.shift()?.fire("load")}function Ul(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(A.pendingRasterLoads.push(this),queueMicrotask(Rl))}function Ol(){this instanceof L.Polyline||this instanceof L.CircleMarker?(this.beforeAdd=this.onAdd=this.onRemove=this._updateBounds=me,this.getEvents=Pi,this._renderer={options:{tolerance:0},_updatePath:Lo,_updateStyle:Lo,_bringToFront:bl,_bringToBack:Cl},this instanceof L.Polyline&&(A.closestMethods.set(this,this.closestLayerPoint),this.closestLayerPoint=El),this instanceof L.Circle&&(A.boundsMethods.set(this,this.getBounds),this.getBounds=Bl)):this instanceof L.GridLayer?(A.gridInitializers.set(this,this._initContainer),this._initContainer=Al,this._updateOpacity=So):this instanceof L.ImageOverlay&&!(this instanceof L.VideoOverlay)&&!(this instanceof L.SVGOverlay)&&(this.onAdd=Ul,this.onRemove=me,this.getEvents=Pi,this._reset=Lo)}function Gl(e){let t=!this._3d&&(this instanceof L.GridLayer||this instanceof L.Polyline||this instanceof L.CircleMarker||this instanceof L.Marker&&!(this.options.icon instanceof L.DivIcon)||this instanceof L.ImageOverlay&&!(this instanceof L.VideoOverlay)&&!(this instanceof L.SVGOverlay));t&&((this instanceof L.GridLayer||this instanceof L.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof L.Marker&&(this.options.icon.options.crossOrigin||=!0)),A.layerProto._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&hr(this,e.target)}function Fl(e){return im(this,e)}function Nl(e,t){e._geojson=!0,e.setData=Fl,_e(e,t)}function jl(e){switch(e){case"geojson":return Nl;case"pmtiles":return om;case"terrain":return dm;case"traffic":return pl;default:throw new Error(`Unknown layer type: ${e}`)}}function Zl(){let e=A.pendingInitializations.shift();try{e.initialize=jl(e.type)}catch(t){e.error=t}return e}function $l(e){let{layer:t,ready:r}=e;try{if(e.error)throw e.error;let o=t._map;return o?.removeLayer(t),delete t.onAdd,delete t.onRemove,e.initialize(t,e.settings),o?.addLayer(t),t.ready===r?t:t.ready}catch(o){throw t.fire("error",{error:o}),o}}function Vl(e={}){if(Object.getPrototypeOf(this)!==L.Layer.prototype||!e.source){if(A.layerProto.initialize)return A.layerProto.initialize.apply(this,arguments);L.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":"3d",...r},...o}=e,i={...r,...o};if(L.Util.setOptions(this,o),this._type=t,t==="3d"){_e(this,i);return}this.onAdd=me,this.onRemove=me;let n={layer:this,type:t,settings:i,ready:null};A.pendingInitializations.push(n),A.loading=A.loading.catch(me).then(Zl);let a=this.ready=A.loading.then($l);n.ready=a,a.catch(me)}A.layerProto=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Layer.prototype));A.loading=Promise.resolve();A.pendingInitializations=[];A.closestMethods=new WeakMap;A.boundsMethods=new WeakMap;A.gridInitializers=new WeakMap;A.pendingGridFades=new Map;A.gridFadeFrame=null;A.pendingRasterLoads=[];L.Layer.include({_layerAdd:Gl,initialize:Vl});L.Layer.addInitHook(Ol);})();
|
|
1
|
+
(()=>{var d0=Object.defineProperty;var M=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var h0=(e,t)=>{for(var r in t)d0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var C,X=M(()=>{C=Math.PI/180});var He,qr=M(()=>{He=180/Math.PI});var en,$s=M(()=>{en=new WeakMap});function k(e){return en.get(e)??0}var H=M(()=>{$s()});var tn,Vs=M(()=>{tn=new WeakMap});function S(e){return tn.get(e)??0}var W=M(()=>{Vs()});var wo,Xn=M(()=>{wo=Object.freeze({})});var Ne,Jn=M(()=>{Ne=new WeakMap});function Qn(){let e=this.getSize().y,t=k(this)*C,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Ne.get(this)&&(Ne.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Ne.get(this).setAttribute("aria-hidden","true"),Ne.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Ne.get(this)&&(Ne.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Ne.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Ne.get(this).style.display=i>0?"":"none")}var hm=M(()=>{Jn();b();X();H()});function ze(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=k(e),i=S(e);return en.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),tn.set(e,(r%360+360)%360),e._loaded&&(Qn.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Vs();$s();H();W();hm()});var Ot,ea=M(()=>{Ot=new WeakMap});var Mo,ta=M(()=>{Mo=new WeakMap});var nr,ra=M(()=>{nr=new Map});var gt,oa=M(()=>{gt={value:null}});function bo(e){nr.delete(e),Ot.set(e,null),Mo.set(e,null),!nr.size&>.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var ia=M(()=>{ea();ta();ra();oa()});var Sr,aa=M(()=>{Sr=new WeakMap});var yi,gm=M(()=>{yi=new WeakMap});var ym,El=M(()=>{ym={value:void 0}});var xm,kl=M(()=>{xm={value:void 0}});var vm,_l=M(()=>{vm={value:void 0}});var wm,Il=M(()=>{wm={value:void 0}});var sa,zl=M(()=>{sa={value:void 0}});var yt,Lo=M(()=>{yt=new WeakMap});var Er,ma=M(()=>{Er=new Set});var xi,Mm=M(()=>{xi=Object.freeze({capture:!0,passive:!1})});function bm(){this._map.fire("cameratouchchange")}var Al=M(()=>{});var Bo,fa=M(()=>{Bo=Object.freeze([.8,.5])});var Ol,Dl=M(()=>{Ol=Object.freeze([.8,0])});var pa,Lm=M(()=>{pa=Object.freeze({preventScroll:!0})});var ca,Bm=M(()=>{ca=Object.freeze({animate:!0})});function Gl(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Mo.set(o,null),Ot.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ze(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ot.get(o)===i?la(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Rl=M(()=>{ea();ta();oa();ra();or();Tm()});function la(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Gl)),Mo.set(e,gt.value)}var Tm=M(()=>{ta();ra();oa();Rl()});function To(e,t,r,o=wo){if(bo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return ze(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=k(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ot.set(e,f),la(e,f),e}var ua=M(()=>{ea();Xn();or();H();W();ia();Tm()});function Ul(e,t=ca){return To(e,0,0,t)}var Fl=M(()=>{Bm();ua()});function Dt(e,t,r){return To(e,k(e),t,r)}var vi=M(()=>{ua();H()});function Nl(e,t=ca){return Dt(e,0,t)}var jl=M(()=>{Bm();vi()});function Wl(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Ul(r):Nl(r),e.detail&&r.getContainer().focus(pa)}var Zl=M(()=>{Lm();Fl();jl()});function kr(e,t,r){return To(e,t,S(e),r)}var da=M(()=>{ua();W()});function $l(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")Dt(r,S(r)-o);else if(e.key==="ArrowRight")Dt(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)kr(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)kr(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Vl=M(()=>{vi();W();da();H()});function ha(){let e=this._map,t=this.options.visualizePitch?k(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*C))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(k(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var Pm=M(()=>{X();H();W()});var Ae,ar=M(()=>{Ae={value:new WeakMap}});var _r,ga=M(()=>{_r={value:new Set}});function ya(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var Cm=M(()=>{});function xa(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ya(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(pa),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var Sm=M(()=>{ar();Lm();Cm()});function va(e){return bo(e),e}var Em=M(()=>{ia()});function wa(e){let t=Ae.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;va(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*He}else i*=e.clientY<t.drag.cy?1:-1;ze(t.map,k(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var km=M(()=>{qr();ar();Em();or();H();W()});function Po(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Ma=M(()=>{});function sr(e){Po(Ae.value.get(this),e)}var _m=M(()=>{ar();Ma()});function ba(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Im=M(()=>{ar()});function La(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var zm=M(()=>{ar()});function Ba(){let e;for(e of _r.value)Po(e)}var Am=M(()=>{ga();Ma()});function Ta(e,t,r,o=Bo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),_r.value.add(n),t.addEventListener("pointerdown",xa,!0),t.addEventListener("pointermove",wa),t.addEventListener("pointerup",sr),t.addEventListener("pointercancel",sr),t.addEventListener("lostpointercapture",sr),t.addEventListener("click",ba,!0),t.addEventListener("contextmenu",La),window.addEventListener("blur",Ba),n}var Om=M(()=>{fa();ar();ga();Sm();km();_m();Im();zm();Am()});function ql(e){return e.button===0}var Hl=M(()=>{});function Yl(){ha.call(this._rotateControl)}var Xl=M(()=>{Pm()});function Kl(e){let t=h.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=h.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=h.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Wl,r.onkeydown=$l,this._refresh=ha,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Ta(e,r,ql,this.options.visualizePitch?Bo:Ol),r.addEventListener("focusout",Yl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var Jl=M(()=>{b();fa();Dl();Zl();Vl();Pm();Om();Hl();Xl()});function Ql(e){Po(e);let{element:t}=e;t.removeEventListener("pointerdown",xa,!0),t.removeEventListener("pointermove",wa),t.removeEventListener("pointerup",sr),t.removeEventListener("pointercancel",sr),t.removeEventListener("lostpointercapture",sr),t.removeEventListener("click",ba,!0),t.removeEventListener("contextmenu",La),Ae.value.delete(t),_r.value.delete(e),_r.value.size||window.removeEventListener("blur",Ba)}var eu=M(()=>{ar();ga();Ma();Sm();km();_m();Im();zm();Am()});function Pa(){Ql(this._dragState)}var Dm=M(()=>{eu()});function tu(e){e.off("rotate pitch",this._refresh,this),Pa.call(this)}var ru=M(()=>{Dm()});function ou(e){return new h.Control.Rotate(e)}var iu=M(()=>{b()});function nu(e){let t=this._cameraShiftRotate;!e.shiftKey||ya(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var au=M(()=>{vi();W();Cm()});function su(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=nu,e.addEventListener("wheel",this._wheel,xi)}var mu=M(()=>{Mm();au()});function fu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var pu=M(()=>{});function cu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var lu=M(()=>{});function uu(){this._dragState=Ta(this._map,this._map.getContainer(),cu,Bo,!0)}var du=M(()=>{fa();Om();lu()});function hu(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&Dt(t._map,r-o)}var gu=M(()=>{vi()});function Gm(e,t){e.disable(),e._map.fire("error",{error:t})}var yu=M(()=>{});function xu([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return Gm(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){Gm(r,i)}}}var vu=M(()=>{yu()});function wu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:hu};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(xu)}var Mu=M(()=>{gu();vu()});function bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Lu=M(()=>{});function Bu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Tu=M(()=>{});function Pu(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Bu),this._observer.observe(e)}var Cu=M(()=>{Tu()});function Su(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Eu=M(()=>{});var Co,Ca=M(()=>{Co=new WeakMap});var So,Sa=M(()=>{So=new WeakMap});function Ea(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!So.get(r).enabled()&&!Co.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;va(r);let a=o.getBoundingClientRect(),s=new h.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:k(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new h.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var Rm=M(()=>{Ca();Sa();b();Lo();Em();W();H()});function ka(e){let t=yt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*He;ze(r,Co.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,So.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var Um=M(()=>{Ca();Sa();qr();Lo();or()});function mr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var wi=M(()=>{});function Eo(e){mr(yt.get(this),e)}var Fm=M(()=>{Lo();wi()});function _a(){let e=Sr.get(this),{map:t,container:r}=e,o=So.get(t).enabled()||Co.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(mr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Nm=M(()=>{aa();Ca();Sa();wi()});function Ia(){let e;for(e of Er)mr(e)}var jm=M(()=>{ma();wi()});function ku(){let e=Sr.get(this);if(!e)return;let{container:t,map:r}=e;mr(e),t.removeEventListener("touchstart",Ea,!0),t.removeEventListener("touchmove",ka,!0),t.removeEventListener("touchend",Eo,!0),t.removeEventListener("touchcancel",Eo,!0),Er.delete(e),Er.size||window.removeEventListener("blur",Ia),r.off("cameratouchchange",_a,r),yi.get(r)?.remove(),yt.delete(t),Sr.delete(r)}var _u=M(()=>{aa();gm();ma();Lo();wi();Rm();Um();Fm();jm();Nm()});var Wm,Iu=M(()=>{Wm=new WeakMap});function Ir(e,t,r){let o=Wm.get(e);o||Wm.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var zu=M(()=>{Iu()});var Au={};h0(Au,{cameraControls:()=>g0});function g0(e){if(Ir(e,"trackContainerMutation",xm.value),!e.options.rotate)return;Ir(e,"shiftKeyRotate",wm.value),Ir(e,"pitchDrag",vm.value),Ir(e,"compassBearing",ym.value),Ir(e,"touchRotate",sa.value),Ir(e,"touchPitch",sa.value);let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};Sr.set(e,r),yt.set(t,r),Er.add(r),t.addEventListener("touchstart",Ea,xi),t.addEventListener("touchmove",ka,xi),t.addEventListener("touchend",Eo,!0),t.addEventListener("touchcancel",Eo,!0),window.addEventListener("blur",Ia),e.on("cameratouchchange",_a,e),e.options.rotateControl&&(yi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:wo)),yi.get(e).addTo(e)),e.once("unload",ku,e)}var Ou=M(()=>{aa();gm();b();El();kl();_l();Il();zl();Lo();ma();Mm();Xn();Al();Jl();ru();iu();mu();pu();du();Dm();Mu();Lu();Cu();Eu();Rm();Um();Fm();Nm();_u();jm();zu();ym.value=h.Handler.extend({addHooks:wu,removeHooks:bu});xm.value=h.Handler.extend({addHooks:Pu,removeHooks:Su});vm.value=h.Handler.extend({addHooks:uu,removeHooks:Pa});wm.value=h.Handler.extend({addHooks:su,removeHooks:fu});sa.value=h.Handler.extend({addHooks:bm,removeHooks:bm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Kl,onRemove:tu});h.control&&(h.control.rotate=ou)});b();var br={value:void 0};var ji={value:void 0};var Wi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Zi={value:void 0};var $i={value:void 0};var Vi={value:void 0};var qi={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var xe=new WeakMap;var re=new WeakMap;var $r=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function oi(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function Ki(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function hf(e,t){let r=pt.get(e);r||pt.set(e,r=new Set),r.add(t)}var et=new WeakMap;var kt=new Set;var U=new WeakMap;var w=new WeakMap;var ee=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var Ji=[null];var Vr=new WeakMap;var ce=new WeakMap;var Re=new WeakMap;var gf={subtree:!0};var ke=new WeakMap;b();function Qi(e){let t;for(t of Object.values(e._layers))t instanceof h.Marker?t.update():(t instanceof h.Popup||t instanceof h.Tooltip)&&t._updatePosition()}function yf(e,t){let r=e._map,o=Re.get(e),i,n;for(n of ce.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ke.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Qi(r)}function xf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ce.get(e)||ce.set(e,new Map);for(o of r.getContainer().getAnimations(gf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ce.get(e).has(o)||(i=o.currentTime||0,o.pause(),ce.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ce.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Re.get(e)&&yf(e,t)}}var Yt=new WeakMap;var ni={size:[null,null],format:"depth24plus",usage:null};async function vf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){vf(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function wf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(w.get(e).width=t.x,w.get(e).height=t.y,w.get(e).canvas.width=Math.round(t.x*w.get(e).dpr),w.get(e).canvas.height=Math.round(t.y*w.get(e).dpr),w.get(e).canvas.style.width=`${t.x}px`,w.get(e).canvas.style.height=`${t.y}px`,w.get(e).depthTexture&&F(e,w.get(e).depthTexture),w.get(e).depthTexture=w.get(e).device.createTexture((ni.size[0]=w.get(e).canvas.width,ni.size[1]=w.get(e).canvas.height,ni.usage=GPUTextureUsage.RENDER_ATTACHMENT,ni)),Yt.set(e,t))}var Q=new WeakMap;var ne=new WeakMap;X();qr();var Mf=2*Math.atan(1/3)*He;var Xt=2*Math.PI*6378137;var ae=new WeakMap;var rt=new WeakMap;var ve=new WeakMap;var Ye=new WeakMap;var de=new WeakMap;b();function bf(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function ai(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function Lf(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=ai(t,i,n),f=ai(t,i+1,n),p=ai(t,i,n+1),c=ai(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function Kt(e,t){if(!e._map||!ve.get(e))return null;let r=t instanceof h.Point?t:e._map.project(t,de.get(e));return bf(r,rt.get(e))??Lf(r,Ye.get(e))}function ct(e,t){let r=ae.get(e);return r&&Kt(r,t)}var It=new WeakMap;H();W();var Bf=Math.PI/360;function Hr(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let d=1/Math.tan(e.fov*Bf),y=e.near,g=e.far;m[0]=d/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=d,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(y-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*y/(y-g),m[15]=0;let x=e.projectionTransform;x.m11=m[0],x.m12=m[1],x.m13=m[2],x.m14=m[3],x.m21=m[4],x.m22=m[5],x.m23=m[6],x.m24=m[7],x.m31=m[8],x.m32=m[9],x.m33=m[10],x.m34=m[11],x.m41=m[12],x.m42=m[13],x.m43=m[14],x.m44=m[15];let v=e.projectionViewTransform;v.m11=x.m11,v.m12=x.m12,v.m13=x.m13,v.m14=x.m14,v.m21=x.m21,v.m22=x.m22,v.m23=x.m23,v.m24=x.m24,v.m31=x.m31,v.m32=x.m32,v.m33=x.m33,v.m34=x.m34,v.m41=x.m41,v.m42=x.m42,v.m43=x.m43,v.m44=x.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function Jt(e,t,r=!1){let o=ke.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function Tf(e,t){let r=e._map,o=ke.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Xt*Math.cos(ne.get(e).lat*C)),n=Jt(r,j.value.layerPointToContainerPoint.call(r,r.project(ne.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=It.get(r)?.control?._walk,f=(ct(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=k(r)*C,l=S(r)*C,u=Q.get(e);u.fov=Mf,u.aspect=t.x/t.y,u.near=Math.max(.1,a/1e4),u.far=Math.max(1e4,a*10),u.position[0]=s+Math.sin(l)*Math.sin(c)*a,u.position[1]=f+Math.cos(c)*a,u.position[2]=p+Math.cos(l)*Math.sin(c)*a,u.up[0]=-Math.sin(l)*Math.cos(c),u.up[1]=Math.sin(c),u.up[2]=-Math.cos(l)*Math.cos(c),u.target[0]=s,u.target[1]=f,u.target[2]=p,Hr(u)}var Lr=new WeakMap;function Pf(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}qr();function Cf(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*He),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*He),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*He),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function we(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=Pf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Cf(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)we(n)}function Be(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,d,y;for(l=0;l<3;l++){for(d=1/0,y=-1/0,u=l;u<m.data.length;u+=m.size)d=Math.min(d,m.data[u]),y=Math.max(y,m.data[u]);t[l]=Math.fround(t[l]+d),r[l]=Math.fround(r[l]+y)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function Sf(e,t,r,o,i){e.geometry.bounds||Be(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let d=n.center;s.x=a[0]*d[0]+a[4]*d[1]+a[8]*d[2]+a[12],s.y=a[1]*d[0]+a[5]*d[1]+a[9]*d[2]+a[13],s.z=a[2]*d[0]+a[6]*d[1]+a[10]*d[2]+a[14],s.radius=n.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p,radius:c}=s,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function qs(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),Sf(e,r,o,i,n));let s;for(s of e.children)qs(s,t,r,o,i,n,a)}function Ef(e,t,r){let i=Q.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Lr.get(e);u||Lr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(ee.get(e)),qs(ee.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var si=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var kf=[];X();var _f=[];var If={x:0,y:0};var zf={x:1,y:1};var Af={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Yr={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var Of={magFilter:"linear",minFilter:"linear"};function Df(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Af);e.roofBlit={pipeline:t.createRenderPipeline((Yr.vertex.module=r,Yr.fragment.module=r,Yr)),sampler:t.createSampler(Of)},Yr.vertex.module=null,Yr.fragment.module=null}}var rn={size:null,usage:null};var on={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var nn={source:null};var an={texture:null};var sn=[null,null];function Gf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((nn.source=t.image,nn),(an.texture=r.texture,an),(sn[0]=r.texture.width,sn[1]=r.texture.height,sn)),nn.source=null,an.texture=null,r.uploaded=r.image)}var ot={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var mn=[null];var fn={value:new Float32Array(64)};function Rf(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Uf(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;fn.value.length<p&&(fn.value=new Float32Array(p));let c=fn.value,l=m.createBuffer((rn.size=c.byteLength,rn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,rn)),u=m.createCommandEncoder(),d=u.beginRenderPass((on.colorAttachments[0].view=Y.get(e).texture.texture.createView(),on));on.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Rf);let y,g,x,v,P,B,T,O;for([y,{tile:g,layer:x}]of t.entries())({coords:v}=g),P=g.texture,Gf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,v.z),T=(v.x*B-o.x)*n/i.x,O=(v.y*B-o.y)*a/i.y,d.setViewport(T,O,Math.min(B*n/i.x,n-T),Math.min(B*a/i.y,a-O),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=P.texture.createView(),ot.entries[1].resource=s.roofBlit.sampler,ot.entries[2].resource.buffer=l,ot.entries[2].resource.offset=y*256,ot))),ot.layout=null,ot.entries[0].resource=null,ot.entries[1].resource=null,ot.entries[2].resource.buffer=null,d.draw(4);d.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((mn[0]=u.finish(),mn)),mn[0]=null,l.destroy()}function Ff(e,t){let r=-1/0,o,i;for(o of e)for(i of A.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Nf={size:[null,null],format:"rgba8unorm",usage:null};var jf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Wf(e,t,r,o){let i=w.get(e),n=Nf;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(F(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(jf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Zf(e,t,r,o){let i=e._map,n=w.get(e),a=_f;a.length=0;let s=Ff(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let d=i.project(ne.get(e),s),y=If,g=zf;y.x=a.length?m:d.x,y.y=a.length?f:d.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let x=Math.min(1,4096/Math.max(g.x,g.y)),v=Math.max(1,Math.ceil(g.x*x)),P=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*C)),T={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:Y.get(e)?.texture};Y.set(e,T),T.signature=r,T.updatedAt=o,T.matrix[0]=B/g.x,T.matrix[10]=B/g.y,T.matrix[12]=(d.x-y.x)/g.x,T.matrix[14]=(d.y-y.y)/g.y,Wf(e,T,v,P),Df(n);try{Uf(e,a,s,y,g,v,P)}finally{a.length=0}}function $f(e,t,r){let o=kf;o.length=0;let i=!1,n;for(n of t)o.push(`${h.Util.stamp(n)}:${Te.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!se.get(n);let a=o.join("|");o.length=0,(!Y.get(e)||Y.get(e).signature!==a&&(!i||r-Y.get(e).updatedAt>=50))&&Zf(e,t,a,r)}function Vf(e,t){let r=e._map,o=si.get(e);o||si.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of U.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))I.get(a)==="raster"&&A.get(a)&&a.options.opacity>0&&o.push(a);$f(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function qf(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Hf(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||qf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Yf(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=Qt.get(r),s=o.project(ne.get(t),a),m=o.options.crs.scale(a)/(Xt*Math.cos(ne.get(t).lat*C)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,v,P,B;for(u=0;u<8;u++)d=u&1?i.max[0]:i.min[0],y=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],x=s.x+(n[0]*d+n[4]*y+n[8]*g+n[12])*m,v=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,v),c=Math.max(c,x),l=Math.max(l,v);return R.get(r).maxLat!==void 0&&R.get(r).minLon!==void 0&&R.get(r).minLat!==void 0&&R.get(r).maxLon!==void 0&&(P=o.project([R.get(r).maxLat,R.get(r).minLon],a),B=o.project([R.get(r).minLat,R.get(r).maxLon],a),f=Math.max(f,P.x),p=Math.max(p,P.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Xf(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,d;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),d=Math.min(p,n+o),c>=u||l>=d){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),d<p&&a.push([s,d,f,p]),s<c&&a.push([s,l,c,d]),u<f&&a.push([u,l,f,d])}return a}function Kf(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!R.get(n)){i=!0;continue}if(a=Yf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Xf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function Jf(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){It.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==Y.get(e)?.signature&&(t._roofCoverageSignature=Y.get(e)?.signature,t._roofCovered=Kf(t,e,r)),n=!1;for(i of r)if(!R.get(i)||se.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Qf(e,t,r,o){let i=Lr.get(e),n=_t.get(e),a=w.get(e),s=!1,m,f;for(m of i)Jf(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Hf);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var pn={size:null,usage:null};function ep(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&F(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((pn.size=Math.max(64,t.length*4+r.length*2)*256,pn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,pn)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var L=new WeakMap;var Xe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function cn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((Xe.layout=t.layout,Xe.entries[0].resource.buffer=t.buffer,Xe.entries[1].resource=t.texture.createView(),Xe.entries[2].resource=t.sampler,Xe.entries[3].resource.buffer=t.lights,Xe)),Xe.layout=null,Xe.entries[0].resource.buffer=null,Xe.entries[1].resource=null,Xe.entries[2].resource=null,Xe.entries[3].resource.buffer=null}function tp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function rp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?tp(e,t,u,a,s):a[u]++}function Hs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)rp(s,m,t,r,o,i,n,a)}function op(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,d=Math.ceil((l-p)/s)+1,y=new Uint32Array(u*d),g=new Uint32Array(u*d);Hs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let v=(2+u*d+x*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let P=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=P,m[(2+a)*4+1]=y[a],P+=y[a]*2);Hs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ip=.03/(4*Math.PI);function np(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*ip;return r}function Ys(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:np(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...op(c,r),meshes:l}}var it=[];function Xs(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||it)Xs(o,t,r)}function ap(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of U.get(e))!n.options.nightLight||!L.get(n).visible||Xs(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ys(o,r.staticLightGrid,a),m=Ys(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(F(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),cn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function sp(e,t,r,o){let i=w.get(e),n=Q.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,d=Math.hypot(c,l,u)||1,y=Math.hypot(a[4],a[5],a[6])||1;ep(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),Y.get(e)?.matrix?g.set(Y.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/d,g[49]=l/d,g[50]=u/d,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/y,g[53]=a[5]/y,g[54]=a[6]/y;let x=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=x*x*(3-2*x);let v=o?.tint;g[56]=v?v[0]:1,g[57]=v?v[1]:1,g[58]=v?v[2]:1,g[59]=0,x>0&&ap(e),i.uniformSlot=1}var Xr={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Ks=[null];var ge={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var mp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function fp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((ge.layout=i.pipelineLayout,ge.vertex.module=i.vertex,ge.vertex.buffers=i.vertexBuffers,ge.fragment.module=i.fragment,ge.fragment.targets[0].format=e.format,ge.fragment.targets[0].blend=i.transparent?mp:void 0,ge.fragment.targets[0].writeMask=GPUColorWrite.ALL,ge.primitive.cullMode=r,ge.primitive.frontFace=o,ge.depthStencil.depthWriteEnabled=i.depthWrite,ge.depthStencil.depthCompare=n,ge)),ge.layout=null,ge.vertex.module=null,ge.vertex.buffers=null,ge.fragment.module=null,i.pipelineCache.set(a,s)),s}function pp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function cp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,pp(e,t,n),o}var Br={source:null,flipY:null};var Kr={texture:null};var Jr=[null,null];function lp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Br.source=t.image,Br.flipY=!!t.flipY,Br),(Kr.texture=t.texture,Kr),(Jr[0]=t.image.width,Jr[1]=t.image.height,Jr)),Br.source=null,Kr.texture=null,t.uploaded=t.image)}var Qr={layout:null,entries:null};var up=[];var ln={binding:0,resource:{buffer:null,size:160}};var un={binding:1,resource:{buffer:null,size:240}};var dn={binding:2,resource:null};var mi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function dp(e,t,r){let{program:o}=t,i=up;i.length=0,ln.resource.buffer=e.uniformBuffer,un.resource.buffer=e.uniformBuffer,i.push(ln,un),o.terrain&&(dn.resource=o.terrain.texture.createView(),i.push(dn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],mi[a].binding=s.texture,mi[a].resource=m.texture.createView(),fi[a].binding=s.sampler,fi[a].resource=m.sampler,i.push(mi[a],fi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((Qr.layout=o.bindGroupLayout,Qr.entries=i,Qr)),Qr.layout=null,Qr.entries=null,ln.resource.buffer=null,un.resource.buffer=null,dn.resource=null,a=0;a<r.length;a++)mi[a].resource=null,fi[a].resource=null;i.length=0}function hp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);lp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&dp(e,t,i)}function hn(e,t,r,o,i){let{geometry:n}=t,a=w.get(e),{device:s}=a,m=fp(a,t,o,i),f=cp(a,t);hp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Ks[0]=f,Ks)),r.setVertexBuffer(0,n.attributes.position.buffer),r.setVertexBuffer(1,n.attributes.normal.buffer),n.attributes.color&&r.setVertexBuffer(2,n.attributes.color.buffer),n.attributes.uv&&r.setVertexBuffer(3,n.attributes.uv.buffer);let p=n.attributes.instanceOffset;p&&r.setVertexBuffer(4,p.buffer);let c,l;for(c in n.attributes)l=n.attributes[c],l.needsUpdate&&(s.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1,(c==="position"||c==="instanceOffset")&&(n.bounds=null));let u=n.attributes.index;u?(r.setIndexBuffer(u.buffer,u.indexFormat),r.drawIndexed(n.drawRange.count,p?.count??1,n.drawRange.start,0,0)):r.draw(n.drawRange.count,p?.count??1,n.drawRange.start,0)}function gp(e,t,r){let o=w.get(e),i=t.beginRenderPass((Xr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Xr.depthStencilAttachment.view=o.depthTexture.createView(),Xr));Xr.colorAttachments[0].view=null,Xr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=Y.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(hn(e,n,i,"front",f),hn(e,n,i,"back",f)):hn(e,n,i,p.cullMode,f)}i.end()}var yp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var xp=new Float32Array(20);function vp(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function wp(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!vp(o,a)){i=!1;break}}return i}var Mp={min:[0,0,0],max:[0,0,0]};var bp={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var Lp=[0,0,0];var Bp=[0,0,0];function Tp(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function Pp(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Be(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=Tp(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function Cp(e,t){let{min:r,max:o}=Pp(e,Mp),i=bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Lp,a=Bp,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,Hr(i);let d=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=d[m]*f+d[m+4]*p+d[m+8]*c+d[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let y=2/(a[0]-n[0]),g=2/(a[1]-n[1]),x=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=d[s]*y,v[s+1]=d[s+1]*g,v[s+2]=d[s+2]*x,v[s+3]=d[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Js={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Qs={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var eo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var gn={code:null};var lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var to={bindGroupLayouts:[null,null]};var ro=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var yn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var Sp=[ro,yn];var Ep=[ro];function em(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Js.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Js)),t.depthLayout=e.createBindGroupLayout((Qs.entries[0].visibility=GPUShaderStage.VERTEX,Qs)),t.depthBindGroup=e.createBindGroup((eo.layout=t.depthLayout,eo.entries[0].resource.buffer=t.buffer,eo)),eo.layout=null,eo.entries[0].resource.buffer=null);let i=e.createShaderModule((gn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,gn));gn.code=null;let n=r?Sp:Ep;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((to.bindGroupLayouts[0]=t.meshLayout,to.bindGroupLayouts[1]=t.depthLayout,to)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),to.bindGroupLayouts[0]=null,to.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var xn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var oo={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var tm=[null];function kp(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((xn.depthStencilAttachment.view=n.texture.createView(),xn));xn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,d;for(m of r){f=m.geometry.attributes.instanceOffset,p=f?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,c/4),o.uniformData[c/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((oo.layout=n.meshLayout,oo.entries[0].resource.buffer=o.uniformBuffer,oo)),oo.layout=null,oo.entries[0].resource.buffer=null);for(l of Object.values(m.geometry.attributes))l.needsUpdate&&(i.queue.writeBuffer(l.buffer,0,l.data),l.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(tm[0]=c,tm)),a.setVertexBuffer(0,m.geometry.attributes.position.buffer),f&&a.setVertexBuffer(1,f.buffer),u=m.geometry.attributes.index,d=m.geometry.drawRange,u?(a.setIndexBuffer(u.buffer,u.indexFormat),a.drawIndexed(d.count,f?.count??1,d.start,0,0)):a.draw(d.count,f?.count??1,d.start,0)}a.end()}var pi={size:[null,null],format:"depth32float",usage:null};function vn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((pi.size[0]=t,pi.size[1]=t,pi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,pi)),cn(e))}function _p(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,yp),a.enabled=!1,a.cache=null;return}if(wp(a,r,o))return;let s=xp;a.enabled=!0,vn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Cp(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),em(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){em(n,a,!0);break}kp(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function wn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var ci=new WeakMap;var li=new WeakMap;var me=new WeakMap;var Mn=new WeakMap;function Z(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function io(e,t){Mn.get(e)?.abort();let r=A.get(e).get(t);r&&(Z(r,null),_(e),r.texture!==t.texture&&F(e,r.texture.texture),A.get(e).delete(t))}function no(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;A.get(e).get(r)===t&&(A.get(e).delete(r),Te.set(e,(Te.get(e)||0)+1),t.request.abort(),me.get(e)&&io(me.get(e),t),t.mesh&&Z(t.mesh,null),t.texture&&F(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),_(e))}function ao(e){let t=Ht.get(e),r=performance.now();if(ci.get(e)===Te.get(e)&&li.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));ci.set(e,Te.get(e)),li.set(e,t),zt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=A.get(e).get(i),n?.done&&r-n.loadedAt<250&&zt.set(e,Math.min(zt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of A.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||no(e,n)}return Number.isFinite(zt.get(e))}b();function so(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var bn=Object.freeze([1,1,1]);var Tr=new WeakMap;b();function Ln(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof h.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(Tr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ip=Object.freeze([0,2,1,1,2,3]);var rm=Object.freeze([0,0,1,0,0,1,1,1]);var zp=Object.freeze({minFilter:"linear",magFilter:"linear"});function _e(e,t){if(!t)return;Z(t,null),_(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Op(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!so(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,qe(e)}catch(m){e.failed=!0,e.source.fire("error",{error:m})}finally{s?.close()}}function Dp(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Gp(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){if(a){let c=n.get(t);c&&_e(o,c),n.delete(t),F(o,a.texture),i.delete(t)}let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(zp)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Op(e,t,a,r,p,m,f)):Dp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var mo=Object.freeze({});var Bn={size:null,usage:null};var ut={value:0};function Pe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Tn={code:null};var Pn={code:null};var fo={bindGroupLayouts:[null,null]};var Rp=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Up=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Fp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Np=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Cn={entries:null};var jp=[];var om={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var im={binding:1,visibility:null,buffer:{type:"uniform"}};var nm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Wp=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Zp=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function $p(e,t){let r=jp;r.length=0,om.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,im.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(om,im),t.hasTerrain&&(nm.visibility=GPUShaderStage.VERTEX,r.push(nm));let o,i,n=0;for(o of t.bindings)i=Wp[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Zp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Cn.entries=r,Cn));return Cn.entries=null,a}function Vp(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),t}function po(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function qp(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Hp(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Yp(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"";return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);let normal =(cross(m[1],m[2])* input.normal.x + cross(m[2],m[0])* input.normal.y + cross(m[0],m[1])* input.normal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Hp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Xp(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Kp(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Xp(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Jp(e=mo,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);qp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Yp(e,t,r,m,f,s),c=[],l=po(c,"baseTexture",o),u=po(c,"metalTexture",i),d=po(c,"emissiveTexture",n),y=po(c,"occlusionTexture",a),g=po(c,"roofTexture",s),x=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${d}${y}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Kp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function Qp(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
|
|
2
|
+
`:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ke(e,t=mo){let r=Jp(t,!!e.options.nightSparkle,t.terrain?Rp:""),o=w.get(e).device.createShaderModule((Tn.code=r.vertex,Tn));Tn.code=null;let i=w.get(e).device.createShaderModule((Pn.code=r.fragment,Pn));Pn.code=null,Qp(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[ro,Up,t.vertexColors?Fp:null,r.textured?Np:null];t.instanced&&n.push(yn);let a=$p(w.get(e).device,r),s=w.get(e).device.createPipelineLayout((fo.bindGroupLayouts[0]=a,fo.bindGroupLayouts[1]=w.get(e).sunlight.layout,fo));fo.bindGroupLayouts[0]=null,fo.bindGroupLayouts[1]=null;let m=Vp(t);return{device:w.get(e).device,vertex:o,fragment:i,bindings:r.bindings,vertexBuffers:n,bindGroupLayout:a,pipelineLayout:s,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:m,_layerMaterial:t}}function er(e,t,r=mo,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Bn.size=Math.max(4,f.byteLength),Bn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Bn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Pe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ke(e,{vertexColors:!0,doubleSided:!0,...r}),id:ut.value++,renderOrder:0,extras:{}};return Z(l,L.get(e)),_(e),l}function Sn(e,t,r,o,i,n,a){let{backend:s,source:m,meshes:f}=e;if(!r.length)return;let p=f.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],l;for(l=0;l<r.length;l++)c.push(l%3===1?1:0);let u={position:r,normal:c};a&&(u.uv=a);let d={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(d.baseTexture=n),p&&_e(s,p),p=er(s,u,d,0,m instanceof h.GridLayer?e.rasterProgram:void 0),m instanceof h.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),f.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Ln(e,p,o,i),p}function co(e,t,r,o,i){let n=Gp(e,t,r);if(!n)return;let a=Ip,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(rm[f*2],rm[f*2+1]);return Sn(e,t,s,bn,i,n,m)}var D=new WeakMap;X();function lo(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*C);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function En(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(lo(e,i));return r}function tc(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,m,f,p;for(i in t._tiles)Object.hasOwn(t._tiles,i)&&(n=t._tiles[i],!(!n.loaded||n.el instanceof HTMLImageElement&&!n.el.naturalWidth)&&(a=(t.options.opacity??1)*(n._gpuOpacity??1),s=r.get(i),m=o.get(i),m&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Ln(e,m,bn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=co(e,i,n.el,En(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function rc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&co(e,"image",t._image,En(e,t.getBounds()),t.options.opacity??1)}var oc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function kn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*C:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new h.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function ui(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function ic(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function nc(e,t,r){let{source:o,map:i,backend:n}=e,a=lo(e,o.getLatLng()),s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=L.get(n).worldMatrix,u=Q.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=oc[d],f[y]=l[d],p[y]=u[d];ui(c,f,a[0],a[1],a[2],1),ui(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,v=c.z,P=c.w;p.invertSelf(),f.invertSelf();let[B,T,O,K]=ic(e,t,r),G=(g/P+1)*s.x/2,N=(1-x/P)*s.y/2,J=G-O,pe=N-K,ye=[],Qe,Le,ft,Ge,ri;for(d=0;d<4;d++)Qe=J+(d%2?B:0),Le=pe+(d<2?0:T),ft=kn(o,Qe-G,Le-N),Ge=G+ft.x,ri=N+ft.y,ui(c,p,Ge/s.x*2-1,1-ri/s.y*2,v/P,1),ui(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),ye.push([c.x,c.y,c.z]);return ye}function ac(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=co(e,o,i,nc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var uo=[];b();b();function Ue(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var di=2*Math.PI;b();function am(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*di/o),e.y+r*Math.sin(i*di/o))}function Pr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ue(e,o,t,am(t,r,i,n,a),am(t,r,i,n,a+1))}function _n(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),l=new h.Point(-c.y*f,c.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(f))),i&&(r=r.add(c.multiplyBy(f)))),Ue(m,s,t.add(l),t.subtract(l),r.add(l)),Ue(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Pr(m,t,f,s),i&&Pr(m,r,f,s))}b();function sc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Pr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),d=o.subtract(f).divideBy(i),y=u.x*d.y-u.y*d.x>0?-1:1,g=new h.Point(-u.y*y,u.x*y),x=new h.Point(-d.y*y,d.x*y),v=f.add(g.multiplyBy(p)),P=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,T=B>0?g.add(x).multiplyBy(p/B):null;Ue(s,m,v,f,P),n.lineJoin==="miter"&&T&&Math.hypot(T.x,T.y)<=p*4&&Ue(s,m,v,f.add(T),P)}function mc(e,t,r,o,i,n){let a=e.dash,s=0,m,f,p,c;for(;s<o;){for(m=((i+s)%n+n)%n,f=0;m>=a[f];)m-=a[f++];p=Math.min(o,s+a[f]-m),f%2===0&&(c=r.subtract(t).divideBy(o),_n(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function In(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?mc(e,p,c,l,a,s):(_n(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&sc(e,t,f,c,l)),a+=l}function fc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function pc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function cc(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:fc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)pc(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Me(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function nt(e,t){return e.x===t.x&&e.y===t.y}function lc(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],nt(o,i)||Math.abs(Me(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function zn(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function uc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=lc(t.slice(o,o+=n.length)),zn(a)!==!!i&&a.reverse(),r.push(a);return r}function An(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function dc(e,t){let r;for(r=1;r<t.length;r++)if(An(e,t[r]))return!0;return!1}function hi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function hc(e,t,r,o){if(nt(e,r)||nt(e,o)||nt(t,r)||nt(t,o))return!1;let i=Me(e,t,r),n=Me(e,t,o),a=Me(r,o,e),s=Me(r,o,t);return i*n<0&&a*s<0||i===0&&hi(e,t,r)||n===0&&hi(e,t,o)||a===0&&hi(r,o,e)||s===0&&hi(r,o,t)}function sm(e,t,r){let o;for(o=0;o<r.length;o++)if(hc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function gc(e,t,r,o){if(sm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(sm(e,t,o[i]))return!0;return!1}function yc(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!An(o,r[0])||dc(o,r))&&(gc(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function xc(e,t,r,o){let i;for(i of e)if(!nt(i,t)&&!nt(i,r)&&!nt(i,o)&&Me(t,r,i)>=0&&Me(r,o,i)>=0&&Me(o,t,i)>=0)return!0;return!1}function vc(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Me(i,n,a)<=1e-10)&&!xc(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Me(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function mm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function wc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=mm(e[n]);let s=mm(e[0])-o;for(a of r)i+=Me(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function ho(e,t=it){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=uc(r,s),f=m[0].slice(),p=cc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=yc(f,a,m,c);let l=vc(f);return wc(m,s,l),l}function fm(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],m,f,p,c;for(m of t){f=[];for(p of m)f.push(a.project(p));s.push(f)}if(r&&o.fill&&s[0]?.length>=3){let l=[];for(m of s)m.length>=3&&l.push(m);let u=l.flat();for(c of ho(l[0],l.slice(1)))Ue(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)In(e,m,r)}function pm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)fm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)fm(e,t,r);else for(o of t)pm(e,o,r)}function Mc(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}b();b();function tr(e,t,r,o,i,n=0){let a=i*di/o;return new h.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function bc(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof h.Circle){e._project();let y=e._point.add(r.getPixelOrigin());f.x=y.x,f.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&&Pr(o,f,p,i,c);let d=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(l=0;l<d;l++)y.push(tr(f,p,c,d,l));In(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Ue(o,n,tr(f,p,c,d,u,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,m/2)),Ue(o,n,tr(f,p,c,d,u+1,m/2),tr(f,p,c,d,u,-m/2),tr(f,p,c,d,u+1,-m/2))}function Lc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Mc(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof h.CircleMarker)bc(e,m);else{let f=e instanceof h.Polygon;pm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Bc(e,t){return lo(e,e.map.unproject(t))}function Tc(e){return Bc(uo[uo.length-1],e)}function On(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Dn(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Ie(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:On(Dn(0,e.h,e.l,n)),g:On(Dn(8,e.h,e.l,n)),b:On(Dn(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Pc(e){let{source:t}=e;uo.push(e);let r;try{r=Lc(t,e.map,Tc)}finally{uo.pop()}let{fill:o,stroke:i}=r,n,a,s,m,f,p,c,l;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,m=n?t.options.color:t.options.fillColor||t.options.color,f=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:l}=Ie(m),Sn(e,a,s,[p,c,l],f??1))}function Cc(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(_e(o,i),t.delete(a),n=r.get(a),n&&F(o,n.texture),r.delete(a));for([a,n]of r)n.used||(F(o,n.texture),r.delete(a))}function Gn(e){let{source:t,meshes:r,textures:o}=e;if(!so(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof h.GridLayer?tc(e):t instanceof h.ImageOverlay?rc(e):e.marker?ac(e):Pc(e),Cc(e)}function Sc(e){try{Gn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(wn(e),z.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;xf(e,r),wf(e,o),Tf(e,o),we(ee.get(e));let i=!1,n,a;for(n of U.get(e))a=Vr.get(n),a&&(Sc(a),i=!0);let s=tt.get(t);Ef(e,s,i);let m=_t.get(e),f=w.get(e),p=Vf(e,r),c=f.frameMeshes||=[];c.length=0;let l=Qf(e,p,r,c),u=f.device.createCommandEncoder();sp(e,c,m,s),_p(e,u,m,s),gp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Ji[0]=u.finish(),Ji)),Ji[0]=null;for(n of U.get(e))Ht.get(n)&&(l=ao(n)||l);(t._animatingZoom||l)&&_(e)}function Ec(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!w.get(r)))try{rr(r)}catch(o){t||=o}if(t)throw t}function _(e){let t=z.get(e);if(!t)return e;if(t!==e)return _(t),e;if(et.get(e)!=null)return e;let r=kt.values().next().value;return kt.add(e),et.set(e,r?et.get(r):requestAnimationFrame(Ec)),e}b();function Rn(e){let{source:t}=e,r=t instanceof h.Marker&&t.options.icon instanceof h.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function qe(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,Rn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",oi),o.removeEventListener("error",ii),Ki(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),hf(o,e),o.addEventListener("load",oi),o.addEventListener("error",ii));z.get(e.backend)&&_(e.backend)}function $(e,t,r){let o=xe.get(t),n=o.methods.get(e).original.apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof h.GridLayer){let m=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof h.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,m=e==="bringToFront"?Math.max(m,s):Math.min(m,s));let f=e==="bringToFront"?m+1:m-1;Number.isFinite(f)&&t.setZIndex(f)}return e==="bringToFront"&&(o.order=qt.get(o.map)+1,qt.set(o.map,o.order)),e==="bringToBack"&&(o.order=$r.get(o.map)-1,$r.set(o.map,o.order)),qe(o),n}function kc(...e){return $("setLatLng",this,e)}function _c(...e){return $("setLatLngs",this,e)}function Ic(...e){return $("addLatLng",this,e)}function zc(...e){return $("setRadius",this,e)}function Ac(...e){return $("setStyle",this,e)}function Oc(...e){return $("redraw",this,e)}function Dc(...e){return $("setIcon",this,e)}function Gc(...e){return $("setUrl",this,e)}function Rc(...e){return $("setBounds",this,e)}function Uc(...e){return $("setOpacity",this,e)}function Fc(...e){return $("setZIndex",this,e)}function Nc(...e){return $("setZIndexOffset",this,e)}function jc(...e){return $("bringToFront",this,e)}function Wc(...e){return $("bringToBack",this,e)}var cm={setLatLng:kc,setLatLngs:_c,addLatLng:Ic,setRadius:zc,setStyle:Ac,redraw:Oc,setIcon:Dc,setUrl:Gc,setBounds:Rc,setOpacity:Uc,setZIndex:Fc,setZIndexOffset:Nc,bringToFront:jc,bringToBack:Wc};b();var go=Object.freeze({});function Un(e=go){return new h.Layer(e)}b();var Cr=new WeakMap;var te=new WeakMap;var dt=new WeakMap;function Zc(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function $c(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Zc(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Vc(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function qc(e,t,r){e.geometry.bounds||Be(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function Fn(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=a?.count||n.count,f=s?t%m:t,p=s?Math.floor(t/m)*s.size:0,c=s?.data[p]??0,l=s?.data[p+1]??0,u=s?.data[p+2]??0,d=(a?a.data[f]:f)*n.size,y=(a?a.data[f+1]:f+1)*n.size,g=(a?a.data[f+2]:f+2)*n.size;r[0]=n.data[d],r[1]=n.data[d+1],r[2]=n.data[d+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[g],i[1]=n.data[g+1],i[2]=n.data[g+2],s&&(r[0]=Math.fround(r[0]+c),r[1]=Math.fround(r[1]+l),r[2]=Math.fround(r[2]+u),o[0]=Math.fround(o[0]+c),o[1]=Math.fround(o[1]+l),o[2]=Math.fround(o[2]+u),i[0]=Math.fround(i[0]+c),i[1]=Math.fround(i[1]+l),i[2]=Math.fround(i[2]+u))}function Hc(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Yc(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],d=a[1]*u-a[2]*l,y=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,x=m*d+f*y+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(x)<1e-9:x<1e-9)return 1/0;let v=n[0]-r[0],P=n[1]-r[1],B=n[2]-r[2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return 1/0;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(a[0]*O+a[1]*K+a[2]*G)/x;return N<0||T+N>1||Hc(e,t,T,N,s)?1/0:(c*O+l*K+u*G)/x}function Xc(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function Nn(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,d,y,g,x;for(f of t)if(Vc(e,f,s,m),!!qc(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,d=1/0,y=void 0,g=0;g<u*(l?.count??1);g+=3)Fn(f,g,i,n,a),x=Yc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Xc(e,f,s,m,d,y))}return $c(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function jn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Kc(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function yo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Kc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Jc(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,d,y,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=yo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],d=e.template.position[c+2],y=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-d*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-d*p,r.data[l]=-y*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=y*f-g*p}function Qc(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function Wn(e,t,r=L.get(e).children,o=!0){if(!w.get(e))return[];let i=dt.get(e);i&&Jc(i);let n=e._map.getContainer().getBoundingClientRect();we(ee.get(e)),Hr(Q.get(e));let a=te.get(e).inverse,s=Q.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,d;Qc(a),te.get(e).origin[0]=Q.get(e).position[0],te.get(e).origin[1]=Q.get(e).position[1],te.get(e).origin[2]=Q.get(e).position[2],te.get(e).direction[0]=p/u-te.get(e).origin[0],te.get(e).direction[1]=c/u-te.get(e).origin[1],te.get(e).direction[2]=l/u-te.get(e).origin[2];let y=te.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;te.get(e).direction[0]/=g,te.get(e).direction[1]/=g,te.get(e).direction[2]/=g;let x=te.get(e).meshes;x.length=0;for(d of r)o?At(d,jn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Nn(te.get(e),x,w.get(e).uniformData?.[55])}function el(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ie=new WeakMap;var tl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function rl(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function ol(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof h.Marker||n.options.interactive===!1||!(n instanceof h.Path)&&!n.options.interactive)&&o.push(...Wn(a,t,i.meshes.values(),!1));return o.sort(rl),o[0]?.object._nativeSource||null}function Zn(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function il(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&Zn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function lm(e,t=e.type,r){let o=this,i=Cr.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!w.get(a)||r||!tl.has(t))return n.call(this,e,t,r);if(il(o,i,e,t))return n.call(this,e,t,r);let s=ol(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Zn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function nl(e){let{map:t}=e,r=Cr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=h.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=lm,r.restore=el,Cr.set(t,r),t._fireDOMEvent=lm}r.states.add(e),e._nativeEventContext=r}function xo(){qe(this)}function $n(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function al(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Cr.delete(r))}function gi(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",xo,e),r.off("zoomend",xo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",$n,e),al(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())_e(o,p);i.clear();for(c of n.values())F(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",oi),l.removeEventListener("error",ii),Ki(l,e);Vr.delete(o),o.remove()}function sl(){this.ready.resolve()}function ml({error:e}){this.ready.reject(e)}function fl({error:e}){this.source.fire("error",{error:e})}async function pl(e){let{source:t,map:r}=e,o=e.backend=Un({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,qt.get(r)||qt.set(r,0),$r.get(r)||$r.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=qt.get(r)+1,qt.set(r,e.order),e.marker=t instanceof h.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",xo,e),r.on("zoomend",xo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",$n,e),nl(e);let n,a,s;for(n in cm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=cm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",sl,e),o.once("error",ml,e),o.on("error",fl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw gi.call(e),f}if(!so(e))return t;Vr.set(o,e);try{Gn(e)}catch(f){throw gi.call(e),f}return _(e.backend),t}function cl(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&gi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function ll(e){return xe.get(e.source)!==e?e.source:pl(e)}function Vn(e,t){e.fire("error",{error:t})}function qn(e,t){if(xe.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};xe.set(e,r),Rn(r),e.once("remove",cl.bind(null,r)),re.set(e,Promise.resolve().then(ll.bind(null,r))),re.get(e).catch(Vn.bind(null,e))}var Hn=[1,0,1,0];b();function fe(e){return new h.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}X();W();H();function Yn(e,t){let r=S(e)*C,o=k(e)*C;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Fe(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,m=fe(t);if(!s)return m;let[f,p,c,l]=Yn(e,Hn),u=m.x-n,d=m.y-a;if(r){let v=i.y*e.options.pitchMaxDistance,P=c*s+l*d,B=P*c>0?d*s/P:-v;o&&(B=Math.max(-v,Math.min(v,B)));let T=u*(s-l*B)/s;return m.x=f*T+p*B+n,m.y=-p*T+f*B+a,m}let y=f*u-p*d,g=p*u+f*d,x=s/(s-l*g);return m.x=y*x+n,m.y=c*g*x+a,m}function ul(e){return Fe(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function dl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Fe(this,e,!0),!0))}function hl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function gl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function yl(e,t,r){if(!k(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof h.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var ht=Object.freeze([0,0]);H();W();function xl(e,t={}){if(!k(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=fe(t.paddingTopLeft||t.padding||ht),o=this.getSize().subtract(fe(t.paddingBottomRight||t.padding||ht)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}b();H();W();b();function vo(e,t=ht){let r=fe(t).divideBy(2),o=e.getSize().subtract(r),i=new h.Bounds,n=r.x,a=r.y,s;for(s=0;s<4;s++)r.x=s%2?o.x:n,r.y=s<2?a:o.y,i.extend(Fe(e,r,!0,!0));return i}function vl(e,t,r){if(!r||!this._loaded||!k(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=vo(this),n=this.project(e,t),a=new h.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}H();W();function wl(e,t){if(!t||!k(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Fe(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Fe(this,r.subtract(n.subtract(i))))}H();W();b();Xn();function um(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function Kn(e,t,r=wo){t=t.getBounds?t.getBounds():t instanceof h.LatLngBounds?t:new h.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=fe(r.paddingTopLeft||r.padding||ht).subtract(i),s=i.subtract(fe(r.paddingBottomRight||r.padding||ht)),[m,f,p,c]=Yn(e,Hn);if(p<0){let u0=a.y;a.y=-s.y,s.y=-u0}let l=e.getSize().y*e.options.pitchMaxDistance,u=um(a.y,Math.abs(p),n,c,l),d=um(s.y,Math.abs(p),n,c,l),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,x=-1/0,v=a.x*c/n,P=s.x*c/n,B=P-v,T=1/0,O=-1/0,K=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],G,N,J,pe,ye;for(G=0;G<4;G++)N=K[G],J=e.project(N,o).subtract(y),pe=m*J.x-f*J.y,ye=f*J.x+m*J.y,g=Math.min(g,ye),x=Math.max(x,ye),T=Math.min(T,pe+v*ye),O=Math.max(O,pe+P*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(O-T-B*g)),Le=e.getScaleZoom(Qe,o),ft=e.options.zoomSnap;if(ft&&(Le=Math.floor(Math.round(Le/(ft/100))/100)*ft),Le=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Le)),!Number.isFinite(Le))return{center:t.getCenter(),zoom:Le};let Ge=e.getZoomScale(Le,o),ri=x*Ge-d,uf=g*Ge-u,l0=Math.max(ri,B?(Ge*(O-T)-s.x+a.x)/B:ri),Zs=(Math.min(uf,l0)+uf)/2,df=(Ge*(T+O)-a.x-s.x-(v+P)*Zs)/2;return y.x+=(m*df+f*Zs)/Ge,y.y+=(-f*df+m*Zs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ml(e,t){return k(this)||S(this)?Kn(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}b();H();W();function bl(e,t,r){if(!k(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return Kn(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=vo(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function Ll(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(j.value.panBy.call(this,r,t),!0)}b();H();W();function Bl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=vo(this),t=new h.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,Jt(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Tl=new WeakSet;var dm=new WeakMap;or();hm();function Pl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;Jn();ia();H();W();function na(){let e=this,t=ir.get(e);if(!k(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Fe(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Cl(){bo(this),Ne.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",na,this),ir.delete(this))}function Sl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",na,this))}async function Du(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Ou(),Au));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Tl.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}ze(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",Qn),this.on("rotate pitch",Pl,this),this.once("unload",Cl,this),this.whenReady(Sl,this),(this.options.rotate||this.options.trackContainerMutation)&&(dm.set(this,Du(this)),dm.get(this).catch(at))}b();function Ru(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&qn(this,this._map),t}function Uu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function ko(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Fu(e){Ve.value._setPos.call(this,ko(this._map,e));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=kn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function xt(e=this){let t=xe.get(e);t?.backend&&!t.disposed&&qe(t)}function Nu(e){Ve.value._updateZIndex.call(this,e);let t=Tr.get(this)!==e;Tr.set(this,e),t&&xt(this)}var zr=new WeakMap;b();function ju(e){let t=this._marker._map,r=h.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);h.DomUtil.setPosition(this._marker._icon,o),zr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Mi=new Map;var _o={value:null};function Wu(){_o.value=null;let e=[...Mi];Mi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Zu(e,t){Mi.set(e,t),_o.value===null&&(_o.value=requestAnimationFrame(Wu)),e._panRequest=_o.value}function $u(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return zr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=h.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=fe(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),h.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Zu(this,e)}function Vu(){if(!this.dragging||zr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;zr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=ju,e._adjustPan=$u,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function qu(){let e=Ve.value._initInteraction.call(this);return Vu.call(this),e}function Hu(){let e=Zi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Yu(){let e=$i.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Xu(){let e=this._map;if(!k(e)&&!S(e))return qi.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=fe(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(fe(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}b();function Ku(){if(Vi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ko(this._map,e).subtract(e);this._zoomAnimated?h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}b();function Ju(e){Hi.value.call(this,e);let t=ko(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function Qu(){let e=Xi.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function ed(e){if(!S(this._map)&&!k(this._map))return Yi.value.call(this,e);let t=this._map.getBounds();return new h.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Map.prototype));h.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});h.Map.include({layerPointToContainerPoint:ul,containerPointToLayerPoint:dl,_getCenterLayerPoint:hl,panBy:gl,setZoomAround:yl,panInside:xl,_limitCenter:vl,_limitOffset:wl,_getBoundsCenterZoom:Ml,getBoundsZoom:bl,_tryAnimatedPan:Ll,getBounds:Bl});h.Map.addInitHook(Gu);Ve.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Marker.prototype));h.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});h.Marker.include({setIcon:Ru,getEvents:Uu,_setPos:Fu,_updateZIndex:Nu,_initInteraction:qu});Zi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Hu});$i.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Yu});Vi.value=h.Popup.prototype._updatePosition;qi.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Xu,_updatePosition:Ku});Hi.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Ju});Yi.value=h.GridLayer.prototype._getTiledPixelBounds;Xi.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:Qu,_getTiledPixelBounds:ed});var le=new WeakMap;var V=new WeakMap;var fr=new WeakMap;var pr=new WeakMap;var q=new WeakMap;var je=new WeakMap;var Oe=new WeakMap;var cr=new WeakMap;var oe=new WeakMap;b();var za=new WeakMap;var bi=new WeakMap;var vt=new WeakSet;var Zm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var $m=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Vm=["minLon","minLat","maxLon","maxLat"];function Aa(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Zm.length;o++)r[Zm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<$m.length;o++)r[$m[o]]=t.getUint8(96+o);for(o=0;o<Vm.length;o++)r[Vm[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var Io=new WeakMap;async function zo(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(oe.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(Io.get(e)&&n!==Io.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&Io.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function Ar(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Ar(e.options.archive);let t=bi.get(e);return t||(t=zo(e,0,127).then(Aa),bi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Oa(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of V.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}b();b();function Da(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new h.LatLng(r,t),f=i.project(m),p=ct(s,m),c=L.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}var Ao=[];function Ga(e){return e.ground||0}function Or(e,t,r,o,i,n,a,s,m,f,p){let{backend:c,positions:l,normals:u,colors:d,uvs:y}=e,g=o.x-t.x,x=i-r,v=t.y-o.y,P=n.x-t.x,B=a-r,T=t.y-n.y;if((x*T-v*B)*s+(v*P-g*T)*m+(g*B-x*P)*f<0){let O=o,K=i;o=n,i=a,n=O,a=K}l.push(t.x,r+Ga(t),-t.y,o.x,i+Ga(o),-o.y,n.x,a+Ga(n),-n.y),u.push(s,m,f,s,m,f,s,m,f),d.push(p.r,p.g,p.b,p.r,p.g,p.b,p.r,p.g,p.b),c.options.nightLight&&y.push(...t.uv,...o.uv,...n.uv)}function td(...e){Or(Ao[Ao.length-1],...e)}function Ra(e,t,r,o){Ao.push(e);try{t(r,o,td)}finally{Ao.pop()}}var Dr=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function rd(e,t){let r=new Array(Dr.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Dr[o].x*t,y:e.y+Dr[o].y*t,ground:e.ground,uv:[3,3]};return r}function od(e,t,r){let o=Ie(5264986),i=t.poleRadius;if(!Number.isFinite(i)||i<=0)throw new Error("Invalid lamp pole radius");let n={...e,uv:[3,3]},a,s,m,f,p,c,l,u,d,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,m=y?t.top+.15:t.top,f=rd(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Dr[p].nx,d=Dr[p].nz,r(c,s,l,s,l,m,u,0,d,o),r(c,s,l,m,c,m,u,0,d,o),r(n,m,c,m,l,m,0,1,0,o),r(n,s,l,s,c,s,0,-1,0,o)}function id(e,t,r,o,i,n,a,s,m,f){typeof s!="number"?(e(r,a,o,a,i,a,...s,t),e(r,a,i,a,n,a,...s,t)):(e(r,a,o,a,i,a,s,m,f,t),e(r,a,i,a,n,a,s,m,f,t))}function Li(e,t,r,o){return{x:e.x+(o===2?0:t*.65),y:e.y+(o===1?0:o===2?t*.65:r*.65),ground:e.ground+(o===0?0:r*.65),uv:[t,r]}}function nd(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=Ie(t.color),i;for(i=0;i<3;i++)id(r,o,Li(e,-1,-1,i),Li(e,1,-1,i),Li(e,1,1,i),Li(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Ua=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Oo=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function Bi(e,t){let r=new Array(Oo.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Oo[o].x*t,y:e.y+Oo[o].y*t,ground:e.ground};return r}function Fa(e,t,r,o,i,n,a){let s=Bi(e,r),m=Bi(e,i),f,p,c,l,u,d,y,g,x;for(f=0;f<8;f++)p=(f+1)%8,c=(r-i)/(n-o),l=Math.hypot(1,c),{nx:u,nz:d}=Oo[f],y=c/l,g=u/l,x=d/l,r&&t(s[f],o,s[p],o,m[p],n,g,y,x,a),i&&t(s[f],o,m[p],n,m[f],n,g,y,x,a)}function ad(e,t,r,o,i,n){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(r)||e<=0||t<e||r<=o||r>=i||n!=="round"&&n!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function sd(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:m="round"}=t;ad(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);Fa(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Bi(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);Fa(e,r,a,s,0,o,p)}else for(c=1;c<Ua.length;c++)[l,u]=Ua[c-1],[d,y]=Ua[c],Fa(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function md(e,t,r,o,i){let{top:n}=r;if(e.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!e.supports.has(i)&&(Ra(e,od,t,r),e.supports.add(i)),Ra(e,nd,t,r),e.lights.push({position:[t.x,t.ground+n,-t.y],radius:Math.hypot(n,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else Ra(e,sd,t,r)}function fd(e,t,r,o,i,n){let a=Da(e,r,o);md(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Na(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=L.get(r),f,p,c,l,u,d;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new h.LatLng(c,p),u=o.project(l),d=ct(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.position[1])?d-m.position[1]:0})}return s}function pd(e,t,r,o,i){let n=[],a,s,m,f,p,c,l,u,d,y,g;for(a of t)for(s of a)n.push(s);for([m,f,p]of ho(t[0],t.slice(1)))Or(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Or(e,n[m],o,n[f],o,n[p],o,0,-1,0,i);for(c=0;c<t.length;c++)for(a=t[c],l=zn(a)===(c===0)?-1:1,u=0;u<a.length;u++)m=a[u],f=a[(u+1)%a.length],d=Math.hypot(f.x-m.x,f.y-m.y),d&&(y=l*(f.y-m.y)/d,g=l*(f.x-m.x)/d,Or(e,m,o,f,o,f,r,y,0,g,i),Or(e,m,o,f,r,m,r,y,0,g,i))}function qm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Na(e,a));pd(e,n,r,o,i)}function cd(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function ld(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}function ud(e,t,r,o,i,n){let a=t.geometry,s=[],m=a.type==="Polygon"?[a.coordinates]:a.type==="MultiPolygon"?a.coordinates:[],f,p,c;for(f of m){if(!f.length)throw new Error("Empty GeoJSON polygon");c=[];for(p of f)c.push(Na(e,p));s.push(c)}let l=a.type==="Point"?Da(e,r,o):null,u=e.backend.options.nightLight,d=l?Ie(i.color??(u?void 0:5210683)):n,y=l&&!u?Ie(i.trunkColor??7491898):null;e.jobs.push({point:l,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:d.r,g:d.g,b:d.b},trunkColor:y?{r:y.r,g:y.g,b:y.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}function dd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=cd(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(n){let P=i.project(new h.LatLng(p,f),n.z);if(Math.floor(P.x/256)!==n.x||Math.floor(P.y/256)!==n.y)return}let c=ld(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){ud(e,t,f,p,c,y),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y});return}let g=e.positions.length/3;m&&fd(e,t,f,p,c,y);let x;if(s.type==="Polygon")qm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)qm(e,x,l,u,y);let v=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:g/3,faceEnd:v/3,vertexStart:g,vertexEnd:v})}function hd(e){let{positions:t,normals:r,colors:o,featureFaces:i}=e;if(e.backend.options.nightLight||i.length<2)return e;let n=i[0].vertexEnd,a=n*3;if(!n||t.length!==a*i.length)return e;let s=Math.trunc(t[0]),m=Math.trunc(t[1]),f=Math.trunc(t[2]),p=new Float32Array(a),c,l,u,d;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?m:f);let y=new Float32Array(i.length*4);for(l=0;l<i.length;l++){if(u=i[l],d=l*a,u.vertexStart!==l*n||u.vertexEnd!==(l+1)*n)return e;for(y[l*4]=s+t[d]-t[0],y[l*4+1]=m+t[d+1]-t[1],y[l*4+2]=f+t[d+2]-t[2],y[l*4+3]=l*n,c=0;c<a;c++)if(Math.fround(p[c]+y[l*4+c%3])!==Math.fround(t[d+c])||Math.fround(r[c])!==Math.fround(r[d+c])||Math.fround(o[c])!==Math.fround(o[d+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function gd(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry||hd(e),n={position:{size:3,data:i.positions instanceof Float32Array?i.positions:new Float32Array(i.positions)},normal:{size:3,data:i.normals instanceof Float32Array?i.normals:new Float32Array(i.normals)},color:{size:3,data:i.colors instanceof Float32Array?i.colors:new Float32Array(i.colors)}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:e.uvs instanceof Float32Array?e.uvs:new Float32Array(e.uvs)});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Pe(),device:o,geometry:m,program:Ke(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:ut.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,Z(r.mesh,L.get(t)),_(t)}var yd=new TextDecoder;function xd(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var vd={bytes:null,cursor:0};function Do(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function wd(e){let t=vd,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Do(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=Do(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=Do(t);for(s of i)if(s.length=Do(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Do(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function Go(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Md(e,t,r,o){return wd(await Go(await zo(e,t,r),o))}async function bd(e,t,r,o){let i=pr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,Md(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Ld(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function Bd(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await Go(await zo(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Td(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await bd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Ld(p,r),!c)return;if(c.runLength)return l=await Bd(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function Gr(e,t,r,o,i){if(!vt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return Gr(e.options.archive,t,r,o,i);let n=xd(t,r,o);i?.throwIfAborted();let a=await Ar(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Td(e,a,n,i)}async function Pd(e,t){if(q.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await Gr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(yd.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function Cd(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*C),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var Sd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Ed(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function kd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Ed.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Hm=new WeakMap;function _d(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function Id(e,t){let r=e&&Hm.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Hm.set(e,r),e.once("unload",_d.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return o={url:t,pool:r,worker:new Worker(t,{type:"module"})},r&&r.entries.add(o),o}async function zd(e,t){let r=Id(e.map||e.backend._map,e.backend.options.workerUrl||Sd),{worker:o,pool:i}=r,n={worker:o,signal:t,input:{jobs:e.jobs,nightLight:!!e.backend.options.nightLight}};r.task=n;let a=!1;try{let s=await new Promise(kd.bind(null,n)),m;for(m=0;m<s.ranges.length;m++)Object.assign(e.featureFaces[m],s.ranges[m]);e.positions=s.positions,e.uvs=s.uvs,e.lights=s.lights,e.preparedGeometry=s,a=!0}finally{o.removeEventListener("message",n.onEvent),o.removeEventListener("error",n.onEvent),o.removeEventListener("messageerror",n.onEvent),t.removeEventListener("abort",n.onEvent),r.task=null,a&&i&&!i.closed&&!t.aborted?i.idle.push(r):(r.closed||o.terminate(),i&&i.entries.delete(r)),e.jobs=null}}async function Ad(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let i=await Pd(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(q.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");let n=Cd(e,t,r);e.options.worker!==!1&&typeof Worker<"u"&&i.features.length>=64&&(n.jobs=[]);let a=performance.now()+4;for(o of i.features){if(t.request.signal.aborted)return;if(performance.now()>=a){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;a=performance.now()+4}dd(n,o)}if(n.jobs&&await zd(n,t.request.signal),t.request.signal.aborted)return;gd(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{je.set(e,je.get(e)-1),Ti(e,r)}}function ja(e,t){return e.distance-t.distance}function Od(e,t){let r=[],o,i,n;for(o of e)for(i of V.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(ja),r}function Ti(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of U.get(r))Number.isFinite(je.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Od(o,t),m=0;for(i of o)m+=je.get(i);for({layer:a,area:n}of s){if(m>=4)break;je.get(a)>=2||(n.started=!0,je.set(a,je.get(a)+1),m++,Ad(a,n,t))}for(i of o)Oa(i)}var Je=new WeakMap;var be=new WeakMap;function Mt(e,t){t?.model&&(t=null),!(Je.get(e)?.mesh===t?.mesh&&Je.get(e)?.vertexStart===t?.vertexStart)&&(Je.get(e)&&(Je.get(e).mesh.highlight=null),Je.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),_(e))}var Ce=new WeakMap;var lr=new WeakMap;var Se=new WeakMap;function bt(e,t,r){let o=Se.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ce.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=z.get(e),n;if(i){let a=!1;for(n of U.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(lr.get(i)===void 0&&lr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):lr.get(i)!==void 0&&(Ce.get(e).style.cursor=lr.get(i),lr.delete(i))}}function Rr(e,t){t.request.abort();let r;if(t.mesh){Je.get(e)?.mesh===t.mesh&&(Mt(e,null),be.set(e,null),bt(e,null)),Z(t.mesh,null),_(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Dd(e,t){return e.distance-t.distance}function Ur(e){if(!e._map||!z.get(e))return;if(q.get(e)){V.get(e).has("geojson")||V.get(e).set("geojson",{request:new AbortController}),Ti(e);return}if(!R.get(e))return;let t=R.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([R.get(e).maxLat,R.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([R.get(e).minLat,R.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of V.get(e))m.has(c)||(Rr(e,l),V.get(e).delete(c));let d=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,d.push(u);d.sort(Dd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ti(e)}function Ro(e){if(!L.get(e)||!D.get(e))return;wt.get(e)==null&&wt.set(e,L.get(e).position[1]);let t=ae.get(e._map),r=t&&Kt(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function Gd(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Rd(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Ud(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Gd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Rd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Uo=new WeakMap;function Fd(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function ur(e,t,r){throw Fd(r),st.get(t).reject(e),ie.delete(r),e}async function Nd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){ur(o,e,t)}return r||ur(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function jd(e,t,r){try{return await e.requestDevice()}catch(o){ur(o,t,r)}}function Wd(e){let t=Uo.get(e.currentTarget),r=ie.get(t);if(w.get(r)?.device!==e.currentTarget||!U.get(r))return;let o;for(o of U.get(r))o.fire("error",{error:e.error})}function Zd([e,t]){let r=Uo.get(t),o=ie.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of U.get(o))n.fire("error",{error:i})}function $d(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var Fo=new Float32Array(20);Fo[0]=Fo[5]=Fo[10]=Fo[15]=1;function Vd(e,t){let r=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),o=w.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=w.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=w.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});w.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},w.get(e).device.queue.writeBuffer(o,0,Fo),vn(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,w.get(e).roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:a,format:"rgba8unorm",srgb:!1,uploaded:null}}var Fr=new WeakMap;var Wa=[];function qd(){let e=Wa.shift();Fr.set(e,!1),!(z.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function Pi(){let e=this;Fr.get(e)||(Fr.set(e,!0),Wa.push(e),queueMicrotask(qd))}var No=new WeakMap;function Ci(){No.set(this,null)}var Za=[];function Hd(){let e=Za.shift();z.get(e)===e&&w.get(e)&&rr(e)}function Si(e){let t=this._map;e&&!Re.get(this)&&(Re.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Za.push(this),queueMicrotask(Hd)}function Ei(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Re.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Qi(e._map),No.set(e,null),_(e)}function Yd(e,t,r){Yt.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene");let o=t.getPane("webgpuPane");o||(o=t.createPane("webgpuPane",t.getContainer()),o.style.zIndex=1,o.style.pointerEvents="none"),o.append(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.on("zoomstart",Ci,e),t.on("zoomanim",Si,e),t.on("zoomend",Ei,e)}async function Xd(e,t){let r=document.createElement("canvas");navigator.gpu||ur(new Error("Layer3D requires WebGPU"),e,t);let o=await Nd(e,t),i=await jd(o,e,t);Uo.set(i,t),i.addEventListener("uncapturederror",Wd),Promise.all([i.lost,Promise.resolve(i)]).then(Zd);let n=r.getContext("webgpu");n||(i.destroy(),ur(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),z.set(e,e),U.set(e,new Set),ne.set(e,D.get(e)),ee.set(e,Pe()),Q.set(e,$d()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Vd(e,i),Yd(e,t,r)}async function jo(e,t){let r=ie.get(t);st.get(r)&&await st.get(r).promise,r||(r=e,st.set(e,Promise.withResolvers()),st.get(e).promise.catch(at),ie.set(t,r),await Xd(e,t),st.get(e).resolve(),st.delete(r),rr(r),ie.set(t,r));let o=t.options.crs.project(ne.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(ne.get(r).lat*C);wt.get(e)==null&&wt.set(e,L.get(e).position[1]),L.get(e).position[0]=(i.x-o.x)*n,L.get(e).position[1]=wt.get(e),L.get(e).position[2]=-(i.y-o.y)*n,Ro(e),L.get(e).scale.fill(n/Math.cos(D.get(e).lat*C)),z.set(e,r),w.set(e,w.get(r)),ee.set(e,ee.get(r)),Q.set(e,Q.get(r)),U.get(r).add(e),Z(L.get(e),ee.get(r)),At(L.get(e),Ud,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Ur(e)}var De=new WeakMap;var Kd=new TextDecoder;function Jd(e){if(!e)return!1;let t,r;for(t of e)for(r of t.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Qd(e){let t=new DataView(e),r=Kd,o,i,n,a,s;if(t.getUint32(0,!0)===1179937895){if(t.getUint32(4,!0)!==2||t.getUint32(8,!0)!==e.byteLength)throw new Error("Invalid GLB header");let m;for(i=12;i<e.byteLength;){if(i+8>e.byteLength)throw new Error("Truncated GLB chunk");if(n=t.getUint32(i,!0),a=t.getUint32(i+4,!0),i+=8,i+n>e.byteLength)throw new Error("Truncated GLB data");s=e.slice(i,i+n),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(m=s),i+=n}if(!o)throw new Error("Missing GLB JSON");m&&(o.buffers[0].binary=m)}else o=JSON.parse(r.decode(e));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Jd(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function $a(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],d=m*l-f*c,y=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)x=u===0?i:u===1?n:a,r[x*3]+=d,r[x*3+1]+=y,r[x*3+2]+=g;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function Ym(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Ym(r,t)}function Wo(e,t){if(!De.get(e))return;let r=[];Ym(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,v,P,B,T,O;if(!ve.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Be(n));return}we(L.get(e));let K=e._map,G=K.options.crs,N=G.project(ne.get(z.get(e))),J=Math.cos(ne.get(z.get(e)).lat*C),pe=G.scale(de.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],d=m.data[l+1],y=m.data[l+2],g=p[1]*u+p[5]*d+p[9]*y+p[13],x=Math.max(0,Math.min(1,1-(g-L.get(e).position[1])/8)),x&&(v=p[0]*u+p[4]*d+p[8]*y+p[12],P=p[2]*u+p[6]*d+p[10]*y+p[14],B=G.transformation.transform(new h.Point(N.x+v/J,N.y-P/J),pe),T=Kt(t,B),Number.isFinite(T)&&(O=(T-g)*x,m.data[l]+=c[4]*O,m.data[l+1]+=c[5]*O,m.data[l+2]+=c[6]*O));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set($a(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function eh(e,t){if(e.binary)return;let r=await fetch(new URL(e.uri,t).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);e.binary=await r.arrayBuffer()}var th={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function rh(e,t,r){let o;if(r.bufferView!==void 0){let i=e.bufferViews[r.bufferView],n=e.buffers[i.buffer].binary;o=new Blob([n.slice(i.byteOffset||0,(i.byteOffset||0)+i.byteLength)],{type:r.mimeType})}else{let i=await fetch(new URL(r.uri,t).href);if(!i.ok)throw new Error(`Unable to load model texture: HTTP ${i.status}`);o=await i.blob()}return createImageBitmap(o,th)}async function oh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(eh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(rh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function ih(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function ki(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=ih(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function nh(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:ki(e,o?.baseColorTexture,!0),metalTexture:ki(e,o?.metallicRoughnessTexture),emissiveTexture:ki(e,t.emissiveTexture,!0),occlusionTexture:ki(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function ah(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||it)o.materials.push(nh(o,i));return o}var sh=[0,0,0,1];var mh=[1,1,1];var fh=[0,0,0];function ph(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||sh,[n,a,s]=e.scale||mh;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||fh,1]}var ch=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Va={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var lh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function uh(e,t,r){return t===Int8Array?e.getInt8(r):t===Uint8Array?e.getUint8(r):t===Int16Array?e.getInt16(r,!0):t===Uint16Array?e.getUint16(r,!0):t===Uint32Array?e.getUint32(r,!0):e.getFloat32(r,!0)}function qa(e,t,r,o,i,n,a,s,m,f){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,l=e.buffers[p.buffer].binary;if(f||=r*c,!l||f<r*c||s<0||(p.byteOffset||0)+p.byteLength>l.byteLength||(m-1)*f+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let u=new DataView(l),d,y,g,x;for(d=0;d<m;d++){if(x=n?n[d]:d,n&&x>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)g=(p.byteOffset||0)+s+d*f+y*c,o[x*r+y]=uh(u,t,g)}}function dh(e,t,r,o,i){let n=t.sparse,a=Va[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],m=(s.byteOffset||0)+(n.indices.byteOffset||0);if(n.count>t.count||(n.indices.byteOffset||0)+n.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let f=new a(e.buffers[s.buffer].binary.slice(m,m+n.count*a.BYTES_PER_ELEMENT));qa(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function hh(e,t,r,o){let i=new Float32Array(r.length),n;for(n=0;n<r.length;n++)i[n]=e.normalized?Math.max(-1,r[n]/(t===Int8Array?127:t===Int16Array?32767:t===Uint8Array?255:t===Uint32Array?4294967295:65535)):r[n];return{data:i,size:o,indices:r}}function Ha(e,t){let r=e.accessors[t],o=Va[r.componentType],i=lh[r.type];if(!o||!i||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let n=new o(r.count*i);return r.bufferView!==void 0&&qa(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&dh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:hh(r,o,n,i)}function gh(e,t){let r={},o,i;for([o,i]of ch)t.attributes[o]!==void 0&&(r[i]=Ha(e,t.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let n=r.position.data.length/3;if(r.position.size!==3||n<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==n)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:n}}function yh(e,t,r,o){if(t.indices!==void 0){let i=Ha(e,t.indices);if(r.index={size:1,data:i.indices},!(i.indices instanceof Uint8Array||i.indices instanceof Uint16Array||i.indices instanceof Uint32Array)||i.size!==1||i.indices.length%3)throw new Error("Invalid glTF triangle indices");let n;for(n of i.indices)if(n>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function xh(e,t,r){let o;r.normal||(o=$a(r.position.data,r.index?.data),r.normal={size:3,data:o});let i=e.materials[t.material]||{color:[1,1,1],metallic:1};if((i.baseTexture||i.metalTexture||i.emissiveTexture||i.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let n=Ke(e.backend,i);e.resources.push(n);let a=w.get(e.backend).device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,m;for([s,m]of Object.entries(r))m.size||=1,m.count=m.data.length/m.size,m.indexFormat=m.data instanceof Uint32Array?"uint32":"uint16",m.buffer=a.createBuffer({size:Math.max(4,m.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(m.buffer,0,m.data);let f={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(f),{device:a,geometry:f,program:n}}function Xm(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Pe(),name:n.name};a.matrix=ph(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=gh(o,s),f=m.attributes,p=m.vertexCount,yh(o,s,f,p),c=xh(e,s,f),l={...Pe(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:ut.value++,renderOrder:0},l.name=o.meshes[n.mesh].name,l.extras=n.extras||{},Z(l,a);for(u of n.children||it)Z(Xm(e,u),a);return i.delete(t),a}function vh(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function wh(e,t){let r=[],o;try{for(o of t.nodes)r.push(Xm(e,o))}catch(i){throw vh(e),i}return r}function Mh(e){let t=De.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function bh(e){await le.get(e).promise;let t=new URL(Oe.get(e),document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`Unable to load model: HTTP ${r.status}`);let o=await r.arrayBuffer(),i=Qd(o),n=new URL(".",t).href,a=await oh(e,i,n),s=ah(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=wh(s,m),p={...Pe(),id:t,extras:i.extras||{}};if(!f.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of f)Z(c,p);De.set(e,p),Mh(e),Z(De.get(e),L.get(e)),Wo(e,ae.get(e._map))}async function Lh(e){try{return L.set(e,Pe()),te.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(za.set(e,L.get(e)),oe.get(e)&&R.set(e,await Ar(e))),e._map&&(await jo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await bh(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Bh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${h.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=h.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}function Th(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===h.Util.stamp(t)||i instanceof h.LayerGroup&&i.hasLayer(t))return Bh(o,t,r),!0;return!1}function Ya(e){let t=Th(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Xa=[];function Ph(){let e=Xa.shift();e?.map.hasLayer(e.layer)&&Ya(e)}function Ka(){Xa.push(this),queueMicrotask(Ph)}function Ch(){this.map.off("layeradd layerremove",Ka,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function Zo(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Ka,o),e.once("remove",Ch,o),Ya(o)}function Sh(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Oe.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Eh(e,t,r,o){let i=fr.get(e),n=Oe.get(e),a=De.get(e);n&&(t=a?1:0);let s=r||(n?!a:!R.get(e)&&!q.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Sh(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Km(e){let t=e.target,r=fr.get(t);if(!t._map)return;e.type==="add"&&Zo(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of V.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Eh(t,o,i,n)}function Lt(e,t=go){cr.set(e,!0),h.Util.setOptions(e,{ariaLabel:"3D scene",...t}),I.set(e,"3d");let r=!q.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Oe.set(e,r?e.options.url:null),oe.set(e,e.options.url&&!r&&!q.get(e)?new URL(e.options.url,document.baseURI).href:null),pr.set(e,new Map),e.options.center&&D.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),je.set(e,0),oe.get(e)||q.get(e)||r){let o=h.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",fr.set(e,o),e.on("add error",Km),e.on("ready progress",h.Util.throttle(Km,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Lh.bind(null,e))),re.get(e).catch(at)}b();var kh=new Map;var _h=new Map;function Ih(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var _i=[null];var Gt=new WeakMap;var We=new WeakMap;var Rt=new WeakMap;X();var Ja={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Ii={size:[null,null],format:"r32float",usage:null};var Qa={texture:null};var Jm={bytesPerRow:null};var es=[null,null];function zh(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function Ah(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,zh(n,s,c,r);return n}function Oh(e,t){let r=w.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Gt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Ah(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Ii.size[0]=i*256,Ii.size[1]=n*256,Ii.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Ii)),low:Number.isFinite(s)?s:We.get(e),high:Number.isFinite(m)?m:We.get(e)}),r.queue.writeTexture((Qa.texture=Ee.get(e).texture,Qa),a,(Jm.bytesPerRow=i*1024,Jm),(es[0]=i*256,es[1]=n*256,es)),Qa.texture=null,Bt.set(e,new Map),ue.set(e,Ke(e,{baseTexture:t,unlit:!0,terrain:Ee.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ue.get(e)}var ts={size:null,usage:null};function Dh(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Gh(e,t){let r=w.get(e).device,o=Bt.get(e).get(t);if(!o){o=Dh(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((ts.size=Math.max(4,n.data.byteLength),ts.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ts)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Rh(e,t,r,o){let i=We.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function Uh(e,t,r,o){if(!await Rt.get(e)||!e._map||ae.get(e._map)!==e||me.get(t)!==e||o.request.signal.aborted||!A.get(t).has(`${r.z}/${r.x}/${r.y}`)||A.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-de.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*C),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=Ja;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let d=s.transformation.untransform(l,p),y=w.get(e).device,g=o.texture,x=Oh(e,g),v=Gh(e,n),P=We.get(e),B=(d.x-u.x)*f,T=-(d.y-u.y)*f,O=Rh(e,v,B,T),K={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,T],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:O,program:x,texture:g,terrain:[r.x*256*c-Gt.get(e).min.x*256,r.y*256*c-Gt.get(e).min.y*256,256*c,P],tile:o,opacity:t.options.opacity??1,id:ut.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,Z(K,L.get(e)),_(e),A.get(e).set(o,K)}async function rs(e,t,r){if(me.get(e)&&r.done&&!r.request.signal.aborted&&A.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await Uh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var zi={size:[null,null],format:"rgba8unorm",usage:null};var Fh={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var os={size:null,usage:null};var Nh=[0,0,0,1,0,0,0,0,1,1,0,1];var jh=[0,1,0,0,1,0,0,1,0,0,1,0];var Wh=[0,0,1,0,0,1,1,1];var Zh=[0,2,1,1,2,3];function $h(e){let t={position:{size:3,data:new Float32Array(Nh)},normal:{size:3,data:new Float32Array(jh)},uv:{size:2,data:new Float32Array(Wh)},index:{data:new Uint16Array(Zh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((os.size=o.data.byteLength,os.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Vh(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((zi.size[0]=t.image.width,zi.size[1]=t.image.height,zi.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,zi)),sampler:r.createSampler(Fh),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Br,n=Kr,a=Jr;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ue.get(e)||ue.set(e,Ke(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Tt.get(e)||Tt.set(e,$h(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*C),c=m.scale(s.z),l=Ja;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let d=m.transformation.untransform(l,c),y=(d.x-u.x)*p,g=-(d.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[y,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Tt.get(e),program:ue.get(e),texture:o,opacity:e.options.opacity,id:ut.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},Z(t.mesh,L.get(e))}async function qh(e,t){try{await re.get(e);let r=await Gr(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{_i[0]=r.data;let o=new Blob(_i);_i[0]=null,t.image=await createImageBitmap(o)}}catch{throw _i[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Vh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),rs(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),_(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Te.set(e,(Te.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{se.set(e,se.get(e)-1),e._map&&(is(e),ao(e),se.get(e)||e.fire("load"),_(e))}}function Hh(e,t){t.started=!0;let r=se.get(e)===0;return se.set(e,se.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),qh(e,t)}function is(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of A.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(Ih);for({tile:i}of o){if(se.get(e)>=4)break;Hh(e,i)}}function Yh(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&no(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var dr=[0,0];var hr=[0,0];function Xh(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();dr[0]=t.maxLat,dr[1]=t.minLon,hr[0]=t.minLat,hr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(dr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(hr,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function as(e){let t=e._map;if(!t||!z.get(e)||!R.get(e))return;let r=Math.max(R.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));Qt.set(e,r);let o=Xh(t,R.get(e),r),i=kh;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});Ht.set(e,new Set(i.keys()));let p=_h;p.clear();let c=Math.max(R.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)A.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),Yh(e,u),is(e),ao(e)}function Kh(e){let t=as.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Jh(e,t){let r=await Ar(t);return e.options.archive=t,R.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function Qh(e,t){throw e.fire("error",{error:t}),t}function $o(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&io(me.get(e),r),r.mesh&&(r.mesh.visible=!0,Z(r.mesh,L.get(e)));if(me.set(e,t||null),t)for(r of A.get(e).values())r.done&&rs(e,r.coords,r)}async function eg(e,t,r){try{await r,le.get(e).resolve(),$o(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function tg(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&as(e)}catch(o){e.fire("error",{error:o})}}function rg(e,t){D.get(e)||D.set(e,t.getCenter());let r=jo(e,t);eg(e,t,r),tg(e,t,r)}function og(e){let t,r;for(t of A.get(e).values())no(e,t);if(ue.get(e)?.pipelineCache.clear(),ue.set(e,null),Tt.get(e)){for(r of Object.values(Tt.get(e).attributes))F(e,r.buffer);Tt.set(e,null)}}var gr=new WeakMap;var Nr=new WeakMap;var Pt=new WeakMap;var jr=new WeakMap;var yr=new WeakMap;var xr=new WeakMap;var Vo=new WeakMap;var ss=new WeakMap;var qo=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var Ut=new WeakMap;var ms=new WeakMap;var fs={_3d:cr,_added:le,_areas:V,_bridgeMesh:Nr,_bridges:rt,_cameraZIndexOffset:Tr,_countStatus:fr,_cursor:lr,_dem:Ee,_directories:pr,_etag:Io,_fadeFrame:xr,_fadeVersion:Vo,_frame:et,_geojson:q,_header:bi,_inflight:je,_layers:U,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:gr,_pruneAfter:zt,_pruneVersion:ci,_pruneWanted:li,_queued:Fr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:si,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:ss,_terrainBaseY:wt,_terrainBounds:Gt,_terrainController:qo,_terrainGrids:Bt,_terrainLoading:vr,_terrainOriginElevation:We,_terrainPromise:Rt,_terrainReady:ve,_terrainRequest:Mn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Lr,_wantedRasterTiles:Ht,_zoomLevel:No,_zoomTransitions:ce,_zoomView:Re,camera:Q,container:Ce,control:Pt,eventMap:jr,events:yr,group:za,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:D,model:De,modelUrl:Oe,raycaster:te,ready:re,renderer:w,root:L,scene:ee,terrainSource:wr,url:oe,walker:ms};b();var ig=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Ho(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var ag=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function sg(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function mg(e,t){if(Y.get(e)&&F(e,Y.get(e).texture.texture),Y.set(e,null),ce.get(e)){let i;for(i of ce.get(e).keys())i.play()}ce.set(e,null),Re.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),sg(r,e),ie.delete(t);let o;for(o of ag)fs[o].delete(e)}function Yo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Ho(e),h.DomEvent.off(Ce.get(e),gr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Rr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Oa(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),U.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,e),t.off("zoomstart",Ci,e),t.off("zoomanim",Si,e),t.off("zoomend",Ei,e),wn(e),U.get(e).size){let s=U.get(e).values().next().value;for(o of ig)n=fs[o],n.set(s,n.get(e)),n.delete(e);for(i of U.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Pi,s),t.on("zoomstart",Ci,s),t.on("zoomanim",Si,s),t.on("zoomend",Ei,s),_(s)}else mg(e,t);else _(a);z.set(e,null),w.set(e,null),ee.set(e,null),Q.set(e,null)}}function fg(e,t){og(e),me.set(e,null),Yo(e,t)}b();function ps(e,t){I.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},h.Util.setOptions(e,t),L.set(e,Pe()),V.set(e,new Map),A.set(e,new Map),se.set(e,0),le.set(e,Promise.withResolvers()),oe.set(e,new URL(t.url,document.baseURI).href),pr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(Jh.bind(null,e)).catch(Qh.bind(null,e)))}var pg=Object.freeze([]);function cg(e){I.get(e)==="raster"&&$o(e,null)}function lg(e,t){qo.get(e)?.abort(),vr.set(e,!1),ve.set(e,!1),t.eachLayer(cg);let r,o,i,n;for(r of A.get(e).keys())io(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Wo(o,null),Ro(o);t.fire("terrainchange"),Ye.get(e).clear(),We.set(e,0),Rt.set(e,null),ue.get(e)&&ue.get(e).pipelineCache.clear(),ue.set(e,null),Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,null);for(i of Bt.get(e)?.values()||pg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Nr.get(e)),Nr.set(e,null),Yo(e,t)}async function ug(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await Gr(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);Ye.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function dg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function hg(e,t){let r=e._map;de.set(e,t.maxZoom),dr[0]=t.maxLat,dr[1]=t.minLon;let o=r.project(dr,de.get(e)).divideBy(256).floor();hr[0]=t.minLat,hr[1]=t.maxLon;let i=r.project(hr,de.get(e)).divideBy(256).floor();Gt.set(e,new h.Bounds(o,i));let n=[],a=r.project(r.getCenter(),de.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:de.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(ja),n}X();b();function gg([e,t,r],o,i,n,a){let s=o.project(new h.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function yg(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function xg(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,d,y;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)d=`${l}/${u}`,y=rt.get(e).get(d),y||rt.get(e).set(d,y=[]),y.push(g)}function vg(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,d;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,d=t[l],o.push(d[0],d[1]-(u>=3?1.2:0),d[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function wg(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Mg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)wg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function bg(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,d,y,g,x,v,P,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let T=[],O=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),T.push([y.x,y.y,d]);for(p of f)for(g of p)O.push(gg(g,n,a,s,m));try{x=yg(f,T),[v,...P]=x,B=ho(v,P)}catch{return}xg(r,T,B),vg(e,O,B),Mg(e,O,f)}function Lg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*C),s=L.get(e).position[1],m=[],f=[],p=[];rt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,d;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,d=0;d<(l.type==="Polygon"?1:u.length);d++)bg(c,l.type==="Polygon"?u:u[d]);m.length&&Nr.set(e,er(e,{position:m,normal:f,color:p}))}function Bg(e,t,r){ve.set(e,!0),We.set(e,Kt(e,D.get(e))??0);let o;for(o of Object.values(t._layers))Ro(o),Wo(o,e);r&&Lg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function cs(e){if(vr.get(e)||!e._map)return;vr.set(e,!0),ve.set(e,!1);let t=new AbortController;qo.set(e,t);let r;try{if(!wr.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Un({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(wr.get(e))?"cog":"pmtiles",url:wr.get(e),archive:e.options.archive,asset:e.options.asset}});ss.set(e,o),await re.get(o);let i=R.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=hg(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(ug(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(dg);return t.signal.aborted||e._map!==n?void 0:(Bg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{vr.set(e,!1)}}b();function ls(e,t){let r=De.get(e);if(!L.get(e)||!Q.get(e))return null;let o,i,n,a,s,m,f;for(o of Wn(e,t,L.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function Tg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Ho(e);return}be.set(e,ls(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function Pg(e){Tg(this,e)}function Cg(e,t){let r=ls(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Sg(e){Cg(this,e)}function Eg(){Ho(this)}async function kg(e,t){try{await jo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function us(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new h.LatLng(r.lat,r.lng))}(oe.get(e)||q.get(e)||e.options.tooltip||Oe.get(e))&&(Ce.set(e,t.getContainer()),gr.get(e)||gr.set(e,{mousemove:Pg,click:Sg,mouseleave:Eg}),e.options.tooltip&&(Se.set(e,h.DomUtil.create("div","leaflet-3d-tooltip",Ce.get(e))),Se.get(e).hidden=!0,Se.get(e).setAttribute("role","tooltip"),Se.get(e).setAttribute("aria-live","polite"),Se.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),h.DomEvent.on(Ce.get(e),gr.get(e),e)),L.get(e)&&kg(e,t)}function _g(){cs(this.backend).then(this.resolve,this.reject)}function Ig(e){I.get(e)==="raster"&&$o(e,this)}function zg(e,t){if(ae.get(t)&&ae.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(ae.set(t,e),us(e,t),L.get(e))Rt.set(e,cs(e));else{let r=Promise.withResolvers();Rt.set(e,r.promise),e.once("ready",_g,{backend:e,...r})}t.eachLayer(Ig,e),t.fire("terrainchange")}function Ag(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),wr.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Xo=new WeakMap;var Ai=new WeakMap;var Oi=new WeakMap;b();Jn();X();H();W();function Og(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function Qm(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Og(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Ft({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=tt.get(e),a=Ne.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=k(e)*C,f=S(e)*C;Qm(r,n,a,s,m,f,i),Qm(o,n?.moon,a,s,m,f,i)}var Dg=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var ef=[0,0,0];function ds(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function tf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function Gg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Dg,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${tf(ds(n[1],i[1],a,ef))}, ${tf(ds(n[2],i[2],a,ef))})`,tint:ds(n[3],i[3],a)}}function hs(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}X();function gs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*C-o,a=t*C,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/C+180+360)%360;return{altitude:s/C,azimuth:f,direction:[Math.sin(f*C)*Math.cos(s),Math.sin(s),-Math.cos(f*C)*Math.cos(s)]}}X();X();var Di=Math.sin(23.4397*C);X();var Gi=Math.cos(23.4397*C);function Rg(e,t,r){let o=hs(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*C,n=(218.316+13.176396*o+6.289*Math.sin(i))*C,a=5.128*Math.sin((93.272+13.22935*o)*C)*C,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Gi-Math.sin(a)*Di,f=Math.cos(a)*Math.sin(n)*Di+Math.sin(a)*Gi;return gs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Ug(e,t,r){let i=hs(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*C,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*C,s=Math.asin(Math.sin(a)*Di),m=Math.atan2(Math.sin(a)*Gi,Math.cos(a));return gs(i,t,r,m,s)}function Wr(e){let t=ie.get(e);t&&_(t)}function Mr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=Ug(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,Gg(f.altitude)),f.moon=Rg(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Ft(e),Wr(r)}catch(s){tt.delete(r),Ft(e),Wr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Fg(e){e.control.live=!0,Mr(e)}function Ng(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),tt.delete(r),Ft(e),Wr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Mr(e)}function jg(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=h.DomUtil.create("div","sunlight-sun"),o=h.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=h.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",c.textContent="Indicative \xB7 loaded geometry only. Streetlight illumination is estimated, not measured lux.",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Mr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=Fg.bind(null,l),n.onchange=a.oninput=Ng.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Wg(e){e.control.live&&Mr(e)}function Zg(e,t){let r=Oi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=jg(t),Oi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Xo.set(t,e),Ai.set(e,r),r.update(),r.timer=setInterval(Wg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function $g(e){return Pt.get(this).addTo(e)}b();function Vg(){return h.Control.prototype.remove.call(Pt.get(this))}function qg(e){h.Util.setOptions(this,e),this.live=!0,this.layer=new h.Layer,Pt.set(this.layer,this),I.set(this.layer,"time")}function Hg(e){return Zg(this,e)}b();function rf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function Yg(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?Zo(this.layer,t,rf.bind(null,t)):rf(t,!1),this}b();function Xg(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function Kg(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Oi.get(t);clearInterval(r),Xo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),tt.delete(t),Ft(e),o.remove(),i.remove(),Wr(t),n===e&&(n.control=null)}function Jg(){let e=Ai.get(this);e&&(Kg(e),Ai.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:qg,onAdd:Hg,onRemove:Jg,addTo:Yg,remove:Xg});b();var ys=Object.freeze({});var Nt=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var jt=[.08,.07,.06];var mt=[.85,.64,.5];var Wt=[.16,.2,.32];function E(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function Qg(e){let t=Nt[e%Nt.length];return[[E(-.045,.045,-.85,-.25),.02,.62,jt],[E(-.045,.045,.25,.85),.02,.62,jt],[E(-.06,.06,-.5,.5),.4,.65,t],[E(-.32,.32,-.58,-.5),.95,1.02,jt],[E(-.1,.1,.15,.4),.85,.92,jt],[E(-.18,.18,-.12,.28),1,1.5,t],[E(-.11,.11,-.22,0),1.5,1.72,mt],[E(-.13,.13,-.23,.01),1.72,1.8,t],[E(-.25,-.15,-.5,-.05),1,1.25,mt],[E(.15,.25,-.5,-.05),1,1.25,mt],[E(-.2,-.08,0,.32),.3,1,Wt],[E(.08,.2,-.25,.07),.3,1,Wt]]}var of=[.75,.2,.15];var xs={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,of],[E(-.05,.05,-.05,.05),1.44,1.5,mt],[E(-.1,.1,-.11,.1),1.5,1.72,mt],[E(-.105,.105,-.06,.115),1.58,1.77,jt],[E(-.105,.105,-.115,-.06),1.7,1.77,jt]],leg:[[E(-.07,.07,-.07,.07),-.82,0,Wt],[E(-.07,.07,-.17,.07),-.9,-.82,jt]],arm:[[E(-.05,.05,-.05,.05),-.55,0,of],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ey(e){let t=xs.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Nt[e%Nt.length]],t.push([E(-.16,-.02,-.07,.07),.08,.9,Wt],[E(.02,.16,-.07,.07),.08,.9,Wt],[E(-.3,-.2,-.05,.05),.76,1.42,mt],[E(.2,.3,-.05,.05),.76,1.42,mt]),t}function Ko(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var Zr=[.12,.15,.18];var Ct=[.92,.93,.92];var Jo=[.05,.05,.05];var vs=[1.9,1.85,1.7];var ws=[1.7,.06,.05];function Qo(e,t,r){let o=e-t/2,i=e+t/2;return[[E(-1.25,1.25,o,i),.45,1.25,r],[E(-1.2,1.2,o+.15,i-.15),1.25,2.65,Zr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Jo],[E(.85,1.15,i-2,i-1),0,.7,Jo],[E(-.9,.9,o-.03,o),.8,1.05,vs],[E(-.9,.9,i,i+.03),.8,1.05,ws]]}function ty(e,t){return Qo(0,12,Ko(t))}function ry(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*6.5,6,r));return o}function oy(e,t){let r=Ko(t),o=[],i;for(i=0;i<5;i++)o.push(...Qo((i-2)*15,14,r));return o}function Zt(e,t,r,o,...i){return[[E(e,t,r,o),...i],[E(-t,-e,r,o),...i]]}function iy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Jo),...Zt(.7,.92,1.02,1.68,0,.64,Jo),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[E(-.84,.84,-.75,1.6),.82,1.38,Zr,E(-.7,.7,-.05,1.3)],[E(-.71,.71,-.06,1.31),1.38,1.46,t],...Zt(.38,.8,-2.3,-2.16,.56,.76,vs),[E(-.78,.78,2.16,2.3),.6,.76,ws]]}var nf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function ny(){let e=[],t;for(t=0;t<12;t++)e.push(...Zt(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function ay(){return[[nf,0,.8,[.1,.16,.26]],[nf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Zr,E(-4.6,4.6,-17.4,25.6)],...Zt(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[E(-4.8,4.8,-17.8,25.8),3.7,3.9,Ct],...ny(),...Zt(4.65,4.8,-13.6,25.8,3.9,4.8,Ct),[E(-4.8,4.8,25.65,25.8),3.9,4.8,Ct],[E(-2.2,2.2,-17.6,-14),3.9,4.7,Ct],[E(-2.2,2.2,-17.6,-14),4.7,5.5,Zr],[E(-2.5,2.5,-18,-13.6),5.5,5.7,Ct],[E(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[E(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[E(-.1,.1,-15.9,-15.7),5.7,6.6,Ct],[E(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var sy={bicycle:{side:.4,model:Qg},pedestrian:{side:.3,model:ey},bus:{side:1.5,model:ty},tram:{side:0,model:ry},metro:{side:0,model:oy},car:{side:1.8,model:iy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:ay,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var my=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function Ri(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,d=f*p-s*l,y=s*c-m*p,g=Math.hypot(u,d,y),x,v;for(x=0;x<3;x++)v=x===0?o:x===1?i:n,e.push(...v),t.push(u/g,d/g,y/g),r.push(...a)}function ei(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,d;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)d=(u+1)%a.length,Ri(t,r,o,i[u],i[d],n[d],f),Ri(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)Ri(t,r,o,n[0],n[u],n[u+1],f),Ri(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function fy({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
3
|
+
`:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
|
|
4
|
+
`:""}${e.description}`),t.textContent=r,t}function Ms(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),Zo(e.layer,e.status),e.update()}function py(e){dt.set(e.layer,e),e.ready&&Ms(e)}function $t(e,t){t&&(Je.get(e.layer)?.mesh===t&&(Mt(e.layer,null),be.set(e.layer,null),bt(e.layer,null)),_e(e.layer,t))}function bs(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function cy(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),$t(e,e.mesh),$t(e,e.route),e.mesh=e.route=null,dt.delete(e.layer),bs(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function ly(e){e.ready=!0,e.layer._map&&Ms(e)}function Ls(e){let t=Xo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function uy(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var ti=new Map;function sf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function dy(e,t){return e-t}function hy(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=ti.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),ti.size>=32&&ti.delete(ti.keys().next().value),ti.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let d=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,y=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(y)===!1))for(u=sf(m);u<=sf(f);u+=p)g.push(u);g.sort(dy);let x=[];for(u of g)d>=u&&d<u+r&&x.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(d-u)/r});return x}function gy(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of hy(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=uy(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function Bs(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var yy=Object.freeze({unlit:!0});function xy(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let d=o[0]+n*f,y=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,x=o[0]+n*p,v=o[1]+a*p,P=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(d-s,g,y-m):B===1?e.push(d+s,g,y+m):B===5?e.push(x-s,P,v-m):e.push(x+s,P,v+m),t.push(0,1,0),r.push(c,l,u)}function vy(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let d=-l/u*2.5,y=c/u*2.5,g,x,v;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),v=Math.min(1,(g+18-i[n-1])/u),!(v<=x)&&xy(e,t,r,f,p,c,l,d,y,x,v,a,s,m)}function wy(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)vy(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Ts(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function My(e){e.route=Ts(e,wy(e.lanes),[],yy)}function Ps(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Be(f),e.mesh.geometry.bounds=f.bounds}function by(e){let{trips:t,model:r,vertices:o}=e;if($t(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ei(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=Ts(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,ys,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ps(e)}function Ui(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function Ly(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=Ui(t,a),e.lanesDirty=!1}function By(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){bs(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:Ui(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Ly(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=Ui(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function Ty(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function Py(e,t,r,o){let i;try{o?e.trips=gy(t,e.lanes,e.velocity):e.trips.length=0,i=Ty(e,o)}catch(f){Bs(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&My(e),n!==e.tripsKey&&(by(e),e.tripsKey=n),e.mesh&&By(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Cy(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function Sy(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=yo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function Ey(e,t,r){e.mesh&&(Cy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&Sy(e))}function ky(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=Ls(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=Py(e,r,o,i),n===void 0)||(Ey(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function _y(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Iy=Object.freeze([]);function zy({features:e=Iy}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}X();b();function Ay(e){let t=ae.get(e);return ve.get(t)&&t}function Cs(e){let{layer:t,lanes:r}=e,o=Ay(t._map),i=L.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??ct(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Oy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*C),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new h.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}Cs(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Dy(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=zy(r),Oy(e),e.frame||e.tick()}}function Gy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Bs(e,r)}function Ry(e){let{time:t}=Ls(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;_y(e,t,r).then(Dy.bind(null,e,r),Gy.bind(null,e,r))}function Uy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Ry(e),e.tick())}function Fy(e){e.lanes.length&&(Cs(e),$t(e,e.route),e.route=null,e.mesh&&Ps(e),e.frame||e.tick())}function Ny(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=ys){let{model:s,lights:m,side:f}=sy[r];o??=f,Lt(e,{tooltip:fy,nightLight:!!m,...a});let p=h.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ei(s(0)),l=c.position.length,u=l/3,d=new ArrayBuffer(16),y=new Float32Array(d),g=new Uint32Array(d),x={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:d,paramFloats:y,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};x.shader=my,x.tick=ky.bind(null,x),x.update=Uy.bind(null,x),x.terrain=Fy.bind(null,x),dt.set(e,x),e.on("ready",ly.bind(null,x)),e.on("add",py.bind(null,x)),e.on("remove",cy.bind(null,x))}b();b();b();function jy(){this.keys.clear()}var Fi={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};b();da();or();H();W();function Wy(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(ze(t,Math.max(20,Math.min(85,k(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var Ni=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];X();function St(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*C),f=i.project(r.latlng),p=ct(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function Ss(){let[e,t,r]=St.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<Ni.length;a++)[,s,m,f]=Ni[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;_(this.layer)}function Zy(){this.meshes&&Ss.call(this)}function Es(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,h.DomEvent.off(document,"keydown keyup",this.onKey),h.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)_e(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){h.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),kr(e,this.saved.pitch),this.saved=null}}function $y(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!Fi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Vy=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();da();function ks(e){return Math.atan2(Math.sin(e),Math.cos(e))}function qy(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function Hy(e){let t=te.get(this.layer),r=St.call(this,this.local),o=L.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;we(ee.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of U.get(z.get(this.layer)))qy(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),jn,t.meshes);for(m of Nn(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}b();X();var mf=new WeakMap;function Yy(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function _s(e){let t=mf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:{data:o},index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=i?i.count:o.length/3,f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,v,P,B,T,O,K,G,N,J,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)v=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[v*2]<=2)&&(Fn(e,x,u,d,y),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*d[0]+r[4]*d[1]+r[8]*d[2]+r[12],g[4]=r[1]*d[0]+r[5]*d[1]+r[9]*d[2]+r[13],g[5]=r[2]*d[0]+r[6]*d[1]+r[10]*d[2]+r[14],g[6]=r[0]*y[0]+r[4]*y[1]+r[8]*y[2]+r[12],g[7]=r[1]*y[0]+r[5]*y[1]+r[9]*y[2]+r[13],g[8]=r[2]*y[0]+r[6]*y[1]+r[10]*y[2]+r[14],B=g[3]-g[0],T=g[4]-g[1],O=g[5]-g[2],K=g[6]-g[0],G=g[7]-g[1],N=g[8]-g[2],J=T*N-O*G,pe=B*G-T*K,ye=O*K-B*N,Qe=Math.hypot(J,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(P=v*3,(r[0]*n.data[P]+r[4]*n.data[P+1]+r[8]*n.data[P+2])*J+(r[2]*n.data[P]+r[6]*n.data[P+1]+r[10]*n.data[P+2])*pe<0&&(J=-J,pe=-pe)),Le=Math.hypot(J,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(J/Le,pe/Le),Yy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},mf.set(e.geometry,t),t}function Is(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],d=-a*l,y=a*c-n*u,g=n*l,x=m*d+f*y+p*g;if(Math.abs(x)<1e-9)return-1;let v=r-e[s],P=o-e[s+1],B=i-e[s+2],T=(v*d+P*y+B*g)/x;if(T<0||T>1)return-1;let O=P*p-B*f,K=B*m-v*p,G=v*f-P*m,N=(n*O+a*G)/x;return N<0||T+N>1?-1:(c*O+l*K+u*G)/x}function Xy(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Is(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Ky(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Be(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=_s(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],d=s-r[14]+c.origin[2];t.seen.clear();let g,x,v;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(x=Math.floor(Math.min(d,d+f*p)/8);x<=Math.floor(Math.max(d,d+f*p)/8);x++)v=c.cells.get(g+","+x),v&&Xy(v,c,t,l,u,d)}function zs(e,t,r,o,i,n,a,s){let m=dt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let J,pe,ye,Qe;for(J=0;J<m.template.position.length;J+=3)pe=m.template.position[J],ye=m.template.position[J+1],Qe=m.template.position[J+2],f.radius=Math.max(f.radius,Math.hypot(pe,Qe)),f.minY=Math.min(f.minY,ye),f.maxY=Math.max(f.maxY,ye)}let p=L.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,d,y,g,x,v,P,B,T,O,K,G,N;for(d of m.trips)if({x:G,y:O,z:N}=yo(m,d,c),O=p.position[1]+(O+f.minY)*p.scale[1],K=p.position[1]+(c.y+f.maxY)*p.scale[1],!(O>r+1.7*l||K<r+.2*l)&&(G=p.position[0]+G*p.scale[0],N=p.position[2]+N*p.scale[2],y=(G-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-G,v=o+g*n-N,P=x*x+v*v,!(P>=u*u))){if(a===0){s.found=!0,T=Math.hypot(t-G,o-N),s.normal[0]=T?(t-G)/T:0,s.normal[1]=T?(o-N)/T:0;continue}B=Math.max(0,y-Math.sqrt(u*u-P)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,T=Math.hypot(t+B*i-G,o+B*n-N),T<1e-6?(s.normal[0]=-i,s.normal[1]=-n):(s.normal[0]=(t+B*i-G)/T,s.normal[1]=(o+B*n-N)/T))}return s.found}function Jy(e,t,r,o,i,n,a,s){we(ee.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of U.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){zs(m,t,r,o,i,n,a,s);continue}At(L.get(m),Ky,s)}return s.found?s.normal:null}function ff(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Jy(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Qy(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=L.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=St.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=ff.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],ff.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*C))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}function ex(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}qr();X();W();or();H();function tx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*C,a=ks(-this.state.heading-n);Math.abs(a)>.001&&ze(o,k(o),(n+a*Math.min(1,r*4))*He),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}b();function pf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Be(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let d=_s(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;x.length=0,i.clear();let v,P,B,T;for(v=Math.floor(t/8);v<=y;v++)if(P=d.cells.get(`${v},${g}`),!!P)for(B of P)i.has(B)||(i.add(B),T=Is(d.tri,B,t,r,o,1,0),T>1e-4&&x.push(T));for(v=1;v<x.length;v++){T=x[v];let G=v-1;for(;G>=0&&x[G]>T;)x[G+1]=x[G--];x[G+1]=T}let O=0,K=-1/0;for(T of x)T-K>1e-4&&O++,K=T;return O%2===1}function cf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!U.get(i))return!1;we(ee.get(t));let n=L.get(t),a=St.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=U.get(i),c,l,u;for(c of p){if(c===t||I.get(c)==="terrain")continue;if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,zs(c,s,m,f,0,0,0,o))return!0;continue}let d=o.nodes;for(d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(pf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||pf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)d.push(u)}}return!1}function As(){if(!this.saved||!cf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new h.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!cf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function rx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,As.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of Ni)this.meshes.push(er(t,ei(xs[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];ex.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Fi[n]?.[0]||0,m+=Fi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),m&&(this.state.heading=ks(this.state.heading+m*2.5*r),o=!0),s&&(Qy.call(this,s,r),o=!0),o&&Hy.call(this,a),tx.call(this,s,m,r)&&(o=!0),o&&Ss.call(this)}function Os(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*Xt*Math.cos(this.state.latlng.lat*C)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Vy)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*C,e.setView(this.state.latlng,r,{animate:!1}),kr(e,75),As.call(this),h.DomEvent.on(document,"keydown keyup",this.onKey),h.DomEvent.on(window,"blur",this.onBlur),h.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function ox(){this.saved?Es.call(this):Os.call(this)}function ix(e,{speed:t,distance:r,...o}){let i=new h.Layer;Ut.set(i,"walk"),Lt(i,o);let n=new Set,a=h.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=h.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=h.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",h.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ms.set(i,f.state),f.step=rx.bind(f),f.onKey=$y.bind(f),f.onBlur=jy.bind(f),f.onPointer=Wy.bind(f),f.onTerrain=Zy.bind(f),f.start=Os.bind(f),f.stop=Es.bind(f),f.toggle=ox.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function nx(e){h.Util.setOptions(this,e),ix(this,this.options)}function ax(e){let t=It.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},It.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function sx(e){let t=It.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}h.Control.Walk=h.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:nx,onAdd:ax,onRemove:sx});b();var Ds=new WeakMap;var Gs=new WeakMap;var Rs=new WeakMap;function mx(){return{}}function fx(e){return this._project(),this._parts=this._rings,Ds.get(this).call(this,e)}function px(){return this._project(),Gs.get(this).call(this)}function cx(){Rs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function lx(e){Vt.delete(e),xr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function ux(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),xr.set(t,null),Us.call(t))}function dx(e){Vo.set(e,(Vo.get(e)||0)+1),Vt.set(e,Vo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(ux)),xr.set(e,Et.value)}function Us(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),xt(this),lx(e),r&&dx(e)}var Fs=[];function hx(){Fs.shift()?.fire("load")}function gx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Fs.push(this),queueMicrotask(hx))}function yx(){return xt(this),this}function xx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=yx,I.set(this,"path"),this instanceof h.Polyline&&(Ds.set(this,this.closestLayerPoint),this.closestLayerPoint=fx),this instanceof h.Circle&&(Gs.set(this,this.getBounds),this.getBounds=px)):this instanceof h.GridLayer?(Rs.set(this,this._initContainer),this._initContainer=cx,this._updateOpacity=Us):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function vx(){jr.get(this).off(yr.get(this),this),jr.set(this,null),yr.set(this,null)}function wx(e,t){switch(I.get(e)){case"3d":return us(e,t);case"raster":return rg(e,t);case"terrain":return zg(e,t);case"image":return gx.call(e,t);case"time":return $g.call(e,t)}}function Mx(e){if(!e._map)return;let t;for(t of V.get(e).values())Rr(e,t);V.get(e).clear(),Ur(e)}function bx(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Ur.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=Mx.bind(null,e)),t}b();function Lx(e){return!cr.get(e)&&(e instanceof h.GridLayer||e instanceof h.Polyline||e instanceof h.CircleMarker||e instanceof h.Marker&&!(e.options.icon instanceof h.DivIcon)||e instanceof h.ImageOverlay&&!(e instanceof h.VideoOverlay)&&!(e instanceof h.SVGOverlay))}function Bx(e){let t=Lx(this);t&&((this instanceof h.GridLayer||this instanceof h.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof h.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(I.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,I.get(this)!=="pending"&&I.get(this)!=="time"&&(yr.set(this,I.get(this)==="raster"?Kh(this):cr.get(this)?bx(this):mx()),jr.set(this,r),r.on(yr.get(this),this),this.once("remove",vx,this)),wx(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&qn(this,e.target))}b();var Ns=[];var js={value:Promise.resolve()};function Tx(e,t){q.set(e,!0),Lt(e,t)}function Px(e,t,r){if(!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||r>32e6||!Number.isSafeInteger(t+r)||e.size!==void 0&&t+r>e.size)throw new Error("Invalid COG byte range")}function Cx(e,t,r,o){if(!t||Number(t[1])!==r||Number(t[2])!==r+o-1||!Number.isSafeInteger(Number(t[3]))||Number(t[3])<r+o||(e.containerSize??e.size)!==void 0&&(e.containerSize??e.size)!==Number(t[3]))throw new Error("Invalid COG range response")}function Sx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Ex(e,t,r,o){let i=t.headers.get("ETag");if(e.etag&&e.etag!==i)throw new Error("COG changed; recreate the layer");i&&(e.etag=i);let n=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(t.headers.get("Content-Range")||"");if(t.status===206)Cx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Sx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function kx(e,t){let r=e.body.getReader(),o=[],i=0,n;try{for(;!(n=await r.read()).done;){if(i+=n.value.byteLength,i>(e.status===206?t:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(n.value)}}finally{r.releaseLock()}let a=new Uint8Array(i),s=0,m;for(m of o)a.set(m,s),s+=m.length;return a}async function $e(e,t,r,o){if(o?.throwIfAborted(),Px(e,t,r),e.full)return e.full.slice(t,t+r);let i=(e.baseOffset||0)+t,n=await fetch(e.url,{headers:{Range:`bytes=${i}-${i+r-1}`},signal:o});if(!n.ok)throw new Error(`Unable to read COG: HTTP ${n.status}`);Ex(e,n,i,r);let a=await kx(n,r);if(n.status===200){if(e.baseOffset===void 0)e.size=a.byteLength;else if(a.byteLength!==e.containerSize)throw new Error("Truncated PMTiles COG container");e.full=e.baseOffset===void 0?a.buffer:a.slice(e.baseOffset,e.baseOffset+e.size)}let s=n.status===200?e.full.slice(t,t+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var _x=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Ix(e,t,r,o,i){let n=t.getUint16(r*12+2,i),a=n===3?2:n===4?4:n===12?8:0,s=t.getUint32(r*12+4,i);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let m=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await $e(e,t.getUint32(r*12+8,i),a*s)),f=[],p;for(p=0;p<s;p++)f.push(n===3?m.getUint16(p*a,i):n===4?m.getUint32(p*a,i):m.getFloat64(p*a,i));return f}async function zx(e,t){let r=e.little,o=new DataView(await $e(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await $e(e,t+2,o*12+4)),n=new Map,a,s;for(a=0;a<o;a++){if(s=i.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(_x.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Ix(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Ax(e,t,r){return!!t&&!!r&&t%256===0&&r%256===0&&e.get(322)?.[0]===256&&e.get(323)?.[0]===256&&(e.get(259)?.[0]===1||e.get(259)?.[0]===8)&&(e.get(284)?.[0]??1)===1&&(e.get(317)?.[0]??1)===1}function Ox(e,t,r,o,i,n,a){return i?e.get(262)?.[0]===1:(t===3||t===4)&&r?.length===t&&n&&a&&e.get(262)?.[0]===2}function Dx(e){let t=e.get(256)?.[0],r=e.get(257)?.[0],o=e.get(277)?.[0]??1,i=e.get(258),n=e.get(339)||[1],a=!0,s=!0,m=!0,f;for(f of i||[])a&&=f===8;for(f of n)s&&=f===1,m&&=f===3;let p=o===1&&i?.length===1&&i[0]===32&&m;if(!Ax(e,t,r)||!Ox(e,o,i,n,p,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:t,height:r,samples:o,elevation:p}}function Gx(e){let t=!1,r=!1,o;if(e)for(o=4;o<e.length;o+=4)e[o+1]!==0||e[o+2]!==1||(e[o]===3072&&e[o+3]===3857&&(t=!0),e[o]===1025&&e[o+3]===1&&(r=!0));return t&&r}function lf(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function Rx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&lf(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&lf(r)&&r[0]===0&&r[1]===0}function Ux(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!Rx(i,n,a)||!Gx(i))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:t,height:r,resolution:n[0],left:a[3],top:a[4],elevation:o}}function Fx(e,t,r,o,i,n,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(i)&&Number.isInteger(n))&&Math.abs(t.width/r.width-t.height/r.height)<=1e-7&&r.elevation===t.elevation&&i>=0&&n>=0&&i+r.width/256<=2**o&&n+r.height/256<=2**o&&!e.levels.has(o)&&!(t.elevation&&e.levels.size)}function Nx(e,t){if(t.offsets?.length!==t.columns*t.rows||t.lengths?.length!==t.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<t.offsets.length;r++)if(!t.offsets[r]||!t.lengths[r]||t.lengths[r]>1048576||t.offsets[r]+t.lengths[r]>e.size)throw new Error("Invalid COG tile offsets or lengths")}function jx(e,t,r){let o=t.tags,i=Dx(o);r.base||(r.base=Ux(o,i.width,i.height,i.elevation));let n=r.base,a=n.resolution*n.width/i.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),m=20037508342789244e-9*2/2**s,f=(n.left+20037508342789244e-9)/m,p=(20037508342789244e-9-n.top)/m;if(Math.abs(f-Math.round(f))<1e-6&&(f=Math.round(f)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Fx(e,n,i,s,f,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:f,y:p,columns:i.width/256,rows:i.height/256,samples:i.samples,elevation:i.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};Nx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Wx(e,t){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,i;for(;t;){if(o.has(t)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(t),i=await zx(e,t),jx(e,i,r),t=i.next}if(!r.base)throw new Error("COG has no image directory");if(e.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function Zx(e,t,r){if(r===1){if(e.byteLength!==t)throw new Error("Invalid uncompressed COG tile size");return e}let i=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),n=new Uint8Array(t),a=0,s;try{for(;!(s=await i.read()).done;){if(a+s.value.length>t)throw await i.cancel(),new Error("Oversized decoded COG tile");n.set(s.value,a),a+=s.value.length}}finally{i.releaseLock()}if(a!==t)throw new Error("Truncated decoded COG tile");return n.buffer}async function Ws(e,t,r,o,i){let n=o*t.columns+r;return Zx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function $x(e,t,r,o,i){let n=await Ws(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),m,f;for(m=0;m<s.length;m++){if(f=a.getFloat32(m*4,e.little),!Number.isFinite(f)||f<-12e3||f>1e4)throw new Error("Invalid or missing COG elevation sample");s[m]=f}return{data:s.buffer}}async function Vx(e,t,r,o,i){let n=new OffscreenCanvas(256,256),a=n.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-t.x)*256,m=(o-t.y)*256,f,p,c,l,u,d,y;for(p=Math.max(0,Math.floor(m/256));p<Math.min(t.rows,Math.ceil(m/256+1));p++)for(f=Math.max(0,Math.floor(s/256));f<Math.min(t.columns,Math.ceil(s/256+1));f++){for(c=new Uint8Array(await Ws(e,t,f,p,i)),i?.throwIfAborted(),l=new Uint8ClampedArray(256*256*4),u=0,d=0;u<c.length;u+=t.samples,d+=4)l[d]=c[u],l[d+1]=c[u+1],l[d+2]=c[u+2],l[d+3]=t.samples===4?c[u+3]:255;y=await createImageBitmap(new ImageData(l,256,256)),a.drawImage(y,f*256-s,p*256-m),y.close()}let g=n.transferToImageBitmap();return i?.aborted&&(g.close(),i.throwIfAborted()),{image:g}}function qx(e,t,r){return Number.isSafeInteger(e)&&Number.isSafeInteger(t)&&Number.isSafeInteger(r)&&e>=0&&e<=24&&t>=0&&r>=0&&t<2**e&&r<2**e}async function Hx(e,t,r,o,i){if(i?.throwIfAborted(),!qx(t,r,o))throw new Error("Invalid COG tile coordinates");let n=e.levels.get(t);if(!(!n||r+1<=n.x||o+1<=n.y||r>=n.x+n.columns||o>=n.y+n.rows))return n.elevation?$x(e,n,r,o,i):Vx(e,n,r,o,i)}function Yx(e){return e.header}function Xx(e,t){if(t.tileType!==0||t.tileCompression!==1||!Number.isSafeInteger(t.jsonMetadataOffset)||!Number.isSafeInteger(t.jsonMetadataLength)||t.jsonMetadataLength<=0||t.jsonMetadataLength>1048576||!Number.isSafeInteger(t.tileDataOffset)||!Number.isSafeInteger(t.tileDataLength)||t.tileDataOffset<127||t.tileDataOffset+t.tileDataLength>e.size)throw new Error("Invalid PMTiles COG asset container")}async function Kx(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Go(await $e(e,t.jsonMetadataOffset,t.jsonMetadataLength),t.internalCompression))),i=o.cog_assets||{},n=Object.hasOwn(i,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!n||!Number.isSafeInteger(n.offset)||!Number.isSafeInteger(n.length)||n.offset<0||n.length<8||n.offset+n.length>t.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return n}async function Jx(e,t){let r={url:e},o=Aa(await $e(r,0,127));Xx(r,o);let i=await Kx(r,o,t),n=o.tileDataOffset+i.offset;return{url:e,baseOffset:n,size:i.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(n,n+i.length)}}async function Qx(e,t){let r=t===void 0?{url:e}:await Jx(e,t);r.levels=new Map;let o=new DataView(await $e(r,0,8)),i=o.getUint16(0);if(i!==18761&&i!==19789)throw new Error("Invalid TIFF byte order");if(r.little=i===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:n,minZoom:a,maxZoom:s}=await Wx(r,o.getUint32(4,r.little)),m=20037508342789244e-9,f=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,l=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:f/m*180,maxLon:p/m*180,minLat:Math.atan(Math.sinh(l/m*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/m*Math.PI))*180/Math.PI},{getHeader:Yx.bind(null,r),getZxy:Hx.bind(null,r)}}function e0(e,t){ps(e,{ariaLabel:"COG raster",...t,archive:t.archive||Qx(new URL(t.url,document.baseURI).href,t.asset)})}function t0(e){switch(e){case"geojson":return Tx;case"pmtiles":return ps;case"cog":return e0;case"terrain":return Ag;case"traffic":return Ny;default:return null}}function r0(){let e=Ns.shift();return e.initialize=t0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function o0(e){let{layer:t,ready:r}=e;if(e.error)return Vn(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),I.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function i0(e=go){if(vt.has(this)||vt.add(this),Object.getPrototypeOf(this)!==h.Layer.prototype||!e?.source){if(br.value.initialize)return br.value.initialize.apply(this,arguments);h.Util.setOptions(this,e);return}let{source:{type:t=e.source.data?.type==="FeatureCollection"?"geojson":/\.pmtiles(?:[?#]|$)/i.test(e.source.url)?"pmtiles":/\.tiff?(?:[?#]|$)/i.test(e.source.url)?"cog":"3d",...r},...o}=e,i={...r,...o};if(h.Util.setOptions(this,o),Ut.set(this,t),t==="3d"){Lt(this,i);return}I.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ns.push(n),js.value=js.value.catch(at).then(r0);let a=js.value.then(o0);re.set(this,a),n.ready=a,a.catch(at)}b();function n0(e,t){switch(I.get(e)){case"3d":return Yo(e,t);case"raster":return fg(e,t);case"terrain":return lg(e,t);case"time":return Vg.call(e,t)}}function a0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&n0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):Wi.value.call(this,e):this}H();function s0(){return k(this)}W();function m0(){return S(this)}function f0(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),xt(e),e}function p0(e){return f0(this,e)}function c0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;ji.value.call(this),e||xx.call(this)}br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));ji.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:i0,_layerAdd:Bx,callInitHooks:c0});Wi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:a0,getPitch:s0,getBearing:m0});h.Marker.include({setRotation:p0});})();
|
|
4
5
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|