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.
Files changed (515) hide show
  1. package/README.md +1 -1
  2. package/dist/leaflet-city-mapper-src.js.map +1 -1
  3. package/dist/leaflet-city-mapper-worker-src.js.map +1 -1
  4. package/dist/leaflet-city-mapper-worker.js.map +1 -1
  5. package/dist/leaflet-city-mapper.js.map +1 -1
  6. package/libs/leaflet-lens.js +151 -151
  7. package/libs/leaflet.js +3 -3
  8. package/libs/openlayers-bindings.js +1129 -1129
  9. package/libs/openlayers-bindings.min.js.map +1 -1
  10. package/package.json +2 -4
  11. package/src/animations/cancelCameraAnimation.js +19 -19
  12. package/src/animations/mapStopPitchBearingAnimation.js +10 -10
  13. package/src/animations/scheduleCameraAnimation.js +15 -15
  14. package/src/animations/scheduleMarkerPan.js +14 -14
  15. package/src/animations/updateZoomCamera.js +25 -25
  16. package/src/archives/findDirectoryEntry.js +17 -17
  17. package/src/archives/findTile.js +45 -45
  18. package/src/archives/getDirectoryEntries.js +30 -30
  19. package/src/archives/getTileData.js +26 -26
  20. package/src/archives/readArchiveRange.js +48 -48
  21. package/src/astronomy/solarTime.js +21 -21
  22. package/src/camera/cameraMapReady.js +9 -9
  23. package/src/camera/cleanupCameraMap.js +13 -13
  24. package/src/camera/constrainCameraToBounds.js +3 -3
  25. package/src/camera/createSceneCamera.js +25 -25
  26. package/src/camera/getBearing.js +10 -10
  27. package/src/camera/getPitch.js +10 -10
  28. package/src/camera/mapGetBoundsCenterZoom.js +14 -14
  29. package/src/camera/mapLimitOffset.js +17 -17
  30. package/src/camera/mapPanBy.js +14 -14
  31. package/src/camera/setBearing.js +13 -13
  32. package/src/camera/setPitch.js +13 -13
  33. package/src/cog/decodeCogTile.js +37 -37
  34. package/src/cog/finiteCogValues.js +12 -12
  35. package/src/cog/getCogAssetEntry.js +26 -26
  36. package/src/cog/getCogBase.js +22 -22
  37. package/src/cog/getCogHeader.js +10 -10
  38. package/src/cog/getCogProfile.js +25 -25
  39. package/src/cog/getCogTile.js +25 -25
  40. package/src/cog/getColorTile.js +38 -38
  41. package/src/cog/getElevationTile.js +29 -29
  42. package/src/cog/hasCogProjection.js +16 -16
  43. package/src/cog/initCog.js +13 -13
  44. package/src/cog/invalidCogFullResponse.js +10 -10
  45. package/src/cog/openCog.js +40 -40
  46. package/src/cog/openCogAsset.js +22 -22
  47. package/src/cog/readCog.js +39 -39
  48. package/src/cog/readCogBlock.js +19 -19
  49. package/src/cog/readCogBody.js +30 -30
  50. package/src/cog/readCogDirectories.js +32 -32
  51. package/src/cog/readCogDirectory.js +34 -34
  52. package/src/cog/readCogLevel.js +36 -36
  53. package/src/cog/readCogTag.js +28 -28
  54. package/src/cog/validCogDimensions.js +15 -15
  55. package/src/cog/validCogEncoding.js +18 -18
  56. package/src/cog/validCogGeoArrays.js +17 -17
  57. package/src/cog/validCogGrid.js +22 -22
  58. package/src/cog/validCogTileCoordinates.js +13 -13
  59. package/src/cog/validateCogContainer.js +17 -17
  60. package/src/cog/validateCogContentRange.js +18 -18
  61. package/src/cog/validateCogOffsets.js +19 -19
  62. package/src/cog/validateCogRange.js +16 -16
  63. package/src/cog/validateCogResponse.js +26 -26
  64. package/src/collision/collectIntersections.js +41 -41
  65. package/src/collision/hiddenLightHit.js +19 -19
  66. package/src/collision/indexTriangle.js +18 -18
  67. package/src/collision/insideMesh.js +47 -47
  68. package/src/collision/insideWalker.js +52 -52
  69. package/src/collision/intersectMeshes.js +40 -40
  70. package/src/collision/localRay.js +31 -31
  71. package/src/collision/mergeHits.js +19 -19
  72. package/src/collision/rayBounds.js +28 -28
  73. package/src/collision/readTriangle.js +32 -32
  74. package/src/collision/trafficCollision.js +23 -23
  75. package/src/collision/transformTriangle.js +18 -18
  76. package/src/collision/triangleDistance.js +34 -34
  77. package/src/collision/vertexCount.js +11 -11
  78. package/src/collision/worldHit.js +30 -30
  79. package/src/controls/acceptPitchDrag.js +10 -10
  80. package/src/controls/acceptRotateDrag.js +9 -9
  81. package/src/controls/addCameraHandler.js +18 -18
  82. package/src/controls/adjustCameraDrag.js +13 -13
  83. package/src/controls/cameraDragContextMenu.js +12 -12
  84. package/src/controls/cameraDragEnd.js +10 -10
  85. package/src/controls/cameraDragMove.js +31 -31
  86. package/src/controls/changeCameraTouch.js +17 -17
  87. package/src/controls/compassOrientation.js +12 -12
  88. package/src/controls/compassRemoveHooks.js +2 -2
  89. package/src/controls/containerResizeRemoveHooks.js +2 -2
  90. package/src/controls/endCameraTouch.js +18 -18
  91. package/src/controls/failCompassPermission.js +10 -10
  92. package/src/controls/finishCameraDrag.js +14 -14
  93. package/src/controls/finishCompassPermission.js +24 -24
  94. package/src/controls/isEditableTarget.js +9 -9
  95. package/src/controls/loadCameraControls.js +18 -18
  96. package/src/controls/moveCameraTouch.js +34 -34
  97. package/src/controls/refreshRotateFocus.js +5 -5
  98. package/src/controls/removeCameraDrag.js +28 -28
  99. package/src/controls/resizeMap.js +7 -7
  100. package/src/controls/rotateButtonClick.js +16 -16
  101. package/src/controls/rotateButtonKeydown.js +20 -20
  102. package/src/controls/rotateControl.js +12 -12
  103. package/src/controls/shiftRotateRemoveHooks.js +2 -2
  104. package/src/controls/shiftRotateWheel.js +15 -15
  105. package/src/core/cameraMarkerOnDrag.js +16 -16
  106. package/src/core/constructLayer.js +16 -16
  107. package/src/core/extendLeafletClass.js +12 -12
  108. package/src/core/extendTerrainPixelBounds.js +41 -41
  109. package/src/core/layerAddInitHook.js +12 -12
  110. package/src/core/layerMergeOptions.js +14 -14
  111. package/src/core/markerInitInteraction.js +10 -10
  112. package/src/core/markerSetIcon.js +14 -14
  113. package/src/core/markerSetRotation.js +19 -19
  114. package/src/core/projectNativePath.js +30 -30
  115. package/src/core/redrawPath.js +11 -11
  116. package/src/core/removeLayer.js +26 -26
  117. package/src/core/setRotation.js +12 -12
  118. package/src/core/whenReady.js +14 -14
  119. package/src/geometry/addBridges.js +36 -36
  120. package/src/geometry/addGeneratedTriangle.js +10 -10
  121. package/src/geometry/appendAreaTriangle.js +32 -32
  122. package/src/geometry/appendNativeTriangle.js +17 -17
  123. package/src/geometry/appendRouteDash.js +33 -33
  124. package/src/geometry/appendRouteSegment.js +28 -28
  125. package/src/geometry/assembleAreaGeometry.js +48 -48
  126. package/src/geometry/bridgeEdge.js +18 -18
  127. package/src/geometry/bridgeFaces.js +22 -22
  128. package/src/geometry/bridgePaths.js +19 -19
  129. package/src/geometry/bridgePolygon.js +37 -37
  130. package/src/geometry/bridgeSides.js +18 -18
  131. package/src/geometry/buildProjectedPoint.js +32 -32
  132. package/src/geometry/buildProjectedPolygon.js +34 -34
  133. package/src/geometry/circleAt.js +20 -20
  134. package/src/geometry/circleGeometry.js +41 -41
  135. package/src/geometry/createModelGeometry.js +44 -44
  136. package/src/geometry/crossVector.js +15 -15
  137. package/src/geometry/dashValues.js +23 -23
  138. package/src/geometry/dashedSegment.js +33 -33
  139. package/src/geometry/diskAt.js +18 -18
  140. package/src/geometry/emitter.js +18 -18
  141. package/src/geometry/fillNativePolygon.js +28 -28
  142. package/src/geometry/generateTreeGeometry.js +18 -18
  143. package/src/geometry/indexBridge.js +36 -36
  144. package/src/geometry/instanceAreaGeometry.js +37 -37
  145. package/src/geometry/line.js +28 -28
  146. package/src/geometry/lineJoin.js +35 -35
  147. package/src/geometry/markerImageBounds.js +20 -20
  148. package/src/geometry/meshShadowBounds.js +33 -33
  149. package/src/geometry/offsetBelowGround.js +10 -10
  150. package/src/geometry/quad.js +23 -23
  151. package/src/geometry/restoreGeometry.js +29 -29
  152. package/src/geometry/roofCoverage.js +33 -33
  153. package/src/geometry/roofFootprint.js +40 -40
  154. package/src/geometry/samePoint.js +11 -11
  155. package/src/geometry/segment.js +32 -32
  156. package/src/geometry/subtractRoofTile.js +28 -28
  157. package/src/geometry/terrainBuffers.js +36 -36
  158. package/src/geometry/terrainTileGeometry.js +28 -28
  159. package/src/geometry/validateTree.js +19 -19
  160. package/src/globals/L.js +6 -6
  161. package/src/globals/cameraFov.js +8 -8
  162. package/src/globals/cogTags.js +6 -6
  163. package/src/globals/colorTexture.js +11 -11
  164. package/src/globals/cosObliquity.js +8 -8
  165. package/src/globals/degrees.js +6 -6
  166. package/src/globals/earthCirc.js +6 -6
  167. package/src/globals/geometryWorkerUrl.js +8 -8
  168. package/src/globals/halfRadians.js +6 -6
  169. package/src/globals/lampDirections.js +13 -13
  170. package/src/globals/layerControlAddItem.js +8 -8
  171. package/src/globals/leafletLayer.js +8 -8
  172. package/src/globals/lightScale.js +6 -6
  173. package/src/globals/mvtTextDecoder.js +6 -6
  174. package/src/globals/nativeScalableStyleKeys.js +6 -6
  175. package/src/globals/sinObliquity.js +8 -8
  176. package/src/globals/tau.js +6 -6
  177. package/src/globals/vectorStyleNamedColors.js +13 -13
  178. package/src/globals/vectorTileEvents.js +6 -6
  179. package/src/globals/workerCogSource.js +6 -6
  180. package/src/gpu/initializeRendererResources.js +39 -39
  181. package/src/gpu/initializeSharedRenderer.js +59 -59
  182. package/src/gpu/mountRenderer.js +25 -25
  183. package/src/layer-controls/layerControlInputId.js +18 -18
  184. package/src/layer-controls/layerCountTitle.js +16 -16
  185. package/src/layer-controls/placeEntryElement.js +29 -29
  186. package/src/layer-controls/renderLayerCount.js +28 -28
  187. package/src/lighting/visitLightCells.js +26 -26
  188. package/src/lighting/writeLightCell.js +14 -14
  189. package/src/materials/createProgramLayout.js +44 -44
  190. package/src/materials/createProgramUniforms.js +25 -25
  191. package/src/materials/modelMaterialFor.js +29 -29
  192. package/src/materials/prepareMeshCutout.js +21 -21
  193. package/src/materials/terrainRasterProgram.js +65 -65
  194. package/src/materials/validateRoofMaterial.js +17 -17
  195. package/src/models/applyModelTransform.js +18 -18
  196. package/src/models/buildModelNodes.js +24 -24
  197. package/src/models/createModelContext.js +24 -24
  198. package/src/models/loadBuffer.js +16 -16
  199. package/src/models/loadModelResources.js +22 -22
  200. package/src/models/normalizeAccessor.js +21 -21
  201. package/src/models/prepareModel.js +29 -29
  202. package/src/models/prepareModelGeometry.js +35 -35
  203. package/src/models/prepareModelPrimitive.js +25 -25
  204. package/src/models/readAccessorValue.js +16 -16
  205. package/src/models/readModelAttributes.js +32 -32
  206. package/src/models/readModelIndices.js +28 -28
  207. package/src/models/readSparseAccessor.js +31 -31
  208. package/src/models/releaseModelResources.js +15 -15
  209. package/src/mvt/addMvtCrossings.js +23 -23
  210. package/src/mvt/appendMvtBandTriangles.js +42 -42
  211. package/src/mvt/appendMvtCoordinates.js +20 -20
  212. package/src/mvt/appendMvtPolygonTriangles.js +29 -29
  213. package/src/mvt/beginMvtPath.js +19 -19
  214. package/src/mvt/closeMvtPath.js +16 -16
  215. package/src/mvt/collectMvtEdges.js +29 -29
  216. package/src/mvt/createMvtReader.js +14 -14
  217. package/src/mvt/decodeVectorTile.js +39 -39
  218. package/src/mvt/expectMvtWire.js +11 -11
  219. package/src/mvt/finishMvtPath.js +14 -14
  220. package/src/mvt/finiteMvtCoordinate.js +14 -14
  221. package/src/mvt/groupMvtPolygons.js +35 -35
  222. package/src/mvt/isMvtFallbackError.js +13 -13
  223. package/src/mvt/mergeMvtActiveEdges.js +18 -18
  224. package/src/mvt/mvtEdgeX.js +12 -12
  225. package/src/mvt/mvtPathsVertices.js +15 -15
  226. package/src/mvt/mvtPolygonPaths.js +19 -19
  227. package/src/mvt/numericMvtValue.js +11 -11
  228. package/src/mvt/readMvtFeature.js +46 -46
  229. package/src/mvt/readMvtField.js +17 -17
  230. package/src/mvt/readMvtGeometry.js +42 -42
  231. package/src/mvt/readMvtInteger.js +22 -22
  232. package/src/mvt/readMvtKnownValue.js +30 -30
  233. package/src/mvt/readMvtLayer.js +40 -40
  234. package/src/mvt/readMvtMessage.js +18 -18
  235. package/src/mvt/readMvtNumber.js +18 -18
  236. package/src/mvt/readMvtNumbers.js +18 -18
  237. package/src/mvt/readMvtString.js +14 -14
  238. package/src/mvt/readMvtValue.js +29 -29
  239. package/src/mvt/skipMvtField.js +22 -22
  240. package/src/mvt/sortMvtActiveEdges.js +20 -20
  241. package/src/mvt/sortedMvtLevels.js +29 -29
  242. package/src/mvt/takeMvtBytes.js +18 -18
  243. package/src/mvt/tessellateVectorRings.js +26 -26
  244. package/src/mvt/triangulateVectorRings.js +23 -23
  245. package/src/native/beforeNativeRender.js +21 -21
  246. package/src/native/bypassNativeEvent.js +21 -21
  247. package/src/native/canScaleNativeStyle.js +26 -26
  248. package/src/native/compareNativeHits.js +10 -10
  249. package/src/native/createNativeMesh.js +46 -46
  250. package/src/native/forwardNativeError.js +8 -8
  251. package/src/native/getGridTerrainTile.js +47 -47
  252. package/src/native/gridTerrainElevation.js +34 -34
  253. package/src/native/isCurrentNativeLayer.js +11 -11
  254. package/src/native/loadGridTerrain.js +36 -36
  255. package/src/native/nativeEventSource.js +27 -27
  256. package/src/native/nativeProgram.js +28 -28
  257. package/src/native/nativeTerrainElevation.js +27 -27
  258. package/src/native/nativeVectorGeometry.js +30 -30
  259. package/src/native/orderNativeGridLayer.js +20 -20
  260. package/src/native/prepareGridTerrainRequests.js +23 -23
  261. package/src/native/pruneNativeResources.js +25 -25
  262. package/src/native/readyNativeGPU.js +13 -13
  263. package/src/native/rejectNativeReady.js +2 -2
  264. package/src/native/removeNativeEvents.js +20 -20
  265. package/src/native/resolveNativeReady.js +2 -2
  266. package/src/native/restoreNativeEvents.js +8 -8
  267. package/src/native/retainGridTerrain.js +15 -15
  268. package/src/native/styleNativeMesh.js +20 -20
  269. package/src/native/syncGridTile.js +28 -28
  270. package/src/native/syncImageOverlay.js +13 -13
  271. package/src/native/syncNativeStrokeAnchors.js +18 -18
  272. package/src/native/syncNativeStrokeZoom.js +34 -34
  273. package/src/native/syncTerrainGridTile.js +38 -38
  274. package/src/native/terrainGridMesh.js +47 -47
  275. package/src/native/updateNativeHover.js +15 -15
  276. package/src/native/updateNativeStrokeRadius.js +14 -14
  277. package/src/picking/hitColliderCell.js +29 -29
  278. package/src/picking/validateCameraInverse.js +15 -15
  279. package/src/projections/displayContainerPoint.js +32 -32
  280. package/src/projections/projectBridgePoint.js +17 -17
  281. package/src/projections/toPoint.js +13 -13
  282. package/src/projections/transformZoomAnimationPoint.js +8 -8
  283. package/src/projections/verticalGroundY.js +14 -14
  284. package/src/raster/rasterTileRange.js +32 -32
  285. package/src/raster/retainRasterTiles.js +21 -21
  286. package/src/rendering/collectVisibleMesh.js +48 -48
  287. package/src/rendering/compareMeshDepth.js +14 -14
  288. package/src/rendering/drawPipeline.js +44 -44
  289. package/src/rendering/nativeStrokeExpansion.js +11 -11
  290. package/src/rendering/prepareFrameBuffer.js +24 -24
  291. package/src/rendering/prepareMeshUniforms.js +36 -36
  292. package/src/rendering/revealRoofMesh.js +43 -43
  293. package/src/scene/addSceneLayer.js +24 -24
  294. package/src/scene/callLayer.js +34 -34
  295. package/src/scene/createLayer.js +13 -13
  296. package/src/scene/getLocation.js +12 -12
  297. package/src/scene/isNativeLayer.js +19 -19
  298. package/src/scene/removeSceneLayer.js +22 -22
  299. package/src/scene/reportLayerError.js +9 -9
  300. package/src/shaders/materialBaseShader.js +26 -26
  301. package/src/shaders/materialSurfaceShader.js +60 -60
  302. package/src/shaders/materialVertexShader.js +89 -89
  303. package/src/shaders/nativeStrokeShader.js +13 -13
  304. package/src/shaders/roofVertexShader.js +16 -16
  305. package/src/shadows/shadowMeshMatches.js +19 -19
  306. package/src/sources/buildAreaFeatures.js +23 -23
  307. package/src/sources/extrusionStyle.js +21 -21
  308. package/src/sources/featureAnchor.js +21 -21
  309. package/src/sources/groundOffset.js +9 -9
  310. package/src/sources/initVectorTiles.js +21 -21
  311. package/src/sources/isVectorTileSource.js +11 -11
  312. package/src/sources/matchesAreaTile.js +17 -17
  313. package/src/sources/pendingSourceAreas.js +28 -28
  314. package/src/sources/prepareAreaGeometryJob.js +34 -34
  315. package/src/sources/projectAreaPolygons.js +25 -25
  316. package/src/sources/readyVectorTiles.js +17 -17
  317. package/src/sunlight/addTimeControlToMap.js +18 -18
  318. package/src/sunlight/addTimeLayer.js +12 -12
  319. package/src/sunlight/initializeTimeControl.js +18 -18
  320. package/src/sunlight/onAddSun.js +37 -37
  321. package/src/sunlight/onAddTimeControl.js +12 -12
  322. package/src/sunlight/onRemoveSun.js +10 -10
  323. package/src/sunlight/removeSun.js +25 -25
  324. package/src/sunlight/removeTimeControl.js +14 -14
  325. package/src/sunlight/removeTimeLayer.js +11 -11
  326. package/src/sunlight/requestSunlightRender.js +12 -12
  327. package/src/sunlight/styleTimeControl.js +13 -13
  328. package/src/sunlight/tickSun.js +10 -10
  329. package/src/sunlight/updateCelestialDisc.js +23 -23
  330. package/src/sunlight/updateSun.js +44 -44
  331. package/src/sunlight/useLiveTime.js +11 -11
  332. package/src/sunlight/useSelectedTime.js +26 -26
  333. package/src/terrain/applyTerrain.js +30 -30
  334. package/src/terrain/copyTerrainTile.js +20 -20
  335. package/src/terrain/loadReadyTerrain.js +6 -6
  336. package/src/terrain/mapElevationOf.js +19 -19
  337. package/src/terrain/readBridges.js +13 -13
  338. package/src/terrain/readyTerrainOf.js +14 -14
  339. package/src/terrain/sampleTerrainTile.js +16 -16
  340. package/src/terrain/terrainTileQueue.js +34 -34
  341. package/src/textures/addImageState.js +13 -13
  342. package/src/textures/bindMeshTextures.js +57 -57
  343. package/src/textures/collectRoofTiles.js +23 -23
  344. package/src/textures/loadModelImage.js +29 -29
  345. package/src/textures/modelTextureFor.js +47 -47
  346. package/src/textures/prepareMeshTextures.js +31 -31
  347. package/src/textures/removeImageState.js +13 -13
  348. package/src/textures/resizeRoofTexture.js +32 -32
  349. package/src/textures/restoreMaterialTextures.js +22 -22
  350. package/src/textures/updateRoofAtlas.js +29 -29
  351. package/src/textures/uploadMeshTexture.js +32 -32
  352. package/src/textures/uploadNativeImage.js +26 -26
  353. package/src/textures/uploadRoofTile.js +29 -29
  354. package/src/traffic/createTrafficMesh.js +17 -17
  355. package/src/traffic/disposeTrafficObject.js +19 -19
  356. package/src/traffic/failTraffic.js +12 -12
  357. package/src/traffic/failedTrafficLoad.js +10 -10
  358. package/src/traffic/fetchTrafficLanes.js +21 -21
  359. package/src/traffic/loadedTrafficLanes.js +21 -21
  360. package/src/traffic/locateTraffic.js +20 -20
  361. package/src/traffic/moveTraffic.js +21 -21
  362. package/src/traffic/readyTraffic.js +10 -10
  363. package/src/traffic/refreshTrafficTrips.js +42 -42
  364. package/src/traffic/routeColor.js +13 -13
  365. package/src/traffic/startTraffic.js +12 -12
  366. package/src/traffic/trafficNow.js +15 -15
  367. package/src/traffic/trafficStatusText.js +13 -13
  368. package/src/traffic/trafficStorage.js +13 -13
  369. package/src/traffic/updateTraffic.js +13 -13
  370. package/src/traffic/updateTrafficLights.js +23 -23
  371. package/src/traffic/updateTrafficPose.js +15 -15
  372. package/src/traffic/updateTrafficTerrain.js +15 -15
  373. package/src/traffic/uploadTrafficLanes.js +27 -27
  374. package/src/transforms/composeLocalTransform.js +23 -23
  375. package/src/transforms/transformNativePoint.js +19 -19
  376. package/src/transforms/worldMatrixChanged.js +26 -26
  377. package/src/triangulation/clipEars.js +32 -32
  378. package/src/triangulation/connectHole.js +30 -30
  379. package/src/triangulation/cross.js +12 -12
  380. package/src/triangulation/equal.js +11 -11
  381. package/src/triangulation/intersects.js +21 -21
  382. package/src/triangulation/mergeHoles.js +19 -19
  383. package/src/triangulation/on.js +13 -13
  384. package/src/triangulation/polygonRings.js +22 -22
  385. package/src/triangulation/validateArea.js +19 -19
  386. package/src/utils/compareDistance.js +11 -11
  387. package/src/utils/yieldTask.js +12 -12
  388. package/src/vector-style/appendQuotedStyleCharacter.js +30 -30
  389. package/src/vector-style/arrayContainsRange.js +18 -18
  390. package/src/vector-style/evaluateBoolean.js +31 -31
  391. package/src/vector-style/evaluateCoalesceOrCase.js +34 -34
  392. package/src/vector-style/evaluateComparison.js +29 -29
  393. package/src/vector-style/evaluateIExpression.js +21 -21
  394. package/src/vector-style/evaluateInput.js +16 -16
  395. package/src/vector-style/evaluateInterpolate.js +36 -36
  396. package/src/vector-style/evaluateMatch.js +21 -21
  397. package/src/vector-style/evaluateMath.js +26 -26
  398. package/src/vector-style/evaluateMembership.js +29 -29
  399. package/src/vector-style/evaluateNegation.js +26 -26
  400. package/src/vector-style/evaluatePrimitive.js +21 -21
  401. package/src/vector-style/evaluateStep.js +20 -20
  402. package/src/vector-style/evaluateStyle.js +43 -43
  403. package/src/vector-style/evaluateToExpression.js +27 -27
  404. package/src/vector-style/fillVectorPaint.js +26 -26
  405. package/src/vector-style/lineVectorPaint.js +31 -31
  406. package/src/vector-style/parseFunctionalColor.js +23 -23
  407. package/src/vector-style/parseHexColor.js +20 -20
  408. package/src/vector-style/parseVectorStyle.js +20 -20
  409. package/src/vector-style/readPaintValue.js +17 -17
  410. package/src/vector-style/removeTrailingCommas.js +19 -19
  411. package/src/vector-style/scaleDashArray.js +25 -25
  412. package/src/vector-style/skipStyleComment.js +20 -20
  413. package/src/vector-style/stripStyleComments.js +28 -28
  414. package/src/vector-style/styleColor.js +18 -18
  415. package/src/vector-style/validateVectorLayers.js +18 -18
  416. package/src/vector-style/vectorPaint.js +17 -17
  417. package/src/vector-style/visibleStyle.js +16 -16
  418. package/src/vector-tiles/appendVectorBatch.js +34 -34
  419. package/src/vector-tiles/attachVectorTileBatch.js +25 -25
  420. package/src/vector-tiles/attachVectorTileBatches.js +26 -26
  421. package/src/vector-tiles/compareVectorLabelPriority.js +11 -11
  422. package/src/vector-tiles/compareVectorTileDistance.js +11 -11
  423. package/src/vector-tiles/createVectorLabel.js +37 -37
  424. package/src/vector-tiles/forwardVectorTileError.js +10 -10
  425. package/src/vector-tiles/loadVectorSprite.js +14 -14
  426. package/src/vector-tiles/loadVectorTile.js +45 -45
  427. package/src/vector-tiles/onVectorTileAdd.js +44 -44
  428. package/src/vector-tiles/onVectorTileMessage.js +15 -15
  429. package/src/vector-tiles/onVectorTileRemove.js +25 -25
  430. package/src/vector-tiles/onVectorTileWorkerError.js +16 -16
  431. package/src/vector-tiles/paintVectorTileBatch.js +18 -18
  432. package/src/vector-tiles/prepareVectorLabel.js +34 -34
  433. package/src/vector-tiles/prepareVectorStyleLayer.js +38 -38
  434. package/src/vector-tiles/prepareVectorTile.js +29 -29
  435. package/src/vector-tiles/projectVectorPaths.js +25 -25
  436. package/src/vector-tiles/projectVectorPoint.js +15 -15
  437. package/src/vector-tiles/projectVectorTriangles.js +28 -28
  438. package/src/vector-tiles/pruneVectorTiles.js +14 -14
  439. package/src/vector-tiles/pumpVectorTiles.js +21 -21
  440. package/src/vector-tiles/readTileJSON.js +27 -27
  441. package/src/vector-tiles/readVectorStyle.js +28 -28
  442. package/src/vector-tiles/refreshVectorTiles.js +8 -8
  443. package/src/vector-tiles/reserveVectorLabelCells.js +14 -14
  444. package/src/vector-tiles/retireVectorTileGroup.js +20 -20
  445. package/src/vector-tiles/revokeVectorWorkerUrl.js +14 -14
  446. package/src/vector-tiles/rotateVectorLabel.js +19 -19
  447. package/src/vector-tiles/rotateVectorLabels.js +9 -9
  448. package/src/vector-tiles/simplifyVectorPath.js +29 -29
  449. package/src/vector-tiles/updateVectorLabelMarker.js +36 -36
  450. package/src/vector-tiles/updateVectorLabelStyle.js +14 -14
  451. package/src/vector-tiles/updateVectorTileLabels.js +33 -33
  452. package/src/vector-tiles/updateVectorTilePaint.js +25 -25
  453. package/src/vector-tiles/updateVectorTiles.js +32 -32
  454. package/src/vector-tiles/validateVectorTileZooms.js +15 -15
  455. package/src/vector-tiles/vectorFeaturePaint.js +25 -25
  456. package/src/vector-tiles/vectorFeaturePaths.js +26 -26
  457. package/src/vector-tiles/vectorFeatureZoom.js +18 -18
  458. package/src/vector-tiles/vectorLabelAnchors.js +31 -31
  459. package/src/vector-tiles/vectorLabelCandidates.js +18 -18
  460. package/src/vector-tiles/vectorLabelCells.js +32 -32
  461. package/src/vector-tiles/vectorLabelIcon.js +38 -38
  462. package/src/vector-tiles/vectorLabelProperty.js +12 -12
  463. package/src/vector-tiles/vectorLabelText.js +19 -19
  464. package/src/vector-tiles/vectorSpriteIcon.js +19 -19
  465. package/src/vector-tiles/vectorStraightRun.js +23 -23
  466. package/src/vector-tiles/vectorStyleDependencies.js +22 -22
  467. package/src/vector-tiles/vectorStyleValue.js +16 -16
  468. package/src/vector-tiles/vectorStyleZoom.js +12 -12
  469. package/src/vector-tiles/vectorTileAwaited.js +17 -17
  470. package/src/vector-tiles/vectorTileOverlaps.js +12 -12
  471. package/src/vector-tiles/vectorTilePaint.js +18 -18
  472. package/src/vector-tiles/vectorTileSettings.js +27 -27
  473. package/src/vector-tiles/vectorTilesIdle.js +11 -11
  474. package/src/vector-tiles/vectorTolerance.js +11 -11
  475. package/src/vector-tiles/wrapVectorLabel.js +17 -17
  476. package/src/vehicles/boatModel.js +35 -35
  477. package/src/vehicles/busModel.js +13 -13
  478. package/src/vehicles/carModel.js +39 -39
  479. package/src/walk/initializeWalkControl.js +12 -12
  480. package/src/walk/isWalkBlocked.js +15 -15
  481. package/src/walk/landWalker.js +41 -41
  482. package/src/walk/moveWalker.js +37 -37
  483. package/src/walk/onAddWalkControl.js +40 -40
  484. package/src/walk/onRemoveWalkControl.js +17 -17
  485. package/src/walk/onWalkBlur.js +3 -3
  486. package/src/walk/onWalkTerrain.js +3 -3
  487. package/src/walk/resolveWalkerPosition.js +33 -33
  488. package/src/walk/stepWalkerHeight.js +18 -18
  489. package/src/walk/toggleWalking.js +4 -4
  490. package/src/walk/updateWalkerFrame.js +29 -29
  491. package/src/walk/updateWalkerView.js +31 -31
  492. package/src/weakmaps/cameraHandlersByMap.js +6 -6
  493. package/src/weakmaps/geometryWorkersByMap.js +6 -6
  494. package/src/weakmaps/nativeProgramsByRenderer.js +6 -6
  495. package/src/weakmaps/pathProjectionByMap.js +6 -6
  496. package/src/weakmaps/streamTerrainByLayer.js +6 -6
  497. package/src/weakmaps/streamTerrainByMap.js +6 -6
  498. package/src/weakmaps/sunByMap.js +6 -6
  499. package/src/weakmaps/vectorTileOptionsByLayer.js +6 -6
  500. package/src/weakmaps/vectorWorkerByLayer.js +6 -6
  501. package/src/weakmaps/walkByMap.js +6 -6
  502. package/src/weakmaps/workerMapByLayer.js +6 -6
  503. package/src/workers/acquireGeometryWorker.js +39 -39
  504. package/src/workers/buildAreaInWorker.js +24 -24
  505. package/src/workers/closeGeometryWorkers.js +16 -16
  506. package/src/workers/cogWorker.js +27 -27
  507. package/src/workers/createGeometryWorker.js +30 -30
  508. package/src/workers/geometryWorker.js +34 -34
  509. package/src/workers/getCogInWorker.js +18 -18
  510. package/src/workers/modelWorker.js +17 -17
  511. package/src/workers/openCogInWorker.js +22 -22
  512. package/src/workers/runSourceWorker.js +44 -44
  513. package/src/workers/settleGeometryWorker.js +16 -16
  514. package/src/workers/startGeometryWorker.js +23 -23
  515. package/src/workers/vectorTileWorker.js +15 -15
