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,17 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Find the last directory entry whose tile ID does not exceed the requested ID.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object[]} entries Entries sorted by tile ID.
|
|
5
|
-
* @param {number} id Requested tile ID.
|
|
6
|
-
*
|
|
7
|
-
* @returns {Object|undefined} Matching entry, if any.
|
|
8
|
-
*/
|
|
9
|
-
export function findDirectoryEntry(entries, id) {
|
|
10
|
-
let low = 0, high = entries.length - 1, mid;
|
|
11
|
-
while (low <= high) {
|
|
12
|
-
mid = (low + high) >> 1;
|
|
13
|
-
if (entries[mid].tileId <= id) low = mid + 1;
|
|
14
|
-
else high = mid - 1;
|
|
15
|
-
}
|
|
16
|
-
return entries[high];
|
|
17
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Find the last directory entry whose tile ID does not exceed the requested ID.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object[]} entries Entries sorted by tile ID.
|
|
5
|
+
* @param {number} id Requested tile ID.
|
|
6
|
+
*
|
|
7
|
+
* @returns {Object|undefined} Matching entry, if any.
|
|
8
|
+
*/
|
|
9
|
+
export function findDirectoryEntry(entries, id) {
|
|
10
|
+
let low = 0, high = entries.length - 1, mid;
|
|
11
|
+
while (low <= high) {
|
|
12
|
+
mid = (low + high) >> 1;
|
|
13
|
+
if (entries[mid].tileId <= id) low = mid + 1;
|
|
14
|
+
else high = mid - 1;
|
|
15
|
+
}
|
|
16
|
+
return entries[high];
|
|
17
|
+
}
|
package/src/archives/findTile.js
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import { getDirectoryEntries } from './getDirectoryEntries.js';
|
|
2
|
-
import { findDirectoryEntry } from './findDirectoryEntry.js';
|
|
3
|
-
import { getTileData } from './getTileData.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Follow root and leaf directories to find an archive tile.
|
|
7
|
-
*
|
|
8
|
-
* @param {L.Layer} layer Archive layer.
|
|
9
|
-
* @param {Object} header Decoded archive header.
|
|
10
|
-
* @param {number} id Cumulative Hilbert tile ID.
|
|
11
|
-
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
12
|
-
*
|
|
13
|
-
* @returns {Promise<Object|undefined>} Tile data, or undefined if not found.
|
|
14
|
-
*
|
|
15
|
-
* @throws {Error} If directory offsets form a cycle.
|
|
16
|
-
* @throws {Error} If a leaf directory extends outside its section.
|
|
17
|
-
* @throws {Error} If directory nesting exceeds four levels.
|
|
18
|
-
*/
|
|
19
|
-
export async function findTile(layer, header, id, signal) {
|
|
20
|
-
let offset = header.rootDirectoryOffset, length = header.rootDirectoryLength;
|
|
21
|
-
let firstOffset = -1, secondOffset = -1, thirdOffset = -1;
|
|
22
|
-
let depth, entries, entry, tile;
|
|
23
|
-
for (depth = 0; depth < 4; depth++) {
|
|
24
|
-
if (offset === firstOffset || offset === secondOffset || offset === thirdOffset) {
|
|
25
|
-
throw /* alloc */ new Error('Cyclic PMTiles directory');
|
|
26
|
-
}
|
|
27
|
-
if (depth === 0) firstOffset = offset;
|
|
28
|
-
else if (depth === 1) secondOffset = offset;
|
|
29
|
-
else if (depth === 2) thirdOffset = offset;
|
|
30
|
-
entries = await getDirectoryEntries(layer, offset, length, header.internalCompression);
|
|
31
|
-
signal?.throwIfAborted();
|
|
32
|
-
entry = findDirectoryEntry(entries, id);
|
|
33
|
-
if (!entry) return;
|
|
34
|
-
if (entry.runLength) {
|
|
35
|
-
tile = await getTileData(layer, header, entry, id, signal);
|
|
36
|
-
return tile;
|
|
37
|
-
}
|
|
38
|
-
if (entry.offset + entry.length > header.leafDirectoryLength) {
|
|
39
|
-
throw /* alloc */ new Error('PMTiles directory outside leaf section');
|
|
40
|
-
}
|
|
41
|
-
offset = header.leafDirectoryOffset + entry.offset;
|
|
42
|
-
length = entry.length;
|
|
43
|
-
}
|
|
44
|
-
throw /* alloc */ new Error('PMTiles directory depth exceeds four levels');
|
|
45
|
-
}
|
|
1
|
+
import { getDirectoryEntries } from './getDirectoryEntries.js';
|
|
2
|
+
import { findDirectoryEntry } from './findDirectoryEntry.js';
|
|
3
|
+
import { getTileData } from './getTileData.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Follow root and leaf directories to find an archive tile.
|
|
7
|
+
*
|
|
8
|
+
* @param {L.Layer} layer Archive layer.
|
|
9
|
+
* @param {Object} header Decoded archive header.
|
|
10
|
+
* @param {number} id Cumulative Hilbert tile ID.
|
|
11
|
+
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
12
|
+
*
|
|
13
|
+
* @returns {Promise<Object|undefined>} Tile data, or undefined if not found.
|
|
14
|
+
*
|
|
15
|
+
* @throws {Error} If directory offsets form a cycle.
|
|
16
|
+
* @throws {Error} If a leaf directory extends outside its section.
|
|
17
|
+
* @throws {Error} If directory nesting exceeds four levels.
|
|
18
|
+
*/
|
|
19
|
+
export async function findTile(layer, header, id, signal) {
|
|
20
|
+
let offset = header.rootDirectoryOffset, length = header.rootDirectoryLength;
|
|
21
|
+
let firstOffset = -1, secondOffset = -1, thirdOffset = -1;
|
|
22
|
+
let depth, entries, entry, tile;
|
|
23
|
+
for (depth = 0; depth < 4; depth++) {
|
|
24
|
+
if (offset === firstOffset || offset === secondOffset || offset === thirdOffset) {
|
|
25
|
+
throw /* alloc */ new Error('Cyclic PMTiles directory');
|
|
26
|
+
}
|
|
27
|
+
if (depth === 0) firstOffset = offset;
|
|
28
|
+
else if (depth === 1) secondOffset = offset;
|
|
29
|
+
else if (depth === 2) thirdOffset = offset;
|
|
30
|
+
entries = await getDirectoryEntries(layer, offset, length, header.internalCompression);
|
|
31
|
+
signal?.throwIfAborted();
|
|
32
|
+
entry = findDirectoryEntry(entries, id);
|
|
33
|
+
if (!entry) return;
|
|
34
|
+
if (entry.runLength) {
|
|
35
|
+
tile = await getTileData(layer, header, entry, id, signal);
|
|
36
|
+
return tile;
|
|
37
|
+
}
|
|
38
|
+
if (entry.offset + entry.length > header.leafDirectoryLength) {
|
|
39
|
+
throw /* alloc */ new Error('PMTiles directory outside leaf section');
|
|
40
|
+
}
|
|
41
|
+
offset = header.leafDirectoryOffset + entry.offset;
|
|
42
|
+
length = entry.length;
|
|
43
|
+
}
|
|
44
|
+
throw /* alloc */ new Error('PMTiles directory depth exceeds four levels');
|
|
45
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { directoriesByLayer } from '../weakmaps/directoriesByLayer.js';
|
|
2
|
-
import { loadDirectory } from './loadDirectory.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Load and cache decoded archive directories, evicting failed requests.
|
|
6
|
-
*
|
|
7
|
-
* @param {L.Layer} layer Archive layer owning the directory cache.
|
|
8
|
-
* @param {number} offset Directory byte offset.
|
|
9
|
-
* @param {number} length Directory byte length.
|
|
10
|
-
* @param {number} compression PMTiles compression code.
|
|
11
|
-
*
|
|
12
|
-
* @returns {Promise<Object[]>} Decoded directory entries.
|
|
13
|
-
*
|
|
14
|
-
* @throws {*} If loading the cached directory fails.
|
|
15
|
-
*/
|
|
16
|
-
export async function getDirectoryEntries(layer, offset, length, compression) {
|
|
17
|
-
const directories = directoriesByLayer.get(layer);
|
|
18
|
-
const key = `${offset}:${length}`;
|
|
19
|
-
if (!directories.has(key)) {
|
|
20
|
-
if (directories.size >= 32) directories.delete(directories.keys().next().value);
|
|
21
|
-
directories.set(key, loadDirectory(layer, offset, length, compression));
|
|
22
|
-
}
|
|
23
|
-
const pending = directories.get(key);
|
|
24
|
-
try {
|
|
25
|
-
return await pending;
|
|
26
|
-
} catch (error) {
|
|
27
|
-
if (directories.get(key) === pending) directories.delete(key);
|
|
28
|
-
throw error;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
import { directoriesByLayer } from '../weakmaps/directoriesByLayer.js';
|
|
2
|
+
import { loadDirectory } from './loadDirectory.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Load and cache decoded archive directories, evicting failed requests.
|
|
6
|
+
*
|
|
7
|
+
* @param {L.Layer} layer Archive layer owning the directory cache.
|
|
8
|
+
* @param {number} offset Directory byte offset.
|
|
9
|
+
* @param {number} length Directory byte length.
|
|
10
|
+
* @param {number} compression PMTiles compression code.
|
|
11
|
+
*
|
|
12
|
+
* @returns {Promise<Object[]>} Decoded directory entries.
|
|
13
|
+
*
|
|
14
|
+
* @throws {*} If loading the cached directory fails.
|
|
15
|
+
*/
|
|
16
|
+
export async function getDirectoryEntries(layer, offset, length, compression) {
|
|
17
|
+
const directories = directoriesByLayer.get(layer);
|
|
18
|
+
const key = `${offset}:${length}`;
|
|
19
|
+
if (!directories.has(key)) {
|
|
20
|
+
if (directories.size >= 32) directories.delete(directories.keys().next().value);
|
|
21
|
+
directories.set(key, loadDirectory(layer, offset, length, compression));
|
|
22
|
+
}
|
|
23
|
+
const pending = directories.get(key);
|
|
24
|
+
try {
|
|
25
|
+
return await pending;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
if (directories.get(key) === pending) directories.delete(key);
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { decompress } from './decompress.js';
|
|
2
|
-
import { read } from './readArchiveRange.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Read and decompress tile data if the requested ID falls within the entry's run.
|
|
6
|
-
*
|
|
7
|
-
* @param {L.Layer} layer Archive layer.
|
|
8
|
-
* @param {Object} header Decoded archive header.
|
|
9
|
-
* @param {Object} entry Directory entry.
|
|
10
|
-
* @param {number} id Requested tile ID.
|
|
11
|
-
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
12
|
-
*
|
|
13
|
-
* @returns {Promise<Object|undefined>} Object containing tile data, or undefined on a miss.
|
|
14
|
-
*
|
|
15
|
-
* @throws {Error} If the tile range extends outside the tile data section.
|
|
16
|
-
*/
|
|
17
|
-
export async function getTileData(layer, header, entry, id, signal) {
|
|
18
|
-
if (id - entry.tileId >= entry.runLength) return;
|
|
19
|
-
if (entry.offset + entry.length > header.tileDataLength) {
|
|
20
|
-
throw /* alloc */ new Error('PMTiles tile outside data section');
|
|
21
|
-
}
|
|
22
|
-
const data = await decompress(await read(layer, header.tileDataOffset + entry.offset, entry.length, signal),
|
|
23
|
-
header.tileCompression);
|
|
24
|
-
signal?.throwIfAborted();
|
|
25
|
-
return /* alloc */ { data };
|
|
26
|
-
}
|
|
1
|
+
import { decompress } from './decompress.js';
|
|
2
|
+
import { read } from './readArchiveRange.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read and decompress tile data if the requested ID falls within the entry's run.
|
|
6
|
+
*
|
|
7
|
+
* @param {L.Layer} layer Archive layer.
|
|
8
|
+
* @param {Object} header Decoded archive header.
|
|
9
|
+
* @param {Object} entry Directory entry.
|
|
10
|
+
* @param {number} id Requested tile ID.
|
|
11
|
+
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
12
|
+
*
|
|
13
|
+
* @returns {Promise<Object|undefined>} Object containing tile data, or undefined on a miss.
|
|
14
|
+
*
|
|
15
|
+
* @throws {Error} If the tile range extends outside the tile data section.
|
|
16
|
+
*/
|
|
17
|
+
export async function getTileData(layer, header, entry, id, signal) {
|
|
18
|
+
if (id - entry.tileId >= entry.runLength) return;
|
|
19
|
+
if (entry.offset + entry.length > header.tileDataLength) {
|
|
20
|
+
throw /* alloc */ new Error('PMTiles tile outside data section');
|
|
21
|
+
}
|
|
22
|
+
const data = await decompress(await read(layer, header.tileDataOffset + entry.offset, entry.length, signal),
|
|
23
|
+
header.tileCompression);
|
|
24
|
+
signal?.throwIfAborted();
|
|
25
|
+
return /* alloc */ { data };
|
|
26
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { etagByLayer } from '../weakmaps/etagByLayer.js';
|
|
2
|
-
import { urlByLayer } from '../weakmaps/urlByLayer.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Read and validate a byte range from a PMTiles archive.
|
|
6
|
-
*
|
|
7
|
-
* @param {L.Layer} layer Archive layer containing the URL and cached ETag.
|
|
8
|
-
* @param {number} offset Starting byte offset.
|
|
9
|
-
* @param {number} length Number of bytes to read.
|
|
10
|
-
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
11
|
-
*
|
|
12
|
-
* @returns {Promise<ArrayBuffer>} Requested archive bytes.
|
|
13
|
-
*
|
|
14
|
-
* @throws {Error} If the requested byte range is invalid.
|
|
15
|
-
* @throws {Error} If the HTTP request fails.
|
|
16
|
-
* @throws {Error} If the archive ETag changes.
|
|
17
|
-
* @throws {Error} If the range response headers or status are invalid.
|
|
18
|
-
* @throws {Error} If the response length differs from the requested range.
|
|
19
|
-
*/
|
|
20
|
-
export async function read(layer, offset, length, signal) {
|
|
21
|
-
signal?.throwIfAborted();
|
|
22
|
-
if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) ||
|
|
23
|
-
offset < 0 || length <= 0 || !Number.isSafeInteger(offset + length)) {
|
|
24
|
-
throw /* alloc */ new Error('Invalid PMTiles byte range');
|
|
25
|
-
}
|
|
26
|
-
const response = await fetch(urlByLayer.get(layer), /* alloc */ {
|
|
27
|
-
headers: /* alloc */ { Range: `bytes=${offset}-${offset + length - 1}` }, signal,
|
|
28
|
-
});
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
throw /* alloc */ new Error(`Unable to read PMTiles: HTTP ${response.status}`);
|
|
31
|
-
}
|
|
32
|
-
const etag = response.headers.get('ETag');
|
|
33
|
-
if (etagByLayer.get(layer) && etag !== etagByLayer.get(layer)) {
|
|
34
|
-
throw /* alloc */ new Error('PMTiles archive changed; recreate the layer');
|
|
35
|
-
}
|
|
36
|
-
if (etag) etagByLayer.set(layer, etag);
|
|
37
|
-
let data = await response.arrayBuffer();
|
|
38
|
-
if (response.status === 200) {
|
|
39
|
-
data = data.slice(offset, offset + length);
|
|
40
|
-
} else if (response.status !== 206 ||
|
|
41
|
-
!response.headers.get('Content-Range')?.startsWith(`bytes ${offset}-${offset + length - 1}/`)) {
|
|
42
|
-
throw /* alloc */ new Error('Invalid PMTiles range response');
|
|
43
|
-
}
|
|
44
|
-
if (data.byteLength !== length) {
|
|
45
|
-
throw /* alloc */ new Error('Truncated PMTiles range');
|
|
46
|
-
}
|
|
47
|
-
return data;
|
|
48
|
-
}
|
|
1
|
+
import { etagByLayer } from '../weakmaps/etagByLayer.js';
|
|
2
|
+
import { urlByLayer } from '../weakmaps/urlByLayer.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read and validate a byte range from a PMTiles archive.
|
|
6
|
+
*
|
|
7
|
+
* @param {L.Layer} layer Archive layer containing the URL and cached ETag.
|
|
8
|
+
* @param {number} offset Starting byte offset.
|
|
9
|
+
* @param {number} length Number of bytes to read.
|
|
10
|
+
* @param {AbortSignal} [signal] Request cancellation signal.
|
|
11
|
+
*
|
|
12
|
+
* @returns {Promise<ArrayBuffer>} Requested archive bytes.
|
|
13
|
+
*
|
|
14
|
+
* @throws {Error} If the requested byte range is invalid.
|
|
15
|
+
* @throws {Error} If the HTTP request fails.
|
|
16
|
+
* @throws {Error} If the archive ETag changes.
|
|
17
|
+
* @throws {Error} If the range response headers or status are invalid.
|
|
18
|
+
* @throws {Error} If the response length differs from the requested range.
|
|
19
|
+
*/
|
|
20
|
+
export async function read(layer, offset, length, signal) {
|
|
21
|
+
signal?.throwIfAborted();
|
|
22
|
+
if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) ||
|
|
23
|
+
offset < 0 || length <= 0 || !Number.isSafeInteger(offset + length)) {
|
|
24
|
+
throw /* alloc */ new Error('Invalid PMTiles byte range');
|
|
25
|
+
}
|
|
26
|
+
const response = await fetch(urlByLayer.get(layer), /* alloc */ {
|
|
27
|
+
headers: /* alloc */ { Range: `bytes=${offset}-${offset + length - 1}` }, signal,
|
|
28
|
+
});
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw /* alloc */ new Error(`Unable to read PMTiles: HTTP ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
const etag = response.headers.get('ETag');
|
|
33
|
+
if (etagByLayer.get(layer) && etag !== etagByLayer.get(layer)) {
|
|
34
|
+
throw /* alloc */ new Error('PMTiles archive changed; recreate the layer');
|
|
35
|
+
}
|
|
36
|
+
if (etag) etagByLayer.set(layer, etag);
|
|
37
|
+
let data = await response.arrayBuffer();
|
|
38
|
+
if (response.status === 200) {
|
|
39
|
+
data = data.slice(offset, offset + length);
|
|
40
|
+
} else if (response.status !== 206 ||
|
|
41
|
+
!response.headers.get('Content-Range')?.startsWith(`bytes ${offset}-${offset + length - 1}/`)) {
|
|
42
|
+
throw /* alloc */ new Error('Invalid PMTiles range response');
|
|
43
|
+
}
|
|
44
|
+
if (data.byteLength !== length) {
|
|
45
|
+
throw /* alloc */ new Error('Truncated PMTiles range');
|
|
46
|
+
}
|
|
47
|
+
return data;
|
|
48
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Normalize dates and validate the observer without calculating a celestial position.
|
|
3
|
-
*
|
|
4
|
-
* @param {Date|string|number} date Observation date.
|
|
5
|
-
* @param {number} lat Observer latitude in degrees.
|
|
6
|
-
* @param {number} lng Observer longitude in degrees.
|
|
7
|
-
*
|
|
8
|
-
* @returns {number} Timestamp in milliseconds since the Unix epoch.
|
|
9
|
-
*
|
|
10
|
-
* @throws {Error} If the date or observer coordinates are invalid.
|
|
11
|
-
*/
|
|
12
|
-
export function solarTime(date, lat, lng) {
|
|
13
|
-
const time = date instanceof Date ? Date.prototype.getTime.call(date)
|
|
14
|
-
: typeof date === 'string' ? Date.parse(date)
|
|
15
|
-
: (/* alloc */ new Date(date)).getTime();
|
|
16
|
-
if (!Number.isFinite(time) || !Number.isFinite(lat) || Math.abs(lat) > 90 ||
|
|
17
|
-
!Number.isFinite(lng) || Math.abs(lng) > 180) {
|
|
18
|
-
throw /* alloc */ new Error('Invalid solar date or location');
|
|
19
|
-
}
|
|
20
|
-
return time;
|
|
21
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Normalize dates and validate the observer without calculating a celestial position.
|
|
3
|
+
*
|
|
4
|
+
* @param {Date|string|number} date Observation date.
|
|
5
|
+
* @param {number} lat Observer latitude in degrees.
|
|
6
|
+
* @param {number} lng Observer longitude in degrees.
|
|
7
|
+
*
|
|
8
|
+
* @returns {number} Timestamp in milliseconds since the Unix epoch.
|
|
9
|
+
*
|
|
10
|
+
* @throws {Error} If the date or observer coordinates are invalid.
|
|
11
|
+
*/
|
|
12
|
+
export function solarTime(date, lat, lng) {
|
|
13
|
+
const time = date instanceof Date ? Date.prototype.getTime.call(date)
|
|
14
|
+
: typeof date === 'string' ? Date.parse(date)
|
|
15
|
+
: (/* alloc */ new Date(date)).getTime();
|
|
16
|
+
if (!Number.isFinite(time) || !Number.isFinite(lat) || Math.abs(lat) > 90 ||
|
|
17
|
+
!Number.isFinite(lng) || Math.abs(lng) > 180) {
|
|
18
|
+
throw /* alloc */ new Error('Invalid solar date or location');
|
|
19
|
+
}
|
|
20
|
+
return time;
|
|
21
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { cameraDraggableByMap } from '../weakmaps/cameraDraggableByMap.js';
|
|
2
|
-
import { adjustCameraDrag } from '../controls/adjustCameraDrag.js';
|
|
3
|
-
|
|
4
|
-
/** Attach the camera drag adjustment once this map's draggable is ready. */
|
|
5
|
-
export function cameraMapReady() {
|
|
6
|
-
const draggable = this.dragging?._draggable;
|
|
7
|
-
if (!draggable) return;
|
|
8
|
-
cameraDraggableByMap.set(this, draggable);
|
|
9
|
-
draggable.on('predrag', adjustCameraDrag, this);
|
|
1
|
+
import { cameraDraggableByMap } from '../weakmaps/cameraDraggableByMap.js';
|
|
2
|
+
import { adjustCameraDrag } from '../controls/adjustCameraDrag.js';
|
|
3
|
+
|
|
4
|
+
/** Attach the camera drag adjustment once this map's draggable is ready. */
|
|
5
|
+
export function cameraMapReady() {
|
|
6
|
+
const draggable = this.dragging?._draggable;
|
|
7
|
+
if (!draggable) return;
|
|
8
|
+
cameraDraggableByMap.set(this, draggable);
|
|
9
|
+
draggable.on('predrag', adjustCameraDrag, this);
|
|
10
10
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { cameraDraggableByMap } from '../weakmaps/cameraDraggableByMap.js';
|
|
2
|
-
import { pitchSkyByMap } from '../weakmaps/pitchSkyByMap.js';
|
|
3
|
-
import { cancelCameraAnimation } from '../animations/cancelCameraAnimation.js';
|
|
4
|
-
import { adjustCameraDrag } from '../controls/adjustCameraDrag.js';
|
|
5
|
-
|
|
6
|
-
/** Cancel this map's camera animation and remove its sky and drag listener. */
|
|
7
|
-
export function cleanupCameraMap() {
|
|
8
|
-
cancelCameraAnimation(this);
|
|
9
|
-
pitchSkyByMap.get(this)?.remove();
|
|
10
|
-
if (cameraDraggableByMap.get(this)) {
|
|
11
|
-
cameraDraggableByMap.get(this).off('predrag', adjustCameraDrag, this);
|
|
12
|
-
cameraDraggableByMap.delete(this);
|
|
13
|
-
}
|
|
1
|
+
import { cameraDraggableByMap } from '../weakmaps/cameraDraggableByMap.js';
|
|
2
|
+
import { pitchSkyByMap } from '../weakmaps/pitchSkyByMap.js';
|
|
3
|
+
import { cancelCameraAnimation } from '../animations/cancelCameraAnimation.js';
|
|
4
|
+
import { adjustCameraDrag } from '../controls/adjustCameraDrag.js';
|
|
5
|
+
|
|
6
|
+
/** Cancel this map's camera animation and remove its sky and drag listener. */
|
|
7
|
+
export function cleanupCameraMap() {
|
|
8
|
+
cancelCameraAnimation(this);
|
|
9
|
+
pitchSkyByMap.get(this)?.remove();
|
|
10
|
+
if (cameraDraggableByMap.get(this)) {
|
|
11
|
+
cameraDraggableByMap.get(this).off('predrag', adjustCameraDrag, this);
|
|
12
|
+
cameraDraggableByMap.delete(this);
|
|
13
|
+
}
|
|
14
14
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Pan this map inside its maximum bounds when bounds are configured. */
|
|
2
|
-
export function constrainCameraToBounds() {
|
|
3
|
-
if (this.options.maxBounds) this._panInsideMaxBounds();
|
|
1
|
+
/** Pan this map inside its maximum bounds when bounds are configured. */
|
|
2
|
+
export function constrainCameraToBounds() {
|
|
3
|
+
if (this.options.maxBounds) this._panInsideMaxBounds();
|
|
4
4
|
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create perspective camera state with identity matrices and default projection parameters.
|
|
3
|
-
*
|
|
4
|
-
* @returns {Object} Camera state; fov is in degrees and near/far are in scene metres.
|
|
5
|
-
*/
|
|
6
|
-
export function createSceneCamera() {
|
|
7
|
-
return /* alloc */ {
|
|
8
|
-
position: /* alloc */ [0, 0, 0],
|
|
9
|
-
up: /* alloc */ [0, 1, 0],
|
|
10
|
-
target: /* alloc */ [0, 0, 0],
|
|
11
|
-
x: /* alloc */ [0, 0, 0],
|
|
12
|
-
y: /* alloc */ [0, 0, 0],
|
|
13
|
-
z: /* alloc */ [0, 0, 0],
|
|
14
|
-
viewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
15
|
-
projectionMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
16
|
-
projectionViewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
17
|
-
viewTransform: /* alloc */ new DOMMatrix(),
|
|
18
|
-
projectionTransform: /* alloc */ new DOMMatrix(),
|
|
19
|
-
projectionViewTransform: /* alloc */ new DOMMatrix(),
|
|
20
|
-
fov: 45,
|
|
21
|
-
aspect: 1,
|
|
22
|
-
near: 0.1,
|
|
23
|
-
far: 10000,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Create perspective camera state with identity matrices and default projection parameters.
|
|
3
|
+
*
|
|
4
|
+
* @returns {Object} Camera state; fov is in degrees and near/far are in scene metres.
|
|
5
|
+
*/
|
|
6
|
+
export function createSceneCamera() {
|
|
7
|
+
return /* alloc */ {
|
|
8
|
+
position: /* alloc */ [0, 0, 0],
|
|
9
|
+
up: /* alloc */ [0, 1, 0],
|
|
10
|
+
target: /* alloc */ [0, 0, 0],
|
|
11
|
+
x: /* alloc */ [0, 0, 0],
|
|
12
|
+
y: /* alloc */ [0, 0, 0],
|
|
13
|
+
z: /* alloc */ [0, 0, 0],
|
|
14
|
+
viewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
15
|
+
projectionMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
16
|
+
projectionViewMatrix: /* alloc */ [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
17
|
+
viewTransform: /* alloc */ new DOMMatrix(),
|
|
18
|
+
projectionTransform: /* alloc */ new DOMMatrix(),
|
|
19
|
+
projectionViewTransform: /* alloc */ new DOMMatrix(),
|
|
20
|
+
fov: 45,
|
|
21
|
+
aspect: 1,
|
|
22
|
+
near: 0.1,
|
|
23
|
+
far: 10000,
|
|
24
|
+
};
|
|
25
|
+
}
|
package/src/camera/getBearing.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { mapGetBearing } from './mapGetBearing.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Get this map's camera bearing.
|
|
5
|
-
*
|
|
6
|
-
* @returns {number} Bearing in degrees.
|
|
7
|
-
*/
|
|
8
|
-
export function getBearing() {
|
|
9
|
-
return mapGetBearing(this);
|
|
10
|
-
}
|
|
1
|
+
import { mapGetBearing } from './mapGetBearing.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get this map's camera bearing.
|
|
5
|
+
*
|
|
6
|
+
* @returns {number} Bearing in degrees.
|
|
7
|
+
*/
|
|
8
|
+
export function getBearing() {
|
|
9
|
+
return mapGetBearing(this);
|
|
10
|
+
}
|
package/src/camera/getPitch.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { mapGetPitch } from './mapGetPitch.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Get this map's camera pitch.
|
|
5
|
-
*
|
|
6
|
-
* @returns {number} Pitch in degrees.
|
|
7
|
-
*/
|
|
8
|
-
export function getPitch() {
|
|
9
|
-
return mapGetPitch(this);
|
|
10
|
-
}
|
|
1
|
+
import { mapGetPitch } from './mapGetPitch.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get this map's camera pitch.
|
|
5
|
+
*
|
|
6
|
+
* @returns {number} Pitch in degrees.
|
|
7
|
+
*/
|
|
8
|
+
export function getPitch() {
|
|
9
|
+
return mapGetPitch(this);
|
|
10
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
-
import { mapGetPitch } from './mapGetPitch.js';
|
|
3
|
-
import { mapGetBearing } from './mapGetBearing.js';
|
|
4
|
-
import { fitCameraBounds } from './fitCameraBounds.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Compute a bounds center and zoom using the camera-aware fit when needed.
|
|
8
|
-
*
|
|
9
|
-
* @param {L.LatLngBounds|Array} bounds Geographic bounds.
|
|
10
|
-
* @param {Object} options Fit options.
|
|
11
|
-
*
|
|
12
|
-
* @returns {Object} Fitted center and zoom.
|
|
13
|
-
*/
|
|
1
|
+
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
+
import { mapGetPitch } from './mapGetPitch.js';
|
|
3
|
+
import { mapGetBearing } from './mapGetBearing.js';
|
|
4
|
+
import { fitCameraBounds } from './fitCameraBounds.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Compute a bounds center and zoom using the camera-aware fit when needed.
|
|
8
|
+
*
|
|
9
|
+
* @param {L.LatLngBounds|Array} bounds Geographic bounds.
|
|
10
|
+
* @param {Object} options Fit options.
|
|
11
|
+
*
|
|
12
|
+
* @returns {Object} Fitted center and zoom.
|
|
13
|
+
*/
|
|
14
14
|
export function mapGetBoundsCenterZoom(bounds, options) {
|
|
15
|
-
return mapGetPitch(this) || mapGetBearing(this) ? fitCameraBounds(this, bounds, options) :
|
|
15
|
+
return mapGetPitch(this) || mapGetBearing(this) ? fitCameraBounds(this, bounds, options) :
|
|
16
16
|
mapMethods.value._getBoundsCenterZoom.call(this, bounds, options);
|
|
17
17
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
-
import { mapGetPitch } from './mapGetPitch.js';
|
|
3
|
-
import { mapGetBearing } from './mapGetBearing.js';
|
|
4
|
-
import { project } from '../projections/projectCameraPoint.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Limit a screen pan offset to geographic bounds under the camera projection.
|
|
8
|
-
*
|
|
9
|
-
* @param {L.Point} offset Proposed screen offset.
|
|
10
|
-
* @param {L.LatLngBounds} bounds Maximum geographic bounds.
|
|
11
|
-
*
|
|
12
|
-
* @returns {L.Point} Limited screen offset.
|
|
13
|
-
*/
|
|
1
|
+
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
+
import { mapGetPitch } from './mapGetPitch.js';
|
|
3
|
+
import { mapGetBearing } from './mapGetBearing.js';
|
|
4
|
+
import { project } from '../projections/projectCameraPoint.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Limit a screen pan offset to geographic bounds under the camera projection.
|
|
8
|
+
*
|
|
9
|
+
* @param {L.Point} offset Proposed screen offset.
|
|
10
|
+
* @param {L.LatLngBounds} bounds Maximum geographic bounds.
|
|
11
|
+
*
|
|
12
|
+
* @returns {L.Point} Limited screen offset.
|
|
13
|
+
*/
|
|
14
14
|
export function mapLimitOffset(offset, bounds) {
|
|
15
|
-
if (!bounds || !mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value._limitOffset.call(this, offset, bounds);
|
|
16
|
-
const half = this.getSize().divideBy(2), ground = half.subtract(project(this, half.subtract(offset), true));
|
|
17
|
-
const center = this.project(this.getCenter());
|
|
18
|
-
const limited = this.project(this._limitCenter(this.unproject(center.add(ground)), this.getZoom(), bounds));
|
|
15
|
+
if (!bounds || !mapGetPitch(this) && !mapGetBearing(this)) return mapMethods.value._limitOffset.call(this, offset, bounds);
|
|
16
|
+
const half = this.getSize().divideBy(2), ground = half.subtract(project(this, half.subtract(offset), true));
|
|
17
|
+
const center = this.project(this.getCenter());
|
|
18
|
+
const limited = this.project(this._limitCenter(this.unproject(center.add(ground)), this.getZoom(), bounds));
|
|
19
19
|
return half.subtract(project(this, half.subtract(limited.subtract(center))));
|
|
20
20
|
}
|
package/src/camera/mapPanBy.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
-
import { project } from '../projections/projectCameraPoint.js';
|
|
3
|
-
import { pointOf } from '../projections/toPoint.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Convert a screen offset to ground pixels and pan this map.
|
|
7
|
-
*
|
|
8
|
-
* @param {L.Point|Array} offset Screen-space pan offset.
|
|
9
|
-
* @param {Object} options Leaflet pan options.
|
|
10
|
-
*
|
|
11
|
-
* @returns {L.Map} This map.
|
|
12
|
-
*/
|
|
1
|
+
import { mapMethods } from '../globals/mapMethods.js';
|
|
2
|
+
import { project } from '../projections/projectCameraPoint.js';
|
|
3
|
+
import { pointOf } from '../projections/toPoint.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Convert a screen offset to ground pixels and pan this map.
|
|
7
|
+
*
|
|
8
|
+
* @param {L.Point|Array} offset Screen-space pan offset.
|
|
9
|
+
* @param {Object} options Leaflet pan options.
|
|
10
|
+
*
|
|
11
|
+
* @returns {L.Map} This map.
|
|
12
|
+
*/
|
|
13
13
|
export function mapPanBy(offset, options) {
|
|
14
|
-
const half = this.getSize().divideBy(2);
|
|
15
|
-
const ground = half.subtract(project(this, half.subtract(pointOf(offset)), true));
|
|
14
|
+
const half = this.getSize().divideBy(2);
|
|
15
|
+
const ground = half.subtract(project(this, half.subtract(pointOf(offset)), true));
|
|
16
16
|
return mapMethods.value.panBy.call(this, ground, options);
|
|
17
17
|
}
|