leaflet-city-mapper 0.0.4 → 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 +23 -11
- package/cucumber.mjs +9 -9
- package/dist/leaflet-city-mapper-src.js +3353 -2377
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- 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 +3 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet.js +1 -1
- package/package.json +3 -2
- package/src/{camera → animations}/cancelCameraAnimation.js +5 -3
- package/src/{core → animations}/cancelGridFade.js +3 -2
- package/src/animations/endZoom.js +27 -0
- package/src/{camera → animations}/mapAnimateCamera.js +7 -5
- package/src/{scene → animations}/onZoomAnim.js +5 -4
- package/src/{scene → animations}/renderPendingZoomAnimation.js +4 -2
- package/src/{camera → animations}/runCameraAnimations.js +8 -6
- package/src/{core → animations}/runGridFades.js +4 -3
- package/src/{camera → animations}/scheduleCameraAnimation.js +3 -2
- package/src/animations/scheduleGridFade.js +16 -0
- package/src/{scene → animations}/startZoom.js +3 -2
- package/src/{rendering → animations}/synchronizeZoomView.js +10 -8
- package/src/{rendering → animations}/updateZoomCamera.js +11 -8
- package/src/archives/decodeDirectory.js +1 -1
- package/src/archives/findTile.js +3 -3
- package/src/archives/getDirectoryEntries.js +5 -4
- package/src/archives/getHeader.js +10 -6
- package/src/archives/getTileData.js +3 -3
- package/src/archives/getZxy.js +8 -7
- package/src/archives/loadDirectory.js +3 -3
- package/src/archives/loadSource.js +3 -2
- package/src/archives/{read.js → readArchiveRange.js} +7 -5
- package/src/camera/cameraMapReady.js +3 -2
- package/src/camera/cleanupCameraMap.js +8 -6
- package/src/camera/fitCameraBounds.js +3 -3
- package/src/camera/initializeCameraMap.js +6 -4
- package/src/camera/mapCamera.js +1 -1
- package/src/camera/mapContainerPointToLayerPoint.js +2 -2
- package/src/camera/mapGetBearing.js +3 -2
- package/src/camera/mapGetBounds.js +2 -2
- package/src/camera/mapGetBoundsZoom.js +2 -2
- package/src/camera/mapGetPitch.js +3 -2
- package/src/camera/mapLayerPointToContainerPoint.js +2 -2
- package/src/camera/mapLimitCenter.js +1 -1
- package/src/camera/mapLimitOffset.js +1 -1
- package/src/camera/mapPanBy.js +2 -2
- package/src/camera/mapPanInside.js +1 -1
- package/src/camera/mapResetNorthPitch.js +1 -1
- package/src/camera/mapSetBearing.js +1 -1
- package/src/camera/mapSetPitch.js +1 -1
- package/src/camera/mapSetPitchAndBearing.js +5 -3
- package/src/{rendering → camera}/updateMapCamera.js +19 -15
- package/src/{scene/updateCamera.js → camera/updateSceneCamera.js} +1 -1
- package/src/camera/updateSky.js +10 -9
- package/src/collision/collider.js +23 -9
- package/src/collision/insideMesh.js +53 -0
- package/src/collision/insideWalker.js +46 -0
- package/src/collision/trafficCollision.js +60 -0
- package/src/{utils → colors}/parseColor.js +1 -1
- package/src/controls/addCameraHandler.js +5 -3
- package/src/controls/adjustCameraDrag.js +4 -3
- package/src/controls/cameraControls.js +8 -5
- package/src/controls/cameraDragClick.js +7 -7
- package/src/controls/cameraDragContextMenu.js +1 -1
- package/src/controls/cameraDragDown.js +2 -2
- package/src/controls/cameraDragEnd.js +1 -1
- package/src/controls/cameraDragMove.js +2 -2
- package/src/controls/changeCameraTouch.js +6 -3
- package/src/controls/cleanupCameraTouch.js +7 -5
- package/src/controls/dragCamera.js +1 -1
- package/src/controls/endCameraTouchEvent.js +1 -1
- package/src/controls/moveCameraTouch.js +5 -3
- package/src/controls/removeCameraDrag.js +1 -1
- package/src/controls/shiftRotateWheel.js +1 -1
- package/src/controls/startCameraTouch.js +6 -4
- package/src/core/adjustCameraMarkerPan.js +3 -3
- package/src/core/cameraCircleBounds.js +1 -1
- package/src/core/cameraMarkerDrag.js +1 -1
- package/src/core/cameraMarkerOnDrag.js +1 -1
- package/src/core/closestCameraLayerPoint.js +1 -1
- package/src/core/initializeGridContainer.js +1 -1
- package/src/core/initializeNativeLayer.js +9 -8
- package/src/core/layerCallInitHooks.js +4 -3
- package/src/core/markerSetIcon.js +1 -1
- package/src/core/markerSetPos.js +2 -2
- package/src/core/markerSetRotation.js +1 -1
- package/src/core/markerUpdateZIndex.js +5 -4
- package/src/core/popupAdjustPan.js +1 -1
- package/src/core/popupUpdatePosition.js +1 -1
- package/src/core/redrawPath.js +1 -1
- package/src/core/removeLayer.js +4 -3
- package/src/core/tooltipSetPosition.js +1 -1
- package/src/core/updateGridOpacity.js +3 -3
- package/src/core/whenReady.js +11 -0
- package/src/geometry/addBridges.js +13 -8
- package/src/{sources → geometry}/addGeneratedTriangle.js +1 -1
- package/src/{sources/addTriangle.js → geometry/appendAreaTriangle.js} +5 -5
- package/src/geometry/assembleAreaGeometry.js +41 -0
- package/src/{core → geometry}/boundsQuad.js +1 -1
- package/src/geometry/bridgePolygon.js +3 -3
- package/src/geometry/buildExtrudedPolygon.js +10 -0
- package/src/geometry/buildProjectedPoint.js +21 -0
- package/src/{sources/buildAreaPolygon.js → geometry/buildProjectedPolygon.js} +25 -29
- package/src/geometry/circleGeometry.js +1 -1
- package/src/geometry/computeBounds.js +19 -8
- package/src/geometry/conformModelToTerrain.js +17 -11
- package/src/{models → geometry}/createModelGeometry.js +5 -4
- package/src/geometry/disk.js +1 -1
- package/src/geometry/indexBridge.js +5 -4
- package/src/geometry/lampPostGeometry.js +2 -2
- package/src/geometry/lightGeometry.js +1 -1
- package/src/geometry/lineJoin.js +1 -1
- package/src/{core → geometry}/markerQuadCorners.js +9 -6
- package/src/geometry/nativeGeometry.js +1 -1
- package/src/geometry/polygon.js +1 -1
- package/src/geometry/roofCoverage.js +11 -8
- package/src/geometry/roofFootprint.js +13 -10
- package/src/geometry/segment.js +1 -1
- package/src/{shadows → geometry}/shadowBounds.js +1 -1
- package/src/geometry/surface.js +1 -1
- package/src/{terrain → geometry}/terrainBuffers.js +7 -5
- package/src/geometry/terrainTileGeometry.js +19 -0
- package/src/geometry/treeGeometry.js +2 -2
- package/src/globals/geometryWorkerUrl.js +3 -0
- package/src/globals/nativeMethodHandlers.js +14 -14
- package/src/{scene → gpu}/initializeRendererResources.js +10 -9
- 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/{rendering/reportCompilation.js → gpu/reportShaderCompilation.js} +3 -3
- package/src/gpu/requestAdapter.js +12 -0
- package/src/gpu/requestDevice.js +9 -0
- package/src/index.js +8 -13
- package/src/layer-controls/layerCountTitle.js +6 -0
- package/src/layer-controls/renderLayerCount.js +20 -0
- package/src/{scene → layer-controls}/updateLayerCount.js +24 -22
- package/src/lighting/lightGrid.js +1 -1
- package/src/lighting/updatePointLights.js +13 -10
- package/src/{rendering → materials}/createProgram.js +13 -12
- package/src/{models/materialFor.js → materials/modelMaterialFor.js} +3 -3
- package/src/materials/terrainRasterProgram.js +58 -0
- package/src/models/applyModelTransform.js +8 -7
- package/src/models/createModelContext.js +3 -3
- package/src/models/loadModel.js +17 -12
- package/src/models/loadModelResources.js +7 -6
- package/src/models/modelNode.js +4 -5
- package/src/{core → native}/disposeNativeLayer.js +10 -10
- package/src/{core → native}/handleNativeMapEvent.js +5 -4
- package/src/{core → native}/initNativeGPU.js +9 -6
- package/src/native/isCurrentNativeLayer.js +7 -0
- package/src/{core → native}/nativeEventSource.js +3 -3
- package/src/{core → native}/nativeEvents.js +1 -1
- package/src/{core → native}/nativeLayer.js +16 -37
- package/src/{core → native}/nativeLayerMethod.js +14 -5
- package/src/{core → native}/pruneNativeResources.js +5 -5
- package/src/{core → native}/putNativeMesh.js +3 -3
- package/src/{core → native}/quadNativeMesh.js +1 -1
- package/src/native/readyNativeGPU.js +10 -0
- package/src/{core → native}/refreshNativeLayer.js +8 -7
- package/src/{core → native}/refreshNativeLayerContract.js +3 -2
- package/src/{core → native}/removeNativeEvents.js +1 -1
- package/src/{core → native}/removeTargets.js +3 -2
- package/src/native/reorderNativeLayer.js +17 -0
- package/src/{core → native}/styleNativeMesh.js +3 -2
- package/src/{core → native}/syncGridLayer.js +1 -1
- package/src/{core → native}/syncImageOverlay.js +1 -1
- package/src/{core → native}/syncMarker.js +1 -1
- package/src/{core → native}/syncVectorLayer.js +2 -2
- package/src/{core → native}/synchronizeNativeLayer.js +4 -3
- package/src/native/updateNativeLayerView.js +10 -0
- package/src/picking/findFeature.js +13 -9
- package/src/picking/hit.js +16 -8
- package/src/picking/onClick.js +3 -2
- package/src/picking/onPointerLeave.js +3 -2
- package/src/picking/onPointerMove.js +12 -6
- package/src/picking/raycast.js +29 -24
- package/src/picking/setHighlight.js +9 -8
- package/src/picking/shouldSkipOther.js +3 -2
- package/src/picking/showFeature.js +19 -14
- package/src/{camera/angles.js → projections/cameraAngles.js} +2 -2
- package/src/{camera → projections}/groundBounds.js +2 -2
- package/src/projections/localPosition.js +11 -0
- package/src/{camera/project.js → projections/projectCameraPoint.js} +2 -2
- package/src/{sources → projections}/projectRing.js +8 -9
- package/src/projections/projectTreePoint.js +17 -0
- package/src/{camera/animationPoint.js → projections/transformZoomAnimationPoint.js} +3 -2
- package/src/projections/walkerLocalPosition.js +18 -0
- package/src/raster/addRasterTile.js +38 -28
- package/src/raster/createRasterMesh.js +24 -19
- package/src/raster/finishRasterAttachment.js +17 -0
- package/src/raster/finishRasterTile.js +22 -19
- package/src/raster/initRaster.js +24 -15
- package/src/raster/isRasterLoading.js +8 -0
- package/src/raster/loadRasterTile.js +8 -7
- package/src/raster/onPMTileAdd.js +9 -8
- package/src/raster/onPMTileRemove.js +6 -5
- package/src/raster/pruneRasterTiles.js +19 -13
- package/src/raster/pumpRasterTiles.js +8 -6
- package/src/raster/readyRaster.js +3 -2
- package/src/raster/registerTerrainTile.js +8 -6
- package/src/raster/releaseRasterTile.js +14 -11
- package/src/raster/releaseRasterTiles.js +13 -10
- package/src/raster/removeRasterTile.js +8 -6
- package/src/raster/retainRasterTiles.js +5 -4
- package/src/raster/setPMTileOpacity.js +4 -4
- package/src/raster/setPMTileZIndex.js +4 -4
- package/src/raster/setRasterOpacity.js +8 -6
- package/src/raster/setRasterTerrain.js +12 -9
- package/src/raster/setRasterZIndex.js +8 -6
- package/src/raster/updateAttachedTiles.js +6 -5
- package/src/raster/updateRasterTiles.js +20 -15
- package/src/rendering/collectFrameMeshes.js +16 -9
- package/src/rendering/collectVisibleMesh.js +18 -9
- package/src/rendering/createMesh.js +11 -9
- package/src/rendering/disposeMesh.js +3 -3
- package/src/rendering/drawGeometry.js +9 -7
- package/src/rendering/drawSceneMeshes.js +9 -7
- package/src/rendering/prepareFrameBuffer.js +6 -5
- package/src/rendering/prepareFrameMeshes.js +9 -6
- package/src/rendering/prepareFrameUniforms.js +9 -6
- package/src/rendering/prepareMeshUniforms.js +1 -1
- package/src/rendering/render.js +39 -32
- package/src/rendering/resizeRenderer.js +17 -15
- package/src/rendering/revealRoofMesh.js +25 -6
- package/src/scene/{layerLayerAdd.js → addRegisteredLayer.js} +13 -9
- package/src/scene/addSceneLayer.js +4 -3
- package/src/scene/attachLayer.js +7 -6
- package/src/scene/attachSharedScene.js +69 -0
- package/src/scene/callLayer.js +7 -5
- package/src/scene/cancelUpdate.js +6 -5
- package/src/scene/failAttachment.js +6 -5
- package/src/scene/get3DEvents.js +5 -3
- package/src/scene/getLocation.js +3 -2
- package/src/scene/init3D.js +28 -26
- package/src/scene/initializeLayer.js +6 -4
- package/src/scene/isNativeLayer.js +3 -2
- package/src/scene/layerInitialize.js +11 -6
- package/src/scene/onAdd3DLayer.js +30 -24
- package/src/scene/onMapChange.js +5 -4
- package/src/scene/onRemove3DLayer.js +53 -35
- package/src/scene/ready3D.js +22 -13
- package/src/scene/releaseSharedScene.js +31 -25
- package/src/scene/removeLayerEvents.js +12 -9
- package/src/scene/removeSceneLayer.js +3 -2
- package/src/scene/renderPendingMapChange.js +7 -4
- package/src/scene/renderPendingUpdates.js +9 -6
- package/src/scene/restoreObject.js +15 -13
- package/src/scene/scheduleSceneUpdate.js +25 -0
- package/src/shaders/materialShaders.js +2 -2
- package/src/shadows/bindSunlight.js +4 -3
- package/src/shadows/drawShadowMeshes.js +4 -3
- package/src/shadows/renderSunlight.js +6 -5
- package/src/shadows/resizeSunlight.js +7 -6
- package/src/shadows/shadowMatrix.js +2 -2
- package/src/sources/attachAreaMesh.js +25 -20
- package/src/sources/buildArea.js +19 -11
- package/src/sources/buildAreaFeature.js +14 -5
- package/src/sources/buildAreaPoint.js +3 -21
- package/src/sources/extrusionStyle.js +2 -2
- package/src/sources/initializeGeoJSON.js +3 -2
- package/src/sources/pendingSourceAreas.js +3 -2
- package/src/sources/prepareAreaGeometryJob.js +33 -0
- package/src/sources/pumpSourceAreas.js +37 -0
- package/src/sources/releaseArea.js +10 -8
- package/src/sources/setGeoJSONData.js +4 -3
- package/src/sources/sourceAreaContext.js +18 -17
- package/src/sources/updateArea.js +25 -21
- package/src/sources/{updateStatus.js → updateSourceStatus.js} +5 -4
- package/src/sunlight/{addTo.js → addTimeControlToMap.js} +1 -1
- package/src/sunlight/addTimeLayer.js +3 -2
- package/src/sunlight/atmosphere.js +2 -2
- package/src/sunlight/initSunlight.js +5 -5
- package/src/sunlight/{initialize.js → initializeTimeControl.js} +5 -3
- package/src/sunlight/onAddSun.js +5 -4
- package/src/sunlight/onRemoveSun.js +1 -1
- package/src/sunlight/removeSun.js +7 -5
- package/src/sunlight/removeTimeLayer.js +3 -2
- package/src/sunlight/requestSunlightRender.js +9 -0
- package/src/sunlight/updateCelestialDisc.js +1 -1
- package/src/sunlight/updateSky.js +4 -2
- package/src/sunlight/updateSun.js +8 -6
- package/src/sunlight/useSelectedTime.js +4 -3
- package/src/terrain/applyTerrain.js +16 -13
- package/src/terrain/clearLayerTerrain.js +3 -2
- package/src/terrain/getElevation.js +9 -5
- package/src/terrain/initTerrain.js +11 -6
- package/src/terrain/loadTerrain.js +29 -20
- package/src/terrain/loadTerrainTiles.js +4 -3
- package/src/terrain/mapElevationOf.js +7 -0
- package/src/terrain/onTerrainAdd.js +14 -10
- package/src/terrain/onTerrainChange.js +4 -3
- package/src/terrain/onTerrainRemove.js +35 -21
- package/src/terrain/readyTerrainOf.js +7 -0
- package/src/terrain/setLayerTerrain.js +3 -2
- package/src/terrain/setTerrainHeight.js +19 -14
- package/src/terrain/terrainElevation.js +1 -1
- package/src/terrain/terrainTileQueue.js +11 -9
- package/src/{core → textures}/addImageState.js +1 -1
- package/src/{core/addRasterImage.js → textures/attachRasterImage.js} +1 -1
- package/src/{rendering → textures}/collectRoofTiles.js +3 -2
- package/src/{rendering → textures}/composeRoofAtlas.js +9 -7
- package/src/textures/destroyTexture.js +10 -0
- package/src/{models/textureFor.js → textures/modelTextureFor.js} +5 -4
- package/src/{core → textures}/nativeImageError.js +1 -1
- package/src/{core → textures}/nativeImageRefresh.js +2 -2
- package/src/{core/textureFor.js → textures/nativeTextureFor.js} +7 -6
- package/src/{rendering → textures}/rebuildRoofAtlas.js +12 -9
- package/src/{core → textures}/removeImageState.js +1 -1
- package/src/{rendering → textures}/resizeRoofTexture.js +5 -4
- package/src/textures/updateRoofAtlas.js +23 -0
- package/src/textures/updateRoofRaster.js +29 -0
- package/src/{core → textures}/uploadCanvasTexture.js +2 -2
- package/src/traffic/addTraffic.js +1 -1
- package/src/traffic/disposeTrafficObject.js +5 -3
- package/src/traffic/drawTrafficRoute.js +1 -1
- package/src/traffic/groundTraffic.js +6 -6
- package/src/traffic/initTraffic.js +3 -3
- package/src/traffic/loadedTrafficLanes.js +1 -1
- package/src/traffic/locateTraffic.js +3 -3
- package/src/traffic/placeTraffic.js +2 -1
- package/src/traffic/prepareTraffic.js +4 -3
- package/src/traffic/rebaseTraffic.js +3 -2
- package/src/traffic/rebuildTrafficMesh.js +1 -1
- package/src/traffic/removeTraffic.js +1 -1
- package/src/traffic/startTraffic.js +1 -1
- package/src/traffic/tickTraffic.js +4 -3
- package/src/traffic/trafficNow.js +3 -2
- package/src/traffic/updateTraffic.js +3 -2
- package/src/traffic/updateTrafficLights.js +4 -2
- package/src/vehicles/boatBenches.js +1 -1
- package/src/vehicles/boatModel.js +1 -1
- package/src/vehicles/busModel.js +1 -1
- package/src/vehicles/carModel.js +1 -1
- package/src/vehicles/metroModel.js +1 -1
- package/src/vehicles/tramModel.js +1 -1
- package/src/walk/{step.js → animateWalker.js} +15 -8
- package/src/walk/createWalk.js +15 -11
- package/src/walk/initWalk.js +4 -4
- package/src/walk/landWalker.js +38 -0
- package/src/walk/moveWalker.js +5 -4
- package/src/walk/{onAdd.js → onAddWalkControl.js} +3 -1
- package/src/walk/{onRemove.js → onRemoveWalkControl.js} +1 -1
- package/src/walk/{onKey.js → onWalkKey.js} +1 -1
- package/src/walk/{onTerrain.js → onWalkTerrain.js} +1 -1
- package/src/walk/{place.js → placeWalker.js} +2 -2
- package/src/walk/resolveWalkerPosition.js +28 -0
- package/src/walk/{start.js → startWalking.js} +8 -5
- package/src/walk/{stop.js → stopWalking.js} +4 -4
- package/src/walk/{toggle.js → toggleWalking.js} +2 -2
- package/src/weakmaps/addedByLayer.js +1 -0
- package/src/weakmaps/archiveHeaderByLayer.js +1 -0
- package/src/weakmaps/areasByLayer.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/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/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/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/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/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/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/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/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/touchPitchByMap.js +1 -0
- package/src/weakmaps/touchRotateByMap.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/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/core/bringNativeLayerToBack.js +0 -8
- package/src/core/bringNativeLayerToFront.js +0 -8
- package/src/core/current.js +0 -6
- package/src/core/localPosition.js +0 -10
- package/src/core/readyNativeGPU.js +0 -9
- package/src/core/reorderNativeLayer.js +0 -9
- package/src/core/scheduleGridFade.js +0 -14
- package/src/core/updateNativeLayerView.js +0 -9
- package/src/geometry/dot.js +0 -6
- package/src/geometry/push.js +0 -3
- package/src/globals/cameraByMap.js +0 -1
- package/src/raster/finishAttachment.js +0 -15
- package/src/raster/isLoading.js +0 -7
- package/src/raster/terrainTileGeometry.js +0 -16
- package/src/rendering/destroyTexture.js +0 -9
- package/src/rendering/sortMeshes.js +0 -6
- package/src/rendering/updateRoofAtlas.js +0 -20
- package/src/rendering/updateRoofRaster.js +0 -25
- package/src/scene/attach.js +0 -54
- package/src/scene/endZoom.js +0 -23
- package/src/scene/initializeSharedRenderer.js +0 -45
- package/src/scene/layerCountTitle.js +0 -4
- package/src/scene/mountRenderer.js +0 -25
- package/src/scene/ready.js +0 -9
- package/src/scene/renderLayerCount.js +0 -13
- package/src/scene/rendererDeviceError.js +0 -14
- package/src/scene/rendererDeviceLost.js +0 -14
- package/src/scene/requestAdapter.js +0 -12
- package/src/scene/requestDevice.js +0 -9
- package/src/scene/update.js +0 -23
- package/src/sources/projectedTree.js +0 -19
- package/src/sources/pump.js +0 -44
- package/src/sunlight/render.js +0 -9
- package/src/terrain/rasterProgram.js +0 -51
- package/src/walk/land.js +0 -32
- package/src/walk/local.js +0 -18
- /package/src/{camera → animations}/mapStopPitchBearingAnimation.js +0 -0
- /package/src/{core → animations}/runMarkerPanFrame.js +0 -0
- /package/src/{core → animations}/scheduleMarkerPan.js +0 -0
- /package/src/archives/{varint.js → readVarint.js} +0 -0
- /package/src/{sunlight → astronomy}/horizontalPosition.js +0 -0
- /package/src/{sunlight → astronomy}/moonPosition.js +0 -0
- /package/src/{sunlight → astronomy}/solarPosition.js +0 -0
- /package/src/{sunlight → astronomy}/solarTime.js +0 -0
- /package/src/{scene → camera}/createSceneCamera.js +0 -0
- /package/src/{sunlight/rgb.js → colors/formatRGB.js} +0 -0
- /package/src/{utils/channel.js → colors/hslChannel.js} +0 -0
- /package/src/{sunlight/mix.js → colors/mixColor.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/{traffic → geometry}/appendRouteDash.js +0 -0
- /package/src/{traffic → geometry}/appendRouteSegment.js +0 -0
- /package/src/geometry/{build.js → buildGeometryParts.js} +0 -0
- /package/src/geometry/{lampRing.js → createLampRing.js} +0 -0
- /package/src/{raster/createGeometry.js → geometry/createRasterQuadGeometry.js} +0 -0
- /package/src/geometry/{treeRing.js → createTreeRing.js} +0 -0
- /package/src/geometry/{cross.js → crossVector.js} +0 -0
- /package/src/{sources → geometry}/generateTreeGeometry.js +0 -0
- /package/src/{sources → geometry}/instanceAreaGeometry.js +0 -0
- /package/src/{traffic/along.js → geometry/interpolateRoute.js} +0 -0
- /package/src/{core → geometry}/markerImageBounds.js +0 -0
- /package/src/{shadows → geometry}/meshShadowBounds.js +0 -0
- /package/src/geometry/{below.js → offsetBelowGround.js} +0 -0
- /package/src/{scene → geometry}/restoreGeometry.js +0 -0
- /package/src/{traffic → geometry}/routeGeometry.js +0 -0
- /package/src/geometry/{sub.js → subtractVector.js} +0 -0
- /package/src/{terrain → geometry}/terrainGrid.js +0 -0
- /package/src/geometry/{visit.js → visitNativeCoordinates.js} +0 -0
- /package/src/{scene → gpu}/showWebGPUWarning.js +0 -0
- /package/src/{scene → layer-controls}/placeEntry.js +0 -0
- /package/src/{scene → layer-controls}/placeEntryElement.js +0 -0
- /package/src/{scene → layer-controls}/placeUnderEntry.js +0 -0
- /package/src/{scene → layer-controls}/removeEntry.js +0 -0
- /package/src/{scene → layer-controls}/replaceEntry.js +0 -0
- /package/src/{scene → layer-controls}/runPlacements.js +0 -0
- /package/src/{scene → layer-controls}/underEntry.js +0 -0
- /package/src/lighting/{visitCells.js → visitLightGridCells.js} +0 -0
- /package/src/{rendering → materials}/createProgramLayout.js +0 -0
- /package/src/{rendering → materials}/createProgramUniforms.js +0 -0
- /package/src/{rendering → materials}/prepareMeshCutout.js +0 -0
- /package/src/{shaders → materials}/validateRoofMaterial.js +0 -0
- /package/src/{core → native}/beforeNativeRender.js +0 -0
- /package/src/{core → native}/bypassNativeEvent.js +0 -0
- /package/src/{core → native}/compareNativeHits.js +0 -0
- /package/src/{core → native}/forwardNativeError.js +0 -0
- /package/src/{core → native}/hideTargets.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}/rejectNativeReady.js +0 -0
- /package/src/{core → native}/resolveNativeReady.js +0 -0
- /package/src/{core → native}/restoreNativeEvents.js +0 -0
- /package/src/{core → native}/updateNativeHover.js +0 -0
- /package/src/{camera/displayPoint.js → projections/displayContainerPoint.js} +0 -0
- /package/src/{core → projections}/localPixel.js +0 -0
- /package/src/{core → projections}/localPixelForGeometry.js +0 -0
- /package/src/{core → projections}/markerCameraIconPoint.js +0 -0
- /package/src/{geometry/bridgeLocal.js → projections/projectBridgePoint.js} +0 -0
- /package/src/{sunlight → projections}/projectCelestialBody.js +0 -0
- /package/src/{camera/pointOf.js → projections/toPoint.js} +0 -0
- /package/src/{camera → projections}/verticalGroundY.js +0 -0
- /package/src/raster/{reportError.js → reportRasterError.js} +0 -0
- /package/src/scene/{emptyNode.js → createSceneNode.js} +0 -0
- /package/src/scene/{reportError.js → reportLayerError.js} +0 -0
- /package/src/sunlight/{onAdd.js → onAddTimeControl.js} +0 -0
- /package/src/sunlight/{remove.js → removeTimeControl.js} +0 -0
- /package/src/terrain/{sample.js → sampleTerrainTile.js} +0 -0
- /package/src/{rendering → textures}/bindMeshTextures.js +0 -0
- /package/src/{rendering → textures}/compareRoofTiles.js +0 -0
- /package/src/{rendering/destroyAfterSubmission.js → textures/destroyTextureAfterSubmission.js} +0 -0
- /package/src/{rendering → textures}/ensureRoofBlit.js +0 -0
- /package/src/{models/loadImage.js → textures/loadModelImage.js} +0 -0
- /package/src/{models/textureSampler.js → textures/modelTextureSampler.js} +0 -0
- /package/src/{rendering → textures}/prepareMeshTextures.js +0 -0
- /package/src/{scene → textures}/restoreMaterialTextures.js +0 -0
- /package/src/{rendering → textures}/textureBinding.js +0 -0
- /package/src/{rendering → textures}/uploadMeshTexture.js +0 -0
- /package/src/{core → textures}/uploadNativeImage.js +0 -0
- /package/src/{rendering → textures}/uploadRoofTile.js +0 -0
- /package/src/traffic/{toLanes.js → featuresToTrafficLanes.js} +0 -0
- /package/src/traffic/{tooltip.js → trafficTooltip.js} +0 -0
- /package/src/{scene → transforms}/composeLocalTransform.js +0 -0
- /package/src/{models/nodeMatrix.js → transforms/modelNodeMatrix.js} +0 -0
- /package/src/{core → transforms}/transformNativePoint.js +0 -0
- /package/src/{scene → transforms}/updateWorldMatrix.js +0 -0
- /package/src/{scene → transforms}/worldMatrixChanged.js +0 -0
- /package/src/vehicles/{carriage.js → buildCarriage.js} +0 -0
- /package/src/vehicles/{mirror.js → mirrorVehiclePart.js} +0 -0
- /package/src/walk/{initialize.js → initializeWalkControl.js} +0 -0
- /package/src/walk/{blocked.js → isWalkBlocked.js} +0 -0
- /package/src/walk/{onBlur.js → onWalkBlur.js} +0 -0
- /package/src/walk/{onPointer.js → onWalkPointer.js} +0 -0
- /package/src/{globals → weakmaps}/boundsMethods.js +0 -0
- /package/src/{globals → weakmaps}/closestMethods.js +0 -0
- /package/src/{globals → weakmaps}/colliders.js +0 -0
- /package/src/{globals → weakmaps}/dragByHandler.js +0 -0
- /package/src/{globals → weakmaps}/dragStates.js +0 -0
- /package/src/{globals → weakmaps}/gridInitializers.js +0 -0
- /package/src/{globals → weakmaps}/imageStates.js +0 -0
- /package/src/{globals → weakmaps}/nativeEventMaps.js +0 -0
- /package/src/{globals → weakmaps}/nativeRenderByLayer.js +0 -0
- /package/src/{globals → weakmaps}/rendererDevices.js +0 -0
- /package/src/{globals → weakmaps}/renderers.js +0 -0
- /package/src/{globals → weakmaps}/sceneByLayer.js +0 -0
- /package/src/{globals → weakmaps}/sunByMap.js +0 -0
- /package/src/{globals → weakmaps}/sunlightByControl.js +0 -0
- /package/src/{globals → weakmaps}/touchByContainer.js +0 -0
- /package/src/{globals → weakmaps}/trafficByLayer.js +0 -0
- /package/src/{globals → weakmaps}/walkByMap.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(()=>{var rx=Object.defineProperty;var T=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var ox=(e,t)=>{for(var r in t)rx(e,r,{get:t[r],enumerable:!0})};var g,L=T(()=>{g=globalThis.L});var w,I=T(()=>{w=new WeakMap});var P,N=T(()=>{P=Math.PI/180});var me,bt=T(()=>{me=180/Math.PI});function E(e){return w.get(e)?._cameraPitch??0}var F=T(()=>{I()});function S(e){return w.get(e)?._cameraBearing??0}var G=T(()=>{I()});var Jt,pi=T(()=>{Jt=Object.freeze({})});function ui(){let e=this.getSize().y,t=E(this)*P,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&&!w.get(this)._pitchSky&&(w.get(this)._pitchSky=g.DomUtil.create("div","leaflet-pitch-sky",this.getContainer()),w.get(this)._pitchSky.setAttribute("aria-hidden","true"),w.get(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))"),w.get(this)._pitchSky&&(w.get(this)._pitchSky.style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",w.get(this)._pitchSky.style.height=`${Math.max(0,Math.ceil(i))}px`,w.get(this)._pitchSky.style.display=i>0?"":"none")}var da=T(()=>{L();N();I();F()});function ee(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=E(e),i=S(e);return w.get(e)._cameraPitch=Math.max(0,Math.min(e.options.maxPitch,t)),w.get(e)._cameraBearing=(r%360+360)%360,e._loaded&&(ui.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==E(e)&&e.fire("pitch",{pitch:E(e)})),e}var Ke=T(()=>{I();F();G();da()});var Je,di=T(()=>{Je=new Map});var Te,hi=T(()=>{Te={value:null}});function Qt(e){Je.delete(e),w.get(e)._cameraAnimation=null,w.get(e)._cameraFrame=null,!Je.size&&Te.value!==null&&(cancelAnimationFrame(Te.value),Te.value=null)}var gi=T(()=>{di();I();hi()});var ha,Ll=T(()=>{ha={value:void 0}});var ga,Pl=T(()=>{ga={value:void 0}});var xa,bl=T(()=>{xa={value:void 0}});var ya,Bl=T(()=>{ya={value:void 0}});var yi,Sl=T(()=>{yi={value:void 0}});var Le,kt=T(()=>{Le=new WeakMap});var ct,vi=T(()=>{ct=new Set});var Gr,va=T(()=>{Gr=Object.freeze({capture:!0,passive:!1})});function wa(){this._map.fire("cameratouchchange")}var Cl=T(()=>{});var er,wi=T(()=>{er=Object.freeze([.8,.5])});var El,zl=T(()=>{El=Object.freeze([.8,0])});var Mi,Ma=T(()=>{Mi=Object.freeze({preventScroll:!0})});var _i,_a=T(()=>{_i=Object.freeze({animate:!0})});function Il(e){Te.value=null;let t=[...Je];Je.clear();let r,o,i,n,a;for([o,i]of t)if(w.get(o)._cameraFrame=null,w.get(o)._cameraAnimation===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{ee(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&w.get(o)._cameraAnimation===i?Ti(o,i):w.get(o)._cameraAnimation===i&&(w.get(o)._cameraAnimation=null)}catch(s){r||=s}}if(r)throw r}var Al=T(()=>{hi();di();I();Ke();Ta()});function Ti(e,t){Je.set(e,t),Te.value===null&&(Te.value=requestAnimationFrame(Il)),w.get(e)._cameraFrame=Te.value}var Ta=T(()=>{di();hi();I();Al()});function tr(e,t,r,o=Jt){if(Qt(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 ee(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=E(e),s=S(e),f=((r-s)%360+540)%360-180,l=w.get(e)._cameraAnimation={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:f};return Ti(e,l),e}var Li=T(()=>{pi();I();Ke();F();G();gi();Ta()});function Dl(e,t=_i){return tr(e,0,0,t)}var Ol=T(()=>{_a();Li()});function De(e,t,r){return tr(e,E(e),t,r)}var Rr=T(()=>{Li();F()});function Gl(e,t=_i){return De(e,0,t)}var Rl=T(()=>{_a();Rr()});function Ul(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Dl(r):Gl(r),e.detail&&r.getContainer().focus(Mi)}var Fl=T(()=>{Ma();Ol();Rl()});function ut(e,t,r){return tr(e,t,S(e),r)}var Pi=T(()=>{Li();G()});function Nl(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")De(r,S(r)-o);else if(e.key==="ArrowRight")De(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)ut(r,E(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)ut(r,E(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var jl=T(()=>{Rr();G();Pi();F()});function bi(){let e=this._map,t=this.options.visualizePitch?E(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*P))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(E(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 La=T(()=>{N();F();G()});var te,Qe=T(()=>{te={value:new WeakMap}});var dt,Bi=T(()=>{dt={value:new Set}});function Si(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var Pa=T(()=>{});function Ci(e){let t=te.value.get(this);if(t.drag||!t.accept(e)||Si(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?.(Mi),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var ba=T(()=>{Qe();Ma();Pa()});function Ei(e){return Qt(e),e}var Ba=T(()=>{gi()});function zi(e){let t=te.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;Ei(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))*me}else i*=e.clientY<t.drag.cy?1:-1;ee(t.map,E(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var Sa=T(()=>{bt();Qe();Ba();Ke();F();G()});function rr(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 Ii=T(()=>{});function ke(e){rr(te.value.get(this),e)}var Ca=T(()=>{Qe();Ii()});function Ai(e){let t=te.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Ea=T(()=>{Qe()});function Di(e){let t=te.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var za=T(()=>{Qe()});function Oi(){let e;for(e of dt.value)rr(e)}var Ia=T(()=>{Bi();Ii()});function Gi(e,t,r,o=er,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return te.value.set(t,n),dt.value.add(n),t.addEventListener("pointerdown",Ci,!0),t.addEventListener("pointermove",zi),t.addEventListener("pointerup",ke),t.addEventListener("pointercancel",ke),t.addEventListener("lostpointercapture",ke),t.addEventListener("click",Ai,!0),t.addEventListener("contextmenu",Di),window.addEventListener("blur",Oi),n}var Aa=T(()=>{wi();Qe();Bi();ba();Sa();Ca();Ea();za();Ia()});function Zl(e){return e.button===0}var $l=T(()=>{});function Vl(){bi.call(this._rotateControl)}var Hl=T(()=>{La()});function ql(e){let t=g.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=g.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=g.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=Ul,r.onkeydown=Nl,this._refresh=bi,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Gi(e,r,Zl,this.options.visualizePitch?er:El),r.addEventListener("focusout",Vl),g.DomEvent.on(r,"dblclick contextmenu",g.DomEvent.stop),g.DomEvent.disableClickPropagation(t),g.DomEvent.disableScrollPropagation(t),t}var Wl=T(()=>{L();wi();zl();Fl();jl();La();Aa();$l();Hl()});function Yl(e){rr(e);let{element:t}=e;t.removeEventListener("pointerdown",Ci,!0),t.removeEventListener("pointermove",zi),t.removeEventListener("pointerup",ke),t.removeEventListener("pointercancel",ke),t.removeEventListener("lostpointercapture",ke),t.removeEventListener("click",Ai,!0),t.removeEventListener("contextmenu",Di),te.value.delete(t),dt.value.delete(e),dt.value.size||window.removeEventListener("blur",Oi)}var Xl=T(()=>{Qe();Bi();Ii();ba();Sa();Ca();Ea();za();Ia()});function Ri(){Yl(this._dragState)}var Da=T(()=>{Xl()});function Kl(e){e.off("rotate pitch",this._refresh,this),Ri.call(this)}var Jl=T(()=>{Da()});function Ql(e){return new g.Control.Rotate(e)}var kl=T(()=>{L()});function ep(e){let t=this._cameraShiftRotate;!e.shiftKey||Si(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),De(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var tp=T(()=>{Rr();G();Pa()});function rp(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=ep,e.addEventListener("wheel",this._wheel,Gr)}var op=T(()=>{va();tp()});function ip(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var np=T(()=>{});function ap(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var sp=T(()=>{});function mp(){this._dragState=Gi(this._map,this._map.getContainer(),ap,er,!0)}var fp=T(()=>{wi();Aa();sp()});function lp(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)&&De(t._map,r-o)}var pp=T(()=>{Rr()});function Oa(e,t){e.disable(),e._map.fire("error",{error:t})}var cp=T(()=>{});function up([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 Oa(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){Oa(r,i)}}}var dp=T(()=>{cp()});function hp(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:lp};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(up)}var gp=T(()=>{pp();dp()});function xp(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var yp=T(()=>{});function vp(e){e[0]?.target._containerResizeMap.invalidateSize()}var wp=T(()=>{});function Mp(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(vp),this._observer.observe(e)}var _p=T(()=>{wp()});function Tp(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Lp=T(()=>{});function Ui(e){let t=Le.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!w.get(r).touchRotate.enabled()&&!w.get(r).touchPitch.enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Ei(r);let a=o.getBoundingClientRect(),s=new g.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:E(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new g.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 Ga=T(()=>{L();kt();I();Ba();G();F()});function Fi(e){let t=Le.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),f=o.getBoundingClientRect(),l=i.currentMiddle;l.x=(n.clientX+a.clientX)/2-f.left,l.y=(n.clientY+a.clientY)/2-f.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*me;ee(r,w.get(r).touchPitch.enabled()?i.pitch-(l.y-i.middle.y)*.25:i.pitch,w.get(r).touchRotate.enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let u=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),u,{animate:!1}),r.options.touchZoom!=="center"){let d=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(l)));r.setView(r.unproject(r.project(r.getCenter()).add(d)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var Ra=T(()=>{bt();kt();I();Ke()});function et(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 Ur=T(()=>{});function or(e){et(Le.get(this),e)}var Ua=T(()=>{kt();Ur()});function Ni(){let e=w.get(this)._cameraTouchState,{map:t,container:r}=e,o=w.get(t).touchRotate.enabled()||w.get(t).touchPitch.enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(et(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Fa=T(()=>{I();Ur()});function ji(){let e;for(e of ct)et(e)}var Na=T(()=>{vi();Ur()});function Pp(){let e=w.get(this)._cameraTouchState;if(!e)return;let{container:t,map:r}=e;et(e),t.removeEventListener("touchstart",Ui,!0),t.removeEventListener("touchmove",Fi,!0),t.removeEventListener("touchend",or,!0),t.removeEventListener("touchcancel",or,!0),ct.delete(e),ct.size||window.removeEventListener("blur",ji),r.off("cameratouchchange",Ni,r),w.get(r).rotateControl?.remove(),Le.delete(t),delete w.get(r)._cameraTouchState}var bp=T(()=>{I();vi();kt();Ur();Ga();Ra();Ua();Na();Fa()});function ht(e,t,r){let o=w.get(e)[t]=new r(e);e._handlers.push(o),e.options[t]&&o.enable()}var Bp=T(()=>{I()});var Sp={};ox(Sp,{cameraControls:()=>ix});function ix(e){if(ht(e,"trackContainerMutation",ga.value),!e.options.rotate)return;ht(e,"shiftKeyRotate",ya.value),ht(e,"pitchDrag",xa.value),ht(e,"compassBearing",ha.value),ht(e,"touchRotate",yi.value),ht(e,"touchPitch",yi.value);let t=e.getContainer(),r=w.get(e)._cameraTouchState={map:e,container:t,touch:null,nativeZoom:void 0};Le.set(t,r),ct.add(r),t.addEventListener("touchstart",Ui,Gr),t.addEventListener("touchmove",Fi,Gr),t.addEventListener("touchend",or,!0),t.addEventListener("touchcancel",or,!0),window.addEventListener("blur",ji),e.on("cameratouchchange",Ni,e),e.options.rotateControl&&(w.get(e).rotateControl=new g.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:Jt),w.get(e).rotateControl.addTo(e)),e.once("unload",Pp,e)}var Cp=T(()=>{L();Ll();Pl();bl();Bl();Sl();I();kt();vi();va();pi();Cl();Wl();Jl();kl();op();np();fp();Da();gp();yp();_p();Lp();Ga();Ra();Ua();Fa();bp();Na();Bp();ha.value=g.Handler.extend({addHooks:hp,removeHooks:xp});ga.value=g.Handler.extend({addHooks:Mp,removeHooks:Tp});xa.value=g.Handler.extend({addHooks:mp,removeHooks:Ri});ya.value=g.Handler.extend({addHooks:rp,removeHooks:ip});yi.value=g.Handler.extend({addHooks:wa,removeHooks:wa});g.Control.Rotate=g.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:ql,onRemove:Kl});g.control&&(g.control.rotate=Ql)});L();var st={value:void 0};var ao={value:void 0};var so={value:void 0};L();var O={value:void 0};var se={value:void 0};var mo={value:void 0};var fo={value:void 0};var lo={value:void 0};var po={value:void 0};var co={value:void 0};var uo={value:void 0};var ho={value:void 0};var m=new WeakMap;L();I();L();I();var ve=new WeakMap;function Pr(e){let t=ve.get(e.currentTarget);if(!t)return;let r;for(r of t)re(r)}function br(e){let t=ve.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 go(e,t){let r=ve.get(e);r&&(r.delete(t),r.size||ve.delete(e))}function ms(e,t){let r=ve.get(e);r||ve.set(e,r=new Set),r.add(t)}var Ie=new Set;var xo=[null];var Pt=new WeakMap;I();var fs={subtree:!0};I();L();function yo(e){let t;for(t of Object.values(e._layers))t instanceof g.Marker?t.update():(t instanceof g.Popup||t instanceof g.Tooltip)&&t._updatePosition()}function ls(e,t){let r=e._map,o=m.get(e)._zoomView,i,n;for(n of m.get(e)._zoomTransitions.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),f=1+(s-1)*a,l=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);w.get(r)._cameraView={zoom:r.getScaleZoom(f,o.zoom),center:r.unproject(l.add(p.subtract(l).multiplyBy(s*a/f)),o.zoom)},yo(r)}function ps(e,t){let r=e._map,o,i,n;if(r._animatingZoom){m.get(e)._zoomTransitions||=new Map;for(o of r.getContainer().getAnimations(fs))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||m.get(e)._zoomTransitions.has(o)||(i=o.currentTime||0,o.pause(),m.get(e)._zoomTransitions.set(o,{start:t,time:i}));for([o,{start:n,time:i}]of m.get(e)._zoomTransitions)o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);m.get(e)._zoomView&&ls(e,t)}}var Br={size:[null,null],format:"depth24plus",usage:null};async function cs(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function D(e,t){cs(e,t,m.get(e).renderer.device.queue.onSubmittedWorkDone())}function us(e,t){(!m.get(e)._size||!m.get(e)._size.equals(t))&&(m.get(e).renderer.width=t.x,m.get(e).renderer.height=t.y,m.get(e).renderer.canvas.width=Math.round(t.x*m.get(e).renderer.dpr),m.get(e).renderer.canvas.height=Math.round(t.y*m.get(e).renderer.dpr),m.get(e).renderer.canvas.style.width=`${t.x}px`,m.get(e).renderer.canvas.style.height=`${t.y}px`,m.get(e).renderer.depthTexture&&D(e,m.get(e).renderer.depthTexture),m.get(e).renderer.depthTexture=m.get(e).renderer.device.createTexture((Br.size[0]=m.get(e).renderer.canvas.width,Br.size[1]=m.get(e).renderer.canvas.height,Br.usage=GPUTextureUsage.RENDER_ATTACHMENT,Br)),m.get(e)._size=t)}N();bt();var ds=2*Math.atan(1/3)*me;var Ve=2*Math.PI*6378137;I();var mt=new WeakMap;F();G();var hs=Math.PI/360;function Bt(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:f,projectionViewMatrix:l}=e,p,c;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let u=Math.hypot(a[0],a[1],a[2])||1;a[0]/=u,a[1]/=u,a[2]/=u,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 d=Math.hypot(i[0],i[1],i[2])||1;i[0]/=d,i[1]/=d,i[2]/=d,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 h=e.viewTransform;h.m11=i[0],h.m12=i[1],h.m13=i[2],h.m14=0,h.m21=n[0],h.m22=n[1],h.m23=n[2],h.m24=0,h.m31=a[0],h.m32=a[1],h.m33=a[2],h.m34=0,h.m41=t[0],h.m42=t[1],h.m43=t[2],h.m44=1,h.invertSelf(),s[0]=h.m11,s[1]=h.m12,s[2]=h.m13,s[3]=h.m14,s[4]=h.m21,s[5]=h.m22,s[6]=h.m23,s[7]=h.m24,s[8]=h.m31,s[9]=h.m32,s[10]=h.m33,s[11]=h.m34,s[12]=h.m41,s[13]=h.m42,s[14]=h.m43,s[15]=h.m44;for(c of s)if(!Number.isFinite(c))throw new Error("Singular 3D transform");let y=1/Math.tan(e.fov*hs),x=e.near,v=e.far;f[0]=y/e.aspect,f[1]=0,f[2]=0,f[3]=0,f[4]=0,f[5]=y,f[6]=0,f[7]=0,f[8]=0,f[9]=0,f[10]=v/(x-v),f[11]=-1,f[12]=0,f[13]=0,f[14]=v*x/(x-v),f[15]=0;let M=e.projectionTransform;M.m11=f[0],M.m12=f[1],M.m13=f[2],M.m14=f[3],M.m21=f[4],M.m22=f[5],M.m23=f[6],M.m24=f[7],M.m31=f[8],M.m32=f[9],M.m33=f[10],M.m34=f[11],M.m41=f[12],M.m42=f[13],M.m43=f[14],M.m44=f[15];let _=e.projectionViewTransform;_.m11=M.m11,_.m12=M.m12,_.m13=M.m13,_.m14=M.m14,_.m21=M.m21,_.m22=M.m22,_.m23=M.m23,_.m24=M.m24,_.m31=M.m31,_.m32=M.m32,_.m33=M.m33,_.m34=M.m34,_.m41=M.m41,_.m42=M.m42,_.m43=M.m43,_.m44=M.m44,_.multiplySelf(h),l[0]=_.m11,l[1]=_.m12,l[2]=_.m13,l[3]=_.m14,l[4]=_.m21,l[5]=_.m22,l[6]=_.m23,l[7]=_.m24,l[8]=_.m31,l[9]=_.m32,l[10]=_.m33,l[11]=_.m34,l[12]=_.m41,l[13]=_.m42,l[14]=_.m43,l[15]=_.m44}L();function gs(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,f,l;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]),f=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,l=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,f>=0&&l>=0&&f+l<=1)return f*i[2]+l*n[2]+(1-f-l)*a[2]}return null}function Sr(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 xs(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=Sr(t,i,n),l=Sr(t,i+1,n),p=Sr(t,i,n+1),c=Sr(t,i+1,n+1);return!Number.isFinite(f)||!Number.isFinite(l)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(f)?f:Number.isFinite(l)?l:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(f*(1-a)+l*a)*(1-s)+(p*(1-a)+c*a)*s}function Y(e,t){if(!e._map||!m.get(e)._terrainReady)return null;let r=t instanceof g.Point?t:e._map.project(t,m.get(e)._terrainZoom);return gs(r,m.get(e)._bridges)??xs(r,m.get(e)._terrainTiles)}I();function He(e,t,r=!1){let o=w.get(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 ys(e,t){let r=e._map,o=w.get(r)._cameraView?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(Ve*Math.cos(m.get(e)._sceneOrigin.lat*P)),n=He(r,O.value.layerPointToContainerPoint.call(r,r.project(m.get(e)._sceneOrigin).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,f=mt.get(r)?.control?._walk,l=((w.get(r)._terrain3D?Y(w.get(r)._terrain3D,r.getCenter()):void 0)??0)+(f?.saved?f.state.height:0),p=(t.y/2-n.y)/i,c=E(r)*P,u=S(r)*P,d=m.get(e).camera;d.fov=ds,d.aspect=t.x/t.y,d.near=Math.max(.1,a/1e4),d.far=Math.max(1e4,a*10),d.position[0]=s+Math.sin(u)*Math.sin(c)*a,d.position[1]=l+Math.cos(c)*a,d.position[2]=p+Math.cos(u)*Math.sin(c)*a,d.up[0]=-Math.sin(u)*Math.cos(c),d.up[1]=Math.sin(c),d.up[2]=-Math.cos(u)*Math.cos(c),d.target[0]=s,d.target[1]=l,d.target[2]=p,Bt(d)}function vs(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}bt();function ws(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]*me),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*me),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*me),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Q(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=vs(e,i),!i){for(n of e.children)Q(n);return}let a,s;e.matrix?a=e.matrix:a=ws(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)Q(n)}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,l,p,c;for(f=0;f<3;f++){for(p=1/0,c=-1/0,l=f;l<n.data.length;l+=n.size)p=Math.min(p,n.data[l]),c=Math.max(c,n.data[l]);t[f]=Math.fround(t[f]+p),r[f]=Math.fround(r[f]+c)}}let a=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],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 Ms(e,t,r,o,i){e.geometry.bounds||oe(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=n.center,f=a[0]*s[0]+a[4]*s[1]+a[8]*s[2]+a[12],l=a[1]*s[0]+a[5]*s[1]+a[9]*s[2]+a[13],p=a[2]*s[0]+a[6]*s[1]+a[10]*s[2]+a[14],c=t[2]*f+t[6]*l+t[10]*p+t[14],u=t[3]*f+t[7]*l+t[11]*p+t[15];e._sortDepth=c/u;let d=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]));e._visibleInFrame=r[0][0]*f+r[0][1]*l+r[0][2]*p+r[0][3]>=-d*o[0]&&r[1][0]*f+r[1][1]*l+r[1][2]*p+r[1][3]>=-d*o[1]&&r[2][0]*f+r[2][1]*l+r[2][2]*p+r[2][3]>=-d*o[2]&&r[3][0]*f+r[3][1]*l+r[3][2]*p+r[3][3]>=-d*o[3]&&r[4][0]*f+r[4][1]*l+r[4][2]*p+r[4][3]>=-d*o[4]&&r[5][0]*f+r[5][1]*l+r[5][2]*p+r[5][3]>=-d*o[5],e._visibleInFrame&&i.push(e)}function Wn(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),Ms(e,r,o,i,n));let s;for(s of e.children)Wn(s,t,r,o,i,n,a)}function _s(e,t,r){let i=m.get(e).camera.projectionViewMatrix,n=m.get(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,l,p,c,u;for(f=0;f<6;f++){for(l=Math.floor(f/2),p=a[f],c=0;c<4;c++)u=c*4,p[c]=f===4?i[u+2]:f%2?i[u+3]-i[u+l]:i[u+3]+i[u+l];s[f]=Math.hypot(p[0],p[1],p[2])}let d=m.get(e)._visibleMeshes||=[];d.length=0;let h=m.get(e)._shadowMeshes||=[];h.length=0,r&&Q(m.get(e).scene),Wn(m.get(e).scene,t,i,a,s,d,h)}L();var Ts=[];N();var Ls=[];var Ps={x:0,y:0};var bs={x:1,y:1};var Bs={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 St={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 Ss={magFilter:"linear",minFilter:"linear"};function Cs(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Bs);e.roofBlit={pipeline:t.createRenderPipeline((St.vertex.module=r,St.fragment.module=r,St)),sampler:t.createSampler(Ss)},St.vertex.module=null,St.fragment.module=null}}var vo={size:null,usage:null};var wo={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Mo={source:null};var _o={texture:null};var To=[null,null];function Es(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Mo.source=t.image,Mo),(_o.texture=r.texture,_o),(To[0]=r.texture.width,To[1]=r.texture.height,To)),Mo.source=null,_o.texture=null,r.uploaded=r.image)}var ce={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var Lo=[null];var Po={value:new Float32Array(64)};function zs(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Is(e,t,r,o,i,n,a){let s=m.get(e).renderer,f=s.device,l=e._map,p=Math.max(1,t.length)*64;Po.value.length<p&&(Po.value=new Float32Array(p));let c=Po.value,u=f.createBuffer((vo.size=c.byteLength,vo.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,vo)),d=f.createCommandEncoder(),h=d.beginRenderPass((wo.colorAttachments[0].view=m.get(e)._roofRaster.texture.texture.createView(),wo));wo.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(zs);let y,x,v,M,_,B,b,A;for([y,{tile:x,layer:v}]of t.entries())({coords:M}=x),_=x.texture,Es(f,x),c[y*64]=v.options.opacity,B=256*l.getZoomScale(r,M.z),b=(M.x*B-o.x)*n/i.x,A=(M.y*B-o.y)*a/i.y,h.setViewport(b,A,Math.min(B*n/i.x,n-b),Math.min(B*a/i.y,a-A),0,1),h.setBindGroup(0,f.createBindGroup((ce.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ce.entries[0].resource=_.texture.createView(),ce.entries[1].resource=s.roofBlit.sampler,ce.entries[2].resource.buffer=u,ce.entries[2].resource.offset=y*256,ce))),ce.layout=null,ce.entries[0].resource=null,ce.entries[1].resource=null,ce.entries[2].resource.buffer=null,h.draw(4);h.end(),f.queue.writeBuffer(u,0,c),f.queue.submit((Lo[0]=d.finish(),Lo)),Lo[0]=null,u.destroy()}function As(e,t){let r=-1/0,o,i;for(o of e)for(i of m.get(o)._rasterTiles.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 Ds={size:[null,null],format:"rgba8unorm",usage:null};var Os={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Gs(e,t,r,o){let i=m.get(e).renderer,n=Ds;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)&&(D(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(Os),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Rs(e,t,r,o){let i=e._map,n=m.get(e).renderer,a=Ls;a.length=0;let s=As(t,a),f=1/0,l=1/0,p=-1/0,c=-1/0,u,d;a.length||(s=i.getZoom());for({tile:{coords:u}}of a)d=256*i.getZoomScale(s,u.z),f=Math.min(f,u.x*d),l=Math.min(l,u.y*d),p=Math.max(p,(u.x+1)*d),c=Math.max(c,(u.y+1)*d);let h=i.project(m.get(e)._sceneOrigin,s),y=Ps,x=bs;y.x=a.length?f:h.x,y.y=a.length?l:h.y,x.x=a.length?p-f:1,x.y=a.length?c-l:1;let v=Math.min(1,4096/Math.max(x.x,x.y)),M=Math.max(1,Math.ceil(x.x*v)),_=Math.max(1,Math.ceil(x.y*v)),B=i.options.crs.scale(s)/(Ve*Math.cos(m.get(e)._sceneOrigin.lat*P)),b={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:m.get(e)._roofRaster?.texture};m.get(e)._roofRaster=b,b.signature=r,b.updatedAt=o,b.matrix[0]=B/x.x,b.matrix[10]=B/x.y,b.matrix[12]=(h.x-y.x)/x.x,b.matrix[14]=(h.y-y.y)/x.y,Gs(e,b,M,_),Cs(n);try{Is(e,a,s,y,x,M,_)}finally{a.length=0}}function Us(e,t,r){let o=Ts;o.length=0;let i=!1,n;for(n of t)o.push(`${g.Util.stamp(n)}:${m.get(n)._rasterVersion||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!m.get(n)._loadingTiles;let a=o.join("|");o.length=0,(!m.get(e)._roofRaster||m.get(e)._roofRaster.signature!==a&&(!i||r-m.get(e)._roofRaster.updatedAt>=50))&&Rs(e,t,a,r)}function Fs(e,t){let r=e._map,o=m.get(e)._roofRasters||=[];o.length=0;let i=!1,n;for(n of m.get(e)._layers)if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(n of Object.values(r._layers))m.get(n).kind==="raster"&&m.get(n)._rasterTiles&&n.options.opacity>0&&o.push(n);Us(e,o,t)}else m.get(e)._roofRaster&&(D(e,m.get(e)._roofRaster.texture.texture),m.get(e)._roofRaster=null);return o}function Ns(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 js(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)||Ns(e,t)}function Zs(e){return e.sort(js)}N();function $s(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=m.get(r),s=a._tileZoom,f=o.project(m.get(t)._sceneOrigin,s),l=o.options.crs.scale(s)/(Ve*Math.cos(m.get(t)._sceneOrigin.lat*P)),p=1/0,c=1/0,u=-1/0,d=-1/0,h,y,x,v,M,_,B,b;for(h=0;h<8;h++)y=h&1?i.max[0]:i.min[0],x=h&2?i.max[1]:i.min[1],v=h&4?i.max[2]:i.min[2],M=f.x+(n[0]*y+n[4]*x+n[8]*v+n[12])*l,_=f.y+(n[2]*y+n[6]*x+n[10]*v+n[14])*l,p=Math.min(p,M),c=Math.min(c,_),u=Math.max(u,M),d=Math.max(d,_);return a.header.maxLat!==void 0&&a.header.minLon!==void 0&&a.header.minLat!==void 0&&a.header.maxLon!==void 0&&(B=o.project([a.header.maxLat,a.header.minLon],s),b=o.project([a.header.minLat,a.header.maxLon],s),p=Math.max(p,B.x),c=Math.max(c,B.y),u=Math.min(u,b.x),d=Math.min(d,b.y),p>=u||c>=d)?null:[p,c,u,d]}function Vs(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,f,l,p,c,u,d,h;for([s,f,l,p]of e){if(c=Math.max(s,i),u=Math.max(f,n),d=Math.min(l,i+o),h=Math.min(p,n+o),c>=d||u>=h){a.push([s,f,l,p]);continue}f<u&&a.push([s,f,l,u]),h<p&&a.push([s,h,l,p]),s<c&&a.push([s,u,c,h]),d<l&&a.push([d,u,l,h])}return a}function Hs(e,t,r){let o=!1,i=!1,n,a,s,f;for(n of r){if(!m.get(n).header){i=!0;continue}if(a=$s(e,t,n),!!a){o=!0,s=[a];for(f of m.get(n)._rasterTiles.values())if(!(!f.done&&!f.error)&&(s=Vs(s,f,m.get(n)._tileZoom),!s.length))return!0}}return!o&&!i}function qs(e,t,r){if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){if(t._roofCoverageSignature!==m.get(e)._roofRaster?.signature&&(t._roofCoverageSignature=m.get(e)._roofRaster?.signature,t._roofCovered=Hs(t,e,r)),!t._roofCovered)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Ws(e,t,r,o){let i=m.get(e)._visibleMeshes,n=m.get(e)._shadowMeshes,a=m.get(e).renderer,s=!1,f,l;for(f of i)qs(e,f,t)&&(f.fadeDuration&&(f.fadeStart??=f.tile?.loadedAt??r,l=Math.min(1,(r-f.fadeStart)/f.fadeDuration),f._appearance=l*l*(3-2*l),s||=l<1),o.push(f));i.length=0,Zs(o);let p=1/0,c=-1/0;for(f of o)f.ground&&(p=Math.min(p,f.tile.coords.z),c=Math.max(c,f.tile.coords.z));a.groundOverlap=p!==c;let u=0;for(f of n)f.visible&&f._appearance!==0&&(n[u++]=f);return n.length=u,s}var bo={size:null,usage:null};function Ys(e,t,r){let o=m.get(e).renderer;(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&D(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((bo.size=Math.max(64,t.length*4+r.length*2)*256,bo.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,bo)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var fe={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Bo(e){let t=m.get(e).renderer.sunlight;t.bindGroup=m.get(e).renderer.device.createBindGroup((fe.layout=t.layout,fe.entries[0].resource.buffer=t.buffer,fe.entries[1].resource=t.texture.createView(),fe.entries[2].resource=t.sampler,fe.entries[3].resource.buffer=t.lights,fe)),fe.layout=null,fe.entries[0].resource.buffer=null,fe.entries[1].resource=null,fe.entries[2].resource=null,fe.entries[3].resource.buffer=null}function Xs(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 Ks(e,t,r,o,i,n,a,s){let f=e[t+3],l=e[t]-r,p=e[t+2]-o,c,u,d;for(c=Math.floor((p-f)/i);c<=Math.floor((p+f)/i);c++)for(u=Math.floor((l-f)/i);u<=Math.floor((l+f)/i);u++)d=c*n+u,s?Xs(e,t,d,a,s):a[d]++}function Yn(e,t,r,o,i,n,a){let s,f;for(s of e)for(f=0;f<s.length;f+=8)Ks(s,f,t,r,o,i,n,a)}function Js(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,f;if(r){let l=1/0,p=1/0,c=-1/0,u=-1/0;for(o of e)for(i=0;i<o.length;i+=8)l=Math.min(l,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),u=Math.max(u,o[i+2]+o[i+3]);let d=Math.ceil((c-l)/s)+1,h=Math.ceil((u-p)/s)+1,y=new Uint32Array(d*h),x=new Uint32Array(d*h);Yn(e,l,p,s,d,y);let v=0;for(n of y)v+=n;let M=(2+d*h+v*2)*4;if(M*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");f=new Float32Array(M),f[0]=l,f[1]=p,f[2]=s,f[3]=d,f[4]=h,f[5]=r;let _=2+d*h;for(a=0;a<y.length;a++)y[a]&&(f[(2+a)*4]=x[a]=_,f[(2+a)*4+1]=y[a],_+=y[a]*2);Yn(e,l,p,s,d,x,f)}else f=new Float32Array(8);return{data:f,count:r}}var Qs=.03/(4*Math.PI);function ks(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,f,l,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:f,flux:l}=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]=f[0],r[o*8+5]=f[1],r[o*8+6]=f[2],r[o*8+7]=l*Qs;return r}function Xn(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,f,l,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,f=n._worldLights,l=!!f,p=0;p<a.length&&l;p++)l=a[p]===f.matrix[p];(!l||f.lights!==s)&&(f=n._worldLights={lights:s,matrix:[...a],data:ks(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===f}if(o)return t;let c=new Array(e.length),u=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],f=n._worldLights,c[i]=f.data,u[i]={mesh:n,cache:f};return{...Js(c,r),meshes:u}}var ue=[];function Kn(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||ue)Kn(o,t,r)}function em(e){let{device:t,sunlight:r}=m.get(e).renderer,o=[],i=[],n;for(n of m.get(e)._layers)!n.options.nightLight||!m.get(n).root.visible||Kn(m.get(n).root,o,i);let a=t.limits.maxStorageBufferBindingSize,s=Xn(o,r.staticLightGrid,a),f=Xn(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&f===r.dynamicLightGrid)return;let l=s.data.byteLength+f.data.byteLength;if(l>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<l&&(D(e,r.lights),r.lights=t.createBuffer({size:l,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Bo(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,f.data),r.lightCount=s.count+f.count,r.staticLightGrid=s,r.dynamicLightGrid=f}function tm(e,t,r,o){let i=m.get(e).renderer,n=m.get(e).camera,a=n.viewMatrix,s=o?.direction,f=s?s[0]:-300,l=s?s[1]:500,p=s?s[2]:300,c=a[0]*f+a[4]*l+a[8]*p,u=a[1]*f+a[5]*l+a[9]*p,d=a[2]*f+a[6]*l+a[10]*p,h=Math.hypot(c,u,d)||1,y=Math.hypot(a[4],a[5],a[6])||1;Ys(e,t,r);let x=i.uniformData;x.set(n.viewMatrix,0),x.set(n.projectionMatrix,16),m.get(e)._roofRaster?.matrix?x.set(m.get(e)._roofRaster.matrix,32):(x.fill(0,32,48),x[32]=x[37]=x[42]=x[47]=1),x[48]=c/h,x[49]=u/h,x[50]=d/h,x[51]=o&&o.altitude<=0?0:1,x[52]=a[4]/y,x[53]=a[5]/y,x[54]=a[6]/y;let v=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;x[55]=v*v*(3-2*v);let M=o?.tint;x[56]=M?M[0]:1,x[57]=M?M[1]:1,x[58]=M?M[2]:1,x[59]=0,v>0&&em(e),i.uniformSlot=1}var Ct={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 Jn=[null];var W={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 rm={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function om(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((W.layout=i.pipelineLayout,W.vertex.module=i.vertex,W.vertex.buffers=i.vertexBuffers,W.fragment.module=i.fragment,W.fragment.targets[0].format=e.format,W.fragment.targets[0].blend=i.transparent?rm:void 0,W.fragment.targets[0].writeMask=GPUColorWrite.ALL,W.primitive.cullMode=r,W.primitive.frontFace=o,W.depthStencil.depthWriteEnabled=i.depthWrite,W.depthStencil.depthCompare=n,W)),W.layout=null,W.vertex.module=null,W.vertex.buffers=null,W.fragment.module=null,i.pipelineCache.set(a,s)),s}function im(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 nm(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,im(e,t,n),o}var ft={source:null,flipY:null};var Et={texture:null};var zt=[null,null];function am(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((ft.source=t.image,ft.flipY=!!t.flipY,ft),(Et.texture=t.texture,Et),(zt[0]=t.image.width,zt[1]=t.image.height,zt)),ft.source=null,Et.texture=null,t.uploaded=t.image)}var It={layout:null,entries:null};var sm=[];var So={binding:0,resource:{buffer:null,size:160}};var Co={binding:1,resource:{buffer:null,size:240}};var Eo={binding:2,resource:null};var Cr=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var Er=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function mm(e,t,r){let{program:o}=t,i=sm;i.length=0,So.resource.buffer=e.uniformBuffer,Co.resource.buffer=e.uniformBuffer,i.push(So,Co),o.terrain&&(Eo.resource=o.terrain.texture.createView(),i.push(Eo)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,f;for(a=0;a<r.length;a++)s=o.bindings[a],f=r[a],Cr[a].binding=s.texture,Cr[a].resource=f.texture.createView(),Er[a].binding=s.sampler,Er[a].resource=f.sampler,i.push(Cr[a],Er[a]),n[a]||=[],n[a][0]=f.texture,n[a][1]=f.sampler;for(t.bindGroup=e.device.createBindGroup((It.layout=o.bindGroupLayout,It.entries=i,It)),It.layout=null,It.entries=null,So.resource.buffer=null,Co.resource.buffer=null,Eo.resource=null,a=0;a<r.length;a++)Cr[a].resource=null,Er[a].resource=null;i.length=0}function fm(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}`);am(o,a),i.push(a)}let f=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!f&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(f=!0);f&&mm(e,t,i)}function zo(e,t,r,o,i){let{geometry:n}=t,a=m.get(e).renderer,{device:s}=a,f=om(a,t,o,i),l=nm(a,t);fm(a,t),r.setPipeline(f),r.setBindGroup(0,t.bindGroup,(Jn[0]=l,Jn)),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;for(c of Object.values(n.attributes))c.needsUpdate&&(s.queue.writeBuffer(c.buffer,0,c.data),c.needsUpdate=!1,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 lm(e,t,r){let o=m.get(e).renderer,i=t.beginRenderPass((Ct.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Ct.depthStencilAttachment.view=o.depthTexture.createView(),Ct));Ct.colorAttachments[0].view=null,Ct.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,f,l,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=m.get(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}l=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(zo(e,n,i,"front",l),zo(e,n,i,"back",l)):zo(e,n,i,p.cullMode,l)}i.end()}var pm=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var cm=new Float32Array(20);function um(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 dm(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(!um(o,a)){i=!1;break}}return i}var hm={min:[0,0,0],max:[0,0,0]};var gm={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 xm=[0,0,0];var ym=[0,0,0];function vm(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,f,l,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],f=r[3]*n+r[7]*a+r[11]*s+r[15],l=0;l<3;l++)p=(r[l]*n+r[l+4]*a+r[l+8]*s+r[l+12])/f,o.min[l]=Math.min(o.min[l],p),o.max[l]=Math.max(o.max[l],p)}return o}function wm(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,f;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&oe(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=vm(i,n,a),f=0;f<3;f++)r[f]=Math.min(r[f],s.min[f]),o[f]=Math.max(o[f],s.max[f]);return r[1]=Math.min(0,r[1]),t}function Mm(e,t){let{min:r,max:o}=wm(e,hm),i=gm;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=xm,a=ym,s,f,l,p,c,u,d=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]*d*2;i.far=d*5,Bt(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(l=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],f=0;f<3;f++)u=h[f]*l+h[f+4]*p+h[f+8]*c+h[f+12],n[f]=Math.min(n[f],u-20),a[f]=Math.max(a[f],u+20);let y=2/(a[0]-n[0]),x=2/(a[1]-n[1]),v=-1/(a[2]-n[2]),M=new Float32Array(16);for(s=0;s<16;s+=4)M[s]=h[s]*y,M[s+1]=h[s+1]*x,M[s+2]=h[s+2]*v,M[s+3]=h[s+3];return M[12]-=(a[0]+n[0])/(a[0]-n[0]),M[13]-=(a[1]+n[1])/(a[1]-n[1]),M[14]+=a[2]/(a[2]-n[2]),M}var Qn={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var kn={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var At={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Io={code:null};var we={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 Dt={bindGroupLayouts:[null,null]};var Ot=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Ao=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var _m=[Ot,Ao];var Tm=[Ot];function ea(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Qn.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Qn)),t.depthLayout=e.createBindGroupLayout((kn.entries[0].visibility=GPUShaderStage.VERTEX,kn)),t.depthBindGroup=e.createBindGroup((At.layout=t.depthLayout,At.entries[0].resource.buffer=t.buffer,At)),At.layout=null,At.entries[0].resource.buffer=null);let i=e.createShaderModule((Io.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;}}`,Io));Io.code=null;let n=r?_m:Tm;t[o]=e.createRenderPipeline((we.layout=e.createPipelineLayout((Dt.bindGroupLayouts[0]=t.meshLayout,Dt.bindGroupLayouts[1]=t.depthLayout,Dt)),we.vertex.module=i,we.vertex.buffers=n,we.fragment.module=i,we)),Dt.bindGroupLayouts[0]=null,Dt.bindGroupLayouts[1]=null,we.layout=null,we.vertex.module=null,we.vertex.buffers=null,we.fragment.module=null}}var Do={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Gt={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var ta=[null];function Lm(e,t,r){let o=m.get(e).renderer,i=o.device,n=o.sunlight,a=t.beginRenderPass((Do.depthStencilAttachment.view=n.texture.createView(),Do));Do.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let f,l,p,c,u,d,h;for(f of r){l=f.geometry.attributes.instanceOffset,p=l?n.instancePipeline:n.pipeline,p!==s&&(s=p,a.setPipeline(s)),c=o.uniformSlot++*256,o.uniformData.set(f.worldMatrix,c/4),o.uniformData[c/4+35]=f._appearance??1,f._shadowBuffer!==o.uniformBuffer&&(f._shadowBuffer=o.uniformBuffer,f._shadowBindGroup=i.createBindGroup((Gt.layout=n.meshLayout,Gt.entries[0].resource.buffer=o.uniformBuffer,Gt)),Gt.layout=null,Gt.entries[0].resource.buffer=null);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,(ta[0]=c,ta)),a.setVertexBuffer(0,f.geometry.attributes.position.buffer),l&&a.setVertexBuffer(1,l.buffer),d=f.geometry.attributes.index,h=f.geometry.drawRange,d?(a.setIndexBuffer(d.buffer,d.indexFormat),a.drawIndexed(h.count,l?.count??1,h.start,0,0)):a.draw(h.count,l?.count??1,h.start,0)}a.end()}var zr={size:[null,null],format:"depth32float",usage:null};function Oo(e,t){let r=m.get(e).renderer.device,o=m.get(e).renderer.sunlight;o.size!==t&&(o.texture&&D(e,o.texture),o.size=t,o.texture=r.createTexture((zr.size[0]=t,zr.size[1]=t,zr.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,zr)),Bo(e))}function Pm(e,t,r,o){let i=m.get(e).renderer,n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,pm),a.enabled=!1,a.cache=null;return}if(dm(a,r,o))return;let s=cm;a.enabled=!0,Oo(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Mm(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),ea(n,a);let f;for(f of r)if(f.geometry.attributes.instanceOffset){ea(n,a,!0);break}Lm(e,t,r);let l=new Map,p;for(p of r)l.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:l}}function Go(e){let t=m.get(e)._frame;Ie.delete(e),m.get(e)._frame=null,!Ie.size&&t!=null&&cancelAnimationFrame(t)}function R(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function Rt(e,t){m.get(e)._terrainRequest?.abort();let r=m.get(e)._rasterTiles.get(t);r&&(R(r,null),z(e),r.texture!==t.texture&&D(e,r.texture.texture),m.get(e)._rasterTiles.delete(t))}function Ut(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;m.get(e)._rasterTiles.get(r)===t&&(m.get(e)._rasterTiles.delete(r),m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,t.request.abort(),m.get(e)._terrain3D&&Rt(m.get(e)._terrain3D,t),t.mesh&&R(t.mesh,null),t.texture&&D(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),z(e))}function Ft(e){let t=m.get(e)._wantedRasterTiles,r=performance.now();if(m.get(e)._pruneVersion===m.get(e)._rasterVersion&&m.get(e)._pruneWanted===t&&r<m.get(e)._pruneAfter)return Number.isFinite(m.get(e)._pruneAfter);m.get(e)._pruneVersion=m.get(e)._rasterVersion,m.get(e)._pruneWanted=t,m.get(e)._pruneAfter=1/0;let o=[],i,n,a,s,f,l;for(i of t)n=m.get(e)._rasterTiles.get(i),n?.done&&r-n.loadedAt<250&&(m.get(e)._pruneAfter=Math.min(m.get(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 m.get(e)._rasterTiles)if(!t.has(i)){s=!1;for(f of o)if(l=Math.min(f.z,n.coords.z),Math.floor(f.x/2**(f.z-l))===Math.floor(n.coords.x/2**(n.coords.z-l))&&Math.floor(f.y/2**(f.z-l))===Math.floor(n.coords.y/2**(n.coords.z-l))){s=!0;break}s||Ut(e,n)}return Number.isFinite(m.get(e)._pruneAfter)}L();function Nt(e){return m.get(e.source)._nativeGPU===e&&e.map.hasLayer(e.source)}L();var Ro=Object.freeze([1,1,1]);L();function Uo(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 g.GridLayer&&(t.opacity=o);let f=n?i._zIndex+(m.get(i)._cameraZIndexOffset||0):i.options.zIndex;t.renderOrder=a*1e6+(f||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var bm=Object.freeze([0,2,1,1,2,3]);var ra=Object.freeze([0,0,1,0,0,1,1,1]);var Bm=Object.freeze({minFilter:"linear",magFilter:"linear"});function k(e,t){if(!t)return;R(t,null),z(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function Cm(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!Nt(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 Em(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 zm(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&&k(o,c),n.delete(t),D(o,a.texture),i.delete(t)}let f=r.naturalWidth||r.width,l=r.naturalHeight||r.height;if(!f||!l)return;let{device:p}=m.get(o).renderer;a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[f,l],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(Bm)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Cm(e,t,a,r,p,f,l)):Em(e,t,a,r,p,f,l)}return a.used=!0,a.uploaded===r?a:void 0}L();var jt=Object.freeze({});var Fo={size:null,usage:null};var Me={value:0};function K(){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 No={code:null};var jo={code:null};var Zt={bindGroupLayouts:[null,null]};var Im=" 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 Am=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Dm=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Om=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Zo={entries:null};var Gm=[];var oa={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var ia={binding:1,visibility:null,buffer:{type:"uniform"}};var na={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Rm=[{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 Um=[{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 Fm(e,t){let r=Gm;r.length=0,oa.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,ia.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(oa,ia),t.hasTerrain&&(na.visibility=GPUShaderStage.VERTEX,r.push(na));let o,i,n=0;for(o of t.bindings)i=Rm[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Um[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Zo.entries=r,Zo));return Zo.entries=null,a}function Nm(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 $t(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 jm(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 Zm(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 $m(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?Zm(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Vm(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 Hm(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"});`:`${Vm(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 qm(e=jt,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);jm(e);let f=!!e.terrain,l=o||i||n||a||e.nightLight,p=$m(e,t,r,f,l,s),c=[],u=$t(c,"baseTexture",o),d=$t(c,"metalTexture",i),h=$t(c,"emissiveTexture",n),y=$t(c,"occlusionTexture",a),x=$t(c,"roofTexture",s),v=` 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>>;${u}${d}${h}${y}${x} 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>,":""} ${l?"@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);${Hm(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:v,bindings:c,textured:l,hasTerrain:f}}async function Wm(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 le(e,t=jt){let r=qm(t,!!e.options.nightSparkle,t.terrain?Im:""),o=m.get(e).renderer.device.createShaderModule((No.code=r.vertex,No));No.code=null;let i=m.get(e).renderer.device.createShaderModule((jo.code=r.fragment,jo));jo.code=null,Wm(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[Ot,Am,t.vertexColors?Dm:null,r.textured?Om:null];t.instanced&&n.push(Ao);let a=Fm(m.get(e).renderer.device,r),s=m.get(e).renderer.device.createPipelineLayout((Zt.bindGroupLayouts[0]=a,Zt.bindGroupLayouts[1]=m.get(e).renderer.sunlight.layout,Zt));Zt.bindGroupLayouts[0]=null,Zt.bindGroupLayouts[1]=null;let f=Nm(t);return{device:m.get(e).renderer.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:f,_layerMaterial:t}}function qe(e,t,r=jt,o=0,i){let{device:n}=m.get(e).renderer,a={},s,f,l,p,c;for([s,f]of Object.entries(t))l=new Float32Array(f),p=s==="uv"?2:3,c=n.createBuffer((Fo.size=Math.max(4,l.byteLength),Fo.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Fo)),n.queue.writeBuffer(c,0,l),a[s]={size:p,data:l,count:l.length/p,buffer:c};let u={...K(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||le(e,{vertexColors:!0,doubleSided:!0,...r}),id:Me.value++,renderOrder:0,extras:{}};return R(u,m.get(e).root),z(e),u}function $o(e,t,r,o,i,n,a){let{backend:s,source:f,meshes:l}=e;if(!r.length)return;let p=l.get(t);if(!p||p.geometry.attributes.position.data.length!==r.length||p.program.uniforms.baseTexture?.value!==n){let c=[],u;for(u=0;u<r.length;u++)c.push(u%3===1?1:0);let d={position:r,normal:c};a&&(d.uv=a);let h={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND"};n&&(h.baseTexture=n),p&&k(s,p),p=qe(s,d,h,0,f instanceof g.GridLayer?e.rasterProgram:void 0),f instanceof g.GridLayer&&(e.rasterProgram||=p.program,p.texture=n),l.set(t,p)}else{let c=p.geometry.attributes.position;c.data.set(r),c.needsUpdate=!0,p.geometry.bounds=null}return Uo(e,p,o,i),p}function Vt(e,t,r,o,i){let n=zm(e,t,r);if(!n)return;let a=bm,s=[],f=[],l;for(l of a)s.push(...o[l]),f.push(ra[l*2],ra[l*2+1]);return $o(e,t,s,Ro,i,n,f)}N();function Ht(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(m.get(o).location),a=i.project(t),s=Math.cos(m.get(o).location.lat*P);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function Vo(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(Ht(e,i));return r}function Xm(e){let{source:t,textures:r,meshes:o}=e,i,n,a,s,f,l,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),f=o.get(i),f&&s?.image===n.el&&s.url===(n.el.currentSrc||n.el.src)?(s.used=!0,Uo(e,f,Ro,a)):([l,p]=t._tileCoordsToNwSe(n.coords),f=Vt(e,i,n.el,Vo(e,new g.LatLngBounds(l,p)),a)),f&&(f.renderOrder+=n.coords.z/100)))}function Km(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Vt(e,"image",t._image,Vo(e,t.getBounds()),t.options.opacity??1)}var Jm=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();N();G();function Ho(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*P:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new g.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Ir(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 Qm(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 km(e,t,r){let{source:o,map:i,backend:n}=e,a=Ht(e,o.getLatLng()),s=i.getSize(),f=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},l=f.root,p=f.camera,c=f.point,u=m.get(n).root.worldMatrix,d=m.get(n).camera.projectionViewMatrix,h,y;for(h=0;h<16;h++)y=Jm[h],l[y]=u[h],p[y]=d[h];Ir(c,l,a[0],a[1],a[2],1),Ir(c,p,c.x,c.y,c.z,c.w);let x=c.x,v=c.y,M=c.z,_=c.w;p.invertSelf(),l.invertSelf();let[B,b,A,V]=Qm(e,t,r),Z=(x/_+1)*s.x/2,j=(1-v/_)*s.y/2,J=Z-A,ye=j-V,$e=[],no,pe,at,ze,Lr;for(h=0;h<4;h++)no=J+(h%2?B:0),pe=ye+(h<2?0:b),at=Ho(o,no-Z,pe-j),ze=Z+at.x,Lr=j+at.y,Ir(c,p,ze/s.x*2-1,1-Lr/s.y*2,M/_,1),Ir(c,l,c.x/c.w,c.y/c.w,c.z/c.w,1),$e.push([c.x,c.y,c.z]);return $e}function ef(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=Vt(e,o,i,km(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var qt=[];L();L();function ie(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}L();var Ar=2*Math.PI;L();function aa(e,t,r,o,i){return new g.Point(e.x+t*Math.cos(i*Ar/o),e.y+r*Math.sin(i*Ar/o))}function lt(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++)ie(e,o,t,aa(t,r,i,n,a),aa(t,r,i,n,a+1))}function qo(e,t,r,o,i){let{options:n,width:a,stroke:s,point:f}=e,l=a/2,p=t.distanceTo(r);if(!p)return;let c=r.subtract(t).divideBy(p),u=new g.Point(-c.y*l,c.x*l);n.lineCap==="square"&&(o&&(t=t.subtract(c.multiplyBy(l))),i&&(r=r.add(c.multiplyBy(l)))),ie(f,s,t.add(u),t.subtract(u),r.add(u)),ie(f,s,r.add(u),t.subtract(u),r.subtract(u)),n.lineCap==="round"&&(o&<(f,t,l,s),i&<(f,r,l,s))}L();function tf(e,t,r,o,i){let{options:n,width:a,point:s,stroke:f}=e,l=t[r],p=a/2;if(n.lineJoin==="round"){lt(s,l,p,f);return}let c=l.subtract(t[(r+t.length-1)%t.length]),u=Math.hypot(c.x,c.y);if(!u||!i)return;let d=c.divideBy(u),h=o.subtract(l).divideBy(i),y=d.x*h.y-d.y*h.x>0?-1:1,x=new g.Point(-d.y*y,d.x*y),v=new g.Point(-h.y*y,h.x*y),M=l.add(x.multiplyBy(p)),_=l.add(v.multiplyBy(p)),B=1+x.x*v.x+x.y*v.y,b=B>0?x.add(v).multiplyBy(p/B):null;ie(s,f,M,l,_),n.lineJoin==="miter"&&b&&Math.hypot(b.x,b.y)<=p*4&&ie(s,f,M,l.add(b),_)}function rf(e,t,r,o,i,n){let a=e.dash,s=0,f,l,p,c;for(;s<o;){for(f=((i+s)%n+n)%n,l=0;f>=a[l];)f-=a[l++];p=Math.min(o,s+a[l]-f),l%2===0&&(c=r.subtract(t).divideBy(o),qo(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function Wo(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,f,l,p,c,u;for(f of n)s+=f;for(l=0;l<t.length-(r?0:1);l++)p=t[l],c=t[(l+1)%t.length],u=p.distanceTo(c),n.length?rf(e,p,c,u,a,s):(qo(e,p,c,!r&&l===0,!r&&l===t.length-2),(r||l>0)&&tf(e,t,l,c,u)),a+=u}function of(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function nf(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,f;for(f=r;f<n;f++)a<i&&(s>=n||e[a].x<=e[s].x)?t[f]=e[a++]:t[f]=e[s++]}function af(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:of(o)});let f=r,l=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)nf(f,l,n,i);a=f,f=l,l=a}for(s=0;s<e.length;s++)e[s]=f[s].ring;return e}function X(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function de(e,t){return e.x===t.x&&e.y===t.y}function sf(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],de(o,i)||Math.abs(X(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 Yo(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 mf(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=sf(t.slice(o,o+=n.length)),Yo(a)!==!!i&&a.reverse(),r.push(a);return r}function Xo(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 ff(e,t){let r;for(r=1;r<t.length;r++)if(Xo(e,t[r]))return!0;return!1}function Dr(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 lf(e,t,r,o){if(de(e,r)||de(e,o)||de(t,r)||de(t,o))return!1;let i=X(e,t,r),n=X(e,t,o),a=X(r,o,e),s=X(r,o,t);return i*n<0&&a*s<0||i===0&&Dr(e,t,r)||n===0&&Dr(e,t,o)||a===0&&Dr(r,o,e)||s===0&&Dr(r,o,t)}function sa(e,t,r){let o;for(o=0;o<r.length;o++)if(lf(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function pf(e,t,r,o){if(sa(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(sa(e,t,o[i]))return!0;return!1}function cf(e,t,r,o){let i=-1,n=-1,a=1/0,s,f,l,p,c;for(s=0;s<t.length;s++)for(f=0;f<e.length;f++)l=t[s],p=e[f],c=(l.x-p.x)**2+(l.y-p.y)**2,!(c>=a)&&(o.x=(l.x+p.x)/2,o.y=(l.y+p.y)/2,!(!Xo(o,r[0])||ff(o,r))&&(pf(l,p,e,r)||(i=s,n=f,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 uf(e,t,r,o){let i;for(i of e)if(!de(i,t)&&!de(i,r)&&!de(i,o)&&X(t,r,i)>=0&&X(r,o,i)>=0&&X(o,t,i)>=0)return!0;return!1}function df(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],!(X(i,n,a)<=1e-10)&&!uf(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(X(...e)>1e-10){let f=[];for(s of e)f.push(s.index);t.push(f)}return t}function ma(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 hf(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=ma(e[n]);let s=ma(e[0])-o;for(a of r)i+=X(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 Wt(e,t=ue){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 f=mf(r,s),l=f[0].slice(),p=af(f.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)l=cf(l,a,f,c);let u=df(l);return hf(f,s,u),u}function fa(e,t,r){let{options:o,fill:i,point:n,map:a}=e,s=[],f,l,p,c;for(f of t){l=[];for(p of f)l.push(a.project(p));s.push(l)}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(c of Wt(u[0],u.slice(1)))ie(n,i,d[c[0]],d[c[1]],d[c[2]])}for(f of s)Wo(e,f,r)}function la(e,t,r){if(!t.length)return;let o;if(t[0]instanceof g.LatLng)fa(e,[t],r);else if(r&&t[0][0]instanceof g.LatLng)fa(e,t,r);else for(o of t)la(e,o,r)}function gf(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}L();L();function We(e,t,r,o,i,n=0){let a=i*Ar/o;return new g.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}function xf(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:f}=t,l=r.project(e.getLatLng()),p=e.getRadius(),c=p,u,d;if(e instanceof g.Circle){e._project();let y=e._point.add(r.getPixelOrigin());l.x=y.x,l.y=y.y,p=e._radius,c=e._radiusY||p}a.fill&<(o,l,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let y=[];for(u=0;u<h;u++)y.push(We(l,p,c,h,u));Wo(t,y,!0)}else if(a.stroke&&f>0)for(d=0;d<h;d++)ie(o,n,We(l,p,c,h,d,f/2),We(l,p,c,h,d,-f/2),We(l,p,c,h,d+1,f/2)),ie(o,n,We(l,p,c,h,d+1,f/2),We(l,p,c,h,d,-f/2),We(l,p,c,h,d+1,-f/2))}function yf(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=gf(n),f={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof g.CircleMarker)xf(e,f);else{let l=e instanceof g.Polygon;la(f,e.getLatLngs(),l)}return{fill:o,stroke:i}}function vf(e,t){return Ht(e,e.map.unproject(t))}function wf(e){return vf(qt[qt.length-1],e)}function Ko(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Jo(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function he(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:Ko(Jo(0,e.h,e.l,n)),g:Ko(Jo(8,e.h,e.l,n)),b:Ko(Jo(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 Mf(e){let{source:t}=e;qt.push(e);let r;try{r=yf(t,e.map,wf)}finally{qt.pop()}let{fill:o,stroke:i}=r,n,a,s,f,l,p,c,u;for(n=0;n<2;n++)a=n?"stroke":"fill",s=n?i:o,f=n?t.options.color:t.options.fillColor||t.options.color,l=n?t.options.opacity:t.options.fillOpacity,s.length&&({r:p,g:c,b:u}=he(f),$o(e,a,s,[p,c,u],l??1))}function _f(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(k(o,i),t.delete(a),n=r.get(a),n&&D(o,n.texture),r.delete(a));for([a,n]of r)n.used||(D(o,n.texture),r.delete(a))}function Qo(e){let{source:t,meshes:r,textures:o}=e;if(!Nt(e)||!m.get(e.backend).renderer||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 g.GridLayer?Xm(e):t instanceof g.ImageOverlay?Km(e):e.marker?ef(e):Mf(e),_f(e)}function Tf(e){try{Qo(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function Ye(e){if(Go(e),m.get(e)._shared!==e||!m.get(e).renderer)return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;ps(e,r),us(e,o),ys(e,o),Q(m.get(e).scene);let i=!1,n,a;for(n of m.get(e)._layers)a=Pt.get(n),a&&(Tf(a),i=!0);let s=w.get(t)._sunlight;_s(e,s,i);let f=m.get(e)._shadowMeshes,l=m.get(e).renderer,p=Fs(e,r),c=l.frameMeshes||=[];c.length=0;let u=Ws(e,p,r,c),d=l.device.createCommandEncoder();tm(e,c,f,s),Pm(e,d,f,s),lm(e,d,c),l.device.queue.writeBuffer(l.uniformBuffer,0,l.uniformData,0,l.uniformSlot*64),l.device.queue.submit((xo[0]=d.finish(),xo)),xo[0]=null;for(n of m.get(e)._layers)m.get(n)._wantedRasterTiles&&(u=Ft(n)||u);(t._animatingZoom||u)&&z(e)}function Lf(){let e=[...Ie];Ie.clear();let t,r;for(r of e)if(m.get(r)._frame=null,!(m.get(r)._shared!==r||!m.get(r).renderer))try{Ye(r)}catch(o){t||=o}if(t)throw t}function z(e){let t=m.get(e)._shared;if(!t)return e;if(t!==e)return z(t),e;if(m.get(e)._frame!=null)return e;let r=Ie.values().next().value;return Ie.add(e),m.get(e)._frame=r?m.get(r)._frame:requestAnimationFrame(Lf),e}L();function ko(e){let{source:t}=e,r=t instanceof g.Marker&&t.options.icon instanceof g.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 re(e=this){e.dirty=!0,e.viewDirty=!0,e.failed=!1,ko(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",Pr),o.removeEventListener("error",br),go(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),ms(o,e),o.addEventListener("load",Pr),o.addEventListener("error",br));m.get(e.backend)._shared&&z(e.backend)}function U(e,t,r){let o=m.get(t)._nativeGPU,n=o.originalMethods.get(e).apply(t,r),a,s;if((e==="bringToFront"||e==="bringToBack")&&t instanceof g.GridLayer){let f=e==="bringToFront"?-1/0:1/0;for(a of Object.values(o.map._layers))a===t||!(a instanceof g.GridLayer)||a.getPane()!==t.getPane()||(s=a.options.zIndex||0,f=e==="bringToFront"?Math.max(f,s):Math.min(f,s));let l=e==="bringToFront"?f+1:f-1;Number.isFinite(l)&&t.setZIndex(l)}return e==="bringToFront"&&(o.order=++w.get(o.map)._nativeGPUOrder),e==="bringToBack"&&(o.order=--w.get(o.map)._nativeGPUBack),re(o),n}function Pf(...e){return U("setLatLng",this,e)}function bf(...e){return U("setLatLngs",this,e)}function Bf(...e){return U("addLatLng",this,e)}function Sf(...e){return U("setRadius",this,e)}function Cf(...e){return U("setStyle",this,e)}function Ef(...e){return U("redraw",this,e)}function zf(...e){return U("setIcon",this,e)}function If(...e){return U("setUrl",this,e)}function Af(...e){return U("setBounds",this,e)}function Df(...e){return U("setOpacity",this,e)}function Of(...e){return U("setZIndex",this,e)}function Gf(...e){return U("setZIndexOffset",this,e)}function Rf(...e){return U("bringToFront",this,e)}function Uf(...e){return U("bringToBack",this,e)}var pa={setLatLng:Pf,setLatLngs:bf,addLatLng:Bf,setRadius:Sf,setStyle:Cf,redraw:Ef,setIcon:zf,setUrl:If,setBounds:Af,setOpacity:Df,setZIndex:Of,setZIndexOffset:Gf,bringToFront:Rf,bringToBack:Uf};L();var Yt=Object.freeze({});function ei(e=Yt){return new g.Layer(e)}L();var pt=new WeakMap;var Xe=new WeakMap;function Ff(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,f;for(f=r;f<n;f++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[f]=e[a++]:t[f]=e[s++]}function Nf(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)Ff(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 jf(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,f,l,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],f=e.origin[1],l=e.origin[2],p=n[3]*s+n[7]*f+n[11]*l+n[15],r[0]=(n[0]*s+n[4]*f+n[8]*l+n[12])/p,r[1]=(n[1]*s+n[5]*f+n[9]*l+n[13])/p,r[2]=(n[2]*s+n[6]*f+n[10]*l+n[14])/p,s=e.direction[0],f=e.direction[1],l=e.direction[2],o[0]=n[0]*s+n[4]*f+n[8]*l,o[1]=n[1]*s+n[5]*f+n[9]*l,o[2]=n[2]*s+n[6]*f+n[10]*l;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Zf(e,t,r){e.geometry.bounds||oe(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 $f(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,f=a?.count||n.count,l=s?t%f:t,p=s?Math.floor(t/f)*s.size:0,c=s?.data[p]??0,u=s?.data[p+1]??0,d=s?.data[p+2]??0,h=(a?a.data[l]:l)*n.size,y=(a?a.data[l+1]:l+1)*n.size,x=(a?a.data[l+2]:l+2)*n.size;r[0]=n.data[h],r[1]=n.data[h+1],r[2]=n.data[h+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[x],i[1]=n.data[x+1],i[2]=n.data[x+2],s&&(r[0]=Math.fround(r[0]+c),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+d),o[0]=Math.fround(o[0]+c),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+d),i[0]=Math.fround(i[0]+c),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+d))}function Vf(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,f=n?n.data[t+1]:t+1,l=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[f*2]*r+a[l*2]*o,c=a[s*2+1]*(1-r-o)+a[f*2+1]*r+a[l*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Hf(e,t,r,o,i,n,a,s){let f=o[0]-r[0],l=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],u=i[1]-r[1],d=i[2]-r[2],h=a[1]*d-a[2]*u,y=a[2]*c-a[0]*d,x=a[0]*u-a[1]*c,v=f*h+l*y+p*x;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(v)<1e-9:v<1e-9)return 1/0;let M=n[0]-r[0],_=n[1]-r[1],B=n[2]-r[2],b=(M*h+_*y+B*x)/v;if(b<0||b>1)return 1/0;let A=_*p-B*l,V=B*f-M*p,Z=M*l-_*f,j=(a[0]*A+a[1]*V+a[2]*Z)/v;return j<0||b+j>1||Vf(e,t,b,j,s)?1/0:(c*A+u*V+d*Z)/v}function qf(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],f=o[2]*i+r[2],l=t.worldMatrix,p=l[3]*a+l[7]*s+l[11]*f+l[15],c=[(l[0]*a+l[4]*s+l[8]*f+l[12])/p,(l[1]*a+l[5]*s+l[9]*f+l[13])/p,(l[2]*a+l[6]*s+l[10]*f+l[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 ti(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],f=[0,0,0],l,p,c,u,d,h,y,x,v;for(l of t)if(jf(e,l,s,f),!!Zf(l,s,f)){for({position:p,index:c,instanceOffset:u}=l.geometry.attributes,d=c?.count||p.count,h=1/0,y=void 0,x=0;x<d*(u?.count??1);x+=3)$f(l,x,i,n,a),v=Hf(l,x,i,n,a,s,f,r),v>0&&v<h&&(h=v,y=x/3);y!==void 0&&o.push(qf(e,l,s,f,h,y))}return Nf(o)}function Ae(e,t,r){if(t(e,r))return;let o;for(o of e.children)Ae(o,t,r)}function ri(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Wf(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],f=e[i],l=t[i]-t[i-1]||1,p=(r-t[i-1])/l;return o||={},o.x=s[0]+(f[0]-s[0])*p,o.y=(s[2]??0)+((f[2]??0)-(s[2]??0))*p,o.z=s[1]+(f[1]-s[1])*p,o.dx=(f[0]-s[0])/l,o.dz=(f[1]-s[1])/l,o}function oi(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 a=Wf(r,o,n);return a.x-=a.dz*e.side,a.z+=a.dx*e.side,a}function Yf(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,l,p,c,u,d,h,y;for(o=0;o<e.trips.length;o++)for(i=e.trips[o],{x:n,y:a,z:s,dx:f,dz:l}=oi(e,i),p=0,c=o*e.stride;p<e.stride;p+=3,c+=3)u=e.template.position[p],d=e.template.position[p+2],h=e.template.normal[p],y=e.template.normal[p+2],t.data[c]=n-u*l-d*f,t.data[c+1]=a+e.template.position[p+1],t.data[c+2]=s+u*f-d*l,r.data[c]=-h*l-y*f,r.data[c+1]=e.template.normal[p+1],r.data[c+2]=h*f-y*l}function Xf(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 ii(e,t,r=m.get(e).root.children,o=!0){if(!m.get(e).renderer)return[];let i=Xe.get(e);i&&Yf(i);let n=e._map.getContainer().getBoundingClientRect();Q(m.get(e).scene),Bt(m.get(e).camera);let a=m.get(e).raycaster.inverse,s=m.get(e).camera.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 f=(t.clientX-n.left)/n.width*2-1,l=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*f+a.m21*l+a.m41,c=a.m12*f+a.m22*l+a.m42,u=a.m13*f+a.m23*l+a.m43,d=a.m14*f+a.m24*l+a.m44,h;Xf(a),m.get(e).raycaster.origin[0]=m.get(e).camera.position[0],m.get(e).raycaster.origin[1]=m.get(e).camera.position[1],m.get(e).raycaster.origin[2]=m.get(e).camera.position[2],m.get(e).raycaster.direction[0]=p/d-m.get(e).raycaster.origin[0],m.get(e).raycaster.direction[1]=c/d-m.get(e).raycaster.origin[1],m.get(e).raycaster.direction[2]=u/d-m.get(e).raycaster.origin[2];let y=m.get(e).raycaster.direction,x=Math.hypot(y[0],y[1],y[2])||1;m.get(e).raycaster.direction[0]/=x,m.get(e).raycaster.direction[1]/=x,m.get(e).raycaster.direction[2]/=x;let v=m.get(e).raycaster.meshes;v.length=0;for(h of r)o?Ae(h,ri,v):h.geometry&&h.visible&&h._appearance!==0&&v.push(h);return ti(m.get(e).raycaster,v,m.get(e).renderer.uniformData?.[55])}function Kf(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var $=new WeakMap;var Jf=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function Qf(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function kf(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof g.Marker||n.options.interactive===!1||!(n instanceof g.Path)&&!n.options.interactive)&&o.push(...ii(a,t,i.meshes.values(),!1));return o.sort(Qf),o[0]?.object._nativeSource||null}function ni(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 el(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)&&ni(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function ca(e,t=e.type,r){let o=this,i=pt.get(o),n=i.fireDOMEvent,a=$.get(o);if(!m.get(a)?.renderer||r||!Jf.has(t))return n.call(this,e,t,r);if(el(o,i,e,t))return n.call(this,e,t,r);let s=kf(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&ni(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function tl(e){let{map:t}=e,r=pt.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=g.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=ca,r.restore=Kf,pt.set(t,r),t._fireDOMEvent=ca}r.states.add(e),e._nativeEventContext=r}function rl(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(),pt.delete(r))}function Xt(){re(this)}I();function ai(){this.viewDirty=!0,m.get(this.backend)._shared&&z(this.backend)}function Or(){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",Xt,e),r.off("zoomend",Xt,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",ai,e),rl(e);let f,l,p,c,u;for([f,l]of e.methods)l.own?Object.defineProperty(t,f,l.own):delete t[f];for(p of i.values())k(o,p);i.clear();for(c of n.values())D(o,c.texture);n.clear();for(u of a)u.removeEventListener("load",Pr),u.removeEventListener("error",br),go(u,e);Pt.delete(o),o.remove()}function ol(){this.ready.resolve()}function il({error:e}){this.ready.reject(e)}function nl({error:e}){this.source.fire("error",{error:e})}async function al(e){let{source:t,map:r}=e,o=e.backend=ei({source:{type:"3d"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.originalMethods=new Map,e.images=new Set,w.get(r)._nativeGPUOrder||=0,w.get(r)._nativeGPUBack||=0,e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=++w.get(r)._nativeGPUOrder,e.marker=t instanceof g.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Xt,e),r.on("zoomend",Xt,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",ai,e),tl(e);let n,a,s;for(n in pa)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]=pa[n]);let f=e.ready=Promise.withResolvers();o.once("ready",ol,e),o.once("error",il,e),o.on("error",nl,e),re(e),o.addTo(r);try{await f.promise}catch(l){throw Or.call(e),l}if(!Nt(e))return t;Pt.set(o,e);try{Qo(e)}catch(l){throw Or.call(e),l}return z(e.backend),t}function sl(e){m.get(e.source)._nativeGPU===e&&(m.get(e.source)._nativeGPU=null),e.backend&&Or.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function ml(e){return m.get(e.source)._nativeGPU!==e?e.source:al(e)}function si(e,t){e.fire("error",{error:t})}function mi(e,t){if(m.get(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=m.get(e)._nativeGPU={source:e,map:t,hidden:new Set};ko(r),e.once("remove",sl.bind(null,r)),m.get(e).ready=Promise.resolve().then(ml.bind(null,r)),m.get(e).ready.catch(si.bind(null,e))}var fi=[1,0,1,0];L();function H(e){return new g.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}N();G();F();function li(e,t){let r=S(e)*P,o=E(e)*P;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function ne(e,t,r=!1,o=!1){let i=e.getSize(),n=i.x/2,a=i.y/2,s=i.y*1.5,f=H(t);if(!s)return f;let[l,p,c,u]=li(e,fi),d=f.x-n,h=f.y-a;if(r){let M=i.y*e.options.pitchMaxDistance,_=c*s+u*h,B=_*c>0?h*s/_:-M;o&&(B=Math.max(-M,Math.min(M,B)));let b=d*(s-u*B)/s;return f.x=l*b+p*B+n,f.y=-p*b+l*B+a,f}let y=l*d-p*h,x=p*d+l*h,v=s/(s-u*x);return f.x=y*v+n,f.y=c*x*v+a,f}function fl(e){return ne(this,He(this,O.value.layerPointToContainerPoint.call(this,e)))}function ll(e){return O.value.containerPointToLayerPoint.call(this,He(this,ne(this,e,!0),!0))}function pl(){return O.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function cl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ne(this,r.subtract(H(e)),!0));return O.value.panBy.call(this,o,t)}L();F();G();function ul(e,t,r){if(!E(this)&&!S(this))return O.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof g.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})}var _e=Object.freeze([0,0]);F();G();function dl(e,t={}){if(!E(this)&&!S(this))return O.value.panInside.call(this,e,t);let r=H(t.paddingTopLeft||t.padding||_e),o=this.getSize().subtract(H(t.paddingBottomRight||t.padding||_e)),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)}L();F();G();L();function Kt(e,t=_e){let r=H(t).divideBy(2),o=e.getSize().subtract(r),i=new g.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(ne(e,r,!0,!0));return i}function hl(e,t,r){if(!r||!this._loaded||!E(this)&&!S(this))return O.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=Kt(this),n=this.project(e,t),a=new g.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)}F();G();function gl(e,t){if(!t||!E(this)&&!S(this))return O.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ne(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(ne(this,r.subtract(n.subtract(i))))}F();G();L();pi();function ua(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 ci(e,t,r=Jt){t=t.getBounds?t.getBounds():t instanceof g.LatLngBounds?t:new g.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=H(r.paddingTopLeft||r.padding||_e).subtract(i),s=i.subtract(H(r.paddingBottomRight||r.padding||_e)),[f,l,p,c]=li(e,fi);if(p<0){let tx=a.y;a.y=-s.y,s.y=-tx}let u=e.getSize().y*e.options.pitchMaxDistance,d=ua(a.y,Math.abs(p),n,c,u),h=ua(s.y,Math.abs(p),n,c,u),y=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),x=1/0,v=-1/0,M=a.x*c/n,_=s.x*c/n,B=_-M,b=1/0,A=-1/0,V=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],Z,j,J,ye,$e;for(Z=0;Z<4;Z++)j=V[Z],J=e.project(j,o).subtract(y),ye=f*J.x-l*J.y,$e=l*J.x+f*J.y,x=Math.min(x,$e),v=Math.max(v,$e),b=Math.min(b,ye+M*$e),A=Math.max(A,ye+_*$e);let no=Math.min((h-d)/(v-x),(s.x-a.x-B*d)/(A-b-B*x)),pe=e.getScaleZoom(no,o),at=e.options.zoomSnap;if(at&&(pe=Math.floor(Math.round(pe/(at/100))/100)*at),pe=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,pe)),!Number.isFinite(pe))return{center:t.getCenter(),zoom:pe};let ze=e.getZoomScale(pe,o),Lr=v*ze-h,as=x*ze-d,ex=Math.max(Lr,B?(ze*(A-b)-s.x+a.x)/B:Lr),qn=(Math.min(as,ex)+as)/2,ss=(ze*(b+A)-a.x-s.x-(M+_)*qn)/2;return y.x+=(f*ss+l*qn)/ze,y.y+=(-l*ss+f*qn)/ze,{center:e.unproject(y,o),zoom:pe}}function xl(e,t){return E(this)||S(this)?ci(this,e,t):O.value._getBoundsCenterZoom.call(this,e,t)}L();F();G();function yl(e,t,r){if(!E(this)&&!S(this))return O.value.getBoundsZoom.call(this,e,t,r);if(!t)return ci(this,e,{padding:H(r||_e).divideBy(2)}).zoom;e=e instanceof g.LatLngBounds?e:new g.LatLngBounds(e);let o=Kt(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 vl(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:(O.value.panBy.call(this,r,t),!0)}L();F();G();function wl(){if(!E(this)&&!S(this))return O.value.getBounds.call(this);let e=Kt(this),t=new g.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=O.value.containerPointToLayerPoint.call(this,He(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}I();Ke();da();function Ml(){this.options.maxBounds&&this._panInsideMaxBounds()}I();gi();I();F();G();function xi(){let e=this,t=w.get(e)._cameraDraggable;if(!E(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ne(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function _l(){Qt(this),w.get(this)._pitchSky?.remove(),w.get(this)._cameraDraggable&&(w.get(this)._cameraDraggable.off("predrag",xi,this),delete w.get(this)._cameraDraggable)}I();function Tl(){let e=this.dragging?._draggable;e&&(w.get(this)._cameraDraggable=e,e.on("predrag",xi,this))}async function Ep(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Cp(),Sp));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function ge(){}function zp(){if(w.set(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)}ee(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ui),this.on("rotate pitch",Ml,this),this.once("unload",_l,this),this.whenReady(Tl,this),(this.options.rotate||this.options.trackContainerMutation)&&(w.get(this).cameraReady=Ep(this),w.get(this).cameraReady.catch(ge))}L();function Ip(e){e instanceof g.DivIcon||(e.options.crossOrigin||=!0);let t=se.value.setIcon.call(this,e);return this._map&&!(e instanceof g.DivIcon)&&mi(this,this._map),t}function Ap(){let e=se.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function ir(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Dp(e){se.value._setPos.call(this,ir(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=Ho(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 Pe(e=this){let t=m.get(e)?._nativeGPU;t?.backend&&!t.disposed&&re(t)}function Op(e){se.value._updateZIndex.call(this,e);let t=m.get(this)._cameraZIndexOffset!==e;m.get(this)._cameraZIndexOffset=e,t&&Pe(this)}var gt=new WeakMap;L();function Gp(e){let t=this._marker._map,r=g.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);g.DomUtil.setPosition(this._marker._icon,o),gt.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();F();G();var Fr=new Map;var nr={value:null};function Rp(){nr.value=null;let e=[...Fr];Fr.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Up(e,t){Fr.set(e,t),nr.value===null&&(nr.value=requestAnimationFrame(Rp)),e._panRequest=nr.value}function Fp(e){let t=this._marker,r=t._map;if(!E(r)&&!S(r))return gt.get(this)._cameraOriginalAdjustPan.call(this,e);let o=g.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=H(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 f=r._getMapPanePos();r.panBy(s,{animate:!1});let l=f.subtract(r._getMapPanePos());this._draggable._newPos._add(l),this._draggable._startPos._add(l),g.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Up(this,e)}function Np(){if(!this.dragging||gt.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;gt.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Gp,e._adjustPan=Fp,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function jp(){let e=se.value._initInteraction.call(this);return Np.call(this),e}function Zp(){let e=mo.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function $p(){let e=fo.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}F();G();function Vp(){let e=this._map;if(!E(e)&&!S(e))return po.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=H(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(H(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,l=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,f-i.y);if(!l&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=l,c.y-=p;let u=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(u)))}L();function Hp(){if(lo.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ir(this._map,e).subtract(e);this._zoomAnimated?g.DomUtil.setPosition(this._container,g.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function qp(e){co.value.call(this,e);let t=ir(this._map,e).subtract(e);g.DomUtil.setPosition(this._container,g.DomUtil.getPosition(this._container).add(t))}L();function Wp(){let e=ho.value.call(this);return e.rotate=e.pitch=g.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();G();F();function Yp(e){if(!S(this._map)&&!E(this._map))return uo.value.call(this,e);let t=this._map.getBounds();return new g.Bounds(this._map.project(t.getNorthWest(),this._tileZoom),this._map.project(t.getSouthEast(),this._tileZoom))}O.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Map.prototype));g.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});g.Map.include({layerPointToContainerPoint:fl,containerPointToLayerPoint:ll,_getCenterLayerPoint:pl,panBy:cl,setZoomAround:ul,panInside:dl,_limitCenter:hl,_limitOffset:gl,_getBoundsCenterZoom:xl,getBoundsZoom:yl,_tryAnimatedPan:vl,getBounds:wl});g.Map.addInitHook(zp);se.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Marker.prototype));g.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});g.Marker.include({setIcon:Ip,getEvents:Ap,_setPos:Dp,_updateZIndex:Op,_initInteraction:jp});mo.value=g.Popup.prototype.getEvents;g.Popup.include({getEvents:Zp});fo.value=g.Tooltip.prototype.getEvents;g.Tooltip.include({getEvents:$p});lo.value=g.Popup.prototype._updatePosition;po.value=g.Popup.prototype._adjustPan;g.Popup.include({_adjustPan:Vp,_updatePosition:Hp});co.value=g.Tooltip.prototype._setPosition;g.Tooltip.include({_setPosition:qp});uo.value=g.GridLayer.prototype._getTiledPixelBounds;ho.value=g.GridLayer.prototype.getEvents;g.GridLayer.include({getEvents:Wp,_getTiledPixelBounds:Yp});L();N();var xt=[{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 Xp(e,t){let r=new Array(xt.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+xt[o].x*t,y:e.y+xt[o].y*t,ground:e.ground,uv:[3,3]};return r}function Kp(e,t,r){let o=he(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,l,p,c,u,d,h,y;for(y=0;y<2;y++)for(a=y?i*2.5:i,s=y?t.top-.25:0,f=y?t.top+.15:t.top,l=Xp(e,a),p=0;p<6;p++)c=l[p],u=l[(p+1)%6],d=xt[p].nx,h=xt[p].nz,r(c,s,u,s,u,f,d,0,h,o),r(c,s,u,f,c,f,d,0,h,o),r(n,f,c,f,u,f,0,1,0,o),r(n,s,u,s,c,s,0,-1,0,o)}function Jp(e,t,r,o,i,n,a,s,f,l){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,f,l,t),e(r,a,i,a,n,a,s,f,l,t))}function Nr(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 Qp(e,t,r){if(!Number.isFinite(t.lightRadius)||t.lightRadius<=0)throw new Error("Invalid light radius");let o=he(t.color),i;for(i=0;i<3;i++)Jp(r,o,Nr(e,-1,-1,i),Nr(e,1,-1,i),Nr(e,1,1,i),Nr(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Zi=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var ar=[{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 jr(e,t){let r=new Array(ar.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+ar[o].x*t,y:e.y+ar[o].y*t,ground:e.ground};return r}function $i(e,t,r,o,i,n,a){let s=jr(e,r),f=jr(e,i),l,p,c,u,d,h,y,x,v;for(l=0;l<8;l++)p=(l+1)%8,c=(r-i)/(n-o),u=Math.hypot(1,c),{nx:d,nz:h}=ar[l],y=c/u,x=d/u,v=h/u,r&&t(s[l],o,s[p],o,f[p],n,x,y,v,a),i&&t(s[l],o,f[p],n,f[l],n,x,y,v,a)}function kp(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 ec(e,t,r){let{top:o,bottom:i=0,trunkRadius:n,crownRadius:a,crownBottom:s,crownShape:f="round"}=t;kp(n,a,s,i,o,f);let l=he(t.trunkColor??7491898),p=he(t.color??5210683);$i(e,r,n,i,n,s+(o-s)*.25,l);let c,u,d,h,y;if(f==="cone"){let x=jr(e,a);for(c=0;c<8;c++)r(e,s,x[c],s,x[(c+1)%8],s,0,-1,0,p);$i(e,r,a,s,0,o,p)}else for(c=1;c<Zi.length;c++)[u,d]=Zi[c-1],[h,y]=Zi[c],$i(e,r,d*a,s+u*(o-s),y*a,s+h*(o-s),p)}function Vi(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of m.get(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)}var tc=new TextDecoder;function rc(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,f;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),f=t,t=r,r=f);return o}var ja=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var Za=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var $a=["minLon","minLat","maxLon","maxLat"];function Hi(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<ja.length;o++)r[ja[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<Za.length;o++)r[Za[o]]=t.getUint8(96+o);for(o=0;o<$a.length;o++)r[$a[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}async function sr(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(m.get(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(m.get(e)._etag&&n!==m.get(e)._etag)throw new Error("PMTiles archive changed; recreate the layer");n&&(m.get(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}function yt(e){return m.has(e)?e.options.archive&&e.options.archive!==e?yt(e.options.archive):m.get(e)._header||=sr(e,0,127).then(Hi):e.getHeader()}var oc={bytes:null,cursor:0};function mr(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 ic(e){let t=oc,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=mr(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,f;for(a=0;a<o;a++){if(n+=mr(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=mr(t);for(s of i)if(s.length=mr(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],f=mr(t),!f&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=f?f-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 fr(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 nc(e,t,r,o){return ic(await fr(await sr(e,t,r),o))}async function ac(e,t,r,o){let i=m.get(e)._directories,n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,nc(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 sc(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 mc(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 fr(await sr(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function fc(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,f=-1,l,p,c,u;for(l=0;l<4;l++){if(i===a||i===s||i===f)throw new Error("Cyclic PMTiles directory");if(l===0?a=i:l===1?s=i:l===2&&(f=i),p=await ac(e,i,n,t.internalCompression),o?.throwIfAborted(),c=sc(p,r),!c)return;if(c.runLength)return u=await mc(e,t,c,r,o),u;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 vt(e,t,r,o,i){if(!m.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return vt(e.options.archive,t,r,o,i);let n=rc(t,r,o);i?.throwIfAborted();let a=await yt(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return fc(e,a,n,i)}async function lc(e,t){if(m.get(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=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 vt(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(tc.decode(r.data)):{type:"FeatureCollection",features:[]}}I();L();L();I();function pc(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,f=new g.LatLng(r,t),l=i.project(f),p=w.get(s)._terrain3D?Y(w.get(s)._terrain3D,f):void 0;return{x:(l.x-n.x)*a,y:(l.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(m.get(o).root.position[1])?p-m.get(o).root.position[1]:0}}var lr=[];function qi(e){return e.ground||0}function wt(e,t,r,o,i,n,a,s,f,l,p){let{backend:c,positions:u,normals:d,colors:h,uvs:y}=e,x=o.x-t.x,v=i-r,M=t.y-o.y,_=n.x-t.x,B=a-r,b=t.y-n.y;if((v*b-M*B)*s+(M*_-x*b)*f+(x*B-v*_)*l<0){let A=o,V=i;o=n,i=a,n=A,a=V}u.push(t.x,r+qi(t),-t.y,o.x,i+qi(o),-o.y,n.x,a+qi(n),-n.y),d.push(s,f,l,s,f,l,s,f,l),h.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 cc(...e){wt(lr[lr.length-1],...e)}function Wi(e,t,r,o){lr.push(e);try{t(r,o,cc)}finally{lr.pop()}}function uc(e,t,r,o,i,n){let{backend:a}=e,{top:s}=i,f=pc(e,r,o);if(a.options.nightLight){if(!Number.isFinite(i.lightFlux)||i.lightFlux<=0)throw new Error("Invalid light flux");let l=t.properties?.cod_ouvrag||`${r},${o}`;i.poleRadius>0&&!e.supports.has(l)&&(Wi(e,Kp,f,i),e.supports.add(l)),Wi(e,Qp,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 Wi(e,ec,f,i)}L();I();function dc(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,l,p,c,u,d;for(f=0;f<t.length-1;f++){if(l=t[f][0],p=t[f][1],!Number.isFinite(l)||!Number.isFinite(p))throw new Error("Invalid GeoJSON coordinates");c=new g.LatLng(p,l),u=o.project(c),d=w.get(a)._terrain3D?Y(w.get(a)._terrain3D,c):void 0,s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(d)&&Number.isFinite(m.get(r).root.position[1])?d-m.get(r).root.position[1]:0})}return s}function Va(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a,s,f,l,p,c,u,d,h,y,x,v;for(a of t)n.push(dc(e,a));let M=[];for(s of n)for(f of s)M.push(f);for([l,p,c]of Wt(n[0],n.slice(1)))wt(e,M[l],r,M[p],r,M[c],r,0,1,0,i),o>0&&wt(e,M[l],o,M[p],o,M[c],o,0,-1,0,i);for(u=0;u<n.length;u++)for(s=n[u],d=Yo(s)===(u===0)?-1:1,h=0;h<s.length;h++)l=s[h],p=s[(h+1)%s.length],y=Math.hypot(p.x-l.x,p.y-l.y),y&&(x=d*(p.y-l.y)/y,v=d*(p.x-l.x)/y,wt(e,l,o,p,o,p,r,x,0,v,i),wt(e,l,o,p,r,l,r,x,0,v,i))}function hc(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 gc(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 xc(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=hc(t,r.options.nightLight),s=t.geometry,f=s.type==="Point",l=a[0],p=a[1];if(n){let _=i.project(new g.LatLng(p,l),n.z);if(Math.floor(_.x/256)!==n.x||Math.floor(_.y/256)!==n.y)return}let c=gc(r,t);if(c===null){e.skipped++;return}let{top:u,bottom:d=0,color:h=14267276}=c,y=he(h),x=e.positions.length/3;f&&uc(e,t,l,p,c,y);let v;if(s.type==="Polygon")Va(e,s.coordinates,u,d,y);else if(s.type==="MultiPolygon")for(v of s.coordinates)Va(e,v,u,d,y);let M=e.positions.length/3;e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:y,faceStart:x/3,faceEnd:M/3,vertexStart:x,vertexEnd:M})}function yc(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]),f=Math.trunc(t[1]),l=Math.trunc(t[2]),p=new Float32Array(a),c,u,d,h;for(c=0;c<a;c++)p[c]=t[c]-(c%3===0?s:c%3===1?f:l);let y=new Float32Array(i.length*4);for(u=0;u<i.length;u++){if(d=i[u],h=u*a,d.vertexStart!==u*n||d.vertexEnd!==(u+1)*n)return e;for(y[u*4]=s+t[h]-t[0],y[u*4+1]=f+t[h+1]-t[1],y[u*4+2]=l+t[h+2]-t[2],y[u*4+3]=u*n,c=0;c<a;c++)if(Math.fround(p[c]+y[u*4+c%3])!==Math.fround(t[h+c])||Math.fround(r[c])!==Math.fround(r[h+c])||Math.fround(o[c])!==Math.fround(o[h+c]))return e}return{positions:p,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:y}}function vc(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=m.get(t).renderer.device,i=yc(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 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 f={device:o,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...K(),device:o,geometry:f,program:le(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:Me.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,R(r.mesh,m.get(t).root),z(t)}N();function wc(e,t,r){let o=r.options.crs,i=o.project(m.get(e).location);return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(m.get(e).location.lat*P),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}async function Mc(e,t,r){let o;try{if(await new Promise(requestAnimationFrame),await m.get(w.get(r)._terrain3D)?._terrainPromise,t.request.signal.aborted)return;let i=await lc(e,t);if(t.request.signal.aborted)return;if(i?.type!=="FeatureCollection"||!Array.isArray(i.features))throw new Error("Invalid GeoJSON response");if(m.get(e)._geojson&&typeof e.options.style!="function")throw new Error("style must be a function");let n=wc(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}xc(n,o)}vc(n)}catch(i){t.request.signal.aborted||(t.error=i.message,e.fire("error",{error:i}))}finally{m.get(e)._inflight--,Zr(e,r)}}function Yi(e,t){return e.distance-t.distance}function _c(e,t){let r=[],o,i,n;for(o of e)for(i of m.get(o)._areas.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(Yi),r}function Zr(e,t=e._map){let r=t&&$.get(t);if(!r)return;let o=[],i,n,a;for(i of m.get(r)._layers)Number.isFinite(m.get(i)._inflight)&&m.get(i)._areas&&(m.get(i).url||m.get(i)._geojson)&&o.push(i);let s=_c(o,t),f=0;for(i of o)f+=m.get(i)._inflight;for({layer:a,area:n}of s){if(f>=4)break;m.get(a)._inflight>=2||(n.started=!0,m.get(a)._inflight++,f++,Mc(a,n,t))}for(i of o)Vi(i)}function be(e,t){t?.model&&(t=null),!(m.get(e).highlightedFeature?.mesh===t?.mesh&&m.get(e).highlightedFeature?.vertexStart===t?.vertexStart)&&(m.get(e).highlightedFeature&&(m.get(e).highlightedFeature.mesh.highlight=null),m.get(e).highlightedFeature=t,t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),z(e))}function Be(e,t,r){let o=m.get(e)._tooltip;if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=m.get(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=m.get(e)._shared,n;if(i){let a=!1;for(n of m.get(i)._layers)if(m.get(n)._tooltip&&!m.get(n)._tooltip.hidden){a=!0;break}a?(m.get(i)._cursor===void 0&&(m.get(i)._cursor=m.get(e).container.style.cursor),m.get(e).container.style.cursor="pointer"):m.get(i)._cursor!==void 0&&(m.get(e).container.style.cursor=m.get(i)._cursor,delete m.get(i)._cursor)}}function Mt(e,t){t.request.abort();let r;if(t.mesh){m.get(e).highlightedFeature?.mesh===t.mesh&&(be(e,null),m.get(e).hoveredFeature=null,Be(e,null)),R(t.mesh,null),z(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Tc(e,t){return e.distance-t.distance}function _t(e){if(!e._map||!m.get(e)._shared)return;if(m.get(e)._geojson){m.get(e)._areas.has("geojson")||m.get(e)._areas.set("geojson",{request:new AbortController}),Zr(e);return}if(!m.get(e).header)return;let t=m.get(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([m.get(e).header.maxLat,m.get(e).header.minLon],t).divideBy(256).floor(),s=e._map.project([m.get(e).header.minLat,m.get(e).header.maxLon],t).divideBy(256).floor(),f=new Map,l,p,c,u,d;for(l=Math.max(0,i.x-1,a.x);l<=Math.min(2**t-1,n.x+1,s.x);l++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)f.set(`${l}/${p}`,{z:t,x:l,y:p});for([c,u]of m.get(e)._areas)f.has(c)||(Mt(e,u),m.get(e)._areas.delete(c));let h=[];for([c,d]of f)d.distance=Math.hypot(d.x+.5-r.x,d.y+.5-r.y)/2**t,h.push(d);h.sort(Tc);for(d of h)c=`${d.x}/${d.y}`,m.get(e)._areas.has(c)||m.get(e)._areas.set(c,{coords:d,request:new AbortController});Zr(e)}I();function pr(e){if(!m.get(e).root||!m.get(e).location)return;m.get(e)._terrainBaseY??=m.get(e).root.position[1];let t=w.get(e._map)?._terrain3D,r=t&&Y(t,m.get(e).location),o=Number.isFinite(r)?e.options.terrainOffset??0:0;m.get(e).root.position[1]=m.get(e)._terrainBaseY+(r??0)+o}function Lc(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 Pc(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 bc(e,t){let r=m.get(t)._shared,o;if(e.geometry&&e.geometry.device!==m.get(r).renderer.device){let i=e.geometry,n=e.program._layerMaterial,a=m.get(r).renderer.device;Lc(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Pc(n,a),e.program.pipelineCache.clear(),e.program=le(t,n),e.device=a}e.texture&&e.texture.device!==m.get(r).renderer.device&&(o=e.texture,o.device=m.get(r).renderer.device,o.texture=m.get(r).renderer.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=m.get(r).renderer.device.createSampler(o.samplerOptions),o.uploaded=null)}var cr=new WeakMap;function Bc(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 tt(e,t,r){throw Bc(r),m.get(t)._rendererReady.reject(e),$.delete(r),e}async function Sc(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){tt(o,e,t)}return r||tt(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function Cc(e,t,r){try{return await e.requestDevice()}catch(o){tt(o,t,r)}}function Ec(e){let t=cr.get(e.currentTarget),r=$.get(t);if(m.get(r)?.renderer?.device!==e.currentTarget||!m.get(r)._layers)return;let o;for(o of m.get(r)._layers)o.fire("error",{error:e.error})}function zc([e,t]){let r=cr.get(t),o=$.get(r);if(!o||m.get(o).renderer?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of m.get(o)._layers)n.fire("error",{error:i})}function Ic(){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 ur=new Float32Array(20);ur[0]=ur[5]=ur[10]=ur[15]=1;function Ac(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=m.get(e).renderer.device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=m.get(e).renderer.device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=m.get(e).renderer.device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});m.get(e).renderer.sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},m.get(e).renderer.device.queue.writeBuffer(o,0,ur),Oo(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,m.get(e).renderer.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 Xi=[];function Dc(){let e=Xi.shift();m.get(e)._queued=!1,!(m.get(e)._shared!==e||!m.get(e).renderer)&&(e._map._animatingZoom?z(e):Ye(e))}function $r(){let e=this;m.get(e)._queued||(m.get(e)._queued=!0,Xi.push(e),queueMicrotask(Dc))}function Vr(){m.get(this)._zoomLevel=null}var Ki=[];function Oc(){let e=Ki.shift();m.get(e)._shared===e&&m.get(e).renderer&&Ye(e)}function Hr(e){let t=this._map;e&&!m.get(this)._zoomView&&(m.get(this)._zoomView={from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()},t.getContainer().classList.add("leaflet-camera-zoom")),Ki.push(this),queueMicrotask(Oc)}I();function qr(){let e=this,t;if(m.get(e)._zoomTransitions)for(t of m.get(e)._zoomTransitions.keys())t.finish();m.get(e)._zoomTransitions=null,m.get(e)._zoomView=null,delete w.get(e._map)._cameraView,e._map.getContainer().classList.remove("leaflet-camera-zoom"),yo(e._map),m.get(e)._zoomLevel=null,z(e)}function Gc(e,t,r){m.get(e)._size=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",$r,e),t.on("zoomstart",Vr,e),t.on("zoomanim",Hr,e),t.on("zoomend",qr,e)}async function Rc(e,t){let r=document.createElement("canvas");navigator.gpu||tt(new Error("Layer3D requires WebGPU"),e,t);let o=await Sc(e,t),i=await Cc(o,e,t);cr.set(i,t),i.addEventListener("uncapturederror",Ec),Promise.all([i.lost,Promise.resolve(i)]).then(zc);let n=r.getContext("webgpu");n||(i.destroy(),tt(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(),m.get(e)._shared=e,m.get(e)._layers=new Set,m.get(e)._sceneOrigin=m.get(e).location,m.get(e).scene=K(),m.get(e).camera=Ic(),m.get(e).renderer={device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)},Ac(e,i),Gc(e,t,r)}async function dr(e,t){let r=$.get(t);m.get(r)?._rendererReady&&await m.get(r)._rendererReady.promise,r||(r=e,m.get(e)._rendererReady=Promise.withResolvers(),m.get(e)._rendererReady.promise.catch(ge),$.set(t,r),await Rc(e,t),m.get(e)._rendererReady.resolve(),delete m.get(r)._rendererReady,Ye(r),$.set(t,r));let o=t.options.crs.project(m.get(r)._sceneOrigin),i=t.options.crs.project(m.get(e).location),n=Math.cos(m.get(r)._sceneOrigin.lat*P);m.get(e)._terrainBaseY??=m.get(e).root.position[1],m.get(e).root.position[0]=(i.x-o.x)*n,m.get(e).root.position[1]=m.get(e)._terrainBaseY,m.get(e).root.position[2]=-(i.y-o.y)*n,pr(e),m.get(e).root.scale.fill(n/Math.cos(m.get(e).location.lat*P)),m.get(e)._shared=r,m.get(e).renderer=m.get(r).renderer,m.get(e).scene=m.get(r).scene,m.get(e).camera=m.get(r).camera,m.get(r)._layers.add(e),R(m.get(e).root,m.get(r).scene),Ae(m.get(e).root,bc,e),z(r),(m.get(e).header&&m.get(e).kind!=="raster"||m.get(e)._geojson)&&_t(e)}L();function Ji(e,t){if(!m.get(e).root||!m.get(e).camera)return null;let r,o,i,n,a,s,f;for(r of ii(e,t,m.get(e).root.children,!!m.get(e).model)){if(m.get(e).model){for(o=r.object;o&&o!==m.get(e).model;)o=o.parent;if(o===m.get(e).model)return{id:m.get(e).model.id,properties:m.get(e).model.extras,model:m.get(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 Uc(e,t){let r=Ji(e,t);m.get(e).hoveredFeature=r,be(e,r),Be(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Qi(e){m.get(e).hoveredFeature=null,be(e,null),Be(e,null),e.fire("featurehover",{feature:null})}function Nc(e,t){m.get(e).hoveredFeature=Ji(e,t),be(e,m.get(e).hoveredFeature),Be(e,m.get(e).hoveredFeature,t),e.fire("featurehover",{feature:m.get(e).hoveredFeature,originalEvent:t})}function jc(e){Nc(this,e)}function Zc(e){Uc(this,e)}function $c(){Qi(this)}async function Vc(e,t){try{await dr(e,t),m.get(e)._added.resolve()}catch(r){e.fire("error",{error:r})}}function ki(e,t){if(!m.get(e).location){let r=t.getCenter();m.get(e).location=new g.LatLng(r.lat,r.lng)}(m.get(e).url||m.get(e)._geojson||e.options.tooltip||m.get(e).modelUrl)&&(m.get(e).container=t.getContainer(),m.get(e)._pointerEvents||={mousemove:jc,click:Zc,mouseleave:$c},e.options.tooltip&&(m.get(e)._tooltip=g.DomUtil.create("div","leaflet-3d-tooltip",m.get(e).container),m.get(e)._tooltip.hidden=!0,m.get(e)._tooltip.setAttribute("role","tooltip"),m.get(e)._tooltip.setAttribute("aria-live","polite"),m.get(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"),g.DomEvent.on(m.get(e).container,m.get(e)._pointerEvents,e)),m.get(e).root&&Vc(e,t)}L();var Hc=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];I();var qc=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function Wc(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 Yc(e,t){if(m.get(e)._roofRaster&&D(e,m.get(e)._roofRaster.texture.texture),m.get(e)._roofRaster=null,m.get(e)._zoomTransitions){let i;for(i of m.get(e)._zoomTransitions.keys())i.play()}m.get(e)._zoomTransitions=null,m.get(e)._zoomView=null,delete w.get(t)._cameraView,t.getContainer().classList.remove("leaflet-camera-zoom");let r=m.get(e).renderer;r.canvas.remove(),Wc(r,e),$.delete(t);let o;for(o of qc)delete m.get(e)[o]}function hr(e,t){m.get(e)._added=Promise.withResolvers(),m.get(e).container&&(Qi(e),g.DomEvent.off(m.get(e).container,m.get(e)._pointerEvents,e),m.get(e).container=null);let r,o,i;for(r of m.get(e)._areas.values())Mt(e,r);m.get(e)._areas.clear(),m.get(e)._tooltip?.remove(),m.get(e)._tooltip=null,(m.get(e).url||m.get(e)._geojson)&&Vi(e,!1);let n=m.get(e)._shared;if(n){if(R(m.get(e).root,null),m.get(n)._layers.delete(e),n===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",$r,e),t.off("zoomstart",Vr,e),t.off("zoomanim",Hr,e),t.off("zoomend",qr,e),Go(e),m.get(e)._layers.size){let a=m.get(e)._layers.values().next().value;for(o of Hc)m.get(a)[o]=m.get(e)[o],delete m.get(e)[o];for(i of m.get(a)._layers)m.get(i)._shared=a;$.set(t,a),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",$r,a),t.on("zoomstart",Vr,a),t.on("zoomanim",Hr,a),t.on("zoomend",qr,a),z(a)}else Yc(e,t);else z(n);m.get(e)._shared=m.get(e).renderer=m.get(e).scene=m.get(e).camera=null}}function Xc(e){if(!e._map)return;let t;for(t of m.get(e)._areas.values())Mt(e,t);m.get(e)._areas.clear(),_t(e)}I();var Kc=new TextDecoder;function Jc(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 Qc(e){let t=new DataView(e),r=Kc,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||Jc(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}N();L();function en(e,t){let r=new Float32Array(e.length),o,i,n,a,s,f,l,p,c,u,d,h,y,x,v,M;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],f=e[n*3+1]-e[i*3+1],l=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],u=e[a*3+2]-e[i*3+2],h=f*u-l*c,y=l*p-s*u,x=s*c-f*p,d=0;d<3;d++)v=d===0?i:d===1?n:a,r[v*3]+=h,r[v*3+1]+=y,r[v*3+2]+=x;for(o=0;o<r.length;o+=3)for(M=Math.hypot(r[o],r[o+1],r[o+2])||1,d=0;d<3;d++)r[o+d]/=M;return r}function Ha(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Ha(r,t)}function gr(e,t){if(!m.get(e).model)return;let r=[];Ha(m.get(e).model,r);let o,i,n,a,s,f,l,p,c,u,d,h,y,x,v,M,_,B,b,A;if(!m.get(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}Q(m.get(e).root);let V=e._map,Z=V.options.crs,j=Z.project(m.get(m.get(e)._shared)._sceneOrigin),J=Math.cos(m.get(m.get(e)._shared)._sceneOrigin.lat*P),ye=Z.scale(m.get(t)._terrainZoom);for(o of r){for(n=o.geometry,f=n.attributes.position,n._terrainBasePositions||=f.data.slice(),l=n.attributes.normal,n._terrainBaseNormals||=l.data.slice(),f.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),u=0;u<f.data.length;u+=3)d=f.data[u],h=f.data[u+1],y=f.data[u+2],x=p[1]*d+p[5]*h+p[9]*y+p[13],v=Math.max(0,Math.min(1,1-(x-m.get(e).root.position[1])/8)),v&&(M=p[0]*d+p[4]*h+p[8]*y+p[12],_=p[2]*d+p[6]*h+p[10]*y+p[14],B=Z.transformation.transform(new g.Point(j.x+M/J,j.y-_/J),ye),b=Y(t,B),Number.isFinite(b)&&(A=(b-x)*v,f.data[u]+=c[4]*A,f.data[u+1]+=c[5]*A,f.data[u+2]+=c[6]*A));o.device.queue.writeBuffer(f.buffer,0,f.data),l.data.set(en(f.data,n.attributes.index?.data)),o.device.queue.writeBuffer(l.buffer,0,l.data),oe(n)}z(e)}I();async function kc(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 eu={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function tu(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,eu)}async function ru(e,t,r){let o=[],i;for(i of t.buffers||ue)o.push(kc(i,r));await Promise.all(o),await m.get(e)._added.promise;let n=[],a;for(a of t.images||ue)n.push(tu(t,r,a));let s=await Promise.all(n);return await m.get(w.get(e._map)?._terrain3D)?._terrainPromise,s}function ou(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 Wr(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=m.get(o).renderer.device,f=`${t.index}:${r}`;if(!a.has(f)){let l=i.textures[t.index],p=i.samplers?.[l.sampler],c=n[l.source],u=r?"rgba8unorm-srgb":"rgba8unorm",d=ou(p);a.set(f,{device:s,texture:s.createTexture({size:[c.width,c.height],format:u,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(d),samplerOptions:d,format:u,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(f)}function iu(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:Wr(e,o?.baseColorTexture,!0),metalTexture:Wr(e,o?.metallicRoughnessTexture),emissiveTexture:Wr(e,t.emissiveTexture,!0),occlusionTexture:Wr(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 nu(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||ue)o.materials.push(iu(o,i));return o}var au=[0,0,0,1];var su=[1,1,1];var mu=[0,0,0];function fu(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||au,[n,a,s]=e.scale||su;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||mu,1]}var lu=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var tn={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var pu={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function cu(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 rn(e,t,r,o,i,n,a,s,f,l){let p=e.bufferViews[a],c=t.BYTES_PER_ELEMENT,u=e.buffers[p.buffer].binary;if(l||=r*c,!u||l<r*c||s<0||(p.byteOffset||0)+p.byteLength>u.byteLength||(f-1)*l+r*c+s>p.byteLength)throw new Error("glTF accessor outside buffer view");let d=new DataView(u),h,y,x,v;for(h=0;h<f;h++){if(v=n?n[h]:h,n&&v>=i)throw new Error("Invalid sparse glTF index");for(y=0;y<r;y++)x=(p.byteOffset||0)+s+h*l+y*c,o[v*r+y]=cu(d,t,x)}}function uu(e,t,r,o,i){let n=t.sparse,a=tn[n.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=e.bufferViews[n.indices.bufferView],f=(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 l=new a(e.buffers[s.buffer].binary.slice(f,f+n.count*a.BYTES_PER_ELEMENT));rn(e,r,o,i,t.count,l,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function du(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 on(e,t){let r=e.accessors[t],o=tn[r.componentType],i=pu[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&&rn(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&uu(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:du(r,o,n,i)}function hu(e,t){let r={},o,i;for([o,i]of lu)t.attributes[o]!==void 0&&(r[i]=on(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 gu(e,t,r,o){if(t.indices!==void 0){let i=on(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 xu(e,t,r){let o;r.normal||(o=en(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=le(e.backend,i);e.resources.push(n);let a=m.get(e.backend).renderer.device;r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data));let s,f;for([s,f]of Object.entries(r))f.size||=1,f.count=f.data.length/f.size,f.indexFormat=f.data instanceof Uint32Array?"uint32":"uint16",f.buffer=a.createBuffer({size:Math.max(4,f.data.byteLength),usage:s==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),a.queue.writeBuffer(f.buffer,0,f.data);let l={device:a,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(l),{device:a,geometry:l,program:n}}function qa(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={...K(),name:n.name};a.matrix=fu(n);let s,f,l,p,c,u,d;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)f=hu(o,s),l=f.attributes,p=f.vertexCount,gu(o,s,l,p),c=xu(e,s,l),u={...K(),device:c.device,geometry:c.geometry,program:c.program,fadeDuration:250,id:Me.value++,renderOrder:0},u.name=o.meshes[n.mesh].name,u.extras=n.extras||{},R(u,a);for(d of n.children||ue)R(qa(e,d),a);return i.delete(t),a}function yu(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 vu(e,t){let r=[],o;try{for(o of t.nodes)r.push(qa(e,o))}catch(i){throw yu(e),i}return r}function wu(e){let t=m.get(e).model;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 Mu(e){await m.get(e)._added.promise;let t=new URL(m.get(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=Qc(o),n=new URL(".",t).href,a=await ru(e,i,n),s=nu(e,i,a),f=i.scenes?.[i.scene||0];if(!f)throw new Error("Missing glTF scene");let l=vu(s,f),p={...K(),id:t,extras:i.extras||{}};if(!l.length)throw new Error("Expected a glTF model with a non-empty scene");let c;for(c of l)R(c,p);m.get(e).model=p,wu(e),R(m.get(e).model,m.get(e).root),gr(e,w.get(e._map)?._terrain3D)}function _u(e){let t={};return m.get(e).url&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=_t.bind(null,e)),(m.get(e)._geojson||m.get(e).url)&&(t.terrainchange=Xc.bind(null,e)),t}async function Tu(e){try{return m.get(e).root=K(),m.get(e).raycaster={origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]},(m.get(e).url||m.get(e)._geojson)&&(m.get(e).group=m.get(e).root,m.get(e).url&&(m.get(e).header=await yt(e))),e._map&&(await dr(e,e._map),m.get(e)._added.resolve()),m.get(e).modelUrl&&await Mu(e),m.get(e)._shared&&z(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}L();L();function Lu(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-${g.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=g.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 Pu(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===g.Util.stamp(t)||i instanceof g.LayerGroup&&i.hasLayer(t))return Lu(o,t,r),!0;return!1}function nn(e){let t=Pu(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var an=[];function bu(){let e=an.shift();e?.map.hasLayer(e.layer)&&nn(e)}function sn(){an.push(this),queueMicrotask(bu)}function Bu(){this.map.off("layeradd layerremove",sn,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function xr(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",sn,o),e.once("remove",Bu,o),nn(o)}function Su(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${e.modelUrl?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Cu(e,t,r,o){let i=e._countStatus;e.modelUrl&&(t=e.model?1:0);let n=r||(e.modelUrl?!e.model:!e.header&&!e._geojson),a=t.toLocaleString("en-US"),s=o?"Error":`${a}${n?"\u2026":""}`,f=Su(e,a,r,o);i.textContent!==s&&(i.textContent=s),i.title!==f&&(i.title=f),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Wa(e){let t=e.target,r=m.get(t),o=r._countStatus;if(!t._map)return;e.type==="add"&&xr(t,o);let i=0,n=0,a=e.error,s;if(Number.isFinite(e.loaded))i=e.loaded,n=e.pending??0,a||=e.errors?.[0];else for(s of r._areas.values())i+=s.buildings??0,!s.done&&!s.error&&n++,a||=s.error;Cu(r,i,n,a)}function Se(e,t=Yt){m.get(e)._3d=!0,g.Util.setOptions(e,{ariaLabel:"3D scene",...t}),m.get(e).kind="3d";let r=!m.get(e)._geojson&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(m.get(e).modelUrl=r?e.options.url:null,m.get(e).url=e.options.url&&!r&&!m.get(e)._geojson?new URL(e.options.url,document.baseURI).href:null,m.get(e)._directories=new Map,e.options.center&&(m.get(e).location=new g.LatLng(e.options.center[0],e.options.center[1])),m.get(e)._areas=new Map,m.get(e)._inflight=0,m.get(e).url||m.get(e)._geojson||r){let o=g.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",m.get(e)._countStatus=o,e.on("add error",Wa),e.on("ready progress",g.Util.throttle(Wa,250,e))}m.get(e)._added=Promise.withResolvers(),m.get(e).ready=Promise.resolve().then(Tu.bind(null,e)),m.get(e).ready.catch(ge)}L();var Eu=new Map;var zu=new Map;function Iu(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var Yr=[null];N();I();var mn={x:0,y:0};var Xr={size:[null,null],format:"r32float",usage:null};var fn={texture:null};var Ya={bytesPerRow:null};var ln=[null,null];function Au(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 Du(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,f,l,p,c;for([a,s]of e)f=a.split("/"),l=Number(f[0]),p=Number(f[1]),c=(p-t.min.y)*256*r*256+(l-t.min.x)*256,Au(n,s,c,r);return n}function Ou(e,t){let r=m.get(e),o=r.renderer.device;if(r._rasterProgram?.device===o)return r._rasterProgram;let i=r._terrainBounds,n=i.max.x-i.min.x+1,a=i.max.y-i.min.y+1,{elevations:s,low:f,high:l}=Du(r._terrainTiles,i);return r._dem&&D(e,r._dem.texture),r._dem={texture:o.createTexture((Xr.size[0]=n*256,Xr.size[1]=a*256,Xr.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Xr)),low:Number.isFinite(f)?f:r._terrainOriginElevation,high:Number.isFinite(l)?l:r._terrainOriginElevation},o.queue.writeTexture((fn.texture=r._dem.texture,fn),s,(Ya.bytesPerRow=n*1024,Ya),(ln[0]=n*256,ln[1]=a*256,ln)),fn.texture=null,r._terrainGrids=new Map,r._rasterProgram=le(e,{baseTexture:t,unlit:!0,terrain:r._dem,alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided}),r._rasterProgram}var pn={size:null,usage:null};function Gu(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,f,l,p,c,u=0,d=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[u*3]=s/e,r[u*3+2]=a/e,o[u*3+1]=1,i[u*2]=s/e,i[u*2+1]=a/e,u++,a<e&&s<e&&(f=a*(e+1)+s,l=f+1,p=f+e+1,c=p+1,n[d++]=f,n[d++]=p,n[d++]=l,n[d++]=l,n[d++]=p,n[d++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function Ru(e,t){let r=m.get(e),o=r.renderer.device,i=r._terrainGrids.get(t);if(!i){i=Gu(t);let n,a;for([n,a]of Object.entries(i))a.size||=1,a.count=a.data.length/a.size,a.indexFormat="uint16",a.buffer=o.createBuffer((pn.size=Math.max(4,a.data.byteLength),pn.usage=n==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,pn)),o.queue.writeBuffer(a.buffer,0,a.data);r._terrainGrids.set(t,i)}return i}function Uu(e,t,r,o){let i=m.get(e),n=i._terrainOriginElevation,a=Math.min(i._dem.low,n)-n,s=Math.max(i._dem.high,n)-n;return{device:i.renderer.device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,a,0],max:[1,s,1],center:[.5,(a+s)/2,.5],radius:Math.hypot(r,s-a,o)/2/Math.max(r,1,o)}}}async function Fu(e,t,r,o){if(!await m.get(e)._terrainPromise||!e._map||w.get(e._map)._terrain3D!==e||m.get(t)._terrain3D!==e||o.request.signal.aborted||!m.get(t)._rasterTiles.has(`${r.z}/${r.x}/${r.y}`)||m.get(e)._rasterTiles.has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-m.get(e)._terrainZoom))),a=e._map,s=a.options.crs,f=s.project(m.get(e).location),l=Math.cos(m.get(e).location.lat*P),p=s.scale(r.z),c=2**(m.get(e)._terrainZoom-r.z),u=mn;u.x=r.x*256,u.y=r.y*256;let d=s.transformation.untransform(u,p);u.x=(r.x+1)*256,u.y=(r.y+1)*256;let h=s.transformation.untransform(u,p),y=m.get(e).renderer.device,x=o.texture,v=Ou(e,x),M=Ru(e,n),_=m.get(e)._terrainOriginElevation,B=(h.x-d.x)*l,b=-(h.y-d.y)*l,A=Uu(e,M,B,b),V={position:[(d.x-f.x)*l,0,-(d.y-f.y)*l],rotation:[0,0,0],scale:[B,1,b],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:A,program:v,texture:x,terrain:[r.x*256*c-m.get(e)._terrainBounds.min.x*256,r.y*256*c-m.get(e)._terrainBounds.min.y*256,256*c,_],tile:o,opacity:t.options.opacity??1,id:Me.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,R(V,m.get(e).root),z(e),m.get(e)._rasterTiles.set(o,V)}async function cn(e,t,r){if(m.get(e)._terrain3D&&r.done&&!r.request.signal.aborted&&m.get(e)._rasterTiles.get(`${t.z}/${t.x}/${t.y}`)===r)try{await Fu(m.get(e)._terrain3D,e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}N();var Kr={size:[null,null],format:"rgba8unorm",usage:null};var Nu={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var un={size:null,usage:null};var ju=[0,0,0,1,0,0,0,0,1,1,0,1];var Zu=[0,1,0,0,1,0,0,1,0,0,1,0];var $u=[0,0,1,0,0,1,1,1];var Vu=[0,2,1,1,2,3];function Hu(e){let t={position:{size:3,data:new Float32Array(ju)},normal:{size:3,data:new Float32Array(Zu)},uv:{size:2,data:new Float32Array($u)},index:{data:new Uint16Array(Vu)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((un.size=o.data.byteLength,un.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,un)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function qu(e,t){let r=m.get(e).renderer.device,o={device:r,texture:r.createTexture((Kr.size[0]=t.image.width,Kr.size[1]=t.image.height,Kr.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,Kr)),sampler:r.createSampler(Nu),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=ft,n=Et,a=zt;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,m.get(e)._rasterProgram||(m.get(e)._rasterProgram=le(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),m.get(e)._rasterGeometry||(m.get(e)._rasterGeometry=Hu(r));let{coords:s}=t,f=e._map.options.crs,l=f.project(m.get(e).location),p=Math.cos(m.get(e).location.lat*P),c=f.scale(s.z),u=mn;u.x=s.x*256,u.y=s.y*256;let d=f.transformation.untransform(u,c);u.x=(s.x+1)*256,u.y=(s.y+1)*256;let h=f.transformation.untransform(u,c),y=(h.x-d.x)*p,x=-(h.y-d.y)*p;t.texture=o,t.mesh={position:[(d.x-l.x)*p,0,-(d.y-l.y)*p],rotation:[0,0,0],scale:[y,1,x],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:m.get(e)._rasterGeometry,program:m.get(e)._rasterProgram,texture:o,opacity:e.options.opacity,id:Me.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},R(t.mesh,m.get(e).root)}async function Wu(e,t){try{await m.get(e).ready;let r=await vt(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{Yr[0]=r.data;let o=new Blob(Yr);Yr[0]=null,t.image=await createImageBitmap(o)}}catch{throw Yr[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}qu(e,t),t.loadedAt=performance.now(),t.done=!0,m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,cn(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),z(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,m.get(e)._rasterVersion=(m.get(e)._rasterVersion||0)+1,e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{m.get(e)._loadingTiles--,e._map&&(dn(e),Ft(e),m.get(e)._loadingTiles||e.fire("load"),z(e))}}function Yu(e,t){t.started=!0;let r=m.get(e)._loadingTiles===0;return m.get(e)._loadingTiles++,e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Wu(e,t)}function dn(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of m.get(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(Iu);for({tile:i}of o){if(m.get(e)._loadingTiles>=4)break;Yu(e,i)}}function Xu(e,t){let r=m.get(e)._rasterTiles,o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&Ut(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var rt=[0,0];var ot=[0,0];function Ku(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();rt[0]=t.maxLat,rt[1]=t.minLon,ot[0]=t.minLat,ot[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(rt,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(ot,r).divideBy(256).floor(),f=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,f.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,f.x+6),minY:Math.max(0,i.y,a?.y??0,f.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,f.y+6)}}function gn(e){let t=e._map;if(!t||!m.get(e)._shared||!m.get(e).header)return;let r=Math.max(m.get(e).header.minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));m.get(e)._tileZoom=r;let o=Ku(t,m.get(e).header,r),i=Eu;i.clear();let n,a,s,f,l;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});m.get(e)._wantedRasterTiles=new Set(i.keys());let p=zu;p.clear();let c=Math.max(m.get(e).header.minZoom??0,r-2),u=2**(r-c);if(c<r)for([s,f]of i)m.get(e)._rasterTiles.get(s)?.done||(l={z:c,x:Math.floor(f.x/u),y:Math.floor(f.y/u)},p.set(`${l.z}/${l.x}/${l.y}`,l));let d=new Map(p);for([s,f]of i)d.set(s,f);i.clear(),p.clear(),Xu(e,d),dn(e),Ft(e)}function Ju(e){let t=gn.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function Qu(e,t){let r=await yt(t);return e.options.archive=t,m.get(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 ku(e,t){throw e.fire("error",{error:t}),t}I();function yr(e,t){if(!m.get(e)._rasterTiles||m.get(e)._terrain3D===t)return;let r;for(r of m.get(e)._rasterTiles.values())m.get(e)._terrain3D&&Rt(m.get(e)._terrain3D,r),r.mesh&&(r.mesh.visible=!0,R(r.mesh,m.get(e).root));if(m.get(e)._terrain3D=t||null,t)for(r of m.get(e)._rasterTiles.values())r.done&&cn(e,r.coords,r)}async function ed(e,t,r){try{await r,m.get(e)._added.resolve(),yr(e,w.get(t)._terrain3D)}catch(o){e.fire("error",{error:o})}}async function td(e,t,r){try{await Promise.all([r,m.get(e).ready]),e._map===t&&t.hasLayer(e)&&gn(e)}catch(o){e.fire("error",{error:o})}}function rd(e,t){m.get(e).location||(m.get(e).location=t.getCenter());let r=dr(e,t);ed(e,t,r),td(e,t,r)}function od(e){let t,r;for(t of m.get(e)._rasterTiles.values())Ut(e,t);if(m.get(e)._rasterProgram?.pipelineCache.clear(),m.get(e)._rasterProgram=null,m.get(e)._rasterGeometry){for(r of Object.values(m.get(e)._rasterGeometry.attributes))D(e,r.buffer);m.get(e)._rasterGeometry=null}}function id(e,t){od(e),m.get(e)._terrain3D=null,hr(e,t)}L();function xn(e,t){m.get(e).kind="raster",t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},g.Util.setOptions(e,t),m.get(e).root=K(),m.get(e)._areas=new Map,m.get(e)._rasterTiles=new Map,m.get(e)._loadingTiles=0,m.get(e)._added=Promise.withResolvers(),m.get(e).url=new URL(t.url,document.baseURI).href,m.get(e)._directories=new Map,m.get(e).ready=Promise.resolve(e.options.archive||e).then(Qu.bind(null,e)).catch(ku.bind(null,e))}I();var nd=Object.freeze([]);function ad(e){m.get(e).kind==="raster"&&yr(e,null)}function sd(e,t){m.get(e)._terrainController?.abort(),m.get(e)._terrainLoading=!1,m.get(e)._terrainReady=!1,t.eachLayer(ad);let r,o,i,n;for(r of m.get(e)._rasterTiles.keys())Rt(e,r);w.get(t)._terrain3D===e&&delete w.get(t)._terrain3D;for(o of Object.values(t._layers))gr(o,null),pr(o);t.fire("terrainchange"),m.get(e)._terrainTiles.clear(),m.get(e)._terrainOriginElevation=0,m.get(e)._terrainPromise=null,m.get(e)._rasterProgram&&m.get(e)._rasterProgram.pipelineCache.clear(),m.get(e)._rasterProgram=null,m.get(e)._dem&&D(e,m.get(e)._dem.texture),m.get(e)._dem=null;for(i of m.get(e)._terrainGrids?.values()||nd)for(n of Object.values(i))D(e,n.buffer);m.get(e)._terrainGrids=null,m.get(e)._bridges=null,k(e,m.get(e)._bridgeMesh),m.get(e)._bridgeMesh=null,hr(e,t)}I();async function md(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 vt(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}`);m.get(t)._terrainTiles.set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function fd(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ld(e,t){let r=m.get(e),o=e._map;r._terrainZoom=t.maxZoom,rt[0]=t.maxLat,rt[1]=t.minLon;let i=o.project(rt,r._terrainZoom).divideBy(256).floor();ot[0]=t.minLat,ot[1]=t.maxLon;let n=o.project(ot,r._terrainZoom).divideBy(256).floor();r._terrainBounds=new g.Bounds(i,n);let a=[],s=o.project(o.getCenter(),r._terrainZoom).divideBy(256),f,l;for(f=i.x;f<=n.x;f++)for(l=i.y;l<=n.y;l++)a.push({z:r._terrainZoom,x:f,y:l,distance:Math.hypot(f+.5-s.x,l+.5-s.y)});return a.sort(Yi),a}N();L();function pd([e,t,r],o,i,n,a){let s=o.project(new g.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function cd(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 ud(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,f,l,p,c,u,d,h,y;for(f of r){l=[];for(p of f)l.push(t[p]);o.push(l)}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 x={triangles:o,min:[i,n],max:[a,s]};for(u=Math.floor(x.min[0]/64);u<=Math.floor(x.max[0]/64);u++)for(d=Math.floor(x.min[1]/64);d<=Math.floor(x.max[1]/64);d++)h=`${u}/${d}`,y=m.get(e)._bridges.get(h),y||m.get(e)._bridges.set(h,y=[]),y.push(x)}function dd(e,t,r){let{position:o,normal:i,color:n}=e,a,s,f,l,p,c,u,d,h;for([a,s,f]of r)for(l=t[a],p=t[s],c=t[f],(p[2]-l[2])*(c[0]-l[0])-(p[0]-l[0])*(c[2]-l[2])<0&&(u=s,s=f,f=u),d=0;d<6;d++)u=d===0||d===3?a:d===1||d===5?s:f,h=t[u],o.push(h[0],h[1]-(d>=3?1.2:0),h[2]),i.push(0,d>=3?-1:1,0),n.push(.6,.58,.54)}function hd(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,f=-(r[0]-t[0])/a,l,p;for(l=0;l<6;l++)p=l===0||l===3||l===5?t:r,o.push(p[0],p[1]-(l===2||l>=4?1.2:0),p[2]),i.push(s,0,f),n.push(.6,.58,.54)}function gd(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)hd(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function xd(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:f}=e,l=[],p,c,u,d,h,y,x,v,M,_,B;for(p of t)c=p.slice(0,-1),c.length>=3&&l.push(c);if(!l.length)return;let b=[],A=[];for(p of l)for([u,d,h]of p)y=o.project([d,u],i),b.push([y.x,y.y,h]);for(p of l)for(x of p)A.push(pd(x,n,a,s,f));try{v=cd(l,b),[M,..._]=v,B=Wt(M,_)}catch{return}ud(r,b,B),dd(e,A,B),gd(e,A,l)}function yd(e,t){let r=e._map,o=r.options.crs,i=m.get(e)._terrainZoom,n=o.project(m.get(e).location),a=Math.cos(m.get(e).location.lat*P),s=m.get(e).root.position[1],f=[],l=[],p=[];m.get(e)._bridges=new Map;let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:f,normal:l,color:p},u,d,h;for({geometry:u}of t.features)if(!(u.type!=="Polygon"&&u.type!=="MultiPolygon"))for(d=u.coordinates,h=0;h<(u.type==="Polygon"?1:d.length);h++)xd(c,u.type==="Polygon"?d:d[h]);f.length&&(m.get(e)._bridgeMesh=qe(e,{position:f,normal:l,color:p}))}function vd(e,t,r){let o=m.get(e);o._terrainReady=!0,o._terrainOriginElevation=Y(e,o.location)??0;let i;for(i of Object.values(t._layers))pr(i),gr(i,e);r&&yd(e,r),t.fire("terrainchange"),z(e),e.fire("terrainready")}async function yn(e){if(m.get(e)._terrainLoading||!e._map)return;m.get(e)._terrainLoading=!0,m.get(e)._terrainReady=!1;let t=m.get(e)._terrainController=new AbortController,r;try{if(!m.get(e).terrainSource)throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=m.get(e)._terrainArchive=ei({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(m.get(e).terrainSource)?"cog":"pmtiles",url:m.get(e).terrainSource,archive:e.options.archive,asset:e.options.asset}});await m.get(o).ready;let i=m.get(o).header;if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=ld(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},f=[];for(r=0;r<Math.min(4,a.length);r++)f.push(md(s));await Promise.all(f);let l=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(fd);return t.signal.aborted||e._map!==n?void 0:(vd(e,n,l),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{m.get(e)._terrainLoading=!1}}function wd(){yn(this.backend).then(this.resolve,this.reject)}function Md(e){m.get(e).kind==="raster"&&yr(e,this)}function _d(e,t){if(w.get(t)._terrain3D&&w.get(t)._terrain3D!==e)throw new Error("Only one terrain layer can be active per map");if(w.get(t)._terrain3D=e,ki(e,t),m.get(e).root)m.get(e)._terrainPromise=yn(e);else{let r=Promise.withResolvers();m.get(e)._terrainPromise=r.promise,e.once("ready",wd,{backend:e,...r})}t.eachLayer(Md,e),t.fire("terrainchange")}function Td(e,t){let r=t.url,o={...t};delete o.url,Se(e,o),m.get(e).terrainSource=r,m.get(e)._terrainTiles=new Map,m.get(e)._rasterTiles=new Map,m.get(e)._terrainReady=!1,m.get(e).kind="terrain"}L();I();var Jr=new WeakMap;var Qr=new WeakMap;L();N();I();F();G();function Ld(e,t,r,o,i){let[n,a,s]=e,f=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return f>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/f,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))/f,i):null}function Xa(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=Ld(t.direction,o,i,n,a);if(!s)return;let{left:f,top:l}=s;e.hidden=f<0||f>o.x||l<0||l>r.clientHeight||r.style.display==="none",e.style.left=`${f}px`,e.style.top=`${l}px`}function Oe({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=w.get(e)._sunlight,a=w.get(e)._pitchSky;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(),f=E(e)*P,l=S(e)*P;Xa(r,n,a,s,f,l,i),Xa(o,n?.moon,a,s,f,l,i)}I();var Pd=[[-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 Ka=[0,0,0];function vn(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 Ja(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function bd(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Pd,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(${Ja(vn(n[1],i[1],a,Ka))}, ${Ja(vn(n[2],i[2],a,Ka))})`,tint:vn(n[3],i[3],a)}}function wn(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}N();function Mn(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*P-o,a=t*P,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),l=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/P+180+360)%360;return{altitude:s/P,azimuth:l,direction:[Math.sin(l*P)*Math.cos(s),Math.sin(s),-Math.cos(l*P)*Math.cos(s)]}}N();N();var kr=Math.sin(23.4397*P);N();var eo=Math.cos(23.4397*P);function Bd(e,t,r){let o=wn(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*P,n=(218.316+13.176396*o+6.289*Math.sin(i))*P,a=5.128*Math.sin((93.272+13.22935*o)*P)*P,s=Math.cos(a)*Math.cos(n),f=Math.cos(a)*Math.sin(n)*eo-Math.sin(a)*kr,l=Math.cos(a)*Math.sin(n)*kr+Math.sin(a)*eo;return Mn(o,t,r,Math.atan2(f,s),Math.asin(l))}N();function Sd(e,t,r){let i=wn(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*P,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*P,s=Math.asin(Math.sin(a)*kr),f=Math.atan2(Math.sin(a)*eo,Math.cos(a));return Mn(i,t,r,f,s)}function Tt(e){let t=$.get(e);t&&z(t)}function it(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(),l=w.get(r)._sunlight=Sd(t.time,f.lat,f.lng);Object.assign(l,bd(l.altitude)),l.moon=Bd(t.time,f.lat,f.lng),a.textContent=l.altitude<=0?"Night \xB7 no direct sunlight":l.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${l.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Oe(e),Tt(r)}catch(s){delete w.get(r)._sunlight,Oe(e),Tt(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function Cd(e){e.control.live=!0,it(e)}I();function Ed(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 w.get(r)._sunlight,Oe(e),Tt(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)),it(e)}function zd(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=g.DomUtil.create("div","sunlight-sun"),o=g.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=g.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 f=document.createElement("button");f.type="button",f.textContent="Now";let l=document.createElement("div");l.className="sunlight-time",l.style.cssText="display:flex;justify-content:space-between;align-items:center;",l.append(s,f);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,l,p,c);let u={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 u.update=it.bind(null,u),u.updateSky=Oe.bind(null,u),f.onclick=Cd.bind(null,u),n.onchange=a.oninput=Ed.bind(null,u),g.DomEvent.disableClickPropagation(i),g.DomEvent.disableScrollPropagation(i),u}function Id(e){e.control.live&&it(e)}function Ad(e,t){let r=Qr.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=zd(t),Qr.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),w.get(t)._timeControl=e,Jr.set(e,r),r.update(),r.timer=setInterval(Id,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();function Dd(e){return m.get(this).control.addTo(e)}L();function Od(){return g.Control.prototype.remove.call(m.get(this).control)}function Gd(e){g.Util.setOptions(this,e),this.live=!0,this.layer=new g.Layer,m.get(this.layer).control=this,m.get(this.layer).kind="time"}function Rd(e){return Ad(this,e)}L();function Qa(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 Ud(e){g.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?xr(this.layer,t,Qa.bind(null,t)):Qa(t,!1),this}L();function Fd(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):g.Control.prototype.remove.call(this)}I();function Nd(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Qr.get(t);clearInterval(r),delete w.get(t)._timeControl,t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),delete w.get(t)._sunlight,Oe(e),o.remove(),i.remove(),Tt(t),n===e&&(n.control=null)}function jd(){let e=Jr.get(this);e&&(Nd(e),Jr.delete(this))}g.Control.Time=g.Control.extend({options:{position:"bottomright"},initialize:Gd,onAdd:Rd,onRemove:jd,addTo:Ud,remove:Fd});L();var _n=Object.freeze({});var Ge=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];var Re=[.08,.07,.06];var xe=[.85,.64,.5];var Ue=[.16,.2,.32];function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}function Zd(e){let t=Ge[e%Ge.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Re],[C(-.045,.045,.25,.85),.02,.62,Re],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Re],[C(-.1,.1,.15,.4),.85,.92,Re],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,xe],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,xe],[C(.15,.25,-.5,-.05),1,1.25,xe],[C(-.2,-.08,0,.32),.3,1,Ue],[C(.08,.2,-.25,.07),.3,1,Ue]]}var ka=[.75,.2,.15];var Tn={body:[[C(-.17,.17,-.1,.1),.82,.95,Ue],[C(-.19,.19,-.11,.11),.95,1.44,ka],[C(-.05,.05,-.05,.05),1.44,1.5,xe],[C(-.1,.1,-.11,.1),1.5,1.72,xe],[C(-.105,.105,-.06,.115),1.58,1.77,Re],[C(-.105,.105,-.115,-.06),1.7,1.77,Re]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Ue],[C(-.07,.07,-.17,.07),-.9,-.82,Re]],arm:[[C(-.05,.05,-.05,.05),-.55,0,ka],[C(-.045,.045,-.045,.045),-.66,-.55,xe]]};function $d(e){let t=Tn.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],Ge[e%Ge.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Ue],[C(.02,.16,-.07,.07),.08,.9,Ue],[C(-.3,-.2,-.05,.05),.76,1.42,xe],[C(.2,.3,-.05,.05),.76,1.42,xe]),t}function vr(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 Lt=[.12,.15,.18];var Ce=[.92,.93,.92];var wr=[.05,.05,.05];var Ln=[1.9,1.85,1.7];var Pn=[1.7,.06,.05];function Mr(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,Lt],[C(-1.25,1.25,o,i),2.65,3.1,Ce],[C(-1.15,-.85,o+1,o+2),0,.7,wr],[C(.85,1.15,i-2,i-1),0,.7,wr],[C(-.9,.9,o-.03,o),.8,1.05,Ln],[C(-.9,.9,i,i+.03),.8,1.05,Pn]]}function Vd(e,t){return Mr(0,12,vr(t))}function Hd(e,t){let r=vr(t),o=[],i;for(i=0;i<5;i++)o.push(...Mr((i-2)*6.5,6,r));return o}function qd(e,t){let r=vr(t),o=[],i;for(i=0;i<5;i++)o.push(...Mr((i-2)*15,14,r));return o}function Fe(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function Wd(e){let t=Ge[e%Ge.length];return[...Fe(.7,.92,-1.68,-1.02,0,.64,wr),...Fe(.7,.92,1.02,1.68,0,.64,wr),[[[-.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,Lt,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...Fe(.38,.8,-2.3,-2.16,.56,.76,Ln),[C(-.78,.78,2.16,2.3),.6,.76,Pn]]}var es=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function Yd(){let e=[],t;for(t=0;t<12;t++)e.push(...Fe(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function Xd(){return[[es,0,.8,[.1,.16,.26]],[es,.8,1.4,Ce],[C(-5,5,-18,26),1.4,3.7,Lt,C(-4.6,4.6,-17.4,25.6)],...Fe(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,Ce],...Yd(),...Fe(4.65,4.8,-13.6,25.8,3.9,4.8,Ce),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Ce],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Ce],[C(-2.2,2.2,-17.6,-14),4.7,5.5,Lt],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Ce],[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,Ce],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var Kd={bicycle:{side:.4,model:Zd},pedestrian:{side:.3,model:$d},bus:{side:1.5,model:Vd},tram:{side:0,model:Hd},metro:{side:0,model:qd},car:{side:1.8,model:Wd,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:Xd,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var Jd=" 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 to(e,t,r,o,i,n,a){let s=i[0]-o[0],f=i[1]-o[1],l=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],u=n[2]-o[2],d=f*u-l*c,h=l*p-s*u,y=s*c-f*p,x=Math.hypot(d,h,y),v,M;for(v=0;v<3;v++)M=v===0?o:v===1?i:n,e.push(...M),t.push(d/x,h/x,y/x),r.push(...a)}function _r(e){let t=[],r=[],o=[],i=[],n=[],a,s,f,l,p,c,u,d,h;for([a,s,f,l,p=a]of e){i.length=n.length=0;for([c,u]of a)i.push([c,s,u]);for([c,u]of p)n.push([c,f,u]);for(d=0;d<a.length;d++)h=(d+1)%a.length,to(t,r,o,i[d],i[h],n[h],l),to(t,r,o,i[d],n[h],n[d],l);for(d=1;d<a.length-1;d++)to(t,r,o,n[0],n[d],n[d+1],l),to(t,r,o,i[0],i[d+1],i[d],l)}return{position:t,normal:r,color:o}}function Qd({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
|
|
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
3
|
`:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
|
|
4
|
-
`:""}${e.description}`),t.textContent=r,t}function bn(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),xr(e.layer,e.status),e.update()}function kd(e){Xe.set(e.layer,e),e.ready&&bn(e)}function Ne(e,t){t&&(m.get(e.layer).highlightedFeature?.mesh===t&&(be(e.layer,null),m.get(e.layer).hoveredFeature=null,Be(e.layer,null)),k(e.layer,t))}function Bn(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function eh(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),Ne(e,e.mesh),Ne(e,e.route),e.mesh=e.route=null,Xe.delete(e.layer),Bn(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function th(e){e.ready=!0,e.layer._map&&bn(e)}I();function Sn(e){let t=w.get(e.layer._map)?._timeControl,r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function rh(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 Tr=new Map;function rs(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function oh(e,t){return e-t}function ih(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=Tr.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"}),Tr.size>=32&&Tr.delete(Tr.keys().next().value),Tr.set(t,n));let a={},s,f,l,p,c,u,d;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=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,x=[];for({from:f,to:l,every:p=1/0,months:c,weekdays:u}of o)if(!(c?.includes(a.month)===!1||u?.includes(y)===!1))for(d=rs(f);d<=rs(l);d+=p)x.push(d);x.sort(oh);let v=[];for(d of x)h>=d&&h<d+r&&v.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:(h-d)/r});return v}function nh(e,t,r){let o=[],i,n,a,s,f,l,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(f of ih(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(l=e/1e3*r,p=n.offsets||=rh(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+l)%n.length,speed:r,properties:n.properties});return o}function Cn(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var ah=Object.freeze({unlit:!0});function sh(e,t,r,o,i,n,a,s,f,l,p,c,u,d){let h=o[0]+n*l,y=o[1]+a*l,x=o[2]+(i[2]-o[2])*l+.4,v=o[0]+n*p,M=o[1]+a*p,_=o[2]+(i[2]-o[2])*p+.4,B;for(B=0;B<6;B++)B===0||B===3?e.push(h-s,x,y-f):B===1?e.push(h+s,x,y+f):B===5?e.push(v-s,_,M-f):e.push(v+s,_,M+f),t.push(0,1,0),r.push(c,u,d)}function mh(e,t,r,o,i,n,a,s,f){let l=o[n-1],p=o[n],c=p[0]-l[0],u=p[1]-l[1],d=i[n]-i[n-1];if(!d)return;let h=-u/d*2.5,y=c/d*2.5,x,v,M;for(x=Math.floor(i[n-1]/30)*30;x<i[n];x+=30)v=Math.max(0,(x-i[n-1])/d),M=Math.min(1,(x+18-i[n-1])/d),!(M<=v)&&sh(e,t,r,l,p,c,u,h,y,v,M,a,s,f)}function fh(e){let t=[],r=[],o=[],i,n,a,s,f,l,p,c,u;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,l=f===null?.08:(f>>16&255)/255,p=f===null?.7:(f>>8&255)/255,c=f===null?.85:(f&255)/255,u=1;u<i.length;u++)mh(t,r,o,i,n,u,l,p,c);return{position:t,normal:r,color:o}}function En(e,t,r,o,i=0){let n=qe(e.layer,t,o,i);return n.extras.featureFaces=r,n}function lh(e){e.route=En(e,fh(e.lanes),[],ah)}function zn(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 l={attributes:{position:{data:f}}};oe(l),e.mesh.geometry.bounds=l.bounds}function ph(e){let{trips:t,model:r,vertices:o}=e;if(Ne(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 _r(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 l=i.length/3;e.mesh=En(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,_n,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=l,e.mesh.extras.dynamicLights=!0,zn(e)}function ro(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 ch(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=ro(t,a),e.lanesDirty=!1}function uh(e){let{device:t}=m.get(e.layer).renderer;if(e.gpu?.device!==t){Bn(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:ro(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&ch(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=ro(t,n));let{position:s,normal:f}=e.mesh.geometry.attributes,l=[],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:f.buffer,l.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:l})}function dh(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 hh(e,t,r,o){let i;try{o?e.trips=nh(t,e.lanes,e.velocity):e.trips.length=0,i=dh(e,o)}catch(l){Cn(e,l);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,f=n!==e.tripsKey||!!s;return s&&lh(e),n!==e.tripsKey&&(ph(e),e.tripsKey=n),e.mesh&&uh(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),f}function gh(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 xh(e){e.litAt=performance.now();let t=[],r,o,i,n,a,s,f,l,p,c;for(r of e.trips){({x:o,y:i,z:n,dx:a,dz:s}=oi(e,r));for({position:[f,l,p],...c}of e.lights)t.push({...c,position:[o-f*s-p*a,i+l,n+f*a-p*s]})}e.mesh.extras.lights=t}function yh(e,t,r){e.mesh&&(gh(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&xh(e))}function vh(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!m.get(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}=Sn(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=hh(e,r,o,i),n===void 0)||(yh(e,o,t),(e.mesh||n)&&z(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function wh(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 Mh=Object.freeze([]);function _h({features:e=Mh}){let t=[],r,o,i,n,a,s,f,l;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,l=0;l<(i?i.length:1);l++){n=i?i[l]:r.coordinates,a=[];for([s,f]of n)a.push([f,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}N();L();I();function In(e){let{layer:t,lanes:r}=e,o=m.get(w.get(t._map)._terrain3D)?._terrainReady&&w.get(t._map)._terrain3D,i=m.get(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 Th(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(m.get(t).location),n=Math.cos(m.get(t).location.lat*P),a,s,f,l,p;for(a of r){a.points=[];for([s,f]of a.latlngs)l=o.project(new g.LatLng(s,f)),a.points.push([(l.x-i.x)*n,-(l.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)}In(e),Ne(e,e.route),e.route=null,e.tripsKey=null}function Lh(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=_h(r),Th(e),e.frame||e.tick()}}function Ph(e,t,r){!t.aborted&&r.name!=="AbortError"&&Cn(e,r)}function bh(e){let{time:t}=Sn(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;wh(e,t,r).then(Lh.bind(null,e,r),Ph.bind(null,e,r))}function Bh(e,t){t?.layer&&!m.get(t.layer).control?.time||(cancelAnimationFrame(e.frame),bh(e),e.tick())}function Sh(e){e.lanes.length&&(In(e),Ne(e,e.route),e.route=null,e.mesh&&zn(e),e.frame||e.tick())}function Ch(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=_n){let{model:s,lights:f,side:l}=Kd[r];o??=l,Se(e,{tooltip:Qd,nightLight:!!f,...a});let p=g.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=_r(s(0)),u=c.position.length,d=u/3,h=new ArrayBuffer(16),y=new Float32Array(h),x=new Uint32Array(h),v={layer:e,url:t,model:s,lights:f,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:u,vertices:d,params:h,paramFloats:y,paramInts:x,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};v.shader=Jd,v.tick=vh.bind(null,v),v.update=Bh.bind(null,v),v.terrain=Sh.bind(null,v),Xe.set(e,v),e.on("ready",th.bind(null,v)),e.on("add",kd.bind(null,v)),e.on("remove",eh.bind(null,v))}L();L();L();function Eh(){this.keys.clear()}var oo={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();Pi();Ke();F();G();function zh(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"?(ee(t,Math.max(20,Math.min(85,E(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 io=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];N();I();function nt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=i.project(m.get(t).location),a=Math.cos(m.get(t).location.lat*P),s=i.project(r.latlng),f=m.get(w.get(o)._terrain3D)?._terrainReady&&w.get(o)._terrain3D,l=f&&Y(f,r.latlng)||0;return e[0]=(s.x-n.x)*a,e[1]=l+(r.height??0)-m.get(t).root.position[1],e[2]=-(s.y-n.y)*a,e}function An(){let[e,t,r]=nt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,f,l,p;for(a=0;a<io.length;a++)[,s,f,l]=io[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+f,p.position[2]=r-s*n,p.rotation[0]=l*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;z(this.layer)}function Ih(){this.meshes&&An.call(this)}function Dn(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,g.DomEvent.off(document,"keydown keyup",this.onKey),g.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)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)){g.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}),ut(e,this.saved.pitch),this.saved=null}}function Ah(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}!oo[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}N();L();var Dh=["dragging","keyboard","doubleClickZoom","boxZoom"];F();G();Pi();function On(e){return Math.atan2(Math.sin(e),Math.cos(e))}function Gn(e,t){return e===t||m.get(e)._type==="terrain"||m.get(e)._type==="traffic"}function Oh(e){let t=m.get(this.layer),r=t.raycaster,o=nt.call(this,this.local),i=t.root,n=i.position[0]+o[0]*i.scale[0],a=i.position[1]+o[1]*i.scale[1],s=i.position[2]+o[2]*i.scale[2];if(a>e||this.verticalSpeed>0)return;Q(t.scene),r.origin[0]=n,r.origin[1]=e+.01,r.origin[2]=s,r.direction[0]=0,r.direction[1]=-1,r.direction[2]=0,r.meshes.length=0;let f,l;for(f of m.get(t._shared)._layers)Gn(f,this.layer)||m.get(f).kind==="raster"||f.options.nightLight||Ae(m.get(f).root,ri,r.meshes);for(l of ti(r,r.meshes)){if(l.point[1]<a-.001)break;this.state.height+=(l.point[1]-a)/i.scale[1],this.verticalSpeed=0;break}r.meshes.length=0}L();N();var os=new WeakMap;function Gh(e,t,r,o,i){let n,a,s,f,l;for(n=0;n<3;n++)a=(r?r.data[o+n]:o+n)*3,s=t[a],f=t[a+1],l=t[a+2],e[n*3]=i[0]*s+i[4]*f+i[8]*l+i[12],e[n*3+1]=i[1]*s+i[5]*f+i[9]*l+i[13],e[n*3+2]=i[2]*s+i[6]*f+i[10]*l+i[14]}function Rh(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 Uh(e){let t=os.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=[],l=[],p=new Map,c=[],u,d,h,y,x,v,M,_,B,b,A,V,Z,j,J,ye;for(u=0;u<s;u+=3)d=i?i.data[u]:u,!(e.program.nightLight&&a&&a.data[d*2]<=2)&&(Gh(c,o,i,u,r),y=c[3]-c[0],x=c[4]-c[1],v=c[5]-c[2],M=c[6]-c[0],_=c[7]-c[1],B=c[8]-c[2],b=x*B-v*_,A=y*_-x*M,V=v*M-y*B,Z=Math.hypot(b,V,A),!(!Z||Math.abs(V)>.9*Z)&&(n&&(h=d*3,j=n.data,(r[0]*j[h]+r[4]*j[h+1]+r[8]*j[h+2])*b+(r[2]*j[h]+r[6]*j[h+1]+r[10]*j[h+2])*A<0&&(b=-b,A=-A)),J=Math.hypot(b,A),ye=l.length/2,f.push(...c),l.push(b/J,A/J),Rh(p,c,ye)));return t={tri:Float32Array.from(f),nrm:Float32Array.from(l),cells:p,origin:[r[12],r[13],r[14]]},os.set(e.geometry,t),t}function Fh(e,t,r,o,i,n,a){let s=t*9,f=e[s+3]-e[s],l=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],u=e[s+7]-e[s+1],d=e[s+8]-e[s+2],h=-a*u,y=a*c-n*d,x=n*u,v=f*h+l*y+p*x;if(Math.abs(v)<1e-9)return-1;let M=r-e[s],_=o-e[s+1],B=i-e[s+2],b=(M*h+_*y+B*x)/v;if(b<0||b>1)return-1;let A=_*p-B*l,V=B*f-M*p,Z=M*l-_*f,j=(n*A+a*Z)/v;return j<0||b+j>1?-1:(c*A+u*V+d*Z)/v}function Nh(e,t,r,o,i,n){let{dx:a,dz:s,seen:f}=r,l,p,c;for(l of e)if(!(f.has(l)||a*t.nrm[l*2]+s*t.nrm[l*2+1]>=0))for(f.add(l),p=.4;p<2;p+=1.1)c=Fh(t.tri,l,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[l*2],r.normal[1]=t.nrm[l*2+1])}function jh(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:l,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=Uh(e),u=n-r[12]+c.origin[0],d=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let x,v,M;for(x=Math.floor(Math.min(u,u+f*p)/8);x<=Math.floor(Math.max(u,u+f*p)/8);x++)for(v=Math.floor(Math.min(h,h+l*p)/8);v<=Math.floor(Math.max(h,h+l*p)/8);v++)M=c.cells.get(x+","+v),M&&Nh(M,c,t,u,d,h)}function Zh(e,t,r,o,i,n,a,s){Q(m.get(e).scene),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 f;for(f of m.get(m.get(e)._shared)._layers)Gn(f,e)||Ae(m.get(f).root,jh,s);return s.found?s.normal:null}function is(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Zh(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function $h(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=m.get(this.layer).root,s=Math.sin(this.state.heading)*r,f=Math.cos(this.state.heading)*r,l=nt.call(this,this.local),p;for(p=0;p<l.length;p++)l[p]=n[p]+a[p]*l[p];let c=is.call(this,s,f,l);if(c){let u=s*c[0]-f*c[1];s-=u*c[0],f+=u*c[1],is.call(this,s,f,l)&&(s=f=0)}this.state.latlng=new g.LatLng(o+f/111320,i+s/(111320*Math.cos(o*P))),this.state.phase+=Math.hypot(s,f)/1.6*Math.PI}function Vh(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)}bt();N();G();Ke();F();function Hh(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*P,a=On(-this.state.heading-n);Math.abs(a)>.001&&ee(o,E(o),(n+a*Math.min(1,r*4))*me),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}function qh(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!m.get(t).renderer)return;let o=!1,i,n;if(!this.meshes){this.meshes=[];for([i]of io)this.meshes.push(qe(t,_r(Tn[i])));o=!0}let a=m.get(t).root.position[1]+nt.call(this,this.local)[1]*m.get(t).root.scale[1];Vh.call(this,r)&&(o=!0);let s=0,f=0;for(n of this.keys)s+=oo[n]?.[0]||0,f+=oo[n]?.[1]||0;s=Math.sign(s),f=Math.sign(f),f&&(this.state.heading=On(this.state.heading+f*2.5*r),o=!0),s&&($h.call(this,s,r),o=!0),o&&Oh.call(this,a),Hh.call(this,s,f,r)&&(o=!0),o&&An.call(this)}function Rn(){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*Ve*Math.cos(this.state.latlng.lat*P)/256)),o;this.saved={zoom:e.getZoom(),pitch:E(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Dh)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)*P,e.setView(this.state.latlng,r,{animate:!1}),ut(e,75),g.DomEvent.on(document,"keydown keyup",this.onKey),g.DomEvent.on(window,"blur",this.onBlur),g.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 Wh(){this.saved?Dn.call(this):Rn.call(this)}function Yh(e,{speed:t,distance:r,...o}){let i=new g.Layer;m.get(i)._type="walk",Se(i,o);let n=new Set,a=g.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=g.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=g.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 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",g.DomEvent.disableClickPropagation(a);let l={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:f,meshes:null,frame:null,last:void 0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker=m.get(i).walker={latlng:null,heading:0,phase:0,height:0}};l.step=qh.bind(l),l.onKey=Ah.bind(l),l.onBlur=Eh.bind(l),l.onPointer=zh.bind(l),l.onTerrain=Ih.bind(l),l.start=Rn.bind(l),l.stop=Dn.bind(l),l.toggle=Wh.bind(l),e._walk=l,g.DomEvent.on(s,"click",l.toggle)}function Xh(e){g.Util.setOptions(this,e),Yh(this,this.options)}function Kh(e){let t=mt.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,normal:[0,0]},local:[0,0,0]},mt.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 Jh(e){let t=mt.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)}g.Control.Walk=g.Control.extend({options:{position:"bottomright",speed:70,distance:20},initialize:Xh,onAdd:Kh,onRemove:Jh});L();var Un=new WeakMap;var Fn=new WeakMap;var Nn=new WeakMap;function Qh(){return{}}function kh(e){return this._project(),this._parts=this._rings,Un.get(this).call(this,e)}function eg(){return this._project(),Fn.get(this).call(this)}function tg(){Nn.get(this).call(this),this._container.remove()}var Ze=new Map;var Ee={value:null};function rg(e){Ze.delete(e),m.get(e)._fadeFrame=null,!Ze.size&&Ee.value!==null&&(cancelAnimationFrame(Ee.value),Ee.value=null)}function og(){Ee.value=null;let e=[...Ze],t,r;for([t,r]of e)Ze.get(t)===r&&(Ze.delete(t),m.get(t)._fadeFrame=null,jn.call(t))}function ig(e){m.get(e)._fadeVersion=(m.get(e)._fadeVersion||0)+1,Ze.set(e,m.get(e)._fadeVersion),Ee.value===null&&(Ee.value=requestAnimationFrame(og)),m.get(e)._fadeFrame=Ee.value}function jn(){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(),Pe(this),rg(e),r&&ig(e)}var Zn=[];function ng(){Zn.shift()?.fire("load")}function ag(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Zn.push(this),queueMicrotask(ng))}function sg(){return Pe(this),this}function mg(){this instanceof g.Polyline||this instanceof g.CircleMarker?(this.beforeAdd=this._updateBounds=ge,this.redraw=sg,m.get(this).kind="path",this instanceof g.Polyline&&(Un.set(this,this.closestLayerPoint),this.closestLayerPoint=kh),this instanceof g.Circle&&(Fn.set(this,this.getBounds),this.getBounds=eg)):this instanceof g.GridLayer?(Nn.set(this,this._initContainer),this._initContainer=tg,this._updateOpacity=jn):this instanceof g.ImageOverlay&&!(this instanceof g.VideoOverlay)&&!(this instanceof g.SVGOverlay)&&(m.get(this).kind="image",this._reset=Pe)}L();function fg(){let e=m.get(this);e.eventMap.off(e.events,this),e.events=e.eventMap=null}function lg(e,t){switch(m.get(e).kind){case"3d":return ki(e,t);case"raster":return rd(e,t);case"terrain":return _d(e,t);case"image":return ag.call(e,t);case"time":return Dd.call(e,t)}}L();function pg(e){return!m.get(e)._3d&&(e instanceof g.GridLayer||e instanceof g.Polyline||e instanceof g.CircleMarker||e instanceof g.Marker&&!(e.options.icon instanceof g.DivIcon)||e instanceof g.ImageOverlay&&!(e instanceof g.VideoOverlay)&&!(e instanceof g.SVGOverlay))}function cg(e){let t=pg(this);t&&((this instanceof g.GridLayer||this instanceof g.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof g.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target,o=m.get(this);r.hasLayer(this)&&(o.kind?(this._map=r,this._zoomAnimated=r._zoomAnimated,o.kind!=="pending"&&o.kind!=="time"&&(o.events=o.kind==="raster"?Ju(this):o._3d?_u(this):Qh(),o.eventMap=r,r.on(o.events,this),this.once("remove",fg,this)),lg(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):st.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&mi(this,e.target))}L();var $n=[];var Vn={value:Promise.resolve()};function ug(e,t){m.get(e)._geojson=!0,Se(e,t)}function dg(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 hg(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 gg(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function xg(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)hg(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(gg(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function yg(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,f;for(f of o)a.set(f,s),s+=f.length;return a}async function ae(e,t,r,o){if(o?.throwIfAborted(),dg(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}`);xg(e,n,i,r);let a=await yg(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 vg=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function wg(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 f=a*s<=4?new DataView(t.buffer,r*12+8,4):new DataView(await ae(e,t.getUint32(r*12+8,i),a*s)),l=[],p;for(p=0;p<s;p++)l.push(n===3?f.getUint16(p*a,i):n===4?f.getUint32(p*a,i):f.getFloat64(p*a,i));return l}async function Mg(e,t){let r=e.little,o=new DataView(await ae(e,t,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let i=new DataView(await ae(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(vg.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await wg(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function _g(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 Tg(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 Lg(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,f=!0,l;for(l of i||[])a&&=l===8;for(l of n)s&&=l===1,f&&=l===3;let p=o===1&&i?.length===1&&i[0]===32&&f;if(!_g(e,t,r)||!Tg(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 Pg(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 ns(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function bg(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&ns(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&ns(r)&&r[0]===0&&r[1]===0}function Bg(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!bg(i,n,a)||!Pg(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 Sg(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 Cg(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 Eg(e,t,r){let o=t.tags,i=Lg(o);r.base||(r.base=Bg(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))),f=20037508342789244e-9*2/2**s,l=(n.left+20037508342789244e-9)/f,p=(20037508342789244e-9-n.top)/f;if(Math.abs(l-Math.round(l))<1e-6&&(l=Math.round(l)),Math.abs(p-Math.round(p))<1e-6&&(p=Math.round(p)),!Sg(e,n,i,s,l,p,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:l,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)};Cg(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function zg(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 Mg(e,t),Eg(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 Ig(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 Hn(e,t,r,o,i){let n=o*t.columns+r;return Ig(await ae(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function Ag(e,t,r,o,i){let n=await Hn(e,t,r-t.x,o-t.y,i);i?.throwIfAborted();let a=new DataView(n),s=new Float32Array(256*256),f,l;for(f=0;f<s.length;f++){if(l=a.getFloat32(f*4,e.little),!Number.isFinite(l)||l<-12e3||l>1e4)throw new Error("Invalid or missing COG elevation sample");s[f]=l}return{data:s.buffer}}async function Dg(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,f=(o-t.y)*256,l,p,c,u,d,h,y;for(p=Math.max(0,Math.floor(f/256));p<Math.min(t.rows,Math.ceil(f/256+1));p++)for(l=Math.max(0,Math.floor(s/256));l<Math.min(t.columns,Math.ceil(s/256+1));l++){for(c=new Uint8Array(await Hn(e,t,l,p,i)),i?.throwIfAborted(),u=new Uint8ClampedArray(256*256*4),d=0,h=0;d<c.length;d+=t.samples,h+=4)u[h]=c[d],u[h+1]=c[d+1],u[h+2]=c[d+2],u[h+3]=t.samples===4?c[d+3]:255;y=await createImageBitmap(new ImageData(u,256,256)),a.drawImage(y,l*256-s,p*256-f),y.close()}let x=n.transferToImageBitmap();return i?.aborted&&(x.close(),i.throwIfAborted()),{image:x}}function Og(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 Gg(e,t,r,o,i){if(i?.throwIfAborted(),!Og(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?Ag(e,n,r,o,i):Dg(e,n,r,o,i)}function Rg(e){return e.header}function Ug(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 Fg(e,t,r){let o=JSON.parse(new TextDecoder().decode(await fr(await ae(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 Ng(e,t){let r={url:e},o=Hi(await ae(r,0,127));Ug(r,o);let i=await Fg(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 jg(e,t){let r=t===void 0?{url:e}:await Ng(e,t);r.levels=new Map;let o=new DataView(await ae(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 zg(r,o.getUint32(4,r.little)),f=20037508342789244e-9,l=n.left+n.resolution/2,p=n.left+(n.width-.5)*n.resolution,c=n.top-n.resolution/2,u=n.top-(n.height-.5)*n.resolution;return r.header={minZoom:a,maxZoom:s,tileType:n.elevation?0:2,minLon:l/f*180,maxLon:p/f*180,minLat:Math.atan(Math.sinh(u/f*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/f*Math.PI))*180/Math.PI},{getHeader:Rg.bind(null,r),getZxy:Gg.bind(null,r)}}function Zg(e,t){xn(e,{ariaLabel:"COG raster",...t,archive:t.archive||jg(new URL(t.url,document.baseURI).href,t.asset)})}function $g(e){switch(e){case"geojson":return ug;case"pmtiles":return xn;case"cog":return Zg;case"terrain":return Td;case"traffic":return Ch;default:return null}}function Vg(){let e=$n.shift();return e.initialize=$g(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function Hg(e){let{layer:t,ready:r}=e;if(e.error)return si(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),delete m.get(t).kind,e.initialize(t,e.settings),o?.addLayer(t),m.get(t).ready===r?t:m.get(t).ready}catch(o){throw t.fire("error",{error:o}),o}}function qg(e=Yt){if(m.has(this)||m.set(this,{}),Object.getPrototypeOf(this)!==g.Layer.prototype||!e?.source){if(st.value.initialize)return st.value.initialize.apply(this,arguments);g.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(g.Util.setOptions(this,o),m.get(this)._type=t,t==="3d"){Se(this,i);return}m.get(this).kind="pending";let n={layer:this,type:t,settings:i,ready:null};$n.push(n),Vn.value=Vn.value.catch(ge).then(Vg);let a=m.get(this).ready=Vn.value.then(Hg);n.ready=a,a.catch(ge)}L();function Wg(e,t){switch(m.get(e).kind){case"3d":return hr(e,t);case"raster":return id(e,t);case"terrain":return sd(e,t);case"time":return Od.call(e,t)}}function Yg(e){let t=g.Util.stamp(e);return this._layers[t]?m.get(e).kind?(this._loaded&&Wg(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):so.value.call(this,e):this}F();function Xg(){return E(this)}G();function Kg(){return S(this)}function Jg(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Pe(e),e}function Qg(e){return Jg(this,e)}function kg(){m.has(this)||m.set(this,{});let e=this._initHooksCalled;ao.value.call(this),e||mg.call(this)}st.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(g.Layer.prototype));ao.value=g.Layer.prototype.callInitHooks;g.Layer.include({initialize:qg,_layerAdd:cg,callInitHooks:kg});so.value=g.Map.prototype.removeLayer;g.Map.include({removeLayer:Yg,getPitch:Xg,getBearing:Kg});g.Marker.include({setRotation:Qg});})();
|
|
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});})();
|
|
5
5
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|