leaflet-city-mapper 0.0.4 → 0.0.6
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 +3546 -2493
- 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-lens.js +15 -3
- 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/collectIntersections.js +16 -0
- package/src/collision/collider.js +24 -9
- package/src/collision/countCrossings.js +15 -0
- package/src/collision/insideMesh.js +33 -0
- package/src/collision/insideWalker.js +46 -0
- package/src/collision/readTriangle.js +7 -4
- package/src/collision/setTrafficNormal.js +9 -0
- package/src/collision/trafficCollision.js +55 -0
- package/src/collision/vertexCount.js +3 -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 +14 -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 +21 -22
- package/src/sources/buildAreaFeature.js +16 -10
- package/src/sources/buildAreaFeatures.js +14 -0
- package/src/sources/buildAreaPoint.js +3 -21
- package/src/sources/extrusionStyle.js +2 -2
- package/src/sources/initializeGeoJSON.js +3 -2
- package/src/sources/matchesAreaTile.js +7 -0
- package/src/sources/pendingSourceAreas.js +3 -2
- package/src/sources/prepareAreaGeometryJob.js +24 -0
- package/src/sources/projectAreaPolygons.js +15 -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 -19
- 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/walk/updateWalkerFrame.js +19 -0
- package/src/weakmaps/addedByLayer.js +1 -0
- package/src/weakmaps/archiveHeaderByLayer.js +1 -0
- package/src/weakmaps/areasByLayer.js +1 -0
- package/src/weakmaps/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 +29 -0
- package/src/workers/buildAreaInWorker.js +40 -0
- package/src/workers/closeGeometryWorkers.js +11 -0
- package/src/workers/createGeometryWorker.js +19 -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 L0=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 B0=(e,t)=>{for(var r in t)L0(e,r,{get:t[r],enumerable:!0})};var h,b=M(()=>{h=globalThis.L});var T,X=M(()=>{T=Math.PI/180});var He,Yr=M(()=>{He=180/Math.PI});var nn,qs=M(()=>{nn=new WeakMap});function k(e){return nn.get(e)??0}var H=M(()=>{qs()});var an,Hs=M(()=>{an=new WeakMap});function S(e){return an.get(e)??0}var W=M(()=>{Hs()});var bo,ta=M(()=>{bo=Object.freeze({})});var je,oa=M(()=>{je=new WeakMap});function ia(){let e=this.getSize().y,t=k(this)*T,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&&!je.get(this)&&(je.set(this,h.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),je.get(this).setAttribute("aria-hidden","true"),je.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))"),je.get(this)&&(je.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",je.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,je.get(this).style.display=i>0?"":"none")}var ym=M(()=>{oa();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 nn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),an.set(e,(r%360+360)%360),e._loaded&&(ia.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==k(e)&&e.fire("pitch",{pitch:k(e)})),e}var or=M(()=>{Hs();qs();H();W();ym()});var Ot,na=M(()=>{Ot=new WeakMap});var Lo,aa=M(()=>{Lo=new WeakMap});var nr,sa=M(()=>{nr=new Map});var gt,ma=M(()=>{gt={value:null}});function Bo(e){nr.delete(e),Ot.set(e,null),Lo.set(e,null),!nr.size&>.value!==null&&(cancelAnimationFrame(gt.value),gt.value=null)}var fa=M(()=>{na();aa();sa();ma()});var kr,ca=M(()=>{kr=new WeakMap});var To,xm=M(()=>{To=new WeakMap});var xi,vm=M(()=>{xi=new WeakMap});var ar,vi=M(()=>{ar=new WeakMap});var sr,wi=M(()=>{sr=new WeakMap});var wm,_l=M(()=>{wm={value:void 0}});var Mm,Il=M(()=>{Mm={value:void 0}});var bm,zl=M(()=>{bm={value:void 0}});var Lm,Al=M(()=>{Lm={value:void 0}});var la,Ol=M(()=>{la={value:void 0}});var yt,Po=M(()=>{yt=new WeakMap});var _r,ua=M(()=>{_r=new Set});var Mi,Bm=M(()=>{Mi=Object.freeze({capture:!0,passive:!1})});function Tm(){this._map.fire("cameratouchchange")}var Dl=M(()=>{});var Co,da=M(()=>{Co=Object.freeze([.8,.5])});var Rl,Gl=M(()=>{Rl=Object.freeze([.8,0])});var ha,Pm=M(()=>{ha=Object.freeze({preventScroll:!0})});var ga,Cm=M(()=>{ga=Object.freeze({animate:!0})});function Ul(e){gt.value=null;let t=[...nr];nr.clear();let r,o,i,n,a;for([o,i]of t)if(Lo.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?ya(o,i):Ot.get(o)===i&&Ot.set(o,null)}catch(s){r||=s}}if(r)throw r}var Fl=M(()=>{na();aa();ma();sa();or();Sm()});function ya(e,t){nr.set(e,t),gt.value===null&&(gt.value=requestAnimationFrame(Ul)),Lo.set(e,gt.value)}var Sm=M(()=>{aa();sa();ma();Fl()});function So(e,t,r,o=bo){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),ya(e,f),e}var xa=M(()=>{na();ta();or();H();W();fa();Sm()});function Nl(e,t=ga){return So(e,0,0,t)}var jl=M(()=>{Cm();xa()});function Dt(e,t,r){return So(e,k(e),t,r)}var bi=M(()=>{xa();H()});function Wl(e,t=ga){return Dt(e,0,t)}var Zl=M(()=>{Cm();bi()});function $l(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Nl(r):Wl(r),e.detail&&r.getContainer().focus(ha)}var Vl=M(()=>{Pm();jl();Zl()});function Ir(e,t,r){return So(e,t,S(e),r)}var va=M(()=>{xa();W()});function ql(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)Ir(r,k(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Ir(r,k(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Hl=M(()=>{bi();W();va();H()});function wa(){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*T))))}) 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 Em=M(()=>{X();H();W()});var Ae,mr=M(()=>{Ae={value:new WeakMap}});var zr,Ma=M(()=>{zr={value:new Set}});function ba(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var km=M(()=>{});function La(e){let t=Ae.value.get(this);if(t.drag||!t.accept(e)||ba(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?.(ha),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var _m=M(()=>{mr();Pm();km()});function Ba(e){return Bo(e),e}var Im=M(()=>{fa()});function Ta(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;Ba(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 zm=M(()=>{Yr();mr();Im();or();H();W()});function Eo(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 Pa=M(()=>{});function fr(e){Eo(Ae.value.get(this),e)}var Am=M(()=>{mr();Pa()});function Ca(e){let t=Ae.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var Om=M(()=>{mr()});function Sa(e){let t=Ae.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var Dm=M(()=>{mr()});function Ea(){let e;for(e of zr.value)Eo(e)}var Rm=M(()=>{Ma();Pa()});function ka(e,t,r,o=Co,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ae.value.set(t,n),zr.value.add(n),t.addEventListener("pointerdown",La,!0),t.addEventListener("pointermove",Ta),t.addEventListener("pointerup",fr),t.addEventListener("pointercancel",fr),t.addEventListener("lostpointercapture",fr),t.addEventListener("click",Ca,!0),t.addEventListener("contextmenu",Sa),window.addEventListener("blur",Ea),n}var Gm=M(()=>{da();mr();Ma();_m();zm();Am();Om();Dm();Rm()});function Yl(e){return e.button===0}var Xl=M(()=>{});function Kl(){wa.call(this._rotateControl)}var Jl=M(()=>{Em()});function Ql(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=$l,r.onkeydown=ql,this._refresh=wa,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=ka(e,r,Yl,this.options.visualizePitch?Co:Rl),r.addEventListener("focusout",Kl),h.DomEvent.on(r,"dblclick contextmenu",h.DomEvent.stop),h.DomEvent.disableClickPropagation(t),h.DomEvent.disableScrollPropagation(t),t}var eu=M(()=>{b();da();Gl();Vl();Hl();Em();Gm();Xl();Jl()});function tu(e){Eo(e);let{element:t}=e;t.removeEventListener("pointerdown",La,!0),t.removeEventListener("pointermove",Ta),t.removeEventListener("pointerup",fr),t.removeEventListener("pointercancel",fr),t.removeEventListener("lostpointercapture",fr),t.removeEventListener("click",Ca,!0),t.removeEventListener("contextmenu",Sa),Ae.value.delete(t),zr.value.delete(e),zr.value.size||window.removeEventListener("blur",Ea)}var ru=M(()=>{mr();Ma();Pa();_m();zm();Am();Om();Dm();Rm()});function _a(){tu(this._dragState)}var Um=M(()=>{ru()});function ou(e){e.off("rotate pitch",this._refresh,this),_a.call(this)}var iu=M(()=>{Um()});function nu(e){return new h.Control.Rotate(e)}var au=M(()=>{b()});function su(e){let t=this._cameraShiftRotate;!e.shiftKey||ba(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),Dt(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var mu=M(()=>{bi();W();km()});function fu(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=su,e.addEventListener("wheel",this._wheel,Mi)}var pu=M(()=>{Bm();mu()});function cu(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var lu=M(()=>{});function uu(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var du=M(()=>{});function hu(){this._dragState=ka(this._map,this._map.getContainer(),uu,Co,!0)}var gu=M(()=>{da();Gm();du()});function yu(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 xu=M(()=>{bi()});function Fm(e,t){e.disable(),e._map.fire("error",{error:t})}var vu=M(()=>{});function wu([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 Fm(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){Fm(r,i)}}}var Mu=M(()=>{vu()});function bu(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:yu};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(wu)}var Lu=M(()=>{xu();Mu()});function Bu(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var Tu=M(()=>{});function Pu(e){e[0]?.target._containerResizeMap.invalidateSize()}var Cu=M(()=>{});function Su(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Pu),this._observer.observe(e)}var Eu=M(()=>{Cu()});function ku(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var _u=M(()=>{});function Ia(e){let t=yt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!sr.get(r).enabled()&&!ar.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Ba(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 Nm=M(()=>{vi();wi();b();Po();Im();W();H()});function za(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,ar.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,sr.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 jm=M(()=>{vi();wi();Yr();Po();or()});function pr(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 Li=M(()=>{});function ko(e){pr(yt.get(this),e)}var Wm=M(()=>{Po();Li()});function Bi(){let e=kr.get(this),{map:t,container:r}=e,o=sr.get(t).enabled()||ar.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(pr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var Zm=M(()=>{ca();vi();wi();Li()});function Aa(){let e;for(e of _r)pr(e)}var $m=M(()=>{ua();Li()});function Iu(){let e=kr.get(this);if(!e)return;let{container:t,map:r}=e;pr(e),t.removeEventListener("touchstart",Ia,!0),t.removeEventListener("touchmove",za,!0),t.removeEventListener("touchend",ko,!0),t.removeEventListener("touchcancel",ko,!0),_r.delete(e),_r.size||window.removeEventListener("blur",Aa),r.off("cameratouchchange",Bi,r),xi.get(r)?.remove(),yt.delete(t),kr.delete(r)}var zu=M(()=>{ca();vm();ua();Po();Li();Nm();jm();Wm();$m();Zm()});function Ar(e,t,r){let o=To.get(e);o||To.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Au=M(()=>{xm()});var Ou={};B0(Ou,{cameraControls:()=>T0});function T0(e){if(Ar(e,"trackContainerMutation",Mm.value),!e.options.rotate)return;Ar(e,"shiftKeyRotate",Lm.value),Ar(e,"pitchDrag",bm.value),Ar(e,"compassBearing",wm.value),Ar(e,"touchRotate",la.value),Ar(e,"touchPitch",la.value),sr.set(e,To.get(e).get("touchRotate")),ar.set(e,To.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};kr.set(e,r),yt.set(t,r),_r.add(r),t.addEventListener("touchstart",Ia,Mi),t.addEventListener("touchmove",za,Mi),t.addEventListener("touchend",ko,!0),t.addEventListener("touchcancel",ko,!0),window.addEventListener("blur",Aa),e.on("cameratouchchange",Bi,e),Bi.call(e),e.options.rotateControl&&(xi.set(e,new h.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:bo)),xi.get(e).addTo(e)),e.once("unload",Iu,e)}var Du=M(()=>{ca();xm();vm();vi();wi();b();_l();Il();zl();Al();Ol();Po();ua();Bm();ta();Dl();eu();iu();au();pu();lu();gu();Um();Lu();Tu();Eu();_u();Nm();jm();Wm();Zm();zu();$m();Au();wm.value=h.Handler.extend({addHooks:bu,removeHooks:Bu});Mm.value=h.Handler.extend({addHooks:Su,removeHooks:ku});bm.value=h.Handler.extend({addHooks:hu,removeHooks:_a});Lm.value=h.Handler.extend({addHooks:fu,removeHooks:cu});la.value=h.Handler.extend({addHooks:Tm,removeHooks:Tm});h.Control.Rotate=h.Control.extend({options:{position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0},onAdd:Ql,onRemove:ou});h.control&&(h.control.rotate=nu)});b();var Br={value:void 0};var Vi={value:void 0};var qi={value:void 0};b();var j={value:void 0};var Ve={value:void 0};var Hi={value:void 0};var Yi={value:void 0};var Xi={value:void 0};var Ki={value:void 0};var Ji={value:void 0};var Qi={value:void 0};var en={value:void 0};var xe=new WeakMap;var re=new WeakMap;var qr=new WeakMap;var qt=new WeakMap;b();b();var z=new WeakMap;var pt=new WeakMap;function ii(e){let t=pt.get(e.currentTarget);if(!t)return;let r;for(r of t)qe(r)}function ni(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 tn(e,t){let r=pt.get(e);r&&(r.delete(t),r.size||pt.delete(e))}function yf(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 G=new WeakMap;var v=new WeakMap;var Q=new WeakMap;var _t=new WeakMap;var Ht=new WeakMap;var tt=new WeakMap;var rn=[null];var Hr=new WeakMap;var ce=new WeakMap;var Ue=new WeakMap;var xf={subtree:!0};var ke=new WeakMap;b();function on(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 vf(e,t){let r=e._map,o=Ue.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)}),on(r)}function wf(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(xf))!(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);Ue.get(e)&&vf(e,t)}}var Yt=new WeakMap;var ai={size:[null,null],format:"depth24plus",usage:null};async function Mf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function F(e,t){Mf(e,t,v.get(e).device.queue.onSubmittedWorkDone())}function bf(e,t){(!Yt.get(e)||!Yt.get(e).equals(t))&&(v.get(e).width=t.x,v.get(e).height=t.y,v.get(e).canvas.width=Math.round(t.x*v.get(e).dpr),v.get(e).canvas.height=Math.round(t.y*v.get(e).dpr),v.get(e).canvas.style.width=`${t.x}px`,v.get(e).canvas.style.height=`${t.y}px`,v.get(e).depthTexture&&F(e,v.get(e).depthTexture),v.get(e).depthTexture=v.get(e).device.createTexture((ai.size[0]=v.get(e).canvas.width,ai.size[1]=v.get(e).canvas.height,ai.usage=GPUTextureUsage.RENDER_ATTACHMENT,ai)),Yt.set(e,t))}var J=new WeakMap;var ne=new WeakMap;X();Yr();var Lf=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 si(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 Tf(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=si(t,i,n),f=si(t,i+1,n),p=si(t,i,n+1),c=si(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))??Tf(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 Pf=Math.PI/360;function Xr(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*Pf),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 w=e.projectionViewTransform;w.m11=x.m11,w.m12=x.m12,w.m13=x.m13,w.m14=x.m14,w.m21=x.m21,w.m22=x.m22,w.m23=x.m23,w.m24=x.m24,w.m31=x.m31,w.m32=x.m32,w.m33=x.m33,w.m34=x.m34,w.m41=x.m41,w.m42=x.m42,w.m43=x.m43,w.m44=x.m44,w.multiplySelf(u),f[0]=w.m11,f[1]=w.m12,f[2]=w.m13,f[3]=w.m14,f[4]=w.m21,f[5]=w.m22,f[6]=w.m23,f[7]=w.m24,f[8]=w.m31,f[9]=w.m32,f[10]=w.m33,f[11]=w.m34,f[12]=w.m41,f[13]=w.m42,f[14]=w.m43,f[15]=w.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 Cf(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*T)),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)*T,l=S(r)*T,u=J.get(e);u.fov=Lf,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,Xr(u)}var Tr=new WeakMap;function Sf(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}Yr();function Ef(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=Sf(e,i),!i){for(n of e.children)we(n);return}let a,s;e.matrix?a=e.matrix:a=Ef(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 kf(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 Ys(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),kf(e,r,o,i,n));let s;for(s of e.children)Ys(s,t,r,o,i,n,a)}function _f(e,t,r){let i=J.get(e).projectionViewMatrix,n=v.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=Tr.get(e);u||Tr.set(e,u=[]),u.length=0;let d=_t.get(e);d||_t.set(e,d=[]),d.length=0,r&&we(Q.get(e)),Ys(Q.get(e),t,i,a,s,u,d)}var I=new WeakMap;var A=new WeakMap;var Y=new WeakMap;var mi=new WeakMap;var se=new WeakMap;var Te=new WeakMap;b();var If=[];X();var zf=[];var Af={x:0,y:0};var Of={x:1,y:1};var Df={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 Kr={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 Rf={magFilter:"linear",minFilter:"linear"};function Gf(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(Df);e.roofBlit={pipeline:t.createRenderPipeline((Kr.vertex.module=r,Kr.fragment.module=r,Kr)),sampler:t.createSampler(Rf)},Kr.vertex.module=null,Kr.fragment.module=null}}var sn={size:null,usage:null};var mn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var fn={source:null};var pn={texture:null};var cn=[null,null];function Uf(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((fn.source=t.image,fn),(pn.texture=r.texture,pn),(cn[0]=r.texture.width,cn[1]=r.texture.height,cn)),fn.source=null,pn.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 ln=[null];var un={value:new Float32Array(64)};function Ff(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Nf(e,t,r,o,i,n,a){let s=v.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;un.value.length<p&&(un.value=new Float32Array(p));let c=un.value,l=m.createBuffer((sn.size=c.byteLength,sn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,sn)),u=m.createCommandEncoder(),d=u.beginRenderPass((mn.colorAttachments[0].view=Y.get(e).texture.texture.createView(),mn));mn.colorAttachments[0].view=null,d.setPipeline(s.roofBlit.pipeline),t.sort(Ff);let y,g,x,w,C,B,P,D;for([y,{tile:g,layer:x}]of t.entries())({coords:w}=g),C=g.texture,Uf(m,g),c[y*64]=x.options.opacity,B=256*f.getZoomScale(r,w.z),P=(w.x*B-o.x)*n/i.x,D=(w.y*B-o.y)*a/i.y,d.setViewport(P,D,Math.min(B*n/i.x,n-P),Math.min(B*a/i.y,a-D),0,1),d.setBindGroup(0,m.createBindGroup((ot.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ot.entries[0].resource=C.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((ln[0]=u.finish(),ln)),ln[0]=null,l.destroy()}function jf(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 Wf={size:[null,null],format:"rgba8unorm",usage:null};var Zf={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function $f(e,t,r,o){let i=v.get(e),n=Wf;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(Zf),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Vf(e,t,r,o){let i=e._map,n=v.get(e),a=zf;a.length=0;let s=jf(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=Af,g=Of;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)),w=Math.max(1,Math.ceil(g.x*x)),C=Math.max(1,Math.ceil(g.y*x)),B=i.options.crs.scale(s)/(Xt*Math.cos(ne.get(e).lat*T)),P={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,P),P.signature=r,P.updatedAt=o,P.matrix[0]=B/g.x,P.matrix[10]=B/g.y,P.matrix[12]=(d.x-y.x)/g.x,P.matrix[14]=(d.y-y.y)/g.y,$f(e,P,w,C),Gf(n);try{Nf(e,a,s,y,g,w,C)}finally{a.length=0}}function qf(e,t,r){let o=If;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))&&Vf(e,t,a,r)}function Hf(e,t){let r=e._map,o=mi.get(e);o||mi.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of G.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);qf(e,o,t)}else Y.get(e)&&(F(e,Y.get(e).texture.texture),Y.set(e,null));return o}function Yf(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 Xf(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)||Yf(e,t)}var R=new WeakMap;var Qt=new WeakMap;X();function Kf(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*T)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,d,y,g,x,w,C,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,w=s.y+(n[2]*d+n[6]*y+n[10]*g+n[14])*m,f=Math.min(f,x),p=Math.min(p,w),c=Math.max(c,x),l=Math.max(l,w);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&&(C=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,C.x),p=Math.max(p,C.y),c=Math.min(c,B.x),l=Math.min(l,B.y),f>=c||p>=l)?null:[f,p,c,l]}function Jf(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 Qf(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=Kf(e,t,n),!!a){o=!0,s=[a];for(m of A.get(n).values())if(!(!m.done&&!m.error)&&(s=Jf(s,m,Qt.get(n)),!s.length))return!0}}return!o&&!i}function ep(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=Qf(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 tp(e,t,r,o){let i=Tr.get(e),n=_t.get(e),a=v.get(e),s=!1,m,f;for(m of i)ep(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(Xf);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 dn={size:null,usage:null};function rp(e,t,r){let o=v.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((dn.size=Math.max(64,t.length*4+r.length*2)*256,dn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,dn)),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 hn(e){let t=v.get(e).sunlight;t.bindGroup=v.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 op(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 ip(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?op(e,t,u,a,s):a[u]++}function Xs(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)ip(s,m,t,r,o,i,n,a)}function np(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);Xs(e,f,p,s,u,y);let x=0;for(n of y)x+=n;let w=(2+u*d+x*2)*4;if(w*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(w),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=d,m[5]=r;let C=2+u*d;for(a=0;a<y.length;a++)y[a]&&(m[(2+a)*4]=g[a]=C,m[(2+a)*4+1]=y[a],C+=y[a]*2);Xs(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var ap=.03/(4*Math.PI);function sp(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*ap;return r}function Ks(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:sp(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{...np(c,r),meshes:l}}var it=[];function Js(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)Js(o,t,r)}function mp(e){let{device:t,sunlight:r}=v.get(e),o=[],i=[],n;for(n of G.get(e))!n.options.nightLight||!L.get(n).visible||Js(L.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=Ks(o,r.staticLightGrid,a),m=Ks(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}),hn(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 fp(e,t,r,o){let i=v.get(e),n=J.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;rp(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 w=o?.tint;g[56]=w?w[0]:1,g[57]=w?w[1]:1,g[58]=w?w[2]:1,g[59]=0,x>0&&mp(e),i.uniformSlot=1}var Jr={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 Qs=[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 pp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function cp(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?pp: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 lp(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 up(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,lp(e,t,n),o}var Pr={source:null,flipY:null};var Qr={texture:null};var eo=[null,null];function dp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Pr.source=t.image,Pr.flipY=!!t.flipY,Pr),(Qr.texture=t.texture,Qr),(eo[0]=t.image.width,eo[1]=t.image.height,eo)),Pr.source=null,Qr.texture=null,t.uploaded=t.image)}var to={layout:null,entries:null};var hp=[];var gn={binding:0,resource:{buffer:null,size:160}};var yn={binding:1,resource:{buffer:null,size:240}};var xn={binding:2,resource:null};var fi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var pi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function gp(e,t,r){let{program:o}=t,i=hp;i.length=0,gn.resource.buffer=e.uniformBuffer,yn.resource.buffer=e.uniformBuffer,i.push(gn,yn),o.terrain&&(xn.resource=o.terrain.texture.createView(),i.push(xn)),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],fi[a].binding=s.texture,fi[a].resource=m.texture.createView(),pi[a].binding=s.sampler,pi[a].resource=m.sampler,i.push(fi[a],pi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((to.layout=o.bindGroupLayout,to.entries=i,to)),to.layout=null,to.entries=null,gn.resource.buffer=null,yn.resource.buffer=null,xn.resource=null,a=0;a<r.length;a++)fi[a].resource=null,pi[a].resource=null;i.length=0}function yp(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}`);dp(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&&gp(e,t,i)}function vn(e,t,r,o,i){let{geometry:n}=t,a=v.get(e),{device:s}=a,m=cp(a,t,o,i),f=up(a,t);yp(a,t),r.setPipeline(m),r.setBindGroup(0,t.bindGroup,(Qs[0]=f,Qs)),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 xp(e,t,r){let o=v.get(e),i=t.beginRenderPass((Jr.colorAttachments[0].view=o.context.getCurrentTexture().createView(),Jr.depthStencilAttachment.view=o.depthTexture.createView(),Jr));Jr.colorAttachments[0].view=null,Jr.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?(vn(e,n,i,"front",f),vn(e,n,i,"back",f)):vn(e,n,i,p.cullMode,f)}i.end()}var vp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var wp=new Float32Array(20);function Mp(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 bp(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(!Mp(o,a)){i=!1;break}}return i}var Lp={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 Tp=[0,0,0];var Pp=[0,0,0];function Cp(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 Sp(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=Cp(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 Ep(e,t){let{min:r,max:o}=Sp(e,Lp),i=Bp;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=Tp,a=Pp,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,Xr(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]),w=new Float32Array(16);for(s=0;s<16;s+=4)w[s]=d[s]*y,w[s+1]=d[s+1]*g,w[s+2]=d[s+2]*x,w[s+3]=d[s+3];return w[12]-=(a[0]+n[0])/(a[0]-n[0]),w[13]-=(a[1]+n[1])/(a[1]-n[1]),w[14]+=a[2]/(a[2]-n[2]),w}var em={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var tm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var ro={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var wn={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 oo={bindGroupLayouts:[null,null]};var io=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Mn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var kp=[io,Mn];var _p=[io];function rm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((em.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,em)),t.depthLayout=e.createBindGroupLayout((tm.entries[0].visibility=GPUShaderStage.VERTEX,tm)),t.depthBindGroup=e.createBindGroup((ro.layout=t.depthLayout,ro.entries[0].resource.buffer=t.buffer,ro)),ro.layout=null,ro.entries[0].resource.buffer=null);let i=e.createShaderModule((wn.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;}}`,wn));wn.code=null;let n=r?kp:_p;t[o]=e.createRenderPipeline((lt.layout=e.createPipelineLayout((oo.bindGroupLayouts[0]=t.meshLayout,oo.bindGroupLayouts[1]=t.depthLayout,oo)),lt.vertex.module=i,lt.vertex.buffers=n,lt.fragment.module=i,lt)),oo.bindGroupLayouts[0]=null,oo.bindGroupLayouts[1]=null,lt.layout=null,lt.vertex.module=null,lt.vertex.buffers=null,lt.fragment.module=null}}var bn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var no={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var om=[null];function Ip(e,t,r){let o=v.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((bn.depthStencilAttachment.view=n.texture.createView(),bn));bn.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((no.layout=n.meshLayout,no.entries[0].resource.buffer=o.uniformBuffer,no)),no.layout=null,no.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,(om[0]=c,om)),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 ci={size:[null,null],format:"depth32float",usage:null};function Ln(e,t){let r=v.get(e).device,o=v.get(e).sunlight;o.size!==t&&(o.texture&&F(e,o.texture),o.size=t,o.texture=r.createTexture((ci.size[0]=t,ci.size[1]=t,ci.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,ci)),hn(e))}function zp(e,t,r,o){let i=v.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,vp),a.enabled=!1,a.cache=null;return}if(bp(a,r,o))return;let s=wp;a.enabled=!0,Ln(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(Ep(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),rm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){rm(n,a,!0);break}Ip(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 Bn(e){let t=et.get(e);kt.delete(e),et.set(e,null),!kt.size&&t!=null&&cancelAnimationFrame(t)}var zt=new WeakMap;var li=new WeakMap;var ui=new WeakMap;var me=new WeakMap;var Tn=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 ao(e,t){Tn.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 so(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)&&ao(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 mo(e){let t=Ht.get(e),r=performance.now();if(li.get(e)===Te.get(e)&&ui.get(e)===t&&r<zt.get(e))return Number.isFinite(zt.get(e));li.set(e,Te.get(e)),ui.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||so(e,n)}return Number.isFinite(zt.get(e))}b();function fo(e){return xe.get(e.source)===e&&e.map.hasLayer(e.source)}b();var Pn=Object.freeze([1,1,1]);var Cr=new WeakMap;b();function Cn(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+(Cr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var Ap=Object.freeze([0,2,1,1,2,3]);var im=Object.freeze([0,0,1,0,0,1,1,1]);var Op=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 Rp(e,t,r,o,i,n,a){let s;try{if(s=await createImageBitmap(o),!fo(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 Gp(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 Up(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}=v.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(Op)},i.set(t,a),r instanceof HTMLCanvasElement?(a.pending=!0,Rp(e,t,a,r,p,m,f)):Gp(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}b();var po=Object.freeze({});var Sn={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 En={code:null};var kn={code:null};var co={bindGroupLayouts:[null,null]};var Fp=" 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 Np=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var jp=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Wp=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var _n={entries:null};var Zp=[];var nm={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var am={binding:1,visibility:null,buffer:{type:"uniform"}};var sm={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var $p=[{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 Vp=[{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 qp(e,t){let r=Zp;r.length=0,nm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,am.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(nm,am),t.hasTerrain&&(sm.visibility=GPUShaderStage.VERTEX,r.push(sm));let o,i,n=0;for(o of t.bindings)i=$p[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Vp[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((_n.entries=r,_n));return _n.entries=null,a}function Hp(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 lo(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 Yp(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 Xp(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 Kp(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?Xp(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Jp(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 Qp(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"});`:`${Jp(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 ec(e=po,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);Yp(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Kp(e,t,r,m,f,s),c=[],l=lo(c,"baseTexture",o),u=lo(c,"metalTexture",i),d=lo(c,"emissiveTexture",n),y=lo(c,"occlusionTexture",a),g=lo(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);${Qp(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:x,bindings:c,textured:f,hasTerrain:m}}async function tc(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=po){let r=ec(t,!!e.options.nightSparkle,t.terrain?Fp:""),o=v.get(e).device.createShaderModule((En.code=r.vertex,En));En.code=null;let i=v.get(e).device.createShaderModule((kn.code=r.fragment,kn));kn.code=null,tc(e,[o.getCompilationInfo(),i.getCompilationInfo()]);let n=[io,Np,t.vertexColors?jp:null,r.textured?Wp:null];t.instanced&&n.push(Mn);let a=qp(v.get(e).device,r),s=v.get(e).device.createPipelineLayout((co.bindGroupLayouts[0]=a,co.bindGroupLayouts[1]=v.get(e).sunlight.layout,co));co.bindGroupLayouts[0]=null,co.bindGroupLayouts[1]=null;let m=Hp(t);return{device:v.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=po,o=0,i){let{device:n}=v.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((Sn.size=Math.max(4,f.byteLength),Sn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Sn)),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 In(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 Cn(e,p,o,i),p}function uo(e,t,r,o,i){let n=Up(e,t,r);if(!n)return;let a=Ap,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(im[f*2],im[f*2+1]);return In(e,t,s,Pn,i,n,m)}var O=new WeakMap;X();function ho(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(O.get(o)),a=i.project(t),s=Math.cos(O.get(o).lat*T);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function zn(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(ho(e,i));return r}function oc(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,Cn(e,m,Pn,a)):([f,p]=t._tileCoordsToNwSe(n.coords),m=uo(e,i,n.el,zn(e,new h.LatLngBounds(f,p)),a)),m&&(m.renderOrder+=n.coords.z/100)))}function ic(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&uo(e,"image",t._image,zn(e,t.getBounds()),t.options.opacity??1)}var nc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);b();X();W();function An(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*T: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 di(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 ac(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 sc(e,t,r){let{source:o,map:i,backend:n}=e,a=ho(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=J.get(n).projectionViewMatrix,d,y;for(d=0;d<16;d++)y=nc[d],f[y]=l[d],p[y]=u[d];di(c,f,a[0],a[1],a[2],1),di(c,p,c.x,c.y,c.z,c.w);let g=c.x,x=c.y,w=c.z,C=c.w;p.invertSelf(),f.invertSelf();let[B,P,D,te]=ac(e,t,r),U=(g/C+1)*s.x/2,N=(1-x/C)*s.y/2,K=U-D,pe=N-te,ye=[],Qe,Le,ft,Ge,oi;for(d=0;d<4;d++)Qe=K+(d%2?B:0),Le=pe+(d<2?0:P),ft=An(o,Qe-U,Le-N),Ge=U+ft.x,oi=N+ft.y,di(c,p,Ge/s.x*2-1,1-oi/s.y*2,w/C,1),di(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 mc(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=uo(e,o,i,sc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}var go=[];b();b();function Fe(e,t,r,o,i){return t.push(...e(r),...e(o),...e(i))}b();var hi=2*Math.PI;b();function mm(e,t,r,o,i){return new h.Point(e.x+t*Math.cos(i*hi/o),e.y+r*Math.sin(i*hi/o))}function Sr(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++)Fe(e,o,t,mm(t,r,i,n,a),mm(t,r,i,n,a+1))}function On(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)))),Fe(m,s,t.add(l),t.subtract(l),r.add(l)),Fe(m,s,r.add(l),t.subtract(l),r.subtract(l)),n.lineCap==="round"&&(o&&Sr(m,t,f,s),i&&Sr(m,r,f,s))}b();function fc(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"){Sr(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),w=f.add(g.multiplyBy(p)),C=f.add(x.multiplyBy(p)),B=1+g.x*x.x+g.y*x.y,P=B>0?g.add(x).multiplyBy(p/B):null;Fe(s,m,w,f,C),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Fe(s,m,w,f.add(P),C)}function pc(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),On(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),s=p}}function Dn(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?pc(e,p,c,l,a,s):(On(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&fc(e,t,f,c,l)),a+=l}function cc(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function lc(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 uc(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:cc(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)lc(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 dc(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 Rn(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 hc(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=dc(t.slice(o,o+=n.length)),Rn(a)!==!!i&&a.reverse(),r.push(a);return r}function Gn(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 gc(e,t){let r;for(r=1;r<t.length;r++)if(Gn(e,t[r]))return!0;return!1}function gi(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 yc(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&&gi(e,t,r)||n===0&&gi(e,t,o)||a===0&&gi(r,o,e)||s===0&&gi(r,o,t)}function fm(e,t,r){let o;for(o=0;o<r.length;o++)if(yc(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function xc(e,t,r,o){if(fm(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(fm(e,t,o[i]))return!0;return!1}function vc(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,!(!Gn(o,r[0])||gc(o,r))&&(xc(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 wc(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 Mc(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)&&!wc(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 pm(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 bc(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=pm(e[n]);let s=pm(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 yo(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=hc(r,s),f=m[0].slice(),p=uc(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=vc(f,a,m,c);let l=Mc(f);return bc(m,s,l),l}function cm(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 yo(l[0],l.slice(1)))Fe(n,i,u[c[0]],u[c[1]],u[c[2]])}for(m of s)Dn(e,m,r)}function lm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof h.LatLng)cm(e,[t],r);else if(r&&t[0][0]instanceof h.LatLng)cm(e,t,r);else for(o of t)lm(e,o,r)}function Lc(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*hi/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&&Sr(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));Dn(t,y,!0)}else if(a.stroke&&m>0)for(u=0;u<d;u++)Fe(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)),Fe(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 Tc(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=Lc(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;lm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Pc(e,t){return ho(e,e.map.unproject(t))}function Cc(e){return Pc(go[go.length-1],e)}function Un(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function Fn(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:Un(Fn(0,e.h,e.l,n)),g:Un(Fn(8,e.h,e.l,n)),b:Un(Fn(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 Sc(e){let{source:t}=e;go.push(e);let r;try{r=Tc(t,e.map,Cc)}finally{go.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),In(e,a,s,[p,c,l],f??1))}function Ec(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 Nn(e){let{source:t,meshes:r,textures:o}=e;if(!fo(e)||!v.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?oc(e):t instanceof h.ImageOverlay?ic(e):e.marker?mc(e):Sc(e),Ec(e)}function kc(e){try{Nn(e)}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function rr(e){if(Bn(e),z.get(e)!==e||!v.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;wf(e,r),bf(e,o),Cf(e,o),we(Q.get(e));let i=!1,n,a;for(n of G.get(e))a=Hr.get(n),a&&(kc(a),i=!0);let s=tt.get(t);_f(e,s,i);let m=_t.get(e),f=v.get(e),p=Hf(e,r),c=f.frameMeshes||=[];c.length=0;let l=tp(e,p,r,c),u=f.device.createCommandEncoder();fp(e,c,m,s),zp(e,u,m,s),xp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((rn[0]=u.finish(),rn)),rn[0]=null;for(n of G.get(e))Ht.get(n)&&(l=mo(n)||l);(t._animatingZoom||l)&&_(e)}function _c(){let e=[...kt];kt.clear();let t,r;for(r of e)if(et.set(r,null),!(z.get(r)!==r||!v.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(_c)),e}b();function jn(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,jn(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",ii),o.removeEventListener("error",ni),tn(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),yf(o,e),o.addEventListener("load",ii),o.addEventListener("error",ni));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=qr.get(o.map)-1,qr.set(o.map,o.order)),qe(o),n}function Ic(...e){return $("setLatLng",this,e)}function zc(...e){return $("setLatLngs",this,e)}function Ac(...e){return $("addLatLng",this,e)}function Oc(...e){return $("setRadius",this,e)}function Dc(...e){return $("setStyle",this,e)}function Rc(...e){return $("redraw",this,e)}function Gc(...e){return $("setIcon",this,e)}function Uc(...e){return $("setUrl",this,e)}function Fc(...e){return $("setBounds",this,e)}function Nc(...e){return $("setOpacity",this,e)}function jc(...e){return $("setZIndex",this,e)}function Wc(...e){return $("setZIndexOffset",this,e)}function Zc(...e){return $("bringToFront",this,e)}function $c(...e){return $("bringToBack",this,e)}var um={setLatLng:Ic,setLatLngs:zc,addLatLng:Ac,setRadius:Oc,setStyle:Dc,redraw:Rc,setIcon:Gc,setUrl:Uc,setBounds:Fc,setOpacity:Nc,setZIndex:jc,setZIndexOffset:Wc,bringToFront:Zc,bringToBack:$c};b();var xo=Object.freeze({});function Wn(e=xo){return new h.Layer(e)}b();var Er=new WeakMap;var ee=new WeakMap;var dt=new WeakMap;function Vc(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 qc(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)Vc(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 Hc(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 Yc(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 Zn(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function $n(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=Zn(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,d=s?.data[c+2]??0,y=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,x=(a?a.data[p+2]:p+2)*m;r[0]=n.data[y],r[1]=n.data[y+1],r[2]=n.data[y+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+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]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+d),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+d),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+d))}function Xc(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 Kc(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 w=n[0]-r[0],C=n[1]-r[1],B=n[2]-r[2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return 1/0;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(a[0]*D+a[1]*te+a[2]*U)/x;return N<0||P+N>1||Xc(e,t,P,N,s)?1/0:(c*D+l*te+u*U)/x}function Jc(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 Vn(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(Hc(e,f,s,m),!!Yc(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)$n(f,g,i,n,a),x=Kc(f,g,i,n,a,s,m,r),x>0&&x<d&&(d=x,y=g/3);y!==void 0&&o.push(Jc(e,f,s,m,d,y))}return qc(o)}function At(e,t,r){if(t(e,r))return;let o;for(o of e.children)At(o,t,r)}function qn(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Qc(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 vo(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=Qc(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function el(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}=vo(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 tl(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 Hn(e,t,r=L.get(e).children,o=!0){if(!v.get(e))return[];let i=dt.get(e);i&&el(i);let n=e._map.getContainer().getBoundingClientRect();we(Q.get(e)),Xr(J.get(e));let a=ee.get(e).inverse,s=J.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;tl(a),ee.get(e).origin[0]=J.get(e).position[0],ee.get(e).origin[1]=J.get(e).position[1],ee.get(e).origin[2]=J.get(e).position[2],ee.get(e).direction[0]=p/u-ee.get(e).origin[0],ee.get(e).direction[1]=c/u-ee.get(e).origin[1],ee.get(e).direction[2]=l/u-ee.get(e).origin[2];let y=ee.get(e).direction,g=Math.hypot(y[0],y[1],y[2])||1;ee.get(e).direction[0]/=g,ee.get(e).direction[1]/=g,ee.get(e).direction[2]/=g;let x=ee.get(e).meshes;x.length=0;for(d of r)o?At(d,qn,x):d.geometry&&d.visible&&d._appearance!==0&&x.push(d);return Vn(ee.get(e),x,v.get(e).uniformData?.[55])}function rl(){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 ol=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);b();function il(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function nl(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(...Hn(a,t,i.meshes.values(),!1));return o.sort(il),o[0]?.object._nativeSource||null}function Yn(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 al(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)&&Yn(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function dm(e,t=e.type,r){let o=this,i=Er.get(o),n=i.fireDOMEvent,a=ie.get(o);if(!v.get(a)||r||!ol.has(t))return n.call(this,e,t,r);if(al(o,i,e,t))return n.call(this,e,t,r);let s=nl(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&Yn(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function sl(e){let{map:t}=e,r=Er.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=dm,r.restore=rl,Er.set(t,r),t._fireDOMEvent=dm}r.states.add(e),e._nativeEventContext=r}function wo(){qe(this)}function Xn(){this.viewDirty=!0,z.get(this.backend)&&_(this.backend)}function ml(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(),Er.delete(r))}function yi(){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",wo,e),r.off("zoomend",wo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",Xn,e),ml(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",ii),l.removeEventListener("error",ni),tn(l,e);Hr.delete(o),o.remove()}function fl(){this.ready.resolve()}function pl({error:e}){this.ready.reject(e)}function cl({error:e}){this.source.fire("error",{error:e})}async function ll(e){let{source:t,map:r}=e,o=e.backend=Wn({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),qr.get(r)||qr.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",wo,e),r.on("zoomend",wo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",Xn,e),sl(e);let n,a,s;for(n in um)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=um[n]);let m=e.ready=Promise.withResolvers();o.once("ready",fl,e),o.once("error",pl,e),o.on("error",cl,e),qe(e),o.addTo(r);try{await m.promise}catch(f){throw yi.call(e),f}if(!fo(e))return t;Hr.set(o,e);try{Nn(e)}catch(f){throw yi.call(e),f}return _(e.backend),t}function ul(e){xe.get(e.source)===e&&xe.set(e.source,null),e.backend&&yi.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function dl(e){return xe.get(e.source)!==e?e.source:ll(e)}function Kn(e,t){e.fire("error",{error:t})}function Jn(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),jn(r),e.once("remove",ul.bind(null,r)),re.set(e,Promise.resolve().then(dl.bind(null,r))),re.get(e).catch(Kn.bind(null,e))}var Qn=[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 ea(e,t){let r=S(e)*T,o=k(e)*T;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,m=fe(t);if(!s)return m;let[f,p,c,l]=ea(e,Qn),u=m.x-n,d=m.y-a;if(r){let w=i.y*e.options.pitchMaxDistance,C=c*s+l*d,B=C*c>0?d*s/C:-w;o&&(B=Math.max(-w,Math.min(w,B)));let P=u*(s-l*B)/s;return m.x=f*P+p*B+n,m.y=-p*P+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 hl(e){return Ne(this,Jt(this,j.value.layerPointToContainerPoint.call(this,e)))}function gl(e){return j.value.containerPointToLayerPoint.call(this,Jt(this,Ne(this,e,!0),!0))}function yl(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function xl(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Ne(this,r.subtract(fe(e)),!0));return j.value.panBy.call(this,o,t)}b();H();W();function vl(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 wl(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 Mo(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(Ne(e,r,!0,!0));return i}function Ml(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=Mo(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 bl(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(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))))}H();W();b();ta();function hm(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 ra(e,t,r=bo){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]=ea(e,Qn);if(p<0){let b0=a.y;a.y=-s.y,s.y=-b0}let l=e.getSize().y*e.options.pitchMaxDistance,u=hm(a.y,Math.abs(p),n,c,l),d=hm(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,w=a.x*c/n,C=s.x*c/n,B=C-w,P=1/0,D=-1/0,te=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],U,N,K,pe,ye;for(U=0;U<4;U++)N=te[U],K=e.project(N,o).subtract(y),pe=m*K.x-f*K.y,ye=f*K.x+m*K.y,g=Math.min(g,ye),x=Math.max(x,ye),P=Math.min(P,pe+w*ye),D=Math.max(D,pe+C*ye);let Qe=Math.min((d-u)/(x-g),(s.x-a.x-B*u)/(D-P-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),oi=x*Ge-d,hf=g*Ge-u,M0=Math.max(oi,B?(Ge*(D-P)-s.x+a.x)/B:oi),Vs=(Math.min(hf,M0)+hf)/2,gf=(Ge*(P+D)-a.x-s.x-(w+C)*Vs)/2;return y.x+=(m*gf+f*Vs)/Ge,y.y+=(-f*gf+m*Vs)/Ge,{center:e.unproject(y,o),zoom:Le}}function Ll(e,t){return k(this)||S(this)?ra(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 ra(this,e,{padding:fe(r||ht).divideBy(2)}).zoom;e=e instanceof h.LatLngBounds?e:new h.LatLngBounds(e);let o=Mo(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 Tl(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 Pl(){if(!k(this)&&!S(this))return j.value.getBounds.call(this);let e=Mo(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 Cl=new WeakSet;var gm=new WeakMap;or();ym();function Sl(){this.options.maxBounds&&this._panInsideMaxBounds()}var ir=new WeakMap;oa();fa();H();W();function pa(){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(Ne(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function El(){Bo(this),je.get(this)?.remove(),ir.get(this)&&(ir.get(this).off("predrag",pa,this),ir.delete(this))}function kl(){let e=this.dragging?._draggable;e&&(ir.set(this,e),e.on("predrag",pa,this))}async function Ru(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Du(),Ou));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function at(){}function Gu(){if(Cl.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",ia),this.on("rotate pitch",Sl,this),this.once("unload",El,this),this.whenReady(kl,this),(this.options.rotate||this.options.trackContainerMutation)&&(gm.set(this,Ru(this)),gm.get(this).catch(at))}b();function Uu(e){e instanceof h.DivIcon||(e.options.crossOrigin||=!0);let t=Ve.value.setIcon.call(this,e);return this._map&&!(e instanceof h.DivIcon)&&Jn(this,this._map),t}function Fu(){let e=Ve.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}function _o(e,t){return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos())}function Nu(e){Ve.value._setPos.call(this,_o(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=An(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 ju(e){Ve.value._updateZIndex.call(this,e);let t=Cr.get(this)!==e;Cr.set(this,e),t&&xt(this)}var Or=new WeakMap;b();function Wu(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),Or.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}b();H();W();var Ti=new Map;var Io={value:null};function Zu(){Io.value=null;let e=[...Ti];Ti.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function $u(e,t){Ti.set(e,t),Io.value===null&&(Io.value=requestAnimationFrame(Zu)),e._panRequest=Io.value}function Vu(e){let t=this._marker,r=t._map;if(!k(r)&&!S(r))return Or.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),$u(this,e)}function qu(){if(!this.dragging||Or.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Or.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Wu,e._adjustPan=Vu,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Hu(){let e=Ve.value._initInteraction.call(this);return qu.call(this),e}function Yu(){let e=Hi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}function Xu(){let e=Yi.value.call(this);return e.rotate=e.pitch=e.move=this._updatePosition,e}H();W();function Ku(){let e=this._map;if(!k(e)&&!S(e))return Ki.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 Ju(){if(Xi.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=_o(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 Qu(e){Ji.value.call(this,e);let t=_o(this._map,e).subtract(e);h.DomUtil.setPosition(this._container,h.DomUtil.getPosition(this._container).add(t))}b();function ed(){let e=en.value.call(this);return e.rotate=e.pitch=h.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}b();W();H();function td(e){if(!S(this._map)&&!k(this._map))return Qi.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:hl,containerPointToLayerPoint:gl,_getCenterLayerPoint:yl,panBy:xl,setZoomAround:vl,panInside:wl,_limitCenter:Ml,_limitOffset:bl,_getBoundsCenterZoom:Ll,getBoundsZoom:Bl,_tryAnimatedPan:Tl,getBounds:Pl});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:Uu,getEvents:Fu,_setPos:Nu,_updateZIndex:ju,_initInteraction:Hu});Hi.value=h.Popup.prototype.getEvents;h.Popup.include({getEvents:Yu});Yi.value=h.Tooltip.prototype.getEvents;h.Tooltip.include({getEvents:Xu});Xi.value=h.Popup.prototype._updatePosition;Ki.value=h.Popup.prototype._adjustPan;h.Popup.include({_adjustPan:Ku,_updatePosition:Ju});Ji.value=h.Tooltip.prototype._setPosition;h.Tooltip.include({_setPosition:Qu});Qi.value=h.GridLayer.prototype._getTiledPixelBounds;en.value=h.GridLayer.prototype.getEvents;h.GridLayer.include({getEvents:ed,_getTiledPixelBounds:td});var le=new WeakMap;var V=new WeakMap;var cr=new WeakMap;var lr=new WeakMap;var q=new WeakMap;var We=new WeakMap;var Oe=new WeakMap;var ur=new WeakMap;var oe=new WeakMap;b();var Oa=new WeakMap;var Pi=new WeakMap;var vt=new WeakSet;var Vm=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var qm=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Hm=["minLon","minLat","maxLon","maxLat"];function Da(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<Vm.length;o++)r[Vm[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<qm.length;o++)r[qm[o]]=t.getUint8(96+o);for(o=0;o<Hm.length;o++)r[Hm[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 zo=new WeakMap;async function Ao(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(zo.get(e)&&n!==zo.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&zo.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 Dr(e){if(!vt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return Dr(e.options.archive);let t=Pi.get(e);return t||(t=Ao(e,0,127).then(Da),Pi.set(e,t)),t}var st=new WeakMap;var wt=new WeakMap;X();function Ra(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)}function rd(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 od(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=v.get(t).device,i=e.preparedGeometry||rd(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 id=new TextDecoder;function nd(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 ad={bytes:null,cursor:0};function Oo(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 sd(e){let t=ad,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=Oo(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+=Oo(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=Oo(t);for(s of i)if(s.length=Oo(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=Oo(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 Do(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 sd(await Do(await Ao(e,t,r),o))}async function fd(e,t,r,o){let i=lr.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 pd(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 cd(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 Do(await Ao(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function ld(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 fd(e,i,n,t.internalCompression),o?.throwIfAborted(),c=pd(p,r),!c)return;if(c.runLength)return l=await cd(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 Rr(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 Rr(e.options.archive,t,r,o,i);let n=nd(t,r,o);i?.throwIfAborted();let a=await Dr(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return ld(e,a,n,i)}async function ud(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 Rr(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(id.decode(r.data)):{type:"FeatureCollection",features:[]}}X();function dd(e,t,r){let o=r.options.crs,i=o.project(O.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(O.get(e).lat*T),positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set,skipped:0}}var hd=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function gd(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 yd(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=gd.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 Ym=new WeakMap;function xd(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 vd(e,t){let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function wd(e,t){let r=e&&Ym.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Ym.set(e,r),e.once("unload",xd.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 vd(t,r)}async function Md(e,t){let r=wd(e.map||e.backend._map,e.backend.options.workerUrl||hd),{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(yd.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)),r.blobUrl&&(URL.revokeObjectURL(r.blobUrl),r.blobUrl=null),e.jobs=null}}b();function Ga(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 Ro=[];function Ua(e){return e.ground||0}function Gr(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,w=t.y-o.y,C=n.x-t.x,B=a-r,P=t.y-n.y;if((x*P-w*B)*s+(w*C-g*P)*m+(g*B-x*C)*f<0){let D=o,te=i;o=n,i=a,n=D,a=te}l.push(t.x,r+Ua(t),-t.y,o.x,i+Ua(o),-o.y,n.x,a+Ua(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 bd(...e){Gr(Ro[Ro.length-1],...e)}function Fa(e,t,r,o){Ro.push(e);try{t(r,o,bd)}finally{Ro.pop()}}var Ur=[{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 Ld(e,t){let r=new Array(Ur.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Ur[o].x*t,y:e.y+Ur[o].y*t,ground:e.ground,uv:[3,3]};return r}function Bd(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=Ld(e,a),p=0;p<6;p++)c=f[p],l=f[(p+1)%6],u=Ur[p].nx,d=Ur[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 Td(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 Ci(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 Pd(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++)Td(r,o,Ci(e,-1,-1,i),Ci(e,1,-1,i),Ci(e,1,1,i),Ci(e,-1,1,i),t.top,i===2?1:0,i===0?1:0,i===1?1:0)}var Na=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var Go=[{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 Si(e,t){let r=new Array(Go.length),o;for(o=0;o<r.length;o++)r[o]={x:e.x+Go[o].x*t,y:e.y+Go[o].y*t,ground:e.ground};return r}function ja(e,t,r,o,i,n,a){let s=Si(e,r),m=Si(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}=Go[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 Cd(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;Cd(n,a,s,i,o,m);let f=Ie(t.trunkColor??7491898),p=Ie(t.color??5210683);ja(e,r,n,i,n,s+(o-s)*.25,f);let c,l,u,d,y;if(m==="cone"){let g=Si(e,a);for(c=0;c<8;c++)r(e,s,g[c],s,g[(c+1)%8],s,0,-1,0,p);ja(e,r,a,s,0,o,p)}else for(c=1;c<Na.length;c++)[l,u]=Na[c-1],[d,y]=Na[c],ja(e,r,u*a,s+l*(o-s),y*a,s+d*(o-s),p)}function Ed(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)&&(Fa(e,Bd,t,r),e.supports.add(i)),Fa(e,Pd,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 Fa(e,Sd,t,r)}function kd(e,t,r,o,i,n){let a=Ga(e,r,o);Ed(e,a,i,n,t.properties?.cod_ouvrag||`${r},${o}`)}b();function Wa(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 _d(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 yo(t[0],t.slice(1)))Gr(e,n[m],r,n[f],r,n[p],r,0,1,0,i),o>0&&Gr(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=Rn(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,Gr(e,m,o,f,o,f,r,y,0,g,i),Gr(e,m,o,f,r,m,r,y,0,g,i))}function Xm(e,t,r,o,i){if(!t.length)throw new Error("Empty GeoJSON polygon");let n=[],a;for(a of t)n.push(Wa(e,a));_d(e,n,r,o,i)}function Id(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 zd(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 Ad(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(Wa(e,n));o.push(a)}return o}function Od(e,t,r,o,i,n){let a=t.geometry,s=Ad(e,a),m=a.type==="Point"?Ga(e,r,o):null,f=e.backend.options.nightLight,p=m?Ie(i.color??(f?void 0:5210683)):n,c=m&&!f?Ie(i.trunkColor??7491898):null;e.jobs.push({point:m,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:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}b();function Dd(e,t,r,o){if(!t)return!0;let i=e.project(new h.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function Rd(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Id(t,r.options.nightLight),s=t.geometry,m=s.type==="Point",f=a[0],p=a[1];if(!Dd(i,n,f,p))return;let c=zd(r,t);if(c===null){e.skipped++;return}let{top:l,bottom:u=0,color:d=14267276}=c,y=Ie(d);if(e.jobs){Od(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&&kd(e,t,f,p,c,y);let x;if(s.type==="Polygon")Xm(e,s.coordinates,l,u,y);else if(s.type==="MultiPolygon")for(x of s.coordinates)Xm(e,x,l,u,y);let w=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:w/3,vertexStart:g,vertexEnd:w})}async function Gd(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}Rd(e,i)}}async function Ud(e,t,r){try{if(await new Promise(requestAnimationFrame),await ke.get(r),t.request.signal.aborted)return;let o=await ud(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.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 i=dd(e,t,r);if(e.options.worker!==!1&&typeof Worker<"u"&&o.features.length>=64&&(i.jobs=[]),await Gd(i,t,o.features),t.request.signal.aborted||(i.jobs&&await Md(i,t.request.signal),t.request.signal.aborted))return;od(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{We.set(e,We.get(e)-1),Ei(e,r)}}function Za(e,t){return e.distance-t.distance}function Fd(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(Za),r}function Ei(e,t=e._map){let r=t&&ie.get(t);if(!r)return;let o=[],i,n,a;for(i of G.get(r))Number.isFinite(We.get(i))&&V.get(i)&&(oe.get(i)||q.get(i))&&o.push(i);let s=Fd(o,t),m=0;for(i of o)m+=We.get(i);for({layer:a,area:n}of s){if(m>=4)break;We.get(a)>=2||(n.started=!0,We.set(a,We.get(a)+1),m++,Ud(a,n,t))}for(i of o)Ra(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 dr=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 G.get(i))if(Se.get(n)&&!Se.get(n).hidden){a=!0;break}a?(dr.get(i)===void 0&&dr.set(i,Ce.get(e).style.cursor),Ce.get(e).style.cursor="pointer"):dr.get(i)!==void 0&&(Ce.get(e).style.cursor=dr.get(i),dr.delete(i))}}function Fr(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 Nd(e,t){return e.distance-t.distance}function Nr(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}),Ei(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)||(Fr(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(Nd);for(u of d)c=`${u.x}/${u.y}`,V.get(e).has(c)||V.get(e).set(c,{coords:u,request:new AbortController});Ei(e)}function Uo(e){if(!L.get(e)||!O.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,O.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;L.get(e).position[1]=wt.get(e)+(r??0)+o}function jd(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 Wd(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 Zd(e,t){let r=z.get(t),o;if(e.geometry&&e.geometry.device!==v.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=v.get(r).device;jd(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Wd(n,a),e.program.pipelineCache.clear(),e.program=Ke(t,n),e.device=a}e.texture&&e.texture.device!==v.get(r).device&&(o=e.texture,o.device=v.get(r).device,o.texture=v.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=v.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var Fo=new WeakMap;function $d(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 hr(e,t,r){throw $d(r),st.get(t).reject(e),ie.delete(r),e}async function Vd(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){hr(o,e,t)}return r||hr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function qd(e,t,r){try{return await e.requestDevice()}catch(o){hr(o,t,r)}}function Hd(e){let t=Fo.get(e.currentTarget),r=ie.get(t);if(v.get(r)?.device!==e.currentTarget||!G.get(r))return;let o;for(o of G.get(r))o.fire("error",{error:e.error})}function Yd([e,t]){let r=Fo.get(t),o=ie.get(r);if(!o||v.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of G.get(o))n.fire("error",{error:i})}function Xd(){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 No=new Float32Array(20);No[0]=No[5]=No[10]=No[15]=1;function Kd(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=v.get(e).device.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),i=v.get(e).device.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),n=v.get(e).device.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});v.get(e).sunlight={layout:r,buffer:o,sampler:i,lights:n,size:0},v.get(e).device.queue.writeBuffer(o,0,No),Ln(e,1);let a=document.createElement("canvas");a.width=1,a.height=1,v.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 jr=new WeakMap;var $a=[];function Jd(){let e=$a.shift();jr.set(e,!1),!(z.get(e)!==e||!v.get(e))&&(e._map._animatingZoom?_(e):rr(e))}function ki(){let e=this;jr.get(e)||(jr.set(e,!0),$a.push(e),queueMicrotask(Jd))}var jo=new WeakMap;function _i(){jo.set(this,null)}var Va=[];function Qd(){let e=Va.shift();z.get(e)===e&&v.get(e)&&rr(e)}function Ii(e){let t=this._map;e&&!Ue.get(this)&&(Ue.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),Va.push(this),queueMicrotask(Qd)}function zi(){let e=this,t;if(ce.get(e))for(t of ce.get(e).keys())t.finish();ce.set(e,null),Ue.set(e,null),ke.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),on(e._map),jo.set(e,null),_(e)}function eh(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",ki,e),t.on("zoomstart",_i,e),t.on("zoomanim",Ii,e),t.on("zoomend",zi,e)}async function th(e,t){let r=document.createElement("canvas");navigator.gpu||hr(new Error("Layer3D requires WebGPU"),e,t);let o=await Vd(e,t),i=await qd(o,e,t);Fo.set(i,t),i.addEventListener("uncapturederror",Hd),Promise.all([i.lost,Promise.resolve(i)]).then(Yd);let n=r.getContext("webgpu");n||(i.destroy(),hr(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),G.set(e,new Set),ne.set(e,O.get(e)),Q.set(e,Pe()),J.set(e,Xd()),v.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),Kd(e,i),eh(e,t,r)}async function Wo(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 th(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(O.get(e)),n=Math.cos(ne.get(r).lat*T);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,Uo(e),L.get(e).scale.fill(n/Math.cos(O.get(e).lat*T)),z.set(e,r),v.set(e,v.get(r)),Q.set(e,Q.get(r)),J.set(e,J.get(r)),G.get(r).add(e),Z(L.get(e),Q.get(r)),At(L.get(e),Zd,e),_(r),(R.get(e)&&I.get(e)!=="raster"||q.get(e))&&Nr(e)}var De=new WeakMap;var rh=new TextDecoder;function oh(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 ih(e){let t=new DataView(e),r=rh,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||oh(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}X();b();function qa(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w;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(w=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=w;return r}function Km(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Km(r,t)}function Zo(e,t){if(!De.get(e))return;let r=[];Km(De.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,d,y,g,x,w,C,B,P,D;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 te=e._map,U=te.options.crs,N=U.project(ne.get(z.get(e))),K=Math.cos(ne.get(z.get(e)).lat*T),pe=U.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&&(w=p[0]*u+p[4]*d+p[8]*y+p[12],C=p[2]*u+p[6]*d+p[10]*y+p[14],B=U.transformation.transform(new h.Point(N.x+w/K,N.y-C/K),pe),P=Kt(t,B),Number.isFinite(P)&&(D=(P-g)*x,m.data[l]+=c[4]*D,m.data[l+1]+=c[5]*D,m.data[l+2]+=c[6]*D));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(qa(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Be(n)}_(e)}async function nh(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 ah={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function sh(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,ah)}async function mh(e,t,r){let o=[],i;for(i of t.buffers||it)o.push(nh(i,r));await Promise.all(o),await le.get(e).promise;let n=[],a;for(a of t.images||it)n.push(sh(t,r,a));let s=await Promise.all(n);return await ke.get(e._map),s}function fh(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 Ai(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=v.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=fh(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 ph(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:Ai(e,o?.baseColorTexture,!0),metalTexture:Ai(e,o?.metallicRoughnessTexture),emissiveTexture:Ai(e,t.emissiveTexture,!0),occlusionTexture:Ai(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 ch(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(ph(o,i));return o}var lh=[0,0,0,1];var uh=[1,1,1];var dh=[0,0,0];function hh(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||lh,[n,a,s]=e.scale||uh;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||dh,1]}var gh=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var Ha={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var yh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function xh(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 Ya(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]=xh(u,t,g)}}function vh(e,t,r,o,i){let n=t.sparse,a=Ha[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));Ya(e,r,o,i,t.count,f,n.values.bufferView,n.values.byteOffset||0,n.count,0)}function wh(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 Xa(e,t){let r=e.accessors[t],o=Ha[r.componentType],i=yh[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&&Ya(e,o,i,n,r.count,null,r.bufferView,r.byteOffset||0,r.count,e.bufferViews[r.bufferView].byteStride),r.sparse&&vh(e,r,o,i,n),r.componentType===5126?{data:n,size:i}:wh(r,o,n,i)}function Mh(e,t){let r={},o,i;for([o,i]of gh)t.attributes[o]!==void 0&&(r[i]=Xa(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 bh(e,t,r,o){if(t.indices!==void 0){let i=Xa(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 Lh(e,t,r){let o;r.normal||(o=qa(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=v.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 Jm(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=hh(n);let s,m,f,p,c,l,u;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=Mh(o,s),f=m.attributes,p=m.vertexCount,bh(o,s,f,p),c=Lh(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(Jm(e,u),a);return i.delete(t),a}function Bh(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 Th(e,t){let r=[],o;try{for(o of t.nodes)r.push(Jm(e,o))}catch(i){throw Bh(e),i}return r}function Ph(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 Ch(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=ih(o),n=new URL(".",t).href,a=await mh(e,i,n),s=ch(e,i,a),m=i.scenes?.[i.scene||0];if(!m)throw new Error("Missing glTF scene");let f=Th(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),Ph(e),Z(De.get(e),L.get(e)),Zo(e,ae.get(e._map))}async function Sh(e){try{return L.set(e,Pe()),ee.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(oe.get(e)||q.get(e))&&(Oa.set(e,L.get(e)),oe.get(e)&&R.set(e,await Dr(e))),e._map&&(await Wo(e,e._map),le.get(e).resolve()),Oe.get(e)&&await Ch(e),z.get(e)&&_(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}b();b();function Eh(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 kh(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 Eh(o,t,r),!0;return!1}function Ka(e){let t=kh(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var Ja=[];function _h(){let e=Ja.shift();e?.map.hasLayer(e.layer)&&Ka(e)}function Qa(){Ja.push(this),queueMicrotask(_h)}function Ih(){this.map.off("layeradd layerremove",Qa,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function $o(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",Qa,o),e.once("remove",Ih,o),Ka(o)}function zh(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 Ah(e,t,r,o){let i=cr.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=zh(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 Qm(e){let t=e.target,r=cr.get(t);if(!t._map)return;e.type==="add"&&$o(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;Ah(t,o,i,n)}function Lt(e,t=xo){ur.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),lr.set(e,new Map),e.options.center&&O.set(e,new h.LatLng(e.options.center[0],e.options.center[1])),V.set(e,new Map),We.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",cr.set(e,o),e.on("add error",Qm),e.on("ready progress",h.Util.throttle(Qm,250,e))}le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(Sh.bind(null,e))),re.get(e).catch(at)}b();var Oh=new Map;var Dh=new Map;function Rh(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var Oi=[null];var Rt=new WeakMap;var Ze=new WeakMap;var Gt=new WeakMap;X();var es={x:0,y:0};var Ee=new WeakMap;var ue=new WeakMap;var Bt=new WeakMap;var Di={size:[null,null],format:"r32float",usage:null};var ts={texture:null};var ef={bytesPerRow:null};var rs=[null,null];function Gh(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 Uh(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,Gh(n,s,c,r);return n}function Fh(e,t){let r=v.get(e).device;if(ue.get(e)?.device===r)return ue.get(e);let o=Rt.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=Uh(Ye.get(e),o);return Ee.get(e)&&F(e,Ee.get(e).texture),Ee.set(e,{texture:r.createTexture((Di.size[0]=i*256,Di.size[1]=n*256,Di.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,Di)),low:Number.isFinite(s)?s:Ze.get(e),high:Number.isFinite(m)?m:Ze.get(e)}),r.queue.writeTexture((ts.texture=Ee.get(e).texture,ts),a,(ef.bytesPerRow=i*1024,ef),(rs[0]=i*256,rs[1]=n*256,rs)),ts.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 os={size:null,usage:null};function Nh(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 jh(e,t){let r=v.get(e).device,o=Bt.get(e).get(t);if(!o){o=Nh(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((os.size=Math.max(4,n.data.byteLength),os.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,os)),r.queue.writeBuffer(n.buffer,0,n.data);Bt.get(e).set(t,o)}return o}function Wh(e,t,r,o){let i=Ze.get(e),n=Math.min(Ee.get(e).low,i)-i,a=Math.max(Ee.get(e).high,i)-i;return{device:v.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 Zh(e,t,r,o){if(!await Gt.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(O.get(e)),f=Math.cos(O.get(e).lat*T),p=s.scale(r.z),c=2**(de.get(e)-r.z),l=es;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=v.get(e).device,g=o.texture,x=Fh(e,g),w=jh(e,n),C=Ze.get(e),B=(d.x-u.x)*f,P=-(d.y-u.y)*f,D=Wh(e,w,B,P),te={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[B,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:y,geometry:D,program:x,texture:g,terrain:[r.x*256*c-Rt.get(e).min.x*256,r.y*256*c-Rt.get(e).min.y*256,256*c,C],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(te,L.get(e)),_(e),A.get(e).set(o,te)}async function is(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 Zh(me.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}var Tt=new WeakMap;X();var Ri={size:[null,null],format:"rgba8unorm",usage:null};var $h={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var ns={size:null,usage:null};var Vh=[0,0,0,1,0,0,0,0,1,1,0,1];var qh=[0,1,0,0,1,0,0,1,0,0,1,0];var Hh=[0,0,1,0,0,1,1,1];var Yh=[0,2,1,1,2,3];function Xh(e){let t={position:{size:3,data:new Float32Array(Vh)},normal:{size:3,data:new Float32Array(qh)},uv:{size:2,data:new Float32Array(Hh)},index:{data:new Uint16Array(Yh)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((ns.size=o.data.byteLength,ns.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,ns)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Kh(e,t){let r=v.get(e).device,o={device:r,texture:r.createTexture((Ri.size[0]=t.image.width,Ri.size[1]=t.image.height,Ri.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,Ri)),sampler:r.createSampler($h),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Pr,n=Qr,a=eo;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,Xh(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(O.get(e)),p=Math.cos(O.get(e).lat*T),c=m.scale(s.z),l=es;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 Jh(e,t){try{await re.get(e);let r=await Rr(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{Oi[0]=r.data;let o=new Blob(Oi);Oi[0]=null,t.image=await createImageBitmap(o)}}catch{throw Oi[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}Kh(e,t),t.loadedAt=performance.now(),t.done=!0,Te.set(e,(Te.get(e)||0)+1),is(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&&(as(e),mo(e),se.get(e)||e.fire("load"),_(e))}}function Qh(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"),Jh(e,t)}function as(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(Rh);for({tile:i}of o){if(se.get(e)>=4)break;Qh(e,i)}}function eg(e,t){let r=A.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&so(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var gr=[0,0];var yr=[0,0];function tg(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();gr[0]=t.maxLat,gr[1]=t.minLon,yr[0]=t.minLat,yr[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(gr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(yr,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 ms(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=tg(t,R.get(e),r),i=Oh;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=Dh;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(),eg(e,u),as(e),mo(e)}function rg(e){let t=ms.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}async function og(e,t){let r=await Dr(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 ig(e,t){throw e.fire("error",{error:t}),t}function Vo(e,t){if(!A.get(e)||me.get(e)===t)return;let r;for(r of A.get(e).values())me.get(e)&&ao(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&&is(e,r.coords,r)}async function ng(e,t,r){try{await r,le.get(e).resolve(),Vo(e,ae.get(t))}catch(o){e.fire("error",{error:o})}}async function ag(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&ms(e)}catch(o){e.fire("error",{error:o})}}function sg(e,t){O.get(e)||O.set(e,t.getCenter());let r=Wo(e,t);ng(e,t,r),ag(e,t,r)}function mg(e){let t,r;for(t of A.get(e).values())so(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 xr=new WeakMap;var Wr=new WeakMap;var Pt=new WeakMap;var Zr=new WeakMap;var vr=new WeakMap;var wr=new WeakMap;var qo=new WeakMap;var fs=new WeakMap;var Ho=new WeakMap;var Mr=new WeakMap;var br=new WeakMap;var Ut=new WeakMap;var ps=new WeakMap;var cs={_3d:ur,_added:le,_areas:V,_bridgeMesh:Wr,_bridges:rt,_cameraZIndexOffset:Cr,_countStatus:cr,_cursor:dr,_dem:Ee,_directories:lr,_etag:zo,_fadeFrame:wr,_fadeVersion:qo,_frame:et,_geojson:q,_header:Pi,_inflight:We,_layers:G,_loadingTiles:se,_nativeGPU:xe,_pointerEvents:xr,_pruneAfter:zt,_pruneVersion:li,_pruneWanted:ui,_queued:jr,_rasterGeometry:Tt,_rasterProgram:ue,_rasterTiles:A,_rasterVersion:Te,_rendererReady:st,_roofRaster:Y,_roofRasters:mi,_sceneOrigin:ne,_shadowMeshes:_t,_shared:z,_size:Yt,_terrain3D:me,_terrainArchive:fs,_terrainBaseY:wt,_terrainBounds:Rt,_terrainController:Ho,_terrainGrids:Bt,_terrainLoading:Mr,_terrainOriginElevation:Ze,_terrainPromise:Gt,_terrainReady:ve,_terrainRequest:Tn,_terrainTiles:Ye,_terrainZoom:de,_tileZoom:Qt,_tooltip:Se,_type:Ut,_visibleMeshes:Tr,_wantedRasterTiles:Ht,_zoomLevel:jo,_zoomTransitions:ce,_zoomView:Ue,camera:J,container:Ce,control:Pt,eventMap:Zr,events:vr,group:Oa,header:R,highlightedFeature:Je,hoveredFeature:be,kind:I,location:O,model:De,modelUrl:Oe,raycaster:ee,ready:re,renderer:v,root:L,scene:Q,terrainSource:br,url:oe,walker:ps};b();var fg=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];function Yo(e){be.set(e,null),Mt(e,null),bt(e,null),e.fire("featurehover",{feature:null})}var cg=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function lg(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 ug(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),Ue.set(e,null),ke.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=v.get(e);r.canvas.remove(),lg(r,e),ie.delete(t);let o;for(o of cg)cs[o].delete(e)}function Xo(e,t){le.set(e,Promise.withResolvers()),Ce.get(e)&&(Yo(e),h.DomEvent.off(Ce.get(e),xr.get(e),e),Ce.set(e,null));let r,o,i,n;for(r of V.get(e).values())Fr(e,r);V.get(e).clear(),Se.get(e)?.remove(),Se.set(e,null),(oe.get(e)||q.get(e))&&Ra(e,!1);let a=z.get(e);if(a){if(Z(L.get(e),null),G.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",ki,e),t.off("zoomstart",_i,e),t.off("zoomanim",Ii,e),t.off("zoomend",zi,e),Bn(e),G.get(e).size){let s=G.get(e).values().next().value;for(o of fg)n=cs[o],n.set(s,n.get(e)),n.delete(e);for(i of G.get(s))z.set(i,s);ie.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",ki,s),t.on("zoomstart",_i,s),t.on("zoomanim",Ii,s),t.on("zoomend",zi,s),_(s)}else ug(e,t);else _(a);z.set(e,null),v.set(e,null),Q.set(e,null),J.set(e,null)}}function dg(e,t){mg(e),me.set(e,null),Xo(e,t)}b();function ls(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),lr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(og.bind(null,e)).catch(ig.bind(null,e)))}var hg=Object.freeze([]);function gg(e){I.get(e)==="raster"&&Vo(e,null)}function yg(e,t){Ho.get(e)?.abort(),Mr.set(e,!1),ve.set(e,!1),t.eachLayer(gg);let r,o,i,n;for(r of A.get(e).keys())ao(e,r);ae.get(t)===e&&ae.delete(t);for(o of Object.values(t._layers))Zo(o,null),Uo(o);t.fire("terrainchange"),Ye.get(e).clear(),Ze.set(e,0),Gt.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()||hg)for(n of Object.values(i))F(e,n.buffer);Bt.set(e,null),rt.set(e,null),_e(e,Wr.get(e)),Wr.set(e,null),Xo(e,t)}async function xg(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 Rr(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 vg(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}b();function wg(e,t){let r=e._map;de.set(e,t.maxZoom),gr[0]=t.maxLat,gr[1]=t.minLon;let o=r.project(gr,de.get(e)).divideBy(256).floor();yr[0]=t.minLat,yr[1]=t.maxLon;let i=r.project(yr,de.get(e)).divideBy(256).floor();Rt.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(Za),n}X();b();function Mg([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 bg(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 Lg(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 Bg(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 Tg(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 Pg(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)Tg(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function Cg(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,w,C,B;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],D=[];for(p of f)for([l,u,d]of p)y=o.project([u,l],i),P.push([y.x,y.y,d]);for(p of f)for(g of p)D.push(Mg(g,n,a,s,m));try{x=bg(f,P),[w,...C]=x,B=yo(w,C)}catch{return}Lg(r,P,B),Bg(e,D,B),Pg(e,D,f)}function Sg(e,t){let r=e._map,o=r.options.crs,i=de.get(e),n=o.project(O.get(e)),a=Math.cos(O.get(e).lat*T),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++)Cg(c,l.type==="Polygon"?u:u[d]);m.length&&Wr.set(e,er(e,{position:m,normal:f,color:p}))}function Eg(e,t,r){ve.set(e,!0),Ze.set(e,Kt(e,O.get(e))??0);let o;for(o of Object.values(t._layers))Uo(o),Zo(o,e);r&&Sg(e,r),t.fire("terrainchange"),_(e),e.fire("terrainready")}async function us(e){if(Mr.get(e)||!e._map)return;Mr.set(e,!0),ve.set(e,!1);let t=new AbortController;Ho.set(e,t);let r;try{if(!br.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=Wn({source:{type:e.options.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(br.get(e))?"cog":"pmtiles",url:br.get(e),archive:e.options.archive,asset:e.options.asset}});fs.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=wg(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(xg(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(vg);return t.signal.aborted||e._map!==n?void 0:(Eg(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Mr.set(e,!1)}}b();function ds(e,t){let r=De.get(e);if(!L.get(e)||!J.get(e))return null;let o,i,n,a,s,m,f;for(o of Hn(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 kg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){be.get(e)&&Yo(e);return}be.set(e,ds(e,t)),Mt(e,be.get(e)),bt(e,be.get(e),t),e.fire("featurehover",{feature:be.get(e),originalEvent:t})}function _g(e){kg(this,e)}function Ig(e,t){let r=ds(e,t);be.set(e,r),Mt(e,r),bt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function zg(e){Ig(this,e)}function Ag(){Yo(this)}async function Og(e,t){try{await Wo(e,t),le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function hs(e,t){if(!O.get(e)){let r=t.getCenter();O.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()),xr.get(e)||xr.set(e,{mousemove:_g,click:zg,mouseleave:Ag}),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),xr.get(e),e)),L.get(e)&&Og(e,t)}function Dg(){us(this.backend).then(this.resolve,this.reject)}function Rg(e){I.get(e)==="raster"&&Vo(e,this)}function Gg(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),hs(e,t),L.get(e))Gt.set(e,us(e));else{let r=Promise.withResolvers();Gt.set(e,r.promise),e.once("ready",Dg,{backend:e,...r})}t.eachLayer(Rg,e),t.fire("terrainchange")}function Ug(e,t){let r=t.url,o={...t};delete o.url,Lt(e,o),br.set(e,r),Ye.set(e,new Map),A.set(e,new Map),ve.set(e,!1),I.set(e,"terrain")}b();var Ko=new WeakMap;var Gi=new WeakMap;var Ui=new WeakMap;b();oa();X();H();W();function Fg(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 tf(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=Fg(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=je.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)*T,f=S(e)*T;tf(r,n,a,s,m,f,i),tf(o,n?.moon,a,s,m,f,i)}var Ng=[[-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 rf=[0,0,0];function gs(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 of(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function jg(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Ng,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(${of(gs(n[1],i[1],a,rf))}, ${of(gs(n[2],i[2],a,rf))})`,tint:gs(n[3],i[3],a)}}function ys(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 xs(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*T-o,a=t*T,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))/T+180+360)%360;return{altitude:s/T,azimuth:f,direction:[Math.sin(f*T)*Math.cos(s),Math.sin(s),-Math.cos(f*T)*Math.cos(s)]}}X();X();var Fi=Math.sin(23.4397*T);X();var Ni=Math.cos(23.4397*T);function Wg(e,t,r){let o=ys(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*T,n=(218.316+13.176396*o+6.289*Math.sin(i))*T,a=5.128*Math.sin((93.272+13.22935*o)*T)*T,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Ni-Math.sin(a)*Fi,f=Math.cos(a)*Math.sin(n)*Fi+Math.sin(a)*Ni;return xs(o,t,r,Math.atan2(m,s),Math.asin(f))}X();function Zg(e,t,r){let i=ys(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*T,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*T,s=Math.asin(Math.sin(a)*Fi),m=Math.atan2(Math.sin(a)*Ni,Math.cos(a));return xs(i,t,r,m,s)}function $r(e){let t=ie.get(e);t&&_(t)}function Lr(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=Zg(t.time,m.lat,m.lng);tt.set(r,f),Object.assign(f,jg(f.altitude)),f.moon=Wg(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),$r(r)}catch(s){tt.delete(r),Ft(e),$r(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function $g(e){e.control.live=!0,Lr(e)}function Vg(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),$r(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)),Lr(e)}function qg(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=Lr.bind(null,l),l.updateSky=Ft.bind(null,l),m.onclick=$g.bind(null,l),n.onchange=a.oninput=Vg.bind(null,l),h.DomEvent.disableClickPropagation(i),h.DomEvent.disableScrollPropagation(i),l}function Hg(e){e.control.live&&Lr(e)}function Yg(e,t){let r=Ui.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=qg(t),Ui.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Ko.set(t,e),Gi.set(e,r),r.update(),r.timer=setInterval(Hg,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}b();function Xg(e){return Pt.get(this).addTo(e)}b();function Kg(){return h.Control.prototype.remove.call(Pt.get(this))}function Jg(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 Qg(e){return Yg(this,e)}b();function nf(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 ey(e){h.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?$o(this.layer,t,nf.bind(null,t)):nf(t,!1),this}b();function ty(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):h.Control.prototype.remove.call(this)}function ry(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Ui.get(t);clearInterval(r),Ko.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(),$r(t),n===e&&(n.control=null)}function oy(){let e=Gi.get(this);e&&(ry(e),Gi.delete(this))}h.Control.Time=h.Control.extend({options:{position:"bottomright"},initialize:Jg,onAdd:Qg,onRemove:oy,addTo:ey,remove:ty});b();var vs=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 iy(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 af=[.75,.2,.15];var ws={body:[[E(-.17,.17,-.1,.1),.82,.95,Wt],[E(-.19,.19,-.11,.11),.95,1.44,af],[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,af],[E(-.045,.045,-.045,.045),-.66,-.55,mt]]};function ny(e){let t=ws.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 Jo(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 Vr=[.12,.15,.18];var Ct=[.92,.93,.92];var Qo=[.05,.05,.05];var Ms=[1.9,1.85,1.7];var bs=[1.7,.06,.05];function ei(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,Vr],[E(-1.25,1.25,o,i),2.65,3.1,Ct],[E(-1.15,-.85,o+1,o+2),0,.7,Qo],[E(.85,1.15,i-2,i-1),0,.7,Qo],[E(-.9,.9,o-.03,o),.8,1.05,Ms],[E(-.9,.9,i,i+.03),.8,1.05,bs]]}function ay(e,t){return ei(0,12,Jo(t))}function sy(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((i-2)*6.5,6,r));return o}function my(e,t){let r=Jo(t),o=[],i;for(i=0;i<5;i++)o.push(...ei((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 fy(e){let t=Nt[e%Nt.length];return[...Zt(.7,.92,-1.68,-1.02,0,.64,Qo),...Zt(.7,.92,1.02,1.68,0,.64,Qo),[[[-.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,Vr,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,Ms),[E(-.78,.78,2.16,2.3),.6,.76,bs]]}var sf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function py(){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 cy(){return[[sf,0,.8,[.1,.16,.26]],[sf,.8,1.4,Ct],[E(-5,5,-18,26),1.4,3.7,Vr,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],...py(),...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,Vr],[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 ly={bicycle:{side:.4,model:iy},pedestrian:{side:.3,model:ny},bus:{side:1.5,model:ay},tram:{side:0,model:sy},metro:{side:0,model:my},car:{side:1.8,model:fy,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:cy,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var uy=" 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 ji(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,w;for(x=0;x<3;x++)w=x===0?o:x===1?i:n,e.push(...w),t.push(u/g,d/g,y/g),r.push(...a)}function ti(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,ji(t,r,o,i[u],i[d],n[d],f),ji(t,r,o,i[u],n[d],n[u],f);for(u=1;u<a.length-1;u++)ji(t,r,o,n[0],n[u],n[u+1],f),ji(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function dy({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 Ls(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),$o(e.layer,e.status),e.update()}function hy(e){dt.set(e.layer,e),e.ready&&Ls(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 gy(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 yy(e){e.ready=!0,e.layer._map&&Ls(e)}function Ts(e){let t=Ko.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function xy(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 ri=new Map;function ff(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function vy(e,t){return e-t}function wy(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=ri.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"}),ri.size>=32&&ri.delete(ri.keys().next().value),ri.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=ff(m);u<=ff(f);u+=p)g.push(u);g.sort(vy);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 My(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 wy(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||=xy(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 Ps(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var by=Object.freeze({unlit:!0});function Ly(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,w=o[1]+a*p,C=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,C,w-m):e.push(x+s,C,w+m),t.push(0,1,0),r.push(c,l,u)}function By(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,w;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)x=Math.max(0,(g-i[n-1])/u),w=Math.min(1,(g+18-i[n-1])/u),!(w<=x)&&Ly(e,t,r,f,p,c,l,d,y,x,w,a,s,m)}function Ty(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++)By(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function Cs(e,t,r,o,i=0){let n=er(e.layer,t,o,i);return n.extras.featureFaces=r,n}function Py(e){e.route=Cs(e,Ty(e.lanes),[],by)}function Ss(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 Cy(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 ti(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=Cs(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,vs,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,Ss(e)}function Wi(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 Sy(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=Wi(t,a),e.lanesDirty=!1}function Ey(e){let{device:t}=v.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:Wi(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&Sy(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=Wi(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 ky(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 _y(e,t,r,o){let i;try{o?e.trips=My(t,e.lanes,e.velocity):e.trips.length=0,i=ky(e,o)}catch(f){Ps(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&&Py(e),n!==e.tripsKey&&(Cy(e),e.tripsKey=n),e.mesh&&Ey(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Iy(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 zy(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}=vo(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 Ay(e,t,r){e.mesh&&(Iy(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&zy(e))}function Oy(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!v.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}=Ts(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=_y(e,r,o,i),n===void 0)||(Ay(e,o,t),(e.mesh||n)&&_(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function Dy(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 Ry=Object.freeze([]);function Gy({features:e=Ry}){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 Uy(e){let t=ae.get(e);return ve.get(t)&&t}function Es(e){let{layer:t,lanes:r}=e,o=Uy(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 Fy(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(O.get(t)),n=Math.cos(O.get(t).lat*T),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)}Es(e),$t(e,e.route),e.route=null,e.tripsKey=null}function Ny(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=Gy(r),Fy(e),e.frame||e.tick()}}function jy(e,t,r){!t.aborted&&r.name!=="AbortError"&&Ps(e,r)}function Wy(e){let{time:t}=Ts(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;Dy(e,t,r).then(Ny.bind(null,e,r),jy.bind(null,e,r))}function Zy(e,t){t?.layer&&!Pt.get(t.layer)?.time||(cancelAnimationFrame(e.frame),Wy(e),e.tick())}function $y(e){e.lanes.length&&(Es(e),$t(e,e.route),e.route=null,e.mesh&&Ss(e),e.frame||e.tick())}function Vy(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=vs){let{model:s,lights:m,side:f}=ly[r];o??=f,Lt(e,{tooltip:dy,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=ti(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=uy,x.tick=Oy.bind(null,x),x.update=Zy.bind(null,x),x.terrain=$y.bind(null,x),dt.set(e,x),e.on("ready",yy.bind(null,x)),e.on("add",hy.bind(null,x)),e.on("remove",gy.bind(null,x))}b();b();b();function qy(){this.keys.clear()}var Zi={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();va();or();H();W();function Hy(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 $i=[["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=O.get(t),a=L.get(t),s=i.project(n),m=Math.cos(n.lat*T),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 ks(){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<$i.length;a++)[,s,m,f]=$i[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 Yy(){this.meshes&&ks.call(this)}function _s(){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}),Ir(e,this.saved.pitch),this.saved=null}}function Xy(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}!Zi[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}X();b();var Ky=["dragging","keyboard","doubleClickZoom","boxZoom"];H();W();va();function Jy(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)}b();var pf=new WeakMap;function Qy(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 Is(e){let t=pf.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=Zn(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],d=[0,0,0],y=[0,0,0],g=[],x,w,C,B,P,D,te,U,N,K,pe,ye,Qe,Le,ft,Ge=-1/0;for(x=0;x<f;x+=3)w=i?i.data[x%m]:x%m,!(e.program.nightLight&&a&&a.data[w*2]<=2)&&($n(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],P=g[4]-g[1],D=g[5]-g[2],te=g[6]-g[0],U=g[7]-g[1],N=g[8]-g[2],K=P*N-D*U,pe=B*U-P*te,ye=D*te-B*N,Qe=Math.hypot(K,ye,pe),!(!Qe||Math.abs(ye)>.9*Qe)&&(n&&(C=w*3,(r[0]*n.data[C]+r[4]*n.data[C+1]+r[8]*n.data[C+2])*K+(r[2]*n.data[C]+r[6]*n.data[C+1]+r[10]*n.data[C+2])*pe<0&&(K=-K,pe=-pe)),Le=Math.hypot(K,pe),ft=c.length/2,p.push(...g),Ge=Math.max(Ge,g[0],g[3],g[6]),c.push(K/Le,pe/Le),Qy(l,g,ft)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ge,origin:[r[12],r[13],r[14]]},pf.set(e.geometry,t),t}function zs(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 w=r-e[s],C=o-e[s+1],B=i-e[s+2],P=(w*d+C*y+B*g)/x;if(P<0||P>1)return-1;let D=C*p-B*f,te=B*m-w*p,U=w*f-C*m,N=(n*D+a*U)/x;return N<0||P+N>1?-1:(c*D+l*te+u*U)/x}function ex(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=zs(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function tx(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function cf(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=Is(e),y=Math.floor(d.maxX/8);if(t>=d.maxX)return!1;let g=Math.floor(o/8),x=n;return x.length=0,i.clear(),ex(d,t,r,o,i,x,y,g),tx(x)%2===1}function rx(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function As(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 K,pe,ye,Qe;for(K=0;K<m.template.position.length;K+=3)pe=m.template.position[K],ye=m.template.position[K+1],Qe=m.template.position[K+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,w,C,B,P,D,te,U,N;for(d of m.trips)if({x:U,y:D,z:N}=vo(m,d,c),D=p.position[1]+(D+f.minY)*p.scale[1],te=p.position[1]+(c.y+f.maxY)*p.scale[1],!(D>r+1.7*l||te<r+.2*l)&&(U=p.position[0]+U*p.scale[0],N=p.position[2]+N*p.scale[2],y=(U-t)*i+(N-o)*n,g=Math.max(0,Math.min(a,y)),x=t+g*i-U,w=o+g*n-N,C=x*x+w*w,!(C>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-U,o-N),s.normal[0]=P?(t-U)/P:0,s.normal[1]=P?(o-N)/P:0;continue}B=Math.max(0,y-Math.sqrt(u*u-C)),!(B>a||B>=s.best)&&(s.best=B,s.found=!0,P=Math.hypot(t+B*i-U,o+B*n-N),rx(s,t+B*i-U,o+B*n-N,P,i,n))}return s.found}function lf(e){let{layer:t,local:r,hitData:o}=e,i=z.get(t);if(!i||!G.get(i))return!1;we(Q.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=G.get(i),c,l,u,d;for(c of p)if(!(c===t||I.get(c)==="terrain")){if(I.get(c)==="traffic"){if(o.best=0,o.found=!1,As(c,s,m,f,0,0,0,o))return!0;continue}for(d=o.nodes,d.length=0,L.get(c)&&d.push(L.get(c));d.length;)if(l=d.pop(),!!l.visible){if(l.geometry&&(cf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||cf(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 Os(){if(!this.saved||!lf(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,!lf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Ds(e){return Math.atan2(Math.sin(e),Math.cos(e))}function ox(e,t){return e===t||Ut.get(e)==="terrain"||Ut.get(e)==="traffic"}function ix(e){let t=ee.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(Q.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 G.get(z.get(this.layer)))ox(s,this.layer)||I.get(s)==="raster"||s.options.nightLight||At(L.get(s),qn,t.meshes);for(m of Vn(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();function nx(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=zs(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 ax(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=Is(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,w;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++)w=c.cells.get(g+","+x),w&&nx(w,c,t,l,u,d)}function sx(e,t,r,o,i,n,a,s){we(Q.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 G.get(z.get(e)))if(!(m===e||I.get(m)==="terrain")){if(I.get(m)==="traffic"){As(m,t,r,o,i,n,a,s);continue}At(L.get(m),ax,s)}return s.found?s.normal:null}function uf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&sx(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function mx(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=uf.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],uf.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new h.LatLng(o+m/111320,i+s/(111320*Math.cos(o*T))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}Yr();X();W();or();H();function fx(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*T,a=Ds(-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}function px(e,t,r,o,i,n){o&&(e.state.heading=Ds(e.state.heading+o*2.5*i),n=!0),r&&(mx.call(e,r,i),n=!0),n&&ix.call(e,t),fx.call(e,r,o,i)&&(n=!0),n&&ks.call(e)}function cx(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!v.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Os.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of $i)this.meshes.push(er(t,ti(ws[i])));o=!0}let a=L.get(t).position[1]+St.call(this,this.local)[1]*L.get(t).scale[1];Jy.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=Zi[n]?.[0]||0,m+=Zi[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),px(this,a,s,m,r,o)}function Rs(){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*T)/256)),o;this.saved={zoom:e.getZoom(),pitch:k(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Ky)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)*T,e.setView(this.state.latlng,r,{animate:!1}),Ir(e,75),Os.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 lx(){this.saved?_s.call(this):Rs.call(this)}function ux(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}};ps.set(i,f.state),f.step=cx.bind(f),f.onKey=Xy.bind(f),f.onBlur=qy.bind(f),f.onPointer=Hy.bind(f),f.onTerrain=Yy.bind(f),f.start=Rs.bind(f),f.stop=_s.bind(f),f.toggle=lx.bind(f),e._walk=f,h.DomEvent.on(s,"click",f.toggle)}function dx(e){h.Util.setOptions(this,e),ux(this,this.options)}function hx(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 gx(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:dx,onAdd:hx,onRemove:gx});b();var Gs=new WeakMap;var Us=new WeakMap;var Fs=new WeakMap;function yx(){return{}}function xx(e){return this._project(),this._parts=this._rings,Gs.get(this).call(this,e)}function vx(){return this._project(),Us.get(this).call(this)}function wx(){Fs.get(this).call(this),this._container.remove()}var Vt=new Map;var Et={value:null};function Mx(e){Vt.delete(e),wr.set(e,null),!Vt.size&&Et.value!==null&&(cancelAnimationFrame(Et.value),Et.value=null)}function bx(){Et.value=null;let e=[...Vt],t,r;for([t,r]of e)Vt.get(t)===r&&(Vt.delete(t),wr.set(t,null),Ns.call(t))}function Lx(e){qo.set(e,(qo.get(e)||0)+1),Vt.set(e,qo.get(e)),Et.value===null&&(Et.value=requestAnimationFrame(bx)),wr.set(e,Et.value)}function Ns(){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),Mx(e),r&&Lx(e)}var js=[];function Bx(){js.shift()?.fire("load")}function Tx(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(js.push(this),queueMicrotask(Bx))}function Px(){return xt(this),this}function Cx(){this instanceof h.Polyline||this instanceof h.CircleMarker?(this.beforeAdd=this._updateBounds=at,this.redraw=Px,I.set(this,"path"),this instanceof h.Polyline&&(Gs.set(this,this.closestLayerPoint),this.closestLayerPoint=xx),this instanceof h.Circle&&(Us.set(this,this.getBounds),this.getBounds=vx)):this instanceof h.GridLayer?(Fs.set(this,this._initContainer),this._initContainer=wx,this._updateOpacity=Ns):this instanceof h.ImageOverlay&&!(this instanceof h.VideoOverlay)&&!(this instanceof h.SVGOverlay)&&(I.set(this,"image"),this._reset=xt)}b();function Sx(){Zr.get(this).off(vr.get(this),this),Zr.set(this,null),vr.set(this,null)}function Ex(e,t){switch(I.get(e)){case"3d":return hs(e,t);case"raster":return sg(e,t);case"terrain":return Gg(e,t);case"image":return Tx.call(e,t);case"time":return Xg.call(e,t)}}function kx(e){if(!e._map)return;let t;for(t of V.get(e).values())Fr(e,t);V.get(e).clear(),Nr(e)}function _x(e){let t={};return oe.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=Nr.bind(null,e)),(q.get(e)||oe.get(e))&&(t.terrainchange=kx.bind(null,e)),t}b();function Ix(e){return!ur.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 zx(e){let t=Ix(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"&&(vr.set(this,I.get(this)==="raster"?rg(this):ur.get(this)?_x(this):yx()),Zr.set(this,r),r.on(vr.get(this),this),this.once("remove",Sx,this)),Ex(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):Br.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&Jn(this,e.target))}b();var Ws=[];var Zs={value:Promise.resolve()};function Ax(e,t){q.set(e,!0),Lt(e,t)}function Ox(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 Dx(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 Rx(e){return e.status!==200||Number(e.headers.get("Content-Length"))>32e6}function Gx(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)Dx(e,n,r,o),e.baseOffset===void 0&&(e.size=Number(n[3]));else if(Rx(t))throw new Error("COG server must support byte ranges for files over 32 MB")}async function Ux(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(),Ox(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}`);Gx(e,n,i,r);let a=await Ux(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 Fx=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function Nx(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 jx(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(Fx.includes(s)){if(n.has(s))throw new Error("Duplicate COG tag");n.set(s,await Nx(e,i,a,s,r))}}return{tags:n,next:i.getUint32(o*12,r)}}function Wx(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 Zx(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 $x(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(!Wx(e,t,r)||!Zx(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 Vx(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 df(e){let t;for(t of e||[])if(!Number.isFinite(t))return!1;return!0}function qx(e,t,r){return!!e&&e[0]===1&&e.length===4+e[3]*4&&!!t&&t.length===3&&df(t)&&t[0]>0&&Math.abs(t[0]-t[1])<=1e-8&&!!r&&r.length===6&&df(r)&&r[0]===0&&r[1]===0}function Hx(e,t,r,o){let i=e.get(34735),n=e.get(33550),a=e.get(33922);if(!qx(i,n,a)||!Vx(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 Yx(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 Xx(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 Kx(e,t,r){let o=t.tags,i=$x(o);r.base||(r.base=Hx(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)),!Yx(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)};Xx(e,c),e.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function Jx(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 jx(e,t),Kx(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 Qx(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 $s(e,t,r,o,i){let n=o*t.columns+r;return Qx(await $e(e,t.offsets[n],t.lengths[n],i),256*256*(t.elevation?4:t.samples),t.compression)}async function e0(e,t,r,o,i){let n=await $s(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 t0(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 $s(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 r0(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 o0(e,t,r,o,i){if(i?.throwIfAborted(),!r0(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?e0(e,n,r,o,i):t0(e,n,r,o,i)}function i0(e){return e.header}function n0(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 a0(e,t,r){let o=JSON.parse(new TextDecoder().decode(await Do(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 s0(e,t){let r={url:e},o=Da(await $e(r,0,127));n0(r,o);let i=await a0(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 m0(e,t){let r=t===void 0?{url:e}:await s0(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 Jx(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:i0.bind(null,r),getZxy:o0.bind(null,r)}}function f0(e,t){ls(e,{ariaLabel:"COG raster",...t,archive:t.archive||m0(new URL(t.url,document.baseURI).href,t.asset)})}function p0(e){switch(e){case"geojson":return Ax;case"pmtiles":return ls;case"cog":return f0;case"terrain":return Ug;case"traffic":return Vy;default:return null}}function c0(){let e=Ws.shift();return e.initialize=p0(e.type),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function l0(e){let{layer:t,ready:r}=e;if(e.error)return Kn(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 u0(e=xo){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};Ws.push(n),Zs.value=Zs.value.catch(at).then(c0);let a=Zs.value.then(l0);re.set(this,a),n.ready=a,a.catch(at)}b();function d0(e,t){switch(I.get(e)){case"3d":return Xo(e,t);case"raster":return dg(e,t);case"terrain":return yg(e,t);case"time":return Kg.call(e,t)}}function h0(e){let t=h.Util.stamp(e);return this._layers[t]?I.get(e)?(this._loaded&&d0(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):qi.value.call(this,e):this}H();function g0(){return k(this)}W();function y0(){return S(this)}function x0(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 v0(e){return x0(this,e)}function w0(){vt.has(this)||vt.add(this);let e=this._initHooksCalled;Vi.value.call(this),e||Cx.call(this)}Br.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(h.Layer.prototype));Vi.value=h.Layer.prototype.callInitHooks;h.Layer.include({initialize:u0,_layerAdd:zx,callInitHooks:w0});qi.value=h.Map.prototype.removeLayer;h.Map.include({removeLayer:h0,getPitch:g0,getBearing:y0});h.Marker.include({setRotation:v0});})();
|
|
5
5
|
//# sourceMappingURL=leaflet-city-mapper.js.map
|