{"_id":"@bitruvius/sdk-maplibre","_rev":"8-e949f5c38602d269175c606bed5f39de","name":"@bitruvius/sdk-maplibre","dist-tags":{"latest":"0.3.3"},"versions":{"0.3.0":{"name":"@bitruvius/sdk-maplibre","version":"0.3.0","keywords":["bitruvius","geospatial","webgl2","maplibre","maplibre-gl","map","adapter"],"license":"SEE LICENSE IN LICENSE","_id":"@bitruvius/sdk-maplibre@0.3.0","maintainers":[{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},{"name":"danrhedges","email":"danrhedges@gmail.com"}],"homepage":"https://dev.bitruvius.com/sdks/js/","bugs":{"url":"https://github.com/bitruvius/support"},"dist":{"shasum":"efc867b17ea2f52721a7500cfaf0f2a08ea63a88","tarball":"https://registry.npmjs.org/@bitruvius/sdk-maplibre/-/sdk-maplibre-0.3.0.tgz","fileCount":164,"integrity":"sha512-yDZRUMCgoy4JLCwsf2BkMNJrLU3N5WeuZX3nzrqPvQCIElJLK39RKdnKhqyQweDQQkIxhPqn9R5KBIR8NGUzDw==","signatures":[{"sig":"MEUCIHw/B5L/DHW21gooFpbjIz96TdcBg/ZJeWHUtbU5udhLAiEA1LZTomzMXwf6nRH9cqHXqwcwgcXtXe8h0NCK22PHO7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1261703},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"efc867b17ea2f52721a7500cfaf0f2a08ea63a88","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"bun build ./src/index.ts --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && bun build ./src/elevation/dem-tile-worker.ts --root ./src/elevation --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && tsc --emitDeclarationOnly","gen:datums":"bun scripts/gen-vertical-crs.mjs"},"_npmUser":{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},"_integrity":"sha512-yDZRUMCgoy4JLCwsf2BkMNJrLU3N5WeuZX3nzrqPvQCIElJLK39RKdnKhqyQweDQQkIxhPqn9R5KBIR8NGUzDw==","_npmVersion":"10.8.3","description":"Stream 3D Tiles and I3S services, lidar point clouds, Gaussian splats and elevation terrain into MapLibre GL JS","directories":{},"sideEffects":["./src/index.ts"],"_nodeVersion":"24.3.0","dependencies":{"@bitruvius/bvc":"^0.3.0","@bitruvius/i3s":"^0.3.0","@bitruvius/gltf":"^0.3.0","@bitruvius/ktx2":"^0.3.0","@bitruvius/mesh":"^0.3.0","@bitruvius/draco":"^0.3.0","@bitruvius/geoid":"^0.3.0","@bitruvius/splats":"^0.3.0","@bitruvius/ptcloud":"^0.3.0","@bitruvius/tiles3d":"^0.3.0","@bitruvius/geo-core":"^0.3.0","@bitruvius/turbo-spz":"^0.3.0","@bitruvius/foundation":"^0.3.0","@bitruvius/turbo-lerc":"^0.3.0","@bitruvius/turbo-lepcc":"^0.3.0","@bitruvius/tiles3d-mesh":"^0.3.0","@bitruvius/point-symbols":"^0.3.0","@bitruvius/render-runtime":"^0.3.0","@bitruvius/tiles3d-points":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"epsg-index":"^2.0.0","maplibre-gl":"^6.0.0","maplibre-gl-v500":"npm:maplibre-gl@5.0.0","maplibre-gl-v524":"npm:maplibre-gl@5.24.0","maplibre-gl-vmid":"npm:maplibre-gl@5.14.0","@bitruvius/spz-legacy":"^0.2.15","@bitruvius/lepcc-legacy":"^0.2.15"},"peerDependencies":{"maplibre-gl":">=5 <7"},"_npmOperationalInternal":{"tmp":"tmp/sdk-maplibre_0.3.0_1785722209606_0.19317556925563095","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bitruvius/sdk-maplibre","version":"0.3.1","keywords":["bitruvius","geospatial","webgl2","maplibre","maplibre-gl","map","adapter"],"license":"SEE LICENSE IN LICENSE","_id":"@bitruvius/sdk-maplibre@0.3.1","maintainers":[{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},{"name":"danrhedges","email":"danrhedges@gmail.com"}],"homepage":"https://dev.bitruvius.com/sdks/js/","bugs":{"url":"https://github.com/bitruvius/support"},"dist":{"shasum":"655e7af492f81cc79e0034b4e3e1d69d3f206dc5","tarball":"https://registry.npmjs.org/@bitruvius/sdk-maplibre/-/sdk-maplibre-0.3.1.tgz","fileCount":164,"integrity":"sha512-atc/Kh9h0X17rAWK32U8/gqhQUAjUemyhW+YkkybwQSA1LdjMJjc+tpa4xzbkr/91MVD8XPLg5EDixhogbr63Q==","signatures":[{"sig":"MEYCIQCceL6sPzrm0/1cIKvUGLMkpL0mgLp8T+tQQZu1E6LQ4wIhAIynnwNLusLX3Ue1DWlh1qWD7Yx4AdyA3ZzgjYkbAiCC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1261881},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"655e7af492f81cc79e0034b4e3e1d69d3f206dc5","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"bun build ./src/index.ts --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && bun build ./src/elevation/dem-tile-worker.ts --root ./src/elevation --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && tsc --emitDeclarationOnly","gen:datums":"bun scripts/gen-vertical-crs.mjs"},"_npmUser":{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},"_integrity":"sha512-atc/Kh9h0X17rAWK32U8/gqhQUAjUemyhW+YkkybwQSA1LdjMJjc+tpa4xzbkr/91MVD8XPLg5EDixhogbr63Q==","_npmVersion":"10.8.3","description":"Stream 3D Tiles and I3S services, lidar point clouds, Gaussian splats and elevation terrain into MapLibre GL JS","directories":{},"sideEffects":["./src/index.ts"],"_nodeVersion":"24.3.0","dependencies":{"@bitruvius/bvc":"^0.3.1","@bitruvius/i3s":"^0.3.1","@bitruvius/gltf":"^0.3.1","@bitruvius/ktx2":"^0.3.1","@bitruvius/mesh":"^0.3.1","@bitruvius/draco":"^0.3.1","@bitruvius/geoid":"^0.3.1","@bitruvius/splats":"^0.3.1","@bitruvius/ptcloud":"^0.3.1","@bitruvius/tiles3d":"^0.3.1","@bitruvius/geo-core":"^0.3.1","@bitruvius/turbo-spz":"^0.3.1","@bitruvius/foundation":"^0.3.1","@bitruvius/turbo-lerc":"^0.3.1","@bitruvius/turbo-lepcc":"^0.3.1","@bitruvius/tiles3d-mesh":"^0.3.1","@bitruvius/point-symbols":"^0.3.1","@bitruvius/render-runtime":"^0.3.1","@bitruvius/tiles3d-points":"^0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"epsg-index":"^2.0.0","maplibre-gl":"^6.0.0","maplibre-gl-v500":"npm:maplibre-gl@5.0.0","maplibre-gl-v524":"npm:maplibre-gl@5.24.0","maplibre-gl-vmid":"npm:maplibre-gl@5.14.0","@bitruvius/spz-legacy":"^0.2.15","@bitruvius/lepcc-legacy":"^0.2.15"},"peerDependencies":{"maplibre-gl":">=5 <7"},"_npmOperationalInternal":{"tmp":"tmp/sdk-maplibre_0.3.1_1785725533871_0.4167738271055883","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bitruvius/sdk-maplibre","version":"0.3.2","keywords":["bitruvius","geospatial","webgl2","maplibre","maplibre-gl","map","adapter"],"license":"SEE LICENSE IN LICENSE","_id":"@bitruvius/sdk-maplibre@0.3.2","maintainers":[{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},{"name":"danrhedges","email":"danrhedges@gmail.com"}],"homepage":"https://dev.bitruvius.com/sdks/js/","bugs":{"url":"https://github.com/bitruvius/support"},"dist":{"shasum":"019a209583c0b2ca199494091b60943e1bc5d002","tarball":"https://registry.npmjs.org/@bitruvius/sdk-maplibre/-/sdk-maplibre-0.3.2.tgz","fileCount":164,"integrity":"sha512-8f5dJnwd+/4M7lH6Nr8Qq8/rzPC6HlrzymkAFzxhkTyYfWPH+VqpUzyU59tZTmmFrm9Pytl9NFV4Nyayh9AqYg==","signatures":[{"sig":"MEUCIEF3PsciDbimUf2zuRjTC1/XXrA5sJPFDx9sO2ce6BewAiEApc7YmLYeo8gSSTWJLGewmqFnsEdfXhYQtQSvL79S2Fo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1262267},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"019a209583c0b2ca199494091b60943e1bc5d002","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"bun build ./src/index.ts --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && bun build ./src/elevation/dem-tile-worker.ts --root ./src/elevation --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && tsc --emitDeclarationOnly","gen:datums":"bun scripts/gen-vertical-crs.mjs"},"_npmUser":{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},"_integrity":"sha512-8f5dJnwd+/4M7lH6Nr8Qq8/rzPC6HlrzymkAFzxhkTyYfWPH+VqpUzyU59tZTmmFrm9Pytl9NFV4Nyayh9AqYg==","_npmVersion":"10.8.3","description":"Stream 3D Tiles and I3S services, lidar point clouds, Gaussian splats and elevation terrain into MapLibre GL JS","directories":{},"sideEffects":["./src/index.ts"],"_nodeVersion":"24.3.0","dependencies":{"@bitruvius/bvc":"^0.3.2","@bitruvius/i3s":"^0.3.2","@bitruvius/gltf":"^0.3.2","@bitruvius/ktx2":"^0.3.2","@bitruvius/mesh":"^0.3.2","@bitruvius/draco":"^0.3.2","@bitruvius/geoid":"^0.3.2","@bitruvius/splats":"^0.3.2","@bitruvius/ptcloud":"^0.3.2","@bitruvius/tiles3d":"^0.3.2","@bitruvius/geo-core":"^0.3.2","@bitruvius/turbo-spz":"^0.3.2","@bitruvius/foundation":"^0.3.2","@bitruvius/turbo-lerc":"^0.3.2","@bitruvius/turbo-lepcc":"^0.3.2","@bitruvius/tiles3d-mesh":"^0.3.2","@bitruvius/point-symbols":"^0.3.2","@bitruvius/render-runtime":"^0.3.2","@bitruvius/tiles3d-points":"^0.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"epsg-index":"^2.0.0","maplibre-gl":"^6.0.0","maplibre-gl-v500":"npm:maplibre-gl@5.0.0","maplibre-gl-v524":"npm:maplibre-gl@5.24.0","maplibre-gl-vmid":"npm:maplibre-gl@5.14.0","@bitruvius/spz-legacy":"^0.2.15","@bitruvius/lepcc-legacy":"^0.2.15"},"peerDependencies":{"maplibre-gl":">=5 <7"},"_npmOperationalInternal":{"tmp":"tmp/sdk-maplibre_0.3.2_1785952501106_0.5339183652606092","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"_id":"@bitruvius/sdk-maplibre@0.3.3","bugs":{"url":"https://github.com/bitruvius/support"},"dist":{"shasum":"a14515c6a834cdf0652d0f3bf7d5fcdce898ee96","tarball":"https://registry.npmjs.org/@bitruvius/sdk-maplibre/-/sdk-maplibre-0.3.3.tgz","fileCount":164,"integrity":"sha512-JZVuBzYS6UEUxztlwxzoB7Bboz22cUQikt3LEUIbknA4/+jmK+n5PTVqqldfEuST/h4zsDVRXQgj6d7PAfHx9A==","signatures":[{"sig":"MEYCIQDtYbLHkrbkLVUOeFpjo5L+yiR4P3REj0BQ8I1Ax3CoaQIhAJubjL5Ick2T9T+L95ds6iiTDvnKn113pfSC3NEWjPmJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGwsIV0Gdr+355RmA5RrRahYO9bpqUPdnVEbNRxs8viNAiEA8tAMxIeOYWkJd3691x3twaKXQOEh3iDeeSP7TEQx7gM="}],"unpackedSize":1277452},"main":"./dist/index.js","name":"@bitruvius/sdk-maplibre","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"a14515c6a834cdf0652d0f3bf7d5fcdce898ee96","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"license":"SEE LICENSE IN LICENSE","scripts":{"test":"bun test","build":"bun build ./src/index.ts --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && bun build ./src/elevation/dem-tile-worker.ts --root ./src/elevation --outdir dist --format esm --target browser --minify --external '@bitruvius/*' --external maplibre-gl && tsc --emitDeclarationOnly","gen:datums":"bun scripts/gen-vertical-crs.mjs"},"version":"0.3.3","_npmUser":{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},"homepage":"https://dev.bitruvius.com/sdks/js/","keywords":["bitruvius","geospatial","webgl2","maplibre","maplibre-gl","map","adapter"],"_integrity":"sha512-JZVuBzYS6UEUxztlwxzoB7Bboz22cUQikt3LEUIbknA4/+jmK+n5PTVqqldfEuST/h4zsDVRXQgj6d7PAfHx9A==","_npmVersion":"10.8.3","description":"Stream 3D Tiles and I3S services, lidar point clouds, Gaussian splats and elevation terrain into MapLibre GL JS","directories":{},"maintainers":[{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},{"name":"danrhedges","email":"danrhedges@gmail.com"}],"sideEffects":["./src/index.ts"],"_nodeVersion":"24.3.0","dependencies":{"@bitruvius/bvc":"^0.3.3","@bitruvius/i3s":"^0.3.3","@bitruvius/gltf":"^0.3.3","@bitruvius/ktx2":"^0.3.3","@bitruvius/mesh":"^0.3.3","@bitruvius/draco":"^0.3.3","@bitruvius/geoid":"^0.3.3","@bitruvius/splats":"^0.3.3","@bitruvius/ptcloud":"^0.3.3","@bitruvius/tiles3d":"^0.3.3","@bitruvius/geo-core":"^0.3.3","@bitruvius/turbo-spz":"^0.3.3","@bitruvius/foundation":"^0.3.3","@bitruvius/turbo-lerc":"^0.3.3","@bitruvius/turbo-lepcc":"^0.3.3","@bitruvius/tiles3d-mesh":"^0.3.3","@bitruvius/point-symbols":"^0.3.3","@bitruvius/render-runtime":"^0.3.3","@bitruvius/tiles3d-points":"^0.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"epsg-index":"^2.0.0","maplibre-gl":"^6.0.0","maplibre-gl-v500":"npm:maplibre-gl@5.0.0","maplibre-gl-v524":"npm:maplibre-gl@5.24.0","maplibre-gl-vmid":"npm:maplibre-gl@5.14.0","@bitruvius/spz-legacy":"^0.2.15","@bitruvius/lepcc-legacy":"^0.2.15"},"peerDependencies":{"maplibre-gl":">=5 <7"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk-maplibre_0.3.3_1790300308209_0.22733219683535055"}}},"time":{"created":"2026-08-03T01:56:49.339Z","modified":"2026-09-25T01:38:28.488Z","0.1.0":"2026-07-24T21:36:39.449Z","0.3.0":"2026-08-03T01:56:49.805Z","0.3.1":"2026-08-03T02:52:14.041Z","0.3.2":"2026-08-05T17:55:01.291Z","0.3.3":"2026-09-25T01:38:28.310Z"},"bugs":{"url":"https://github.com/bitruvius/support"},"license":"SEE LICENSE IN LICENSE","homepage":"https://dev.bitruvius.com/sdks/js/","keywords":["bitruvius","geospatial","webgl2","maplibre","maplibre-gl","map","adapter"],"description":"Stream 3D Tiles and I3S services, lidar point clouds, Gaussian splats and elevation terrain into MapLibre GL JS","maintainers":[{"name":"geoffhtaylor3d","email":"geoffhtaylor3d@gmail.com"},{"name":"danrhedges","email":"danrhedges@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://bitruvius.com\"><img src=\"https://cdn.bitruvius.com/brand/bitruvius-logo.png\" width=\"360\" alt=\"Bitruvius\"></a>\n</p>\n\n# @bitruvius/sdk-maplibre\n\n**City-scale 3D in MapLibre GL JS, in a few lines of code.**\n\nStream OGC 3D Tiles and OGC I3S scene services, photogrammetric mesh, LiDAR\npoint clouds, Gaussian splats, 3D objects and elevation services directly into\nthe MapLibre map you already have. Planet-wide tilesets included. No second\nglobe engine beside your map, no viewer to migrate onto, no rebuild of your app.\n\n> **Turbocharged by [Bitruvius TurboLEPCC](https://bitruvius.com/turbo-lepcc),\n> [Bitruvius TurboLERC](https://bitruvius.com/turbolerc) and\n> [Bitruvius TurboSPZ](https://bitruvius.com/turbo-spz).**\n> **Powered by [Bitruvius BVC](https://bitruvius.com/bvc), a Bitruvius flagship codec.**\n\nThe formats that dominate the wire are decoded by Bitruvius codecs written from\nscratch for the browser. Point clouds, splats and elevation rasters each get a\ndecoder built for that payload, running off the main thread, so the map keeps\nits frame budget while a city streams in.\n\n## A layer is one call\n\n```ts\nimport * as maplibregl from 'maplibre-gl';\nimport { I3sPointCloudLayer, prepareMapLibre } from '@bitruvius/sdk-maplibre';\n\nawait prepareMapLibre(maplibregl);\nconst map = new maplibregl.Map({ container: 'map', style, pitch: 60 });\n\nmap.addLayer(new I3sPointCloudLayer({ id: 'lidar', url: SCENE_SERVER_URL }));\n```\n\nThat is the whole integration. The layer discovers the service, works out where\non Earth it belongs, streams it at the level of detail the current camera needs,\nand renders it in the same pass as your basemap.\n\nTerrain from an elevation service is one call too:\n\n```ts\nawait addEsriTerrain(map, { url: IMAGE_SERVER_URL, maplibregl });\n```\n\n## What you don't have to build\n\nRendering the geometry is the straightforward part. Making independently\npublished services agree, with the terrain, with your basemap, and with each\nother, is where these integrations stall.\n\n| Capability | What it does |\n| --- | --- |\n| **Registered to the planet** | Content is placed by its own earth-centered geometry, not by a hand-tuned offset, so a planet-wide tileset lands correctly anywhere you fly and two services over the same block agree with each other and with your basemap. |\n| **Lands on the ground** | Layers seat themselves on the terrain instead of floating above it or sinking through it. Draping is automatic, and re-seats when terrain or exaggeration changes. |\n| **Heights that agree** | Services publish against different vertical datums. The SDK reads the declared vertical CRS, applies the geoid separation, and puts data at the elevation it actually means, so a mesh and a point cloud of the same street line up. |\n| **Any grid on Earth** | Services published on national grids stream and place correctly, not only Web Mercator ones. |\n| **Many services, one layer** | `unifyLayers()` drives a set of services as a single layer, with one memory budget and one set of controls. A city published as 57 separate suburb services behaves like one city. |\n| **One memory ceiling** | Streaming stays inside a budget you set, so a phone and a workstation both stay upright instead of the tab dying at altitude. |\n| **Correct in the map** | Layers respect the map's pitch, terrain, label ordering and attribution rules, so 3D content composites with your basemap rather than covering it. |\n\n## What you can load\n\nBoth major open standards, across every content type they carry. 3D Tiles and\nI3S are [OGC Community Standards](https://www.ogc.org/standards/), so this is an\nimplementation of published specifications, not a reverse-engineered reader\npointed at one vendor's services:\n\n| Content type | 3D Tiles | I3S |\n| --- | :-: | :-: |\n| Integrated mesh and photogrammetry | ● | ● |\n| LiDAR point clouds | ● | ● |\n| Gaussian splats | ● | |\n| 3D objects | ● | ● |\n| Buildings and BIM interiors | ● | ● |\n| Instanced point features | | ● |\n\nThat includes planet-wide photorealistic mesh: point the mesh layer at a global\ntileset, bring your own provider key, and fly. There is no per-city URL and no\nspecial code path.\n\nWhere your own capture overlaps it, cut the global mesh away with polygon clip\nmasks: up to 256 footprints per layer, concave or holed, each clipping only above an\noptional floor, so your mesh reads as the ground there and the global one stays\neverywhere else. Masks work on the streaming 3D Tiles and I3S mesh, building,\npoint cloud and splat layers.\n\n```ts\nglobalMesh.setClipMasks({ masks: [{ rings: site.coordinates, floor: groundHeight }] });\n```\n\n### Bitruvius formats, first class\n\n[**BVC**](https://bitruvius.com/bvc) is the Bitruvius flagship volumetric\ncontainer, and the SDK renders it natively. One format carries both of the\nthings 3D actually ships in, splats and LiDAR point clouds, losslessly, and the\ndecoder is built to feed the GPU rather than fight it.\n\n```ts\nmap.addLayer(new BvcMapLibreLayer({ id: 'scene', url: '/assets/scene.bvc', anchor }));\n```\n\nStandalone SPZ captures and LEPCC point clouds drop in the same way. All of them\nplace at a lng/lat using a friendly placement vocabulary, up axis, heading,\npitch, roll, scale and anchor point, rather than raw matrices, and you can\nre-orient a loaded asset live without re-decoding it.\n\n**Elevation.** Elevation image services become MapLibre terrain in one call,\ndecoded with TurboLERC.\n\n## Tools people expect\n\nDrop-in widgets, themeable, working against whatever you have loaded:\n\n**Measure** distance, area, height and volume, snapping to meshes, point clouds\nand splats. **Elevation profile** along a drawn line. **Slice** a clipping\nvolume through a tileset. **First-person**\nwalkthrough, outdoors or inside a building. **Sun control** for time-of-day\nrelighting and shadows. **Layer settings** for live symbology and detail tuning.\n\n```ts\nmap.addControl(new MeasurementWidget({ pickLayers: [layer] }), 'top-right');\n```\n\n## Install\n\n```sh\nnpm i @bitruvius/sdk-maplibre maplibre-gl\n```\n\n`maplibre-gl` is a peer dependency (`>=5 <7`); v5 and v6 are both supported from\none build. Call `await prepareMapLibre(maplibregl)` once before your first map.\nA self-contained ESM bundle is also published on the Bitruvius CDN if you would\nrather skip the bundler entirely.\n\n**TypeScript and JavaScript both work.** Type declarations ship with every\npackage, so there is no `@types` install and no configuration to get full\nautocomplete.\n\n**The SDK is ESM only.** `import` is supported; `require()` is not, and there is\nno CommonJS build. Vite, webpack 5, Rollup, esbuild and modern Next.js handle\nthis without configuration. In Node, use `\"type\": \"module\"` or an `.mjs` entry.\nMapLibre GL JS v6 is ESM only as well, so a project on the SDK is already in\nthat world.\n\n## Learn more\n\n- **[Live examples](https://dev.bitruvius.com/bitruvius-sdk-js/examples/)**: every layer type and widget, running, with source\n- **[Documentation](https://dev.bitruvius.com/sdks/js/)**: guides and the full API reference\n- **[Support](https://github.com/bitruvius/support)**: questions and issues\n\n## Third-party data and services\n\nThe SDK is software, not a data licence. It grants you no right to any dataset,\nbasemap, tileset or service it is able to connect to.\n\nBring your own credentials. Google Photorealistic 3D Tiles needs a Google Maps\nPlatform API key, Cesium ion assets need an ion token, and secured ArcGIS\nservices need an ArcGIS token or API key. What you may then do with the data\nthose unlock is governed by your agreement with that provider, and nothing here\nadds to it or substitutes for it.\n\n**Attribution is usually a licence condition, not a courtesy.** Providers\ngenerally require the data credit to remain visible to the end user. The SDK\nreads each layer's attribution and composes it into the map's attribution\ncontrol for you, but keeping it displayed is your obligation, not ours.\n\nCredentials are treated as yours. A token is sent only to the origin it was\nminted for, never to some other host named by a tileset that happens to\nreference it, and is never logged. A tile that fails to load is recoverable in a\nway that a leaked key is not. See\n[`@bitruvius/esri-auth`](https://www.npmjs.com/package/@bitruvius/esri-auth) for\nArcGIS sign-in.\n\n## Trademarks\n\n3D Tiles and I3S are OGC Community Standards. OGC is a trademark of the Open\nGeospatial Consortium. Esri, ArcGIS, I3S, LERC and LEPCC are trademarks of\nEnvironmental Systems Research Institute, Inc. Cesium and 3D Tiles are trademarks of Cesium\nGS, Inc. Google is a trademark of Google LLC. Niantic and SPZ are trademarks of\nNiantic, Inc. MapLibre is a trademark of the MapLibre organization. All other\nmarks are the property of their respective owners.\n\nThese names are used solely to describe the data formats and services this\nsoftware interoperates with. Bitruvius is not affiliated with, sponsored by, or\nendorsed by any of them, and no such relationship is implied. Implementing a\npublished specification is not a claim of certification: Bitruvius has not\nundergone OGC compliance testing for any standard. Use of any third-party\nservice remains subject to that provider's own terms and licensing.\n\n## License\n\nProprietary. The full terms ship as `LICENSE` inside this package, and are readable\nbefore installing at [cdn.bitruvius.com/legal/sdk-license-v1.txt](https://cdn.bitruvius.com/legal/sdk-license-v1.txt).\n\n© Bitruvius, Inc.\n","readmeFilename":"README.md"}