leaflet-city-mapper 0.0.7 → 0.0.9
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 +2 -2
- package/cucumber.mjs +1 -3
- package/dist/leaflet-city-mapper-src.js +403 -201
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +69 -59
- package/dist/leaflet-city-mapper-worker-src.js.map +3 -3
- 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 -5
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +44 -27
- package/libs/leaflet.js +4 -4
- package/libs/openlayers-bindings.js +2 -1
- package/libs/openlayers-bindings.min.js +1 -1
- package/libs/openlayers-bindings.min.js.map +3 -3
- package/package.json +5 -3
- package/src/camera/mapCamera.js +7 -7
- package/src/camera/mapTryAnimatedPan.js +4 -4
- package/src/camera/updateMapCamera.js +8 -6
- package/src/controls/cameraControls.js +27 -22
- package/src/core/cameraCircleBounds.js +2 -1
- package/src/core/closestCameraLayerPoint.js +2 -1
- package/src/core/constructLayer.js +9 -0
- package/src/core/extendLeafletClass.js +5 -0
- package/src/core/extendTerrainPixelBounds.js +31 -0
- package/src/core/gridlayerGetTiledPixelBounds.js +2 -27
- package/src/core/layerAddInitHook.js +7 -0
- package/src/core/layerCallInitHooks.js +13 -13
- package/src/core/layerMergeOptions.js +7 -0
- package/src/core/projectNativePath.js +23 -0
- package/src/geometry/circleGeometry.js +4 -3
- package/src/globals/layerControlAddItem.js +3 -0
- package/src/globals/leafletLayer.js +3 -0
- package/src/globals/workerCogSource.js +1 -1
- package/src/gpu/initializeRendererResources.js +10 -12
- package/src/index.js +26 -11
- package/src/layer-controls/layerControlInputId.js +11 -0
- package/src/layer-controls/placeEntry.js +2 -0
- package/src/materials/createProgram.js +7 -6
- package/src/native/gridTerrainElevation.js +7 -11
- package/src/native/nativeTerrainElevation.js +16 -0
- package/src/native/prepareGridTerrainRequests.js +16 -0
- package/src/native/retainGridTerrain.js +10 -0
- package/src/native/syncGridLayer.js +12 -59
- package/src/native/syncGridTile.js +18 -0
- package/src/native/syncTerrainGridTile.js +28 -0
- package/src/rendering/drawGeometry.js +11 -11
- package/src/rendering/resizeRenderer.js +16 -15
- package/src/scene/initializerFor.js +2 -1
- package/src/scene/layerInitialize.js +1 -1
- package/src/shadows/drawShadowMeshes.js +6 -5
- package/src/sources/pumpSourceAreas.js +1 -1
- package/src/sunlight/initSunlight.js +19 -8
- package/src/textures/nativeTextureFor.js +2 -3
- package/src/textures/uploadCanvasTexture.js +11 -2
- package/src/vector-tiles/createVectorLabel.js +22 -0
- package/src/vector-tiles/prepareVectorLabel.js +17 -35
- package/src/vector-tiles/updateVectorLabelStyle.js +8 -0
- package/src/vector-tiles/vectorLabelCells.js +2 -5
- package/src/vector-tiles/vectorLabelIcon.js +1 -1
- package/src/vector-tiles/vectorLabelText.js +10 -0
- package/src/walk/initWalk.js +19 -6
- package/src/weakmaps/pathProjectionByMap.js +1 -0
- package/src/workers/cogWorker.js +4 -5
- package/src/globals/layerCallInitHooks.js +0 -1
|
@@ -1269,6 +1269,19 @@
|
|
|
1269
1269
|
}
|
|
1270
1270
|
});
|
|
1271
1271
|
|
|
1272
|
+
// src/core/extendLeafletClass.js
|
|
1273
|
+
function extendLeafletClass(parent) {
|
|
1274
|
+
return L.version.startsWith("2.") ? parent : parent.extend(
|
|
1275
|
+
/* alloc */
|
|
1276
|
+
{}
|
|
1277
|
+
);
|
|
1278
|
+
}
|
|
1279
|
+
var init_extendLeafletClass = __esm({
|
|
1280
|
+
"src/core/extendLeafletClass.js"() {
|
|
1281
|
+
init_L();
|
|
1282
|
+
}
|
|
1283
|
+
});
|
|
1284
|
+
|
|
1272
1285
|
// src/controls/cameraControls.js
|
|
1273
1286
|
var cameraControls_exports = {};
|
|
1274
1287
|
__export(cameraControls_exports, {
|
|
@@ -1309,6 +1322,7 @@
|
|
|
1309
1322
|
}
|
|
1310
1323
|
map.once("unload", cleanupCameraTouch, map);
|
|
1311
1324
|
}
|
|
1325
|
+
var CompassHandler, ContainerResizeHandler, PitchDragHandler, ShiftRotateHandler, TouchModeHandler, RotateControl;
|
|
1312
1326
|
var init_cameraControls = __esm({
|
|
1313
1327
|
"src/controls/cameraControls.js"() {
|
|
1314
1328
|
init_cameraTouchStateByMap();
|
|
@@ -1345,31 +1359,44 @@
|
|
|
1345
1359
|
init_cleanupCameraTouch();
|
|
1346
1360
|
init_endAllCameraTouches();
|
|
1347
1361
|
init_addCameraHandler();
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
});
|
|
1352
|
-
|
|
1362
|
+
init_extendLeafletClass();
|
|
1363
|
+
CompassHandler = class extends extendLeafletClass(L.Handler) {
|
|
1364
|
+
};
|
|
1365
|
+
Object.assign(CompassHandler.prototype, { addHooks: compassAddHooks, removeHooks: compassRemoveHooks });
|
|
1366
|
+
Compass.value = CompassHandler;
|
|
1367
|
+
ContainerResizeHandler = class extends extendLeafletClass(L.Handler) {
|
|
1368
|
+
};
|
|
1369
|
+
Object.assign(ContainerResizeHandler.prototype, {
|
|
1353
1370
|
addHooks: containerResizeAddHooks,
|
|
1354
1371
|
removeHooks: containerResizeRemoveHooks
|
|
1355
1372
|
});
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
});
|
|
1360
|
-
|
|
1373
|
+
ContainerResize.value = ContainerResizeHandler;
|
|
1374
|
+
PitchDragHandler = class extends extendLeafletClass(L.Handler) {
|
|
1375
|
+
};
|
|
1376
|
+
Object.assign(PitchDragHandler.prototype, { addHooks: pitchDragAddHooks, removeHooks: pitchDragRemoveHooks });
|
|
1377
|
+
PitchDrag.value = PitchDragHandler;
|
|
1378
|
+
ShiftRotateHandler = class extends extendLeafletClass(L.Handler) {
|
|
1379
|
+
};
|
|
1380
|
+
Object.assign(ShiftRotateHandler.prototype, {
|
|
1361
1381
|
addHooks: shiftRotateAddHooks,
|
|
1362
1382
|
removeHooks: shiftRotateRemoveHooks
|
|
1363
1383
|
});
|
|
1364
|
-
|
|
1384
|
+
ShiftRotate.value = ShiftRotateHandler;
|
|
1385
|
+
TouchModeHandler = class extends extendLeafletClass(L.Handler) {
|
|
1386
|
+
};
|
|
1387
|
+
Object.assign(TouchModeHandler.prototype, {
|
|
1365
1388
|
addHooks: notifyCameraTouchChange,
|
|
1366
1389
|
removeHooks: notifyCameraTouchChange
|
|
1367
1390
|
});
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
});
|
|
1391
|
+
TouchMode.value = TouchModeHandler;
|
|
1392
|
+
RotateControl = class extends extendLeafletClass(L.Control) {
|
|
1393
|
+
static defaultOptions = { position: "topleft", closeOnZeroBearing: true, visualizePitch: true };
|
|
1394
|
+
};
|
|
1395
|
+
Object.assign(RotateControl.prototype, { onAdd: rotateOnAdd, onRemove: rotateOnRemove });
|
|
1396
|
+
if (L.version.startsWith("1.")) {
|
|
1397
|
+
RotateControl.prototype.options = Object.assign(Object.create(L.Control.prototype.options), RotateControl.defaultOptions);
|
|
1398
|
+
}
|
|
1399
|
+
L.Control.Rotate = RotateControl;
|
|
1373
1400
|
if (L.control) L.control.rotate = rotateControl;
|
|
1374
1401
|
}
|
|
1375
1402
|
});
|
|
@@ -1380,9 +1407,6 @@
|
|
|
1380
1407
|
// src/globals/layerProto.js
|
|
1381
1408
|
var layerProto = { value: void 0 };
|
|
1382
1409
|
|
|
1383
|
-
// src/globals/layerCallInitHooks.js
|
|
1384
|
-
var layerCallInitHooks = { value: void 0 };
|
|
1385
|
-
|
|
1386
1410
|
// src/globals/removeLayer.js
|
|
1387
1411
|
var removeLayer = { value: void 0 };
|
|
1388
1412
|
|
|
@@ -1628,17 +1652,18 @@
|
|
|
1628
1652
|
|
|
1629
1653
|
// src/rendering/resizeRenderer.js
|
|
1630
1654
|
function resizeRenderer(layer, size) {
|
|
1655
|
+
const renderer = rendererByLayer.get(layer);
|
|
1631
1656
|
if (!sizeByLayer.get(layer) || !sizeByLayer.get(layer).equals(size)) {
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
if (
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1657
|
+
renderer.width = size.x;
|
|
1658
|
+
renderer.height = size.y;
|
|
1659
|
+
renderer.canvas.width = Math.round(size.x * renderer.dpr);
|
|
1660
|
+
renderer.canvas.height = Math.round(size.y * renderer.dpr);
|
|
1661
|
+
renderer.canvas.style.width = `${size.x}px`;
|
|
1662
|
+
renderer.canvas.style.height = `${size.y}px`;
|
|
1663
|
+
if (renderer.depthTexture) destroyTexture(layer, renderer.depthTexture);
|
|
1664
|
+
renderer.colorTexture?.destroy();
|
|
1665
|
+
renderer.colorTexture = renderer.device.createTexture((colorTexture.size[0] = renderer.canvas.width, colorTexture.size[1] = renderer.canvas.height, colorTexture.format = renderer.format, colorTexture.usage = GPUTextureUsage.RENDER_ATTACHMENT, colorTexture));
|
|
1666
|
+
renderer.depthTexture = renderer.device.createTexture((depthTexture.size[0] = renderer.canvas.width, depthTexture.size[1] = renderer.canvas.height, depthTexture.usage = GPUTextureUsage.RENDER_ATTACHMENT, depthTexture));
|
|
1642
1667
|
sizeByLayer.set(layer, size);
|
|
1643
1668
|
}
|
|
1644
1669
|
}
|
|
@@ -1730,6 +1755,21 @@
|
|
|
1730
1755
|
return bridgeElevation(point, bridgesByLayer.get(layer)) ?? terrainElevation(point, terrainTilesByLayer.get(layer));
|
|
1731
1756
|
}
|
|
1732
1757
|
|
|
1758
|
+
// src/native/nativeTerrainElevation.js
|
|
1759
|
+
function nativeTerrainElevation(state, point, x, y, z) {
|
|
1760
|
+
let layer, native, request, elevation;
|
|
1761
|
+
const key = `${x}:${y}:${z}`;
|
|
1762
|
+
for (layer of Object.values(state.map._layers)) {
|
|
1763
|
+
native = nativeGPUByLayer.get(layer);
|
|
1764
|
+
if (native?.disposed || native?.terrainStream !== state) continue;
|
|
1765
|
+
request = native.terrainRequests?.get(key);
|
|
1766
|
+
if (!request?.tiles || layer._tiles[key] !== request.tile) continue;
|
|
1767
|
+
elevation = terrainElevation(point, request.tiles);
|
|
1768
|
+
if (Number.isFinite(elevation)) return elevation;
|
|
1769
|
+
}
|
|
1770
|
+
return null;
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1733
1773
|
// src/native/gridTerrainElevation.js
|
|
1734
1774
|
function gridTerrainElevation(state, location2) {
|
|
1735
1775
|
let z = Math.max(0, Math.min(24, Math.round(state.map.getZoom())));
|
|
@@ -1737,20 +1777,16 @@
|
|
|
1737
1777
|
/* alloc */
|
|
1738
1778
|
/* @__PURE__ */ new Map()
|
|
1739
1779
|
);
|
|
1740
|
-
let point, limit, x, y, dx, dy, tx, ty, entry, elevation
|
|
1780
|
+
let point, limit, x, y, index, dx, dy, tx, ty, entry, elevation;
|
|
1741
1781
|
for (; z >= 0; z--) {
|
|
1742
1782
|
point = state.map.project(location2, z), limit = 2 ** z;
|
|
1743
1783
|
x = Math.floor(point.x / 256), y = Math.floor(point.y / 256);
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
if (native?.disposed || native?.terrainStream !== state) continue;
|
|
1747
|
-
request = native.terrainRequests?.get(`${x}:${y}:${z}`);
|
|
1748
|
-
if (!request?.tiles || layer._tiles[`${x}:${y}:${z}`] !== request.tile) continue;
|
|
1749
|
-
elevation = terrainElevation(point, request.tiles);
|
|
1750
|
-
if (Number.isFinite(elevation)) return elevation;
|
|
1751
|
-
}
|
|
1784
|
+
elevation = nativeTerrainElevation(state, point, x, y, z);
|
|
1785
|
+
if (Number.isFinite(elevation)) return elevation;
|
|
1752
1786
|
tiles.clear();
|
|
1753
|
-
for (
|
|
1787
|
+
for (index = 0; index < 9; index++) {
|
|
1788
|
+
dx = index % 3 - 1;
|
|
1789
|
+
dy = Math.floor(index / 3) - 1;
|
|
1754
1790
|
tx = ((x + dx) % limit + limit) % limit;
|
|
1755
1791
|
ty = Math.max(0, Math.min(limit - 1, y + dy));
|
|
1756
1792
|
entry = state.terrainCache.get(`${z}/${tx}/${ty}`);
|
|
@@ -1870,17 +1906,19 @@
|
|
|
1870
1906
|
const targetZ = (size.y / 2 - origin.y) / pixelsPerMeter;
|
|
1871
1907
|
const pitch = mapGetPitch(map) * radians;
|
|
1872
1908
|
const bearing = mapGetBearing(map) * radians;
|
|
1909
|
+
const sinPitch = Math.sin(pitch), cosPitch = Math.cos(pitch);
|
|
1910
|
+
const sinBearing = Math.sin(bearing), cosBearing = Math.cos(bearing);
|
|
1873
1911
|
const camera = cameraByLayer.get(layer);
|
|
1874
1912
|
camera.fov = cameraFov;
|
|
1875
1913
|
camera.aspect = size.x / size.y;
|
|
1876
1914
|
camera.near = Math.max(0.1, distance / 1e4);
|
|
1877
1915
|
camera.far = Math.max(1e4, distance * 10);
|
|
1878
|
-
camera.position[0] = targetX +
|
|
1879
|
-
camera.position[1] = targetY +
|
|
1880
|
-
camera.position[2] = targetZ +
|
|
1881
|
-
camera.up[0] = -
|
|
1882
|
-
camera.up[1] =
|
|
1883
|
-
camera.up[2] = -
|
|
1916
|
+
camera.position[0] = targetX + sinBearing * sinPitch * distance;
|
|
1917
|
+
camera.position[1] = targetY + cosPitch * distance;
|
|
1918
|
+
camera.position[2] = targetZ + cosBearing * sinPitch * distance;
|
|
1919
|
+
camera.up[0] = -sinBearing * cosPitch;
|
|
1920
|
+
camera.up[1] = sinPitch;
|
|
1921
|
+
camera.up[2] = -cosBearing * cosPitch;
|
|
1884
1922
|
camera.target[0] = targetX;
|
|
1885
1923
|
camera.target[1] = targetY;
|
|
1886
1924
|
camera.target[2] = targetZ;
|
|
@@ -3310,7 +3348,7 @@
|
|
|
3310
3348
|
|
|
3311
3349
|
// src/rendering/drawGeometry.js
|
|
3312
3350
|
function drawGeometry(layer, mesh, pass, cullMode, frontFace) {
|
|
3313
|
-
const { geometry } = mesh;
|
|
3351
|
+
const { geometry } = mesh, { attributes, drawRange } = geometry;
|
|
3314
3352
|
const renderer = rendererByLayer.get(layer);
|
|
3315
3353
|
const { device } = renderer;
|
|
3316
3354
|
const pipeline = drawPipeline(renderer, mesh, cullMode, frontFace);
|
|
@@ -3318,26 +3356,26 @@
|
|
|
3318
3356
|
prepareMeshTextures(renderer, mesh);
|
|
3319
3357
|
pass.setPipeline(pipeline);
|
|
3320
3358
|
pass.setBindGroup(0, mesh.bindGroup, (meshOffsets[0] = offset, meshOffsets));
|
|
3321
|
-
pass.setVertexBuffer(0,
|
|
3322
|
-
pass.setVertexBuffer(1,
|
|
3323
|
-
if (
|
|
3324
|
-
if (
|
|
3325
|
-
const instances =
|
|
3359
|
+
pass.setVertexBuffer(0, attributes.position.buffer);
|
|
3360
|
+
pass.setVertexBuffer(1, attributes.normal.buffer);
|
|
3361
|
+
if (attributes.color) pass.setVertexBuffer(2, attributes.color.buffer);
|
|
3362
|
+
if (attributes.uv) pass.setVertexBuffer(3, attributes.uv.buffer);
|
|
3363
|
+
const instances = attributes.instanceOffset;
|
|
3326
3364
|
if (instances) pass.setVertexBuffer(4, instances.buffer);
|
|
3327
3365
|
let name, attribute;
|
|
3328
|
-
for (name in
|
|
3329
|
-
attribute =
|
|
3366
|
+
for (name in attributes) {
|
|
3367
|
+
attribute = attributes[name];
|
|
3330
3368
|
if (!attribute.needsUpdate) continue;
|
|
3331
3369
|
device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
|
|
3332
3370
|
attribute.needsUpdate = false;
|
|
3333
3371
|
if (name === "position" || name === "instanceOffset") geometry.bounds = null;
|
|
3334
3372
|
}
|
|
3335
|
-
const index =
|
|
3373
|
+
const index = attributes.index;
|
|
3336
3374
|
if (index) {
|
|
3337
3375
|
pass.setIndexBuffer(index.buffer, index.indexFormat);
|
|
3338
|
-
pass.drawIndexed(
|
|
3376
|
+
pass.drawIndexed(drawRange.count, instances?.count ?? 1, drawRange.start, 0, 0);
|
|
3339
3377
|
} else {
|
|
3340
|
-
pass.draw(
|
|
3378
|
+
pass.draw(drawRange.count, instances?.count ?? 1, drawRange.start, 0);
|
|
3341
3379
|
}
|
|
3342
3380
|
}
|
|
3343
3381
|
|
|
@@ -3734,9 +3772,10 @@
|
|
|
3734
3772
|
let pipeline = sun.pipeline;
|
|
3735
3773
|
pass.setPipeline(pipeline);
|
|
3736
3774
|
pass.setBindGroup(1, sun.depthBindGroup);
|
|
3737
|
-
let mesh, instances, nextPipeline, offset, attribute, index, range;
|
|
3775
|
+
let mesh, attributes, instances, nextPipeline, offset, attribute, index, range;
|
|
3738
3776
|
for (mesh of meshes) {
|
|
3739
|
-
|
|
3777
|
+
attributes = mesh.geometry.attributes;
|
|
3778
|
+
instances = attributes.instanceOffset;
|
|
3740
3779
|
nextPipeline = instances ? sun.instancePipeline : sun.pipeline;
|
|
3741
3780
|
if (nextPipeline !== pipeline) {
|
|
3742
3781
|
pipeline = nextPipeline;
|
|
@@ -3751,16 +3790,16 @@
|
|
|
3751
3790
|
shadowBindGroup.layout = null;
|
|
3752
3791
|
shadowBindGroup.entries[0].resource.buffer = null;
|
|
3753
3792
|
}
|
|
3754
|
-
for (attribute of Object.values(
|
|
3793
|
+
for (attribute of Object.values(attributes)) {
|
|
3755
3794
|
if (attribute.needsUpdate) {
|
|
3756
3795
|
device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
|
|
3757
3796
|
attribute.needsUpdate = false;
|
|
3758
3797
|
}
|
|
3759
3798
|
}
|
|
3760
3799
|
pass.setBindGroup(0, mesh._shadowBindGroup, (shadowOffsets[0] = offset, shadowOffsets));
|
|
3761
|
-
pass.setVertexBuffer(0,
|
|
3800
|
+
pass.setVertexBuffer(0, attributes.position.buffer);
|
|
3762
3801
|
if (instances) pass.setVertexBuffer(1, instances.buffer);
|
|
3763
|
-
index =
|
|
3802
|
+
index = attributes.index, range = mesh.geometry.drawRange;
|
|
3764
3803
|
if (index) {
|
|
3765
3804
|
pass.setIndexBuffer(index.buffer, index.indexFormat);
|
|
3766
3805
|
pass.drawIndexed(range.count, instances?.count ?? 1, range.start, 0, 0);
|
|
@@ -3948,7 +3987,26 @@
|
|
|
3948
3987
|
return nativeGPUByLayer.get(state.source) === state && state.map.hasLayer(state.source);
|
|
3949
3988
|
}
|
|
3950
3989
|
|
|
3951
|
-
// src/native/
|
|
3990
|
+
// src/native/prepareGridTerrainRequests.js
|
|
3991
|
+
function prepareGridTerrainRequests(state) {
|
|
3992
|
+
const stream = streamTerrainByMap.get(state.map);
|
|
3993
|
+
if (state.terrainStream !== stream) {
|
|
3994
|
+
state.terrainStream = stream;
|
|
3995
|
+
state.terrainRequests = stream ? (
|
|
3996
|
+
/* alloc */
|
|
3997
|
+
/* @__PURE__ */ new Map()
|
|
3998
|
+
) : null;
|
|
3999
|
+
}
|
|
4000
|
+
if (state.terrainRequests) {
|
|
4001
|
+
let key;
|
|
4002
|
+
for (key of state.terrainRequests.keys()) {
|
|
4003
|
+
if (!state.source._tiles[key]) state.terrainRequests.delete(key);
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
4006
|
+
return stream;
|
|
4007
|
+
}
|
|
4008
|
+
|
|
4009
|
+
// src/native/syncGridTile.js
|
|
3952
4010
|
init_L();
|
|
3953
4011
|
|
|
3954
4012
|
// src/globals/coreWhite.js
|
|
@@ -3997,9 +4055,21 @@
|
|
|
3997
4055
|
|
|
3998
4056
|
// src/textures/uploadCanvasTexture.js
|
|
3999
4057
|
async function uploadCanvasTexture(state, key, texture, image, device, width, height) {
|
|
4000
|
-
let bitmap;
|
|
4058
|
+
let bitmap, source = image;
|
|
4001
4059
|
try {
|
|
4002
|
-
|
|
4060
|
+
if (image instanceof HTMLImageElement) {
|
|
4061
|
+
const canvas = document.createElement("canvas");
|
|
4062
|
+
canvas.width = width;
|
|
4063
|
+
canvas.height = height;
|
|
4064
|
+
const context = canvas.getContext("2d");
|
|
4065
|
+
if (!context) throw (
|
|
4066
|
+
/* alloc */
|
|
4067
|
+
new Error("Unable to rasterize SVG image")
|
|
4068
|
+
);
|
|
4069
|
+
context.drawImage(image, 0, 0, width, height);
|
|
4070
|
+
source = canvas;
|
|
4071
|
+
}
|
|
4072
|
+
bitmap = await createImageBitmap(source);
|
|
4003
4073
|
if (!current(state) || state.textures.get(key) !== texture) return;
|
|
4004
4074
|
device.queue.copyExternalImageToTexture(
|
|
4005
4075
|
/* alloc */
|
|
@@ -4056,8 +4126,7 @@
|
|
|
4056
4126
|
const url = image.currentSrc || image.src;
|
|
4057
4127
|
if (!texture || texture.image !== image || texture.url !== url) {
|
|
4058
4128
|
if (texture) {
|
|
4059
|
-
|
|
4060
|
-
if (mesh) disposeMesh(layer, mesh);
|
|
4129
|
+
disposeMesh(layer, meshes.get(key));
|
|
4061
4130
|
meshes.delete(key);
|
|
4062
4131
|
destroyTexture(layer, texture.texture);
|
|
4063
4132
|
textures.delete(key);
|
|
@@ -4086,7 +4155,7 @@
|
|
|
4086
4155
|
sampler: device.createSampler(coreSampler)
|
|
4087
4156
|
};
|
|
4088
4157
|
textures.set(key, texture);
|
|
4089
|
-
if (image instanceof HTMLCanvasElement) {
|
|
4158
|
+
if (image instanceof HTMLCanvasElement || url.startsWith("data:image/svg+xml")) {
|
|
4090
4159
|
texture.pending = true;
|
|
4091
4160
|
uploadCanvasTexture(state, key, texture, image, device, width, height);
|
|
4092
4161
|
} else {
|
|
@@ -4805,14 +4874,15 @@
|
|
|
4805
4874
|
|
|
4806
4875
|
// src/materials/createProgram.js
|
|
4807
4876
|
function createProgram(layer, material = defaultMaterial) {
|
|
4877
|
+
const renderer = rendererByLayer.get(layer), { device } = renderer;
|
|
4808
4878
|
const shaders = materialShaders(
|
|
4809
4879
|
material,
|
|
4810
4880
|
!!layer.options.nightSparkle,
|
|
4811
4881
|
material.terrain ? elevationWGSL : ""
|
|
4812
4882
|
);
|
|
4813
|
-
const vertex =
|
|
4883
|
+
const vertex = device.createShaderModule((vertexShader.code = shaders.vertex, vertexShader));
|
|
4814
4884
|
vertexShader.code = null;
|
|
4815
|
-
const fragment =
|
|
4885
|
+
const fragment = device.createShaderModule((fragmentShader.code = shaders.fragment, fragmentShader));
|
|
4816
4886
|
fragmentShader.code = null;
|
|
4817
4887
|
reportCompilation(
|
|
4818
4888
|
layer,
|
|
@@ -4832,15 +4902,15 @@
|
|
|
4832
4902
|
]
|
|
4833
4903
|
);
|
|
4834
4904
|
if (material.instanced) vertexBuffers.push(instanceLayout);
|
|
4835
|
-
const bindGroupLayout = createProgramLayout(
|
|
4836
|
-
const pipelineLayout2 =
|
|
4905
|
+
const bindGroupLayout = createProgramLayout(device, shaders);
|
|
4906
|
+
const pipelineLayout2 = device.createPipelineLayout((pipelineLayout.bindGroupLayouts[0] = bindGroupLayout, pipelineLayout.bindGroupLayouts[1] = renderer.sunlight.layout, pipelineLayout));
|
|
4837
4907
|
pipelineLayout.bindGroupLayouts[0] = null;
|
|
4838
4908
|
pipelineLayout.bindGroupLayouts[1] = null;
|
|
4839
4909
|
const uniforms = createProgramUniforms(material);
|
|
4840
4910
|
return (
|
|
4841
4911
|
/* alloc */
|
|
4842
4912
|
{
|
|
4843
|
-
device
|
|
4913
|
+
device,
|
|
4844
4914
|
vertex,
|
|
4845
4915
|
fragment,
|
|
4846
4916
|
bindings: shaders.bindings,
|
|
@@ -5066,6 +5136,28 @@
|
|
|
5066
5136
|
return positions;
|
|
5067
5137
|
}
|
|
5068
5138
|
|
|
5139
|
+
// src/native/syncGridTile.js
|
|
5140
|
+
function syncGridTile(state, key, tile, opacity) {
|
|
5141
|
+
const retained = state.textures.get(key), mesh = state.meshes.get(key);
|
|
5142
|
+
if (mesh && !mesh._terrainRequest && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {
|
|
5143
|
+
retained.used = true;
|
|
5144
|
+
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5145
|
+
return mesh;
|
|
5146
|
+
}
|
|
5147
|
+
const [nw, se] = state.source._tileCoordsToNwSe(tile.coords);
|
|
5148
|
+
return quadNativeMesh(
|
|
5149
|
+
state,
|
|
5150
|
+
key,
|
|
5151
|
+
tile.el,
|
|
5152
|
+
boundsQuad(
|
|
5153
|
+
state,
|
|
5154
|
+
/* alloc */
|
|
5155
|
+
new L.LatLngBounds(nw, se)
|
|
5156
|
+
),
|
|
5157
|
+
opacity
|
|
5158
|
+
);
|
|
5159
|
+
}
|
|
5160
|
+
|
|
5069
5161
|
// src/native/getGridTerrainTile.js
|
|
5070
5162
|
async function getGridTerrainTile(state, z, x, y) {
|
|
5071
5163
|
const limit = 2 ** z;
|
|
@@ -5210,74 +5302,62 @@
|
|
|
5210
5302
|
return mesh;
|
|
5211
5303
|
}
|
|
5212
5304
|
|
|
5213
|
-
// src/native/
|
|
5214
|
-
function
|
|
5215
|
-
const
|
|
5216
|
-
|
|
5217
|
-
if (
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
) : null;
|
|
5305
|
+
// src/native/syncTerrainGridTile.js
|
|
5306
|
+
function syncTerrainGridTile(state, key, tile, opacity) {
|
|
5307
|
+
const retained = state.textures.get(key), mesh = state.meshes.get(key);
|
|
5308
|
+
let request = state.terrainRequests.get(key);
|
|
5309
|
+
if (!request || request.tile !== tile) {
|
|
5310
|
+
request = /* alloc */
|
|
5311
|
+
{ tile, stream: state.terrainStream };
|
|
5312
|
+
state.terrainRequests.set(key, request);
|
|
5313
|
+
loadGridTerrain(state, key, tile, request);
|
|
5223
5314
|
}
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5315
|
+
if (!request.tiles) {
|
|
5316
|
+
if (mesh && retained?.image === tile.el) {
|
|
5317
|
+
retained.used = true;
|
|
5318
|
+
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5228
5319
|
}
|
|
5320
|
+
return null;
|
|
5321
|
+
}
|
|
5322
|
+
if (mesh && mesh._terrainRequest === request && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {
|
|
5323
|
+
retained.used = true;
|
|
5324
|
+
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5325
|
+
return mesh;
|
|
5229
5326
|
}
|
|
5327
|
+
return terrainGridMesh(state, key, tile, request, opacity);
|
|
5328
|
+
}
|
|
5329
|
+
|
|
5330
|
+
// src/native/retainGridTerrain.js
|
|
5331
|
+
function retainGridTerrain(state) {
|
|
5332
|
+
let key, mesh, retained;
|
|
5333
|
+
for ([key, mesh] of state.meshes) {
|
|
5334
|
+
if (state.source._tiles[key] || !mesh._terrainRequest) continue;
|
|
5335
|
+
retained = state.textures.get(key);
|
|
5336
|
+
if (!retained) continue;
|
|
5337
|
+
retained.used = true;
|
|
5338
|
+
mesh._nativeUsed = true;
|
|
5339
|
+
}
|
|
5340
|
+
}
|
|
5341
|
+
|
|
5342
|
+
// src/native/syncGridLayer.js
|
|
5343
|
+
function syncGridLayer(state) {
|
|
5344
|
+
const { source } = state;
|
|
5345
|
+
const stream = prepareGridTerrainRequests(state);
|
|
5346
|
+
let key, tile, opacity, mesh, pending = false;
|
|
5230
5347
|
for (key in source._tiles) {
|
|
5231
5348
|
if (!Object.hasOwn(source._tiles, key)) continue;
|
|
5232
5349
|
tile = source._tiles[key];
|
|
5233
5350
|
if (!tile.loaded || tile.el instanceof HTMLImageElement && !tile.el.naturalWidth) {
|
|
5234
|
-
|
|
5351
|
+
pending = Boolean(stream);
|
|
5235
5352
|
continue;
|
|
5236
5353
|
}
|
|
5237
5354
|
opacity = (source.options.opacity ?? 1) * (tile._gpuOpacity ?? 1);
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
if (state.terrainRequests) {
|
|
5241
|
-
request = state.terrainRequests.get(key);
|
|
5242
|
-
if (!request || request.tile !== tile) {
|
|
5243
|
-
request = /* alloc */
|
|
5244
|
-
{ tile, stream };
|
|
5245
|
-
state.terrainRequests.set(key, request);
|
|
5246
|
-
loadGridTerrain(state, key, tile, request);
|
|
5247
|
-
}
|
|
5248
|
-
if (!request.tiles) {
|
|
5249
|
-
pending = true;
|
|
5250
|
-
if (mesh && retained?.image === tile.el) {
|
|
5251
|
-
retained.used = true;
|
|
5252
|
-
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5253
|
-
}
|
|
5254
|
-
continue;
|
|
5255
|
-
}
|
|
5256
|
-
if (mesh && mesh._terrainRequest === request && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {
|
|
5257
|
-
retained.used = true;
|
|
5258
|
-
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5259
|
-
} else mesh = terrainGridMesh(state, key, tile, request, opacity);
|
|
5260
|
-
} else if (mesh && !mesh._terrainRequest && retained?.image === tile.el && retained.url === (tile.el.currentSrc || tile.el.src)) {
|
|
5261
|
-
retained.used = true;
|
|
5262
|
-
styleNativeMesh(state, mesh, coreWhite, opacity);
|
|
5263
|
-
} else {
|
|
5264
|
-
[nw, se] = source._tileCoordsToNwSe(tile.coords);
|
|
5265
|
-
mesh = quadNativeMesh(state, key, tile.el, boundsQuad(
|
|
5266
|
-
state,
|
|
5267
|
-
/* alloc */
|
|
5268
|
-
new L.LatLngBounds(nw, se)
|
|
5269
|
-
), opacity);
|
|
5270
|
-
}
|
|
5355
|
+
mesh = state.terrainRequests ? syncTerrainGridTile(state, key, tile, opacity) : syncGridTile(state, key, tile, opacity);
|
|
5356
|
+
if (state.terrainRequests && !state.terrainRequests.get(key).tiles) pending = true;
|
|
5271
5357
|
if (mesh) mesh.renderOrder += tile.coords.z / 100;
|
|
5272
5358
|
}
|
|
5273
5359
|
if (stream && (pending || !Object.keys(source._tiles).length)) {
|
|
5274
|
-
|
|
5275
|
-
if (source._tiles[key] || !mesh._terrainRequest) continue;
|
|
5276
|
-
retained = textures.get(key);
|
|
5277
|
-
if (!retained) continue;
|
|
5278
|
-
retained.used = true;
|
|
5279
|
-
mesh._nativeUsed = true;
|
|
5280
|
-
}
|
|
5360
|
+
retainGridTerrain(state);
|
|
5281
5361
|
}
|
|
5282
5362
|
}
|
|
5283
5363
|
|
|
@@ -6050,18 +6130,45 @@
|
|
|
6050
6130
|
);
|
|
6051
6131
|
}
|
|
6052
6132
|
|
|
6133
|
+
// src/core/projectNativePath.js
|
|
6134
|
+
init_L();
|
|
6135
|
+
|
|
6136
|
+
// src/weakmaps/pathProjectionByMap.js
|
|
6137
|
+
var pathProjectionByMap = /* @__PURE__ */ new WeakMap();
|
|
6138
|
+
|
|
6139
|
+
// src/core/projectNativePath.js
|
|
6140
|
+
function projectNativePath(source) {
|
|
6141
|
+
if (!L.version.startsWith("2.")) return source._project();
|
|
6142
|
+
const map = source._map, renderer = source._renderer;
|
|
6143
|
+
let projection = pathProjectionByMap.get(map);
|
|
6144
|
+
if (!projection) {
|
|
6145
|
+
projection = Object.create(L.Renderer.prototype);
|
|
6146
|
+
projection._map = map;
|
|
6147
|
+
pathProjectionByMap.set(map, projection);
|
|
6148
|
+
}
|
|
6149
|
+
projection._pathZoom = map.getZoom();
|
|
6150
|
+
projection._pathOrigin = map.getPixelOrigin();
|
|
6151
|
+
source._renderer = projection;
|
|
6152
|
+
try {
|
|
6153
|
+
source._project();
|
|
6154
|
+
} finally {
|
|
6155
|
+
if (renderer) source._renderer = renderer;
|
|
6156
|
+
else delete source._renderer;
|
|
6157
|
+
}
|
|
6158
|
+
}
|
|
6159
|
+
|
|
6053
6160
|
// src/geometry/circleGeometry.js
|
|
6054
6161
|
function circleGeometry(source, context) {
|
|
6055
6162
|
const { map, point, fill, stroke, options, dash, width } = context;
|
|
6056
6163
|
const center = map.project(source.getLatLng());
|
|
6057
6164
|
let radius = source.getRadius(), radiusY = radius, index, i;
|
|
6058
6165
|
if (source instanceof L.Circle) {
|
|
6059
|
-
source
|
|
6166
|
+
projectNativePath(source);
|
|
6060
6167
|
const projected = source._point.add(map.getPixelOrigin());
|
|
6061
6168
|
center.x = projected.x;
|
|
6062
6169
|
center.y = projected.y;
|
|
6063
|
-
radius = source._radius;
|
|
6064
|
-
radiusY = source._radiusY
|
|
6170
|
+
radius = source._pxRadius ?? source._radius;
|
|
6171
|
+
radiusY = source._pxRadiusY ?? source._radiusY ?? radius;
|
|
6065
6172
|
}
|
|
6066
6173
|
if (options.fill) disk(point, center, radius, fill, radiusY);
|
|
6067
6174
|
const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(Math.max(radius, radiusY)))));
|
|
@@ -7533,7 +7640,7 @@
|
|
|
7533
7640
|
function mapTryAnimatedPan(center, options) {
|
|
7534
7641
|
const offset = this._getCenterOffset(center)._trunc();
|
|
7535
7642
|
if (options?.animate !== true && !this.getSize().contains(offset)) return false;
|
|
7536
|
-
mapMethods.value.panBy.call(this, offset, options);
|
|
7643
|
+
(mapMethods.value._panBy || mapMethods.value.panBy).call(this, offset, options);
|
|
7537
7644
|
return true;
|
|
7538
7645
|
}
|
|
7539
7646
|
|
|
@@ -7884,23 +7991,14 @@
|
|
|
7884
7991
|
init_L();
|
|
7885
7992
|
init_mapGetBearing();
|
|
7886
7993
|
init_mapGetPitch();
|
|
7994
|
+
|
|
7995
|
+
// src/core/extendTerrainPixelBounds.js
|
|
7887
7996
|
init_radians();
|
|
7888
|
-
function
|
|
7889
|
-
const map =
|
|
7890
|
-
if (!stream && !mapGetBearing(map) && !mapGetPitch(map)) return tiledBounds.value.call(this, center);
|
|
7891
|
-
const bounds = map.getBounds();
|
|
7892
|
-
const result = (
|
|
7893
|
-
/* alloc */
|
|
7894
|
-
new L.Bounds(
|
|
7895
|
-
map.project(bounds.getNorthWest(), this._tileZoom),
|
|
7896
|
-
map.project(bounds.getSouthEast(), this._tileZoom)
|
|
7897
|
-
)
|
|
7898
|
-
);
|
|
7899
|
-
const shared = renderers.get(map), origin = shared && sceneOriginByLayer.get(shared);
|
|
7900
|
-
if (!stream || !origin) return result;
|
|
7997
|
+
function extendTerrainPixelBounds(layer, result, stream, origin) {
|
|
7998
|
+
const map = layer._map;
|
|
7901
7999
|
let minimum = Infinity, maximum = -Infinity, key, entry;
|
|
7902
8000
|
for ([key, entry] of stream.terrainCache) {
|
|
7903
|
-
if (!key.startsWith(`${
|
|
8001
|
+
if (!key.startsWith(`${layer._tileZoom}/`) || !entry.range) continue;
|
|
7904
8002
|
minimum = Math.min(minimum, entry.range[0]);
|
|
7905
8003
|
maximum = Math.max(maximum, entry.range[1]);
|
|
7906
8004
|
}
|
|
@@ -7914,12 +8012,29 @@
|
|
|
7914
8012
|
for (j = 0; j < 2; j++) {
|
|
7915
8013
|
point = j ? footprint.max : footprint.min;
|
|
7916
8014
|
raw = mapMethods.value.containerPointToLayerPoint.call(map, animationPoint(map, point, true));
|
|
7917
|
-
result.extend(map.project(map.layerPointToLatLng(raw),
|
|
8015
|
+
result.extend(map.project(map.layerPointToLatLng(raw), layer._tileZoom));
|
|
7918
8016
|
}
|
|
7919
8017
|
}
|
|
7920
8018
|
return result;
|
|
7921
8019
|
}
|
|
7922
8020
|
|
|
8021
|
+
// src/core/gridlayerGetTiledPixelBounds.js
|
|
8022
|
+
function gridlayerGetTiledPixelBounds(center) {
|
|
8023
|
+
const map = this._map, stream = streamTerrainByMap.get(map);
|
|
8024
|
+
if (!stream && !mapGetBearing(map) && !mapGetPitch(map)) return tiledBounds.value.call(this, center);
|
|
8025
|
+
const bounds = map.getBounds();
|
|
8026
|
+
const result = (
|
|
8027
|
+
/* alloc */
|
|
8028
|
+
new L.Bounds(
|
|
8029
|
+
map.project(bounds.getNorthWest(), this._tileZoom),
|
|
8030
|
+
map.project(bounds.getSouthEast(), this._tileZoom)
|
|
8031
|
+
)
|
|
8032
|
+
);
|
|
8033
|
+
const shared = renderers.get(map), origin = shared && sceneOriginByLayer.get(shared);
|
|
8034
|
+
if (!stream || !origin) return result;
|
|
8035
|
+
return extendTerrainPixelBounds(this, result, stream, origin);
|
|
8036
|
+
}
|
|
8037
|
+
|
|
7923
8038
|
// src/camera/mapCamera.js
|
|
7924
8039
|
mapMethods.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Map.prototype));
|
|
7925
8040
|
L.Map.mergeOptions({
|
|
@@ -7935,7 +8050,7 @@
|
|
|
7935
8050
|
touchPitch: false,
|
|
7936
8051
|
compassBearing: false
|
|
7937
8052
|
});
|
|
7938
|
-
L.Map.
|
|
8053
|
+
Object.assign(L.Map.prototype, {
|
|
7939
8054
|
layerPointToContainerPoint: mapLayerPointToContainerPoint,
|
|
7940
8055
|
containerPointToLayerPoint: mapContainerPointToLayerPoint,
|
|
7941
8056
|
_getCenterLayerPoint: mapGetCenterLayerPoint,
|
|
@@ -7952,7 +8067,7 @@
|
|
|
7952
8067
|
L.Map.addInitHook(initializeCameraMap);
|
|
7953
8068
|
markerMethods.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Marker.prototype));
|
|
7954
8069
|
L.Marker.mergeOptions({ rotation: 0, rotateWithView: false, keepUpright: false, scale: 1 });
|
|
7955
|
-
L.Marker.
|
|
8070
|
+
Object.assign(L.Marker.prototype, {
|
|
7956
8071
|
setIcon: markerSetIcon,
|
|
7957
8072
|
getEvents: markerGetEvents,
|
|
7958
8073
|
_setPos: markerSetPos,
|
|
@@ -7960,26 +8075,26 @@
|
|
|
7960
8075
|
_initInteraction: markerInitInteraction
|
|
7961
8076
|
});
|
|
7962
8077
|
popupEvents.value = L.Popup.prototype.getEvents;
|
|
7963
|
-
L.Popup.
|
|
8078
|
+
Object.assign(L.Popup.prototype, {
|
|
7964
8079
|
getEvents: popupGetEvents
|
|
7965
8080
|
});
|
|
7966
8081
|
tooltipEvents.value = L.Tooltip.prototype.getEvents;
|
|
7967
|
-
L.Tooltip.
|
|
8082
|
+
Object.assign(L.Tooltip.prototype, {
|
|
7968
8083
|
getEvents: tooltipGetEvents
|
|
7969
8084
|
});
|
|
7970
8085
|
popupPosition.value = L.Popup.prototype._updatePosition;
|
|
7971
8086
|
popupPan.value = L.Popup.prototype._adjustPan;
|
|
7972
|
-
L.Popup.
|
|
8087
|
+
Object.assign(L.Popup.prototype, {
|
|
7973
8088
|
_adjustPan: popupAdjustPan,
|
|
7974
8089
|
_updatePosition: popupUpdatePosition
|
|
7975
8090
|
});
|
|
7976
8091
|
tooltipPosition.value = L.Tooltip.prototype._setPosition;
|
|
7977
|
-
L.Tooltip.
|
|
8092
|
+
Object.assign(L.Tooltip.prototype, {
|
|
7978
8093
|
_setPosition: tooltipSetPosition
|
|
7979
8094
|
});
|
|
7980
8095
|
tiledBounds.value = L.GridLayer.prototype._getTiledPixelBounds;
|
|
7981
8096
|
gridEvents.value = L.GridLayer.prototype.getEvents;
|
|
7982
|
-
L.GridLayer.
|
|
8097
|
+
Object.assign(L.GridLayer.prototype, {
|
|
7983
8098
|
getEvents: gridlayerGetEvents,
|
|
7984
8099
|
_getTiledPixelBounds: gridlayerGetTiledPixelBounds
|
|
7985
8100
|
});
|
|
@@ -8405,6 +8520,21 @@
|
|
|
8405
8520
|
} else label.after(element);
|
|
8406
8521
|
}
|
|
8407
8522
|
|
|
8523
|
+
// src/layer-controls/layerControlInputId.js
|
|
8524
|
+
init_L();
|
|
8525
|
+
|
|
8526
|
+
// src/globals/layerControlAddItem.js
|
|
8527
|
+
init_L();
|
|
8528
|
+
var layerControlAddItem = L?.LayersControl?.prototype._addItem;
|
|
8529
|
+
|
|
8530
|
+
// src/layer-controls/layerControlInputId.js
|
|
8531
|
+
if (layerControlAddItem && !L.Control.Layers) L.LayersControl.prototype._addItem = addLayerControlInputId;
|
|
8532
|
+
function addLayerControlInputId(entry) {
|
|
8533
|
+
const label = layerControlAddItem.call(this, entry);
|
|
8534
|
+
label.querySelector(".leaflet-control-layers-selector").layerId = L.Util.stamp(entry.layer);
|
|
8535
|
+
return label;
|
|
8536
|
+
}
|
|
8537
|
+
|
|
8408
8538
|
// src/layer-controls/placeEntry.js
|
|
8409
8539
|
function placeEntry(map, layer, element) {
|
|
8410
8540
|
let input, entry;
|
|
@@ -8553,14 +8683,24 @@
|
|
|
8553
8683
|
}
|
|
8554
8684
|
|
|
8555
8685
|
// src/sunlight/initSunlight.js
|
|
8556
|
-
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
|
|
8560
|
-
|
|
8561
|
-
|
|
8562
|
-
|
|
8563
|
-
|
|
8686
|
+
init_extendLeafletClass();
|
|
8687
|
+
var TimeControl = class extends extendLeafletClass(L.Control) {
|
|
8688
|
+
static initHooks = true;
|
|
8689
|
+
static defaultOptions = { position: "bottomright" };
|
|
8690
|
+
constructor(options) {
|
|
8691
|
+
super(options);
|
|
8692
|
+
if (L.version.startsWith("2.")) {
|
|
8693
|
+
initialize.call(this, options);
|
|
8694
|
+
this.callInitHooks();
|
|
8695
|
+
}
|
|
8696
|
+
}
|
|
8697
|
+
};
|
|
8698
|
+
Object.assign(TimeControl.prototype, { onAdd, onRemove: onRemoveSun, addTo, remove });
|
|
8699
|
+
if (L.version.startsWith("1.")) {
|
|
8700
|
+
TimeControl.prototype.options = Object.assign(Object.create(L.Control.prototype.options), TimeControl.defaultOptions);
|
|
8701
|
+
TimeControl.prototype.initialize = initialize;
|
|
8702
|
+
}
|
|
8703
|
+
L.Control.Time = TimeControl;
|
|
8564
8704
|
|
|
8565
8705
|
// src/walk/initWalk.js
|
|
8566
8706
|
init_L();
|
|
@@ -9685,7 +9825,7 @@
|
|
|
9685
9825
|
// src/sources/pumpSourceAreas.js
|
|
9686
9826
|
function pump(layer, map = layer._map) {
|
|
9687
9827
|
const shared = map && renderers.get(map);
|
|
9688
|
-
if (!shared) return;
|
|
9828
|
+
if (!shared || !layersByLayer.has(shared)) return;
|
|
9689
9829
|
const layers = (
|
|
9690
9830
|
/* alloc */
|
|
9691
9831
|
[]
|
|
@@ -10121,6 +10261,7 @@
|
|
|
10121
10261
|
|
|
10122
10262
|
// src/gpu/initializeRendererResources.js
|
|
10123
10263
|
function initializeRendererResources(layer, device) {
|
|
10264
|
+
const renderer = rendererByLayer.get(layer);
|
|
10124
10265
|
const layout = device.createBindGroupLayout(
|
|
10125
10266
|
/* alloc */
|
|
10126
10267
|
{
|
|
@@ -10151,26 +10292,23 @@
|
|
|
10151
10292
|
)
|
|
10152
10293
|
}
|
|
10153
10294
|
);
|
|
10154
|
-
const buffer =
|
|
10295
|
+
const buffer = device.createBuffer(
|
|
10155
10296
|
/* alloc */
|
|
10156
10297
|
{ size: 80, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }
|
|
10157
10298
|
);
|
|
10158
|
-
const sampler =
|
|
10299
|
+
const sampler = device.createSampler(
|
|
10159
10300
|
/* alloc */
|
|
10160
10301
|
{ compare: "less-equal", minFilter: "linear", magFilter: "linear" }
|
|
10161
10302
|
);
|
|
10162
|
-
const lights =
|
|
10303
|
+
const lights = device.createBuffer(
|
|
10163
10304
|
/* alloc */
|
|
10164
10305
|
{ size: 32, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST }
|
|
10165
10306
|
);
|
|
10166
|
-
|
|
10307
|
+
renderer.sunlight = /* alloc */
|
|
10167
10308
|
{ layout, buffer, sampler, lights, size: 0 };
|
|
10168
|
-
|
|
10309
|
+
device.queue.writeBuffer(buffer, 0, sceneSunlightUniforms);
|
|
10169
10310
|
resizeSunlight(layer, 1);
|
|
10170
|
-
|
|
10171
|
-
emptyImage.width = 1;
|
|
10172
|
-
emptyImage.height = 1;
|
|
10173
|
-
rendererByLayer.get(layer).roofFallbackTexture = /* alloc */
|
|
10311
|
+
renderer.roofFallbackTexture = /* alloc */
|
|
10174
10312
|
{
|
|
10175
10313
|
device,
|
|
10176
10314
|
texture: device.createTexture(
|
|
@@ -10191,7 +10329,7 @@
|
|
|
10191
10329
|
addressModeV: "clamp-to-edge"
|
|
10192
10330
|
}
|
|
10193
10331
|
),
|
|
10194
|
-
image:
|
|
10332
|
+
image: null,
|
|
10195
10333
|
format: "rgba8unorm",
|
|
10196
10334
|
srgb: false,
|
|
10197
10335
|
uploaded: null
|
|
@@ -11945,12 +12083,24 @@
|
|
|
11945
12083
|
}
|
|
11946
12084
|
|
|
11947
12085
|
// src/walk/initWalk.js
|
|
11948
|
-
|
|
11949
|
-
|
|
11950
|
-
|
|
11951
|
-
|
|
11952
|
-
|
|
11953
|
-
|
|
12086
|
+
init_extendLeafletClass();
|
|
12087
|
+
var WalkControl = class extends extendLeafletClass(L.Control) {
|
|
12088
|
+
static initHooks = true;
|
|
12089
|
+
static defaultOptions = { position: "bottomright", speed: 70, distance: 20 };
|
|
12090
|
+
constructor(options) {
|
|
12091
|
+
super(options);
|
|
12092
|
+
if (L.version.startsWith("2.")) {
|
|
12093
|
+
initialize2.call(this, options);
|
|
12094
|
+
this.callInitHooks();
|
|
12095
|
+
}
|
|
12096
|
+
}
|
|
12097
|
+
};
|
|
12098
|
+
Object.assign(WalkControl.prototype, { onAdd: onAdd2, onRemove });
|
|
12099
|
+
if (L.version.startsWith("1.")) {
|
|
12100
|
+
WalkControl.prototype.options = Object.assign(Object.create(L.Control.prototype.options), WalkControl.defaultOptions);
|
|
12101
|
+
WalkControl.prototype.initialize = initialize2;
|
|
12102
|
+
}
|
|
12103
|
+
L.Control.Walk = WalkControl;
|
|
11954
12104
|
|
|
11955
12105
|
// src/weakmaps/eventMapByLayer.js
|
|
11956
12106
|
var eventMapByLayer = /* @__PURE__ */ new WeakMap();
|
|
@@ -14420,16 +14570,21 @@
|
|
|
14420
14570
|
return candidates.sort(compareVectorLabelPriority);
|
|
14421
14571
|
}
|
|
14422
14572
|
|
|
14573
|
+
// src/vector-tiles/updateVectorLabelStyle.js
|
|
14574
|
+
function updateVectorLabelStyle(label, zoom) {
|
|
14575
|
+
label.size = evaluateStyle(label.entry.layout?.["text-size"] ?? 12, label.properties, zoom);
|
|
14576
|
+
label.color = evaluateStyle(label.entry.paint?.["text-color"] ?? "#000", label.properties, zoom);
|
|
14577
|
+
label.halo = evaluateStyle(label.entry.paint?.["text-halo-color"] ?? "#fff", label.properties, zoom);
|
|
14578
|
+
label.haloWidth = evaluateStyle(label.entry.paint?.["text-halo-width"] ?? 0, label.properties, zoom);
|
|
14579
|
+
}
|
|
14580
|
+
|
|
14423
14581
|
// src/vector-tiles/vectorLabelCells.js
|
|
14424
14582
|
function vectorLabelCells(layer, label, size) {
|
|
14425
14583
|
const map = layer._map, zoom = vectorStyleZoom(layer);
|
|
14426
14584
|
if (!visibleStyle(label.entry, label.properties, zoom)) return null;
|
|
14427
|
-
|
|
14585
|
+
updateVectorLabelStyle(label, zoom);
|
|
14428
14586
|
if (!(label.size > 0)) return null;
|
|
14429
14587
|
if (label.icon && !vectorTileOptionsByLayer.get(layer).spriteSheet?.index[label.icon]) return null;
|
|
14430
|
-
label.color = evaluateStyle(label.entry.paint?.["text-color"] ?? "#000", label.properties, zoom);
|
|
14431
|
-
label.halo = evaluateStyle(label.entry.paint?.["text-halo-color"] ?? "#fff", label.properties, zoom);
|
|
14432
|
-
label.haloWidth = evaluateStyle(label.entry.paint?.["text-halo-width"] ?? 0, label.properties, zoom);
|
|
14433
14588
|
if (label.along && label.pixelBase * 2 ** map.getZoom() < label.text.length * label.size * 0.6) return null;
|
|
14434
14589
|
const point = map.latLngToContainerPoint(label.latlng);
|
|
14435
14590
|
if (point.x < 0 || point.y < 0 || point.x > size.x || point.y > size.y) return null;
|
|
@@ -14505,7 +14660,10 @@
|
|
|
14505
14660
|
function vectorLabelIcon(label, sheet) {
|
|
14506
14661
|
if (label.icon) return vectorSpriteIcon(label, sheet);
|
|
14507
14662
|
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
14508
|
-
const lines = label.along ?
|
|
14663
|
+
const lines = label.along ? (
|
|
14664
|
+
/* alloc */
|
|
14665
|
+
[label.text]
|
|
14666
|
+
) : wrapVectorLabel(label.text);
|
|
14509
14667
|
let longest = 0, line2, key, text, index;
|
|
14510
14668
|
for (line2 of lines) longest = Math.max(longest, Array.from(line2).length);
|
|
14511
14669
|
const width = Math.max(40, longest * label.size * 0.65 + 12);
|
|
@@ -16569,7 +16727,7 @@
|
|
|
16569
16727
|
}
|
|
16570
16728
|
|
|
16571
16729
|
// src/scene/initializerFor.js
|
|
16572
|
-
function initializerFor(type, options =
|
|
16730
|
+
function initializerFor(type, options = sceneEmptyOptions) {
|
|
16573
16731
|
switch (type) {
|
|
16574
16732
|
case "raster":
|
|
16575
16733
|
return options.asset !== void 0 || /\.tiff?(?:[?#]|$)/i.test(options.url) ? initCog : initRaster;
|
|
@@ -16637,7 +16795,7 @@
|
|
|
16637
16795
|
if (type === "vector") {
|
|
16638
16796
|
if (isVectorTileSource(settings)) {
|
|
16639
16797
|
initVectorTiles(this, settings);
|
|
16640
|
-
} else if (settings.data !== void 0 || settings.url && !/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(settings.url)) {
|
|
16798
|
+
} else if (settings.data !== void 0 || settings.style !== void 0 && !settings.url || settings.url && !/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(settings.url)) {
|
|
16641
16799
|
initializeGeoJSON(this, settings);
|
|
16642
16800
|
} else {
|
|
16643
16801
|
init3D(this, settings);
|
|
@@ -16722,6 +16880,9 @@
|
|
|
16722
16880
|
return markerSetRotation(this, rotation);
|
|
16723
16881
|
}
|
|
16724
16882
|
|
|
16883
|
+
// src/core/layerCallInitHooks.js
|
|
16884
|
+
init_L();
|
|
16885
|
+
|
|
16725
16886
|
// src/core/initializeNativeLayer.js
|
|
16726
16887
|
init_L();
|
|
16727
16888
|
|
|
@@ -16736,14 +16897,14 @@
|
|
|
16736
16897
|
|
|
16737
16898
|
// src/core/closestCameraLayerPoint.js
|
|
16738
16899
|
function closestCameraLayerPoint(point) {
|
|
16739
|
-
this
|
|
16900
|
+
projectNativePath(this);
|
|
16740
16901
|
this._parts = this._rings;
|
|
16741
16902
|
return closestMethods.get(this).call(this, point);
|
|
16742
16903
|
}
|
|
16743
16904
|
|
|
16744
16905
|
// src/core/cameraCircleBounds.js
|
|
16745
16906
|
function cameraCircleBounds() {
|
|
16746
|
-
this.
|
|
16907
|
+
if (this._map) projectNativePath(this);
|
|
16747
16908
|
return boundsMethods.get(this).call(this);
|
|
16748
16909
|
}
|
|
16749
16910
|
|
|
@@ -16848,25 +17009,66 @@
|
|
|
16848
17009
|
}
|
|
16849
17010
|
|
|
16850
17011
|
// src/core/layerCallInitHooks.js
|
|
16851
|
-
function
|
|
16852
|
-
|
|
17012
|
+
function layerCallInitHooks() {
|
|
17013
|
+
const initialized = this._initHooksCalled;
|
|
17014
|
+
if (!L.version.startsWith("2.")) layerProto.value.callInitHooks.call(this);
|
|
17015
|
+
if (L.version.startsWith("2.") || !initialized) {
|
|
16853
17016
|
sceneLayers.add(this);
|
|
17017
|
+
initializeNativeLayer.call(this);
|
|
16854
17018
|
}
|
|
16855
|
-
|
|
16856
|
-
|
|
16857
|
-
|
|
17019
|
+
}
|
|
17020
|
+
|
|
17021
|
+
// src/globals/leafletLayer.js
|
|
17022
|
+
init_L();
|
|
17023
|
+
var leafletLayer = L?.Layer;
|
|
17024
|
+
|
|
17025
|
+
// src/core/constructLayer.js
|
|
17026
|
+
function constructLayer(options) {
|
|
17027
|
+
const layer = Reflect.construct(
|
|
17028
|
+
leafletLayer,
|
|
17029
|
+
/* alloc */
|
|
17030
|
+
[],
|
|
17031
|
+
new.target
|
|
17032
|
+
);
|
|
17033
|
+
layerInitialize.call(layer, options);
|
|
17034
|
+
layer.callInitHooks();
|
|
17035
|
+
return layer;
|
|
17036
|
+
}
|
|
17037
|
+
|
|
17038
|
+
// src/core/layerAddInitHook.js
|
|
17039
|
+
init_L();
|
|
17040
|
+
function layerAddInitHook() {
|
|
17041
|
+
leafletLayer.addInitHook.apply(this === L.Layer ? leafletLayer : this, arguments);
|
|
17042
|
+
return this;
|
|
17043
|
+
}
|
|
17044
|
+
|
|
17045
|
+
// src/core/layerMergeOptions.js
|
|
17046
|
+
init_L();
|
|
17047
|
+
function layerMergeOptions(options) {
|
|
17048
|
+
leafletLayer.mergeOptions.call(this === L.Layer ? leafletLayer : this, options);
|
|
17049
|
+
return this;
|
|
16858
17050
|
}
|
|
16859
17051
|
|
|
16860
17052
|
// src/index.js
|
|
16861
|
-
layerProto.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(
|
|
16862
|
-
|
|
16863
|
-
|
|
16864
|
-
|
|
16865
|
-
|
|
16866
|
-
|
|
16867
|
-
|
|
17053
|
+
layerProto.value = Object.defineProperties({}, Object.getOwnPropertyDescriptors(leafletLayer.prototype));
|
|
17054
|
+
layerProto.value._layerAdd = leafletLayer.prototype._layerAdd;
|
|
17055
|
+
layerProto.value.callInitHooks = leafletLayer.prototype.callInitHooks;
|
|
17056
|
+
if (L.version.startsWith("2.")) {
|
|
17057
|
+
Object.setPrototypeOf(constructLayer, leafletLayer);
|
|
17058
|
+
constructLayer.prototype = leafletLayer.prototype;
|
|
17059
|
+
constructLayer.initHooks = true;
|
|
17060
|
+
constructLayer.addInitHook = layerAddInitHook;
|
|
17061
|
+
constructLayer.mergeOptions = layerMergeOptions;
|
|
17062
|
+
L.Layer = constructLayer;
|
|
17063
|
+
leafletLayer.prototype.constructor = L.Layer;
|
|
17064
|
+
leafletLayer.addInitHook(layerCallInitHooks);
|
|
17065
|
+
} else {
|
|
17066
|
+
leafletLayer.prototype.initialize = layerInitialize;
|
|
17067
|
+
leafletLayer.prototype.callInitHooks = layerCallInitHooks;
|
|
17068
|
+
}
|
|
17069
|
+
Object.assign(leafletLayer.prototype, { _layerAdd: layerLayerAdd });
|
|
16868
17070
|
removeLayer.value = L.Map.prototype.removeLayer;
|
|
16869
|
-
L.Map.
|
|
16870
|
-
L.Marker.
|
|
17071
|
+
Object.assign(L.Map.prototype, { removeLayer: removeLayer2, getPitch, getBearing, setPitch, setBearing });
|
|
17072
|
+
Object.assign(L.Marker.prototype, { setRotation });
|
|
16871
17073
|
})();
|
|
16872
17074
|
//# sourceMappingURL=leaflet-city-mapper-src.js.map
|