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,26 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Upload a native image, removing its cached GPU texture if the copy fails.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} state Native layer state containing the texture cache.
|
|
5
|
-
* @param {string} key Texture cache key.
|
|
6
|
-
* @param {Object} texture Destination texture state.
|
|
7
|
-
* @param {HTMLImageElement} image Source image.
|
|
8
|
-
* @param {GPUDevice} device Device owning the destination.
|
|
9
|
-
* @param {number} width Image width in pixels.
|
|
10
|
-
* @param {number} height Image height in pixels.
|
|
11
|
-
*
|
|
12
|
-
* @throws {Error} If the GPU image copy fails.
|
|
13
|
-
*/
|
|
14
|
-
export function uploadNativeImage(state, key, texture, image, device, width, height) {
|
|
15
|
-
try {
|
|
16
|
-
device.queue.copyExternalImageToTexture(
|
|
17
|
-
/* alloc */ { source: image },
|
|
18
|
-
/* alloc */ { texture: texture.texture },
|
|
19
|
-
/* alloc */ [width, height]);
|
|
20
|
-
} catch (error) {
|
|
21
|
-
texture.texture.destroy();
|
|
22
|
-
state.textures.delete(key);
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
texture.uploaded = image;
|
|
26
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Upload a native image, removing its cached GPU texture if the copy fails.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} state Native layer state containing the texture cache.
|
|
5
|
+
* @param {string} key Texture cache key.
|
|
6
|
+
* @param {Object} texture Destination texture state.
|
|
7
|
+
* @param {HTMLImageElement} image Source image.
|
|
8
|
+
* @param {GPUDevice} device Device owning the destination.
|
|
9
|
+
* @param {number} width Image width in pixels.
|
|
10
|
+
* @param {number} height Image height in pixels.
|
|
11
|
+
*
|
|
12
|
+
* @throws {Error} If the GPU image copy fails.
|
|
13
|
+
*/
|
|
14
|
+
export function uploadNativeImage(state, key, texture, image, device, width, height) {
|
|
15
|
+
try {
|
|
16
|
+
device.queue.copyExternalImageToTexture(
|
|
17
|
+
/* alloc */ { source: image },
|
|
18
|
+
/* alloc */ { texture: texture.texture },
|
|
19
|
+
/* alloc */ [width, height]);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
texture.texture.destroy();
|
|
22
|
+
state.textures.delete(key);
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
texture.uploaded = image;
|
|
26
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { roofImage } from '../globals/roofImage.js';
|
|
2
|
-
import { roofTarget } from '../globals/roofTarget.js';
|
|
3
|
-
import { roofCopySize } from '../globals/roofCopySize.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Upload a roof tile image when its texture does not already contain it.
|
|
7
|
-
*
|
|
8
|
-
* @param {GPUDevice} device Device owning the destination texture.
|
|
9
|
-
* @param {Object} tile Raster tile with image and texture state.
|
|
10
|
-
*/
|
|
11
|
-
export function uploadRoofTile(device, tile) {
|
|
12
|
-
const source = tile.texture;
|
|
13
|
-
if (source.uploaded !== source.image) {
|
|
14
|
-
device.queue.copyExternalImageToTexture((
|
|
15
|
-
roofImage.source = tile.image,
|
|
16
|
-
roofImage
|
|
17
|
-
), (
|
|
18
|
-
roofTarget.texture = source.texture,
|
|
19
|
-
roofTarget
|
|
20
|
-
), (
|
|
21
|
-
roofCopySize[0] = source.texture.width,
|
|
22
|
-
roofCopySize[1] = source.texture.height,
|
|
23
|
-
roofCopySize
|
|
24
|
-
));
|
|
25
|
-
roofImage.source = null;
|
|
26
|
-
roofTarget.texture = null;
|
|
27
|
-
source.uploaded = source.image;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
import { roofImage } from '../globals/roofImage.js';
|
|
2
|
+
import { roofTarget } from '../globals/roofTarget.js';
|
|
3
|
+
import { roofCopySize } from '../globals/roofCopySize.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Upload a roof tile image when its texture does not already contain it.
|
|
7
|
+
*
|
|
8
|
+
* @param {GPUDevice} device Device owning the destination texture.
|
|
9
|
+
* @param {Object} tile Raster tile with image and texture state.
|
|
10
|
+
*/
|
|
11
|
+
export function uploadRoofTile(device, tile) {
|
|
12
|
+
const source = tile.texture;
|
|
13
|
+
if (source.uploaded !== source.image) {
|
|
14
|
+
device.queue.copyExternalImageToTexture((
|
|
15
|
+
roofImage.source = tile.image,
|
|
16
|
+
roofImage
|
|
17
|
+
), (
|
|
18
|
+
roofTarget.texture = source.texture,
|
|
19
|
+
roofTarget
|
|
20
|
+
), (
|
|
21
|
+
roofCopySize[0] = source.texture.width,
|
|
22
|
+
roofCopySize[1] = source.texture.height,
|
|
23
|
+
roofCopySize
|
|
24
|
+
));
|
|
25
|
+
roofImage.source = null;
|
|
26
|
+
roofTarget.texture = null;
|
|
27
|
+
source.uploaded = source.image;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import * as createMeshApi from '../rendering/createMesh.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Create a traffic mesh and attach its feature ranges for picking.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
* @param {Object} data Mesh geometry data.
|
|
8
|
-
* @param {Array} featureFaces Face ranges for picking.
|
|
9
|
-
* @param {Object} material Mesh material options.
|
|
10
|
-
* @param {number} [usage=0] Additional GPU buffer usage flags.
|
|
11
|
-
*
|
|
12
|
-
* @returns {Object} The created mesh.
|
|
13
|
-
*/
|
|
14
|
-
export function createTrafficMesh(state, data, featureFaces, material, usage = 0) {
|
|
15
|
-
const result = createMeshApi.createMesh(state.layer, data, material, usage);
|
|
16
|
-
result.extras.featureFaces = featureFaces;
|
|
17
|
-
return result;
|
|
1
|
+
import * as createMeshApi from '../rendering/createMesh.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Create a traffic mesh and attach its feature ranges for picking.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
* @param {Object} data Mesh geometry data.
|
|
8
|
+
* @param {Array} featureFaces Face ranges for picking.
|
|
9
|
+
* @param {Object} material Mesh material options.
|
|
10
|
+
* @param {number} [usage=0] Additional GPU buffer usage flags.
|
|
11
|
+
*
|
|
12
|
+
* @returns {Object} The created mesh.
|
|
13
|
+
*/
|
|
14
|
+
export function createTrafficMesh(state, data, featureFaces, material, usage = 0) {
|
|
15
|
+
const result = createMeshApi.createMesh(state.layer, data, material, usage);
|
|
16
|
+
result.extras.featureFaces = featureFaces;
|
|
17
|
+
return result;
|
|
18
18
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { highlightedFeatureByLayer } from '../weakmaps/highlightedFeatureByLayer.js';
|
|
2
|
-
import { hoveredFeatureByLayer } from '../weakmaps/hoveredFeatureByLayer.js';
|
|
3
|
-
import * as disposeMesh from '../rendering/disposeMesh.js';
|
|
4
|
-
import * as setHighlight from '../picking/setHighlight.js';
|
|
5
|
-
import * as showFeature from '../picking/showFeature.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Dispose a traffic mesh, clearing the layer's highlight and tooltip if they reference it.
|
|
9
|
-
*
|
|
10
|
-
* @param {Object} state Traffic layer state.
|
|
11
|
-
* @param {Object|null} object Mesh to dispose, if present.
|
|
12
|
-
*/
|
|
1
|
+
import { highlightedFeatureByLayer } from '../weakmaps/highlightedFeatureByLayer.js';
|
|
2
|
+
import { hoveredFeatureByLayer } from '../weakmaps/hoveredFeatureByLayer.js';
|
|
3
|
+
import * as disposeMesh from '../rendering/disposeMesh.js';
|
|
4
|
+
import * as setHighlight from '../picking/setHighlight.js';
|
|
5
|
+
import * as showFeature from '../picking/showFeature.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Dispose a traffic mesh, clearing the layer's highlight and tooltip if they reference it.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} state Traffic layer state.
|
|
11
|
+
* @param {Object|null} object Mesh to dispose, if present.
|
|
12
|
+
*/
|
|
13
13
|
export function disposeTrafficObject(state, object) {
|
|
14
|
-
if (!object) return;
|
|
15
|
-
if (highlightedFeatureByLayer.get(state.layer)?.mesh === object) {
|
|
16
|
-
setHighlight.setHighlight(state.layer, null);
|
|
17
|
-
hoveredFeatureByLayer.set(state.layer, null);
|
|
18
|
-
showFeature.showFeature(state.layer, null);
|
|
19
|
-
};
|
|
20
|
-
disposeMesh.disposeMesh(state.layer, object);
|
|
14
|
+
if (!object) return;
|
|
15
|
+
if (highlightedFeatureByLayer.get(state.layer)?.mesh === object) {
|
|
16
|
+
setHighlight.setHighlight(state.layer, null);
|
|
17
|
+
hoveredFeatureByLayer.set(state.layer, null);
|
|
18
|
+
showFeature.showFeature(state.layer, null);
|
|
19
|
+
};
|
|
20
|
+
disposeMesh.disposeMesh(state.layer, object);
|
|
21
21
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Record and log a traffic error and expose it in the layer status.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} state Traffic layer state.
|
|
5
|
-
* @param {Error} error Error to report.
|
|
6
|
-
*/
|
|
7
|
-
export function failTraffic(state, error) {
|
|
8
|
-
state.error = error;
|
|
9
|
-
state.status.textContent = `${state.vehicle}: Error: ${error.message}`;
|
|
10
|
-
state.status.setAttribute('role', 'alert');
|
|
11
|
-
console.error('Traffic layer', error);
|
|
12
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Record and log a traffic error and expose it in the layer status.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} state Traffic layer state.
|
|
5
|
+
* @param {Error} error Error to report.
|
|
6
|
+
*/
|
|
7
|
+
export function failTraffic(state, error) {
|
|
8
|
+
state.error = error;
|
|
9
|
+
state.status.textContent = `${state.vehicle}: Error: ${error.message}`;
|
|
10
|
+
state.status.setAttribute('role', 'alert');
|
|
11
|
+
console.error('Traffic layer', error);
|
|
12
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { failTraffic } from './failTraffic.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Report traffic loading errors unless the request was cancelled.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
* @param {AbortSignal} signal Signal for the lane request.
|
|
8
|
-
* @param {Error} error Loading failure.
|
|
9
|
-
*/
|
|
1
|
+
import { failTraffic } from './failTraffic.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Report traffic loading errors unless the request was cancelled.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
* @param {AbortSignal} signal Signal for the lane request.
|
|
8
|
+
* @param {Error} error Loading failure.
|
|
9
|
+
*/
|
|
10
10
|
export function failedTrafficLoad(state, signal, error) {
|
|
11
|
-
if (!signal.aborted && error.name !== 'AbortError') failTraffic(state, error);
|
|
11
|
+
if (!signal.aborted && error.name !== 'AbortError') failTraffic(state, error);
|
|
12
12
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Load time-dependent lanes from a JS module or fetch and cache a static GeoJSON response.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} state Traffic layer state.
|
|
5
|
-
* @param {Date} time Current simulation time.
|
|
6
|
-
* @param {AbortSignal} signal Signal for cancelling the request.
|
|
7
|
-
*
|
|
8
|
-
* @returns {Promise<Object>} The loaded GeoJSON data.
|
|
9
|
-
*
|
|
10
|
-
* @throws {Error} If the static data request returns a non-success status.
|
|
11
|
-
*/
|
|
12
|
-
export async function fetchTrafficLanes(state, time, signal) {
|
|
13
|
-
const href = /* alloc */ new URL(state.url, document.baseURI).href;
|
|
14
|
-
if (/\.m?js(?:[?#]|$)/i.test(state.url)) return (await import(href)).default(time, state.layer, signal);
|
|
15
|
-
if (!state.file) {
|
|
16
|
-
const response = await fetch(href, /* alloc */ { signal });
|
|
17
|
-
if (!response.ok) throw /* alloc */ new Error(`HTTP ${response.status}`);
|
|
18
|
-
state.file = await response.json();
|
|
19
|
-
}
|
|
20
|
-
return state.file;
|
|
21
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Load time-dependent lanes from a JS module or fetch and cache a static GeoJSON response.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} state Traffic layer state.
|
|
5
|
+
* @param {Date} time Current simulation time.
|
|
6
|
+
* @param {AbortSignal} signal Signal for cancelling the request.
|
|
7
|
+
*
|
|
8
|
+
* @returns {Promise<Object>} The loaded GeoJSON data.
|
|
9
|
+
*
|
|
10
|
+
* @throws {Error} If the static data request returns a non-success status.
|
|
11
|
+
*/
|
|
12
|
+
export async function fetchTrafficLanes(state, time, signal) {
|
|
13
|
+
const href = /* alloc */ new URL(state.url, document.baseURI).href;
|
|
14
|
+
if (/\.m?js(?:[?#]|$)/i.test(state.url)) return (await import(href)).default(time, state.layer, signal);
|
|
15
|
+
if (!state.file) {
|
|
16
|
+
const response = await fetch(href, /* alloc */ { signal });
|
|
17
|
+
if (!response.ok) throw /* alloc */ new Error(`HTTP ${response.status}`);
|
|
18
|
+
state.file = await response.json();
|
|
19
|
+
}
|
|
20
|
+
return state.file;
|
|
21
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { toLanes } from './featuresToTrafficLanes.js';
|
|
2
|
-
import { prepareTraffic } from './prepareTraffic.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Apply loaded lanes unless cancelled or detached, preparing new data and restarting traffic updates.
|
|
6
|
-
*
|
|
7
|
-
* @param {Object} state Traffic layer state.
|
|
8
|
-
* @param {AbortSignal} signal Signal for the completed request.
|
|
9
|
-
* @param {Object} data Loaded GeoJSON data.
|
|
10
|
-
*/
|
|
1
|
+
import { toLanes } from './featuresToTrafficLanes.js';
|
|
2
|
+
import { prepareTraffic } from './prepareTraffic.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Apply loaded lanes unless cancelled or detached, preparing new data and restarting traffic updates.
|
|
6
|
+
*
|
|
7
|
+
* @param {Object} state Traffic layer state.
|
|
8
|
+
* @param {AbortSignal} signal Signal for the completed request.
|
|
9
|
+
* @param {Object} data Loaded GeoJSON data.
|
|
10
|
+
*/
|
|
11
11
|
export function loadedTrafficLanes(state, signal, data) {
|
|
12
|
-
if (signal.aborted || !state.layer._map) return;
|
|
13
|
-
state.error = null;
|
|
14
|
-
if (data === state.loaded) {
|
|
15
|
-
state.nextCheck = -Infinity;
|
|
16
|
-
if (!state.frame) state.tick();
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
state.loaded = data;
|
|
20
|
-
state.lanes = toLanes(data);
|
|
21
|
-
prepareTraffic(state);
|
|
22
|
-
if (!state.frame) state.tick();
|
|
12
|
+
if (signal.aborted || !state.layer._map) return;
|
|
13
|
+
state.error = null;
|
|
14
|
+
if (data === state.loaded) {
|
|
15
|
+
state.nextCheck = -Infinity;
|
|
16
|
+
if (!state.frame) state.tick();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
state.loaded = data;
|
|
20
|
+
state.lanes = toLanes(data);
|
|
21
|
+
prepareTraffic(state);
|
|
22
|
+
if (!state.frame) state.tick();
|
|
23
23
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { along } from '../geometry/interpolateRoute.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Interpolate a trip's current position along its looping lane and apply the lateral offset.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
* @param {Object} trip Trip with lane, distance and speed.
|
|
8
|
-
* @param {Object} target Reusable output position.
|
|
9
|
-
*
|
|
10
|
-
* @returns {Object} Position and direction along the lane.
|
|
11
|
-
*/
|
|
12
|
-
export function locateTraffic(state, trip, target) {
|
|
13
|
-
const { points, lengths, length } = trip.lane;
|
|
14
|
-
let distance = trip.distance + state.elapsed * trip.speed;
|
|
15
|
-
distance -= length * Math.floor(distance / length);
|
|
16
|
-
const position = along(points, lengths, distance, target);
|
|
17
|
-
position.x -= position.dz * state.side;
|
|
18
|
-
position.z += position.dx * state.side;
|
|
19
|
-
return position;
|
|
20
|
-
}
|
|
1
|
+
import { along } from '../geometry/interpolateRoute.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Interpolate a trip's current position along its looping lane and apply the lateral offset.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
* @param {Object} trip Trip with lane, distance and speed.
|
|
8
|
+
* @param {Object} target Reusable output position.
|
|
9
|
+
*
|
|
10
|
+
* @returns {Object} Position and direction along the lane.
|
|
11
|
+
*/
|
|
12
|
+
export function locateTraffic(state, trip, target) {
|
|
13
|
+
const { points, lengths, length } = trip.lane;
|
|
14
|
+
let distance = trip.distance + state.elapsed * trip.speed;
|
|
15
|
+
distance -= length * Math.floor(distance / length);
|
|
16
|
+
const position = along(points, lengths, distance, target);
|
|
17
|
+
position.x -= position.dz * state.side;
|
|
18
|
+
position.z += position.dx * state.side;
|
|
19
|
+
return position;
|
|
20
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dispatch the GPU traffic pose computation for the elapsed time and mark CPU geometry stale.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} state Traffic layer state.
|
|
5
|
-
* @param {number} seconds Seconds elapsed since the trip positions were rebased.
|
|
6
|
-
*/
|
|
7
|
-
export function moveTraffic(state, seconds) {
|
|
8
|
-
const { device } = state.gpu;
|
|
9
|
-
state.paramFloats[0] = state.elapsed = seconds;
|
|
10
|
-
state.paramFloats[1] = state.side;
|
|
11
|
-
state.paramInts[2] = state.vertices;
|
|
12
|
-
state.paramInts[3] = state.trips.length * state.vertices;
|
|
13
|
-
device.queue.writeBuffer(state.gpu.params, 0, state.params);
|
|
14
|
-
const encoder = device.createCommandEncoder(), pass = encoder.beginComputePass();
|
|
15
|
-
pass.setPipeline(state.gpu.pipeline);
|
|
16
|
-
pass.setBindGroup(0, state.gpu.bindGroup);
|
|
17
|
-
pass.dispatchWorkgroups(state.trips.length);
|
|
18
|
-
pass.end();
|
|
19
|
-
device.queue.submit(/* alloc */ [encoder.finish()]);
|
|
20
|
-
state.stale = true;
|
|
21
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Dispatch the GPU traffic pose computation for the elapsed time and mark CPU geometry stale.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} state Traffic layer state.
|
|
5
|
+
* @param {number} seconds Seconds elapsed since the trip positions were rebased.
|
|
6
|
+
*/
|
|
7
|
+
export function moveTraffic(state, seconds) {
|
|
8
|
+
const { device } = state.gpu;
|
|
9
|
+
state.paramFloats[0] = state.elapsed = seconds;
|
|
10
|
+
state.paramFloats[1] = state.side;
|
|
11
|
+
state.paramInts[2] = state.vertices;
|
|
12
|
+
state.paramInts[3] = state.trips.length * state.vertices;
|
|
13
|
+
device.queue.writeBuffer(state.gpu.params, 0, state.params);
|
|
14
|
+
const encoder = device.createCommandEncoder(), pass = encoder.beginComputePass();
|
|
15
|
+
pass.setPipeline(state.gpu.pipeline);
|
|
16
|
+
pass.setBindGroup(0, state.gpu.bindGroup);
|
|
17
|
+
pass.dispatchWorkgroups(state.trips.length);
|
|
18
|
+
pass.end();
|
|
19
|
+
device.queue.submit(/* alloc */ [encoder.finish()]);
|
|
20
|
+
state.stale = true;
|
|
21
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { startTraffic } from './startTraffic.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Mark a traffic layer ready and start it if already attached to a map.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
*/
|
|
8
|
-
export function readyTraffic(state) {
|
|
9
|
-
state.ready = true;
|
|
10
|
-
if (state.layer._map) startTraffic(state);
|
|
1
|
+
import { startTraffic } from './startTraffic.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mark a traffic layer ready and start it if already attached to a map.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
*/
|
|
8
|
+
export function readyTraffic(state) {
|
|
9
|
+
state.ready = true;
|
|
10
|
+
if (state.layer._map) startTraffic(state);
|
|
11
11
|
}
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { tripsAt } from './tripsAt.js';
|
|
2
|
-
import { failTraffic } from './failTraffic.js';
|
|
3
|
-
import { drawTrafficRoute } from './drawTrafficRoute.js';
|
|
4
|
-
import { rebuildTrafficMesh } from './rebuildTrafficMesh.js';
|
|
5
|
-
import { rebaseTraffic } from './rebaseTraffic.js';
|
|
6
|
-
import { trafficStatusText } from './trafficStatusText.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Recompute scheduled trips and status, rebuilding changed geometry and rebasing GPU data.
|
|
10
|
-
*
|
|
11
|
-
* @param {Object} state Traffic layer state.
|
|
12
|
-
* @param {Date|undefined} time Simulation time, if available.
|
|
13
|
-
* @param {number|undefined} ms Simulation timestamp in milliseconds, if available.
|
|
14
|
-
* @param {boolean} valid Whether the simulation timestamp is valid.
|
|
15
|
-
*
|
|
16
|
-
* @returns {boolean|undefined} Whether geometry changed, or undefined if updating trips failed.
|
|
17
|
-
*/
|
|
18
|
-
export function refreshTrafficTrips(state, time, ms, valid) {
|
|
19
|
-
let text;
|
|
20
|
-
try {
|
|
21
|
-
if (valid) state.trips = tripsAt(time, state.lanes, state.velocity);
|
|
22
|
-
else state.trips.length = 0;
|
|
23
|
-
text = trafficStatusText(state, valid);
|
|
24
|
-
} catch (error) {
|
|
25
|
-
failTraffic(state, error);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
state.rebasedAt = ms;
|
|
29
|
-
state.nextCheck = ms + 1000;
|
|
30
|
-
let key = '', trip;
|
|
31
|
-
for (trip of state.trips) key += `${key ? ',' : ''}${trip.id}`;
|
|
32
|
-
const routeNeeded = state.outline && !state.route && state.lanes.length;
|
|
33
|
-
const changed = key !== state.tripsKey || Boolean(routeNeeded);
|
|
34
|
-
if (routeNeeded) drawTrafficRoute(state);
|
|
35
|
-
if (key !== state.tripsKey) { rebuildTrafficMesh(state); state.tripsKey = key; }
|
|
36
|
-
if (state.mesh) rebaseTraffic(state);
|
|
37
|
-
if (!state.error) {
|
|
38
|
-
if (state.status.textContent !== text) state.status.textContent = text;
|
|
39
|
-
state.status.removeAttribute('role');
|
|
40
|
-
}
|
|
41
|
-
return changed;
|
|
42
|
-
}
|
|
1
|
+
import { tripsAt } from './tripsAt.js';
|
|
2
|
+
import { failTraffic } from './failTraffic.js';
|
|
3
|
+
import { drawTrafficRoute } from './drawTrafficRoute.js';
|
|
4
|
+
import { rebuildTrafficMesh } from './rebuildTrafficMesh.js';
|
|
5
|
+
import { rebaseTraffic } from './rebaseTraffic.js';
|
|
6
|
+
import { trafficStatusText } from './trafficStatusText.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Recompute scheduled trips and status, rebuilding changed geometry and rebasing GPU data.
|
|
10
|
+
*
|
|
11
|
+
* @param {Object} state Traffic layer state.
|
|
12
|
+
* @param {Date|undefined} time Simulation time, if available.
|
|
13
|
+
* @param {number|undefined} ms Simulation timestamp in milliseconds, if available.
|
|
14
|
+
* @param {boolean} valid Whether the simulation timestamp is valid.
|
|
15
|
+
*
|
|
16
|
+
* @returns {boolean|undefined} Whether geometry changed, or undefined if updating trips failed.
|
|
17
|
+
*/
|
|
18
|
+
export function refreshTrafficTrips(state, time, ms, valid) {
|
|
19
|
+
let text;
|
|
20
|
+
try {
|
|
21
|
+
if (valid) state.trips = tripsAt(time, state.lanes, state.velocity);
|
|
22
|
+
else state.trips.length = 0;
|
|
23
|
+
text = trafficStatusText(state, valid);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
failTraffic(state, error);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
state.rebasedAt = ms;
|
|
29
|
+
state.nextCheck = ms + 1000;
|
|
30
|
+
let key = '', trip;
|
|
31
|
+
for (trip of state.trips) key += `${key ? ',' : ''}${trip.id}`;
|
|
32
|
+
const routeNeeded = state.outline && !state.route && state.lanes.length;
|
|
33
|
+
const changed = key !== state.tripsKey || Boolean(routeNeeded);
|
|
34
|
+
if (routeNeeded) drawTrafficRoute(state);
|
|
35
|
+
if (key !== state.tripsKey) { rebuildTrafficMesh(state); state.tripsKey = key; }
|
|
36
|
+
if (state.mesh) rebaseTraffic(state);
|
|
37
|
+
if (!state.error) {
|
|
38
|
+
if (state.status.textContent !== text) state.status.textContent = text;
|
|
39
|
+
state.status.removeAttribute('role');
|
|
40
|
+
}
|
|
41
|
+
return changed;
|
|
42
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decode a six-digit route color to normalized RGB, falling back to the default route color.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object|null|undefined} properties Route properties containing an optional route_color.
|
|
5
|
-
*
|
|
6
|
-
* @returns {number[]} Normalized RGB components.
|
|
7
|
-
*/
|
|
8
|
-
export function routeColor(properties) {
|
|
9
|
-
const color = properties?.route_color;
|
|
10
|
-
if (!/^[\da-f]{6}$/i.test(color)) return /* alloc */ [0.1, 0.55, 0.65];
|
|
11
|
-
const value = Number.parseInt(color, 16);
|
|
12
|
-
return /* alloc */ [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];
|
|
13
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Decode a six-digit route color to normalized RGB, falling back to the default route color.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object|null|undefined} properties Route properties containing an optional route_color.
|
|
5
|
+
*
|
|
6
|
+
* @returns {number[]} Normalized RGB components.
|
|
7
|
+
*/
|
|
8
|
+
export function routeColor(properties) {
|
|
9
|
+
const color = properties?.route_color;
|
|
10
|
+
if (!/^[\da-f]{6}$/i.test(color)) return /* alloc */ [0.1, 0.55, 0.65];
|
|
11
|
+
const value = Number.parseInt(color, 16);
|
|
12
|
+
return /* alloc */ [(value >> 16 & 255) / 255, (value >> 8 & 255) / 255, (value & 255) / 255];
|
|
13
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { underEntry } from '../layer-controls/underEntry.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Register time and terrain listeners, show the layer status and start traffic updates.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
*/
|
|
8
|
-
export function startTraffic(state) {
|
|
9
|
-
state.layer._map.off('simulationtimechange layerremove', state.update).on('simulationtimechange layerremove', state.update);
|
|
10
|
-
state.layer._map.off('terrainchange', state.terrain).on('terrainchange', state.terrain);
|
|
11
|
-
underEntry(state.layer, state.status);
|
|
12
|
-
state.update();
|
|
1
|
+
import { underEntry } from '../layer-controls/underEntry.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Register time and terrain listeners, show the layer status and start traffic updates.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
*/
|
|
8
|
+
export function startTraffic(state) {
|
|
9
|
+
state.layer._map.off('simulationtimechange layerremove', state.update).on('simulationtimechange layerremove', state.update);
|
|
10
|
+
state.layer._map.off('terrainchange', state.terrain).on('terrainchange', state.terrain);
|
|
11
|
+
underEntry(state.layer, state.status);
|
|
12
|
+
state.update();
|
|
13
13
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { timeControlByMap } from '../weakmaps/timeControlByMap.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Return the selected simulation time, or the current time when the map clock is live.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} state Traffic layer state.
|
|
7
|
-
*
|
|
8
|
-
* @returns {Object} Live-mode flag and selected time.
|
|
9
|
-
*/
|
|
1
|
+
import { timeControlByMap } from '../weakmaps/timeControlByMap.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Return the selected simulation time, or the current time when the map clock is live.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} state Traffic layer state.
|
|
7
|
+
*
|
|
8
|
+
* @returns {Object} Live-mode flag and selected time.
|
|
9
|
+
*/
|
|
10
10
|
export function trafficNow(state) {
|
|
11
|
-
const control = timeControlByMap.get(state.layer._map);
|
|
12
|
-
const live = control ? control.live : true;
|
|
13
|
-
return /* alloc */ {
|
|
14
|
-
live, time: live ? /* alloc */ new Date() : control.time,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
11
|
+
const control = timeControlByMap.get(state.layer._map);
|
|
12
|
+
const live = control ? control.live : true;
|
|
13
|
+
return /* alloc */ {
|
|
14
|
+
live, time: live ? /* alloc */ new Date() : control.time,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format the traffic layer status for an invalid clock, loading state or active trip count.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} state Traffic layer state.
|
|
5
|
-
* @param {boolean} valid Whether the simulation time is valid.
|
|
6
|
-
*
|
|
7
|
-
* @returns {string} Status text.
|
|
8
|
-
*/
|
|
9
|
-
export function trafficStatusText(state, valid) {
|
|
10
|
-
if (!valid) return `${state.vehicle}: select a valid simulation date`;
|
|
11
|
-
if (!state.loaded) return `${state.vehicle}: loading…`;
|
|
12
|
-
return `${state.trips.length} ${state.vehicle === 'boat' ? 'boats' : state.vehicle}`;
|
|
13
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Format the traffic layer status for an invalid clock, loading state or active trip count.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} state Traffic layer state.
|
|
5
|
+
* @param {boolean} valid Whether the simulation time is valid.
|
|
6
|
+
*
|
|
7
|
+
* @returns {string} Status text.
|
|
8
|
+
*/
|
|
9
|
+
export function trafficStatusText(state, valid) {
|
|
10
|
+
if (!valid) return `${state.vehicle}: select a valid simulation date`;
|
|
11
|
+
if (!state.loaded) return `${state.vehicle}: loading…`;
|
|
12
|
+
return `${state.trips.length} ${state.vehicle === 'boat' ? 'boats' : state.vehicle}`;
|
|
13
|
+
}
|