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,12 +1,12 @@
|
|
|
1
|
-
import { renderers } from '../weakmaps/renderers.js';
|
|
2
|
-
import { update as updateScene } from '../scene/scheduleSceneUpdate.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Schedule a scene update if the map has a shared renderer.
|
|
6
|
-
*
|
|
7
|
-
* @param {L.Map} map Map whose scene should update.
|
|
8
|
-
*/
|
|
9
|
-
export function render(map) {
|
|
10
|
-
const renderer = renderers.get(map);
|
|
11
|
-
if (renderer) updateScene(renderer);
|
|
12
|
-
}
|
|
1
|
+
import { renderers } from '../weakmaps/renderers.js';
|
|
2
|
+
import { update as updateScene } from '../scene/scheduleSceneUpdate.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Schedule a scene update if the map has a shared renderer.
|
|
6
|
+
*
|
|
7
|
+
* @param {L.Map} map Map whose scene should update.
|
|
8
|
+
*/
|
|
9
|
+
export function render(map) {
|
|
10
|
+
const renderer = renderers.get(map);
|
|
11
|
+
if (renderer) updateScene(renderer);
|
|
12
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Style the time-control container for nested or standalone placement.
|
|
3
|
-
*
|
|
4
|
-
* @param {HTMLElement} container Time-control container.
|
|
5
|
-
* @param {boolean} nested Whether it is placed beneath a layer entry.
|
|
6
|
-
*/
|
|
7
|
-
export function styleTimeControl(container, nested) {
|
|
8
|
-
container.classList.toggle('leaflet-control', !nested);
|
|
9
|
-
container.classList.toggle('leaflet-bar', !nested);
|
|
10
|
-
container.style.background = nested ? '' : '#fff';
|
|
11
|
-
container.style.padding = nested ? '2px 0 6px 20px' : '8px';
|
|
12
|
-
container.style.margin = nested ? '0' : '';
|
|
13
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Style the time-control container for nested or standalone placement.
|
|
3
|
+
*
|
|
4
|
+
* @param {HTMLElement} container Time-control container.
|
|
5
|
+
* @param {boolean} nested Whether it is placed beneath a layer entry.
|
|
6
|
+
*/
|
|
7
|
+
export function styleTimeControl(container, nested) {
|
|
8
|
+
container.classList.toggle('leaflet-control', !nested);
|
|
9
|
+
container.classList.toggle('leaflet-bar', !nested);
|
|
10
|
+
container.style.background = nested ? '' : '#fff';
|
|
11
|
+
container.style.padding = nested ? '2px 0 6px 20px' : '8px';
|
|
12
|
+
container.style.margin = nested ? '0' : '';
|
|
13
|
+
}
|
package/src/sunlight/tickSun.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { updateSun } from './updateSun.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Refresh sunlight on the timer only while the control uses live time.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Sunlight and time-control state.
|
|
7
|
-
*/
|
|
8
|
-
export function tickSun(state) {
|
|
9
|
-
if (state.control.live) updateSun(state);
|
|
10
|
-
}
|
|
1
|
+
import { updateSun } from './updateSun.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Refresh sunlight on the timer only while the control uses live time.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Sunlight and time-control state.
|
|
7
|
+
*/
|
|
8
|
+
export function tickSun(state) {
|
|
9
|
+
if (state.control.live) updateSun(state);
|
|
10
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { projectCelestialBody } from '../projections/projectCelestialBody.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Project and position a celestial disc, hiding it when it is below the horizon or outside the sky.
|
|
5
|
-
*
|
|
6
|
-
* @param {HTMLElement} disc Sun or moon element.
|
|
7
|
-
* @param {Object|null|undefined} body Celestial altitude and direction.
|
|
8
|
-
* @param {HTMLElement|null|undefined} sky Sky container.
|
|
9
|
-
* @param {L.Point} size Viewport dimensions.
|
|
10
|
-
* @param {number} pitch Camera pitch in radians.
|
|
11
|
-
* @param {number} bearing Camera bearing in radians.
|
|
12
|
-
* @param {Object} projection Reusable projection result.
|
|
13
|
-
*/
|
|
14
|
-
export function updateCelestialDisc(disc, body, sky, size, pitch, bearing, projection) {
|
|
15
|
-
disc.hidden = true;
|
|
16
|
-
if (!sky || !body || body.altitude <= 0) return;
|
|
17
|
-
if (disc.parentNode !== sky) sky.append(disc);
|
|
18
|
-
const point = projectCelestialBody(body.direction, size, pitch, bearing, projection);
|
|
19
|
-
if (!point) return;
|
|
20
|
-
const { left, top } = point;
|
|
21
|
-
disc.hidden = left < 0 || left > size.x || top < 0 || top > sky.clientHeight || sky.style.display === 'none';
|
|
22
|
-
disc.style.left = `${left}px`; disc.style.top = `${top}px`;
|
|
23
|
-
}
|
|
1
|
+
import { projectCelestialBody } from '../projections/projectCelestialBody.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Project and position a celestial disc, hiding it when it is below the horizon or outside the sky.
|
|
5
|
+
*
|
|
6
|
+
* @param {HTMLElement} disc Sun or moon element.
|
|
7
|
+
* @param {Object|null|undefined} body Celestial altitude and direction.
|
|
8
|
+
* @param {HTMLElement|null|undefined} sky Sky container.
|
|
9
|
+
* @param {L.Point} size Viewport dimensions.
|
|
10
|
+
* @param {number} pitch Camera pitch in radians.
|
|
11
|
+
* @param {number} bearing Camera bearing in radians.
|
|
12
|
+
* @param {Object} projection Reusable projection result.
|
|
13
|
+
*/
|
|
14
|
+
export function updateCelestialDisc(disc, body, sky, size, pitch, bearing, projection) {
|
|
15
|
+
disc.hidden = true;
|
|
16
|
+
if (!sky || !body || body.altitude <= 0) return;
|
|
17
|
+
if (disc.parentNode !== sky) sky.append(disc);
|
|
18
|
+
const point = projectCelestialBody(body.direction, size, pitch, bearing, projection);
|
|
19
|
+
if (!point) return;
|
|
20
|
+
const { left, top } = point;
|
|
21
|
+
disc.hidden = left < 0 || left > size.x || top < 0 || top > sky.clientHeight || sky.style.display === 'none';
|
|
22
|
+
disc.style.left = `${left}px`; disc.style.top = `${top}px`;
|
|
23
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { sunlightByMap } from '../weakmaps/sunlightByMap.js';
|
|
2
|
-
import { atmosphere } from './atmosphere.js';
|
|
3
|
-
import { moonPosition } from '../astronomy/moonPosition.js';
|
|
4
|
-
import { solarPosition } from '../astronomy/solarPosition.js';
|
|
5
|
-
import { render } from './requestSunlightRender.js';
|
|
6
|
-
import { updateSky } from './updateSky.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Update simulation time, solar and lunar positions, sky styling and status.
|
|
10
|
-
*
|
|
11
|
-
* @param {Object} state Sunlight and time-control state.
|
|
12
|
-
*/
|
|
13
|
-
export function updateSun(state) {
|
|
14
|
-
const { control, map, date, slider, output, status } = state;
|
|
15
|
-
try {
|
|
16
|
-
if (control.live) control.time = /* alloc */ new Date();
|
|
17
|
-
const time = control.time.toISOString();
|
|
18
|
-
date.value = time.slice(0, 10);
|
|
19
|
-
slider.value = String(control.time.getUTCHours() * 60 + control.time.getUTCMinutes());
|
|
20
|
-
output.textContent = `${time.slice(11, 16)} UTC${control.live ? ' · now' : ''}`;
|
|
21
|
-
const center = map.getCenter();
|
|
22
|
-
const sun = solarPosition(control.time, center.lat, center.lng);
|
|
23
|
-
sunlightByMap.set(map, sun);
|
|
24
|
-
Object.assign(sun, atmosphere(sun.altitude));
|
|
25
|
-
sun.moon = moonPosition(control.time, center.lat, center.lng);
|
|
26
|
-
status.textContent = sun.altitude <= 0
|
|
27
|
-
? 'Night · no direct sunlight'
|
|
28
|
-
: sun.altitude < 3
|
|
29
|
-
? 'Low sun · shadows paused'
|
|
30
|
-
: `Sun altitude ${sun.altitude.toFixed(1)}°`;
|
|
31
|
-
map.fire('simulationtimechange', /* alloc */ {
|
|
32
|
-
time: /* alloc */ new Date(control.time),
|
|
33
|
-
live: control.live,
|
|
34
|
-
});
|
|
35
|
-
updateSky(state);
|
|
36
|
-
render(map);
|
|
37
|
-
} catch (error) {
|
|
38
|
-
sunlightByMap.delete(map);
|
|
39
|
-
updateSky(state);
|
|
40
|
-
render(map);
|
|
41
|
-
status.textContent = `Error: ${error.message}`;
|
|
42
|
-
console.error('Solar simulation', error);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
1
|
+
import { sunlightByMap } from '../weakmaps/sunlightByMap.js';
|
|
2
|
+
import { atmosphere } from './atmosphere.js';
|
|
3
|
+
import { moonPosition } from '../astronomy/moonPosition.js';
|
|
4
|
+
import { solarPosition } from '../astronomy/solarPosition.js';
|
|
5
|
+
import { render } from './requestSunlightRender.js';
|
|
6
|
+
import { updateSky } from './updateSky.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Update simulation time, solar and lunar positions, sky styling and status.
|
|
10
|
+
*
|
|
11
|
+
* @param {Object} state Sunlight and time-control state.
|
|
12
|
+
*/
|
|
13
|
+
export function updateSun(state) {
|
|
14
|
+
const { control, map, date, slider, output, status } = state;
|
|
15
|
+
try {
|
|
16
|
+
if (control.live) control.time = /* alloc */ new Date();
|
|
17
|
+
const time = control.time.toISOString();
|
|
18
|
+
date.value = time.slice(0, 10);
|
|
19
|
+
slider.value = String(control.time.getUTCHours() * 60 + control.time.getUTCMinutes());
|
|
20
|
+
output.textContent = `${time.slice(11, 16)} UTC${control.live ? ' · now' : ''}`;
|
|
21
|
+
const center = map.getCenter();
|
|
22
|
+
const sun = solarPosition(control.time, center.lat, center.lng);
|
|
23
|
+
sunlightByMap.set(map, sun);
|
|
24
|
+
Object.assign(sun, atmosphere(sun.altitude));
|
|
25
|
+
sun.moon = moonPosition(control.time, center.lat, center.lng);
|
|
26
|
+
status.textContent = sun.altitude <= 0
|
|
27
|
+
? 'Night · no direct sunlight'
|
|
28
|
+
: sun.altitude < 3
|
|
29
|
+
? 'Low sun · shadows paused'
|
|
30
|
+
: `Sun altitude ${sun.altitude.toFixed(1)}°`;
|
|
31
|
+
map.fire('simulationtimechange', /* alloc */ {
|
|
32
|
+
time: /* alloc */ new Date(control.time),
|
|
33
|
+
live: control.live,
|
|
34
|
+
});
|
|
35
|
+
updateSky(state);
|
|
36
|
+
render(map);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
sunlightByMap.delete(map);
|
|
39
|
+
updateSky(state);
|
|
40
|
+
render(map);
|
|
41
|
+
status.textContent = `Error: ${error.message}`;
|
|
42
|
+
console.error('Solar simulation', error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { updateSun } from './updateSun.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Switch to live simulation time and refresh sunlight.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Sunlight and time-control state.
|
|
7
|
-
*/
|
|
8
|
-
export function useLiveTime(state) {
|
|
9
|
-
state.control.live = true;
|
|
10
|
-
updateSun(state);
|
|
11
|
-
}
|
|
1
|
+
import { updateSun } from './updateSun.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Switch to live simulation time and refresh sunlight.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Sunlight and time-control state.
|
|
7
|
+
*/
|
|
8
|
+
export function useLiveTime(state) {
|
|
9
|
+
state.control.live = true;
|
|
10
|
+
updateSun(state);
|
|
11
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { sunlightByMap } from '../weakmaps/sunlightByMap.js';
|
|
2
|
-
import { render } from './requestSunlightRender.js';
|
|
3
|
-
import { updateSky } from './updateSky.js';
|
|
4
|
-
import { updateSun } from './updateSun.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Select the control's UTC date and minute, or report an invalid date.
|
|
8
|
-
*
|
|
9
|
-
* @param {Object} state Sunlight and time-control state.
|
|
10
|
-
*/
|
|
11
|
-
export function useSelectedTime(state) {
|
|
12
|
-
const { control, map, date, slider, status } = state;
|
|
13
|
-
control.live = false;
|
|
14
|
-
if (!date.value || !date.validity.valid) {
|
|
15
|
-
control.time = /* alloc */ new Date(NaN);
|
|
16
|
-
map.fire('simulationtimechange', /* alloc */ { time: null, live: false });
|
|
17
|
-
sunlightByMap.delete(map);
|
|
18
|
-
updateSky(state);
|
|
19
|
-
render(map);
|
|
20
|
-
status.textContent = 'Error: choose a valid solar date';
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
control.time = /* alloc */ new Date(`${date.value}T00:00:00Z`);
|
|
24
|
-
control.time.setUTCMinutes(Number(slider.value));
|
|
25
|
-
updateSun(state);
|
|
26
|
-
}
|
|
1
|
+
import { sunlightByMap } from '../weakmaps/sunlightByMap.js';
|
|
2
|
+
import { render } from './requestSunlightRender.js';
|
|
3
|
+
import { updateSky } from './updateSky.js';
|
|
4
|
+
import { updateSun } from './updateSun.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Select the control's UTC date and minute, or report an invalid date.
|
|
8
|
+
*
|
|
9
|
+
* @param {Object} state Sunlight and time-control state.
|
|
10
|
+
*/
|
|
11
|
+
export function useSelectedTime(state) {
|
|
12
|
+
const { control, map, date, slider, status } = state;
|
|
13
|
+
control.live = false;
|
|
14
|
+
if (!date.value || !date.validity.valid) {
|
|
15
|
+
control.time = /* alloc */ new Date(NaN);
|
|
16
|
+
map.fire('simulationtimechange', /* alloc */ { time: null, live: false });
|
|
17
|
+
sunlightByMap.delete(map);
|
|
18
|
+
updateSky(state);
|
|
19
|
+
render(map);
|
|
20
|
+
status.textContent = 'Error: choose a valid solar date';
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
control.time = /* alloc */ new Date(`${date.value}T00:00:00Z`);
|
|
24
|
+
control.time.setUTCMinutes(Number(slider.value));
|
|
25
|
+
updateSun(state);
|
|
26
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { locationByLayer } from '../weakmaps/locationByLayer.js';
|
|
2
|
-
import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
|
|
3
|
-
import { terrainReadyByLayer } from '../weakmaps/terrainReadyByLayer.js';
|
|
4
|
-
import { addBridges } from '../geometry/addBridges.js';
|
|
5
|
-
import { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';
|
|
6
|
-
import { getElevation } from './getElevation.js';
|
|
7
|
-
import { setTerrainHeight } from './setTerrainHeight.js';
|
|
8
|
-
import { update } from '../scene/scheduleSceneUpdate.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Mark terrain ready, update map layers and bridge geometry, and notify listeners.
|
|
12
|
-
*
|
|
13
|
-
* @param {L.Layer} layer Terrain layer.
|
|
14
|
-
* @param {L.Map} map Map containing the terrain.
|
|
15
|
-
* @param {Object} [bridges] Optional bridge GeoJSON.
|
|
16
|
-
*/
|
|
17
|
-
export function applyTerrain(layer, map, bridges) {
|
|
18
|
-
|
|
19
|
-
terrainReadyByLayer.set(layer, true);
|
|
20
|
-
terrainOriginElevationByLayer.set(layer, getElevation(layer, locationByLayer.get(layer)) ?? 0);
|
|
21
|
-
let mapLayer;
|
|
22
|
-
for (mapLayer of Object.values(map._layers)) {
|
|
23
|
-
setTerrainHeight(mapLayer);
|
|
24
|
-
conformModelToTerrain(mapLayer, layer);
|
|
25
|
-
}
|
|
26
|
-
if (bridges) addBridges(layer, bridges);
|
|
27
|
-
map.fire('terrainchange');
|
|
28
|
-
update(layer);
|
|
29
|
-
layer.fire('terrainready');
|
|
30
|
-
}
|
|
1
|
+
import { locationByLayer } from '../weakmaps/locationByLayer.js';
|
|
2
|
+
import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
|
|
3
|
+
import { terrainReadyByLayer } from '../weakmaps/terrainReadyByLayer.js';
|
|
4
|
+
import { addBridges } from '../geometry/addBridges.js';
|
|
5
|
+
import { conformModelToTerrain } from '../geometry/conformModelToTerrain.js';
|
|
6
|
+
import { getElevation } from './getElevation.js';
|
|
7
|
+
import { setTerrainHeight } from './setTerrainHeight.js';
|
|
8
|
+
import { update } from '../scene/scheduleSceneUpdate.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Mark terrain ready, update map layers and bridge geometry, and notify listeners.
|
|
12
|
+
*
|
|
13
|
+
* @param {L.Layer} layer Terrain layer.
|
|
14
|
+
* @param {L.Map} map Map containing the terrain.
|
|
15
|
+
* @param {Object} [bridges] Optional bridge GeoJSON.
|
|
16
|
+
*/
|
|
17
|
+
export function applyTerrain(layer, map, bridges) {
|
|
18
|
+
|
|
19
|
+
terrainReadyByLayer.set(layer, true);
|
|
20
|
+
terrainOriginElevationByLayer.set(layer, getElevation(layer, locationByLayer.get(layer)) ?? 0);
|
|
21
|
+
let mapLayer;
|
|
22
|
+
for (mapLayer of Object.values(map._layers)) {
|
|
23
|
+
setTerrainHeight(mapLayer);
|
|
24
|
+
conformModelToTerrain(mapLayer, layer);
|
|
25
|
+
}
|
|
26
|
+
if (bridges) addBridges(layer, bridges);
|
|
27
|
+
map.fire('terrainchange');
|
|
28
|
+
update(layer);
|
|
29
|
+
layer.fire('terrainready');
|
|
30
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copy valid elevations from a DEM tile into an atlas and update its extrema.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} atlas Destination elevations and minimum and maximum values.
|
|
5
|
-
* @param {Float32Array} values Source 256-by-256 elevation tile.
|
|
6
|
-
* @param {number} start First destination index.
|
|
7
|
-
* @param {number} columns Number of tile columns in the atlas.
|
|
8
|
-
*/
|
|
9
|
-
export function copyTerrainTile(atlas, values, start, columns) {
|
|
10
|
-
let row, column, value;
|
|
11
|
-
for (row = 0; row < 256; row++) {
|
|
12
|
-
for (column = 0; column < 256; column++) {
|
|
13
|
-
value = values[row * 256 + column];
|
|
14
|
-
if (!Number.isFinite(value) || value <= -1000) continue;
|
|
15
|
-
atlas.elevations[start + row * columns * 256 + column] = value;
|
|
16
|
-
atlas.low = Math.min(atlas.low, value);
|
|
17
|
-
atlas.high = Math.max(atlas.high, value);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Copy valid elevations from a DEM tile into an atlas and update its extrema.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} atlas Destination elevations and minimum and maximum values.
|
|
5
|
+
* @param {Float32Array} values Source 256-by-256 elevation tile.
|
|
6
|
+
* @param {number} start First destination index.
|
|
7
|
+
* @param {number} columns Number of tile columns in the atlas.
|
|
8
|
+
*/
|
|
9
|
+
export function copyTerrainTile(atlas, values, start, columns) {
|
|
10
|
+
let row, column, value;
|
|
11
|
+
for (row = 0; row < 256; row++) {
|
|
12
|
+
for (column = 0; column < 256; column++) {
|
|
13
|
+
value = values[row * 256 + column];
|
|
14
|
+
if (!Number.isFinite(value) || value <= -1000) continue;
|
|
15
|
+
atlas.elevations[start + row * columns * 256 + column] = value;
|
|
16
|
+
atlas.low = Math.min(atlas.low, value);
|
|
17
|
+
atlas.high = Math.max(atlas.high, value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { loadTerrain } from './loadTerrain.js';
|
|
2
|
-
|
|
3
|
-
/** Load the terrain backend after it is ready and settle the associated promise. */
|
|
4
|
-
export function loadReadyTerrain() {
|
|
5
|
-
loadTerrain(this.backend).then(this.resolve, this.reject);
|
|
6
|
-
}
|
|
1
|
+
import { loadTerrain } from './loadTerrain.js';
|
|
2
|
+
|
|
3
|
+
/** Load the terrain backend after it is ready and settle the associated promise. */
|
|
4
|
+
export function loadReadyTerrain() {
|
|
5
|
+
loadTerrain(this.backend).then(this.resolve, this.reject);
|
|
6
|
+
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { terrain3DByMap } from '../weakmaps/terrain3DByMap.js';
|
|
2
|
-
import { streamTerrainByMap } from '../weakmaps/streamTerrainByMap.js';
|
|
3
|
-
import { getElevation } from './getElevation.js';
|
|
4
|
-
import { gridTerrainElevation } from '../native/gridTerrainElevation.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Sample the map's archive or streamed terrain at a location.
|
|
8
|
-
*
|
|
9
|
-
* @param {L.Map} map Map containing terrain.
|
|
10
|
-
* @param {L.LatLng|L.Point} location Location to sample.
|
|
11
|
-
*
|
|
12
|
-
* @returns {number|null|undefined} Elevation in metres, or a nullish value when unavailable.
|
|
13
|
-
*/
|
|
14
|
-
export function mapElevationOf(map, location) {
|
|
15
|
-
const terrain = terrain3DByMap.get(map);
|
|
16
|
-
if (terrain) return getElevation(terrain, location);
|
|
17
|
-
const stream = streamTerrainByMap.get(map);
|
|
18
|
-
return stream && gridTerrainElevation(stream, location);
|
|
19
|
-
}
|
|
1
|
+
import { terrain3DByMap } from '../weakmaps/terrain3DByMap.js';
|
|
2
|
+
import { streamTerrainByMap } from '../weakmaps/streamTerrainByMap.js';
|
|
3
|
+
import { getElevation } from './getElevation.js';
|
|
4
|
+
import { gridTerrainElevation } from '../native/gridTerrainElevation.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sample the map's archive or streamed terrain at a location.
|
|
8
|
+
*
|
|
9
|
+
* @param {L.Map} map Map containing terrain.
|
|
10
|
+
* @param {L.LatLng|L.Point} location Location to sample.
|
|
11
|
+
*
|
|
12
|
+
* @returns {number|null|undefined} Elevation in metres, or a nullish value when unavailable.
|
|
13
|
+
*/
|
|
14
|
+
export function mapElevationOf(map, location) {
|
|
15
|
+
const terrain = terrain3DByMap.get(map);
|
|
16
|
+
if (terrain) return getElevation(terrain, location);
|
|
17
|
+
const stream = streamTerrainByMap.get(map);
|
|
18
|
+
return stream && gridTerrainElevation(stream, location);
|
|
19
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Read bridge GeoJSON from a successful HTTP response.
|
|
3
|
-
*
|
|
4
|
-
* @param {Response} response Bridge request response.
|
|
5
|
-
*
|
|
6
|
-
* @returns {Promise<Object>} Parsed bridge GeoJSON.
|
|
7
|
-
*
|
|
8
|
-
* @throws {Error} If the response has a non-success status.
|
|
9
|
-
*/
|
|
10
|
-
export function readBridges(response) {
|
|
11
|
-
if (!response.ok) throw /* alloc */ new Error(`Bridges: HTTP ${response.status}`);
|
|
12
|
-
return response.json();
|
|
13
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Read bridge GeoJSON from a successful HTTP response.
|
|
3
|
+
*
|
|
4
|
+
* @param {Response} response Bridge request response.
|
|
5
|
+
*
|
|
6
|
+
* @returns {Promise<Object>} Parsed bridge GeoJSON.
|
|
7
|
+
*
|
|
8
|
+
* @throws {Error} If the response has a non-success status.
|
|
9
|
+
*/
|
|
10
|
+
export function readBridges(response) {
|
|
11
|
+
if (!response.ok) throw /* alloc */ new Error(`Bridges: HTTP ${response.status}`);
|
|
12
|
+
return response.json();
|
|
13
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { terrain3DByMap } from '../weakmaps/terrain3DByMap.js';
|
|
2
|
-
import { terrainReadyByLayer } from '../weakmaps/terrainReadyByLayer.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Find the map's archive terrain if it is ready.
|
|
6
|
-
*
|
|
7
|
-
* @param {L.Map} map Map to inspect.
|
|
8
|
-
*
|
|
9
|
-
* @returns {L.Layer|false|undefined} Ready terrain or a falsy value.
|
|
10
|
-
*/
|
|
11
|
-
export function readyTerrainOf(map) {
|
|
12
|
-
const terrain = terrain3DByMap.get(map);
|
|
13
|
-
return terrainReadyByLayer.get(terrain) && terrain;
|
|
14
|
-
}
|
|
1
|
+
import { terrain3DByMap } from '../weakmaps/terrain3DByMap.js';
|
|
2
|
+
import { terrainReadyByLayer } from '../weakmaps/terrainReadyByLayer.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Find the map's archive terrain if it is ready.
|
|
6
|
+
*
|
|
7
|
+
* @param {L.Map} map Map to inspect.
|
|
8
|
+
*
|
|
9
|
+
* @returns {L.Layer|false|undefined} Ready terrain or a falsy value.
|
|
10
|
+
*/
|
|
11
|
+
export function readyTerrainOf(map) {
|
|
12
|
+
const terrain = terrain3DByMap.get(map);
|
|
13
|
+
return terrainReadyByLayer.get(terrain) && terrain;
|
|
14
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sample one integer pixel from the terrain tile map.
|
|
3
|
-
*
|
|
4
|
-
* @param {Map} tiles DEM tiles keyed by x/y.
|
|
5
|
-
* @param {number} px Global pixel x coordinate.
|
|
6
|
-
* @param {number} py Global pixel y coordinate.
|
|
7
|
-
*
|
|
8
|
-
* @returns {number|null} Elevation, or null for a missing or invalid sample.
|
|
9
|
-
*/
|
|
10
|
-
export function sample(tiles, px, py) {
|
|
11
|
-
const tileX = Math.floor(px / 256), tileY = Math.floor(py / 256);
|
|
12
|
-
const tile = tiles.get(`${tileX}/${tileY}`);
|
|
13
|
-
if (!tile) return null;
|
|
14
|
-
const elevation = tile[(py - tileY * 256) * 256 + px - tileX * 256];
|
|
15
|
-
return Number.isFinite(elevation) && elevation > -1000 ? elevation : null;
|
|
16
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Sample one integer pixel from the terrain tile map.
|
|
3
|
+
*
|
|
4
|
+
* @param {Map} tiles DEM tiles keyed by x/y.
|
|
5
|
+
* @param {number} px Global pixel x coordinate.
|
|
6
|
+
* @param {number} py Global pixel y coordinate.
|
|
7
|
+
*
|
|
8
|
+
* @returns {number|null} Elevation, or null for a missing or invalid sample.
|
|
9
|
+
*/
|
|
10
|
+
export function sample(tiles, px, py) {
|
|
11
|
+
const tileX = Math.floor(px / 256), tileY = Math.floor(py / 256);
|
|
12
|
+
const tile = tiles.get(`${tileX}/${tileY}`);
|
|
13
|
+
if (!tile) return null;
|
|
14
|
+
const elevation = tile[(py - tileY * 256) * 256 + px - tileX * 256];
|
|
15
|
+
return Number.isFinite(elevation) && elevation > -1000 ? elevation : null;
|
|
16
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { terrainBoundsByLayer } from '../weakmaps/terrainBoundsByLayer.js';
|
|
2
|
-
import { terrainZoomByLayer } from '../weakmaps/terrainZoomByLayer.js';
|
|
3
|
-
import { L } from '../globals/L.js';
|
|
4
|
-
import { archiveNorthWest } from '../globals/archiveNorthWest.js';
|
|
5
|
-
import { archiveSouthEast } from '../globals/archiveSouthEast.js';
|
|
6
|
-
import { compareDistance } from '../utils/compareDistance.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Build the archive terrain tile queue ordered by distance from the map center.
|
|
10
|
-
*
|
|
11
|
-
* @param {L.Layer} layer Terrain layer.
|
|
12
|
-
* @param {Object} header Archive bounds and zoom metadata.
|
|
13
|
-
*
|
|
14
|
-
* @returns {Object[]} Tile coordinates with their distance from the center.
|
|
15
|
-
*/
|
|
16
|
-
export function terrainTileQueue(layer, header) {
|
|
17
|
-
const map = layer._map
|
|
18
|
-
terrainZoomByLayer.set(layer, header.maxZoom);
|
|
19
|
-
archiveNorthWest[0] = header.maxLat; archiveNorthWest[1] = header.minLon;
|
|
20
|
-
const northwest = map.project(archiveNorthWest, terrainZoomByLayer.get(layer)).divideBy(256).floor();
|
|
21
|
-
archiveSouthEast[0] = header.minLat; archiveSouthEast[1] = header.maxLon;
|
|
22
|
-
const southeast = map.project(archiveSouthEast, terrainZoomByLayer.get(layer)).divideBy(256).floor();
|
|
23
|
-
terrainBoundsByLayer.set(layer, /* alloc */ new L.Bounds(northwest, southeast));
|
|
24
|
-
const tiles = /* alloc */ [];
|
|
25
|
-
const center = map.project(map.getCenter(), terrainZoomByLayer.get(layer)).divideBy(256);
|
|
26
|
-
let x, y;
|
|
27
|
-
for (x = northwest.x; x <= southeast.x; x++) {
|
|
28
|
-
for (y = northwest.y; y <= southeast.y; y++) {
|
|
29
|
-
tiles.push(/* alloc */ { z: terrainZoomByLayer.get(layer), x, y, distance: Math.hypot(x + 0.5 - center.x, y + 0.5 - center.y) });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
tiles.sort(compareDistance);
|
|
33
|
-
return tiles;
|
|
34
|
-
}
|
|
1
|
+
import { terrainBoundsByLayer } from '../weakmaps/terrainBoundsByLayer.js';
|
|
2
|
+
import { terrainZoomByLayer } from '../weakmaps/terrainZoomByLayer.js';
|
|
3
|
+
import { L } from '../globals/L.js';
|
|
4
|
+
import { archiveNorthWest } from '../globals/archiveNorthWest.js';
|
|
5
|
+
import { archiveSouthEast } from '../globals/archiveSouthEast.js';
|
|
6
|
+
import { compareDistance } from '../utils/compareDistance.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Build the archive terrain tile queue ordered by distance from the map center.
|
|
10
|
+
*
|
|
11
|
+
* @param {L.Layer} layer Terrain layer.
|
|
12
|
+
* @param {Object} header Archive bounds and zoom metadata.
|
|
13
|
+
*
|
|
14
|
+
* @returns {Object[]} Tile coordinates with their distance from the center.
|
|
15
|
+
*/
|
|
16
|
+
export function terrainTileQueue(layer, header) {
|
|
17
|
+
const map = layer._map
|
|
18
|
+
terrainZoomByLayer.set(layer, header.maxZoom);
|
|
19
|
+
archiveNorthWest[0] = header.maxLat; archiveNorthWest[1] = header.minLon;
|
|
20
|
+
const northwest = map.project(archiveNorthWest, terrainZoomByLayer.get(layer)).divideBy(256).floor();
|
|
21
|
+
archiveSouthEast[0] = header.minLat; archiveSouthEast[1] = header.maxLon;
|
|
22
|
+
const southeast = map.project(archiveSouthEast, terrainZoomByLayer.get(layer)).divideBy(256).floor();
|
|
23
|
+
terrainBoundsByLayer.set(layer, /* alloc */ new L.Bounds(northwest, southeast));
|
|
24
|
+
const tiles = /* alloc */ [];
|
|
25
|
+
const center = map.project(map.getCenter(), terrainZoomByLayer.get(layer)).divideBy(256);
|
|
26
|
+
let x, y;
|
|
27
|
+
for (x = northwest.x; x <= southeast.x; x++) {
|
|
28
|
+
for (y = northwest.y; y <= southeast.y; y++) {
|
|
29
|
+
tiles.push(/* alloc */ { z: terrainZoomByLayer.get(layer), x, y, distance: Math.hypot(x + 0.5 - center.x, y + 0.5 - center.y) });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
tiles.sort(compareDistance);
|
|
33
|
+
return tiles;
|
|
34
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { imageStates } from '../weakmaps/imageStates.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Associate a native layer state with an image.
|
|
5
|
-
*
|
|
6
|
-
* @param {HTMLImageElement} image Image to track.
|
|
7
|
-
* @param {Object} state Native layer state.
|
|
8
|
-
*/
|
|
9
|
-
export function addImageState(image, state) {
|
|
10
|
-
let states = imageStates.get(image);
|
|
11
|
-
if (!states) imageStates.set(image, states = /* alloc */ new Set());
|
|
12
|
-
states.add(state);
|
|
13
|
-
}
|
|
1
|
+
import { imageStates } from '../weakmaps/imageStates.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Associate a native layer state with an image.
|
|
5
|
+
*
|
|
6
|
+
* @param {HTMLImageElement} image Image to track.
|
|
7
|
+
* @param {Object} state Native layer state.
|
|
8
|
+
*/
|
|
9
|
+
export function addImageState(image, state) {
|
|
10
|
+
let states = imageStates.get(image);
|
|
11
|
+
if (!states) imageStates.set(image, states = /* alloc */ new Set());
|
|
12
|
+
states.add(state);
|
|
13
|
+
}
|