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,37 +1,37 @@
|
|
|
1
|
-
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
2
|
-
import { projectVectorPoint } from './projectVectorPoint.js';
|
|
3
|
-
import { vectorStyleValue } from './vectorStyleValue.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Construct a projected vector label candidate with evaluated style properties.
|
|
7
|
-
*
|
|
8
|
-
* @param {Object} job Vector tile preparation job.
|
|
9
|
-
* @param {Object} layer Decoded source layer.
|
|
10
|
-
* @param {Object} entry Style layer entry.
|
|
11
|
-
* @param {Object} properties Feature properties.
|
|
12
|
-
* @param {number} order Style layer order.
|
|
13
|
-
* @param {string} text Label text.
|
|
14
|
-
* @param {Object} icon Sprite icon.
|
|
15
|
-
* @param {Object} anchor Label anchor and optional line endpoints.
|
|
16
|
-
* @param {number} size Text size.
|
|
17
|
-
*
|
|
18
|
-
* @returns {Object} Label candidate.
|
|
19
|
-
*/
|
|
20
|
-
export function createVectorLabel(job, layer, entry, properties, order, text, icon, anchor, size) {
|
|
21
|
-
return /* alloc */ {
|
|
22
|
-
text, latlng: projectVectorPoint(anchor.point, job.coords, layer.extent),
|
|
23
|
-
order, entry, properties, size, pixelBase: anchor.length * 256 / layer.extent / 2 ** job.coords.z,
|
|
24
|
-
along: anchor.a ? /* alloc */ [
|
|
25
|
-
projectVectorPoint(anchor.a, job.coords, layer.extent),
|
|
26
|
-
projectVectorPoint(anchor.b, job.coords, layer.extent),
|
|
27
|
-
] : null,
|
|
28
|
-
icon: text.trim() ? null : icon,
|
|
29
|
-
iconOffset: evaluateStyle(entry.layout?.['icon-offset'], properties, job.zoom) || /* alloc */ [0, 0],
|
|
30
|
-
allowOverlap: entry.layout?.['icon-allow-overlap'] === true,
|
|
31
|
-
color: vectorStyleValue(entry.paint, 'text-color', '#000', properties, job.zoom),
|
|
32
|
-
halo: vectorStyleValue(entry.paint, 'text-halo-color', '#fff', properties, job.zoom),
|
|
33
|
-
haloWidth: vectorStyleValue(entry.paint, 'text-halo-width', 0, properties, job.zoom),
|
|
34
|
-
priority: /* alloc */ ['place_labels', 'place'].includes(entry['source-layer']) ? 0
|
|
35
|
-
: /* alloc */ ['street_labels', 'transportation_name'].includes(entry['source-layer']) ? 1 : 2,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
1
|
+
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
2
|
+
import { projectVectorPoint } from './projectVectorPoint.js';
|
|
3
|
+
import { vectorStyleValue } from './vectorStyleValue.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Construct a projected vector label candidate with evaluated style properties.
|
|
7
|
+
*
|
|
8
|
+
* @param {Object} job Vector tile preparation job.
|
|
9
|
+
* @param {Object} layer Decoded source layer.
|
|
10
|
+
* @param {Object} entry Style layer entry.
|
|
11
|
+
* @param {Object} properties Feature properties.
|
|
12
|
+
* @param {number} order Style layer order.
|
|
13
|
+
* @param {string} text Label text.
|
|
14
|
+
* @param {Object} icon Sprite icon.
|
|
15
|
+
* @param {Object} anchor Label anchor and optional line endpoints.
|
|
16
|
+
* @param {number} size Text size.
|
|
17
|
+
*
|
|
18
|
+
* @returns {Object} Label candidate.
|
|
19
|
+
*/
|
|
20
|
+
export function createVectorLabel(job, layer, entry, properties, order, text, icon, anchor, size) {
|
|
21
|
+
return /* alloc */ {
|
|
22
|
+
text, latlng: projectVectorPoint(anchor.point, job.coords, layer.extent),
|
|
23
|
+
order, entry, properties, size, pixelBase: anchor.length * 256 / layer.extent / 2 ** job.coords.z,
|
|
24
|
+
along: anchor.a ? /* alloc */ [
|
|
25
|
+
projectVectorPoint(anchor.a, job.coords, layer.extent),
|
|
26
|
+
projectVectorPoint(anchor.b, job.coords, layer.extent),
|
|
27
|
+
] : null,
|
|
28
|
+
icon: text.trim() ? null : icon,
|
|
29
|
+
iconOffset: evaluateStyle(entry.layout?.['icon-offset'], properties, job.zoom) || /* alloc */ [0, 0],
|
|
30
|
+
allowOverlap: entry.layout?.['icon-allow-overlap'] === true,
|
|
31
|
+
color: vectorStyleValue(entry.paint, 'text-color', '#000', properties, job.zoom),
|
|
32
|
+
halo: vectorStyleValue(entry.paint, 'text-halo-color', '#fff', properties, job.zoom),
|
|
33
|
+
haloWidth: vectorStyleValue(entry.paint, 'text-halo-width', 0, properties, job.zoom),
|
|
34
|
+
priority: /* alloc */ ['place_labels', 'place'].includes(entry['source-layer']) ? 0
|
|
35
|
+
: /* alloc */ ['street_labels', 'transportation_name'].includes(entry['source-layer']) ? 1 : 2,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { reportError } from '../scene/reportLayerError.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Report a rendered vector batch error on its owning layer.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} event Error event.
|
|
7
|
-
*/
|
|
8
|
-
export function forwardVectorTileError({ error }) {
|
|
9
|
-
reportError(this, error);
|
|
10
|
-
}
|
|
1
|
+
import { reportError } from '../scene/reportLayerError.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Report a rendered vector batch error on its owning layer.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} event Error event.
|
|
7
|
+
*/
|
|
8
|
+
export function forwardVectorTileError({ error }) {
|
|
9
|
+
reportError(this, error);
|
|
10
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Load the sprite index and derive the corresponding image URL.
|
|
3
|
-
*
|
|
4
|
-
* @param {string} url Sprite URL without extension.
|
|
5
|
-
*
|
|
6
|
-
* @returns {Promise<Object>} Sprite image URL and index.
|
|
7
|
-
*
|
|
8
|
-
* @throws {Error} If the sprite index request returns an unsuccessful status.
|
|
9
|
-
*/
|
|
10
|
-
export async function loadVectorSprite(url) {
|
|
11
|
-
const response = await fetch(`${url}.json`);
|
|
12
|
-
if (!response.ok) throw /* alloc */ new Error(`Sprite ${url}.json: HTTP ${response.status}`);
|
|
13
|
-
return /* alloc */ { url: `${url}.png`, index: await response.json() };
|
|
14
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Load the sprite index and derive the corresponding image URL.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} url Sprite URL without extension.
|
|
5
|
+
*
|
|
6
|
+
* @returns {Promise<Object>} Sprite image URL and index.
|
|
7
|
+
*
|
|
8
|
+
* @throws {Error} If the sprite index request returns an unsuccessful status.
|
|
9
|
+
*/
|
|
10
|
+
export async function loadVectorSprite(url) {
|
|
11
|
+
const response = await fetch(`${url}.json`);
|
|
12
|
+
if (!response.ok) throw /* alloc */ new Error(`Sprite ${url}.json: HTTP ${response.status}`);
|
|
13
|
+
return /* alloc */ { url: `${url}.png`, index: await response.json() };
|
|
14
|
+
}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
import { L } from '../globals/L.js';
|
|
2
|
-
import { vectorTileOptionsByLayer } from '../weakmaps/vectorTileOptionsByLayer.js';
|
|
3
|
-
import { vectorStyleZoom } from './vectorStyleZoom.js';
|
|
4
|
-
import { attachVectorTileBatches } from './attachVectorTileBatches.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Fetch, prepare and attach a vector tile while its session remains current.
|
|
8
|
-
*
|
|
9
|
-
* @param {Object} tile Tile state and abort controller.
|
|
10
|
-
*
|
|
11
|
-
* @returns {Promise<void>} Completion of the load or error reporting.
|
|
12
|
-
*
|
|
13
|
-
* @throws {Error} HTTP errors are caught internally and emitted on the owning layer.
|
|
14
|
-
*/
|
|
15
|
-
export async function loadVectorTile(tile) {
|
|
16
|
-
const { coords, controller } = tile, session = this.session;
|
|
17
|
-
const { url, style, sourceId, maxZoom, maxNativeZoom } = vectorTileOptionsByLayer.get(this);
|
|
18
|
-
const count = 2 ** coords.z, x = ((coords.x % count) + count) % count;
|
|
19
|
-
let group;
|
|
20
|
-
try {
|
|
21
|
-
const tileUrl = L.Util.template(url, /* alloc */ { z: coords.z, x, y: coords.y });
|
|
22
|
-
const response = await fetch(tileUrl, /* alloc */ { signal: controller.signal });
|
|
23
|
-
if (!response.ok) throw /* alloc */ new Error(`Tile ${tile.key}: HTTP ${response.status}`);
|
|
24
|
-
const buffer = await response.arrayBuffer();
|
|
25
|
-
if (controller.signal.aborted) return;
|
|
26
|
-
const id = ++this.sequence, prepared = Promise.withResolvers();
|
|
27
|
-
this.waiting.set(id, prepared);
|
|
28
|
-
this.worker.postMessage(/* alloc */ { type: 'vector', id, buffer, coords, style, source: sourceId, maxZoom,
|
|
29
|
-
zoom: vectorStyleZoom(this), mapZoom: coords.z >= maxNativeZoom ? maxZoom : this._map.getZoom() }, /* alloc */ [buffer]);
|
|
30
|
-
const data = await prepared.promise;
|
|
31
|
-
if (controller.signal.aborted || this.session !== session) return;
|
|
32
|
-
group = /* alloc */ new L.LayerGroup().addTo(this._map);
|
|
33
|
-
tile.rendered = /* alloc */ [];
|
|
34
|
-
if (!await attachVectorTileBatches(this, tile, group, data.batches, session)) { group.remove(); return; }
|
|
35
|
-
tile.group = group; tile.labelCandidates = data.labels;
|
|
36
|
-
this.fire('tileload', /* alloc */ { coords, group });
|
|
37
|
-
this.prune();
|
|
38
|
-
this.refresh();
|
|
39
|
-
} catch (error) {
|
|
40
|
-
group?.remove();
|
|
41
|
-
if (!controller.signal.aborted && this.session === session) this.fire('error', /* alloc */ { error });
|
|
42
|
-
} finally {
|
|
43
|
-
if (this.session === session) { this.inflight--; this.pump(); }
|
|
44
|
-
}
|
|
45
|
-
}
|
|
1
|
+
import { L } from '../globals/L.js';
|
|
2
|
+
import { vectorTileOptionsByLayer } from '../weakmaps/vectorTileOptionsByLayer.js';
|
|
3
|
+
import { vectorStyleZoom } from './vectorStyleZoom.js';
|
|
4
|
+
import { attachVectorTileBatches } from './attachVectorTileBatches.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Fetch, prepare and attach a vector tile while its session remains current.
|
|
8
|
+
*
|
|
9
|
+
* @param {Object} tile Tile state and abort controller.
|
|
10
|
+
*
|
|
11
|
+
* @returns {Promise<void>} Completion of the load or error reporting.
|
|
12
|
+
*
|
|
13
|
+
* @throws {Error} HTTP errors are caught internally and emitted on the owning layer.
|
|
14
|
+
*/
|
|
15
|
+
export async function loadVectorTile(tile) {
|
|
16
|
+
const { coords, controller } = tile, session = this.session;
|
|
17
|
+
const { url, style, sourceId, maxZoom, maxNativeZoom } = vectorTileOptionsByLayer.get(this);
|
|
18
|
+
const count = 2 ** coords.z, x = ((coords.x % count) + count) % count;
|
|
19
|
+
let group;
|
|
20
|
+
try {
|
|
21
|
+
const tileUrl = L.Util.template(url, /* alloc */ { z: coords.z, x, y: coords.y });
|
|
22
|
+
const response = await fetch(tileUrl, /* alloc */ { signal: controller.signal });
|
|
23
|
+
if (!response.ok) throw /* alloc */ new Error(`Tile ${tile.key}: HTTP ${response.status}`);
|
|
24
|
+
const buffer = await response.arrayBuffer();
|
|
25
|
+
if (controller.signal.aborted) return;
|
|
26
|
+
const id = ++this.sequence, prepared = Promise.withResolvers();
|
|
27
|
+
this.waiting.set(id, prepared);
|
|
28
|
+
this.worker.postMessage(/* alloc */ { type: 'vector', id, buffer, coords, style, source: sourceId, maxZoom,
|
|
29
|
+
zoom: vectorStyleZoom(this), mapZoom: coords.z >= maxNativeZoom ? maxZoom : this._map.getZoom() }, /* alloc */ [buffer]);
|
|
30
|
+
const data = await prepared.promise;
|
|
31
|
+
if (controller.signal.aborted || this.session !== session) return;
|
|
32
|
+
group = /* alloc */ new L.LayerGroup().addTo(this._map);
|
|
33
|
+
tile.rendered = /* alloc */ [];
|
|
34
|
+
if (!await attachVectorTileBatches(this, tile, group, data.batches, session)) { group.remove(); return; }
|
|
35
|
+
tile.group = group; tile.labelCandidates = data.labels;
|
|
36
|
+
this.fire('tileload', /* alloc */ { coords, group });
|
|
37
|
+
this.prune();
|
|
38
|
+
this.refresh();
|
|
39
|
+
} catch (error) {
|
|
40
|
+
group?.remove();
|
|
41
|
+
if (!controller.signal.aborted && this.session === session) this.fire('error', /* alloc */ { error });
|
|
42
|
+
} finally {
|
|
43
|
+
if (this.session === session) { this.inflight--; this.pump(); }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { vectorTileOptionsByLayer } from '../weakmaps/vectorTileOptionsByLayer.js';
|
|
2
|
-
import { geometryWorkerUrl } from '../globals/geometryWorkerUrl.js';
|
|
3
|
-
import { vectorTileEvents } from '../globals/vectorTileEvents.js';
|
|
4
|
-
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
5
|
-
import { vectorStyleZoom } from './vectorStyleZoom.js';
|
|
6
|
-
import { refreshVectorTiles } from './refreshVectorTiles.js';
|
|
7
|
-
import { rotateVectorLabels } from './rotateVectorLabels.js';
|
|
8
|
-
import { onVectorTileMessage } from './onVectorTileMessage.js';
|
|
9
|
-
import { onVectorTileWorkerError } from './onVectorTileWorkerError.js';
|
|
10
|
-
import { createGeometryWorker } from '../workers/createGeometryWorker.js';
|
|
11
|
-
import { vectorWorkerByLayer } from '../weakmaps/vectorWorkerByLayer.js';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Initialize vector tile panes, worker and map listeners when the layer is added.
|
|
15
|
-
*
|
|
16
|
-
* @param {Object} map Leaflet map.
|
|
17
|
-
*/
|
|
18
|
-
export function onVectorTileAdd(map) {
|
|
19
|
-
const { style, pane } = vectorTileOptionsByLayer.get(this);
|
|
20
|
-
let index, entry;
|
|
21
|
-
for ([index] of style.entries()) {
|
|
22
|
-
(map.getPane(`${pane}-${index}`) || map.createPane(`${pane}-${index}`)).style.zIndex = 200 + index;
|
|
23
|
-
}
|
|
24
|
-
for (entry of style) {
|
|
25
|
-
if (entry.type !== 'background') continue;
|
|
26
|
-
map.getContainer().style.background = evaluateStyle(entry.paint['background-color'], /* alloc */ {}, vectorStyleZoom(this));
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
this.session = /* alloc */ {};
|
|
30
|
-
this.tiles = /* alloc */ new Map(); this.labels = /* alloc */ new Map(); this.waiting = /* alloc */ new Map();
|
|
31
|
-
this.retiring = /* alloc */ new Set();
|
|
32
|
-
this.inflight = 0; this.sequence = 0;
|
|
33
|
-
this.changedAt = 0; this.paintZoom = null;
|
|
34
|
-
const workerEntry = createGeometryWorker(this.options.workerUrl || geometryWorkerUrl);
|
|
35
|
-
vectorWorkerByLayer.set(this, workerEntry);
|
|
36
|
-
this.worker = workerEntry.worker;
|
|
37
|
-
this.worker.onmessage = onVectorTileMessage.bind(this);
|
|
38
|
-
this.worker.onerror = onVectorTileWorkerError.bind(this);
|
|
39
|
-
this.refresh = refreshVectorTiles.bind(this);
|
|
40
|
-
this.rotateLabels = rotateVectorLabels.bind(this);
|
|
41
|
-
map.on(vectorTileEvents, this.refresh);
|
|
42
|
-
map.on('move rotate pitch', this.rotateLabels);
|
|
43
|
-
this.update();
|
|
44
|
-
}
|
|
1
|
+
import { vectorTileOptionsByLayer } from '../weakmaps/vectorTileOptionsByLayer.js';
|
|
2
|
+
import { geometryWorkerUrl } from '../globals/geometryWorkerUrl.js';
|
|
3
|
+
import { vectorTileEvents } from '../globals/vectorTileEvents.js';
|
|
4
|
+
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
5
|
+
import { vectorStyleZoom } from './vectorStyleZoom.js';
|
|
6
|
+
import { refreshVectorTiles } from './refreshVectorTiles.js';
|
|
7
|
+
import { rotateVectorLabels } from './rotateVectorLabels.js';
|
|
8
|
+
import { onVectorTileMessage } from './onVectorTileMessage.js';
|
|
9
|
+
import { onVectorTileWorkerError } from './onVectorTileWorkerError.js';
|
|
10
|
+
import { createGeometryWorker } from '../workers/createGeometryWorker.js';
|
|
11
|
+
import { vectorWorkerByLayer } from '../weakmaps/vectorWorkerByLayer.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Initialize vector tile panes, worker and map listeners when the layer is added.
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} map Leaflet map.
|
|
17
|
+
*/
|
|
18
|
+
export function onVectorTileAdd(map) {
|
|
19
|
+
const { style, pane } = vectorTileOptionsByLayer.get(this);
|
|
20
|
+
let index, entry;
|
|
21
|
+
for ([index] of style.entries()) {
|
|
22
|
+
(map.getPane(`${pane}-${index}`) || map.createPane(`${pane}-${index}`)).style.zIndex = 200 + index;
|
|
23
|
+
}
|
|
24
|
+
for (entry of style) {
|
|
25
|
+
if (entry.type !== 'background') continue;
|
|
26
|
+
map.getContainer().style.background = evaluateStyle(entry.paint['background-color'], /* alloc */ {}, vectorStyleZoom(this));
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
this.session = /* alloc */ {};
|
|
30
|
+
this.tiles = /* alloc */ new Map(); this.labels = /* alloc */ new Map(); this.waiting = /* alloc */ new Map();
|
|
31
|
+
this.retiring = /* alloc */ new Set();
|
|
32
|
+
this.inflight = 0; this.sequence = 0;
|
|
33
|
+
this.changedAt = 0; this.paintZoom = null;
|
|
34
|
+
const workerEntry = createGeometryWorker(this.options.workerUrl || geometryWorkerUrl);
|
|
35
|
+
vectorWorkerByLayer.set(this, workerEntry);
|
|
36
|
+
this.worker = workerEntry.worker;
|
|
37
|
+
this.worker.onmessage = onVectorTileMessage.bind(this);
|
|
38
|
+
this.worker.onerror = onVectorTileWorkerError.bind(this);
|
|
39
|
+
this.refresh = refreshVectorTiles.bind(this);
|
|
40
|
+
this.rotateLabels = rotateVectorLabels.bind(this);
|
|
41
|
+
map.on(vectorTileEvents, this.refresh);
|
|
42
|
+
map.on('move rotate pitch', this.rotateLabels);
|
|
43
|
+
this.update();
|
|
44
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Resolve or reject the pending vector tile job for a worker response.
|
|
5
|
-
*
|
|
6
|
-
* @param {MessageEvent} event Worker message.
|
|
7
|
-
*/
|
|
8
|
-
export function onVectorTileMessage({ data }) {
|
|
9
|
-
revokeVectorWorkerUrl(this);
|
|
10
|
-
const pending = this.waiting.get(data.id);
|
|
11
|
-
if (!pending) return;
|
|
12
|
-
this.waiting.delete(data.id);
|
|
13
|
-
if (data.error) pending.reject(/* alloc */ new Error(data.error));
|
|
14
|
-
else pending.resolve(data);
|
|
15
|
-
}
|
|
1
|
+
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Resolve or reject the pending vector tile job for a worker response.
|
|
5
|
+
*
|
|
6
|
+
* @param {MessageEvent} event Worker message.
|
|
7
|
+
*/
|
|
8
|
+
export function onVectorTileMessage({ data }) {
|
|
9
|
+
revokeVectorWorkerUrl(this);
|
|
10
|
+
const pending = this.waiting.get(data.id);
|
|
11
|
+
if (!pending) return;
|
|
12
|
+
this.waiting.delete(data.id);
|
|
13
|
+
if (data.error) pending.reject(/* alloc */ new Error(data.error));
|
|
14
|
+
else pending.resolve(data);
|
|
15
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { vectorTileEvents } from '../globals/vectorTileEvents.js';
|
|
2
|
-
import { vectorWorkerByLayer } from '../weakmaps/vectorWorkerByLayer.js';
|
|
3
|
-
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Remove listeners, cancel pending work and dispose rendered vector tiles and labels.
|
|
7
|
-
*
|
|
8
|
-
* @param {Object} map Leaflet map.
|
|
9
|
-
*/
|
|
10
|
-
export function onVectorTileRemove(map) {
|
|
11
|
-
map.off(vectorTileEvents, this.refresh);
|
|
12
|
-
map.off('move rotate pitch', this.rotateLabels);
|
|
13
|
-
clearTimeout(this.timer);
|
|
14
|
-
this.session = null;
|
|
15
|
-
this.worker.terminate();
|
|
16
|
-
revokeVectorWorkerUrl(this);
|
|
17
|
-
vectorWorkerByLayer.delete(this);
|
|
18
|
-
let pending, tile, group, marker;
|
|
19
|
-
for (pending of this.waiting.values()) pending.reject(/* alloc */ new DOMException('Layer removed', 'AbortError'));
|
|
20
|
-
this.waiting.clear();
|
|
21
|
-
for (tile of this.tiles.values()) { tile.controller.abort(); tile.group?.remove(); }
|
|
22
|
-
for (group of this.retiring) group.remove();
|
|
23
|
-
for (marker of this.labels.values()) marker.remove();
|
|
24
|
-
this.tiles.clear(); this.labels.clear(); this.retiring.clear();
|
|
25
|
-
}
|
|
1
|
+
import { vectorTileEvents } from '../globals/vectorTileEvents.js';
|
|
2
|
+
import { vectorWorkerByLayer } from '../weakmaps/vectorWorkerByLayer.js';
|
|
3
|
+
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Remove listeners, cancel pending work and dispose rendered vector tiles and labels.
|
|
7
|
+
*
|
|
8
|
+
* @param {Object} map Leaflet map.
|
|
9
|
+
*/
|
|
10
|
+
export function onVectorTileRemove(map) {
|
|
11
|
+
map.off(vectorTileEvents, this.refresh);
|
|
12
|
+
map.off('move rotate pitch', this.rotateLabels);
|
|
13
|
+
clearTimeout(this.timer);
|
|
14
|
+
this.session = null;
|
|
15
|
+
this.worker.terminate();
|
|
16
|
+
revokeVectorWorkerUrl(this);
|
|
17
|
+
vectorWorkerByLayer.delete(this);
|
|
18
|
+
let pending, tile, group, marker;
|
|
19
|
+
for (pending of this.waiting.values()) pending.reject(/* alloc */ new DOMException('Layer removed', 'AbortError'));
|
|
20
|
+
this.waiting.clear();
|
|
21
|
+
for (tile of this.tiles.values()) { tile.controller.abort(); tile.group?.remove(); }
|
|
22
|
+
for (group of this.retiring) group.remove();
|
|
23
|
+
for (marker of this.labels.values()) marker.remove();
|
|
24
|
+
this.tiles.clear(); this.labels.clear(); this.retiring.clear();
|
|
25
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { reportError } from '../scene/reportLayerError.js';
|
|
2
|
-
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Reject pending vector jobs and report a worker error to the layer.
|
|
6
|
-
*
|
|
7
|
-
* @param {ErrorEvent} event Worker error event.
|
|
8
|
-
*/
|
|
9
|
-
export function onVectorTileWorkerError(event) {
|
|
10
|
-
revokeVectorWorkerUrl(this);
|
|
11
|
-
const error = /* alloc */ new Error(`Worker MVT: ${event.message}`);
|
|
12
|
-
let pending;
|
|
13
|
-
for (pending of this.waiting.values()) pending.reject(error);
|
|
14
|
-
this.waiting.clear();
|
|
15
|
-
reportError(this, error);
|
|
16
|
-
}
|
|
1
|
+
import { reportError } from '../scene/reportLayerError.js';
|
|
2
|
+
import { revokeVectorWorkerUrl } from './revokeVectorWorkerUrl.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Reject pending vector jobs and report a worker error to the layer.
|
|
6
|
+
*
|
|
7
|
+
* @param {ErrorEvent} event Worker error event.
|
|
8
|
+
*/
|
|
9
|
+
export function onVectorTileWorkerError(event) {
|
|
10
|
+
revokeVectorWorkerUrl(this);
|
|
11
|
+
const error = /* alloc */ new Error(`Worker MVT: ${event.message}`);
|
|
12
|
+
let pending;
|
|
13
|
+
for (pending of this.waiting.values()) pending.reject(error);
|
|
14
|
+
this.waiting.clear();
|
|
15
|
+
reportError(this, error);
|
|
16
|
+
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { vectorTilePaint } from './vectorTilePaint.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Update a rendered vector batch's paint at the given zoom.
|
|
5
|
-
*
|
|
6
|
-
* @param {Object} batch Rendered batch and its style entry.
|
|
7
|
-
* @param {number} zoom Style zoom.
|
|
8
|
-
*/
|
|
9
|
-
export function paintVectorTileBatch(batch, zoom) {
|
|
10
|
-
const paint = vectorTilePaint(batch, zoom), { layer } = batch;
|
|
11
|
-
if (batch.kind === 'line') {
|
|
12
|
-
if (paint.dashArray !== layer.options.dashArray) layer.setStyle(paint);
|
|
13
|
-
else layer.setStyle(/* alloc */ { color: paint.color, opacity: paint.opacity, weight: paint.weight });
|
|
14
|
-
} else if (JSON.stringify(paint.fillColor) !== JSON.stringify(layer.options.fillColor) ||
|
|
15
|
-
paint.fillOpacity !== layer.options.fillOpacity) {
|
|
16
|
-
layer.setStyle(/* alloc */ { fillColor: paint.fillColor, fillOpacity: paint.fillOpacity });
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
import { vectorTilePaint } from './vectorTilePaint.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Update a rendered vector batch's paint at the given zoom.
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} batch Rendered batch and its style entry.
|
|
7
|
+
* @param {number} zoom Style zoom.
|
|
8
|
+
*/
|
|
9
|
+
export function paintVectorTileBatch(batch, zoom) {
|
|
10
|
+
const paint = vectorTilePaint(batch, zoom), { layer } = batch;
|
|
11
|
+
if (batch.kind === 'line') {
|
|
12
|
+
if (paint.dashArray !== layer.options.dashArray) layer.setStyle(paint);
|
|
13
|
+
else layer.setStyle(/* alloc */ { color: paint.color, opacity: paint.opacity, weight: paint.weight });
|
|
14
|
+
} else if (JSON.stringify(paint.fillColor) !== JSON.stringify(layer.options.fillColor) ||
|
|
15
|
+
paint.fillOpacity !== layer.options.fillOpacity) {
|
|
16
|
+
layer.setStyle(/* alloc */ { fillColor: paint.fillColor, fillOpacity: paint.fillOpacity });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
2
|
-
import { vectorStyleValue } from './vectorStyleValue.js';
|
|
3
|
-
import { vectorLabelAnchors } from './vectorLabelAnchors.js';
|
|
4
|
-
import { vectorLabelText } from './vectorLabelText.js';
|
|
5
|
-
import { createVectorLabel } from './createVectorLabel.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Add in-tile label candidates for a styled vector feature.
|
|
9
|
-
*
|
|
10
|
-
* @param {Object} job Vector tile preparation job.
|
|
11
|
-
* @param {Object} layer Decoded source layer.
|
|
12
|
-
* @param {Object} entry Style layer entry.
|
|
13
|
-
* @param {Object} feature Decoded feature.
|
|
14
|
-
* @param {number} order Style layer order.
|
|
15
|
-
*/
|
|
16
|
-
export function prepareVectorLabel(job, layer, entry, feature, order) {
|
|
17
|
-
const { properties } = feature, { zoom } = job;
|
|
18
|
-
const text = vectorLabelText(entry, properties, zoom);
|
|
19
|
-
const icon = entry.layout?.['symbol-placement'] === 'line' ? null
|
|
20
|
-
: evaluateStyle(entry.layout?.['icon-image'], properties, zoom);
|
|
21
|
-
if (!text.trim() && typeof icon !== 'string') return;
|
|
22
|
-
const size = vectorStyleValue(entry.layout, 'text-size', 12, properties, zoom), line = feature.type === 2 && text.trim();
|
|
23
|
-
const spacing = layer.extent / 16, anchors = /* alloc */ [];
|
|
24
|
-
let path, anchor;
|
|
25
|
-
for (path of line ? feature.geometry : feature.geometry.slice(0, 1)) {
|
|
26
|
-
if (!path?.length) continue;
|
|
27
|
-
if (!line) anchors.push(/* alloc */ { point: path[Math.floor(path.length / 2)], a: null });
|
|
28
|
-
else for (anchor of vectorLabelAnchors(path, spacing)) anchors.push(anchor);
|
|
29
|
-
}
|
|
30
|
-
for (anchor of anchors) {
|
|
31
|
-
if (anchor.point[0] < 0 || anchor.point[0] >= layer.extent || anchor.point[1] < 0 || anchor.point[1] >= layer.extent) continue;
|
|
32
|
-
job.labels.push(createVectorLabel(job, layer, entry, properties, order, text, icon, anchor, size));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
import { evaluateStyle } from '../vector-style/evaluateStyle.js';
|
|
2
|
+
import { vectorStyleValue } from './vectorStyleValue.js';
|
|
3
|
+
import { vectorLabelAnchors } from './vectorLabelAnchors.js';
|
|
4
|
+
import { vectorLabelText } from './vectorLabelText.js';
|
|
5
|
+
import { createVectorLabel } from './createVectorLabel.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Add in-tile label candidates for a styled vector feature.
|
|
9
|
+
*
|
|
10
|
+
* @param {Object} job Vector tile preparation job.
|
|
11
|
+
* @param {Object} layer Decoded source layer.
|
|
12
|
+
* @param {Object} entry Style layer entry.
|
|
13
|
+
* @param {Object} feature Decoded feature.
|
|
14
|
+
* @param {number} order Style layer order.
|
|
15
|
+
*/
|
|
16
|
+
export function prepareVectorLabel(job, layer, entry, feature, order) {
|
|
17
|
+
const { properties } = feature, { zoom } = job;
|
|
18
|
+
const text = vectorLabelText(entry, properties, zoom);
|
|
19
|
+
const icon = entry.layout?.['symbol-placement'] === 'line' ? null
|
|
20
|
+
: evaluateStyle(entry.layout?.['icon-image'], properties, zoom);
|
|
21
|
+
if (!text.trim() && typeof icon !== 'string') return;
|
|
22
|
+
const size = vectorStyleValue(entry.layout, 'text-size', 12, properties, zoom), line = feature.type === 2 && text.trim();
|
|
23
|
+
const spacing = layer.extent / 16, anchors = /* alloc */ [];
|
|
24
|
+
let path, anchor;
|
|
25
|
+
for (path of line ? feature.geometry : feature.geometry.slice(0, 1)) {
|
|
26
|
+
if (!path?.length) continue;
|
|
27
|
+
if (!line) anchors.push(/* alloc */ { point: path[Math.floor(path.length / 2)], a: null });
|
|
28
|
+
else for (anchor of vectorLabelAnchors(path, spacing)) anchors.push(anchor);
|
|
29
|
+
}
|
|
30
|
+
for (anchor of anchors) {
|
|
31
|
+
if (anchor.point[0] < 0 || anchor.point[0] >= layer.extent || anchor.point[1] < 0 || anchor.point[1] >= layer.extent) continue;
|
|
32
|
+
job.labels.push(createVectorLabel(job, layer, entry, properties, order, text, icon, anchor, size));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { vectorStyleDependencies } from './vectorStyleDependencies.js';
|
|
2
|
-
import { vectorFeatureZoom } from './vectorFeatureZoom.js';
|
|
3
|
-
import { prepareVectorLabel } from './prepareVectorLabel.js';
|
|
4
|
-
import { vectorFeaturePaint } from './vectorFeaturePaint.js';
|
|
5
|
-
import { vectorPaint } from '../vector-style/vectorPaint.js';
|
|
6
|
-
import { appendVectorBatch } from './appendVectorBatch.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Prepare labels or painted geometry batches for a vector style layer.
|
|
10
|
-
*
|
|
11
|
-
* @param {Object} job Vector tile preparation job.
|
|
12
|
-
* @param {Object} layer Decoded source layer.
|
|
13
|
-
* @param {Object} entry Style layer entry.
|
|
14
|
-
* @param {number} order Style layer order.
|
|
15
|
-
*/
|
|
16
|
-
export function prepareVectorStyleLayer(job, layer, entry, order) {
|
|
17
|
-
const batches = /* alloc */ new Map(), dependencies = vectorStyleDependencies(entry);
|
|
18
|
-
const outlineColor = entry.type === 'fill' ? entry.paint?.['fill-outline-color'] : null;
|
|
19
|
-
const outline = outlineColor ? /* alloc */ { ...entry, type: 'line',
|
|
20
|
-
paint: /* alloc */ { 'line-color': outlineColor, 'line-width': 1 } } : null;
|
|
21
|
-
let feature, sampleZoom, paint, batch;
|
|
22
|
-
for (feature of layer.features) {
|
|
23
|
-
sampleZoom = vectorFeatureZoom(entry, feature.properties, job.zoom, job.maxZoom);
|
|
24
|
-
if (sampleZoom < 0) continue;
|
|
25
|
-
if (entry.type === 'symbol') {
|
|
26
|
-
prepareVectorLabel(job, layer, entry, feature, order);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
paint = vectorFeaturePaint(entry, feature, sampleZoom, job.maxZoom);
|
|
30
|
-
if (!paint) continue;
|
|
31
|
-
appendVectorBatch(job, layer, entry, feature, order, batches, dependencies, paint);
|
|
32
|
-
if (outline && feature.type === 3) {
|
|
33
|
-
appendVectorBatch(job, layer, outline, feature, order, batches, dependencies,
|
|
34
|
-
vectorPaint(outline, feature.properties, sampleZoom));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
for (batch of batches.values()) if (batch.paths.length) job.output.push(batch);
|
|
38
|
-
}
|
|
1
|
+
import { vectorStyleDependencies } from './vectorStyleDependencies.js';
|
|
2
|
+
import { vectorFeatureZoom } from './vectorFeatureZoom.js';
|
|
3
|
+
import { prepareVectorLabel } from './prepareVectorLabel.js';
|
|
4
|
+
import { vectorFeaturePaint } from './vectorFeaturePaint.js';
|
|
5
|
+
import { vectorPaint } from '../vector-style/vectorPaint.js';
|
|
6
|
+
import { appendVectorBatch } from './appendVectorBatch.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Prepare labels or painted geometry batches for a vector style layer.
|
|
10
|
+
*
|
|
11
|
+
* @param {Object} job Vector tile preparation job.
|
|
12
|
+
* @param {Object} layer Decoded source layer.
|
|
13
|
+
* @param {Object} entry Style layer entry.
|
|
14
|
+
* @param {number} order Style layer order.
|
|
15
|
+
*/
|
|
16
|
+
export function prepareVectorStyleLayer(job, layer, entry, order) {
|
|
17
|
+
const batches = /* alloc */ new Map(), dependencies = vectorStyleDependencies(entry);
|
|
18
|
+
const outlineColor = entry.type === 'fill' ? entry.paint?.['fill-outline-color'] : null;
|
|
19
|
+
const outline = outlineColor ? /* alloc */ { ...entry, type: 'line',
|
|
20
|
+
paint: /* alloc */ { 'line-color': outlineColor, 'line-width': 1 } } : null;
|
|
21
|
+
let feature, sampleZoom, paint, batch;
|
|
22
|
+
for (feature of layer.features) {
|
|
23
|
+
sampleZoom = vectorFeatureZoom(entry, feature.properties, job.zoom, job.maxZoom);
|
|
24
|
+
if (sampleZoom < 0) continue;
|
|
25
|
+
if (entry.type === 'symbol') {
|
|
26
|
+
prepareVectorLabel(job, layer, entry, feature, order);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
paint = vectorFeaturePaint(entry, feature, sampleZoom, job.maxZoom);
|
|
30
|
+
if (!paint) continue;
|
|
31
|
+
appendVectorBatch(job, layer, entry, feature, order, batches, dependencies, paint);
|
|
32
|
+
if (outline && feature.type === 3) {
|
|
33
|
+
appendVectorBatch(job, layer, outline, feature, order, batches, dependencies,
|
|
34
|
+
vectorPaint(outline, feature.properties, sampleZoom));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
for (batch of batches.values()) if (batch.paths.length) job.output.push(batch);
|
|
38
|
+
}
|