leaflet-city-mapper 0.0.6 → 0.0.8
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 +11 -6
- package/cucumber.mjs +1 -3
- package/dist/leaflet-city-mapper-src.js +8574 -7879
- package/dist/leaflet-city-mapper-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker-src.js +2776 -0
- package/dist/leaflet-city-mapper-worker-src.js.map +4 -4
- package/dist/leaflet-city-mapper-worker.js +1 -1
- package/dist/leaflet-city-mapper-worker.js.map +4 -4
- package/dist/leaflet-city-mapper.js +5 -3
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-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 +2 -2
- package/src/camera/mapCamera.js +7 -7
- package/src/camera/mapTryAnimatedPan.js +4 -4
- package/src/camera/setBearing.js +5 -0
- package/src/camera/setPitch.js +5 -0
- package/src/camera/updateMapCamera.js +8 -6
- package/src/cog/initCog.js +2 -2
- 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 +12 -4
- package/src/core/layerAddInitHook.js +7 -0
- package/src/core/layerCallInitHooks.js +13 -13
- package/src/core/layerMergeOptions.js +7 -0
- package/src/core/markerSetPos.js +1 -1
- package/src/core/popupGetEvents.js +1 -1
- package/src/core/popupUpdatePosition.js +8 -8
- package/src/core/projectNativePath.js +23 -0
- package/src/core/tooltipGetEvents.js +1 -1
- package/src/core/tooltipSetPosition.js +2 -2
- package/src/geometry/appendNativeTriangle.js +2 -2
- package/src/geometry/circleGeometry.js +4 -3
- package/src/geometry/createModelGeometry.js +2 -9
- package/src/geometry/dashedSegment.js +10 -5
- package/src/geometry/disk.js +1 -1
- package/src/geometry/fillNativePolygon.js +20 -0
- package/src/geometry/lineJoin.js +2 -2
- package/src/geometry/markerQuadCorners.js +6 -0
- package/src/geometry/nativeGeometry.js +1 -1
- package/src/geometry/polygon.js +4 -10
- package/src/geometry/segment.js +4 -3
- package/src/globals/colorTexture.js +6 -0
- package/src/globals/depthTexture.js +1 -0
- package/src/globals/drawMeshEntry.js +1 -1
- package/src/globals/layerControlAddItem.js +3 -0
- package/src/globals/leafletLayer.js +3 -0
- package/src/globals/meshPipeline.js +1 -0
- package/src/globals/mvtTextDecoder.js +1 -0
- package/src/globals/nativeScalableStyleKeys.js +1 -0
- package/src/globals/scenePass.js +1 -0
- package/src/globals/vectorStyleNamedColors.js +8 -0
- package/src/globals/vectorTileEvents.js +1 -0
- package/src/globals/workerCogSource.js +1 -0
- package/src/gpu/initializeRendererResources.js +10 -12
- package/src/gpu/mountRenderer.js +4 -11
- package/src/gpu/releaseRenderer.js +1 -0
- package/src/index.js +31 -22
- 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/materials/createProgramUniforms.js +1 -0
- package/src/models/loadModel.js +6 -10
- package/src/models/loadModelResources.js +2 -8
- package/src/models/modelNode.js +3 -7
- package/src/models/prepareModel.js +19 -0
- package/src/models/prepareModelGeometry.js +25 -0
- package/src/models/prepareModelPrimitive.js +17 -0
- package/src/mvt/addMvtCrossings.js +17 -0
- package/src/mvt/appendMvtBandTriangles.js +31 -0
- package/src/mvt/appendMvtCoordinates.js +11 -0
- package/src/mvt/appendMvtPolygonTriangles.js +19 -0
- package/src/mvt/beginMvtPath.js +9 -0
- package/src/mvt/closeMvtPath.js +7 -0
- package/src/mvt/collectMvtEdges.js +19 -0
- package/src/mvt/createMvtReader.js +7 -0
- package/src/mvt/decodeVectorTile.js +32 -0
- package/src/mvt/expectMvtWire.js +3 -0
- package/src/mvt/finishMvtPath.js +5 -0
- package/src/mvt/finiteMvtCoordinate.js +7 -0
- package/src/mvt/groupMvtPolygons.js +25 -0
- package/src/mvt/isMvtFallbackError.js +6 -0
- package/src/mvt/mergeMvtActiveEdges.js +9 -0
- package/src/mvt/mvtEdgeX.js +4 -0
- package/src/mvt/mvtPathsVertices.js +8 -0
- package/src/mvt/mvtPolygonPaths.js +12 -0
- package/src/mvt/numericMvtValue.js +4 -0
- package/src/mvt/readMvtFeature.js +34 -0
- package/src/mvt/readMvtField.js +8 -0
- package/src/mvt/readMvtGeometry.js +29 -0
- package/src/mvt/readMvtInteger.js +12 -0
- package/src/mvt/readMvtKnownValue.js +21 -0
- package/src/mvt/readMvtLayer.js +31 -0
- package/src/mvt/readMvtMessage.js +10 -0
- package/src/mvt/readMvtNumber.js +9 -0
- package/src/mvt/readMvtNumbers.js +11 -0
- package/src/mvt/readMvtString.js +6 -0
- package/src/mvt/readMvtValue.js +19 -0
- package/src/mvt/skipMvtField.js +14 -0
- package/src/mvt/sortMvtActiveEdges.js +15 -0
- package/src/mvt/sortedMvtLevels.js +22 -0
- package/src/mvt/takeMvtBytes.js +8 -0
- package/src/mvt/tessellateVectorRings.js +19 -0
- package/src/mvt/triangulateVectorRings.js +19 -0
- package/src/native/beforeNativeRender.js +6 -0
- package/src/native/canScaleNativeStyle.js +17 -0
- package/src/native/createNativeMesh.js +31 -0
- package/src/native/disposeNativeLayer.js +1 -1
- package/src/native/getGridTerrainTile.js +34 -0
- package/src/native/gridTerrainElevation.js +26 -0
- package/src/native/loadGridTerrain.js +26 -0
- package/src/native/nativeLayer.js +2 -2
- package/src/native/nativeLayerMethod.js +5 -14
- package/src/native/nativeProgram.js +20 -0
- package/src/native/nativeTerrainElevation.js +16 -0
- package/src/native/nativeVectorGeometry.js +23 -0
- package/src/native/orderNativeGridLayer.js +14 -0
- package/src/native/prepareGridTerrainRequests.js +16 -0
- package/src/native/putNativeMesh.js +15 -21
- package/src/native/refreshNativeEvent.js +13 -2
- package/src/native/refreshNativeLayer.js +1 -0
- package/src/native/retainGridTerrain.js +10 -0
- package/src/native/syncGridLayer.js +17 -19
- package/src/native/syncGridTile.js +18 -0
- package/src/native/syncNativeStrokeAnchors.js +12 -0
- package/src/native/syncNativeStrokeZoom.js +29 -0
- package/src/native/syncTerrainGridTile.js +28 -0
- package/src/native/syncVectorLayer.js +15 -13
- package/src/native/terrainGridMesh.js +34 -0
- package/src/native/updateNativeStrokeRadius.js +9 -0
- package/src/projections/displayContainerPoint.js +23 -3
- package/src/projections/groundBounds.js +2 -2
- package/src/projections/localPixel.js +7 -2
- package/src/projections/localPixelForGeometry.js +4 -2
- package/src/projections/projectCameraPoint.js +6 -5
- package/src/rendering/collectVisibleMesh.js +5 -2
- package/src/rendering/drawGeometry.js +11 -11
- package/src/rendering/drawSceneMeshes.js +3 -1
- package/src/rendering/nativeStrokeExpansion.js +4 -0
- package/src/rendering/prepareMeshUniforms.js +2 -0
- package/src/rendering/resizeRenderer.js +20 -10
- package/src/scene/initializerFor.js +4 -5
- package/src/scene/layerInitialize.js +14 -12
- package/src/scene/resolveNextInitialization.js +1 -1
- package/src/shaders/materialShaders.js +1 -0
- package/src/shaders/materialVertexShader.js +7 -2
- package/src/shaders/nativeStrokeShader.js +6 -0
- package/src/shadows/drawShadowMeshes.js +6 -5
- package/src/sources/attachAreaMesh.js +5 -6
- package/src/sources/buildArea.js +4 -5
- package/src/sources/buildAreaFeature.js +3 -19
- package/src/sources/initVectorTiles.js +15 -0
- package/src/sources/isVectorTileSource.js +4 -0
- package/src/sources/pumpSourceAreas.js +1 -1
- package/src/sources/readyVectorTiles.js +10 -0
- package/src/sources/sourceAreaContext.js +1 -6
- package/src/sunlight/createSun.js +0 -1
- package/src/sunlight/initSunlight.js +19 -8
- package/src/terrain/initTerrain.js +7 -1
- package/src/terrain/loadTerrain.js +4 -1
- package/src/terrain/mapElevationOf.js +5 -1
- package/src/terrain/onTerrainAdd.js +11 -1
- package/src/terrain/onTerrainRemove.js +10 -1
- package/src/textures/nativeTextureFor.js +2 -3
- package/src/textures/uploadCanvasTexture.js +11 -2
- package/src/utils/yieldTask.js +5 -0
- package/src/vector-style/appendQuotedStyleCharacter.js +22 -0
- package/src/vector-style/arrayContainsRange.js +8 -0
- package/src/vector-style/evaluateBoolean.js +18 -0
- package/src/vector-style/evaluateCoalesceOrCase.js +21 -0
- package/src/vector-style/evaluateComparison.js +16 -0
- package/src/vector-style/evaluateIExpression.js +8 -0
- package/src/vector-style/evaluateInput.js +6 -0
- package/src/vector-style/evaluateInterpolate.js +27 -0
- package/src/vector-style/evaluateMatch.js +12 -0
- package/src/vector-style/evaluateMath.js +14 -0
- package/src/vector-style/evaluateMembership.js +18 -0
- package/src/vector-style/evaluateNegation.js +13 -0
- package/src/vector-style/evaluatePrimitive.js +9 -0
- package/src/vector-style/evaluateStep.js +11 -0
- package/src/vector-style/evaluateStyle.js +33 -0
- package/src/vector-style/evaluateToExpression.js +14 -0
- package/src/vector-style/fillVectorPaint.js +17 -0
- package/src/vector-style/lineVectorPaint.js +21 -0
- package/src/vector-style/parseFunctionalColor.js +14 -0
- package/src/vector-style/parseHexColor.js +13 -0
- package/src/vector-style/parseVectorStyle.js +13 -0
- package/src/vector-style/readPaintValue.js +6 -0
- package/src/vector-style/removeTrailingCommas.js +12 -0
- package/src/vector-style/scaleDashArray.js +13 -0
- package/src/vector-style/skipStyleComment.js +9 -0
- package/src/vector-style/stripStyleComments.js +21 -0
- package/src/vector-style/styleColor.js +11 -0
- package/src/vector-style/validateVectorLayers.js +10 -0
- package/src/vector-style/vectorPaint.js +8 -0
- package/src/vector-style/visibleStyle.js +7 -0
- package/src/vector-tiles/appendVectorBatch.js +22 -0
- package/src/vector-tiles/attachVectorTileBatch.js +17 -0
- package/src/vector-tiles/attachVectorTileBatches.js +15 -0
- package/src/vector-tiles/compareVectorLabelPriority.js +3 -0
- package/src/vector-tiles/compareVectorTileDistance.js +3 -0
- package/src/vector-tiles/configureVectorTileLayer.js +28 -0
- package/src/vector-tiles/createVectorLabel.js +22 -0
- package/src/vector-tiles/forwardVectorTileError.js +5 -0
- package/src/vector-tiles/loadVectorSprite.js +5 -0
- package/src/vector-tiles/loadVectorTile.js +36 -0
- package/src/vector-tiles/onVectorTileAdd.js +39 -0
- package/src/vector-tiles/onVectorTileMessage.js +10 -0
- package/src/vector-tiles/onVectorTileRemove.js +20 -0
- package/src/vector-tiles/onVectorTileWorkerError.js +11 -0
- package/src/vector-tiles/paintVectorTileBatch.js +12 -0
- package/src/vector-tiles/prepareVectorLabel.js +25 -0
- package/src/vector-tiles/prepareVectorStyleLayer.js +30 -0
- package/src/vector-tiles/prepareVectorTile.js +16 -0
- package/src/vector-tiles/projectVectorPaths.js +15 -0
- package/src/vector-tiles/projectVectorPoint.js +6 -0
- package/src/vector-tiles/projectVectorTriangles.js +18 -0
- package/src/vector-tiles/pruneVectorTiles.js +11 -0
- package/src/vector-tiles/pumpVectorTiles.js +18 -0
- package/src/vector-tiles/readTileJSON.js +17 -0
- package/src/vector-tiles/readVectorStyle.js +17 -0
- package/src/vector-tiles/refreshVectorTiles.js +5 -0
- package/src/vector-tiles/reserveVectorLabelCells.js +6 -0
- package/src/vector-tiles/retireVectorTileGroup.js +13 -0
- package/src/vector-tiles/revokeVectorWorkerUrl.js +9 -0
- package/src/vector-tiles/rotateVectorLabel.js +12 -0
- package/src/vector-tiles/rotateVectorLabels.js +6 -0
- package/src/vector-tiles/simplifyVectorPath.js +21 -0
- package/src/vector-tiles/updateVectorLabelMarker.js +27 -0
- package/src/vector-tiles/updateVectorLabelStyle.js +8 -0
- package/src/vector-tiles/updateVectorTileLabels.js +28 -0
- package/src/vector-tiles/updateVectorTilePaint.js +20 -0
- package/src/vector-tiles/updateVectorTiles.js +29 -0
- package/src/vector-tiles/validateVectorTileZooms.js +6 -0
- package/src/vector-tiles/vectorFeaturePaint.js +15 -0
- package/src/vector-tiles/vectorFeaturePaths.js +16 -0
- package/src/vector-tiles/vectorFeatureZoom.js +8 -0
- package/src/vector-tiles/vectorLabelAnchors.js +24 -0
- package/src/vector-tiles/vectorLabelCandidates.js +11 -0
- package/src/vector-tiles/vectorLabelCells.js +23 -0
- package/src/vector-tiles/vectorLabelIcon.js +30 -0
- package/src/vector-tiles/vectorLabelProperty.js +3 -0
- package/src/vector-tiles/vectorLabelText.js +10 -0
- package/src/vector-tiles/vectorSpriteIcon.js +11 -0
- package/src/vector-tiles/vectorStraightRun.js +14 -0
- package/src/vector-tiles/vectorStyleDependencies.js +15 -0
- package/src/vector-tiles/vectorStyleValue.js +5 -0
- package/src/vector-tiles/vectorStyleZoom.js +6 -0
- package/src/vector-tiles/vectorTileAwaited.js +9 -0
- package/src/vector-tiles/vectorTileOverlaps.js +4 -0
- package/src/vector-tiles/vectorTilePaint.js +10 -0
- package/src/vector-tiles/vectorTileSettings.js +17 -0
- package/src/vector-tiles/vectorTilesIdle.js +3 -0
- package/src/vector-tiles/vectorTolerance.js +4 -0
- package/src/vector-tiles/wrapVectorLabel.js +11 -0
- package/src/walk/initWalk.js +19 -6
- package/src/weakmaps/nativeProgramsByRenderer.js +1 -0
- package/src/weakmaps/pathProjectionByMap.js +1 -0
- package/src/weakmaps/streamTerrainByLayer.js +1 -0
- package/src/weakmaps/streamTerrainByMap.js +1 -0
- package/src/weakmaps/vectorTileOptionsByLayer.js +1 -0
- package/src/weakmaps/vectorWorkerByLayer.js +1 -0
- package/src/weakmaps/workerMapByLayer.js +1 -0
- package/src/workers/buildAreaInWorker.js +3 -27
- package/src/workers/cogWorker.js +20 -0
- package/src/workers/createGeometryWorker.js +1 -0
- package/src/workers/geometryWorker.js +15 -0
- package/src/workers/getCogInWorker.js +7 -0
- package/src/workers/modelWorker.js +10 -0
- package/src/workers/openCogInWorker.js +14 -0
- package/src/workers/runSourceWorker.js +32 -0
- package/src/workers/settleGeometryWorker.js +1 -1
- package/src/workers/vectorTileWorker.js +10 -0
- package/src/geometry/buildExtrudedPolygon.js +0 -10
- package/src/globals/layerCallInitHooks.js +0 -1
- package/src/sources/buildAreaPoint.js +0 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(()=>{var j=[];function U(t){let n=1/0,r;for(r of t)n=Math.min(n,r.x);return n}function V(t,n,r,o){let e=Math.min(r+o,t.length),i=Math.min(r+o*2,t.length),s=r,a=e,f;for(f=r;f<i;f++)s<e&&(a>=i||t[s].x<=t[a].x)?n[f]=t[s++]:n[f]=t[a++]}function W(t){if(t.length<2)return t;let n=new Array(t.length),r=[],o,e,i,s,a;for(o of t)r.push({ring:o,x:U(o)});let f=r,h=n;for(e=1;e<r.length;e*=2){for(i=0;i<r.length;i+=e*2)V(f,h,i,e);s=f,f=h,h=s}for(a=0;a<t.length;a++)t[a]=f[a].ring;return t}function x(t,n,r){return(n.x-t.x)*(r.y-t.y)-(n.y-t.y)*(r.x-t.x)}function g(t,n){return t.x===n.x&&t.y===n.y}function Z(t){let n=!0,r,o,e,i;for(;n&&t.length>3;)for(n=!1,r=0;r<t.length;r++)if(o=t[(r+t.length-1)%t.length],e=t[r],i=t[(r+1)%t.length],g(o,e)||Math.abs(x(o,e,i))<1e-10){t.splice(r,1),n=!0;break}if(t.length<3)throw new Error("Degenerate polygon ring");return t}function G(t){let n=0,r,o,e;for(r=0;r<t.length;r++)o=t[r],e=t[(r+1)%t.length],n+=o.x*e.y-e.x*o.y;return n<0}function Y(t,n){let r=[],o=0,e,i,s;for(e=0;e<t.length;e++)i=t[e],s=Z(n.slice(o,o+=i.length)),G(s)!==!!e&&s.reverse(),r.push(s);return r}function C(t,n){let r=!1,o,e,i,s;for(o=0,e=n.length-1;o<n.length;e=o++)i=n[o],s=n[e],i.y>t.y!=s.y>t.y&&t.x<(s.x-i.x)*(t.y-i.y)/(s.y-i.y)+i.x&&(r=!r);return r}function _(t,n){let r;for(r=1;r<n.length;r++)if(C(t,n[r]))return!0;return!1}function F(t,n,r){return Math.min(t.x,n.x)<=r.x&&r.x<=Math.max(t.x,n.x)&&Math.min(t.y,n.y)<=r.y&&r.y<=Math.max(t.y,n.y)}function J(t,n,r,o){if(g(t,r)||g(t,o)||g(n,r)||g(n,o))return!1;let e=x(t,n,r),i=x(t,n,o),s=x(r,o,t),a=x(r,o,n);return e*i<0&&s*a<0||e===0&&F(t,n,r)||i===0&&F(t,n,o)||s===0&&F(r,o,t)||a===0&&F(r,o,n)}function H(t,n,r){let o;for(o=0;o<r.length;o++)if(J(t,n,r[o],r[(o+1)%r.length]))return!0;return!1}function K(t,n,r,o){if(H(t,n,r))return!0;let e;for(e=1;e<o.length;e++)if(H(t,n,o[e]))return!0;return!1}function Q(t,n,r,o){let e=-1,i=-1,s=1/0,a,f,h,l,m;for(a=0;a<n.length;a++)for(f=0;f<t.length;f++)h=n[a],l=t[f],m=(h.x-l.x)**2+(h.y-l.y)**2,!(m>=s)&&(o.x=(h.x+l.x)/2,o.y=(h.y+l.y)/2,!(!C(o,r[0])||_(o,r))&&(K(h,l,t,r)||(e=a,i=f,s=m)));if(e<0)throw new Error("Unable to connect polygon hole");return[...t.slice(0,i+1),...n.slice(e),...n.slice(0,e+1),t[i],...t.slice(i+1)]}function T(t,n,r,o){let e;for(e of t)if(!g(e,n)&&!g(e,r)&&!g(e,o)&&x(n,r,e)>=0&&x(r,o,e)>=0&&x(o,n,e)>=0)return!0;return!1}function $(t){let n=[],r,o,e,i,s,a;for(;t.length>3;){for(r=!1,o=0;o<t.length;o++)if(e=t[(o+t.length-1)%t.length],i=t[o],s=t[(o+1)%t.length],!(x(e,i,s)<=1e-10)&&!T(t,e,i,s)){n.push([e.index,i.index,s.index]),t.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(x(...t)>1e-10){let f=[];for(a of t)f.push(a.index);n.push(f)}return n}function B(t){let n=0,r,o,e;for(r=0;r<t.length;r++)o=t[r],e=t[(r+1)%t.length],n+=o.x*e.y-e.x*o.y;return Math.abs(n)/2}function tt(t,n,r){let o=0,e=0,i,s;for(i=1;i<t.length;i++)o+=B(t[i]);let a=B(t[0])-o;for(s of r)e+=x(n[s[0]],n[s[1]],n[s[2]])/2;if(a<=0||Math.abs(e-a)>Math.max(1e-7,a*1e-8))throw new Error("Polygon triangulation area mismatch")}function rt(t,n=j){let r=[t,...n],o=r.flat(),e,i,s;for(e of o)if(!Number.isFinite(e.x)||!Number.isFinite(e.y))throw new Error("Invalid polygon coordinates");let a=[];for(i=0;i<o.length;i++)e=o[i],a.push({x:e.x-t[0].x,y:e.y-t[0].y,index:i});let f=Y(r,a),h=f[0].slice(),l=W(f.slice(1)),m=l.length?{x:0,y:0}:null;for(s of l)h=Q(h,s,f,m);let u=$(h);return tt(f,a,u),u}function N(t){return t.ground||0}function d(t,n,r,o,e,i,s,a,f,h,l){let{backend:m,positions:u,normals:M,colors:p,uvs:c}=t,y=o.x-n.x,b=e-r,R=n.y-o.y,q=i.x-n.x,L=s-r,X=n.y-i.y;if((b*X-R*L)*a+(R*q-y*X)*f+(y*L-b*q)*h<0){let pt=o,Mt=e;o=i,e=s,i=pt,s=Mt}u.push(n.x,r+N(n),-n.y,o.x,e+N(o),-o.y,i.x,s+N(i),-i.y),M.push(a,f,h,a,f,h,a,f,h),p.push(l.r,l.g,l.b,l.r,l.g,l.b,l.r,l.g,l.b),m.options.nightLight&&c.push(...n.uv,...o.uv,...i.uv)}function nt(t,n,r,o,e){let i=[],s,a,f,h,l,m,u,M,p,c,y;for(s of n)for(a of s)i.push(a);for([f,h,l]of rt(n[0],n.slice(1)))d(t,i[f],r,i[h],r,i[l],r,0,1,0,e),o>0&&d(t,i[f],o,i[h],o,i[l],o,0,-1,0,e);for(m=0;m<n.length;m++)for(s=n[m],u=G(s)===(m===0)?-1:1,M=0;M<s.length;M++)f=s[M],h=s[(M+1)%s.length],p=Math.hypot(h.x-f.x,h.y-f.y),p&&(c=u*(h.y-f.y)/p,y=u*(h.x-f.x)/p,d(t,f,o,h,o,h,r,c,0,y,e),d(t,f,o,h,r,f,r,c,0,y,e))}var w=[];function ot(...t){d(w[w.length-1],...t)}function O(t,n,r,o){w.push(t);try{n(r,o,ot)}finally{w.pop()}}function k(t){return t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055}function S(t,n,r,o){let e=(t+n*12)%12;return r-o*Math.max(-1,Math.min(e-3,9-e,1))}function I(t){if(t&&typeof t=="object"&&"h"in t){let i=t.s*Math.min(t.l,1-t.l);return{r:k(S(0,t.h,t.l,i)),g:k(S(8,t.h,t.l,i)),b:k(S(4,t.h,t.l,i))}}if(t&&typeof t=="object"&&"r"in t)return t;if(typeof t=="number")return{r:(t>>16&255)/255,g:(t>>8&255)/255,b:(t&255)/255};if(typeof t!="string"||!CSS.supports("color",t))throw new Error("Invalid 3D color");let n=document.createElement("canvas").getContext("2d");n.fillStyle=t,n.fillRect(0,0,1,1);let[r,o,e]=n.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:e/255}}var P=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function et(t,n){let r=new Array(P.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+P[o].x*n,y:t.y+P[o].y*n,ground:t.ground,uv:[3,3]};return r}function it(t,n,r){let o=I(5264986),e=n.poleRadius;if(!Number.isFinite(e)||e<=0)throw new Error("Invalid lamp pole radius");let i={...t,uv:[3,3]},s,a,f,h,l,m,u,M,p,c;for(c=0;c<2;c++)for(s=c?e*2.5:e,a=c?n.top-.25:0,f=c?n.top+.15:n.top,h=et(t,s),l=0;l<6;l++)m=h[l],u=h[(l+1)%6],M=P[l].nx,p=P[l].nz,r(m,a,u,a,u,f,M,0,p,o),r(m,a,u,f,m,f,M,0,p,o),r(i,f,m,f,u,f,0,1,0,o),r(i,a,u,a,m,a,0,-1,0,o)}function st(t,n,r,o,e,i,s,a,f,h){typeof a!="number"?(t(r,s,o,s,e,s,...a,n),t(r,s,e,s,i,s,...a,n)):(t(r,s,o,s,e,s,a,f,h,n),t(r,s,e,s,i,s,a,f,h,n))}function z(t,n,r,o){return{x:t.x+(o===2?0:n*.65),y:t.y+(o===1?0:o===2?n*.65:r*.65),ground:t.ground+(o===0?0:r*.65),uv:[n,r]}}function at(t,n,r){if(!Number.isFinite(n.lightRadius)||n.lightRadius<=0)throw new Error("Invalid light radius");let o=I(n.color),e;for(e=0;e<3;e++)st(r,o,z(t,-1,-1,e),z(t,1,-1,e),z(t,1,1,e),z(t,-1,1,e),n.top,e===2?1:0,e===0?1:0,e===1?1:0)}var D=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var E=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function A(t,n){let r=new Array(E.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+E[o].x*n,y:t.y+E[o].y*n,ground:t.ground};return r}function v(t,n,r,o,e,i,s){let a=A(t,r),f=A(t,e),h,l,m,u,M,p,c,y,b;for(h=0;h<8;h++)l=(h+1)%8,m=(r-e)/(i-o),u=Math.hypot(1,m),{nx:M,nz:p}=E[h],c=m/u,y=M/u,b=p/u,r&&n(a[h],o,a[l],o,f[l],i,y,c,b,s),e&&n(a[h],o,f[l],i,f[h],i,y,c,b,s)}function ft(t,n,r,o,e,i){if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)||t<=0||n<t||r<=o||r>=e||i!=="round"&&i!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function ht(t,n,r){let{top:o,bottom:e=0,trunkRadius:i,crownRadius:s,crownBottom:a,crownShape:f="round"}=n;ft(i,s,a,e,o,f);let h=I(n.trunkColor??7491898),l=I(n.color??5210683);v(t,r,i,e,i,a+(o-a)*.25,h);let m,u,M,p,c;if(f==="cone"){let y=A(t,s);for(m=0;m<8;m++)r(t,a,y[m],a,y[(m+1)%8],a,0,-1,0,l);v(t,r,s,a,0,o,l)}else for(m=1;m<D.length;m++)[u,M]=D[m-1],[p,c]=D[m],v(t,r,M*s,a+u*(o-a),c*s,a+p*(o-a),l)}function mt(t,n,r,o,e){let{top:i}=r;if(t.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!t.supports.has(e)&&(O(t,it,n,r),t.supports.add(e)),O(t,at,n,r),t.lights.push({position:[n.x,n.ground+i,-n.y],radius:Math.hypot(i,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else O(t,ht,n,r)}function lt(t){let{positions:n,normals:r,colors:o,featureFaces:e}=t;if(t.backend.options.nightLight||e.length<2)return t;let i=e[0].vertexEnd,s=i*3;if(!i||n.length!==s*e.length)return t;let a=Math.trunc(n[0]),f=Math.trunc(n[1]),h=Math.trunc(n[2]),l=new Float32Array(s),m,u,M,p;for(m=0;m<s;m++)l[m]=n[m]-(m%3===0?a:m%3===1?f:h);let c=new Float32Array(e.length*4);for(u=0;u<e.length;u++){if(M=e[u],p=u*s,M.vertexStart!==u*i||M.vertexEnd!==(u+1)*i)return t;for(c[u*4]=a+n[p]-n[0],c[u*4+1]=f+n[p+1]-n[1],c[u*4+2]=h+n[p+2]-n[2],c[u*4+3]=u*i,m=0;m<s;m++)if(Math.fround(l[m]+c[u*4+m%3])!==Math.fround(n[p+m])||Math.fround(r[m])!==Math.fround(r[p+m])||Math.fround(o[m])!==Math.fround(o[p+m]))return t}return{positions:l,normals:r.slice(0,s),colors:o.slice(0,s),instanceOffsets:c}}function ut(t){let n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=t.attributes.position.data,e,i,s,a;for(e=0;e<o.length;e+=3)i=o[e],s=o[e+1],a=o[e+2],n[0]=Math.min(n[0],i),r[0]=Math.max(r[0],i),n[1]=Math.min(n[1],s),r[1]=Math.max(r[1],s),n[2]=Math.min(n[2],a),r[2]=Math.max(r[2],a);let f=t.attributes.instanceOffset;if(f){let u,M,p,c;for(u=0;u<3;u++){for(p=1/0,c=-1/0,M=u;M<f.data.length;M+=f.size)p=Math.min(p,f.data[M]),c=Math.max(c,f.data[M]);n[u]=Math.fround(n[u]+p),r[u]=Math.fround(r[u]+c)}}let h=[(n[0]+r[0])/2,(n[1]+r[1])/2,(n[2]+r[2])/2],l=0;for(e=0;!f&&e<o.length;e+=3)i=o[e]-h[0],s=o[e+1]-h[1],a=o[e+2]-h[2],l=Math.max(l,i*i+s*s+a*a);let m=f?Math.hypot(r[0]-n[0],r[1]-n[1],r[2]-n[2])/2:Math.sqrt(l);if(!f&&(l===1/0||l<Number.MIN_VALUE/Number.EPSILON))for(m=0,e=0;e<o.length;e+=3)m=Math.max(m,Math.hypot(o[e]-h[0],o[e+1]-h[1],o[e+2]-h[2]));t.bounds={min:n,max:r,center:h,radius:m}}function ct({jobs:t,nightLight:n}){let r={backend:{options:{nightLight:n}},positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set},o,e,i,s;for(o of t){i=r.positions.length/3,o.point&&mt(r,o.point,o.style,o.baseColor,o.support);for(e of o.polygons)nt(r,e,o.style.top,o.style.bottom,o.baseColor);s=r.positions.length/3,r.featureFaces.push({vertexStart:i,vertexEnd:s,faceStart:i/3,faceEnd:s/3})}let a=lt(r),f={positions:new Float32Array(a.positions),normals:new Float32Array(a.normals),colors:new Float32Array(a.colors),uvs:new Float32Array(r.uvs),instanceOffsets:a.instanceOffsets,ranges:r.featureFaces,lights:r.lights};if(f.positions.length){let h={attributes:{position:{data:f.positions},instanceOffset:f.instanceOffsets?{data:f.instanceOffsets,size:4}:void 0}};ut(h),f.bounds=h.bounds}return f}function xt(t){try{let n=ct(t.data),r=[n.positions.buffer,n.normals.buffer,n.colors.buffer,n.uvs.buffer];n.instanceOffsets&&r.push(n.instanceOffsets.buffer),self.postMessage(n,r)}catch(n){self.postMessage({error:{name:n.name,message:n.message}})}}self.addEventListener("message",xt);})();
|
|
1
|
+
(()=>{var U=[];function At(t){let e=1/0,r;for(r of t)e=Math.min(e,r.x);return e}function Vt(t,e,r,o){let n=Math.min(r+o,t.length),i=Math.min(r+o*2,t.length),a=r,s=n,f;for(f=r;f<i;f++)a<n&&(s>=i||t[a].x<=t[s].x)?e[f]=t[a++]:e[f]=t[s++]}function Ot(t){if(t.length<2)return t;let e=new Array(t.length),r=[],o,n,i,a,s;for(o of t)r.push({ring:o,x:At(o)});let f=r,l=e;for(n=1;n<r.length;n*=2){for(i=0;i<r.length;i+=n*2)Vt(f,l,i,n);a=f,f=l,l=a}for(s=0;s<t.length;s++)t[s]=f[s].ring;return t}function w(t,e,r){return(e.x-t.x)*(r.y-t.y)-(e.y-t.y)*(r.x-t.x)}function b(t,e){return t.x===e.x&&t.y===e.y}function St(t){let e=!0,r,o,n,i;for(;e&&t.length>3;)for(e=!1,r=0;r<t.length;r++)if(o=t[(r+t.length-1)%t.length],n=t[r],i=t[(r+1)%t.length],b(o,n)||Math.abs(w(o,n,i))<1e-10){t.splice(r,1),e=!0;break}if(t.length<3)throw new Error("Degenerate polygon ring");return t}function Y(t){let e=0,r,o,n;for(r=0;r<t.length;r++)o=t[r],n=t[(r+1)%t.length],e+=o.x*n.y-n.x*o.y;return e<0}function Ft(t,e){let r=[],o=0,n,i,a;for(n=0;n<t.length;n++)i=t[n],a=St(e.slice(o,o+=i.length)),Y(a)!==!!n&&a.reverse(),r.push(a);return r}function K(t,e){let r=!1,o,n,i,a;for(o=0,n=e.length-1;o<e.length;n=o++)i=e[o],a=e[n],i.y>t.y!=a.y>t.y&&t.x<(a.x-i.x)*(t.y-i.y)/(a.y-i.y)+i.x&&(r=!r);return r}function Nt(t,e){let r;for(r=1;r<e.length;r++)if(K(t,e[r]))return!0;return!1}function z(t,e,r){return Math.min(t.x,e.x)<=r.x&&r.x<=Math.max(t.x,e.x)&&Math.min(t.y,e.y)<=r.y&&r.y<=Math.max(t.y,e.y)}function Ut(t,e,r,o){if(b(t,r)||b(t,o)||b(e,r)||b(e,o))return!1;let n=w(t,e,r),i=w(t,e,o),a=w(r,o,t),s=w(r,o,e);return n*i<0&&a*s<0||n===0&&z(t,e,r)||i===0&&z(t,e,o)||a===0&&z(r,o,t)||s===0&&z(r,o,e)}function ht(t,e,r){let o;for(o=0;o<r.length;o++)if(Ut(t,e,r[o],r[(o+1)%r.length]))return!0;return!1}function Lt(t,e,r,o){if(ht(t,e,r))return!0;let n;for(n=1;n<o.length;n++)if(ht(t,e,o[n]))return!0;return!1}function Gt(t,e,r,o){let n=-1,i=-1,a=1/0,s,f,l,u,c;for(s=0;s<e.length;s++)for(f=0;f<t.length;f++)l=e[s],u=t[f],c=(l.x-u.x)**2+(l.y-u.y)**2,!(c>=a)&&(o.x=(l.x+u.x)/2,o.y=(l.y+u.y)/2,!(!K(o,r[0])||Nt(o,r))&&(Lt(l,u,t,r)||(n=s,i=f,a=c)));if(n<0)throw new Error("Unable to connect polygon hole");return[...t.slice(0,i+1),...e.slice(n),...e.slice(0,n+1),t[i],...t.slice(i+1)]}function Bt(t,e,r,o){let n;for(n of t)if(!b(n,e)&&!b(n,r)&&!b(n,o)&&w(e,r,n)>=0&&w(r,o,n)>=0&&w(o,e,n)>=0)return!0;return!1}function Dt(t){let e=[],r,o,n,i,a,s;for(;t.length>3;){for(r=!1,o=0;o<t.length;o++)if(n=t[(o+t.length-1)%t.length],i=t[o],a=t[(o+1)%t.length],!(w(n,i,a)<=1e-10)&&!Bt(t,n,i,a)){e.push([n.index,i.index,a.index]),t.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(w(...t)>1e-10){let f=[];for(s of t)f.push(s.index);e.push(f)}return e}function gt(t){let e=0,r,o,n;for(r=0;r<t.length;r++)o=t[r],n=t[(r+1)%t.length],e+=o.x*n.y-n.x*o.y;return Math.abs(e)/2}function kt(t,e,r){let o=0,n=0,i,a;for(i=1;i<t.length;i++)o+=gt(t[i]);let s=gt(t[0])-o;for(a of r)n+=w(e[a[0]],e[a[1]],e[a[2]])/2;if(s<=0||Math.abs(n-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function Q(t,e=U){let r=[t,...e],o=r.flat(),n,i,a;for(n of o)if(!Number.isFinite(n.x)||!Number.isFinite(n.y))throw new Error("Invalid polygon coordinates");let s=[];for(i=0;i<o.length;i++)n=o[i],s.push({x:n.x-t[0].x,y:n.y-t[0].y,index:i});let f=Ft(r,s),l=f[0].slice(),u=Ot(f.slice(1)),c=u.length?{x:0,y:0}:null;for(a of u)l=Gt(l,a,f,c);let m=Dt(l);return kt(f,s,m),m}function tt(t){return t.ground||0}function L(t,e,r,o,n,i,a,s,f,l,u){let{backend:c,positions:m,normals:h,colors:p,uvs:d}=t,x=o.x-e.x,M=n-r,_=e.y-o.y,Ct=i.x-e.x,Pt=a-r,Tt=e.y-i.y;if((M*Tt-_*Pt)*s+(_*Ct-x*Tt)*f+(x*Pt-M*Ct)*l<0){let Wr=o,Xr=n;o=i,n=a,i=Wr,a=Xr}m.push(e.x,r+tt(e),-e.y,o.x,n+tt(o),-o.y,i.x,a+tt(i),-i.y),h.push(s,f,l,s,f,l,s,f,l),p.push(u.r,u.g,u.b,u.r,u.g,u.b,u.r,u.g,u.b),c.options.nightLight&&d.push(...e.uv,...o.uv,...i.uv)}function Rt(t,e,r,o,n){let i=[],a,s,f,l,u,c,m,h,p,d,x;for(a of e)for(s of a)i.push(s);for([f,l,u]of Q(e[0],e.slice(1)))L(t,i[f],r,i[l],r,i[u],r,0,1,0,n),o>0&&L(t,i[f],o,i[l],o,i[u],o,0,-1,0,n);for(c=0;c<e.length;c++)for(a=e[c],m=Y(a)===(c===0)?-1:1,h=0;h<a.length;h++)f=a[h],l=a[(h+1)%a.length],p=Math.hypot(l.x-f.x,l.y-f.y),p&&(d=m*(l.y-f.y)/p,x=m*(l.x-f.x)/p,L(t,f,o,l,o,l,r,d,0,x,n),L(t,f,o,l,r,f,r,d,0,x,n))}var k=[];function Zt(...t){L(k[k.length-1],...t)}function et(t,e,r,o){k.push(t);try{e(r,o,Zt)}finally{k.pop()}}function rt(t){return t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055}function ot(t,e,r,o){let n=(t+e*12)%12;return r-o*Math.max(-1,Math.min(n-3,9-n,1))}function G(t){if(t&&typeof t=="object"&&"h"in t){let i=t.s*Math.min(t.l,1-t.l);return{r:rt(ot(0,t.h,t.l,i)),g:rt(ot(8,t.h,t.l,i)),b:rt(ot(4,t.h,t.l,i))}}if(t&&typeof t=="object"&&"r"in t)return t;if(typeof t=="number")return{r:(t>>16&255)/255,g:(t>>8&255)/255,b:(t&255)/255};if(typeof t!="string"||!CSS.supports("color",t))throw new Error("Invalid 3D color");let e=document.createElement("canvas").getContext("2d");e.fillStyle=t,e.fillRect(0,0,1,1);let[r,o,n]=e.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:n/255}}var B=[{x:Math.cos(0*Math.PI/3),y:Math.sin(0*Math.PI/3),nx:Math.cos(.5*Math.PI/3),nz:-Math.sin(.5*Math.PI/3)},{x:Math.cos(1*Math.PI/3),y:Math.sin(1*Math.PI/3),nx:Math.cos(1.5*Math.PI/3),nz:-Math.sin(1.5*Math.PI/3)},{x:Math.cos(2*Math.PI/3),y:Math.sin(2*Math.PI/3),nx:Math.cos(2.5*Math.PI/3),nz:-Math.sin(2.5*Math.PI/3)},{x:Math.cos(3*Math.PI/3),y:Math.sin(3*Math.PI/3),nx:Math.cos(3.5*Math.PI/3),nz:-Math.sin(3.5*Math.PI/3)},{x:Math.cos(4*Math.PI/3),y:Math.sin(4*Math.PI/3),nx:Math.cos(4.5*Math.PI/3),nz:-Math.sin(4.5*Math.PI/3)},{x:Math.cos(5*Math.PI/3),y:Math.sin(5*Math.PI/3),nx:Math.cos(5.5*Math.PI/3),nz:-Math.sin(5.5*Math.PI/3)}];function $t(t,e){let r=new Array(B.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+B[o].x*e,y:t.y+B[o].y*e,ground:t.ground,uv:[3,3]};return r}function jt(t,e,r){let o=G(5264986),n=e.poleRadius;if(!Number.isFinite(n)||n<=0)throw new Error("Invalid lamp pole radius");let i={...t,uv:[3,3]},a,s,f,l,u,c,m,h,p,d;for(d=0;d<2;d++)for(a=d?n*2.5:n,s=d?e.top-.25:0,f=d?e.top+.15:e.top,l=$t(t,a),u=0;u<6;u++)c=l[u],m=l[(u+1)%6],h=B[u].nx,p=B[u].nz,r(c,s,m,s,m,f,h,0,p,o),r(c,s,m,f,c,f,h,0,p,o),r(i,f,c,f,m,f,0,1,0,o),r(i,s,m,s,c,s,0,-1,0,o)}function Ht(t,e,r,o,n,i,a,s,f,l){typeof s!="number"?(t(r,a,o,a,n,a,...s,e),t(r,a,n,a,i,a,...s,e)):(t(r,a,o,a,n,a,s,f,l,e),t(r,a,n,a,i,a,s,f,l,e))}function q(t,e,r,o){return{x:t.x+(o===2?0:e*.65),y:t.y+(o===1?0:o===2?e*.65:r*.65),ground:t.ground+(o===0?0:r*.65),uv:[e,r]}}function _t(t,e,r){if(!Number.isFinite(e.lightRadius)||e.lightRadius<=0)throw new Error("Invalid light radius");let o=G(e.color),n;for(n=0;n<3;n++)Ht(r,o,q(t,-1,-1,n),q(t,1,-1,n),q(t,1,1,n),q(t,-1,1,n),e.top,n===2?1:0,n===0?1:0,n===1?1:0)}var nt=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];var R=[{x:Math.cos(0*Math.PI/4),y:Math.sin(0*Math.PI/4),nx:Math.cos(.5*Math.PI/4),nz:-Math.sin(.5*Math.PI/4)},{x:Math.cos(1*Math.PI/4),y:Math.sin(1*Math.PI/4),nx:Math.cos(1.5*Math.PI/4),nz:-Math.sin(1.5*Math.PI/4)},{x:Math.cos(2*Math.PI/4),y:Math.sin(2*Math.PI/4),nx:Math.cos(2.5*Math.PI/4),nz:-Math.sin(2.5*Math.PI/4)},{x:Math.cos(3*Math.PI/4),y:Math.sin(3*Math.PI/4),nx:Math.cos(3.5*Math.PI/4),nz:-Math.sin(3.5*Math.PI/4)},{x:Math.cos(4*Math.PI/4),y:Math.sin(4*Math.PI/4),nx:Math.cos(4.5*Math.PI/4),nz:-Math.sin(4.5*Math.PI/4)},{x:Math.cos(5*Math.PI/4),y:Math.sin(5*Math.PI/4),nx:Math.cos(5.5*Math.PI/4),nz:-Math.sin(5.5*Math.PI/4)},{x:Math.cos(6*Math.PI/4),y:Math.sin(6*Math.PI/4),nx:Math.cos(6.5*Math.PI/4),nz:-Math.sin(6.5*Math.PI/4)},{x:Math.cos(7*Math.PI/4),y:Math.sin(7*Math.PI/4),nx:Math.cos(7.5*Math.PI/4),nz:-Math.sin(7.5*Math.PI/4)}];function W(t,e){let r=new Array(R.length),o;for(o=0;o<r.length;o++)r[o]={x:t.x+R[o].x*e,y:t.y+R[o].y*e,ground:t.ground};return r}function it(t,e,r,o,n,i,a){let s=W(t,r),f=W(t,n),l,u,c,m,h,p,d,x,M;for(l=0;l<8;l++)u=(l+1)%8,c=(r-n)/(i-o),m=Math.hypot(1,c),{nx:h,nz:p}=R[l],d=c/m,x=h/m,M=p/m,r&&e(s[l],o,s[u],o,f[u],i,x,d,M,a),n&&e(s[l],o,f[u],i,f[l],i,x,d,M,a)}function zt(t,e,r,o,n,i){if(!Number.isFinite(t)||!Number.isFinite(e)||!Number.isFinite(r)||t<=0||e<t||r<=o||r>=n||i!=="round"&&i!=="cone")throw new Error("Invalid tree dimensions or crown shape")}function qt(t,e,r){let{top:o,bottom:n=0,trunkRadius:i,crownRadius:a,crownBottom:s,crownShape:f="round"}=e;zt(i,a,s,n,o,f);let l=G(e.trunkColor??7491898),u=G(e.color??5210683);it(t,r,i,n,i,s+(o-s)*.25,l);let c,m,h,p,d;if(f==="cone"){let x=W(t,a);for(c=0;c<8;c++)r(t,s,x[c],s,x[(c+1)%8],s,0,-1,0,u);it(t,r,a,s,0,o,u)}else for(c=1;c<nt.length;c++)[m,h]=nt[c-1],[p,d]=nt[c],it(t,r,h*a,s+m*(o-s),d*a,s+p*(o-s),u)}function Wt(t,e,r,o,n){let{top:i}=r;if(t.backend.options.nightLight){if(!Number.isFinite(r.lightFlux)||r.lightFlux<=0)throw new Error("Invalid light flux");r.poleRadius>0&&!t.supports.has(n)&&(et(t,jt,e,r),t.supports.add(n)),et(t,_t,e,r),t.lights.push({position:[e.x,e.ground+i,-e.y],radius:Math.hypot(i,r.lightRadius),color:[o.r,o.g,o.b],flux:r.lightFlux})}else et(t,qt,e,r)}function Xt(t){let{positions:e,normals:r,colors:o,featureFaces:n}=t;if(t.backend.options.nightLight||n.length<2)return t;let i=n[0].vertexEnd,a=i*3;if(!i||e.length!==a*n.length)return t;let s=Math.trunc(e[0]),f=Math.trunc(e[1]),l=Math.trunc(e[2]),u=new Float32Array(a),c,m,h,p;for(c=0;c<a;c++)u[c]=e[c]-(c%3===0?s:c%3===1?f:l);let d=new Float32Array(n.length*4);for(m=0;m<n.length;m++){if(h=n[m],p=m*a,h.vertexStart!==m*i||h.vertexEnd!==(m+1)*i)return t;for(d[m*4]=s+e[p]-e[0],d[m*4+1]=f+e[p+1]-e[1],d[m*4+2]=l+e[p+2]-e[2],d[m*4+3]=m*i,c=0;c<a;c++)if(Math.fround(u[c]+d[m*4+c%3])!==Math.fround(e[p+c])||Math.fround(r[c])!==Math.fround(r[p+c])||Math.fround(o[c])!==Math.fround(o[p+c]))return t}return{positions:u,normals:r.slice(0,a),colors:o.slice(0,a),instanceOffsets:d}}function Jt(t){let e=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=t.attributes.position.data,n,i,a,s;for(n=0;n<o.length;n+=3)i=o[n],a=o[n+1],s=o[n+2],e[0]=Math.min(e[0],i),r[0]=Math.max(r[0],i),e[1]=Math.min(e[1],a),r[1]=Math.max(r[1],a),e[2]=Math.min(e[2],s),r[2]=Math.max(r[2],s);let f=t.attributes.instanceOffset;if(f){let m,h,p,d;for(m=0;m<3;m++){for(p=1/0,d=-1/0,h=m;h<f.data.length;h+=f.size)p=Math.min(p,f.data[h]),d=Math.max(d,f.data[h]);e[m]=Math.fround(e[m]+p),r[m]=Math.fround(r[m]+d)}}let l=[(e[0]+r[0])/2,(e[1]+r[1])/2,(e[2]+r[2])/2],u=0;for(n=0;!f&&n<o.length;n+=3)i=o[n]-l[0],a=o[n+1]-l[1],s=o[n+2]-l[2],u=Math.max(u,i*i+a*a+s*s);let c=f?Math.hypot(r[0]-e[0],r[1]-e[1],r[2]-e[2])/2:Math.sqrt(u);if(!f&&(u===1/0||u<Number.MIN_VALUE/Number.EPSILON))for(c=0,n=0;n<o.length;n+=3)c=Math.max(c,Math.hypot(o[n]-l[0],o[n+1]-l[1],o[n+2]-l[2]));t.bounds={min:e,max:r,center:l,radius:c}}function Yt({jobs:t,nightLight:e}){let r={backend:{options:{nightLight:e}},positions:[],normals:[],colors:[],uvs:[],featureFaces:[],lights:[],supports:new Set},o,n,i,a;for(o of t){i=r.positions.length/3,o.point&&Wt(r,o.point,o.style,o.baseColor,o.support);for(n of o.polygons)Rt(r,n,o.style.top,o.style.bottom,o.baseColor);a=r.positions.length/3,r.featureFaces.push({vertexStart:i,vertexEnd:a,faceStart:i/3,faceEnd:a/3})}let s=Xt(r),f={positions:new Float32Array(s.positions),normals:new Float32Array(s.normals),colors:new Float32Array(s.colors),uvs:new Float32Array(r.uvs),instanceOffsets:s.instanceOffsets,ranges:r.featureFaces,lights:r.lights};if(f.positions.length){let l={attributes:{position:{data:f.positions},instanceOffset:f.instanceOffsets?{data:f.instanceOffsets,size:4}:void 0}};Jt(l),f.bounds=l.bounds}return f}function at(t){return{bytes:t,view:new DataView(t.buffer,t.byteOffset,t.byteLength),pos:0}}function E(t,e){if(!Number.isSafeInteger(e)||e<0||e>t.bytes.length-t.pos)throw new Error("Truncated MVT field");let r=t.pos;return t.pos+=e,r}function T(t){let e=0n,r=0,o;for(;r<10;r++){if(o=t.bytes[E(t,1)],r===9&&o>1)throw new Error("Invalid MVT varint");if(e|=BigInt(o&127)<<BigInt(r*7),o<128)return e}throw new Error("Invalid MVT varint")}function y(t){let e=T(t);if(e>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("MVT integer exceeds safe range");return Number(e)}function A(t){let e=y(t),r=Math.floor(e/8),o=e%8;if(!r||r>536870911)throw new Error("Invalid MVT field number");return[r,o]}function C(t,e){if(t!==e)throw new Error("Invalid MVT wire type")}function Z(t){return t>=BigInt(Number.MIN_SAFE_INTEGER)&&t<=BigInt(Number.MAX_SAFE_INTEGER)?Number(t):t.toString()}function st(t,e,r){if(t&&(e===2&&t.length<2||e===3&&!r))throw new Error("Incomplete MVT geometry")}function Kt(t,e,r){let o=0,n,i;for(;o<r;o++){if(n=t[e.index++],i=t[e.index++],n>4294967295||i>4294967295)throw new Error("Invalid MVT coordinate");e.x+=n%2?-(n+1)/2:n/2,e.y+=i%2?-(i+1)/2:i/2,e.path.push([e.x,e.y])}}function Qt(t,e,r,o){if(st(t.path,r,t.closed),r!==1&&o!==1)throw new Error("Invalid MVT MoveTo");t.path=[],e.push(t.path),t.closed=!1}function te(t,e,r){if(e!==3||r!==1||!t.path||t.closed||t.path.length<3)throw new Error("Invalid MVT ClosePath");t.path.push([...t.path[0]]),t.closed=!0}function ee(t,e){let r=[],o={x:0,y:0,path:null,closed:!1,index:0},n,i,a;for(;o.index<t.length;){if(n=t[o.index++],i=n%8,a=Math.floor(n/8),!a||n>4294967295)throw new Error("Invalid MVT geometry command");if(i===7){te(o,e,a);continue}if(i!==1&&i!==2||a>Math.floor((t.length-o.index)/2))throw new Error("Invalid MVT geometry parameters");if(i===1)Qt(o,r,e,a);else if(e===1||!o.path||o.closed)throw new Error("Invalid MVT LineTo");Kt(t,o,a)}if(st(o.path,e,o.closed),!r.length)throw new Error("Empty MVT geometry");return r}function P(t,e){C(e,2);let r=y(t),o=E(t,r);return at(t.bytes.subarray(o,o+r))}function dt(t,e,r){let o;if(e===0)r.push(y(t));else for(o=P(t,e);o.pos<o.bytes.length;)r.push(y(o))}function V(t,e){switch(e){case 0:T(t);break;case 1:E(t,8);break;case 2:E(t,y(t));break;case 5:E(t,4);break;default:throw new Error("Unsupported MVT wire type")}}function re(t,e,r){let o,n=0,i,a,s=0,f=[],l=[];for(;t.pos<t.bytes.length;)[i,a]=A(t),i===1?(C(a,0),o=Z(T(t))):i===2?dt(t,a,f):i===3?(C(a,0),n=y(t)):i===4?dt(t,a,l):V(t,a);if(f.length%2||n>3)throw new Error("Invalid MVT feature");let u=Object.create(null);for(;s<f.length;s+=2){if(f[s]>=e.length||f[s+1]>=r.length)throw new Error("Invalid MVT property index");u[e[f[s]]]=r[f[s+1]]}return{id:o,type:n,properties:u,geometry:n?ee(l,n):[]}}var oe=new TextDecoder("utf-8",{fatal:!0});function X(t,e){return oe.decode(P(t,e).bytes)}function ne(t,e,r){let o,n;return e===1?X(t,r):e===2||e===3?(C(r,e===2?5:1),o=E(t,e===2?4:8),e===2?t.view.getFloat32(o,!0):t.view.getFloat64(o,!0)):(C(r,0),n=T(t),e===4?Z(BigInt.asIntN(64,n)):e===5?Z(n):e===6?Z(n>>1n^-(n&1n)):n!==0n)}function ie(t){let e,r=!1,o,n;for(;t.pos<t.bytes.length;){if([o,n]=A(t),o<1||o>7){V(t,n);continue}if(r)throw new Error("Multiple MVT value types");r=!0,e=ne(t,o,n)}if(!r)throw new Error("Empty MVT value");return e}function ae(t){let e,r,o=4096,n,i,a,s=0,f=[],l=[],u=[];for(;t.pos<t.bytes.length;)[n,i]=A(t),n===1?e=X(t,i):n===2?u.push(P(t,i)):n===3?f.push(X(t,i)):n===4?l.push(ie(P(t,i))):n===5||n===15?(C(i,0),a=y(t),n===5?o=a:r=a):V(t,i);if(!e||![1,2].includes(r)||!o||o>4294967295)throw new Error("Invalid MVT layer metadata");for(;s<u.length;s++)u[s]=re(u[s],f,l);return{name:e,extent:o,features:u}}function se(t){if(!(t instanceof ArrayBuffer)&&!(t instanceof Uint8Array))throw new TypeError("MVT input must be an ArrayBuffer or Uint8Array");let e=t instanceof Uint8Array?t:new Uint8Array(t),r=at(e),o=[],n=new Set,i,a,s;for(;r.pos<r.bytes.length;){if([i,a]=A(r),i!==3){V(r,a);continue}if(s=ae(P(r,a)),n.has(s.name))throw new Error("Duplicate MVT layer name");n.add(s.name),o.push(s)}return o}function fe(t){let e=new Set,r=[t.paint,t.filter],o,n;for(;r.length;)if(o=r.pop(),!(!o||typeof o!="object")){Array.isArray(o)&&typeof o[1]=="string"&&["get","has","==","!=","<",">","<=",">=","in","!in"].includes(o[0])&&e.add(o[1]);for(n of Object.values(o))r.push(n)}return e}function le(t,e,r,o,n){let i=0;if(t==="all"){for(i=0;i<e.length;i++)if(!g(e[i],r,o,n))return!1;return!0}if(t==="any"){for(i=0;i<e.length;i++)if(g(e[i],r,o,n))return!0;return!1}throw new Error(`Unsupported vector style expression: ${t}`)}function ue(t,e,r,o,n){let i=0,a=null;if(t==="coalesce"){for(i=0;i<e.length;i++)if(a=g(e[i],r,o),a!=null)return a;return null}if(t==="case"){for(i=0;i<e.length-1;i+=2)if(g(e[i],r,o))return g(e[i+1],r,o);return g(e[e.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${t}`)}function O(t,e,r,o){return o&&typeof t=="string"?e[t]:g(t,e,r)}function ce(t,e,r,o,n){let i=O(e[0],r,o,n),a=g(e[1],r,o);switch(t){case"==":return i===a;case"!=":return i!==a;case"<=":return i<=a;case">=":return i>=a;case"<":return i<a;case">":return i>a;default:throw new Error(`Unsupported vector style expression: ${t}`)}}var xt={black:[0,0,0,1],white:[255,255,255,1],gray:[128,128,128,1],blue:[0,0,255,1],red:[255,0,0,1],green:[0,128,0,1]};function me(t){let e=/^rgba?\(([^)]+)\)$/.exec(t);if(e){let r=e[1].split(","),o=0,n=!0;for(o=0;o<r.length;o++)r[o]=Number(r[o]);for(r.length===3&&r.push(1),o=0;o<r.length;o++)Number.isFinite(r[o])||(n=!1);if(r.length===4&&n)return r}throw new Error(`Unsupported interpolated style color: ${t}`)}function pe(t){let e=0,r=0;t.length===4&&(t="#"+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);let o=[];for(e=1;e<6;e+=2)r=parseInt(t.slice(e,e+2),16),o.push(r);return o.push(1),o}function S(t){return Object.hasOwn(xt,t)?xt[t]:/^#[0-9a-f]{3}$/i.test(t)||/^#[0-9a-f]{6}$/i.test(t)?pe(t):me(t)}function he(t,e,r){let o=g(t[1],e,r),n=t[0][0]==="exponential"?t[0][1]:1,i=0,a=0,s=0,f=0,l=null,u=null,c=0,m="";if(o<=t[2])return g(t[3],e,r);for(i=4;i<t.length;i+=2)if(!(o>t[i])){if(a=t[i-2],s=t[i],f=n===1?(o-a)/(s-a):(n**(o-a)-1)/(n**(s-a)-1),l=g(t[i-1],e,r),u=g(t[i+1],e,r),typeof l=="number"&&typeof u=="number")return l+(u-l)*f;for(l=S(l),u=S(u),c=0;c<3;c++)c&&(m+=","),m+=Math.round(l[c]+(u[c]-l[c])*f);return`rgba(${m},${l[3]+(u[3]-l[3])*f})`}return g(t.at(-1),e,r)}function Mt(t,e,r,o){let n=0,i=null;for(n=e;n<r;n++)if(i=t[n],i===o||i!==i&&o!==o)return!0;return!1}function ft(t,e,r,o,n){let i=null;if(t==="!in")return i=O(e[0],r,o,n),!Mt(e,1,e.length,i);if(n)return i=O(e[0],r,o,!0),Mt(e,1,e.length,i);let a=g(e[1],r,o);return i=O(e[0],r,o,!1),a.includes(i)}function ge(t,e,r,o,n){if(t==="in")return ft(t,e,r,o,n);if(t==="interpolate")return he(e,r,o);throw new Error(`Unsupported vector style expression: ${t}`)}function de(t,e,r,o){let n=0,i=0;if(t==="+"){for(n=0;n<e.length;n++)i+=g(e[n],r,o);return i}if(t==="-")return e.length===1?-g(e[0],r,o):g(e[0],r,o)-g(e[1],r,o);throw new Error(`Unsupported vector style expression: ${t}`)}function xe(t,e,r){let o=g(t[0],e,r),n=0,i=!1;for(n=1;n<t.length-1;n+=2)if(Array.isArray(t[n])?i=t[n].includes(o):i=t[n]===o,i)return g(t[n+1],e,r);return g(t[t.length-1],e,r)}function Me(t,e,r,o,n){if(t==="!")return!g(e[0],r,o,n);if(t==="!=")return O(e[0],r,o,n)!==g(e[1],r,o);if(t==="!in")return ft(t,e,r,o,n);throw new Error(`Unsupported vector style expression: ${t}`)}function we(t,e,r,o){switch(t){case"literal":return e[0];case"get":return r[e[0]];case"has":return Object.hasOwn(r,e[0]);case"zoom":return o;default:throw new Error(`Unsupported vector style expression: ${t}`)}}function ye(t,e,r){let o=g(t[0],e,r),n=t[1],i=0;for(i=2;i<t.length&&!(o<t[i]);i+=2)n=t[i+1];return g(n,e,r)}function ve(t,e,r,o){if(t==="to-boolean")return!!g(e[0],r,o);if(t==="to-number"){let n=0,i=0;for(n=0;n<e.length;n++)if(i=Number(g(e[n],r,o)),Number.isFinite(i))return i;throw new Error("Invalid numeric style expression")}throw new Error(`Unsupported vector style expression: ${t}`)}function g(t,e,r,o=!1){if(!Array.isArray(t))return t;let n=t[0],i=t.slice(1),a=String(n);if(/^(?:literal|get|has|zoom)$/.test(a))return we(n,i,e,r);switch(a[0]){case"a":return le(n,i,e,r,o);case"!":return Me(n,i,e,r,o);case"=":case"<":case">":return ce(n,i,e,r,o);case"i":return ge(n,i,e,r,o);case"t":return ve(n,i,e,r,o);case"c":return ue(n,i,e,r,o);case"m":return xe(i,e,r);case"s":return ye(i,e,r);default:return de(n,i,e,r)}}function J(t,e,r){return r>=(t.minzoom??0)&&r<(t.maxzoom??1/0)&&t.layout?.visibility!=="none"&&(!t.filter||g(t.filter,e,r,!0))}function be(t,e,r,o){if(J(t,e,r))return r;for(r=o;r>=0&&!J(t,e,r);)r--;return r}function $(t,e,r,o,n){return t?.[e]===void 0?r:g(t[e],o,n)}function wt(t,e,r,o){let n=Math.atan2(t[e][1]-t[e-1][1],t[e][0]-t[e-1][0]),i=o>0?e:e-1,a=r,s=0,f;for(;i>=0&&i<t.length&&(s+=Math.hypot(t[i][0]-a[0],t[i][1]-a[1]),a=t[i],f=i+o,!(f<0||f>=t.length||Math.cos(Math.atan2(t[f][1]-t[i][1],t[f][0]-t[i][0])-n+(o<0?Math.PI:0))<.7));)i=f;return s}function Ie(t,e){let r=[],o=0,n,i,a,s,f,l,u,c;for(n=1;n<t.length;n++)o+=Math.hypot(t[n][0]-t[n-1][0],t[n][1]-t[n-1][1]);for(s=Math.max(1,Math.floor(o/e)),n=1,i=0,f=0;f<s;f++){for(a=(f+.5)*o/s;n<t.length-1&&i+Math.hypot(t[n][0]-t[n-1][0],t[n][1]-t[n-1][1])<a;)i+=Math.hypot(t[n][0]-t[n-1][0],t[n][1]-t[n-1][1]),n++;l=Math.hypot(t[n][0]-t[n-1][0],t[n][1]-t[n-1][1]),u=l?Math.min(1,Math.max(0,(a-i)/l)):0,c=[t[n-1][0]+(t[n][0]-t[n-1][0])*u,t[n-1][1]+(t[n][1]-t[n-1][1])*u],r.push({point:c,a:t[n-1],b:t[n],length:wt(t,n,c,1)+wt(t,n,c,-1)})}return r}function Ee(t,e,r){return t[r]??""}function Ce(t,e,r){let o=t.layout?.["text-field"];return Array.isArray(o)&&(o=g(o,e,r)),typeof o!="string"&&(o=""),o=o.replace(/\{([^}]+)\}/g,Ee.bind(null,e)),t.layout?.["text-transform"]==="uppercase"?o.toUpperCase():o}function F(t,e,r){let o=2**e.z,n=(e.x+t[0]/r)/o,i=(e.y+t[1]/r)/o;return[Math.atan(Math.sinh(Math.PI*(1-2*i)))*180/Math.PI,n*360-180]}function Pe(t,e,r,o,n,i,a,s,f){return{text:i,latlng:F(s.point,t.coords,e.extent),order:n,entry:r,properties:o,size:f,pixelBase:s.length*256/e.extent/2**t.coords.z,along:s.a?[F(s.a,t.coords,e.extent),F(s.b,t.coords,e.extent)]:null,icon:i.trim()?null:a,iconOffset:g(r.layout?.["icon-offset"],o,t.zoom)||[0,0],allowOverlap:r.layout?.["icon-allow-overlap"]===!0,color:$(r.paint,"text-color","#000",o,t.zoom),halo:$(r.paint,"text-halo-color","#fff",o,t.zoom),haloWidth:$(r.paint,"text-halo-width",0,o,t.zoom),priority:["place_labels","place"].includes(r["source-layer"])?0:["street_labels","transportation_name"].includes(r["source-layer"])?1:2}}function Te(t,e,r,o,n){let{properties:i}=o,{zoom:a}=t,s=Ce(r,i,a),f=r.layout?.["symbol-placement"]==="line"?null:g(r.layout?.["icon-image"],i,a);if(!s.trim()&&typeof f!="string")return;let l=$(r.layout,"text-size",12,i,a),u=o.type===2&&s.trim(),c=e.extent/16,m=[],h,p;for(h of u?o.geometry:o.geometry.slice(0,1))if(h?.length)if(!u)m.push({point:h[Math.floor(h.length/2)],a:null});else for(p of Ie(h,c))m.push(p);for(p of m)p.point[0]<0||p.point[0]>=e.extent||p.point[1]<0||p.point[1]>=e.extent||t.labels.push(Pe(t,e,r,i,n,s,f,p,l))}function N(t,e,r,o,n){return t[e]===void 0?r:g(t[e],o,n)}function Ae(t,e,r){let o=S(N(t,"fill-color","#000",e,r)),n=N(t,"fill-outline-color",null,e,r),i=n===null?null:S(n),a=N(t,"fill-opacity",1,e,r)*o[3],s={r:o[0]/255,g:o[1]/255,b:o[2]/255},f=i?{r:i[0]/255,g:i[1]/255,b:i[2]/255}:null;return{fillColor:s,fillOpacity:a,color:f,weight:.5}}function Ve(t,e,r,o){if(!t)return;let n=t,i=0,a="";if(typeof t[0]!="number"&&(n=g(t,r,o)),!Array.isArray(n))throw new TypeError("Style dash array must be an array");for(i=0;i<n.length;i++)i&&(a+=" "),a+=n[i]*e;return a}function Oe(t,e,r,o){let n=N(e,"line-width",1,r,o),i=S(N(e,"line-color","#000",r,o)),a=N(e,"line-opacity",1,r,o)*i[3],s=Ve(e["line-dasharray"],n,r,o),f=t.layout?.["line-cap"]||"butt",l=t.layout?.["line-join"]||"miter";return{color:{r:i[0]/255,g:i[1]/255,b:i[2]/255},opacity:a,weight:n,dashArray:s,lineCap:f,lineJoin:l}}function j(t,e,r){let o=t.paint||{};return t.type==="fill"?Ae(o,e,r):Oe(t,o,e,r)}function Se(t,e,r,o){if(t.type==="fill")return e.type===3?j(t,e.properties,r):null;if(t.type!=="line"||e.type!==2)return null;let n=j(t,e.properties,r),i;if(n.weight>0&&n.opacity>0)return n;for(i=o;i>=0;i--)if(J(t,e.properties,i)&&(n=j(t,e.properties,i),n.weight>0&&n.opacity>0))return n;return null}function I(t,e){return t[0][0]+(e-t[0][1])*(t[1][0]-t[0][0])/(t[1][1]-t[0][1])}function Fe(t,e){let r=0,o,n,i,a,s,f,l;for(;r<t.length;r++)for(n=t[r],o=r+1;o<t.length;o++)i=t[o],a=Math.max(n[0][1],i[0][1]),s=Math.min(n[1][1],i[1][1]),!(a>=s)&&(f=I(n,a)-I(i,a),l=I(n,s)-I(i,s),f*l<0&&e.add(a+(s-a)*f/(f-l)))}function Ne(t,e,r,o,n){let i=r,a=o,s=r;for(;i<o&&a<n;)t[a].x<t[i].x?e[s++]=t[a++]:e[s++]=t[i++];for(;i<o;)e[s++]=t[i++];for(;a<n;)e[s++]=t[a++]}function Ue(t){let e=new Array(t.length),r=1,o,n,i,a;for(;r<t.length;){for(o=0;o<t.length;o+=r*2)n=Math.min(o+r,t.length),i=Math.min(o+r*2,t.length),Ne(t,e,o,n,i);for(a=0;a<t.length;a++)t[a]=e[a];r*=2}}function Le(t,e,r,o){let n=(e+r)/2,i=[],a,s=0,f,l,u,c;for(a of t)a[0][1]<n&&a[1][1]>n&&i.push({edge:a,x:I(a,n)});if(Ue(i),i.length%2)throw new Error("Unbalanced MVT polygon edges");for(;s<i.length;s+=2){if(f=I(i[s].edge,e),l=I(i[s].edge,r),u=I(i[s+1].edge,e),c=I(i[s+1].edge,r),u<f-1e-8||c<l-1e-8)throw new Error("Crossing MVT polygon edges");(u-f)*(r-e)>1e-6&&o.push([[f,e],[u,e],[l,r]]),(c-l)*(r-e)>1e-6&&o.push([[u,e],[c,r],[l,r]])}}function H(t){let e=0;for(;e<t.length;e++)if(!Number.isFinite(t[e]))return!1;return!0}function Ge(t,e,r){let o,n,i,a;for(o of t){if(o.length<4||o[0][0]!==o.at(-1)[0]||o[0][1]!==o.at(-1)[1])throw new Error("MVT tessellation requires closed rings");for(n=1;n<o.length;n++){if(i=o[n-1],a=o[n],!H(i)||!H(a))throw new Error("Invalid MVT ring coordinate");r.add(i[1]),i[1]!==a[1]&&e.push([i[1]<a[1]?i:a,i[1]<a[1]?a:i])}}}function Be(t){let e=[],r,o=0,n=0,i,a,s=0;for(r of t)e.push(r);for(o=Math.floor(e.length/2);o>0;o=Math.floor(o/2))for(n=o;n<e.length;n++){for(a=e[n],i=n;i>=o&&e[i-o]>a;)e[i]=e[i-o],i-=o;e[i]=a}for(n=0;n<e.length;n++)(!s||e[n]-e[s-1]>1e-8)&&(e[s++]=e[n]);return e.length=s,e}function De(t){let e=[],r=new Set,o=[],n,i=1,a,s;for(Ge(t,e,r),Fe(e,r),n=Be(r);i<n.length;i++)a=n[i-1],s=n[i],s>a&&Le(e,a,s,o);return o}function ke(t){return t.message==="Polygon triangulation area mismatch"||t.message==="Degenerate polygon ring"||t.message==="Unable to triangulate polygon: invalid or self-intersecting rings"||t.message==="Unable to connect polygon hole"}function Re(t,e,r,o){let n,i,a,s,f=0;try{n=Q(e[0],e.slice(1));for(a of n){s=[];for(i of a)s.push([r[i].x,r[i].y]);o.push(s)}}catch(l){if(!ke(l))throw l;for(n=De(t);f<n.length;f++)o.push(n[f])}}function Ze(t){let e=[],r,o,n,i,a;for(n of t){if(n.length<4||n[0][0]!==n.at(-1)[0]||n[0][1]!==n.at(-1)[1])throw new Error("MVT tessellation requires closed rings");for(i=0,a=1;a<n.length;a++){if(!H(n[a])||!H(n[a-1]))throw new Error("Invalid MVT ring coordinate");i+=n[a-1][0]*n[a][1]-n[a][0]*n[a-1][1]}(!r||i&&Math.sign(i)===o)&&(r=[],e.push(r),o=Math.sign(i)),r.push(n)}return e}function $e(t){let e=[],r,o;for(r of t)for(o of r)e.push(o);return e}function je(t){let e=[],r,o,n;for(r of t){for(n=[],o=0;o<r.length-1;o++)n.push({x:r[o][0],y:r[o][1]});e.push(n)}return e}function He(t){let e=Ze(t),r=[],o,n,i;for(o of e)n=je(o),i=$e(n),Re(o,n,i,r);return r}function lt(t,e){if(t.length<3)return t;let r=new Uint8Array(t.length),o=[[0,t.length-1]],n=[];r[0]=r[t.length-1]=1;let i,a,s,f,l,u,c,m,h,p,d,x,M;for(;o.length;){for([i,a]=o.pop(),s=t[i],f=t[a],l=f[0]-s[0],u=f[1]-s[1],c=l*l+u*u,m=-1,h=e*e,p=i+1;p<a;p++)d=t[p],x=c?Math.max(0,Math.min(1,((d[0]-s[0])*l+(d[1]-s[1])*u)/c)):0,M=(d[0]-s[0]-x*l)**2+(d[1]-s[1]-x*u)**2,M>h&&(h=M,m=p);m>=0&&(r[m]=1,o.push([i,m],[m,a]))}for(p=0;p<t.length;p++)r[p]&&n.push(t[p]);return n}function _e(t,e,r,o){let n=[],i=[],a,s,f,l;for(l of t)l=lt(l,o),l.length>=4&&i.push(l);for(a of He(i)){s=[];for(f of a)s.push(F(f,e,r));n.push([s])}return n}function ze(t,e,r,o){let n=[],i,a,s,f;for(i of t)if(a=lt(i,o),!(a.length<3&&Math.hypot(a.at(-1)[0]-a[0][0],a.at(-1)[1]-a[0][1])<o*2)){s=[];for(f of a)s.push(F(f,e,r));n.push(s)}return n}function qe(t,e){return e.extent/256/2**Math.max(-1,t.mapZoom-t.coords.z)*.7}function We(t,e,r,o){let n=r.type==="fill"?t.triangles:t.projected,i=n.get(o);if(!i){let a=qe(t,e);i=r.type==="fill"?_e(o.geometry,t.coords,e.extent,a):ze(o.geometry,t.coords,e.extent,a),n.set(o,i)}return i}function yt(t,e,r,o,n,i,a,s){let f=[],l,u,c,m;for(l of a)f.push(o.properties[l]);l=JSON.stringify([s,f]),u=i.get(l),u||(u={kind:r.type,order:n,paint:s,properties:o.properties,entry:r,paths:[],coordinates:0},i.set(l,u));for(c of We(t,e,r,o))m=r.type==="fill"?3:c.length,u.coordinates+m>6e3&&u.paths.length&&(t.output.push({...u,paths:u.paths}),u.paths=[],u.coordinates=0),u.paths.push(c),u.coordinates+=m}function Xe(t,e,r,o){let n=new Map,i=fe(r),a=r.type==="fill"?r.paint?.["fill-outline-color"]:null,s=a?{...r,type:"line",paint:{"line-color":a,"line-width":1}}:null,f,l,u,c;for(f of e.features)if(l=be(r,f.properties,t.zoom,t.maxZoom),!(l<0)){if(r.type==="symbol"){Te(t,e,r,f,o);continue}u=Se(r,f,l,t.maxZoom),u&&(yt(t,e,r,f,o,n,i,u),s&&f.type===3&&yt(t,e,s,f,o,n,i,j(s,f.properties,l)))}for(c of n.values())c.paths.length&&t.output.push(c)}function Je(t,e,r,o,n,i=19,a=o){let s=se(t),f=new Map,l={coords:e,zoom:o,mapZoom:a,maxZoom:i,output:[],labels:[],triangles:new WeakMap,projected:new WeakMap},u,c,m;for(u of s)f.set(u.name,u);for([c,m]of r.entries())u=f.get(m["source-layer"]),!(!u||n!==void 0&&m.source!==n)&&Xe(l,u,m,c);return{batches:l.output,labels:l.labels}}function Ye({data:t}){try{let e=Je(t.buffer,t.coords,t.style,t.zoom,t.source,t.maxZoom,t.mapZoom);self.postMessage({id:t.id,...e})}catch(e){self.postMessage({id:t.id,error:e.message})}}function Ke(t,e,r){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(r)||e<0||r<=0||r>32e6||!Number.isSafeInteger(e+r)||t.size!==void 0&&e+r>t.size)throw new Error("Invalid COG byte range")}function Qe(t,e,r,o){if(!e||Number(e[1])!==r||Number(e[2])!==r+o-1||!Number.isSafeInteger(Number(e[3]))||Number(e[3])<r+o||(t.containerSize??t.size)!==void 0&&(t.containerSize??t.size)!==Number(e[3]))throw new Error("Invalid COG range response")}function tr(t){return t.status!==200||Number(t.headers.get("Content-Length"))>32e6}function er(t,e,r,o){let n=e.headers.get("ETag");if(t.etag&&t.etag!==n)throw new Error("COG changed; recreate the layer");n&&(t.etag=n);let i=/^bytes (\d+)-(\d+)\/(\d+)$/.exec(e.headers.get("Content-Range")||"");if(e.status===206)Qe(t,i,r,o),t.baseOffset===void 0&&(t.size=Number(i[3]));else if(tr(e))throw new Error("COG server must support byte ranges for files over 32 MB")}async function rr(t,e){let r=t.body.getReader(),o=[],n=0,i;try{for(;!(i=await r.read()).done;){if(n+=i.value.byteLength,n>(t.status===206?e:32e6))throw await r.cancel(),new Error("Oversized COG response");o.push(i.value)}}finally{r.releaseLock()}let a=new Uint8Array(n),s=0,f;for(f of o)a.set(f,s),s+=f.length;return a}async function v(t,e,r,o){if(o?.throwIfAborted(),Ke(t,e,r),t.full)return t.full.slice(e,e+r);let n=(t.baseOffset||0)+e,i=await fetch(t.url,{headers:{Range:`bytes=${n}-${n+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read COG: HTTP ${i.status}`);er(t,i,n,r);let a=await rr(i,r);if(i.status===200){if(t.baseOffset===void 0)t.size=a.byteLength;else if(a.byteLength!==t.containerSize)throw new Error("Truncated PMTiles COG container");t.full=t.baseOffset===void 0?a.buffer:a.slice(t.baseOffset,t.baseOffset+t.size)}let s=i.status===200?t.full.slice(e,e+r):a.buffer;if(s.byteLength!==r)throw new Error("Truncated COG byte range");return s}var or=[256,257,258,259,262,277,284,317,322,323,324,325,339,33550,33922,34735];async function nr(t,e,r,o,n){let i=e.getUint16(r*12+2,n),a=i===3?2:i===4?4:i===12?8:0,s=e.getUint32(r*12+4,n);if(!a||!s||s>1048576)throw new Error(`Unsupported COG tag ${o}`);let f=a*s<=4?new DataView(e.buffer,r*12+8,4):new DataView(await v(t,e.getUint32(r*12+8,n),a*s)),l=[],u;for(u=0;u<s;u++)l.push(i===3?f.getUint16(u*a,n):i===4?f.getUint32(u*a,n):f.getFloat64(u*a,n));return l}async function ir(t,e){let r=t.little,o=new DataView(await v(t,e,2)).getUint16(0,r);if(!o||o>128)throw new Error("Invalid COG directory size");let n=new DataView(await v(t,e+2,o*12+4)),i=new Map,a,s;for(a=0;a<o;a++){if(s=n.getUint16(a*12,r),s===42113)throw new Error("COG nodata tags are not supported; export complete tiles");if(s===34264)throw new Error("COG affine transformation matrices are not supported");if(or.includes(s)){if(i.has(s))throw new Error("Duplicate COG tag");i.set(s,await nr(t,n,a,s,r))}}return{tags:i,next:n.getUint32(o*12,r)}}function ar(t,e,r){return!!e&&!!r&&e%256===0&&r%256===0&&t.get(322)?.[0]===256&&t.get(323)?.[0]===256&&(t.get(259)?.[0]===1||t.get(259)?.[0]===8)&&(t.get(284)?.[0]??1)===1&&(t.get(317)?.[0]??1)===1}function sr(t,e,r,o,n,i,a){return n?t.get(262)?.[0]===1:(e===3||e===4)&&r?.length===e&&i&&a&&t.get(262)?.[0]===2}function fr(t){let e=t.get(256)?.[0],r=t.get(257)?.[0],o=t.get(277)?.[0]??1,n=t.get(258),i=t.get(339)||[1],a=!0,s=!0,f=!0,l;for(l of n||[])a&&=l===8;for(l of i)s&&=l===1,f&&=l===3;let u=o===1&&n?.length===1&&n[0]===32&&f;if(!ar(t,e,r)||!sr(t,o,n,i,u,a,s))throw new Error("Unsupported COG profile: expected tiled 256px RGB(A) Uint8 or Float32, DEFLATE without predictor");return{width:e,height:r,samples:o,elevation:u}}function lr(t){let e=!1,r=!1,o;if(t)for(o=4;o<t.length;o+=4)t[o+1]!==0||t[o+2]!==1||(t[o]===3072&&t[o+3]===3857&&(e=!0),t[o]===1025&&t[o+3]===1&&(r=!0));return e&&r}function vt(t){let e;for(e of t||[])if(!Number.isFinite(e))return!1;return!0}function ur(t,e,r){return!!t&&t[0]===1&&t.length===4+t[3]*4&&!!e&&e.length===3&&vt(e)&&e[0]>0&&Math.abs(e[0]-e[1])<=1e-8&&!!r&&r.length===6&&vt(r)&&r[0]===0&&r[1]===0}function cr(t,e,r,o){let n=t.get(34735),i=t.get(33550),a=t.get(33922);if(!ur(n,i,a)||!lr(n))throw new Error("COG must use north-up EPSG:3857 PixelIsArea georeferencing");return{width:e,height:r,resolution:i[0],left:a[3],top:a[4],elevation:o}}function mr(t,e,r,o,n,i,a){return o>=0&&o<=24&&Math.abs(20037508342789244e-9*2/(256*2**o)-a)<=a*1e-7&&(!r.elevation||Number.isInteger(n)&&Number.isInteger(i))&&Math.abs(e.width/r.width-e.height/r.height)<=1e-7&&r.elevation===e.elevation&&n>=0&&i>=0&&n+r.width/256<=2**o&&i+r.height/256<=2**o&&!t.levels.has(o)&&!(e.elevation&&t.levels.size)}function pr(t,e){if(e.offsets?.length!==e.columns*e.rows||e.lengths?.length!==e.offsets.length)throw new Error("Invalid COG tile offsets or lengths");let r;for(r=0;r<e.offsets.length;r++)if(!e.offsets[r]||!e.lengths[r]||e.lengths[r]>1048576||e.offsets[r]+e.lengths[r]>t.size)throw new Error("Invalid COG tile offsets or lengths")}function hr(t,e,r){let o=e.tags,n=fr(o);r.base||(r.base=cr(o,n.width,n.height,n.elevation));let i=r.base,a=i.resolution*i.width/n.width,s=Math.round(Math.log2(20037508342789244e-9*2/(256*a))),f=20037508342789244e-9*2/2**s,l=(i.left+20037508342789244e-9)/f,u=(20037508342789244e-9-i.top)/f;if(Math.abs(l-Math.round(l))<1e-6&&(l=Math.round(l)),Math.abs(u-Math.round(u))<1e-6&&(u=Math.round(u)),!mr(t,i,n,s,l,u,a))throw new Error("COG levels must align with the Web Mercator XYZ tile grid");let c={x:l,y:u,columns:n.width/256,rows:n.height/256,samples:n.samples,elevation:n.elevation,compression:o.get(259)[0],offsets:o.get(324),lengths:o.get(325)};pr(t,c),t.levels.set(s,c),r.minZoom=Math.min(r.minZoom,s),r.maxZoom=Math.max(r.maxZoom,s)}async function gr(t,e){let r={base:null,minZoom:1/0,maxZoom:-1/0},o=new Set,n;for(;e;){if(o.has(e)||o.size>=24)throw new Error("Cyclic or excessive COG directories");o.add(e),n=await ir(t,e),hr(t,n,r),e=n.next}if(!r.base)throw new Error("COG has no image directory");if(t.levels.size!==r.maxZoom-r.minZoom+1)throw new Error("COG overview zooms must be contiguous");return{base:r.base,minZoom:r.minZoom,maxZoom:r.maxZoom}}async function dr(t,e,r){if(r===1){if(t.byteLength!==e)throw new Error("Invalid uncompressed COG tile size");return t}let n=new Blob([t]).stream().pipeThrough(new DecompressionStream("deflate")).getReader(),i=new Uint8Array(e),a=0,s;try{for(;!(s=await n.read()).done;){if(a+s.value.length>e)throw await n.cancel(),new Error("Oversized decoded COG tile");i.set(s.value,a),a+=s.value.length}}finally{n.releaseLock()}if(a!==e)throw new Error("Truncated decoded COG tile");return i.buffer}async function ut(t,e,r,o,n){let i=o*e.columns+r;return dr(await v(t,e.offsets[i],e.lengths[i],n),256*256*(e.elevation?4:e.samples),e.compression)}async function xr(t,e,r,o,n){let i=await ut(t,e,r-e.x,o-e.y,n);n?.throwIfAborted();let a=new DataView(i),s=new Float32Array(256*256),f,l;for(f=0;f<s.length;f++){if(l=a.getFloat32(f*4,t.little),!Number.isFinite(l)||l<-12e3||l>1e4)throw new Error("Invalid or missing COG elevation sample");s[f]=l}return{data:s.buffer}}async function Mr(t,e,r,o,n){let i=new OffscreenCanvas(256,256),a=i.getContext("2d");if(!a)throw new Error("Unable to create COG tile canvas");let s=(r-e.x)*256,f=(o-e.y)*256,l,u,c,m,h,p,d;for(u=Math.max(0,Math.floor(f/256));u<Math.min(e.rows,Math.ceil(f/256+1));u++)for(l=Math.max(0,Math.floor(s/256));l<Math.min(e.columns,Math.ceil(s/256+1));l++){for(c=new Uint8Array(await ut(t,e,l,u,n)),n?.throwIfAborted(),m=new Uint8ClampedArray(256*256*4),h=0,p=0;h<c.length;h+=e.samples,p+=4)m[p]=c[h],m[p+1]=c[h+1],m[p+2]=c[h+2],m[p+3]=e.samples===4?c[h+3]:255;d=await createImageBitmap(new ImageData(m,256,256)),a.drawImage(d,l*256-s,u*256-f),d.close()}let x=i.transferToImageBitmap();return n?.aborted&&(x.close(),n.throwIfAborted()),{image:x}}function wr(t,e,r){return Number.isSafeInteger(t)&&Number.isSafeInteger(e)&&Number.isSafeInteger(r)&&t>=0&&t<=24&&e>=0&&r>=0&&e<2**t&&r<2**t}async function yr(t,e,r,o,n){if(n?.throwIfAborted(),!wr(e,r,o))throw new Error("Invalid COG tile coordinates");let i=t.levels.get(e);if(!(!i||r+1<=i.x||o+1<=i.y||r>=i.x+i.columns||o>=i.y+i.rows))return i.elevation?xr(t,i,r,o,n):Mr(t,i,r,o,n)}function vr(t){return t.header}var bt=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var It=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var Et=["minLon","minLat","maxLon","maxLat"];function br(t){let e=t.byteLength>=127?new DataView(t):null;if(!e||e.getUint32(0,!0)!==1767132496||e.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<bt.length;o++)r[bt[o]]=Number(e.getBigUint64(8+o*8,!0));for(o=0;o<It.length;o++)r[It[o]]=e.getUint8(96+o);for(o=0;o<Et.length;o++)r[Et[o]]=e.getInt32(102+o*4,!0)/1e7;return r.centerZoom=e.getUint8(118),r.centerLon=e.getInt32(119,!0)/1e7,r.centerLat=e.getInt32(123,!0)/1e7,r}function Ir(t,e){if(e.tileType!==0||e.tileCompression!==1||!Number.isSafeInteger(e.jsonMetadataOffset)||!Number.isSafeInteger(e.jsonMetadataLength)||e.jsonMetadataLength<=0||e.jsonMetadataLength>1048576||!Number.isSafeInteger(e.tileDataOffset)||!Number.isSafeInteger(e.tileDataLength)||e.tileDataOffset<127||e.tileDataOffset+e.tileDataLength>t.size)throw new Error("Invalid PMTiles COG asset container")}async function Er(t,e){if(e===1)return t;if(e!==2)throw new Error(`Unsupported PMTiles compression: ${e}`);let r=new Blob([t]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Cr(t,e,r){let o=JSON.parse(new TextDecoder().decode(await Er(await v(t,e.jsonMetadataOffset,e.jsonMetadataLength),e.internalCompression))),n=o.cog_assets||{},i=Object.hasOwn(n,r)?o.cog_assets[r]:null;if(o.format!=="cog-assets-v1"||!i||!Number.isSafeInteger(i.offset)||!Number.isSafeInteger(i.length)||i.offset<0||i.length<8||i.offset+i.length>e.tileDataLength)throw new Error(`Invalid or missing PMTiles COG asset: ${r}`);return i}async function Pr(t,e){let r={url:t},o=br(await v(r,0,127));Ir(r,o);let n=await Cr(r,o,e),i=o.tileDataOffset+n.offset;return{url:t,baseOffset:i,size:n.length,containerSize:r.size,etag:r.etag,full:r.full?.slice(i,i+n.length)}}async function Tr(t,e){let r=e===void 0?{url:t}:await Pr(t,e);r.levels=new Map;let o=new DataView(await v(r,0,8)),n=o.getUint16(0);if(n!==18761&&n!==19789)throw new Error("Invalid TIFF byte order");if(r.little=n===18761,o.getUint16(2,r.little)!==42)throw new Error("Expected classic TIFF (BigTIFF is not supported)");let{base:i,minZoom:a,maxZoom:s}=await gr(r,o.getUint32(4,r.little)),f=20037508342789244e-9,l=i.left+i.resolution/2,u=i.left+(i.width-.5)*i.resolution,c=i.top-i.resolution/2,m=i.top-(i.height-.5)*i.resolution;return r.header={minZoom:a,maxZoom:s,tileType:i.elevation?0:2,minLon:l/f*180,maxLon:u/f*180,minLat:Math.atan(Math.sinh(m/f*Math.PI))*180/Math.PI,maxLat:Math.atan(Math.sinh(c/f*Math.PI))*180/Math.PI},{getHeader:vr.bind(null,r),getZxy:yr.bind(null,r)}}var D=new Map;async function Ar({data:t}){try{let e=JSON.stringify([t.url,t.asset]);D.has(e)||(D.set(e,Tr(t.url,t.asset)),D.size>4&&D.delete(D.keys().next().value));let r=await D.get(e),o=t.z===void 0?await r.getHeader():await r.getZxy(t.z,t.x,t.y),n=[];o?.data&&n.push(o.data),o?.image&&n.push(o.image),self.postMessage(o,n)}catch(e){self.postMessage({error:{name:e.name,message:e.message}})}}var Vr=new TextDecoder;function Or(t){if(!t)return!1;let e,r;for(e of t)for(r of e.primitives)if(r.targets||r.mode!==void 0&&r.mode!==4)return!0;return!1}function Sr(t){let e=new DataView(t),r=Vr,o,n,i,a,s;if(e.getUint32(0,!0)===1179937895){if(e.getUint32(4,!0)!==2||e.getUint32(8,!0)!==t.byteLength)throw new Error("Invalid GLB header");let f;for(n=12;n<t.byteLength;){if(n+8>t.byteLength)throw new Error("Truncated GLB chunk");if(i=e.getUint32(n,!0),a=e.getUint32(n+4,!0),n+=8,n+i>t.byteLength)throw new Error("Truncated GLB data");s=t.slice(n,n+i),a===1313821514&&(o=JSON.parse(r.decode(s))),a===5130562&&(f=s),n+=i}if(!o)throw new Error("Missing GLB JSON");f&&(o.buffers[0].binary=f)}else o=JSON.parse(r.decode(t));if(o.skins?.length||o.animations?.length||o.extensionsRequired?.length||Or(o.meshes))throw new Error("Layer3D supports static triangle glTF models without required extensions");return o}async function Fr(t,e){if(t.binary)return;let r=await fetch(new URL(t.uri,e).href);if(!r.ok)throw new Error(`Unable to load model buffer: HTTP ${r.status}`);t.binary=await r.arrayBuffer()}var Nr={premultiplyAlpha:"none",colorSpaceConversion:"none"};async function Ur(t,e,r){let o;if(r.bufferView!==void 0){let n=t.bufferViews[r.bufferView],i=t.buffers[n.buffer].binary;o=new Blob([i.slice(n.byteOffset||0,(n.byteOffset||0)+n.byteLength)],{type:r.mimeType})}else{let n=await fetch(new URL(r.uri,e).href);if(!n.ok)throw new Error(`Unable to load model texture: HTTP ${n.status}`);o=await n.blob()}return createImageBitmap(o,Nr)}async function Lr(t,e){let r=[],o;for(o of t.buffers||U)r.push(Fr(o,e));await Promise.all(r);let n=[],i;for(i of t.images||U)n.push(Ur(t,e,i));return Promise.all(n)}var Gr=[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]];var ct={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};var Br={SCALAR:1,VEC2:2,VEC3:3,VEC4:4};function Dr(t,e,r){return e===Int8Array?t.getInt8(r):e===Uint8Array?t.getUint8(r):e===Int16Array?t.getInt16(r,!0):e===Uint16Array?t.getUint16(r,!0):e===Uint32Array?t.getUint32(r,!0):t.getFloat32(r,!0)}function mt(t,e,r,o,n,i,a,s,f,l){let u=t.bufferViews[a],c=e.BYTES_PER_ELEMENT,m=t.buffers[u.buffer].binary;if(l||=r*c,!m||l<r*c||s<0||(u.byteOffset||0)+u.byteLength>m.byteLength||(f-1)*l+r*c+s>u.byteLength)throw new Error("glTF accessor outside buffer view");let h=new DataView(m),p,d,x,M;for(p=0;p<f;p++){if(M=i?i[p]:p,i&&M>=n)throw new Error("Invalid sparse glTF index");for(d=0;d<r;d++)x=(u.byteOffset||0)+s+p*l+d*c,o[M*r+d]=Dr(h,e,x)}}function kr(t,e,r,o,n){let i=e.sparse,a=ct[i.indices.componentType];if(a!==Uint8Array&&a!==Uint16Array&&a!==Uint32Array)throw new Error("Invalid sparse glTF indices");let s=t.bufferViews[i.indices.bufferView],f=(s.byteOffset||0)+(i.indices.byteOffset||0);if(i.count>e.count||(i.indices.byteOffset||0)+i.count*a.BYTES_PER_ELEMENT>s.byteLength)throw new Error("Invalid sparse glTF indices");let l=new a(t.buffers[s.buffer].binary.slice(f,f+i.count*a.BYTES_PER_ELEMENT));mt(t,r,o,n,e.count,l,i.values.bufferView,i.values.byteOffset||0,i.count,0)}function Rr(t,e,r,o){let n=new Float32Array(r.length),i;for(i=0;i<r.length;i++)n[i]=t.normalized?Math.max(-1,r[i]/(e===Int8Array?127:e===Int16Array?32767:e===Uint8Array?255:e===Uint32Array?4294967295:65535)):r[i];return{data:n,size:o,indices:r}}function pt(t,e){let r=t.accessors[e],o=ct[r.componentType],n=Br[r.type];if(!o||!n||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");let i=new o(r.count*n);return r.bufferView!==void 0&&mt(t,o,n,i,r.count,null,r.bufferView,r.byteOffset||0,r.count,t.bufferViews[r.bufferView].byteStride),r.sparse&&kr(t,r,o,n,i),r.componentType===5126?{data:i,size:n}:Rr(r,o,i,n)}function Zr(t,e){let r={},o,n;for([o,n]of Gr)e.attributes[o]!==void 0&&(r[n]=pt(t,e.attributes[o]));if(!r.position)throw new Error("glTF mesh has no positions");let i=r.position.data.length/3;if(r.position.size!==3||i<3)throw new Error("Invalid glTF vertex attributes");let a;for(a of Object.values(r))if(a.data.length/a.size!==i)throw new Error("Invalid glTF vertex attributes");return{attributes:r,vertexCount:i}}function $r(t,e,r,o){if(e.indices!==void 0){let n=pt(t,e.indices);if(r.index={size:1,data:n.indices},!(n.indices instanceof Uint8Array||n.indices instanceof Uint16Array||n.indices instanceof Uint32Array)||n.size!==1||n.indices.length%3)throw new Error("Invalid glTF triangle indices");let i;for(i of n.indices)if(i>=o)throw new Error("Invalid glTF triangle indices")}else if(o%3)throw new Error("Incomplete glTF triangle")}function jr(t,e){let r=new Float32Array(t.length),o,n,i,a,s,f,l,u,c,m,h,p,d,x,M,_;for(o=0;o<(e?.length||t.length/3);o+=3)for(n=e?e[o]:o,i=e?e[o+1]:o+1,a=e?e[o+2]:o+2,s=t[i*3]-t[n*3],f=t[i*3+1]-t[n*3+1],l=t[i*3+2]-t[n*3+2],u=t[a*3]-t[n*3],c=t[a*3+1]-t[n*3+1],m=t[a*3+2]-t[n*3+2],p=f*m-l*c,d=l*u-s*m,x=s*c-f*u,h=0;h<3;h++)M=h===0?n:h===1?i:a,r[M*3]+=p,r[M*3+1]+=d,r[M*3+2]+=x;for(o=0;o<r.length;o+=3)for(_=Math.hypot(r[o],r[o+1],r[o+2])||1,h=0;h<3;h++)r[o+h]/=_;return r}function Hr(t,e){let{attributes:r,vertexCount:o}=Zr(t,e);return $r(t,e,r,o),r.normal||(r.normal={size:3,data:jr(r.position.data,r.index?.data)}),r.index?.data instanceof Uint8Array&&(r.index.data=Uint16Array.from(r.index.data)),e.preparedAttributes=r,r}function _r(t,e){let r=e.nodes.slice(),o=new Set,n=new Set,i=new Set,a,s,f,l,u;for(;r.length;)if(a=r.pop(),!o.has(a)){if(o.add(a),s=t.nodes[a],!s)throw new Error("Invalid glTF node");s.mesh!==void 0&&n.add(s.mesh);for(u of s.children||U)r.push(u)}for(a of n)for(f of t.meshes[a].primitives)for(l of Object.values(Hr(t,f)))i.add(l.data.buffer);return[...i]}async function zr(t){let e=await fetch(t);if(!e.ok)throw new Error(`Unable to load model: HTTP ${e.status}`);let r=Sr(await e.arrayBuffer()),o=r.scenes?.[r.scene||0];if(!o)throw new Error("Missing glTF scene");let n=await Lr(r,new URL(".",t).href),i=_r(r,o),a;for(a of n)i.push(a);return delete r.buffers,delete r.bufferViews,delete r.accessors,{description:r,images:n,transfers:i}}async function qr({data:t}){try{let e=await zr(t.url);self.postMessage({description:e.description,images:e.images},e.transfers)}catch(e){self.postMessage({error:{name:e.name,message:e.message}})}}function Jr(t){if(t.data.type==="model"){qr(t);return}if(t.data.type==="cog"){Ar(t);return}if(t.data.type==="vector"){Ye(t);return}try{let e=Yt(t.data),r=[e.positions.buffer,e.normals.buffer,e.colors.buffer,e.uvs.buffer];e.instanceOffsets&&r.push(e.instanceOffsets.buffer),self.postMessage(e,r)}catch(e){self.postMessage({error:{name:e.name,message:e.message}})}}self.addEventListener("message",Jr);})();
|
|
2
2
|
//# sourceMappingURL=leaflet-city-mapper-worker.js.map
|