leaflet-city-mapper 0.0.6 → 0.0.7
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 +10 -5
- package/dist/leaflet-city-mapper-src.js +7059 -6566
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +2766 -0
- package/dist/leaflet-city-mapper-worker-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker.js +1 -1
- package/dist/leaflet-city-mapper-worker.js.map +4 -4
- package/dist/leaflet-city-mapper.js +5 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet.js +1 -1
- package/package.json +1 -1
- package/src/camera/setBearing.js +5 -0
- package/src/camera/setPitch.js +5 -0
- package/src/cog/initCog.js +2 -2
- package/src/core/gridlayerGetTiledPixelBounds.js +37 -4
- package/src/core/markerSetPos.js +1 -1
- package/src/core/popupGetEvents.js +1 -1
- package/src/core/popupUpdatePosition.js +8 -8
- package/src/core/tooltipGetEvents.js +1 -1
- package/src/core/tooltipSetPosition.js +2 -2
- package/src/geometry/appendNativeTriangle.js +2 -2
- package/src/geometry/createModelGeometry.js +2 -9
- package/src/geometry/dashedSegment.js +10 -5
- package/src/geometry/disk.js +1 -1
- package/src/geometry/fillNativePolygon.js +20 -0
- package/src/geometry/lineJoin.js +2 -2
- package/src/geometry/markerQuadCorners.js +6 -0
- package/src/geometry/nativeGeometry.js +1 -1
- package/src/geometry/polygon.js +4 -10
- package/src/geometry/segment.js +4 -3
- package/src/globals/colorTexture.js +6 -0
- package/src/globals/depthTexture.js +1 -0
- package/src/globals/drawMeshEntry.js +1 -1
- package/src/globals/meshPipeline.js +1 -0
- package/src/globals/mvtTextDecoder.js +1 -0
- package/src/globals/nativeScalableStyleKeys.js +1 -0
- package/src/globals/scenePass.js +1 -0
- package/src/globals/vectorStyleNamedColors.js +8 -0
- package/src/globals/vectorTileEvents.js +1 -0
- package/src/globals/workerCogSource.js +1 -0
- package/src/gpu/mountRenderer.js +4 -11
- package/src/gpu/releaseRenderer.js +1 -0
- package/src/index.js +6 -12
- package/src/materials/createProgramUniforms.js +1 -0
- package/src/models/loadModel.js +6 -10
- package/src/models/loadModelResources.js +2 -8
- package/src/models/modelNode.js +3 -7
- package/src/models/prepareModel.js +19 -0
- package/src/models/prepareModelGeometry.js +25 -0
- package/src/models/prepareModelPrimitive.js +17 -0
- package/src/mvt/addMvtCrossings.js +17 -0
- package/src/mvt/appendMvtBandTriangles.js +31 -0
- package/src/mvt/appendMvtCoordinates.js +11 -0
- package/src/mvt/appendMvtPolygonTriangles.js +19 -0
- package/src/mvt/beginMvtPath.js +9 -0
- package/src/mvt/closeMvtPath.js +7 -0
- package/src/mvt/collectMvtEdges.js +19 -0
- package/src/mvt/createMvtReader.js +7 -0
- package/src/mvt/decodeVectorTile.js +32 -0
- package/src/mvt/expectMvtWire.js +3 -0
- package/src/mvt/finishMvtPath.js +5 -0
- package/src/mvt/finiteMvtCoordinate.js +7 -0
- package/src/mvt/groupMvtPolygons.js +25 -0
- package/src/mvt/isMvtFallbackError.js +6 -0
- package/src/mvt/mergeMvtActiveEdges.js +9 -0
- package/src/mvt/mvtEdgeX.js +4 -0
- package/src/mvt/mvtPathsVertices.js +8 -0
- package/src/mvt/mvtPolygonPaths.js +12 -0
- package/src/mvt/numericMvtValue.js +4 -0
- package/src/mvt/readMvtFeature.js +34 -0
- package/src/mvt/readMvtField.js +8 -0
- package/src/mvt/readMvtGeometry.js +29 -0
- package/src/mvt/readMvtInteger.js +12 -0
- package/src/mvt/readMvtKnownValue.js +21 -0
- package/src/mvt/readMvtLayer.js +31 -0
- package/src/mvt/readMvtMessage.js +10 -0
- package/src/mvt/readMvtNumber.js +9 -0
- package/src/mvt/readMvtNumbers.js +11 -0
- package/src/mvt/readMvtString.js +6 -0
- package/src/mvt/readMvtValue.js +19 -0
- package/src/mvt/skipMvtField.js +14 -0
- package/src/mvt/sortMvtActiveEdges.js +15 -0
- package/src/mvt/sortedMvtLevels.js +22 -0
- package/src/mvt/takeMvtBytes.js +8 -0
- package/src/mvt/tessellateVectorRings.js +19 -0
- package/src/mvt/triangulateVectorRings.js +19 -0
- package/src/native/beforeNativeRender.js +6 -0
- package/src/native/canScaleNativeStyle.js +17 -0
- package/src/native/createNativeMesh.js +31 -0
- package/src/native/disposeNativeLayer.js +1 -1
- package/src/native/getGridTerrainTile.js +34 -0
- package/src/native/gridTerrainElevation.js +30 -0
- package/src/native/loadGridTerrain.js +26 -0
- package/src/native/nativeLayer.js +2 -2
- package/src/native/nativeLayerMethod.js +5 -14
- package/src/native/nativeProgram.js +20 -0
- package/src/native/nativeVectorGeometry.js +23 -0
- package/src/native/orderNativeGridLayer.js +14 -0
- package/src/native/putNativeMesh.js +15 -21
- package/src/native/refreshNativeEvent.js +13 -2
- package/src/native/refreshNativeLayer.js +1 -0
- package/src/native/syncGridLayer.js +48 -3
- package/src/native/syncNativeStrokeAnchors.js +12 -0
- package/src/native/syncNativeStrokeZoom.js +29 -0
- package/src/native/syncVectorLayer.js +15 -13
- package/src/native/terrainGridMesh.js +34 -0
- package/src/native/updateNativeStrokeRadius.js +9 -0
- package/src/projections/displayContainerPoint.js +23 -3
- package/src/projections/groundBounds.js +2 -2
- package/src/projections/localPixel.js +7 -2
- package/src/projections/localPixelForGeometry.js +4 -2
- package/src/projections/projectCameraPoint.js +6 -5
- package/src/rendering/collectVisibleMesh.js +5 -2
- package/src/rendering/drawSceneMeshes.js +3 -1
- package/src/rendering/nativeStrokeExpansion.js +4 -0
- package/src/rendering/prepareMeshUniforms.js +2 -0
- package/src/rendering/resizeRenderer.js +9 -0
- package/src/scene/initializerFor.js +3 -5
- package/src/scene/layerInitialize.js +14 -12
- package/src/scene/resolveNextInitialization.js +1 -1
- package/src/shaders/materialShaders.js +1 -0
- package/src/shaders/materialVertexShader.js +7 -2
- package/src/shaders/nativeStrokeShader.js +6 -0
- package/src/sources/attachAreaMesh.js +5 -6
- package/src/sources/buildArea.js +4 -5
- package/src/sources/buildAreaFeature.js +3 -19
- package/src/sources/initVectorTiles.js +15 -0
- package/src/sources/isVectorTileSource.js +4 -0
- package/src/sources/readyVectorTiles.js +10 -0
- package/src/sources/sourceAreaContext.js +1 -6
- package/src/sunlight/createSun.js +0 -1
- package/src/terrain/initTerrain.js +7 -1
- package/src/terrain/loadTerrain.js +4 -1
- package/src/terrain/mapElevationOf.js +5 -1
- package/src/terrain/onTerrainAdd.js +11 -1
- package/src/terrain/onTerrainRemove.js +10 -1
- package/src/utils/yieldTask.js +5 -0
- package/src/vector-style/appendQuotedStyleCharacter.js +22 -0
- package/src/vector-style/arrayContainsRange.js +8 -0
- package/src/vector-style/evaluateBoolean.js +18 -0
- package/src/vector-style/evaluateCoalesceOrCase.js +21 -0
- package/src/vector-style/evaluateComparison.js +16 -0
- package/src/vector-style/evaluateIExpression.js +8 -0
- package/src/vector-style/evaluateInput.js +6 -0
- package/src/vector-style/evaluateInterpolate.js +27 -0
- package/src/vector-style/evaluateMatch.js +12 -0
- package/src/vector-style/evaluateMath.js +14 -0
- package/src/vector-style/evaluateMembership.js +18 -0
- package/src/vector-style/evaluateNegation.js +13 -0
- package/src/vector-style/evaluatePrimitive.js +9 -0
- package/src/vector-style/evaluateStep.js +11 -0
- package/src/vector-style/evaluateStyle.js +33 -0
- package/src/vector-style/evaluateToExpression.js +14 -0
- package/src/vector-style/fillVectorPaint.js +17 -0
- package/src/vector-style/lineVectorPaint.js +21 -0
- package/src/vector-style/parseFunctionalColor.js +14 -0
- package/src/vector-style/parseHexColor.js +13 -0
- package/src/vector-style/parseVectorStyle.js +13 -0
- package/src/vector-style/readPaintValue.js +6 -0
- package/src/vector-style/removeTrailingCommas.js +12 -0
- package/src/vector-style/scaleDashArray.js +13 -0
- package/src/vector-style/skipStyleComment.js +9 -0
- package/src/vector-style/stripStyleComments.js +21 -0
- package/src/vector-style/styleColor.js +11 -0
- package/src/vector-style/validateVectorLayers.js +10 -0
- package/src/vector-style/vectorPaint.js +8 -0
- package/src/vector-style/visibleStyle.js +7 -0
- package/src/vector-tiles/appendVectorBatch.js +22 -0
- package/src/vector-tiles/attachVectorTileBatch.js +17 -0
- package/src/vector-tiles/attachVectorTileBatches.js +15 -0
- package/src/vector-tiles/compareVectorLabelPriority.js +3 -0
- package/src/vector-tiles/compareVectorTileDistance.js +3 -0
- package/src/vector-tiles/configureVectorTileLayer.js +28 -0
- package/src/vector-tiles/forwardVectorTileError.js +5 -0
- package/src/vector-tiles/loadVectorSprite.js +5 -0
- package/src/vector-tiles/loadVectorTile.js +36 -0
- package/src/vector-tiles/onVectorTileAdd.js +39 -0
- package/src/vector-tiles/onVectorTileMessage.js +10 -0
- package/src/vector-tiles/onVectorTileRemove.js +20 -0
- package/src/vector-tiles/onVectorTileWorkerError.js +11 -0
- package/src/vector-tiles/paintVectorTileBatch.js +12 -0
- package/src/vector-tiles/prepareVectorLabel.js +43 -0
- package/src/vector-tiles/prepareVectorStyleLayer.js +30 -0
- package/src/vector-tiles/prepareVectorTile.js +16 -0
- package/src/vector-tiles/projectVectorPaths.js +15 -0
- package/src/vector-tiles/projectVectorPoint.js +6 -0
- package/src/vector-tiles/projectVectorTriangles.js +18 -0
- package/src/vector-tiles/pruneVectorTiles.js +11 -0
- package/src/vector-tiles/pumpVectorTiles.js +18 -0
- package/src/vector-tiles/readTileJSON.js +17 -0
- package/src/vector-tiles/readVectorStyle.js +17 -0
- package/src/vector-tiles/refreshVectorTiles.js +5 -0
- package/src/vector-tiles/reserveVectorLabelCells.js +6 -0
- package/src/vector-tiles/retireVectorTileGroup.js +13 -0
- package/src/vector-tiles/revokeVectorWorkerUrl.js +9 -0
- package/src/vector-tiles/rotateVectorLabel.js +12 -0
- package/src/vector-tiles/rotateVectorLabels.js +6 -0
- package/src/vector-tiles/simplifyVectorPath.js +21 -0
- package/src/vector-tiles/updateVectorLabelMarker.js +27 -0
- package/src/vector-tiles/updateVectorTileLabels.js +28 -0
- package/src/vector-tiles/updateVectorTilePaint.js +20 -0
- package/src/vector-tiles/updateVectorTiles.js +29 -0
- package/src/vector-tiles/validateVectorTileZooms.js +6 -0
- package/src/vector-tiles/vectorFeaturePaint.js +15 -0
- package/src/vector-tiles/vectorFeaturePaths.js +16 -0
- package/src/vector-tiles/vectorFeatureZoom.js +8 -0
- package/src/vector-tiles/vectorLabelAnchors.js +24 -0
- package/src/vector-tiles/vectorLabelCandidates.js +11 -0
- package/src/vector-tiles/vectorLabelCells.js +26 -0
- package/src/vector-tiles/vectorLabelIcon.js +30 -0
- package/src/vector-tiles/vectorLabelProperty.js +3 -0
- package/src/vector-tiles/vectorSpriteIcon.js +11 -0
- package/src/vector-tiles/vectorStraightRun.js +14 -0
- package/src/vector-tiles/vectorStyleDependencies.js +15 -0
- package/src/vector-tiles/vectorStyleValue.js +5 -0
- package/src/vector-tiles/vectorStyleZoom.js +6 -0
- package/src/vector-tiles/vectorTileAwaited.js +9 -0
- package/src/vector-tiles/vectorTileOverlaps.js +4 -0
- package/src/vector-tiles/vectorTilePaint.js +10 -0
- package/src/vector-tiles/vectorTileSettings.js +17 -0
- package/src/vector-tiles/vectorTilesIdle.js +3 -0
- package/src/vector-tiles/vectorTolerance.js +4 -0
- package/src/vector-tiles/wrapVectorLabel.js +11 -0
- package/src/weakmaps/nativeProgramsByRenderer.js +1 -0
- package/src/weakmaps/streamTerrainByLayer.js +1 -0
- package/src/weakmaps/streamTerrainByMap.js +1 -0
- package/src/weakmaps/vectorTileOptionsByLayer.js +1 -0
- package/src/weakmaps/vectorWorkerByLayer.js +1 -0
- package/src/weakmaps/workerMapByLayer.js +1 -0
- package/src/workers/buildAreaInWorker.js +3 -27
- package/src/workers/cogWorker.js +21 -0
- package/src/workers/createGeometryWorker.js +1 -0
- package/src/workers/geometryWorker.js +15 -0
- package/src/workers/getCogInWorker.js +7 -0
- package/src/workers/modelWorker.js +10 -0
- package/src/workers/openCogInWorker.js +14 -0
- package/src/workers/runSourceWorker.js +32 -0
- package/src/workers/settleGeometryWorker.js +1 -1
- package/src/workers/vectorTileWorker.js +10 -0
- package/src/geometry/buildExtrudedPolygon.js +0 -10
- package/src/sources/buildAreaPoint.js +0 -7
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { vectorPaint } from '../vector-style/vectorPaint.js';
|
|
2
|
+
import { visibleStyle } from '../vector-style/visibleStyle.js';
|
|
3
|
+
|
|
4
|
+
export function vectorTilePaint(batch, zoom) {
|
|
5
|
+
const paint = vectorPaint(batch.entry, batch.properties, zoom);
|
|
6
|
+
if (!visibleStyle(batch.entry, batch.properties, zoom)) {
|
|
7
|
+
paint.opacity = 0; paint.fillOpacity = 0;
|
|
8
|
+
}
|
|
9
|
+
return paint;
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { readTileJSON } from './readTileJSON.js';
|
|
2
|
+
import { readVectorStyle } from './readVectorStyle.js';
|
|
3
|
+
import { validateVectorTileZooms } from './validateVectorTileZooms.js';
|
|
4
|
+
|
|
5
|
+
export async function vectorTileSettings(options) {
|
|
6
|
+
if (!options || typeof options !== 'object') throw /* alloc */ new TypeError('Vector tiles require source options');
|
|
7
|
+
if (options.tileJSON) options = await readTileJSON(options);
|
|
8
|
+
let { url, style, minNativeZoom = 0, maxNativeZoom = 14, maxZoom = 19 } = options;
|
|
9
|
+
let key;
|
|
10
|
+
if (typeof url === 'string') url = url.replaceAll(/%7B([zxy])%7D/gi, '{$1}');
|
|
11
|
+
for (key of /* alloc */ ['{z}', '{x}', '{y}']) {
|
|
12
|
+
if (typeof url !== 'string' || !url.includes(key)) throw /* alloc */ new Error('Vector tiles require an XYZ URL template');
|
|
13
|
+
}
|
|
14
|
+
validateVectorTileZooms(minNativeZoom, maxNativeZoom, maxZoom);
|
|
15
|
+
style = await readVectorStyle(style);
|
|
16
|
+
return /* alloc */ { ...options, url, style, minNativeZoom, maxNativeZoom, maxZoom };
|
|
17
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Greedy word wrap at 10 ems (MapLibre's default text-max-width), estimating glyph width at 0.52 em. */
|
|
2
|
+
export function wrapVectorLabel(text) {
|
|
3
|
+
const limit = Math.floor(10 / 0.52), lines = /* alloc */ [];
|
|
4
|
+
let line = '', word;
|
|
5
|
+
for (word of text.split(' ')) {
|
|
6
|
+
if (line && Array.from(`${line} ${word}`).length > limit) { lines.push(line); line = word; }
|
|
7
|
+
else line = line ? `${line} ${word}` : word;
|
|
8
|
+
}
|
|
9
|
+
lines.push(line);
|
|
10
|
+
return lines;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const nativeProgramsByRenderer = new WeakMap();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const streamTerrainByLayer = new WeakMap();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const streamTerrainByMap = new WeakMap();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const vectorTileOptionsByLayer = new WeakMap();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const vectorWorkerByLayer = new WeakMap();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const workerMapByLayer = new WeakMap();
|
|
@@ -1,40 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { startGeometryWorker } from './startGeometryWorker.js';
|
|
3
|
-
import { acquireGeometryWorker } from './acquireGeometryWorker.js';
|
|
1
|
+
import { runSourceWorker } from './runSourceWorker.js';
|
|
4
2
|
|
|
5
3
|
export async function buildAreaInWorker(context, signal) {
|
|
6
|
-
const entry = acquireGeometryWorker(context.map || context.backend._map, context.backend.options.workerUrl || geometryWorkerUrl);
|
|
7
|
-
const { worker, pool } = entry;
|
|
8
|
-
const task = /* alloc */ {
|
|
9
|
-
worker, signal,
|
|
10
|
-
input: /* alloc */ { jobs: context.jobs, nightLight: Boolean(context.backend.options.nightLight) },
|
|
11
|
-
};
|
|
12
|
-
entry.task = task;
|
|
13
|
-
let completed = false;
|
|
14
4
|
try {
|
|
15
|
-
const data = await
|
|
5
|
+
const data = await runSourceWorker(context.map || context.backend._map, context.backend.options.workerUrl,
|
|
6
|
+
/* alloc */ { jobs: context.jobs, nightLight: Boolean(context.backend.options.nightLight) }, signal);
|
|
16
7
|
let i;
|
|
17
8
|
for (i = 0; i < data.ranges.length; i++) Object.assign(context.featureFaces[i], data.ranges[i]);
|
|
18
9
|
context.positions = data.positions;
|
|
19
10
|
context.uvs = data.uvs;
|
|
20
11
|
context.lights = data.lights;
|
|
21
12
|
context.preparedGeometry = data;
|
|
22
|
-
completed = true;
|
|
23
13
|
} finally {
|
|
24
|
-
worker.removeEventListener('message', task.onEvent);
|
|
25
|
-
worker.removeEventListener('error', task.onEvent);
|
|
26
|
-
worker.removeEventListener('messageerror', task.onEvent);
|
|
27
|
-
signal.removeEventListener('abort', task.onEvent);
|
|
28
|
-
entry.task = null;
|
|
29
|
-
if (completed && pool && !pool.closed && !signal.aborted) pool.idle.push(entry);
|
|
30
|
-
else {
|
|
31
|
-
if (!entry.closed) worker.terminate();
|
|
32
|
-
if (pool) pool.entries.delete(entry);
|
|
33
|
-
}
|
|
34
|
-
if (entry.blobUrl) {
|
|
35
|
-
URL.revokeObjectURL(entry.blobUrl);
|
|
36
|
-
entry.blobUrl = null;
|
|
37
|
-
}
|
|
38
14
|
context.jobs = null;
|
|
39
15
|
}
|
|
40
16
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { openCog } from '../cog/openCog.js';
|
|
2
|
+
import { workerCogSource } from '../globals/workerCogSource.js';
|
|
3
|
+
|
|
4
|
+
export async function onCogMessage({ data }) {
|
|
5
|
+
try {
|
|
6
|
+
const key = JSON.stringify(/* alloc */ [data.url, data.asset]);
|
|
7
|
+
// ponytail: one cached COG per worker; use a bounded per-source cache if interleaved archives cause churn.
|
|
8
|
+
if (workerCogSource.key !== key) {
|
|
9
|
+
workerCogSource.key = key;
|
|
10
|
+
workerCogSource.archive = openCog(data.url, data.asset);
|
|
11
|
+
}
|
|
12
|
+
const archive = await workerCogSource.archive;
|
|
13
|
+
const result = data.z === undefined ? await archive.getHeader() : await archive.getZxy(data.z, data.x, data.y);
|
|
14
|
+
const transfers = /* alloc */ [];
|
|
15
|
+
if (result?.data) transfers.push(result.data);
|
|
16
|
+
if (result?.image) transfers.push(result.image);
|
|
17
|
+
self.postMessage(result, transfers);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
self.postMessage(/* alloc */ { error: /* alloc */ { name: error.name, message: error.message } });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export function createGeometryWorker(url, pool) {
|
|
2
|
+
if (typeof Worker === 'undefined') throw /* alloc */ new Error('Web Workers are required to prepare source geometry');
|
|
2
3
|
let workerUrl = url, blobUrl, worker;
|
|
3
4
|
if (globalThis.location) {
|
|
4
5
|
const resolved = /* alloc */ new URL(url, location.href);
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { assembleAreaGeometry } from '../geometry/assembleAreaGeometry.js';
|
|
2
|
+
import { onVectorTileMessage } from './vectorTileWorker.js';
|
|
3
|
+
import { onCogMessage } from './cogWorker.js';
|
|
4
|
+
import { onModelMessage } from './modelWorker.js';
|
|
2
5
|
|
|
3
6
|
export function onGeometryMessage(event) {
|
|
7
|
+
if (event.data.type === 'model') {
|
|
8
|
+
onModelMessage(event);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (event.data.type === 'cog') {
|
|
12
|
+
onCogMessage(event);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (event.data.type === 'vector') {
|
|
16
|
+
onVectorTileMessage(event);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
4
19
|
try {
|
|
5
20
|
const data = assembleAreaGeometry(event.data);
|
|
6
21
|
const transfers = /* alloc */ [data.positions.buffer, data.normals.buffer, data.colors.buffer, data.uvs.buffer];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { workerMapByLayer } from '../weakmaps/workerMapByLayer.js';
|
|
2
|
+
import { runSourceWorker } from './runSourceWorker.js';
|
|
3
|
+
|
|
4
|
+
export function getCogInWorker(context, z, x, y, signal) {
|
|
5
|
+
return runSourceWorker(context.layer._map || workerMapByLayer.get(context.layer), context.workerUrl,
|
|
6
|
+
/* alloc */ { type: 'cog', url: context.url, asset: context.asset, z, x, y }, signal);
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { prepareModel } from '../models/prepareModel.js';
|
|
2
|
+
|
|
3
|
+
export async function onModelMessage({ data }) {
|
|
4
|
+
try {
|
|
5
|
+
const result = await prepareModel(data.url);
|
|
6
|
+
self.postMessage(/* alloc */ { description: result.description, images: result.images }, result.transfers);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
self.postMessage(/* alloc */ { error: /* alloc */ { name: error.name, message: error.message } });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getCogHeader } from '../cog/getCogHeader.js';
|
|
2
|
+
import { getCogInWorker } from './getCogInWorker.js';
|
|
3
|
+
|
|
4
|
+
export async function openCogInWorker(layer, options) {
|
|
5
|
+
const context = /* alloc */ {
|
|
6
|
+
layer, url: /* alloc */ new URL(options.url, document.baseURI).href,
|
|
7
|
+
asset: options.asset, workerUrl: options.workerUrl,
|
|
8
|
+
};
|
|
9
|
+
const header = await getCogInWorker(context);
|
|
10
|
+
return /* alloc */ {
|
|
11
|
+
getHeader: getCogHeader.bind(null, /* alloc */ { header }),
|
|
12
|
+
getZxy: getCogInWorker.bind(null, context),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { geometryWorkerUrl } from '../globals/geometryWorkerUrl.js';
|
|
2
|
+
import { startGeometryWorker } from './startGeometryWorker.js';
|
|
3
|
+
import { acquireGeometryWorker } from './acquireGeometryWorker.js';
|
|
4
|
+
|
|
5
|
+
export async function runSourceWorker(map, url, input, signal = /* alloc */ new AbortController().signal) {
|
|
6
|
+
signal.throwIfAborted();
|
|
7
|
+
const entry = acquireGeometryWorker(map, url || geometryWorkerUrl);
|
|
8
|
+
const { worker, pool } = entry;
|
|
9
|
+
const task = /* alloc */ { worker, signal, input };
|
|
10
|
+
entry.task = task;
|
|
11
|
+
let completed = false;
|
|
12
|
+
try {
|
|
13
|
+
const data = await /* alloc */ new Promise(startGeometryWorker.bind(null, task));
|
|
14
|
+
completed = true;
|
|
15
|
+
return data;
|
|
16
|
+
} finally {
|
|
17
|
+
worker.removeEventListener('message', task.onEvent);
|
|
18
|
+
worker.removeEventListener('error', task.onEvent);
|
|
19
|
+
worker.removeEventListener('messageerror', task.onEvent);
|
|
20
|
+
signal.removeEventListener('abort', task.onEvent);
|
|
21
|
+
entry.task = null;
|
|
22
|
+
if (completed && pool && !pool.closed && !signal.aborted) pool.idle.push(entry);
|
|
23
|
+
else {
|
|
24
|
+
if (!entry.closed) worker.terminate();
|
|
25
|
+
if (pool) pool.entries.delete(entry);
|
|
26
|
+
}
|
|
27
|
+
if (entry.blobUrl) {
|
|
28
|
+
URL.revokeObjectURL(entry.blobUrl);
|
|
29
|
+
entry.blobUrl = null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -2,7 +2,7 @@ export function settleGeometryWorker(task, event) {
|
|
|
2
2
|
if (event.type === 'abort') task.reject(task.signal.reason);
|
|
3
3
|
else if (event.type === 'error') task.reject(/* alloc */ new Error(`Geometry worker failed: ${event.message}`));
|
|
4
4
|
else if (event.type === 'messageerror') task.reject(/* alloc */ new Error('Unable to receive geometry worker buffers'));
|
|
5
|
-
else if (event.data
|
|
5
|
+
else if (event.data?.error) {
|
|
6
6
|
const error = /* alloc */ new Error(event.data.error.message);
|
|
7
7
|
error.name = event.data.error.name;
|
|
8
8
|
task.reject(error);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { prepareVectorTile } from '../vector-tiles/prepareVectorTile.js';
|
|
2
|
+
|
|
3
|
+
export function onVectorTileMessage({ data }) {
|
|
4
|
+
try {
|
|
5
|
+
const result = prepareVectorTile(data.buffer, data.coords, data.style, data.zoom, data.source, data.maxZoom, data.mapZoom);
|
|
6
|
+
self.postMessage(/* alloc */ { id: data.id, ...result });
|
|
7
|
+
} catch (error) {
|
|
8
|
+
self.postMessage(/* alloc */ { id: data.id, error: error.message });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { projectRing } from '../projections/projectRing.js';
|
|
2
|
-
import { buildProjectedPolygon } from './buildProjectedPolygon.js';
|
|
3
|
-
|
|
4
|
-
export function buildAreaPolygon(context, rings, top, bottom, baseColor) {
|
|
5
|
-
if (!rings.length) throw /* alloc */ new Error('Empty GeoJSON polygon');
|
|
6
|
-
const paths = /* alloc */ [];
|
|
7
|
-
let ring;
|
|
8
|
-
for (ring of rings) paths.push(projectRing(context, ring));
|
|
9
|
-
buildProjectedPolygon(context, paths, top, bottom, baseColor);
|
|
10
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { projectedTree } from '../projections/projectTreePoint.js';
|
|
2
|
-
import { buildProjectedPoint } from '../geometry/buildProjectedPoint.js';
|
|
3
|
-
|
|
4
|
-
export function buildAreaPoint(context, feature, lon, lat, style, baseColor) {
|
|
5
|
-
const projected = projectedTree(context, lon, lat);
|
|
6
|
-
buildProjectedPoint(context, projected, style, baseColor, feature.properties?.cod_ouvrag || `${lon},${lat}`);
|
|
7
|
-
}
|