@@ -1,29 +1,29 @@
1
- /**
2
- * Recreate geometry buffers on a device from retained CPU attributes.
3
- *
4
- * @param {Object} geometry Geometry and attribute data to restore.
5
- * @param {GPUDevice} device Device receiving the buffers.
6
- */
7
- export function restoreGeometry(geometry, device) {
8
- if (geometry.attributes.index?.data instanceof Uint8Array) {
9
- geometry.attributes.index.data = /* alloc */ new Uint16Array(geometry.attributes.index.data);
10
- }
11
- let name, attribute, oldBuffer;
12
- for (name in geometry.attributes) {
13
- attribute = geometry.attributes[name];
14
- attribute.size ||= 1;
15
- attribute.count = attribute.data.length / attribute.size;
16
- attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';
17
- oldBuffer = attribute.buffer;
18
- attribute.buffer = device.createBuffer(/* alloc */ {
19
- size: Math.max(4, attribute.data.byteLength),
20
- usage: name === 'index'
21
- ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST
22
- : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
23
- });
24
- device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
25
- oldBuffer?.destroy();
26
- }
27
- geometry.device = device;
28
- geometry.drawRange.count = geometry.attributes.index?.count || geometry.attributes.position.count;
29
- }
1
+ /**
2
+ * Recreate geometry buffers on a device from retained CPU attributes.
3
+ *
4
+ * @param {Object} geometry Geometry and attribute data to restore.
5
+ * @param {GPUDevice} device Device receiving the buffers.
6
+ */
7
+ export function restoreGeometry(geometry, device) {
8
+ if (geometry.attributes.index?.data instanceof Uint8Array) {
9
+ geometry.attributes.index.data = /* alloc */ new Uint16Array(geometry.attributes.index.data);
10
+ }
11
+ let name, attribute, oldBuffer;
12
+ for (name in geometry.attributes) {
13
+ attribute = geometry.attributes[name];
14
+ attribute.size ||= 1;
15
+ attribute.count = attribute.data.length / attribute.size;
16
+ attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';
17
+ oldBuffer = attribute.buffer;
18
+ attribute.buffer = device.createBuffer(/* alloc */ {
19
+ size: Math.max(4, attribute.data.byteLength),
20
+ usage: name === 'index'
21
+ ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST
22
+ : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
23
+ });
24
+ device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
25
+ oldBuffer?.destroy();
26
+ }
27
+ geometry.device = device;
28
+ geometry.drawRange.count = geometry.attributes.index?.count || geometry.attributes.position.count;
29
+ }
@@ -1,33 +1,33 @@
1
- import { headerByLayer } from '../weakmaps/headerByLayer.js';
2
- import { rasterTilesByLayer } from '../weakmaps/rasterTilesByLayer.js';
3
- import { tileZoomByLayer } from '../weakmaps/tileZoomByLayer.js';
4
- import { roofFootprint } from './roofFootprint.js';
5
- import { subtractRoofTile } from './subtractRoofTile.js';
6
-
7
- /**
8
- * Test the mesh's ground footprint against loaded imagery, including coarse parent tiles.
9
- *
10
- * @param {Object} mesh Mesh whose footprint is tested.
11
- * @param {L.Layer} layer Rendering layer.
12
- * @param {Array<L.Layer>} rasters Raster layers to inspect.
13
- *
14
- * @returns {boolean} Whether the footprint is covered or needs no imagery.
15
- */
16
- export function roofCoverage(mesh, layer, rasters) {
17
- let intersectsArchive = false, pending = false;
18
- let rasterLayer, footprint, remaining, tile;
19
- for (rasterLayer of rasters) {
20
- if (!headerByLayer.get(rasterLayer)) { pending = true; continue; }
21
- footprint = roofFootprint(mesh, layer, rasterLayer);
22
- if (!footprint) continue;
23
- intersectsArchive = true;
24
- remaining = /* alloc */ [footprint];
25
- for (tile of rasterTilesByLayer.get(rasterLayer).values()) {
26
- // Failed imagery already reports an error; do not hide the building indefinitely.
27
- if (!tile.done && !tile.error) continue;
28
- remaining = subtractRoofTile(remaining, tile, tileZoomByLayer.get(rasterLayer));
29
- if (!remaining.length) return true;
30
- }
31
- }
32
- return !intersectsArchive && !pending;
33
- }
1
+ import { headerByLayer } from '../weakmaps/headerByLayer.js';
2
+ import { rasterTilesByLayer } from '../weakmaps/rasterTilesByLayer.js';
3
+ import { tileZoomByLayer } from '../weakmaps/tileZoomByLayer.js';
4
+ import { roofFootprint } from './roofFootprint.js';
5
+ import { subtractRoofTile } from './subtractRoofTile.js';
6
+
7
+ /**
8
+ * Test the mesh's ground footprint against loaded imagery, including coarse parent tiles.
9
+ *
10
+ * @param {Object} mesh Mesh whose footprint is tested.
11
+ * @param {L.Layer} layer Rendering layer.
12
+ * @param {Array<L.Layer>} rasters Raster layers to inspect.
13
+ *
14
+ * @returns {boolean} Whether the footprint is covered or needs no imagery.
15
+ */
16
+ export function roofCoverage(mesh, layer, rasters) {
17
+ let intersectsArchive = false, pending = false;
18
+ let rasterLayer, footprint, remaining, tile;
19
+ for (rasterLayer of rasters) {
20
+ if (!headerByLayer.get(rasterLayer)) { pending = true; continue; }
21
+ footprint = roofFootprint(mesh, layer, rasterLayer);
22
+ if (!footprint) continue;
23
+ intersectsArchive = true;
24
+ remaining = /* alloc */ [footprint];
25
+ for (tile of rasterTilesByLayer.get(rasterLayer).values()) {
26
+ // Failed imagery already reports an error; do not hide the building indefinitely.
27
+ if (!tile.done && !tile.error) continue;
28
+ remaining = subtractRoofTile(remaining, tile, tileZoomByLayer.get(rasterLayer));
29
+ if (!remaining.length) return true;
30
+ }
31
+ }
32
+ return !intersectsArchive && !pending;
33
+ }
@@ -1,40 +1,40 @@
1
- import { headerByLayer } from '../weakmaps/headerByLayer.js';
2
- import { sceneOriginByLayer } from '../weakmaps/sceneOriginByLayer.js';
3
- import { tileZoomByLayer } from '../weakmaps/tileZoomByLayer.js';
4
- import { radians } from '../globals/radians.js';
5
- import { earthCirc } from '../globals/earthCirc.js';
6
-
7
- /**
8
- * Project a mesh's bounding box into raster pixels and clip it to archive bounds.
9
- *
10
- * @param {Object} mesh Mesh with bounds and world matrix.
11
- * @param {L.Layer} layer Rendering layer.
12
- * @param {L.Layer} rasterLayer Raster layer providing zoom and archive bounds.
13
- *
14
- * @returns {Array<number>|null} Pixel rectangle, or null when outside the archive.
15
- */
16
- export function roofFootprint(mesh, layer, rasterLayer) {
17
- const map = layer._map, bounds = mesh.geometry.bounds, world = mesh.worldMatrix;
18
- const zoom = tileZoomByLayer.get(rasterLayer)
19
- const origin = map.project(sceneOriginByLayer.get(layer), zoom);
20
- const scale = map.options.crs.scale(zoom) / (earthCirc * Math.cos(sceneOriginByLayer.get(layer).lat * radians));
21
- let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
22
- let i, x, y, z, px, py, nw, se;
23
- for (i = 0; i < 8; i++) {
24
- x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];
25
- z = i & 4 ? bounds.max[2] : bounds.min[2];
26
- px = origin.x + (world[0] * x + world[4] * y + world[8] * z + world[12]) * scale;
27
- py = origin.y + (world[2] * x + world[6] * y + world[10] * z + world[14]) * scale;
28
- minX = Math.min(minX, px); minY = Math.min(minY, py);
29
- maxX = Math.max(maxX, px); maxY = Math.max(maxY, py);
30
- }
31
- if (headerByLayer.get(rasterLayer).maxLat !== undefined && headerByLayer.get(rasterLayer).minLon !== undefined &&
32
- headerByLayer.get(rasterLayer).minLat !== undefined && headerByLayer.get(rasterLayer).maxLon !== undefined) {
33
- nw = map.project(/* alloc */ [headerByLayer.get(rasterLayer).maxLat, headerByLayer.get(rasterLayer).minLon], zoom);
34
- se = map.project(/* alloc */ [headerByLayer.get(rasterLayer).minLat, headerByLayer.get(rasterLayer).maxLon], zoom);
35
- minX = Math.max(minX, nw.x); minY = Math.max(minY, nw.y);
36
- maxX = Math.min(maxX, se.x); maxY = Math.min(maxY, se.y);
37
- if (minX >= maxX || minY >= maxY) return null;
38
- }
39
- return /* alloc */ [minX, minY, maxX, maxY];
40
- }
1
+ import { headerByLayer } from '../weakmaps/headerByLayer.js';
2
+ import { sceneOriginByLayer } from '../weakmaps/sceneOriginByLayer.js';
3
+ import { tileZoomByLayer } from '../weakmaps/tileZoomByLayer.js';
4
+ import { radians } from '../globals/radians.js';
5
+ import { earthCirc } from '../globals/earthCirc.js';
6
+
7
+ /**
8
+ * Project a mesh's bounding box into raster pixels and clip it to archive bounds.
9
+ *
10
+ * @param {Object} mesh Mesh with bounds and world matrix.
11
+ * @param {L.Layer} layer Rendering layer.
12
+ * @param {L.Layer} rasterLayer Raster layer providing zoom and archive bounds.
13
+ *
14
+ * @returns {Array<number>|null} Pixel rectangle, or null when outside the archive.
15
+ */
16
+ export function roofFootprint(mesh, layer, rasterLayer) {
17
+ const map = layer._map, bounds = mesh.geometry.bounds, world = mesh.worldMatrix;
18
+ const zoom = tileZoomByLayer.get(rasterLayer)
19
+ const origin = map.project(sceneOriginByLayer.get(layer), zoom);
20
+ const scale = map.options.crs.scale(zoom) / (earthCirc * Math.cos(sceneOriginByLayer.get(layer).lat * radians));
21
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
22
+ let i, x, y, z, px, py, nw, se;
23
+ for (i = 0; i < 8; i++) {
24
+ x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];
25
+ z = i & 4 ? bounds.max[2] : bounds.min[2];
26
+ px = origin.x + (world[0] * x + world[4] * y + world[8] * z + world[12]) * scale;
27
+ py = origin.y + (world[2] * x + world[6] * y + world[10] * z + world[14]) * scale;
28
+ minX = Math.min(minX, px); minY = Math.min(minY, py);
29
+ maxX = Math.max(maxX, px); maxY = Math.max(maxY, py);
30
+ }
31
+ if (headerByLayer.get(rasterLayer).maxLat !== undefined && headerByLayer.get(rasterLayer).minLon !== undefined &&
32
+ headerByLayer.get(rasterLayer).minLat !== undefined && headerByLayer.get(rasterLayer).maxLon !== undefined) {
33
+ nw = map.project(/* alloc */ [headerByLayer.get(rasterLayer).maxLat, headerByLayer.get(rasterLayer).minLon], zoom);
34
+ se = map.project(/* alloc */ [headerByLayer.get(rasterLayer).minLat, headerByLayer.get(rasterLayer).maxLon], zoom);
35
+ minX = Math.max(minX, nw.x); minY = Math.max(minY, nw.y);
36
+ maxX = Math.min(maxX, se.x); maxY = Math.min(maxY, se.y);
37
+ if (minX >= maxX || minY >= maxY) return null;
38
+ }
39
+ return /* alloc */ [minX, minY, maxX, maxY];
40
+ }
@@ -1,11 +1,11 @@
1
- /**
2
- * Compare two 2D coordinates with the geometry tolerance.
3
- *
4
- * @param {Array<number>} a First coordinate.
5
- * @param {Array<number>} b Second coordinate.
6
- *
7
- * @returns {boolean} Whether both components are within tolerance.
8
- */
9
- export function samePoint(a, b) {
10
- return Math.abs(a[0] - b[0]) < 1e-10 && Math.abs(a[1] - b[1]) < 1e-10;
11
- }
1
+ /**
2
+ * Compare two 2D coordinates with the geometry tolerance.
3
+ *
4
+ * @param {Array<number>} a First coordinate.
5
+ * @param {Array<number>} b Second coordinate.
6
+ *
7
+ * @returns {boolean} Whether both components are within tolerance.
8
+ */
9
+ export function samePoint(a, b) {
10
+ return Math.abs(a[0] - b[0]) < 1e-10 && Math.abs(a[1] - b[1]) < 1e-10;
11
+ }
@@ -1,32 +1,32 @@
1
- import { L } from '../globals/L.js';
2
- import { triangle } from './appendNativeTriangle.js';
3
- import { disk } from './disk.js';
4
-
5
- /**
6
- * Append a stroke segment with optional square or round caps.
7
- *
8
- * @param {Object} context Line style and geometry buffers.
9
- * @param {L.Point} a Segment start.
10
- * @param {L.Point} b Segment end.
11
- * @param {boolean} startCap Whether to add a start cap.
12
- * @param {boolean} endCap Whether to add an end cap.
13
- */
14
- export function segment(context, a, b, startCap, endCap) {
15
- const { options, width, stroke, point } = context;
16
- const radius = width / 2;
17
- const anchorA = a, anchorB = b;
18
- const length = a.distanceTo(b);
19
- if (!length) return;
20
- const direction = b.subtract(a).divideBy(length);
21
- const normal = /* alloc */ new L.Point(-direction.y * radius, direction.x * radius);
22
- if (options.lineCap === 'square') {
23
- if (startCap) a = a.subtract(direction.multiplyBy(radius));
24
- if (endCap) b = b.add(direction.multiplyBy(radius));
25
- }
26
- triangle(point, stroke, a.add(normal), a.subtract(normal), b.add(normal), anchorA, anchorA, anchorB);
27
- triangle(point, stroke, b.add(normal), a.subtract(normal), b.subtract(normal), anchorB, anchorA, anchorB);
28
- if (options.lineCap === 'round') {
29
- if (startCap) disk(point, a, radius, stroke);
30
- if (endCap) disk(point, b, radius, stroke);
31
- }
32
- }
1
+ import { L } from '../globals/L.js';
2
+ import { triangle } from './appendNativeTriangle.js';
3
+ import { disk } from './disk.js';
4
+
5
+ /**
6
+ * Append a stroke segment with optional square or round caps.
7
+ *
8
+ * @param {Object} context Line style and geometry buffers.
9
+ * @param {L.Point} a Segment start.
10
+ * @param {L.Point} b Segment end.
11
+ * @param {boolean} startCap Whether to add a start cap.
12
+ * @param {boolean} endCap Whether to add an end cap.
13
+ */
14
+ export function segment(context, a, b, startCap, endCap) {
15
+ const { options, width, stroke, point } = context;
16
+ const radius = width / 2;
17
+ const anchorA = a, anchorB = b;
18
+ const length = a.distanceTo(b);
19
+ if (!length) return;
20
+ const direction = b.subtract(a).divideBy(length);
21
+ const normal = /* alloc */ new L.Point(-direction.y * radius, direction.x * radius);
22
+ if (options.lineCap === 'square') {
23
+ if (startCap) a = a.subtract(direction.multiplyBy(radius));
24
+ if (endCap) b = b.add(direction.multiplyBy(radius));
25
+ }
26
+ triangle(point, stroke, a.add(normal), a.subtract(normal), b.add(normal), anchorA, anchorA, anchorB);
27
+ triangle(point, stroke, b.add(normal), a.subtract(normal), b.subtract(normal), anchorB, anchorA, anchorB);
28
+ if (options.lineCap === 'round') {
29
+ if (startCap) disk(point, a, radius, stroke);
30
+ if (endCap) disk(point, b, radius, stroke);
31
+ }
32
+ }
@@ -1,28 +1,28 @@
1
- /**
2
- * Subtract a raster tile's footprint from uncovered roof rectangles.
3
- *
4
- * @param {Array<Array<number>>} remaining Uncovered pixel rectangles.
5
- * @param {Object} tile Raster tile with XYZ coordinates.
6
- * @param {number} zoom Zoom used by the rectangles.
7
- *
8
- * @returns {Array<Array<number>>} Remaining uncovered rectangles.
9
- */
10
- export function subtractRoofTile(remaining, tile, zoom) {
11
- const size = 256 * 2 ** (zoom - tile.coords.z);
12
- const left = tile.coords.x * size, top = tile.coords.y * size;
13
- const pieces = /* alloc */ [];
14
- let x0, y0, x1, y1, l, t, r, b;
15
- for ([x0, y0, x1, y1] of remaining) {
16
- l = Math.max(x0, left), t = Math.max(y0, top);
17
- r = Math.min(x1, left + size), b = Math.min(y1, top + size);
18
- if (l >= r || t >= b) {
19
- pieces.push(/* alloc */ [x0, y0, x1, y1]);
20
- continue;
21
- }
22
- if (y0 < t) pieces.push(/* alloc */ [x0, y0, x1, t]);
23
- if (b < y1) pieces.push(/* alloc */ [x0, b, x1, y1]);
24
- if (x0 < l) pieces.push(/* alloc */ [x0, t, l, b]);
25
- if (r < x1) pieces.push(/* alloc */ [r, t, x1, b]);
26
- }
27
- return pieces;
28
- }
1
+ /**
2
+ * Subtract a raster tile's footprint from uncovered roof rectangles.
3
+ *
4
+ * @param {Array<Array<number>>} remaining Uncovered pixel rectangles.
5
+ * @param {Object} tile Raster tile with XYZ coordinates.
6
+ * @param {number} zoom Zoom used by the rectangles.
7
+ *
8
+ * @returns {Array<Array<number>>} Remaining uncovered rectangles.
9
+ */
10
+ export function subtractRoofTile(remaining, tile, zoom) {
11
+ const size = 256 * 2 ** (zoom - tile.coords.z);
12
+ const left = tile.coords.x * size, top = tile.coords.y * size;
13
+ const pieces = /* alloc */ [];
14
+ let x0, y0, x1, y1, l, t, r, b;
15
+ for ([x0, y0, x1, y1] of remaining) {
16
+ l = Math.max(x0, left), t = Math.max(y0, top);
17
+ r = Math.min(x1, left + size), b = Math.min(y1, top + size);
18
+ if (l >= r || t >= b) {
19
+ pieces.push(/* alloc */ [x0, y0, x1, y1]);
20
+ continue;
21
+ }
22
+ if (y0 < t) pieces.push(/* alloc */ [x0, y0, x1, t]);
23
+ if (b < y1) pieces.push(/* alloc */ [x0, b, x1, y1]);
24
+ if (x0 < l) pieces.push(/* alloc */ [x0, t, l, b]);
25
+ if (r < x1) pieces.push(/* alloc */ [r, t, x1, b]);
26
+ }
27
+ return pieces;
28
+ }
@@ -1,36 +1,36 @@
1
- import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
- import { terrainGridsByLayer } from '../weakmaps/terrainGridsByLayer.js';
3
- import { demBuffer } from '../globals/demBuffer.js';
4
- import { terrainGrid } from './terrainGrid.js';
5
-
6
- /**
7
- * Get or create cached GPU buffers for a terrain grid subdivision count.
8
- *
9
- * @param {L.Layer} layer Terrain layer owning the cache.
10
- * @param {number} divisions Grid subdivisions per side.
11
- *
12
- * @returns {Object} GPU-backed grid attributes.
13
- */
14
- export function terrainBuffers(layer, divisions) {
15
- const device = rendererByLayer.get(layer).device
16
- let attributes = terrainGridsByLayer.get(layer).get(divisions);
17
- if (!attributes) {
18
- attributes = terrainGrid(divisions);
19
- let name, attribute;
20
- for ([name, attribute] of Object.entries(attributes)) {
21
- attribute.size ||= 1;
22
- attribute.count = attribute.data.length / attribute.size;
23
- attribute.indexFormat = 'uint16';
24
- attribute.buffer = device.createBuffer((
25
- demBuffer.size = Math.max(4, attribute.data.byteLength),
26
- demBuffer.usage = name === 'index'
27
- ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST
28
- : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
29
- demBuffer
30
- ));
31
- device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
32
- }
33
- terrainGridsByLayer.get(layer).set(divisions, attributes);
34
- }
35
- return attributes;
36
- }
1
+ import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
+ import { terrainGridsByLayer } from '../weakmaps/terrainGridsByLayer.js';
3
+ import { demBuffer } from '../globals/demBuffer.js';
4
+ import { terrainGrid } from './terrainGrid.js';
5
+
6
+ /**
7
+ * Get or create cached GPU buffers for a terrain grid subdivision count.
8
+ *
9
+ * @param {L.Layer} layer Terrain layer owning the cache.
10
+ * @param {number} divisions Grid subdivisions per side.
11
+ *
12
+ * @returns {Object} GPU-backed grid attributes.
13
+ */
14
+ export function terrainBuffers(layer, divisions) {
15
+ const device = rendererByLayer.get(layer).device
16
+ let attributes = terrainGridsByLayer.get(layer).get(divisions);
17
+ if (!attributes) {
18
+ attributes = terrainGrid(divisions);
19
+ let name, attribute;
20
+ for ([name, attribute] of Object.entries(attributes)) {
21
+ attribute.size ||= 1;
22
+ attribute.count = attribute.data.length / attribute.size;
23
+ attribute.indexFormat = 'uint16';
24
+ attribute.buffer = device.createBuffer((
25
+ demBuffer.size = Math.max(4, attribute.data.byteLength),
26
+ demBuffer.usage = name === 'index'
27
+ ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST
28
+ : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
29
+ demBuffer
30
+ ));
31
+ device.queue.writeBuffer(attribute.buffer, 0, attribute.data);
32
+ }
33
+ terrainGridsByLayer.get(layer).set(divisions, attributes);
34
+ }
35
+ return attributes;
36
+ }
@@ -1,28 +1,28 @@
1
- import { demByLayer } from '../weakmaps/demByLayer.js';
2
- import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
3
- import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
4
-
5
- /**
6
- * Create terrain tile geometry with bounds covering DEM-displaced elevations.
7
- *
8
- * @param {L.Layer} layer Terrain layer.
9
- * @param {Object} attributes Shared terrain grid attributes.
10
- * @param {number} sizeX Tile width in scene units.
11
- * @param {number} sizeZ Tile depth in scene units.
12
- *
13
- * @returns {Object} Tile geometry and bounds.
14
- */
15
- export function terrainTileGeometry(layer, attributes, sizeX, sizeZ) {
16
- const base = terrainOriginElevationByLayer.get(layer)
17
- const bottom = Math.min(demByLayer.get(layer).low, base) - base, top = Math.max(demByLayer.get(layer).high, base) - base;
18
- return /* alloc */ {
19
- device: rendererByLayer.get(layer).device,
20
- attributes,
21
- drawRange: /* alloc */ { start: 0, count: attributes.index.count },
22
- // Bounds must cover the DEM-displaced tile, although picking uses the flat grid.
23
- bounds: /* alloc */ {
24
- min: /* alloc */ [0, bottom, 0], max: /* alloc */ [1, top, 1], center: /* alloc */ [0.5, (bottom + top) / 2, 0.5],
25
- radius: Math.hypot(sizeX, top - bottom, sizeZ) / 2 / Math.max(sizeX, 1, sizeZ),
26
- },
27
- };
28
- }
1
+ import { demByLayer } from '../weakmaps/demByLayer.js';
2
+ import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
3
+ import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
4
+
5
+ /**
6
+ * Create terrain tile geometry with bounds covering DEM-displaced elevations.
7
+ *
8
+ * @param {L.Layer} layer Terrain layer.
9
+ * @param {Object} attributes Shared terrain grid attributes.
10
+ * @param {number} sizeX Tile width in scene units.
11
+ * @param {number} sizeZ Tile depth in scene units.
12
+ *
13
+ * @returns {Object} Tile geometry and bounds.
14
+ */
15
+ export function terrainTileGeometry(layer, attributes, sizeX, sizeZ) {
16
+ const base = terrainOriginElevationByLayer.get(layer)
17
+ const bottom = Math.min(demByLayer.get(layer).low, base) - base, top = Math.max(demByLayer.get(layer).high, base) - base;
18
+ return /* alloc */ {
19
+ device: rendererByLayer.get(layer).device,
20
+ attributes,
21
+ drawRange: /* alloc */ { start: 0, count: attributes.index.count },
22
+ // Bounds must cover the DEM-displaced tile, although picking uses the flat grid.
23
+ bounds: /* alloc */ {
24
+ min: /* alloc */ [0, bottom, 0], max: /* alloc */ [1, top, 1], center: /* alloc */ [0.5, (bottom + top) / 2, 0.5],
25
+ radius: Math.hypot(sizeX, top - bottom, sizeZ) / 2 / Math.max(sizeX, 1, sizeZ),
26
+ },
27
+ };
28
+ }
@@ -1,19 +1,19 @@
1
- /**
2
- * Validate tree radii, crown height and crown shape.
3
- *
4
- * @param {number} trunkRadius Trunk radius.
5
- * @param {number} crownRadius Crown radius.
6
- * @param {number} crownBottom Height where the crown begins.
7
- * @param {number} bottom Tree bottom height.
8
- * @param {number} top Tree top height.
9
- * @param {string} crownShape Crown shape.
10
- *
11
- * @throws {Error} If dimensions or crown shape are invalid.
12
- */
13
- export function validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape) {
14
- if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||
15
- trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||
16
- crownShape !== 'round' && crownShape !== 'cone') {
17
- throw /* alloc */ new Error('Invalid tree dimensions or crown shape');
18
- }
19
- }
1
+ /**
2
+ * Validate tree radii, crown height and crown shape.
3
+ *
4
+ * @param {number} trunkRadius Trunk radius.
5
+ * @param {number} crownRadius Crown radius.
6
+ * @param {number} crownBottom Height where the crown begins.
7
+ * @param {number} bottom Tree bottom height.
8
+ * @param {number} top Tree top height.
9
+ * @param {string} crownShape Crown shape.
10
+ *
11
+ * @throws {Error} If dimensions or crown shape are invalid.
12
+ */
13
+ export function validateTree(trunkRadius, crownRadius, crownBottom, bottom, top, crownShape) {
14
+ if (!Number.isFinite(trunkRadius) || !Number.isFinite(crownRadius) || !Number.isFinite(crownBottom) ||
15
+ trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||
16
+ crownShape !== 'round' && crownShape !== 'cone') {
17
+ throw /* alloc */ new Error('Invalid tree dimensions or crown shape');
18
+ }
19
+ }
package/src/globals/L.js CHANGED
@@ -1,6 +1,6 @@
1
- /**
2
- * Leaflet namespace supplied by the host environment.
3
- *
4
- * @type {Object}
5
- */
6
- export const L = globalThis.L;
1
+ /**
2
+ * Leaflet namespace supplied by the host environment.
3
+ *
4
+ * @type {Object}
5
+ */
6
+ export const L = globalThis.L;
@@ -1,8 +1,8 @@
1
- import { degrees } from './degrees.js';
2
-
3
- /**
4
- * Camera vertical field of view in degrees.
5
- *
6
- * @type {number}
7
- */
8
- export const cameraFov = 2 * Math.atan(1 / 3) * degrees;
1
+ import { degrees } from './degrees.js';
2
+
3
+ /**
4
+ * Camera vertical field of view in degrees.
5
+ *
6
+ * @type {number}
7
+ */
8
+ export const cameraFov = 2 * Math.atan(1 / 3) * degrees;
@@ -1,6 +1,6 @@
1
- /**
2
- * TIFF tag identifiers read from COG image directories.
3
- *
4
- * @type {Array<number>}
5
- */
6
- export const cogTags = [256, 257, 258, 259, 262, 277, 284, 317, 322, 323, 324, 325, 339, 33550, 33922, 34735];
1
+ /**
2
+ * TIFF tag identifiers read from COG image directories.
3
+ *
4
+ * @type {Array<number>}
5
+ */
6
+ export const cogTags = [256, 257, 258, 259, 262, 277, 284, 317, 322, 323, 324, 325, 339, 33550, 33922, 34735];
@@ -1,11 +1,11 @@
1
- /**
2
- * Reusable multisampled color texture descriptor for renderer resizing.
3
- *
4
- * @type {Object}
5
- */
6
- export const colorTexture = {
7
- size: [null, null],
8
- format: null,
9
- sampleCount: 4,
10
- usage: null
11
- };
1
+ /**
2
+ * Reusable multisampled color texture descriptor for renderer resizing.
3
+ *
4
+ * @type {Object}
5
+ */
6
+ export const colorTexture = {
7
+ size: [null, null],
8
+ format: null,
9
+ sampleCount: 4,
10
+ usage: null
11
+ };
@@ -1,8 +1,8 @@
1
- import { radians } from './radians.js';
2
-
3
- /**
4
- * Cosine of Earth's axial obliquity used in celestial position calculations.
5
- *
6
- * @type {number}
7
- */
8
- export const cosObliquity = Math.cos(23.4397 * radians);
1
+ import { radians } from './radians.js';
2
+
3
+ /**
4
+ * Cosine of Earth's axial obliquity used in celestial position calculations.
5
+ *
6
+ * @type {number}
7
+ */
8
+ export const cosObliquity = Math.cos(23.4397 * radians);
@@ -1,6 +1,6 @@
1
- /**
2
- * Conversion factor from radians to degrees.
3
- *
4
- * @type {number}
5
- */
6
- export const degrees = 180 / Math.PI;
1
+ /**
2
+ * Conversion factor from radians to degrees.
3
+ *
4
+ * @type {number}
5
+ */
6
+ export const degrees = 180 / Math.PI;
@@ -1,6 +1,6 @@
1
- /**
2
- * Equatorial circumference in meters using the Web Mercator Earth radius.
3
- *
4
- * @type {number}
5
- */
6
- export const earthCirc = 2 * Math.PI * 6378137;
1
+ /**
2
+ * Equatorial circumference in meters using the Web Mercator Earth radius.
3
+ *
4
+ * @type {number}
5
+ */
6
+ export const earthCirc = 2 * Math.PI * 6378137;