leaflet-city-mapper 0.1.0 → 0.1.1
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 +1 -1
- package/dist/leaflet-city-mapper-src.js.map +1 -1
- package/dist/leaflet-city-mapper-worker-src.js.map +1 -1
- package/dist/leaflet-city-mapper-worker.js.map +1 -1
- package/dist/leaflet-city-mapper.js.map +1 -1
- package/libs/leaflet-lens.js +151 -151
- package/libs/leaflet.js +3 -3
- package/libs/openlayers-bindings.js +1129 -1129
- package/libs/openlayers-bindings.min.js.map +1 -1
- package/package.json +2 -4
- package/src/animations/cancelCameraAnimation.js +19 -19
- package/src/animations/mapStopPitchBearingAnimation.js +10 -10
- package/src/animations/scheduleCameraAnimation.js +15 -15
- package/src/animations/scheduleMarkerPan.js +14 -14
- package/src/animations/updateZoomCamera.js +25 -25
- package/src/archives/findDirectoryEntry.js +17 -17
- package/src/archives/findTile.js +45 -45
- package/src/archives/getDirectoryEntries.js +30 -30
- package/src/archives/getTileData.js +26 -26
- package/src/archives/readArchiveRange.js +48 -48
- package/src/astronomy/solarTime.js +21 -21
- package/src/camera/cameraMapReady.js +9 -9
- package/src/camera/cleanupCameraMap.js +13 -13
- package/src/camera/constrainCameraToBounds.js +3 -3
- package/src/camera/createSceneCamera.js +25 -25
- package/src/camera/getBearing.js +10 -10
- package/src/camera/getPitch.js +10 -10
- package/src/camera/mapGetBoundsCenterZoom.js +14 -14
- package/src/camera/mapLimitOffset.js +17 -17
- package/src/camera/mapPanBy.js +14 -14
- package/src/camera/setBearing.js +13 -13
- package/src/camera/setPitch.js +13 -13
- package/src/cog/decodeCogTile.js +37 -37
- package/src/cog/finiteCogValues.js +12 -12
- package/src/cog/getCogAssetEntry.js +26 -26
- package/src/cog/getCogBase.js +22 -22
- package/src/cog/getCogHeader.js +10 -10
- package/src/cog/getCogProfile.js +25 -25
- package/src/cog/getCogTile.js +25 -25
- package/src/cog/getColorTile.js +38 -38
- package/src/cog/getElevationTile.js +29 -29
- package/src/cog/hasCogProjection.js +16 -16
- package/src/cog/initCog.js +13 -13
- package/src/cog/invalidCogFullResponse.js +10 -10
- package/src/cog/openCog.js +40 -40
- package/src/cog/openCogAsset.js +22 -22
- package/src/cog/readCog.js +39 -39
- package/src/cog/readCogBlock.js +19 -19
- package/src/cog/readCogBody.js +30 -30
- package/src/cog/readCogDirectories.js +32 -32
- package/src/cog/readCogDirectory.js +34 -34
- package/src/cog/readCogLevel.js +36 -36
- package/src/cog/readCogTag.js +28 -28
- package/src/cog/validCogDimensions.js +15 -15
- package/src/cog/validCogEncoding.js +18 -18
- package/src/cog/validCogGeoArrays.js +17 -17
- package/src/cog/validCogGrid.js +22 -22
- package/src/cog/validCogTileCoordinates.js +13 -13
- package/src/cog/validateCogContainer.js +17 -17
- package/src/cog/validateCogContentRange.js +18 -18
- package/src/cog/validateCogOffsets.js +19 -19
- package/src/cog/validateCogRange.js +16 -16
- package/src/cog/validateCogResponse.js +26 -26
- package/src/collision/collectIntersections.js +41 -41
- package/src/collision/hiddenLightHit.js +19 -19
- package/src/collision/indexTriangle.js +18 -18
- package/src/collision/insideMesh.js +47 -47
- package/src/collision/insideWalker.js +52 -52
- package/src/collision/intersectMeshes.js +40 -40
- package/src/collision/localRay.js +31 -31
- package/src/collision/mergeHits.js +19 -19
- package/src/collision/rayBounds.js +28 -28
- package/src/collision/readTriangle.js +32 -32
- package/src/collision/trafficCollision.js +23 -23
- package/src/collision/transformTriangle.js +18 -18
- package/src/collision/triangleDistance.js +34 -34
- package/src/collision/vertexCount.js +11 -11
- package/src/collision/worldHit.js +30 -30
- package/src/controls/acceptPitchDrag.js +10 -10
- package/src/controls/acceptRotateDrag.js +9 -9
- package/src/controls/addCameraHandler.js +18 -18
- package/src/controls/adjustCameraDrag.js +13 -13
- package/src/controls/cameraDragContextMenu.js +12 -12
- package/src/controls/cameraDragEnd.js +10 -10
- package/src/controls/cameraDragMove.js +31 -31
- package/src/controls/changeCameraTouch.js +17 -17
- package/src/controls/compassOrientation.js +12 -12
- package/src/controls/compassRemoveHooks.js +2 -2
- package/src/controls/containerResizeRemoveHooks.js +2 -2
- package/src/controls/endCameraTouch.js +18 -18
- package/src/controls/failCompassPermission.js +10 -10
- package/src/controls/finishCameraDrag.js +14 -14
- package/src/controls/finishCompassPermission.js +24 -24
- package/src/controls/isEditableTarget.js +9 -9
- package/src/controls/loadCameraControls.js +18 -18
- package/src/controls/moveCameraTouch.js +34 -34
- package/src/controls/refreshRotateFocus.js +5 -5
- package/src/controls/removeCameraDrag.js +28 -28
- package/src/controls/resizeMap.js +7 -7
- package/src/controls/rotateButtonClick.js +16 -16
- package/src/controls/rotateButtonKeydown.js +20 -20
- package/src/controls/rotateControl.js +12 -12
- package/src/controls/shiftRotateRemoveHooks.js +2 -2
- package/src/controls/shiftRotateWheel.js +15 -15
- package/src/core/cameraMarkerOnDrag.js +16 -16
- package/src/core/constructLayer.js +16 -16
- package/src/core/extendLeafletClass.js +12 -12
- package/src/core/extendTerrainPixelBounds.js +41 -41
- package/src/core/layerAddInitHook.js +12 -12
- package/src/core/layerMergeOptions.js +14 -14
- package/src/core/markerInitInteraction.js +10 -10
- package/src/core/markerSetIcon.js +14 -14
- package/src/core/markerSetRotation.js +19 -19
- package/src/core/projectNativePath.js +30 -30
- package/src/core/redrawPath.js +11 -11
- package/src/core/removeLayer.js +26 -26
- package/src/core/setRotation.js +12 -12
- package/src/core/whenReady.js +14 -14
- package/src/geometry/addBridges.js +36 -36
- package/src/geometry/addGeneratedTriangle.js +10 -10
- package/src/geometry/appendAreaTriangle.js +32 -32
- package/src/geometry/appendNativeTriangle.js +17 -17
- package/src/geometry/appendRouteDash.js +33 -33
- package/src/geometry/appendRouteSegment.js +28 -28
- package/src/geometry/assembleAreaGeometry.js +48 -48
- package/src/geometry/bridgeEdge.js +18 -18
- package/src/geometry/bridgeFaces.js +22 -22
- package/src/geometry/bridgePaths.js +19 -19
- package/src/geometry/bridgePolygon.js +37 -37
- package/src/geometry/bridgeSides.js +18 -18
- package/src/geometry/buildProjectedPoint.js +32 -32
- package/src/geometry/buildProjectedPolygon.js +34 -34
- package/src/geometry/circleAt.js +20 -20
- package/src/geometry/circleGeometry.js +41 -41
- package/src/geometry/createModelGeometry.js +44 -44
- package/src/geometry/crossVector.js +15 -15
- package/src/geometry/dashValues.js +23 -23
- package/src/geometry/dashedSegment.js +33 -33
- package/src/geometry/diskAt.js +18 -18
- package/src/geometry/emitter.js +18 -18
- package/src/geometry/fillNativePolygon.js +28 -28
- package/src/geometry/generateTreeGeometry.js +18 -18
- package/src/geometry/indexBridge.js +36 -36
- package/src/geometry/instanceAreaGeometry.js +37 -37
- package/src/geometry/line.js +28 -28
- package/src/geometry/lineJoin.js +35 -35
- package/src/geometry/markerImageBounds.js +20 -20
- package/src/geometry/meshShadowBounds.js +33 -33
- package/src/geometry/offsetBelowGround.js +10 -10
- package/src/geometry/quad.js +23 -23
- package/src/geometry/restoreGeometry.js +29 -29
- package/src/geometry/roofCoverage.js +33 -33
- package/src/geometry/roofFootprint.js +40 -40
- package/src/geometry/samePoint.js +11 -11
- package/src/geometry/segment.js +32 -32
- package/src/geometry/subtractRoofTile.js +28 -28
- package/src/geometry/terrainBuffers.js +36 -36
- package/src/geometry/terrainTileGeometry.js +28 -28
- package/src/geometry/validateTree.js +19 -19
- package/src/globals/L.js +6 -6
- package/src/globals/cameraFov.js +8 -8
- package/src/globals/cogTags.js +6 -6
- package/src/globals/colorTexture.js +11 -11
- package/src/globals/cosObliquity.js +8 -8
- package/src/globals/degrees.js +6 -6
- package/src/globals/earthCirc.js +6 -6
- package/src/globals/geometryWorkerUrl.js +8 -8
- package/src/globals/halfRadians.js +6 -6
- package/src/globals/lampDirections.js +13 -13
- package/src/globals/layerControlAddItem.js +8 -8
- package/src/globals/leafletLayer.js +8 -8
- package/src/globals/lightScale.js +6 -6
- package/src/globals/mvtTextDecoder.js +6 -6
- package/src/globals/nativeScalableStyleKeys.js +6 -6
- package/src/globals/sinObliquity.js +8 -8
- package/src/globals/tau.js +6 -6
- package/src/globals/vectorStyleNamedColors.js +13 -13
- package/src/globals/vectorTileEvents.js +6 -6
- package/src/globals/workerCogSource.js +6 -6
- package/src/gpu/initializeRendererResources.js +39 -39
- package/src/gpu/initializeSharedRenderer.js +59 -59
- package/src/gpu/mountRenderer.js +25 -25
- package/src/layer-controls/layerControlInputId.js +18 -18
- package/src/layer-controls/layerCountTitle.js +16 -16
- package/src/layer-controls/placeEntryElement.js +29 -29
- package/src/layer-controls/renderLayerCount.js +28 -28
- package/src/lighting/visitLightCells.js +26 -26
- package/src/lighting/writeLightCell.js +14 -14
- package/src/materials/createProgramLayout.js +44 -44
- package/src/materials/createProgramUniforms.js +25 -25
- package/src/materials/modelMaterialFor.js +29 -29
- package/src/materials/prepareMeshCutout.js +21 -21
- package/src/materials/terrainRasterProgram.js +65 -65
- package/src/materials/validateRoofMaterial.js +17 -17
- package/src/models/applyModelTransform.js +18 -18
- package/src/models/buildModelNodes.js +24 -24
- package/src/models/createModelContext.js +24 -24
- package/src/models/loadBuffer.js +16 -16
- package/src/models/loadModelResources.js +22 -22
- package/src/models/normalizeAccessor.js +21 -21
- package/src/models/prepareModel.js +29 -29
- package/src/models/prepareModelGeometry.js +35 -35
- package/src/models/prepareModelPrimitive.js +25 -25
- package/src/models/readAccessorValue.js +16 -16
- package/src/models/readModelAttributes.js +32 -32
- package/src/models/readModelIndices.js +28 -28
- package/src/models/readSparseAccessor.js +31 -31
- package/src/models/releaseModelResources.js +15 -15
- package/src/mvt/addMvtCrossings.js +23 -23
- package/src/mvt/appendMvtBandTriangles.js +42 -42
- package/src/mvt/appendMvtCoordinates.js +20 -20
- package/src/mvt/appendMvtPolygonTriangles.js +29 -29
- package/src/mvt/beginMvtPath.js +19 -19
- package/src/mvt/closeMvtPath.js +16 -16
- package/src/mvt/collectMvtEdges.js +29 -29
- package/src/mvt/createMvtReader.js +14 -14
- package/src/mvt/decodeVectorTile.js +39 -39
- package/src/mvt/expectMvtWire.js +11 -11
- package/src/mvt/finishMvtPath.js +14 -14
- package/src/mvt/finiteMvtCoordinate.js +14 -14
- package/src/mvt/groupMvtPolygons.js +35 -35
- package/src/mvt/isMvtFallbackError.js +13 -13
- package/src/mvt/mergeMvtActiveEdges.js +18 -18
- package/src/mvt/mvtEdgeX.js +12 -12
- package/src/mvt/mvtPathsVertices.js +15 -15
- package/src/mvt/mvtPolygonPaths.js +19 -19
- package/src/mvt/numericMvtValue.js +11 -11
- package/src/mvt/readMvtFeature.js +46 -46
- package/src/mvt/readMvtField.js +17 -17
- package/src/mvt/readMvtGeometry.js +42 -42
- package/src/mvt/readMvtInteger.js +22 -22
- package/src/mvt/readMvtKnownValue.js +30 -30
- package/src/mvt/readMvtLayer.js +40 -40
- package/src/mvt/readMvtMessage.js +18 -18
- package/src/mvt/readMvtNumber.js +18 -18
- package/src/mvt/readMvtNumbers.js +18 -18
- package/src/mvt/readMvtString.js +14 -14
- package/src/mvt/readMvtValue.js +29 -29
- package/src/mvt/skipMvtField.js +22 -22
- package/src/mvt/sortMvtActiveEdges.js +20 -20
- package/src/mvt/sortedMvtLevels.js +29 -29
- package/src/mvt/takeMvtBytes.js +18 -18
- package/src/mvt/tessellateVectorRings.js +26 -26
- package/src/mvt/triangulateVectorRings.js +23 -23
- package/src/native/beforeNativeRender.js +21 -21
- package/src/native/bypassNativeEvent.js +21 -21
- package/src/native/canScaleNativeStyle.js +26 -26
- package/src/native/compareNativeHits.js +10 -10
- package/src/native/createNativeMesh.js +46 -46
- package/src/native/forwardNativeError.js +8 -8
- package/src/native/getGridTerrainTile.js +47 -47
- package/src/native/gridTerrainElevation.js +34 -34
- package/src/native/isCurrentNativeLayer.js +11 -11
- package/src/native/loadGridTerrain.js +36 -36
- package/src/native/nativeEventSource.js +27 -27
- package/src/native/nativeProgram.js +28 -28
- package/src/native/nativeTerrainElevation.js +27 -27
- package/src/native/nativeVectorGeometry.js +30 -30
- package/src/native/orderNativeGridLayer.js +20 -20
- package/src/native/prepareGridTerrainRequests.js +23 -23
- package/src/native/pruneNativeResources.js +25 -25
- package/src/native/readyNativeGPU.js +13 -13
- package/src/native/rejectNativeReady.js +2 -2
- package/src/native/removeNativeEvents.js +20 -20
- package/src/native/resolveNativeReady.js +2 -2
- package/src/native/restoreNativeEvents.js +8 -8
- package/src/native/retainGridTerrain.js +15 -15
- package/src/native/styleNativeMesh.js +20 -20
- package/src/native/syncGridTile.js +28 -28
- package/src/native/syncImageOverlay.js +13 -13
- package/src/native/syncNativeStrokeAnchors.js +18 -18
- package/src/native/syncNativeStrokeZoom.js +34 -34
- package/src/native/syncTerrainGridTile.js +38 -38
- package/src/native/terrainGridMesh.js +47 -47
- package/src/native/updateNativeHover.js +15 -15
- package/src/native/updateNativeStrokeRadius.js +14 -14
- package/src/picking/hitColliderCell.js +29 -29
- package/src/picking/validateCameraInverse.js +15 -15
- package/src/projections/displayContainerPoint.js +32 -32
- package/src/projections/projectBridgePoint.js +17 -17
- package/src/projections/toPoint.js +13 -13
- package/src/projections/transformZoomAnimationPoint.js +8 -8
- package/src/projections/verticalGroundY.js +14 -14
- package/src/raster/rasterTileRange.js +32 -32
- package/src/raster/retainRasterTiles.js +21 -21
- package/src/rendering/collectVisibleMesh.js +48 -48
- package/src/rendering/compareMeshDepth.js +14 -14
- package/src/rendering/drawPipeline.js +44 -44
- package/src/rendering/nativeStrokeExpansion.js +11 -11
- package/src/rendering/prepareFrameBuffer.js +24 -24
- package/src/rendering/prepareMeshUniforms.js +36 -36
- package/src/rendering/revealRoofMesh.js +43 -43
- package/src/scene/addSceneLayer.js +24 -24
- package/src/scene/callLayer.js +34 -34
- package/src/scene/createLayer.js +13 -13
- package/src/scene/getLocation.js +12 -12
- package/src/scene/isNativeLayer.js +19 -19
- package/src/scene/removeSceneLayer.js +22 -22
- package/src/scene/reportLayerError.js +9 -9
- package/src/shaders/materialBaseShader.js +26 -26
- package/src/shaders/materialSurfaceShader.js +60 -60
- package/src/shaders/materialVertexShader.js +89 -89
- package/src/shaders/nativeStrokeShader.js +13 -13
- package/src/shaders/roofVertexShader.js +16 -16
- package/src/shadows/shadowMeshMatches.js +19 -19
- package/src/sources/buildAreaFeatures.js +23 -23
- package/src/sources/extrusionStyle.js +21 -21
- package/src/sources/featureAnchor.js +21 -21
- package/src/sources/groundOffset.js +9 -9
- package/src/sources/initVectorTiles.js +21 -21
- package/src/sources/isVectorTileSource.js +11 -11
- package/src/sources/matchesAreaTile.js +17 -17
- package/src/sources/pendingSourceAreas.js +28 -28
- package/src/sources/prepareAreaGeometryJob.js +34 -34
- package/src/sources/projectAreaPolygons.js +25 -25
- package/src/sources/readyVectorTiles.js +17 -17
- package/src/sunlight/addTimeControlToMap.js +18 -18
- package/src/sunlight/addTimeLayer.js +12 -12
- package/src/sunlight/initializeTimeControl.js +18 -18
- package/src/sunlight/onAddSun.js +37 -37
- package/src/sunlight/onAddTimeControl.js +12 -12
- package/src/sunlight/onRemoveSun.js +10 -10
- package/src/sunlight/removeSun.js +25 -25
- package/src/sunlight/removeTimeControl.js +14 -14
- package/src/sunlight/removeTimeLayer.js +11 -11
- package/src/sunlight/requestSunlightRender.js +12 -12
- package/src/sunlight/styleTimeControl.js +13 -13
- package/src/sunlight/tickSun.js +10 -10
- package/src/sunlight/updateCelestialDisc.js +23 -23
- package/src/sunlight/updateSun.js +44 -44
- package/src/sunlight/useLiveTime.js +11 -11
- package/src/sunlight/useSelectedTime.js +26 -26
- package/src/terrain/applyTerrain.js +30 -30
- package/src/terrain/copyTerrainTile.js +20 -20
- package/src/terrain/loadReadyTerrain.js +6 -6
- package/src/terrain/mapElevationOf.js +19 -19
- package/src/terrain/readBridges.js +13 -13
- package/src/terrain/readyTerrainOf.js +14 -14
- package/src/terrain/sampleTerrainTile.js +16 -16
- package/src/terrain/terrainTileQueue.js +34 -34
- package/src/textures/addImageState.js +13 -13
- package/src/textures/bindMeshTextures.js +57 -57
- package/src/textures/collectRoofTiles.js +23 -23
- package/src/textures/loadModelImage.js +29 -29
- package/src/textures/modelTextureFor.js +47 -47
- package/src/textures/prepareMeshTextures.js +31 -31
- package/src/textures/removeImageState.js +13 -13
- package/src/textures/resizeRoofTexture.js +32 -32
- package/src/textures/restoreMaterialTextures.js +22 -22
- package/src/textures/updateRoofAtlas.js +29 -29
- package/src/textures/uploadMeshTexture.js +32 -32
- package/src/textures/uploadNativeImage.js +26 -26
- package/src/textures/uploadRoofTile.js +29 -29
- package/src/traffic/createTrafficMesh.js +17 -17
- package/src/traffic/disposeTrafficObject.js +19 -19
- package/src/traffic/failTraffic.js +12 -12
- package/src/traffic/failedTrafficLoad.js +10 -10
- package/src/traffic/fetchTrafficLanes.js +21 -21
- package/src/traffic/loadedTrafficLanes.js +21 -21
- package/src/traffic/locateTraffic.js +20 -20
- package/src/traffic/moveTraffic.js +21 -21
- package/src/traffic/readyTraffic.js +10 -10
- package/src/traffic/refreshTrafficTrips.js +42 -42
- package/src/traffic/routeColor.js +13 -13
- package/src/traffic/startTraffic.js +12 -12
- package/src/traffic/trafficNow.js +15 -15
- package/src/traffic/trafficStatusText.js +13 -13
- package/src/traffic/trafficStorage.js +13 -13
- package/src/traffic/updateTraffic.js +13 -13
- package/src/traffic/updateTrafficLights.js +23 -23
- package/src/traffic/updateTrafficPose.js +15 -15
- package/src/traffic/updateTrafficTerrain.js +15 -15
- package/src/traffic/uploadTrafficLanes.js +27 -27
- package/src/transforms/composeLocalTransform.js +23 -23
- package/src/transforms/transformNativePoint.js +19 -19
- package/src/transforms/worldMatrixChanged.js +26 -26
- package/src/triangulation/clipEars.js +32 -32
- package/src/triangulation/connectHole.js +30 -30
- package/src/triangulation/cross.js +12 -12
- package/src/triangulation/equal.js +11 -11
- package/src/triangulation/intersects.js +21 -21
- package/src/triangulation/mergeHoles.js +19 -19
- package/src/triangulation/on.js +13 -13
- package/src/triangulation/polygonRings.js +22 -22
- package/src/triangulation/validateArea.js +19 -19
- package/src/utils/compareDistance.js +11 -11
- package/src/utils/yieldTask.js +12 -12
- package/src/vector-style/appendQuotedStyleCharacter.js +30 -30
- package/src/vector-style/arrayContainsRange.js +18 -18
- package/src/vector-style/evaluateBoolean.js +31 -31
- package/src/vector-style/evaluateCoalesceOrCase.js +34 -34
- package/src/vector-style/evaluateComparison.js +29 -29
- package/src/vector-style/evaluateIExpression.js +21 -21
- package/src/vector-style/evaluateInput.js +16 -16
- package/src/vector-style/evaluateInterpolate.js +36 -36
- package/src/vector-style/evaluateMatch.js +21 -21
- package/src/vector-style/evaluateMath.js +26 -26
- package/src/vector-style/evaluateMembership.js +29 -29
- package/src/vector-style/evaluateNegation.js +26 -26
- package/src/vector-style/evaluatePrimitive.js +21 -21
- package/src/vector-style/evaluateStep.js +20 -20
- package/src/vector-style/evaluateStyle.js +43 -43
- package/src/vector-style/evaluateToExpression.js +27 -27
- package/src/vector-style/fillVectorPaint.js +26 -26
- package/src/vector-style/lineVectorPaint.js +31 -31
- package/src/vector-style/parseFunctionalColor.js +23 -23
- package/src/vector-style/parseHexColor.js +20 -20
- package/src/vector-style/parseVectorStyle.js +20 -20
- package/src/vector-style/readPaintValue.js +17 -17
- package/src/vector-style/removeTrailingCommas.js +19 -19
- package/src/vector-style/scaleDashArray.js +25 -25
- package/src/vector-style/skipStyleComment.js +20 -20
- package/src/vector-style/stripStyleComments.js +28 -28
- package/src/vector-style/styleColor.js +18 -18
- package/src/vector-style/validateVectorLayers.js +18 -18
- package/src/vector-style/vectorPaint.js +17 -17
- package/src/vector-style/visibleStyle.js +16 -16
- package/src/vector-tiles/appendVectorBatch.js +34 -34
- package/src/vector-tiles/attachVectorTileBatch.js +25 -25
- package/src/vector-tiles/attachVectorTileBatches.js +26 -26
- package/src/vector-tiles/compareVectorLabelPriority.js +11 -11
- package/src/vector-tiles/compareVectorTileDistance.js +11 -11
- package/src/vector-tiles/createVectorLabel.js +37 -37
- package/src/vector-tiles/forwardVectorTileError.js +10 -10
- package/src/vector-tiles/loadVectorSprite.js +14 -14
- package/src/vector-tiles/loadVectorTile.js +45 -45
- package/src/vector-tiles/onVectorTileAdd.js +44 -44
- package/src/vector-tiles/onVectorTileMessage.js +15 -15
- package/src/vector-tiles/onVectorTileRemove.js +25 -25
- package/src/vector-tiles/onVectorTileWorkerError.js +16 -16
- package/src/vector-tiles/paintVectorTileBatch.js +18 -18
- package/src/vector-tiles/prepareVectorLabel.js +34 -34
- package/src/vector-tiles/prepareVectorStyleLayer.js +38 -38
- package/src/vector-tiles/prepareVectorTile.js +29 -29
- package/src/vector-tiles/projectVectorPaths.js +25 -25
- package/src/vector-tiles/projectVectorPoint.js +15 -15
- package/src/vector-tiles/projectVectorTriangles.js +28 -28
- package/src/vector-tiles/pruneVectorTiles.js +14 -14
- package/src/vector-tiles/pumpVectorTiles.js +21 -21
- package/src/vector-tiles/readTileJSON.js +27 -27
- package/src/vector-tiles/readVectorStyle.js +28 -28
- package/src/vector-tiles/refreshVectorTiles.js +8 -8
- package/src/vector-tiles/reserveVectorLabelCells.js +14 -14
- package/src/vector-tiles/retireVectorTileGroup.js +20 -20
- package/src/vector-tiles/revokeVectorWorkerUrl.js +14 -14
- package/src/vector-tiles/rotateVectorLabel.js +19 -19
- package/src/vector-tiles/rotateVectorLabels.js +9 -9
- package/src/vector-tiles/simplifyVectorPath.js +29 -29
- package/src/vector-tiles/updateVectorLabelMarker.js +36 -36
- package/src/vector-tiles/updateVectorLabelStyle.js +14 -14
- package/src/vector-tiles/updateVectorTileLabels.js +33 -33
- package/src/vector-tiles/updateVectorTilePaint.js +25 -25
- package/src/vector-tiles/updateVectorTiles.js +32 -32
- package/src/vector-tiles/validateVectorTileZooms.js +15 -15
- package/src/vector-tiles/vectorFeaturePaint.js +25 -25
- package/src/vector-tiles/vectorFeaturePaths.js +26 -26
- package/src/vector-tiles/vectorFeatureZoom.js +18 -18
- package/src/vector-tiles/vectorLabelAnchors.js +31 -31
- package/src/vector-tiles/vectorLabelCandidates.js +18 -18
- package/src/vector-tiles/vectorLabelCells.js +32 -32
- package/src/vector-tiles/vectorLabelIcon.js +38 -38
- package/src/vector-tiles/vectorLabelProperty.js +12 -12
- package/src/vector-tiles/vectorLabelText.js +19 -19
- package/src/vector-tiles/vectorSpriteIcon.js +19 -19
- package/src/vector-tiles/vectorStraightRun.js +23 -23
- package/src/vector-tiles/vectorStyleDependencies.js +22 -22
- package/src/vector-tiles/vectorStyleValue.js +16 -16
- package/src/vector-tiles/vectorStyleZoom.js +12 -12
- package/src/vector-tiles/vectorTileAwaited.js +17 -17
- package/src/vector-tiles/vectorTileOverlaps.js +12 -12
- package/src/vector-tiles/vectorTilePaint.js +18 -18
- package/src/vector-tiles/vectorTileSettings.js +27 -27
- package/src/vector-tiles/vectorTilesIdle.js +11 -11
- package/src/vector-tiles/vectorTolerance.js +11 -11
- package/src/vector-tiles/wrapVectorLabel.js +17 -17
- package/src/vehicles/boatModel.js +35 -35
- package/src/vehicles/busModel.js +13 -13
- package/src/vehicles/carModel.js +39 -39
- package/src/walk/initializeWalkControl.js +12 -12
- package/src/walk/isWalkBlocked.js +15 -15
- package/src/walk/landWalker.js +41 -41
- package/src/walk/moveWalker.js +37 -37
- package/src/walk/onAddWalkControl.js +40 -40
- package/src/walk/onRemoveWalkControl.js +17 -17
- package/src/walk/onWalkBlur.js +3 -3
- package/src/walk/onWalkTerrain.js +3 -3
- package/src/walk/resolveWalkerPosition.js +33 -33
- package/src/walk/stepWalkerHeight.js +18 -18
- package/src/walk/toggleWalking.js +4 -4
- package/src/walk/updateWalkerFrame.js +29 -29
- package/src/walk/updateWalkerView.js +31 -31
- package/src/weakmaps/cameraHandlersByMap.js +6 -6
- package/src/weakmaps/geometryWorkersByMap.js +6 -6
- package/src/weakmaps/nativeProgramsByRenderer.js +6 -6
- package/src/weakmaps/pathProjectionByMap.js +6 -6
- package/src/weakmaps/streamTerrainByLayer.js +6 -6
- package/src/weakmaps/streamTerrainByMap.js +6 -6
- package/src/weakmaps/sunByMap.js +6 -6
- package/src/weakmaps/vectorTileOptionsByLayer.js +6 -6
- package/src/weakmaps/vectorWorkerByLayer.js +6 -6
- package/src/weakmaps/walkByMap.js +6 -6
- package/src/weakmaps/workerMapByLayer.js +6 -6
- package/src/workers/acquireGeometryWorker.js +39 -39
- package/src/workers/buildAreaInWorker.js +24 -24
- package/src/workers/closeGeometryWorkers.js +16 -16
- package/src/workers/cogWorker.js +27 -27
- package/src/workers/createGeometryWorker.js +30 -30
- package/src/workers/geometryWorker.js +34 -34
- package/src/workers/getCogInWorker.js +18 -18
- package/src/workers/modelWorker.js +17 -17
- package/src/workers/openCogInWorker.js +22 -22
- package/src/workers/runSourceWorker.js +44 -44
- package/src/workers/settleGeometryWorker.js +16 -16
- package/src/workers/startGeometryWorker.js +23 -23
- package/src/workers/vectorTileWorker.js +15 -15
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Default URL of the geometry worker for module and bundled builds.
|
|
3
|
-
*
|
|
4
|
-
* @type {string}
|
|
5
|
-
*/
|
|
6
|
-
export const geometryWorkerUrl = import.meta?.url
|
|
7
|
-
? new URL('../workers/geometryWorker.js', import.meta.url).href
|
|
8
|
-
: new URL('leaflet-city-mapper-worker.js', document.currentScript?.src || document.baseURI).href;
|
|
1
|
+
/**
|
|
2
|
+
* Default URL of the geometry worker for module and bundled builds.
|
|
3
|
+
*
|
|
4
|
+
* @type {string}
|
|
5
|
+
*/
|
|
6
|
+
export const geometryWorkerUrl = import.meta?.url
|
|
7
|
+
? new URL('../workers/geometryWorker.js', import.meta.url).href
|
|
8
|
+
: new URL('leaflet-city-mapper-worker.js', document.currentScript?.src || document.baseURI).href;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Conversion factor from degrees to half-angle radians.
|
|
3
|
-
*
|
|
4
|
-
* @type {number}
|
|
5
|
-
*/
|
|
6
|
-
export const halfRadians = Math.PI / 360;
|
|
1
|
+
/**
|
|
2
|
+
* Conversion factor from degrees to half-angle radians.
|
|
3
|
+
*
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const halfRadians = Math.PI / 360;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ring vertex directions and face normals for lamp geometry.
|
|
3
|
-
*
|
|
4
|
-
* @type {Array<Object>}
|
|
5
|
-
*/
|
|
6
|
-
export const lampDirections = [
|
|
7
|
-
{ x: Math.cos(0 * Math.PI / 3), y: Math.sin(0 * Math.PI / 3), nx: Math.cos(0.5 * Math.PI / 3), nz: -Math.sin(0.5 * Math.PI / 3) },
|
|
8
|
-
{ 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) },
|
|
9
|
-
{ 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) },
|
|
10
|
-
{ 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) },
|
|
11
|
-
{ 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) },
|
|
12
|
-
{ 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) },
|
|
13
|
-
];
|
|
1
|
+
/**
|
|
2
|
+
* Ring vertex directions and face normals for lamp geometry.
|
|
3
|
+
*
|
|
4
|
+
* @type {Array<Object>}
|
|
5
|
+
*/
|
|
6
|
+
export const lampDirections = [
|
|
7
|
+
{ x: Math.cos(0 * Math.PI / 3), y: Math.sin(0 * Math.PI / 3), nx: Math.cos(0.5 * Math.PI / 3), nz: -Math.sin(0.5 * Math.PI / 3) },
|
|
8
|
+
{ 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) },
|
|
9
|
+
{ 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) },
|
|
10
|
+
{ 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) },
|
|
11
|
+
{ 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) },
|
|
12
|
+
{ 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) },
|
|
13
|
+
];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { L } from './L.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Original Leaflet layers control item builder, when available.
|
|
5
|
-
*
|
|
6
|
-
* @type {Function|undefined}
|
|
7
|
-
*/
|
|
8
|
-
export const layerControlAddItem = L?.LayersControl?.prototype._addItem;
|
|
1
|
+
import { L } from './L.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Original Leaflet layers control item builder, when available.
|
|
5
|
+
*
|
|
6
|
+
* @type {Function|undefined}
|
|
7
|
+
*/
|
|
8
|
+
export const layerControlAddItem = L?.LayersControl?.prototype._addItem;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { L } from './L.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Original Leaflet Layer constructor before its contract is extended.
|
|
5
|
-
*
|
|
6
|
-
* @type {Function|undefined}
|
|
7
|
-
*/
|
|
8
|
-
export const leafletLayer = L?.Layer;
|
|
1
|
+
import { L } from './L.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Original Leaflet Layer constructor before its contract is extended.
|
|
5
|
+
*
|
|
6
|
+
* @type {Function|undefined}
|
|
7
|
+
*/
|
|
8
|
+
export const leafletLayer = L?.Layer;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scale converting point light flux to renderer intensity.
|
|
3
|
-
*
|
|
4
|
-
* @type {number}
|
|
5
|
-
*/
|
|
6
|
-
export const lightScale = 0.03 / (4 * Math.PI);
|
|
1
|
+
/**
|
|
2
|
+
* Scale converting point light flux to renderer intensity.
|
|
3
|
+
*
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const lightScale = 0.03 / (4 * Math.PI);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Strict UTF-8 decoder used for vector tile strings.
|
|
3
|
-
*
|
|
4
|
-
* @type {TextDecoder}
|
|
5
|
-
*/
|
|
6
|
-
export const mvtTextDecoder = new TextDecoder('utf-8', { fatal: true });
|
|
1
|
+
/**
|
|
2
|
+
* Strict UTF-8 decoder used for vector tile strings.
|
|
3
|
+
*
|
|
4
|
+
* @type {TextDecoder}
|
|
5
|
+
*/
|
|
6
|
+
export const mvtTextDecoder = new TextDecoder('utf-8', { fatal: true });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Native style properties that can be updated without rebuilding geometry.
|
|
3
|
-
*
|
|
4
|
-
* @type {Set<string>}
|
|
5
|
-
*/
|
|
6
|
-
export const nativeScalableStyleKeys = new Set(['color', 'opacity', 'weight', 'fillColor', 'fillOpacity']);
|
|
1
|
+
/**
|
|
2
|
+
* Native style properties that can be updated without rebuilding geometry.
|
|
3
|
+
*
|
|
4
|
+
* @type {Set<string>}
|
|
5
|
+
*/
|
|
6
|
+
export const nativeScalableStyleKeys = new Set(['color', 'opacity', 'weight', 'fillColor', 'fillOpacity']);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { radians } from './radians.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Sine of Earth's axial obliquity used in celestial position calculations.
|
|
5
|
-
*
|
|
6
|
-
* @type {number}
|
|
7
|
-
*/
|
|
8
|
-
export const sinObliquity = Math.sin(23.4397 * radians);
|
|
1
|
+
import { radians } from './radians.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sine of Earth's axial obliquity used in celestial position calculations.
|
|
5
|
+
*
|
|
6
|
+
* @type {number}
|
|
7
|
+
*/
|
|
8
|
+
export const sinObliquity = Math.sin(23.4397 * radians);
|
package/src/globals/tau.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Full circle angle in radians.
|
|
3
|
-
*
|
|
4
|
-
* @type {number}
|
|
5
|
-
*/
|
|
6
|
-
export const tau = 2 * Math.PI;
|
|
1
|
+
/**
|
|
2
|
+
* Full circle angle in radians.
|
|
3
|
+
*
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const tau = 2 * Math.PI;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Supported named vector style colors as red, green, blue and alpha values.
|
|
3
|
-
*
|
|
4
|
-
* @type {Object<string, Array<number>>}
|
|
5
|
-
*/
|
|
6
|
-
export const vectorStyleNamedColors = {
|
|
7
|
-
black: [0, 0, 0, 1],
|
|
8
|
-
white: [255, 255, 255, 1],
|
|
9
|
-
gray: [128, 128, 128, 1],
|
|
10
|
-
blue: [0, 0, 255, 1],
|
|
11
|
-
red: [255, 0, 0, 1],
|
|
12
|
-
green: [0, 128, 0, 1]
|
|
13
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Supported named vector style colors as red, green, blue and alpha values.
|
|
3
|
+
*
|
|
4
|
+
* @type {Object<string, Array<number>>}
|
|
5
|
+
*/
|
|
6
|
+
export const vectorStyleNamedColors = {
|
|
7
|
+
black: [0, 0, 0, 1],
|
|
8
|
+
white: [255, 255, 255, 1],
|
|
9
|
+
gray: [128, 128, 128, 1],
|
|
10
|
+
blue: [0, 0, 255, 1],
|
|
11
|
+
red: [255, 0, 0, 1],
|
|
12
|
+
green: [0, 128, 0, 1]
|
|
13
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Map events that schedule vector tile refreshes.
|
|
3
|
-
*
|
|
4
|
-
* @type {string}
|
|
5
|
-
*/
|
|
6
|
-
export const vectorTileEvents = 'move zoom rotate pitch resize viewreset';
|
|
1
|
+
/**
|
|
2
|
+
* Map events that schedule vector tile refreshes.
|
|
3
|
+
*
|
|
4
|
+
* @type {string}
|
|
5
|
+
*/
|
|
6
|
+
export const vectorTileEvents = 'move zoom rotate pitch resize viewreset';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Worker-local cache of open COG sources keyed by URL and asset.
|
|
3
|
-
*
|
|
4
|
-
* @type {Map}
|
|
5
|
-
*/
|
|
6
|
-
export const workerCogSource = new Map();
|
|
1
|
+
/**
|
|
2
|
+
* Worker-local cache of open COG sources keyed by URL and asset.
|
|
3
|
+
*
|
|
4
|
+
* @type {Map}
|
|
5
|
+
*/
|
|
6
|
+
export const workerCogSource = new Map();
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
|
|
2
|
-
import { sceneSunlightUniforms } from '../globals/sceneSunlightUniforms.js';
|
|
3
|
-
import { resizeSunlight } from '../shadows/resizeSunlight.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Create sunlight bindings and a fallback roof texture for the layer's renderer.
|
|
7
|
-
*
|
|
8
|
-
* @param {L.Layer} layer Layer owning the renderer.
|
|
9
|
-
* @param {GPUDevice} device Device used to create the resources.
|
|
10
|
-
*/
|
|
11
|
-
export function initializeRendererResources(layer, device) {
|
|
12
|
-
const renderer = rendererByLayer.get(layer);
|
|
13
|
-
const layout = device.createBindGroupLayout(/* alloc */ {
|
|
14
|
-
entries: /* alloc */ [
|
|
15
|
-
/* alloc */ { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'uniform' } },
|
|
16
|
-
/* alloc */ { binding: 1, visibility: GPUShaderStage.FRAGMENT, texture: /* alloc */ { sampleType: 'depth' } },
|
|
17
|
-
/* alloc */ { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: /* alloc */ { type: 'comparison' } },
|
|
18
|
-
/* alloc */ { binding: 3, visibility: GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'read-only-storage' } },
|
|
19
|
-
]
|
|
20
|
-
});
|
|
21
|
-
const buffer = device.createBuffer(/* alloc */ { size: 80, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
|
|
22
|
-
const sampler = device.createSampler(/* alloc */ { compare: 'less-equal', minFilter: 'linear', magFilter: 'linear' });
|
|
23
|
-
const lights = device.createBuffer(/* alloc */ { size: 32, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });
|
|
24
|
-
renderer.sunlight = /* alloc */ { layout, buffer, sampler, lights, size: 0 };
|
|
25
|
-
device.queue.writeBuffer(buffer, 0, sceneSunlightUniforms);
|
|
26
|
-
resizeSunlight(layer, 1);
|
|
27
|
-
renderer.roofFallbackTexture = /* alloc */ {
|
|
28
|
-
device,
|
|
29
|
-
texture: device.createTexture(/* alloc */ {
|
|
30
|
-
size: /* alloc */ [1, 1],
|
|
31
|
-
format: 'rgba8unorm',
|
|
32
|
-
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
|
|
33
|
-
}),
|
|
34
|
-
sampler: device.createSampler(/* alloc */ {
|
|
35
|
-
addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',
|
|
36
|
-
}),
|
|
37
|
-
image: null, format: 'rgba8unorm', srgb: false, uploaded: null,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
1
|
+
import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
|
|
2
|
+
import { sceneSunlightUniforms } from '../globals/sceneSunlightUniforms.js';
|
|
3
|
+
import { resizeSunlight } from '../shadows/resizeSunlight.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create sunlight bindings and a fallback roof texture for the layer's renderer.
|
|
7
|
+
*
|
|
8
|
+
* @param {L.Layer} layer Layer owning the renderer.
|
|
9
|
+
* @param {GPUDevice} device Device used to create the resources.
|
|
10
|
+
*/
|
|
11
|
+
export function initializeRendererResources(layer, device) {
|
|
12
|
+
const renderer = rendererByLayer.get(layer);
|
|
13
|
+
const layout = device.createBindGroupLayout(/* alloc */ {
|
|
14
|
+
entries: /* alloc */ [
|
|
15
|
+
/* alloc */ { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'uniform' } },
|
|
16
|
+
/* alloc */ { binding: 1, visibility: GPUShaderStage.FRAGMENT, texture: /* alloc */ { sampleType: 'depth' } },
|
|
17
|
+
/* alloc */ { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: /* alloc */ { type: 'comparison' } },
|
|
18
|
+
/* alloc */ { binding: 3, visibility: GPUShaderStage.FRAGMENT, buffer: /* alloc */ { type: 'read-only-storage' } },
|
|
19
|
+
]
|
|
20
|
+
});
|
|
21
|
+
const buffer = device.createBuffer(/* alloc */ { size: 80, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
|
|
22
|
+
const sampler = device.createSampler(/* alloc */ { compare: 'less-equal', minFilter: 'linear', magFilter: 'linear' });
|
|
23
|
+
const lights = device.createBuffer(/* alloc */ { size: 32, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });
|
|
24
|
+
renderer.sunlight = /* alloc */ { layout, buffer, sampler, lights, size: 0 };
|
|
25
|
+
device.queue.writeBuffer(buffer, 0, sceneSunlightUniforms);
|
|
26
|
+
resizeSunlight(layer, 1);
|
|
27
|
+
renderer.roofFallbackTexture = /* alloc */ {
|
|
28
|
+
device,
|
|
29
|
+
texture: device.createTexture(/* alloc */ {
|
|
30
|
+
size: /* alloc */ [1, 1],
|
|
31
|
+
format: 'rgba8unorm',
|
|
32
|
+
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
|
|
33
|
+
}),
|
|
34
|
+
sampler: device.createSampler(/* alloc */ {
|
|
35
|
+
addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',
|
|
36
|
+
}),
|
|
37
|
+
image: null, format: 'rgba8unorm', srgb: false, uploaded: null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import { cameraByLayer } from '../weakmaps/cameraByLayer.js';
|
|
2
|
-
import { layersByLayer } from '../weakmaps/layersByLayer.js';
|
|
3
|
-
import { locationByLayer } from '../weakmaps/locationByLayer.js';
|
|
4
|
-
import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
|
|
5
|
-
import { sceneByLayer } from '../weakmaps/sceneByLayer.js';
|
|
6
|
-
import { sceneOriginByLayer } from '../weakmaps/sceneOriginByLayer.js';
|
|
7
|
-
import { sharedByLayer } from '../weakmaps/sharedByLayer.js';
|
|
8
|
-
import { rendererDevices } from '../weakmaps/rendererDevices.js';
|
|
9
|
-
import { emptyNode } from '../scene/createSceneNode.js';
|
|
10
|
-
import { failAttachment } from '../scene/failAttachment.js';
|
|
11
|
-
import { requestAdapter } from './requestAdapter.js';
|
|
12
|
-
import { requestDevice } from './requestDevice.js';
|
|
13
|
-
import { rendererDeviceError } from './rendererDeviceError.js';
|
|
14
|
-
import { rendererDeviceLost } from './rendererDeviceLost.js';
|
|
15
|
-
import { createSceneCamera } from '../camera/createSceneCamera.js';
|
|
16
|
-
import { initializeRendererResources } from './initializeRendererResources.js';
|
|
17
|
-
import { mountRenderer } from './mountRenderer.js';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Acquire a WebGPU device and initialize the shared scene, renderer and canvas.
|
|
21
|
-
*
|
|
22
|
-
* @param {L.Layer} layer Layer that owns the shared renderer.
|
|
23
|
-
* @param {L.Map} map Map receiving the renderer.
|
|
24
|
-
*
|
|
25
|
-
* @returns {Promise<void>} Resolves after the renderer is mounted.
|
|
26
|
-
*/
|
|
27
|
-
export async function initializeSharedRenderer(layer, map) {
|
|
28
|
-
const canvas = document.createElement('canvas');
|
|
29
|
-
if (!navigator.gpu) {
|
|
30
|
-
failAttachment(/* alloc */ new Error('Layer3D requires WebGPU'), layer, map);
|
|
31
|
-
}
|
|
32
|
-
const adapter = await requestAdapter(layer, map);
|
|
33
|
-
const device = await requestDevice(adapter, layer, map);
|
|
34
|
-
rendererDevices.set(device, map);
|
|
35
|
-
device.addEventListener('uncapturederror', rendererDeviceError);
|
|
36
|
-
Promise.all(/* alloc */ [device.lost, Promise.resolve(device)]).then(rendererDeviceLost);
|
|
37
|
-
const context = canvas.getContext('webgpu');
|
|
38
|
-
if (!context) {
|
|
39
|
-
device.destroy();
|
|
40
|
-
failAttachment(/* alloc */ new Error('Unable to create a WebGPU canvas context'), layer, map);
|
|
41
|
-
}
|
|
42
|
-
const format = navigator.gpu.getPreferredCanvasFormat();
|
|
43
|
-
context.configure(/* alloc */ { device, format, alphaMode: 'premultiplied' });
|
|
44
|
-
map.getContainer().querySelector('.leaflet-webgpu-warning')?.remove();
|
|
45
|
-
sharedByLayer.set(layer, layer);
|
|
46
|
-
layersByLayer.set(layer, /* alloc */ new Set());
|
|
47
|
-
sceneOriginByLayer.set(layer, locationByLayer.get(layer));
|
|
48
|
-
sceneByLayer.set(layer, emptyNode());
|
|
49
|
-
cameraByLayer.set(layer, createSceneCamera());
|
|
50
|
-
rendererByLayer.set(layer, /* alloc */ {
|
|
51
|
-
device,
|
|
52
|
-
context,
|
|
53
|
-
format,
|
|
54
|
-
canvas,
|
|
55
|
-
dpr: Math.min(window.devicePixelRatio, 2)
|
|
56
|
-
});
|
|
57
|
-
initializeRendererResources(layer, device);
|
|
58
|
-
mountRenderer(layer, map, canvas);
|
|
59
|
-
}
|
|
1
|
+
import { cameraByLayer } from '../weakmaps/cameraByLayer.js';
|
|
2
|
+
import { layersByLayer } from '../weakmaps/layersByLayer.js';
|
|
3
|
+
import { locationByLayer } from '../weakmaps/locationByLayer.js';
|
|
4
|
+
import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
|
|
5
|
+
import { sceneByLayer } from '../weakmaps/sceneByLayer.js';
|
|
6
|
+
import { sceneOriginByLayer } from '../weakmaps/sceneOriginByLayer.js';
|
|
7
|
+
import { sharedByLayer } from '../weakmaps/sharedByLayer.js';
|
|
8
|
+
import { rendererDevices } from '../weakmaps/rendererDevices.js';
|
|
9
|
+
import { emptyNode } from '../scene/createSceneNode.js';
|
|
10
|
+
import { failAttachment } from '../scene/failAttachment.js';
|
|
11
|
+
import { requestAdapter } from './requestAdapter.js';
|
|
12
|
+
import { requestDevice } from './requestDevice.js';
|
|
13
|
+
import { rendererDeviceError } from './rendererDeviceError.js';
|
|
14
|
+
import { rendererDeviceLost } from './rendererDeviceLost.js';
|
|
15
|
+
import { createSceneCamera } from '../camera/createSceneCamera.js';
|
|
16
|
+
import { initializeRendererResources } from './initializeRendererResources.js';
|
|
17
|
+
import { mountRenderer } from './mountRenderer.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Acquire a WebGPU device and initialize the shared scene, renderer and canvas.
|
|
21
|
+
*
|
|
22
|
+
* @param {L.Layer} layer Layer that owns the shared renderer.
|
|
23
|
+
* @param {L.Map} map Map receiving the renderer.
|
|
24
|
+
*
|
|
25
|
+
* @returns {Promise<void>} Resolves after the renderer is mounted.
|
|
26
|
+
*/
|
|
27
|
+
export async function initializeSharedRenderer(layer, map) {
|
|
28
|
+
const canvas = document.createElement('canvas');
|
|
29
|
+
if (!navigator.gpu) {
|
|
30
|
+
failAttachment(/* alloc */ new Error('Layer3D requires WebGPU'), layer, map);
|
|
31
|
+
}
|
|
32
|
+
const adapter = await requestAdapter(layer, map);
|
|
33
|
+
const device = await requestDevice(adapter, layer, map);
|
|
34
|
+
rendererDevices.set(device, map);
|
|
35
|
+
device.addEventListener('uncapturederror', rendererDeviceError);
|
|
36
|
+
Promise.all(/* alloc */ [device.lost, Promise.resolve(device)]).then(rendererDeviceLost);
|
|
37
|
+
const context = canvas.getContext('webgpu');
|
|
38
|
+
if (!context) {
|
|
39
|
+
device.destroy();
|
|
40
|
+
failAttachment(/* alloc */ new Error('Unable to create a WebGPU canvas context'), layer, map);
|
|
41
|
+
}
|
|
42
|
+
const format = navigator.gpu.getPreferredCanvasFormat();
|
|
43
|
+
context.configure(/* alloc */ { device, format, alphaMode: 'premultiplied' });
|
|
44
|
+
map.getContainer().querySelector('.leaflet-webgpu-warning')?.remove();
|
|
45
|
+
sharedByLayer.set(layer, layer);
|
|
46
|
+
layersByLayer.set(layer, /* alloc */ new Set());
|
|
47
|
+
sceneOriginByLayer.set(layer, locationByLayer.get(layer));
|
|
48
|
+
sceneByLayer.set(layer, emptyNode());
|
|
49
|
+
cameraByLayer.set(layer, createSceneCamera());
|
|
50
|
+
rendererByLayer.set(layer, /* alloc */ {
|
|
51
|
+
device,
|
|
52
|
+
context,
|
|
53
|
+
format,
|
|
54
|
+
canvas,
|
|
55
|
+
dpr: Math.min(window.devicePixelRatio, 2)
|
|
56
|
+
});
|
|
57
|
+
initializeRendererResources(layer, device);
|
|
58
|
+
mountRenderer(layer, map, canvas);
|
|
59
|
+
}
|
package/src/gpu/mountRenderer.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { sizeByLayer } from '../weakmaps/sizeByLayer.js';
|
|
2
|
-
import { onMapChange } from '../scene/onMapChange.js';
|
|
3
|
-
import { startZoom } from '../animations/startZoom.js';
|
|
4
|
-
import { onZoomAnim } from '../animations/onZoomAnim.js';
|
|
5
|
-
import { endZoom } from '../animations/endZoom.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Insert the rendering canvas and subscribe the layer to map and zoom events.
|
|
9
|
-
*
|
|
10
|
-
* @param {L.Layer} layer Layer receiving map events.
|
|
11
|
-
* @param {L.Map} map Map receiving the canvas.
|
|
12
|
-
* @param {HTMLCanvasElement} canvas WebGPU rendering canvas.
|
|
13
|
-
*/
|
|
14
|
-
export function mountRenderer(layer, map, canvas) {
|
|
15
|
-
sizeByLayer.set(layer, null);
|
|
16
|
-
canvas.className = 'leaflet-3d';
|
|
17
|
-
canvas.style.cssText = 'position:absolute;top:0;left:0;z-index:1;pointer-events:none';
|
|
18
|
-
canvas.setAttribute('role', 'img');
|
|
19
|
-
canvas.setAttribute('aria-label', layer.options.ariaLabel ?? '3D scene');
|
|
20
|
-
map.getPane('mapPane').before(canvas);
|
|
21
|
-
map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange, layer);
|
|
22
|
-
map.on('zoomstart', startZoom, layer);
|
|
23
|
-
map.on('zoomanim', onZoomAnim, layer);
|
|
24
|
-
map.on('zoomend', endZoom, layer);
|
|
25
|
-
}
|
|
1
|
+
import { sizeByLayer } from '../weakmaps/sizeByLayer.js';
|
|
2
|
+
import { onMapChange } from '../scene/onMapChange.js';
|
|
3
|
+
import { startZoom } from '../animations/startZoom.js';
|
|
4
|
+
import { onZoomAnim } from '../animations/onZoomAnim.js';
|
|
5
|
+
import { endZoom } from '../animations/endZoom.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Insert the rendering canvas and subscribe the layer to map and zoom events.
|
|
9
|
+
*
|
|
10
|
+
* @param {L.Layer} layer Layer receiving map events.
|
|
11
|
+
* @param {L.Map} map Map receiving the canvas.
|
|
12
|
+
* @param {HTMLCanvasElement} canvas WebGPU rendering canvas.
|
|
13
|
+
*/
|
|
14
|
+
export function mountRenderer(layer, map, canvas) {
|
|
15
|
+
sizeByLayer.set(layer, null);
|
|
16
|
+
canvas.className = 'leaflet-3d';
|
|
17
|
+
canvas.style.cssText = 'position:absolute;top:0;left:0;z-index:1;pointer-events:none';
|
|
18
|
+
canvas.setAttribute('role', 'img');
|
|
19
|
+
canvas.setAttribute('aria-label', layer.options.ariaLabel ?? '3D scene');
|
|
20
|
+
map.getPane('mapPane').before(canvas);
|
|
21
|
+
map.on('move zoom rotate pitch resize viewreset layeradd layerremove', onMapChange, layer);
|
|
22
|
+
map.on('zoomstart', startZoom, layer);
|
|
23
|
+
map.on('zoomanim', onZoomAnim, layer);
|
|
24
|
+
map.on('zoomend', endZoom, layer);
|
|
25
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { L } from '../globals/L.js';
|
|
2
|
-
import { layerControlAddItem } from '../globals/layerControlAddItem.js';
|
|
3
|
-
|
|
4
|
-
// Leaflet 2 stores layer associations on its control, not on the input.
|
|
5
|
-
if (layerControlAddItem && !L.Control.Layers) L.LayersControl.prototype._addItem = addLayerControlInputId;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Add a layer-control item and attach its layer identifier to the selector.
|
|
9
|
-
*
|
|
10
|
-
* @param {Object} entry Layer-control entry.
|
|
11
|
-
*
|
|
12
|
-
* @returns {HTMLElement} The created label.
|
|
13
|
-
*/
|
|
14
|
-
export function addLayerControlInputId(entry) {
|
|
15
|
-
const label = layerControlAddItem.call(this, entry);
|
|
16
|
-
label.querySelector('.leaflet-control-layers-selector').layerId = L.Util.stamp(entry.layer);
|
|
17
|
-
return label;
|
|
18
|
-
}
|
|
1
|
+
import { L } from '../globals/L.js';
|
|
2
|
+
import { layerControlAddItem } from '../globals/layerControlAddItem.js';
|
|
3
|
+
|
|
4
|
+
// Leaflet 2 stores layer associations on its control, not on the input.
|
|
5
|
+
if (layerControlAddItem && !L.Control.Layers) L.LayersControl.prototype._addItem = addLayerControlInputId;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Add a layer-control item and attach its layer identifier to the selector.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} entry Layer-control entry.
|
|
11
|
+
*
|
|
12
|
+
* @returns {HTMLElement} The created label.
|
|
13
|
+
*/
|
|
14
|
+
export function addLayerControlInputId(entry) {
|
|
15
|
+
const label = layerControlAddItem.call(this, entry);
|
|
16
|
+
label.querySelector('.leaflet-control-layers-selector').layerId = L.Util.stamp(entry.layer);
|
|
17
|
+
return label;
|
|
18
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { modelUrlByLayer } from '../weakmaps/modelUrlByLayer.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Format a loading error or a count description for a layer-control status.
|
|
5
|
-
*
|
|
6
|
-
* @param {L.Layer} layer Layer whose status is described.
|
|
7
|
-
* @param {string} formatted Formatted loaded count.
|
|
8
|
-
* @param {number} pending Number of blocks still loading.
|
|
9
|
-
* @param {Error|string} [error] Loading error, if any.
|
|
10
|
-
*
|
|
11
|
-
* @returns {string} Status title.
|
|
12
|
-
*/
|
|
13
|
-
export function layerCountTitle(layer, formatted, pending, error) {
|
|
14
|
-
return error ? `Unable to load: ${typeof error === 'string' ? error : error.message}` :
|
|
15
|
-
`${formatted} loaded ${modelUrlByLayer.get(layer) ? 'models' : 'elements'} in the current area${pending ? `; ${pending} blocks loading` : ''}`;
|
|
16
|
-
}
|
|
1
|
+
import { modelUrlByLayer } from '../weakmaps/modelUrlByLayer.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Format a loading error or a count description for a layer-control status.
|
|
5
|
+
*
|
|
6
|
+
* @param {L.Layer} layer Layer whose status is described.
|
|
7
|
+
* @param {string} formatted Formatted loaded count.
|
|
8
|
+
* @param {number} pending Number of blocks still loading.
|
|
9
|
+
* @param {Error|string} [error] Loading error, if any.
|
|
10
|
+
*
|
|
11
|
+
* @returns {string} Status title.
|
|
12
|
+
*/
|
|
13
|
+
export function layerCountTitle(layer, formatted, pending, error) {
|
|
14
|
+
return error ? `Unable to load: ${typeof error === 'string' ? error : error.message}` :
|
|
15
|
+
`${formatted} loaded ${modelUrlByLayer.get(layer) ? 'models' : 'elements'} in the current area${pending ? `; ${pending} blocks loading` : ''}`;
|
|
16
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { L } from '../globals/L.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Place a count, traffic status or other element next to a layer selector.
|
|
5
|
-
*
|
|
6
|
-
* @param {HTMLInputElement} input Layers-control selector.
|
|
7
|
-
* @param {L.Layer} layer Layer associated with the selector.
|
|
8
|
-
* @param {HTMLElement} element Element to place.
|
|
9
|
-
*/
|
|
10
|
-
export function placeEntryElement(input, layer, element) {
|
|
11
|
-
const label = input.closest('label');
|
|
12
|
-
if (element.classList.contains('layer-count')) {
|
|
13
|
-
if (!input.hasAttribute('aria-label')) input.setAttribute('aria-label', label.textContent.trim());
|
|
14
|
-
element.id = `leaflet-layer-count-${L.Util.stamp(layer)}`;
|
|
15
|
-
input.setAttribute('aria-describedby', element.id);
|
|
16
|
-
label.append(element);
|
|
17
|
-
}
|
|
18
|
-
else if (element.classList.contains('traffic-status')) {
|
|
19
|
-
let group = label.nextElementSibling;
|
|
20
|
-
if (!group?.classList.contains('traffic-status-group')) {
|
|
21
|
-
group = L.DomUtil.create('div', 'traffic-status-group');
|
|
22
|
-
group.style.cssText = 'display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;';
|
|
23
|
-
group.setAttribute('role', 'group');
|
|
24
|
-
group.setAttribute('aria-label', 'Traffic counts');
|
|
25
|
-
label.after(group);
|
|
26
|
-
}
|
|
27
|
-
group.append(element);
|
|
28
|
-
} else label.after(element);
|
|
29
|
-
}
|
|
1
|
+
import { L } from '../globals/L.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Place a count, traffic status or other element next to a layer selector.
|
|
5
|
+
*
|
|
6
|
+
* @param {HTMLInputElement} input Layers-control selector.
|
|
7
|
+
* @param {L.Layer} layer Layer associated with the selector.
|
|
8
|
+
* @param {HTMLElement} element Element to place.
|
|
9
|
+
*/
|
|
10
|
+
export function placeEntryElement(input, layer, element) {
|
|
11
|
+
const label = input.closest('label');
|
|
12
|
+
if (element.classList.contains('layer-count')) {
|
|
13
|
+
if (!input.hasAttribute('aria-label')) input.setAttribute('aria-label', label.textContent.trim());
|
|
14
|
+
element.id = `leaflet-layer-count-${L.Util.stamp(layer)}`;
|
|
15
|
+
input.setAttribute('aria-describedby', element.id);
|
|
16
|
+
label.append(element);
|
|
17
|
+
}
|
|
18
|
+
else if (element.classList.contains('traffic-status')) {
|
|
19
|
+
let group = label.nextElementSibling;
|
|
20
|
+
if (!group?.classList.contains('traffic-status-group')) {
|
|
21
|
+
group = L.DomUtil.create('div', 'traffic-status-group');
|
|
22
|
+
group.style.cssText = 'display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;';
|
|
23
|
+
group.setAttribute('role', 'group');
|
|
24
|
+
group.setAttribute('aria-label', 'Traffic counts');
|
|
25
|
+
label.after(group);
|
|
26
|
+
}
|
|
27
|
+
group.append(element);
|
|
28
|
+
} else label.after(element);
|
|
29
|
+
}
|