@giro3d/piero 1.0.0-beta.1 → 1.0.0-beta.2
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/dist/Components.cjs.js +2 -2
- package/dist/Components.cjs.js.map +1 -1
- package/dist/Components.es.js +2410 -1513
- package/dist/Components.es.js.map +1 -1
- package/dist/assets/piero.css +2 -2
- package/dist/index.cjs.js +5 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +4420 -5626
- package/dist/index.es.js.map +1 -1
- package/dist/modules.cjs.js +2 -2
- package/dist/modules.cjs.js.map +1 -1
- package/dist/modules.es.js +944 -593
- package/dist/modules.es.js.map +1 -1
- package/dist/src/api/AnalysisApi.d.ts +15 -0
- package/dist/src/api/DatasetApi.d.ts +28 -0
- package/dist/src/api/NotificationApi.d.ts +10 -0
- package/dist/src/api/ViewApi.d.ts +4 -0
- package/dist/src/api/index.d.ts +2 -2
- package/dist/src/components/panels/AnalysisPanel.vue.d.ts +1 -1
- package/dist/src/components/panels/DatasetOrGroupItem.vue.d.ts +0 -2
- package/dist/src/components/panels/analysis/ToolWrapper.vue.d.ts +1 -6
- package/dist/src/context.d.ts +7 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/module.d.ts +4 -0
- package/dist/src/modules/ClippingBoxAnalysis.d.ts +18 -0
- package/dist/src/modules/CrossSectionAnalysis.d.ts +11 -0
- package/dist/src/modules/DownloadDataset.d.ts +12 -0
- package/dist/src/modules/FloodingPlaneAnalysis.d.ts +11 -0
- package/dist/src/modules/IFCLoader.d.ts +1 -0
- package/dist/src/modules/PLYLoader.d.ts +1 -0
- package/dist/src/modules/PotreeLoader.d.ts +1 -0
- package/dist/src/modules/Tour.d.ts +1 -0
- package/dist/src/{services/analysis → modules/clippingBoxAnalysis}/ClippingBoxManager.d.ts +9 -3
- package/dist/src/modules/clippingBoxAnalysis/store.d.ts +2268 -0
- package/dist/src/modules/crossSectionAnalysis/CrossSectionManager.d.ts +8 -0
- package/dist/src/modules/crossSectionAnalysis/store.d.ts +522 -0
- package/dist/src/modules/floodingPlaneAnalysis/FloodingPlaneManager.d.ts +9 -0
- package/dist/src/{types/FloodingPlane.d.ts → modules/floodingPlaneAnalysis/FloodingPlaneObject.d.ts} +2 -2
- package/dist/src/modules/floodingPlaneAnalysis/store.d.ts +16 -0
- package/dist/src/modules/index.d.ts +5 -1
- package/dist/src/services/Giro3DManager.d.ts +0 -2
- package/dist/src/services/Picker.d.ts +1 -1
- package/dist/src/stores/analysis.d.ts +19 -1569
- package/dist/src/stores/datasets.d.ts +23 -1
- package/dist/src/stores/modules.d.ts +5 -1
- package/dist/src/stores/modules.test.d.ts +1 -0
- package/dist/src/stores/notifications.d.ts +1 -0
- package/package.json +1 -1
- package/dist/src/components/charts/BarChart.vue.d.ts +0 -4
- package/dist/src/components/charts/DoughnutChart.vue.d.ts +0 -4
- package/dist/src/components/panels/LoadingIndicator.vue.d.ts +0 -6
- package/dist/src/components/panels/analysis/FloodingPlane.vue.d.ts +0 -2
- package/dist/src/services/AnalysisManager.d.ts +0 -10
- package/dist/src/services/analysis/CrossSectionManager.d.ts +0 -9
- package/dist/src/services/analysis/FloodingPlaneManager.d.ts +0 -11
- package/dist/src/stores/statistics.d.ts +0 -8
- /package/dist/src/{components/panels/analysis → modules/clippingBoxAnalysis}/ClippingBox.vue.d.ts +0 -0
- /package/dist/src/{components/panels/analysis → modules/crossSectionAnalysis}/CrossSection.vue.d.ts +0 -0
- /package/dist/src/{components/panels/analysis/Statistics.vue.d.ts → modules/floodingPlaneAnalysis/FloodingPlane.vue.d.ts} +0 -0
package/dist/index.cjs.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
"use strict";var pa=Object.defineProperty;var Aa=(i,t,e)=>t in i?pa(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var f=(i,t,e)=>Aa(i,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const St=require("pinia"),a=require("vue"),g=require("./Components.cjs.js"),yi=require("@giro3d/giro3d/core/geographic/Extent"),Ca=require("@giro3d/giro3d/entities/FeatureCollection"),ee=require("ol/format"),fa=require("ol/loadingstrategy.js"),Ia=require("ol/source/Vector"),va=require("ol/tilegrid.js"),ya=require("@giro3d/giro3d/sources/COPCSource"),ba=require("@giro3d/giro3d/sources/LASSource"),Ma=require("@giro3d/giro3d/core/OperationCounter"),wa=require("@giro3d/giro3d/entities/PointCloud"),Ea=require("@giro3d/giro3d/sources/PointCloudSource"),as=require("@loaders.gl/core"),_a=require("@loaders.gl/csv"),xa=require("@giro3d/giro3d/entities/Tiles3D"),Oa=require("@giro3d/giro3d/renderer/PointCloudMaterial"),ka=require("@loaders.gl/geopackage"),vs=require("@giro3d/giro3d/core/FeatureTypes"),pn=require("@giro3d/giro3d/entities/Entity3D"),Sa=require("ol/format/GeoJSON"),Na=require("ol/format/GPX"),Pa=require("ol/format/KML"),ct=require("@giro3d/giro3d/core/geographic/Coordinates"),La=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),os=require("@giro3d/giro3d/core/Instance"),Ta=require("@loaders.gl/shapefile"),Ba=require("@giro3d/giro3d/utils/ColorUtils"),ut=require("@giro3d/giro3d/entities/Shape"),Da=require("@giro3d/giro3d/core/picking/PickPointsAt"),An=require("@giro3d/giro3d/core/picking/PickTilesAt"),gi=require("@giro3d/giro3d/entities/Map"),le=require("@giro3d/giro3d/core/layer/ColorLayer"),Ne=require("@giro3d/giro3d/core/layer/ElevationLayer"),Va=require("@giro3d/giro3d/core/layer/Interpretation"),ui=require("@giro3d/giro3d/core/layer/MaskLayer"),ys=require("@giro3d/giro3d/formats/BilFormat"),Ra=require("@giro3d/giro3d/formats/GeoTIFFFormat"),Fa=require("@giro3d/giro3d/formats/MapboxTerrainFormat"),Ua=require("@giro3d/giro3d/sources/GeoTIFFSource"),Yt=require("@giro3d/giro3d/sources/TiledImageSource"),Ee=require("@giro3d/giro3d/sources/VectorSource"),bs=require("@giro3d/giro3d/sources/VectorTileSource"),$t=require("ol/source"),za=require("ol/source/WMTS"),Q=require("ol/style");require("@giro3d/giro3d/utils/HttpConfiguration");const Rt=require("@giro3d/giro3d/interactions/DrawTool"),Ga=require("@giro3d/giro3d/gui/Panel"),ja=require("@giro3d/giro3d/entities/AxisGrid"),Ha=require("ol/Feature"),Za=require("ol/geom/Polygon");require("@giro3d/giro3d/utils/Fetcher");require("@giro3d/giro3d/core/ColorMap");require("chroma-js");const Wa=require("@giro3d/giro3d/core/geographic/Extent.js"),qa=require("@giro3d/giro3d/entities/Map.js"),Ya=require("@giro3d/giro3d/sources/TiledImageSource.js"),Xa=require("ol/source/OSM"),Ja=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Qa=require("@giro3d/giro3d/utils/PromiseUtils"),Et=require("chart.js"),Ka=require("@tarekraafat/autocomplete.js");function $a(i){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const e in i)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(i,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:()=>i[e]})}}return t.default=i,Object.freeze(t)}const to=$a(Ja);class eo{constructor(t){f(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const e of t)this._store.add(e)}}let ki=null;function Cn(){return ki||(ki=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:g.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),ki}const si=new Map,fn={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},In={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class io extends Ca{constructor(t){const e=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const n=new Ia({format:new ee.GeoJSON,strategy:fa.tile(va.createXYZ({tileSize:512})),url:function(m){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${e}&startIndex=0&bbox=`}${m.join(",")},${e}`}}),o=t.extent??new yi("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),r=t.extrusionOffset??(h=>{const d=-h.getProperties().hauteur;return Number.isNaN(d)?0:d}),l=t.style??(h=>{const m=h.getProperties();let u="#FFFFFF";switch(m.usage_1){case"Agricole":u="#96ff0d";break;case"Commercial et services":u="#d8ffd4";break;case"Industriel":u="#f0bb41";break;case"Religieux":u="#41b5f0";break;case"Résidentiel":u="#cec8be";break;case"Sportif":u="#ff0d45";break}return{fill:{color:new g.Color(u),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),c={extent:o,extrusionOffset:r,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:n,style:l};super(c),this.name=t.source,g.fillObject3DUserData(this,{filename:s})}}const so=i=>{const t=i.dataset.config,e=new io({...t,featureProjection:i.instance.referenceCrs});return Promise.resolve(e)};class no extends Ea.PointCloudSourceBase{constructor(e){super();f(this,"dataProjection");f(this,"isCSVPointCloudSource",!0);f(this,"type","CSVPointCloudSource");f(this,"url");f(this,"_localVolume",null);f(this,"_metadata",null);f(this,"_opCounter",new Ma);f(this,"_origin",null);f(this,"_points",null);f(this,"_root",null);f(this,"_zArray",null);this.url=e.url,this.dataProjection=e.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(e){this._points!=null&&e.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(e){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return e.attribute!=null&&e.attribute.name==="Z"&&(s=new g.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:e.position?new g.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const e=await as.load(this.url,_a.CSVLoader,{csv:{shape:"array-row-table"},fetch:g.Fetcher.fetch}),s=new Float32Array(e.data.length*3),n=new Float32Array(e.data.length),o=new g.Box3().makeEmpty(),r=new g.Box3().makeEmpty(),l=new g.Vector3,c=new g.Vector3(e.data[0][0],e.data[0][1],e.data[0][2]);for(let u=0;u<e.data.length;u+=1){const d=e.data[u][0],C=e.data[u][1],p=e.data[u][2],A=d-c.x,v=C-c.y,I=p-c.z;o.expandByPoint(l.set(d,C,p)),r.expandByPoint(l.set(A,v,I)),s[u*3+0]=A,s[u*3+1]=v,s[u*3+2]=I,n[u]=p}this._points=s,this._zArray=n,this._origin=c,this._localVolume=r;const h=s.length/3,m={center:o.getCenter(new g.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:h,sourceId:this.id,volume:o};return this._root=m,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:o.max.z,min:o.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:h,volume:o},this._opCounter.decrement(),this}}class ao extends wa{constructor(e){super(e);f(this,"isPointCloudEntity",!0);const s=g.getConfig();if(this.colorMap=g.getColorMap(s.pointcloud),"url"in e.source){const n=g.Fetcher.getContext(e.source.url);g.fillObject3DUserData(this,{filename:n.filename})}}async initialize(e){await super.initialize(e),this.setActiveAttribute("Z")}}const oo=i=>{const{dataset:t}=i,e=t.config;let s;switch(e.source.type){case"copc":s=new ya({url:typeof e.source.url=="string"?g.getPublicFolderUrl(e.source.url):async(o,r)=>{const h=await e.source.url.slice(o,r).arrayBuffer();return new Uint8Array(h)}});break;case"csv":s=new no({...e.source});break;case"las":s=new ba({url:typeof e.source.url=="string"?g.getPublicFolderUrl(e.source.url):async()=>{const o=await g.Fetcher.fetchArrayBuffer(e.source.url);return new Uint8Array(o.slice(0))}});break;default:return e.source}const n=new ao({source:s});return Promise.resolve(n)};class vn extends xa{constructor(t,e){super({...t,...e}),g.fillObject3DUserData(this,{filename:t.url})}}const ro=i=>{const t=i.dataset.config,e=new vn({...t.source,url:g.getPublicFolderUrl(t.source.url)});return Promise.resolve(e)};class lo extends vn{constructor(t){const e=g.getConfig();super(t,{colorMap:g.getColorMap(e.pointcloud),pointCloudMode:Oa.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const co=i=>{const{dataset:t}=i,e=t.config,s=new lo({...e.source,name:e.name,url:g.getPublicFolderUrl(e.source.url)});return Promise.resolve(s)},Si=new ct("EPSG:4326",0,0,0);async function ho(i,t){const s=[];for(let o=0;o<i.length;o+=200){const r=i.slice(o,o+200),l=t.slice(o,o+200);s.push(go(r,l))}return(await Promise.all(s)).flat()}async function go(i,t){return(await g.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${i.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const yn={async alticode(i){const t=[],e=[];i.forEach(n=>{n.as("EPSG:4326",Si),t.push(Si.longitude),e.push(Si.latitude)}),(await ho(t,e)).forEach((n,o)=>{i[o]._values[2]=n})}},Ms=i=>yn.alticode(i),uo=i=>{const t=i.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(n=>{const o=t.getElevation({coordinates:n}).samples.sort((r,l)=>r.resolution-l.resolution).at(0);o!=null&&(n._values[2]=o.elevation)}),Promise.resolve())},mo=(i,t=0)=>async s=>{let n=s.filter(o=>o._values[2]===t);for(const o of i)if(await o(n),n=n.filter(r=>r._values[2]===t),n.length===0)break},bn=(i,t,e=0)=>t?mo([uo(i),Ms],e):Ms;function po(i){i("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),i("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),i("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),i.WGS84=i["EPSG:4326"],i["EPSG:3785"]=i["EPSG:3857"],i.GOOGLE=i["EPSG:3857"],i["EPSG:900913"]=i["EPSG:3857"],i["EPSG:102113"]=i["EPSG:3857"]}var Zt=1,Wt=2,oe=3,Ao=4,Ji=5,ws=6378137,Co=6356752314e-3,Es=.0066943799901413165,Pe=484813681109536e-20,x=Math.PI/2,fo=.16666666666666666,Io=.04722222222222222,vo=.022156084656084655,O=1e-10,$=.017453292519943295,_t=57.29577951308232,F=Math.PI/4,Le=Math.PI*2,X=3.14159265359,ht={};ht.greenwich=0;ht.lisbon=-9.131906111111;ht.paris=2.337229166667;ht.bogota=-74.080916666667;ht.madrid=-3.687938888889;ht.rome=12.452333333333;ht.bern=7.439583333333;ht.jakarta=106.807719444444;ht.ferro=-17.666666666667;ht.brussels=4.367975;ht.stockholm=18.058277777778;ht.athens=23.7163375;ht.oslo=10.722916666667;const yo={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var _s=/[\s_\-\/\(\)]/g;function Dt(i,t){if(i[t])return i[t];for(var e=Object.keys(i),s=t.toLowerCase().replace(_s,""),n=-1,o,r;++n<e.length;)if(o=e[n],r=o.toLowerCase().replace(_s,""),r===s)return i[o]}function Qi(i){var t={},e=i.split("+").map(function(l){return l.trim()}).filter(function(l){return l}).reduce(function(l,c){var h=c.split("=");return h.push(!0),l[h[0].toLowerCase()]=h[1],l},{}),s,n,o,r={proj:"projName",datum:"datumCode",rf:function(l){t.rf=parseFloat(l)},lat_0:function(l){t.lat0=l*$},lat_1:function(l){t.lat1=l*$},lat_2:function(l){t.lat2=l*$},lat_ts:function(l){t.lat_ts=l*$},lon_0:function(l){t.long0=l*$},lon_1:function(l){t.long1=l*$},lon_2:function(l){t.long2=l*$},alpha:function(l){t.alpha=parseFloat(l)*$},gamma:function(l){t.rectified_grid_angle=parseFloat(l)},lonc:function(l){t.longc=l*$},x_0:function(l){t.x0=parseFloat(l)},y_0:function(l){t.y0=parseFloat(l)},k_0:function(l){t.k0=parseFloat(l)},k:function(l){t.k0=parseFloat(l)},a:function(l){t.a=parseFloat(l)},b:function(l){t.b=parseFloat(l)},r_a:function(){t.R_A=!0},zone:function(l){t.zone=parseInt(l,10)},south:function(){t.utmSouth=!0},towgs84:function(l){t.datum_params=l.split(",").map(function(c){return parseFloat(c)})},to_meter:function(l){t.to_meter=parseFloat(l)},units:function(l){t.units=l;var c=Dt(yo,l);c&&(t.to_meter=c.to_meter)},from_greenwich:function(l){t.from_greenwich=l*$},pm:function(l){var c=Dt(ht,l);t.from_greenwich=(c||parseFloat(l))*$},nadgrids:function(l){l==="@null"?t.datumCode="none":t.nadgrids=l},axis:function(l){var c="ewnsud";l.length===3&&c.indexOf(l.substr(0,1))!==-1&&c.indexOf(l.substr(1,1))!==-1&&c.indexOf(l.substr(2,1))!==-1&&(t.axis=l)},approx:function(){t.approx=!0}};for(s in e)n=e[s],s in r?(o=r[s],typeof o=="function"?o(n):t[o]=n):t[s]=n;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class Mn{static getId(t){const e=t.find(s=>Array.isArray(s)&&s[0]==="ID");return e&&e.length>=3?{authority:e[1],code:parseInt(e[2],10)}:null}static convertUnit(t,e="unit"){if(!t||t.length<3)return{type:e,name:"unknown",conversion_factor:null};const s=t[1],n=parseFloat(t[2])||null,o=t.find(l=>Array.isArray(l)&&l[0]==="ID"),r=o?{authority:o[1],code:parseInt(o[2],10)}:null;return{type:e,name:s,conversion_factor:n,id:r}}static convertAxis(t){const e=t[1]||"Unknown";let s;const n=e.match(/^\((.)\)$/);if(n){const h=n[1].toUpperCase();if(h==="E")s="east";else if(h==="N")s="north";else if(h==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${h}`)}else s=t[2]?t[2].toLowerCase():"unknown";const o=t.find(h=>Array.isArray(h)&&h[0]==="ORDER"),r=o?parseInt(o[1],10):null,l=t.find(h=>Array.isArray(h)&&(h[0]==="LENGTHUNIT"||h[0]==="ANGLEUNIT"||h[0]==="SCALEUNIT")),c=this.convertUnit(l);return{name:e,direction:s,unit:c,order:r}}static extractAxes(t){return t.filter(e=>Array.isArray(e)&&e[0]==="AXIS").map(e=>this.convertAxis(e)).sort((e,s)=>(e.order||0)-(s.order||0))}static convert(t,e={}){switch(t[0]){case"PROJCRS":e.type="ProjectedCRS",e.name=t[1],e.base_crs=t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="BASEGEOGCRS")):null,e.conversion=t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="CONVERSION")):null;const s=t.find(d=>Array.isArray(d)&&d[0]==="CS");s&&(e.coordinate_system={type:s[1],axis:this.extractAxes(t)});const n=t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT");if(n){const d=this.convertUnit(n);e.coordinate_system.unit=d}e.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":e.type="GeographicCRS",e.name=t[1];const o=t.find(d=>Array.isArray(d)&&(d[0]==="DATUM"||d[0]==="ENSEMBLE"));if(o){const d=this.convert(o);o[0]==="ENSEMBLE"?e.datum_ensemble=d:e.datum=d;const C=t.find(p=>Array.isArray(p)&&p[0]==="PRIMEM");C&&C[1]!=="Greenwich"&&(d.prime_meridian={name:C[1],longitude:parseFloat(C[2])})}e.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},e.id=this.getId(t);break;case"DATUM":e.type="GeodeticReferenceFrame",e.name=t[1],e.ellipsoid=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":e.type="DatumEnsemble",e.name=t[1],e.members=t.filter(d=>Array.isArray(d)&&d[0]==="MEMBER").map(d=>({type:"DatumEnsembleMember",name:d[1],id:this.getId(d)}));const r=t.find(d=>Array.isArray(d)&&d[0]==="ENSEMBLEACCURACY");r&&(e.accuracy=parseFloat(r[1]));const l=t.find(d=>Array.isArray(d)&&d[0]==="ELLIPSOID");l&&(e.ellipsoid=this.convert(l)),e.id=this.getId(t);break;case"ELLIPSOID":e.type="Ellipsoid",e.name=t[1],e.semi_major_axis=parseFloat(t[2]),e.inverse_flattening=parseFloat(t[3]),t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT")&&this.convert(t.find(d=>Array.isArray(d)&&d[0]==="LENGTHUNIT"),e);break;case"CONVERSION":e.type="Conversion",e.name=t[1],e.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,e.parameters=t.filter(d=>Array.isArray(d)&&d[0]==="PARAMETER").map(d=>this.convert(d));break;case"METHOD":e.type="Method",e.name=t[1],e.id=this.getId(t);break;case"PARAMETER":e.type="Parameter",e.name=t[1],e.value=parseFloat(t[2]),e.unit=this.convertUnit(t.find(d=>Array.isArray(d)&&(d[0]==="LENGTHUNIT"||d[0]==="ANGLEUNIT"||d[0]==="SCALEUNIT"))),e.id=this.getId(t);break;case"BOUNDCRS":e.type="BoundCRS";const c=t.find(d=>Array.isArray(d)&&d[0]==="SOURCECRS");if(c){const d=c.find(C=>Array.isArray(C));e.source_crs=d?this.convert(d):null}const h=t.find(d=>Array.isArray(d)&&d[0]==="TARGETCRS");if(h){const d=h.find(C=>Array.isArray(C));e.target_crs=d?this.convert(d):null}const m=t.find(d=>Array.isArray(d)&&d[0]==="ABRIDGEDTRANSFORMATION");m?e.transformation=this.convert(m):e.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(e.type="Transformation",e.name=t[1],e.method=t.find(d=>Array.isArray(d)&&d[0]==="METHOD")?this.convert(t.find(d=>Array.isArray(d)&&d[0]==="METHOD")):null,e.parameters=t.filter(d=>Array.isArray(d)&&(d[0]==="PARAMETER"||d[0]==="PARAMETERFILE")).map(d=>{if(d[0]==="PARAMETER")return this.convert(d);if(d[0]==="PARAMETERFILE")return{name:d[1],value:d[2],id:{authority:"EPSG",code:8656}}}),e.parameters.length===7){const d=e.parameters[6];d.name==="Scale difference"&&(d.value=Math.round((d.value-1)*1e12)/1e6)}e.id=this.getId(t);break;case"AXIS":e.coordinate_system||(e.coordinate_system={type:"unspecified",axis:[]}),e.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const u=this.convertUnit(t,"LinearUnit");e.coordinate_system&&e.coordinate_system.axis&&e.coordinate_system.axis.forEach(d=>{d.unit||(d.unit=u)}),u.conversion_factor&&u.conversion_factor!==1&&e.semi_major_axis&&(e.semi_major_axis={value:e.semi_major_axis,unit:u});break;default:e.keyword=t[0];break}return e}}class bo extends Mn{static convert(t,e={}){return super.convert(t,e),e.coordinate_system&&e.coordinate_system.subtype==="Cartesian"&&delete e.coordinate_system,e.usage&&delete e.usage,e}}class Mo extends Mn{static convert(t,e={}){super.convert(t,e);const s=t.find(o=>Array.isArray(o)&&o[0]==="CS");s&&(e.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const n=t.find(o=>Array.isArray(o)&&o[0]==="USAGE");if(n){const o=n.find(c=>Array.isArray(c)&&c[0]==="SCOPE"),r=n.find(c=>Array.isArray(c)&&c[0]==="AREA"),l=n.find(c=>Array.isArray(c)&&c[0]==="BBOX");e.usage={},o&&(e.usage.scope=o[1]),r&&(e.usage.area=r[1]),l&&(e.usage.bbox=l.slice(1))}return e}}function wo(i){return i.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(i.find(t=>Array.isArray(t)&&t[0]==="CS")||i[0]==="BOUNDCRS"||i[0]==="PROJCRS"||i[0]==="GEOGCRS","2015")}function Eo(i){return(wo(i)==="2019"?Mo:bo).convert(i)}function _o(i){const t=i.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var Te=1,wn=2,En=3,di=4,_n=5,rs=-1,xo=/\s/,Oo=/[A-Za-z]/,ko=/[A-Za-z84_]/,bi=/[,\]]/,xn=/[\d\.E\-\+]/;function Nt(i){if(typeof i!="string")throw new Error("not a string");this.text=i.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=Te}Nt.prototype.readCharicter=function(){var i=this.text[this.place++];if(this.state!==di)for(;xo.test(i);){if(this.place>=this.text.length)return;i=this.text[this.place++]}switch(this.state){case Te:return this.neutral(i);case wn:return this.keyword(i);case di:return this.quoted(i);case _n:return this.afterquote(i);case En:return this.number(i);case rs:return}};Nt.prototype.afterquote=function(i){if(i==='"'){this.word+='"',this.state=di;return}if(bi.test(i)){this.word=this.word.trim(),this.afterItem(i);return}throw new Error(`havn't handled "`+i+'" in afterquote yet, index '+this.place)};Nt.prototype.afterItem=function(i){if(i===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=Te;return}if(i==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=Te,this.currentObject=this.stack.pop(),this.currentObject||(this.state=rs);return}};Nt.prototype.number=function(i){if(xn.test(i)){this.word+=i;return}if(bi.test(i)){this.word=parseFloat(this.word),this.afterItem(i);return}throw new Error(`havn't handled "`+i+'" in number yet, index '+this.place)};Nt.prototype.quoted=function(i){if(i==='"'){this.state=_n;return}this.word+=i};Nt.prototype.keyword=function(i){if(ko.test(i)){this.word+=i;return}if(i==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=Te;return}if(bi.test(i)){this.afterItem(i);return}throw new Error(`havn't handled "`+i+'" in keyword yet, index '+this.place)};Nt.prototype.neutral=function(i){if(Oo.test(i)){this.word=i,this.state=wn;return}if(i==='"'){this.word="",this.state=di;return}if(xn.test(i)){this.word=i,this.state=En;return}if(bi.test(i)){this.afterItem(i);return}throw new Error(`havn't handled "`+i+'" in neutral yet, index '+this.place)};Nt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===rs)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function So(i){var t=new Nt(i);return t.output()}function Ni(i,t,e){Array.isArray(t)&&(e.unshift(t),t=null);var s=t?{}:i,n=e.reduce(function(o,r){return ie(r,o),o},s);t&&(i[t]=n)}function ie(i,t){if(!Array.isArray(i)){t[i]=!0;return}var e=i.shift();if(e==="PARAMETER"&&(e=i.shift()),i.length===1){if(Array.isArray(i[0])){t[e]={},ie(i[0],t[e]);return}t[e]=i[0];return}if(!i.length){t[e]=!0;return}if(e==="TOWGS84"){t[e]=i;return}if(e==="AXIS"){e in t||(t[e]=[]),t[e].push(i);return}Array.isArray(e)||(t[e]={});var s;switch(e){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[e]={name:i[0].toLowerCase(),convert:i[1]},i.length===3&&ie(i[2],t[e]);return;case"SPHEROID":case"ELLIPSOID":t[e]={name:i[0],a:i[1],rf:i[2]},i.length===4&&ie(i[3],t[e]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":i[0]=["name",i[0]],Ni(t,e,i);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":i[0]=["name",i[0]],Ni(t,e,i),t[e].type=e;return;default:for(s=-1;++s<i.length;)if(!Array.isArray(i[s]))return ie(i,t[e]);return Ni(t,e,i)}}var No=.017453292519943295;function It(i){return i*No}function On(i){const t=(i.projName||"").toLowerCase().replace(/_/g," ");!i.long0&&i.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(i.long0=i.longc),!i.lat_ts&&i.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(i.lat0=It(i.lat1>0?90:-90),i.lat_ts=i.lat1,delete i.lat1):!i.lat_ts&&i.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(i.lat_ts=i.lat0,i.lat0=It(i.lat0>0?90:-90),delete i.lat1)}function xs(i){let t={units:null,to_meter:void 0};return typeof i=="string"?(t.units=i.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):i&&i.name&&(t.units=i.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=i.conversion_factor),t}function Os(i){return typeof i=="object"?i.value*i.unit.conversion_factor:i}function ks(i,t){i.ellipsoid.radius?(t.a=i.ellipsoid.radius,t.rf=0):(t.a=Os(i.ellipsoid.semi_major_axis),i.ellipsoid.inverse_flattening!==void 0?t.rf=i.ellipsoid.inverse_flattening:i.ellipsoid.semi_major_axis!==void 0&&i.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-Os(i.ellipsoid.semi_minor_axis))))}function mi(i,t={}){return!i||typeof i!="object"?i:i.type==="BoundCRS"?(mi(i.source_crs,t),i.transformation&&(i.transformation.method&&i.transformation.method.name==="NTv2"?t.nadgrids=i.transformation.parameters[0].value:t.datum_params=i.transformation.parameters.map(e=>e.value)),t):(Object.keys(i).forEach(e=>{const s=i[e];if(s!==null)switch(e){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&i.conversion&&i.conversion.method&&(t.projName=i.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,ks(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,ks(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(n=>{const o=n.direction;if(o==="east")return"e";if(o==="north")return"n";if(o==="west")return"w";if(o==="south")return"s";throw new Error(`Unknown axis direction: ${o}`)}).join("")+"u",s.unit){const{units:n,to_meter:o}=xs(s.unit);t.units=n,t.to_meter=o}else if(s.axis[0]&&s.axis[0].unit){const{units:n,to_meter:o}=xs(s.axis[0].unit);t.units=n,t.to_meter=o}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(n=>{const o=n.name.toLowerCase().replace(/\s+/g,"_"),r=n.value;n.unit&&n.unit.conversion_factor?t[o]=r*n.unit.conversion_factor:n.unit==="degree"?t[o]=r*Math.PI/180:t[o]=r});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":mi(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),On(t),t)}var Po=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function Lo(i,t){var e=t[0],s=t[1];!(e in i)&&s in i&&(i[e]=i[s],t.length===3&&(i[e]=t[2](i[e])))}function kn(i){for(var t=Object.keys(i),e=0,s=t.length;e<s;++e){var n=t[e];Po.indexOf(n)!==-1&&To(i[n]),typeof i[n]=="object"&&kn(i[n])}}function To(i){if(i.AUTHORITY){var t=Object.keys(i.AUTHORITY)[0];t&&t in i.AUTHORITY&&(i.title=t+":"+i.AUTHORITY[t])}if(i.type==="GEOGCS"?i.projName="longlat":i.type==="LOCAL_CS"?(i.projName="identity",i.local=!0):typeof i.PROJECTION=="object"?i.projName=Object.keys(i.PROJECTION)[0]:i.projName=i.PROJECTION,i.AXIS){for(var e="",s=0,n=i.AXIS.length;s<n;++s){var o=[i.AXIS[s][0].toLowerCase(),i.AXIS[s][1].toLowerCase()];o[0].indexOf("north")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="north"?e+="n":o[0].indexOf("south")!==-1||(o[0]==="y"||o[0]==="lat")&&o[1]==="south"?e+="s":o[0].indexOf("east")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="east"?e+="e":(o[0].indexOf("west")!==-1||(o[0]==="x"||o[0]==="lon")&&o[1]==="west")&&(e+="w")}e.length===2&&(e+="u"),e.length===3&&(i.axis=e)}i.UNIT&&(i.units=i.UNIT.name.toLowerCase(),i.units==="metre"&&(i.units="meter"),i.UNIT.convert&&(i.type==="GEOGCS"?i.DATUM&&i.DATUM.SPHEROID&&(i.to_meter=i.UNIT.convert*i.DATUM.SPHEROID.a):i.to_meter=i.UNIT.convert));var r=i.GEOGCS;i.type==="GEOGCS"&&(r=i),r&&(r.DATUM?i.datumCode=r.DATUM.name.toLowerCase():i.datumCode=r.name.toLowerCase(),i.datumCode.slice(0,2)==="d_"&&(i.datumCode=i.datumCode.slice(2)),i.datumCode==="new_zealand_1949"&&(i.datumCode="nzgd49"),(i.datumCode==="wgs_1984"||i.datumCode==="world_geodetic_system_1984")&&(i.PROJECTION==="Mercator_Auxiliary_Sphere"&&(i.sphere=!0),i.datumCode="wgs84"),i.datumCode==="belge_1972"&&(i.datumCode="rnb72"),r.DATUM&&r.DATUM.SPHEROID&&(i.ellps=r.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),i.ellps.toLowerCase().slice(0,13)==="international"&&(i.ellps="intl"),i.a=r.DATUM.SPHEROID.a,i.rf=parseFloat(r.DATUM.SPHEROID.rf,10)),r.DATUM&&r.DATUM.TOWGS84&&(i.datum_params=r.DATUM.TOWGS84),~i.datumCode.indexOf("osgb_1936")&&(i.datumCode="osgb36"),~i.datumCode.indexOf("osni_1952")&&(i.datumCode="osni52"),(~i.datumCode.indexOf("tm65")||~i.datumCode.indexOf("geodetic_datum_of_1965"))&&(i.datumCode="ire65"),i.datumCode==="ch1903+"&&(i.datumCode="ch1903"),~i.datumCode.indexOf("israel")&&(i.datumCode="isr93")),i.b&&!isFinite(i.b)&&(i.b=i.a),i.rectified_grid_angle&&(i.rectified_grid_angle=It(i.rectified_grid_angle));function l(m){var u=i.to_meter||1;return m*u}var c=function(m){return Lo(i,m)},h=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",It],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",It],["x0","false_easting",l],["y0","false_northing",l],["long0","central_meridian",It],["lat0","latitude_of_origin",It],["lat0","standard_parallel_1",It],["lat1","standard_parallel_1",It],["lat2","standard_parallel_2",It],["azimuth","Azimuth"],["alpha","azimuth",It],["srsCode","name"]];h.forEach(c),On(i)}function Sn(i){if(typeof i=="object")return mi(i);const t=_o(i);var e=So(i);if(t==="WKT2"){const o=Eo(e);return mi(o)}var s=e[0],n={};return ie(e,n),kn(n),n[s]}function nt(i){var t=this;if(arguments.length===2){var e=arguments[1];typeof e=="string"?e.charAt(0)==="+"?nt[i]=Qi(arguments[1]):nt[i]=Sn(arguments[1]):nt[i]=e}else if(arguments.length===1){if(Array.isArray(i))return i.map(function(s){Array.isArray(s)?nt.apply(t,s):nt(s)});if(typeof i=="string"){if(i in nt)return nt[i]}else"EPSG"in i?nt["EPSG:"+i.EPSG]=i:"ESRI"in i?nt["ESRI:"+i.ESRI]=i:"IAU2000"in i?nt["IAU2000:"+i.IAU2000]=i:console.log(i);return}}po(nt);function Bo(i){return typeof i=="string"}function Do(i){return i in nt}var Vo=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function Ro(i){return Vo.some(function(t){return i.indexOf(t)>-1})}var Fo=["3857","900913","3785","102113"];function Uo(i){var t=Dt(i,"authority");if(t){var e=Dt(t,"epsg");return e&&Fo.indexOf(e)>-1}}function zo(i){var t=Dt(i,"extension");if(t)return Dt(t,"proj4")}function Go(i){return i[0]==="+"}function jo(i){if(Bo(i)){if(Do(i))return nt[i];if(Ro(i)){var t=Sn(i);if(Uo(t))return nt["EPSG:3857"];var e=zo(t);return e?Qi(e):t}if(Go(i))return Qi(i)}else return i}function Ss(i,t){i=i||{};var e,s;if(!t)return i;for(s in t)e=t[s],e!==void 0&&(i[s]=e);return i}function Ot(i,t,e){var s=i*t;return e/Math.sqrt(1-s*s)}function Ve(i){return i<0?-1:1}function k(i){return Math.abs(i)<=X?i:i-Ve(i)*Le}function yt(i,t,e){var s=i*e,n=.5*i;return s=Math.pow((1-s)/(1+s),n),Math.tan(.5*(x-t))/s}function Be(i,t){for(var e=.5*i,s,n,o=x-2*Math.atan(t),r=0;r<=15;r++)if(s=i*Math.sin(o),n=x-2*Math.atan(t*Math.pow((1-s)/(1+s),e))-o,o+=n,Math.abs(n)<=1e-10)return o;return-9999}function Ho(){var i=this.b/this.a;this.es=1-i*i,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=Ot(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function Zo(i){var t=i.x,e=i.y;if(e*_t>90&&e*_t<-90&&t*_t>180&&t*_t<-180)return null;var s,n;if(Math.abs(Math.abs(e)-x)<=O)return null;if(this.sphere)s=this.x0+this.a*this.k0*k(t-this.long0),n=this.y0+this.a*this.k0*Math.log(Math.tan(F+.5*e));else{var o=Math.sin(e),r=yt(this.e,e,o);s=this.x0+this.a*this.k0*k(t-this.long0),n=this.y0-this.a*this.k0*Math.log(r)}return i.x=s,i.y=n,i}function Wo(i){var t=i.x-this.x0,e=i.y-this.y0,s,n;if(this.sphere)n=x-2*Math.atan(Math.exp(-e/(this.a*this.k0)));else{var o=Math.exp(-e/(this.a*this.k0));if(n=Be(this.e,o),n===-9999)return null}return s=k(this.long0+t/(this.a*this.k0)),i.x=s,i.y=n,i}var qo=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const Yo={init:Ho,forward:Zo,inverse:Wo,names:qo};function Xo(){}function Ns(i){return i}var Jo=["longlat","identity"];const Qo={init:Xo,forward:Ns,inverse:Ns,names:Jo};var Ko=[Yo,Qo],ni={},pi=[];function Nn(i,t){var e=pi.length;return i.names?(pi[e]=i,i.names.forEach(function(s){ni[s.toLowerCase()]=e}),this):(console.log(t),!0)}function $o(i){if(!i)return!1;var t=i.toLowerCase();if(typeof ni[t]<"u"&&pi[ni[t]])return pi[ni[t]]}function tr(){Ko.forEach(Nn)}const er={start:tr,add:Nn,get:$o};var P={};P.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};P.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};P.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};P.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};P.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};P.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};P.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};P.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};P.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};P.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};P.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};P.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};P.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};P.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};P.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};P.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};P.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};P.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};P.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};P.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};P.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};P.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};P.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};P.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};P.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};P.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};P.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};P.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};P.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};P.hough={a:6378270,rf:297,ellipseName:"Hough"};P.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};P.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};P.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};P.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};P.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};P.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};P.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};P.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};P.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};P.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};P.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};P.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var ir=P.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};P.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function sr(i,t,e,s){var n=i*i,o=t*t,r=(n-o)/n,l=0;s?(i*=1-r*(fo+r*(Io+r*vo)),n=i*i,r=0):l=Math.sqrt(r);var c=(n-o)/o;return{es:r,e:l,ep2:c}}function nr(i,t,e,s,n){if(!i){var o=Dt(P,s);o||(o=ir),i=o.a,t=o.b,e=o.rf}return e&&!t&&(t=(1-1/e)*i),(e===0||Math.abs(i-t)<O)&&(n=!0,t=i),{a:i,b:t,rf:e,sphere:n}}var K={};K.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};K.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};K.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};K.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};K.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};K.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};K.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};K.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};K.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};K.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};K.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};K.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};K.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};K.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};K.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};K.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};K.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function ar(i,t,e,s,n,o,r){var l={};return i===void 0||i==="none"?l.datum_type=Ji:l.datum_type=Ao,t&&(l.datum_params=t.map(parseFloat),(l.datum_params[0]!==0||l.datum_params[1]!==0||l.datum_params[2]!==0)&&(l.datum_type=Zt),l.datum_params.length>3&&(l.datum_params[3]!==0||l.datum_params[4]!==0||l.datum_params[5]!==0||l.datum_params[6]!==0)&&(l.datum_type=Wt,l.datum_params[3]*=Pe,l.datum_params[4]*=Pe,l.datum_params[5]*=Pe,l.datum_params[6]=l.datum_params[6]/1e6+1)),r&&(l.datum_type=oe,l.grids=r),l.a=e,l.b=s,l.es=n,l.ep2=o,l}var Pn={};function or(i,t){var e=new DataView(t),s=cr(e),n=hr(e,s);n.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var o=gr(e,n,s),r={header:n,subgrids:o};return Pn[i]=r,r}function rr(i){if(i===void 0)return null;var t=i.split(",");return t.map(lr)}function lr(i){if(i.length===0)return null;var t=i[0]==="@";return t&&(i=i.slice(1)),i==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:i,mandatory:!t,grid:Pn[i]||null,isNull:!1}}function se(i){return i/3600*Math.PI/180}function cr(i){var t=i.getInt32(8,!1);return t===11?!1:(t=i.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function hr(i,t){return{nFields:i.getInt32(8,t),nSubgridFields:i.getInt32(24,t),nSubgrids:i.getInt32(40,t),shiftType:Ki(i,56,64).trim(),fromSemiMajorAxis:i.getFloat64(120,t),fromSemiMinorAxis:i.getFloat64(136,t),toSemiMajorAxis:i.getFloat64(152,t),toSemiMinorAxis:i.getFloat64(168,t)}}function Ki(i,t,e){return String.fromCharCode.apply(null,new Uint8Array(i.buffer.slice(t,e)))}function gr(i,t,e){for(var s=176,n=[],o=0;o<t.nSubgrids;o++){var r=dr(i,s,e),l=mr(i,s,r,e),c=Math.round(1+(r.upperLongitude-r.lowerLongitude)/r.longitudeInterval),h=Math.round(1+(r.upperLatitude-r.lowerLatitude)/r.latitudeInterval);n.push({ll:[se(r.lowerLongitude),se(r.lowerLatitude)],del:[se(r.longitudeInterval),se(r.latitudeInterval)],lim:[c,h],count:r.gridNodeCount,cvs:ur(l)})}return n}function ur(i){return i.map(function(t){return[se(t.longitudeShift),se(t.latitudeShift)]})}function dr(i,t,e){return{name:Ki(i,t+8,t+16).trim(),parent:Ki(i,t+24,t+24+8).trim(),lowerLatitude:i.getFloat64(t+72,e),upperLatitude:i.getFloat64(t+88,e),lowerLongitude:i.getFloat64(t+104,e),upperLongitude:i.getFloat64(t+120,e),latitudeInterval:i.getFloat64(t+136,e),longitudeInterval:i.getFloat64(t+152,e),gridNodeCount:i.getInt32(t+168,e)}}function mr(i,t,e,s){for(var n=t+176,o=16,r=[],l=0;l<e.gridNodeCount;l++){var c={latitudeShift:i.getFloat32(n+l*o,s),longitudeShift:i.getFloat32(n+l*o+4,s),latitudeAccuracy:i.getFloat32(n+l*o+8,s),longitudeAccuracy:i.getFloat32(n+l*o+12,s)};r.push(c)}return r}function xt(i,t){if(!(this instanceof xt))return new xt(i);t=t||function(h){if(h)throw h};var e=jo(i);if(typeof e!="object"){t(i);return}var s=xt.projections.get(e.projName);if(!s){t(i);return}if(e.datumCode&&e.datumCode!=="none"){var n=Dt(K,e.datumCode);n&&(e.datum_params=e.datum_params||(n.towgs84?n.towgs84.split(","):null),e.ellps=n.ellipse,e.datumName=n.datumName?n.datumName:e.datumCode)}e.k0=e.k0||1,e.axis=e.axis||"enu",e.ellps=e.ellps||"wgs84",e.lat1=e.lat1||e.lat0;var o=nr(e.a,e.b,e.rf,e.ellps,e.sphere),r=sr(o.a,o.b,o.rf,e.R_A),l=rr(e.nadgrids),c=e.datum||ar(e.datumCode,e.datum_params,o.a,o.b,r.es,r.ep2,l);Ss(this,e),Ss(this,s),this.a=o.a,this.b=o.b,this.rf=o.rf,this.sphere=o.sphere,this.es=r.es,this.e=r.e,this.ep2=r.ep2,this.datum=c,this.init(),t(null,this)}xt.projections=er;xt.projections.start();function pr(i,t){return i.datum_type!==t.datum_type||i.a!==t.a||Math.abs(i.es-t.es)>5e-11?!1:i.datum_type===Zt?i.datum_params[0]===t.datum_params[0]&&i.datum_params[1]===t.datum_params[1]&&i.datum_params[2]===t.datum_params[2]:i.datum_type===Wt?i.datum_params[0]===t.datum_params[0]&&i.datum_params[1]===t.datum_params[1]&&i.datum_params[2]===t.datum_params[2]&&i.datum_params[3]===t.datum_params[3]&&i.datum_params[4]===t.datum_params[4]&&i.datum_params[5]===t.datum_params[5]&&i.datum_params[6]===t.datum_params[6]:!0}function Ln(i,t,e){var s=i.x,n=i.y,o=i.z?i.z:0,r,l,c,h;if(n<-x&&n>-1.001*x)n=-x;else if(n>x&&n<1.001*x)n=x;else{if(n<-x)return{x:-1/0,y:-1/0,z:i.z};if(n>x)return{x:1/0,y:1/0,z:i.z}}return s>Math.PI&&(s-=2*Math.PI),l=Math.sin(n),h=Math.cos(n),c=l*l,r=e/Math.sqrt(1-t*c),{x:(r+o)*h*Math.cos(s),y:(r+o)*h*Math.sin(s),z:(r*(1-t)+o)*l}}function Tn(i,t,e,s){var n=1e-12,o=n*n,r=30,l,c,h,m,u,d,C,p,A,v,I,w,M,y=i.x,E=i.y,_=i.z?i.z:0,S,T,q;if(l=Math.sqrt(y*y+E*E),c=Math.sqrt(y*y+E*E+_*_),l/e<n){if(S=0,c/e<n)return T=x,q=-s,{x:i.x,y:i.y,z:i.z}}else S=Math.atan2(E,y);h=_/c,m=l/c,u=1/Math.sqrt(1-t*(2-t)*m*m),p=m*(1-t)*u,A=h*u,M=0;do M++,C=e/Math.sqrt(1-t*A*A),q=l*p+_*A-C*(1-t*A*A),d=t*C/(C+q),u=1/Math.sqrt(1-d*(2-d)*m*m),v=m*(1-d)*u,I=h*u,w=I*p-v*A,p=v,A=I;while(w*w>o&&M<r);return T=Math.atan(I/Math.abs(v)),{x:S,y:T,z:q}}function Ar(i,t,e){if(t===Zt)return{x:i.x+e[0],y:i.y+e[1],z:i.z+e[2]};if(t===Wt){var s=e[0],n=e[1],o=e[2],r=e[3],l=e[4],c=e[5],h=e[6];return{x:h*(i.x-c*i.y+l*i.z)+s,y:h*(c*i.x+i.y-r*i.z)+n,z:h*(-l*i.x+r*i.y+i.z)+o}}}function Cr(i,t,e){if(t===Zt)return{x:i.x-e[0],y:i.y-e[1],z:i.z-e[2]};if(t===Wt){var s=e[0],n=e[1],o=e[2],r=e[3],l=e[4],c=e[5],h=e[6],m=(i.x-s)/h,u=(i.y-n)/h,d=(i.z-o)/h;return{x:m+c*u-l*d,y:-c*m+u+r*d,z:l*m-r*u+d}}}function We(i){return i===Zt||i===Wt}function fr(i,t,e){if(pr(i,t)||i.datum_type===Ji||t.datum_type===Ji)return e;var s=i.a,n=i.es;if(i.datum_type===oe){var o=Ps(i,!1,e);if(o!==0)return;s=ws,n=Es}var r=t.a,l=t.b,c=t.es;if(t.datum_type===oe&&(r=ws,l=Co,c=Es),n===c&&s===r&&!We(i.datum_type)&&!We(t.datum_type))return e;if(e=Ln(e,n,s),We(i.datum_type)&&(e=Ar(e,i.datum_type,i.datum_params)),We(t.datum_type)&&(e=Cr(e,t.datum_type,t.datum_params)),e=Tn(e,c,r,l),t.datum_type===oe){var h=Ps(t,!0,e);if(h!==0)return}return e}function Ps(i,t,e){if(i.grids===null||i.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-e.x,y:e.y},n={x:Number.NaN,y:Number.NaN},o=[],r=0;r<i.grids.length;r++){var l=i.grids[r];if(o.push(l.name),l.isNull){n=s;break}if(l.mandatory,l.grid===null){if(l.mandatory)return console.log("Unable to find mandatory grid '"+l.name+"'"),-1;continue}var c=l.grid.subgrids[0],h=(Math.abs(c.del[1])+Math.abs(c.del[0]))/1e4,m=c.ll[0]-h,u=c.ll[1]-h,d=c.ll[0]+(c.lim[0]-1)*c.del[0]+h,C=c.ll[1]+(c.lim[1]-1)*c.del[1]+h;if(!(u>s.y||m>s.x||C<s.y||d<s.x)&&(n=Ir(s,t,c),!isNaN(n.x)))break}return isNaN(n.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*_t+" "+s.y*_t+" tried: '"+o+"'"),-1):(e.x=-n.x,e.y=n.y,0)}function Ir(i,t,e){var s={x:Number.NaN,y:Number.NaN};if(isNaN(i.x))return s;var n={x:i.x,y:i.y};n.x-=e.ll[0],n.y-=e.ll[1],n.x=k(n.x-Math.PI)+Math.PI;var o=Ls(n,e);if(t){if(isNaN(o.x))return s;o.x=n.x-o.x,o.y=n.y-o.y;var r=9,l=1e-12,c,h;do{if(h=Ls(o,e),isNaN(h.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}c={x:n.x-(h.x+o.x),y:n.y-(h.y+o.y)},o.x+=c.x,o.y+=c.y}while(r--&&Math.abs(c.x)>l&&Math.abs(c.y)>l);if(r<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=k(o.x+e.ll[0]),s.y=o.y+e.ll[1]}else isNaN(o.x)||(s.x=i.x+o.x,s.y=i.y+o.y);return s}function Ls(i,t){var e={x:i.x/t.del[0],y:i.y/t.del[1]},s={x:Math.floor(e.x),y:Math.floor(e.y)},n={x:e.x-1*s.x,y:e.y-1*s.y},o={x:Number.NaN,y:Number.NaN},r;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return o;r=s.y*t.lim[0]+s.x;var l={x:t.cvs[r][0],y:t.cvs[r][1]};r++;var c={x:t.cvs[r][0],y:t.cvs[r][1]};r+=t.lim[0];var h={x:t.cvs[r][0],y:t.cvs[r][1]};r--;var m={x:t.cvs[r][0],y:t.cvs[r][1]},u=n.x*n.y,d=n.x*(1-n.y),C=(1-n.x)*(1-n.y),p=(1-n.x)*n.y;return o.x=C*l.x+d*c.x+p*m.x+u*h.x,o.y=C*l.y+d*c.y+p*m.y+u*h.y,o}function Ts(i,t,e){var s=e.x,n=e.y,o=e.z||0,r,l,c,h={};for(c=0;c<3;c++)if(!(t&&c===2&&e.z===void 0))switch(c===0?(r=s,"ew".indexOf(i.axis[c])!==-1?l="x":l="y"):c===1?(r=n,"ns".indexOf(i.axis[c])!==-1?l="y":l="x"):(r=o,l="z"),i.axis[c]){case"e":h[l]=r;break;case"w":h[l]=-r;break;case"n":h[l]=r;break;case"s":h[l]=-r;break;case"u":e[l]!==void 0&&(h.z=r);break;case"d":e[l]!==void 0&&(h.z=-r);break;default:return null}return h}function Bn(i){var t={x:i[0],y:i[1]};return i.length>2&&(t.z=i[2]),i.length>3&&(t.m=i[3]),t}function vr(i){Bs(i.x),Bs(i.y)}function Bs(i){if(typeof Number.isFinite=="function"){if(Number.isFinite(i))return;throw new TypeError("coordinates must be finite numbers")}if(typeof i!="number"||i!==i||!isFinite(i))throw new TypeError("coordinates must be finite numbers")}function yr(i,t){return(i.datum.datum_type===Zt||i.datum.datum_type===Wt||i.datum.datum_type===oe)&&t.datumCode!=="WGS84"||(t.datum.datum_type===Zt||t.datum.datum_type===Wt||t.datum.datum_type===oe)&&i.datumCode!=="WGS84"}function Ai(i,t,e,s){var n;Array.isArray(e)?e=Bn(e):e={x:e.x,y:e.y,z:e.z,m:e.m};var o=e.z!==void 0;if(vr(e),i.datum&&t.datum&&yr(i,t)&&(n=new xt("WGS84"),e=Ai(i,n,e,s),i=n),s&&i.axis!=="enu"&&(e=Ts(i,!1,e)),i.projName==="longlat")e={x:e.x*$,y:e.y*$,z:e.z||0};else if(i.to_meter&&(e={x:e.x*i.to_meter,y:e.y*i.to_meter,z:e.z||0}),e=i.inverse(e),!e)return;if(i.from_greenwich&&(e.x+=i.from_greenwich),e=fr(i.datum,t.datum,e),!!e)return t.from_greenwich&&(e={x:e.x-t.from_greenwich,y:e.y,z:e.z||0}),t.projName==="longlat"?e={x:e.x*_t,y:e.y*_t,z:e.z||0}:(e=t.forward(e),t.to_meter&&(e={x:e.x/t.to_meter,y:e.y/t.to_meter,z:e.z||0})),s&&t.axis!=="enu"?Ts(t,!0,e):(o||delete e.z,e)}var Ds=xt("WGS84");function Pi(i,t,e,s){var n,o,r;return Array.isArray(e)?(n=Ai(i,t,e,s)||{x:NaN,y:NaN},e.length>2?typeof i.name<"u"&&i.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof n.z=="number"?[n.x,n.y,n.z].concat(e.splice(3)):[n.x,n.y,e[2]].concat(e.splice(3)):[n.x,n.y].concat(e.splice(2)):[n.x,n.y]):(o=Ai(i,t,e,s),r=Object.keys(e),r.length===2||r.forEach(function(l){if(typeof i.name<"u"&&i.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(l==="x"||l==="y"||l==="z")return}else if(l==="x"||l==="y")return;o[l]=e[l]}),o)}function Vs(i){return i instanceof xt?i:i.oProj?i.oProj:xt(i)}function dt(i,t,e){i=Vs(i);var s=!1,n;return typeof t>"u"?(t=i,i=Ds,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(e=t,t=i,i=Ds,s=!0),t=Vs(t),e?Pi(i,t,e):(n={forward:function(o,r){return Pi(i,t,o,r)},inverse:function(o,r){return Pi(t,i,o,r)}},s&&(n.oProj=t),n)}var Rs=6,Dn="AJSAJS",Vn="AFAFAF",ne=65,lt=73,pt=79,_e=86,xe=90;const br={forward:Rn,inverse:Mr,toPoint:Fn};function Rn(i,t){return t=t||5,_r(wr({lat:i[1],lon:i[0]}),t)}function Mr(i){var t=ls(zn(i.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function Fn(i){var t=ls(zn(i.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function Li(i){return i*(Math.PI/180)}function Fs(i){return 180*(i/Math.PI)}function wr(i){var t=i.lat,e=i.lon,s=6378137,n=.00669438,o=.9996,r,l,c,h,m,u,d,C=Li(t),p=Li(e),A,v;v=Math.floor((e+180)/6)+1,e===180&&(v=60),t>=56&&t<64&&e>=3&&e<12&&(v=32),t>=72&&t<84&&(e>=0&&e<9?v=31:e>=9&&e<21?v=33:e>=21&&e<33?v=35:e>=33&&e<42&&(v=37)),r=(v-1)*6-180+3,A=Li(r),l=n/(1-n),c=s/Math.sqrt(1-n*Math.sin(C)*Math.sin(C)),h=Math.tan(C)*Math.tan(C),m=l*Math.cos(C)*Math.cos(C),u=Math.cos(C)*(p-A),d=s*((1-n/4-3*n*n/64-5*n*n*n/256)*C-(3*n/8+3*n*n/32+45*n*n*n/1024)*Math.sin(2*C)+(15*n*n/256+45*n*n*n/1024)*Math.sin(4*C)-35*n*n*n/3072*Math.sin(6*C));var I=o*c*(u+(1-h+m)*u*u*u/6+(5-18*h+h*h+72*m-58*l)*u*u*u*u*u/120)+5e5,w=o*(d+c*Math.tan(C)*(u*u/2+(5-h+9*m+4*m*m)*u*u*u*u/24+(61-58*h+h*h+600*m-330*l)*u*u*u*u*u*u/720));return t<0&&(w+=1e7),{northing:Math.round(w),easting:Math.round(I),zoneNumber:v,zoneLetter:Er(t)}}function ls(i){var t=i.northing,e=i.easting,s=i.zoneLetter,n=i.zoneNumber;if(n<0||n>60)return null;var o=.9996,r=6378137,l=.00669438,c,h=(1-Math.sqrt(1-l))/(1+Math.sqrt(1-l)),m,u,d,C,p,A,v,I,w,M=e-5e5,y=t;s<"N"&&(y-=1e7),v=(n-1)*6-180+3,c=l/(1-l),A=y/o,I=A/(r*(1-l/4-3*l*l/64-5*l*l*l/256)),w=I+(3*h/2-27*h*h*h/32)*Math.sin(2*I)+(21*h*h/16-55*h*h*h*h/32)*Math.sin(4*I)+151*h*h*h/96*Math.sin(6*I),m=r/Math.sqrt(1-l*Math.sin(w)*Math.sin(w)),u=Math.tan(w)*Math.tan(w),d=c*Math.cos(w)*Math.cos(w),C=r*(1-l)/Math.pow(1-l*Math.sin(w)*Math.sin(w),1.5),p=M/(m*o);var E=w-m*Math.tan(w)/C*(p*p/2-(5+3*u+10*d-4*d*d-9*c)*p*p*p*p/24+(61+90*u+298*d+45*u*u-252*c-3*d*d)*p*p*p*p*p*p/720);E=Fs(E);var _=(p-(1+2*u+d)*p*p*p/6+(5-2*d+28*u-3*d*d+8*c+24*u*u)*p*p*p*p*p/120)/Math.cos(w);_=v+Fs(_);var S;if(i.accuracy){var T=ls({northing:i.northing+i.accuracy,easting:i.easting+i.accuracy,zoneLetter:i.zoneLetter,zoneNumber:i.zoneNumber});S={top:T.lat,right:T.lon,bottom:E,left:_}}else S={lat:E,lon:_};return S}function Er(i){var t="Z";return 84>=i&&i>=72?t="X":72>i&&i>=64?t="W":64>i&&i>=56?t="V":56>i&&i>=48?t="U":48>i&&i>=40?t="T":40>i&&i>=32?t="S":32>i&&i>=24?t="R":24>i&&i>=16?t="Q":16>i&&i>=8?t="P":8>i&&i>=0?t="N":0>i&&i>=-8?t="M":-8>i&&i>=-16?t="L":-16>i&&i>=-24?t="K":-24>i&&i>=-32?t="J":-32>i&&i>=-40?t="H":-40>i&&i>=-48?t="G":-48>i&&i>=-56?t="F":-56>i&&i>=-64?t="E":-64>i&&i>=-72?t="D":-72>i&&i>=-80&&(t="C"),t}function _r(i,t){var e="00000"+i.easting,s="00000"+i.northing;return i.zoneNumber+i.zoneLetter+xr(i.easting,i.northing,i.zoneNumber)+e.substr(e.length-5,t)+s.substr(s.length-5,t)}function xr(i,t,e){var s=Un(e),n=Math.floor(i/1e5),o=Math.floor(t/1e5)%20;return Or(n,o,s)}function Un(i){var t=i%Rs;return t===0&&(t=Rs),t}function Or(i,t,e){var s=e-1,n=Dn.charCodeAt(s),o=Vn.charCodeAt(s),r=n+i-1,l=o+t,c=!1;r>xe&&(r=r-xe+ne-1,c=!0),(r===lt||n<lt&&r>lt||(r>lt||n<lt)&&c)&&r++,(r===pt||n<pt&&r>pt||(r>pt||n<pt)&&c)&&(r++,r===lt&&r++),r>xe&&(r=r-xe+ne-1),l>_e?(l=l-_e+ne-1,c=!0):c=!1,(l===lt||o<lt&&l>lt||(l>lt||o<lt)&&c)&&l++,(l===pt||o<pt&&l>pt||(l>pt||o<pt)&&c)&&(l++,l===lt&&l++),l>_e&&(l=l-_e+ne-1);var h=String.fromCharCode(r)+String.fromCharCode(l);return h}function zn(i){if(i&&i.length===0)throw"MGRSPoint coverting from nothing";for(var t=i.length,e=null,s="",n,o=0;!/[A-Z]/.test(n=i.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+i;s+=n,o++}var r=parseInt(s,10);if(o===0||o+3>t)throw"MGRSPoint bad conversion from: "+i;var l=i.charAt(o++);if(l<="A"||l==="B"||l==="Y"||l>="Z"||l==="I"||l==="O")throw"MGRSPoint zone letter "+l+" not handled: "+i;e=i.substring(o,o+=2);for(var c=Un(r),h=kr(e.charAt(0),c),m=Sr(e.charAt(1),c);m<Nr(l);)m+=2e6;var u=t-o;if(u%2!==0)throw`MGRSPoint has to have an even number
|
|
1
|
+
"use strict";var Pa=Object.defineProperty;var Ta=(e,t,i)=>t in e?Pa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var p=(e,t,i)=>Ta(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const kt=require("pinia"),o=require("vue"),A=require("./Components.cjs.js"),Qe=require("@giro3d/giro3d/core/geographic/Extent"),Da=require("@giro3d/giro3d/entities/FeatureCollection"),Wt=require("ol/format"),Ba=require("ol/loadingstrategy.js"),Va=require("ol/source/Vector"),Ra=require("ol/tilegrid.js"),Fa=require("@giro3d/giro3d/sources/COPCSource"),Ua=require("@giro3d/giro3d/sources/LASSource"),za=require("@giro3d/giro3d/core/OperationCounter"),ja=require("@giro3d/giro3d/entities/PointCloud"),Ga=require("@giro3d/giro3d/sources/PointCloudSource"),Ti=require("@loaders.gl/core"),Ha=require("@loaders.gl/csv"),Za=require("@giro3d/giro3d/entities/Tiles3D"),Wa=require("@giro3d/giro3d/renderer/PointCloudMaterial"),qa=require("@loaders.gl/geopackage"),qi=require("@giro3d/giro3d/core/FeatureTypes"),Di=require("@giro3d/giro3d/entities/Entity3D"),Ya=require("ol/format/GeoJSON"),Ja=require("ol/format/GPX"),Xa=require("ol/format/KML"),at=require("@giro3d/giro3d/core/geographic/Coordinates"),Ka=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),Bi=require("@giro3d/giro3d/core/Instance"),Qa=require("@loaders.gl/shapefile"),$a=require("@giro3d/giro3d/utils/ColorUtils"),rt=require("@giro3d/giro3d/entities/Shape"),tn=require("@giro3d/giro3d/core/picking/PickPointsAt"),Ts=require("@giro3d/giro3d/core/picking/PickTilesAt"),je=require("@giro3d/giro3d/entities/Map"),$t=require("@giro3d/giro3d/core/layer/ColorLayer"),fe=require("@giro3d/giro3d/core/layer/ElevationLayer"),en=require("@giro3d/giro3d/core/layer/Interpretation"),Ge=require("@giro3d/giro3d/core/layer/MaskLayer"),Yi=require("@giro3d/giro3d/formats/BilFormat"),sn=require("@giro3d/giro3d/formats/GeoTIFFFormat"),an=require("@giro3d/giro3d/formats/MapboxTerrainFormat"),nn=require("@giro3d/giro3d/sources/GeoTIFFSource"),Ft=require("@giro3d/giro3d/sources/TiledImageSource"),de=require("@giro3d/giro3d/sources/VectorSource"),Ji=require("@giro3d/giro3d/sources/VectorTileSource"),Ht=require("ol/source"),on=require("ol/source/WMTS"),q=require("ol/style");require("@giro3d/giro3d/utils/HttpConfiguration");const Nt=require("@giro3d/giro3d/interactions/DrawTool"),rn=require("@giro3d/giro3d/gui/Panel"),ln=require("@giro3d/giro3d/entities/AxisGrid"),hn=require("ol/Feature"),cn=require("ol/geom/Polygon");require("@giro3d/giro3d/utils/Fetcher");require("@giro3d/giro3d/core/ColorMap");require("chroma-js");const gn=require("@giro3d/giro3d/core/geographic/Extent.js"),un=require("@giro3d/giro3d/entities/Map.js"),dn=require("@giro3d/giro3d/sources/TiledImageSource.js"),An=require("ol/source/OSM"),mn=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const Cn=require("@tarekraafat/autocomplete.js");function fn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const In=fn(mn);class pn{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class vn{constructor(t){p(this,"_store");this._store=t}clearBookmarks(){this._store.clear()}getBookmarks(){return this._store.getBookmarks()}setBookmarks(t){this._store.clear();for(const i of t)this._store.add(i)}}let oi=null;function Ds(){return oi||(oi=[{enabled:!0,icon:"bi-database",key:"datasets",title:"Datasets"},{enabled:!0,icon:"bi-vector-pen",key:"annotations",title:"Annotations"},{enabled:A.hasExperimentalFeature("measurements"),icon:"bi-rulers",key:"measures",title:"Measurements"},{enabled:!0,icon:"bi-graph-up",key:"analysis",title:"Analysis"},{enabled:!0,icon:"bi-bookmarks",key:"bookmarks",title:"Bookmarks"},{enabled:!0,icon:"bi-info-circle",key:"about",title:"About Piero"}]),oi}const De=new Map,Bs={colorLayer:"fg-landcover-map",elevationLayer:"fg-contour-map",featureCollection:"bi-buildings",maskLayer:"fg-hex-map",pointcloud:"fg-multipoint",tiledIfc:"bi-building",vector:"fg-polygon-pt"},Vs={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class yn extends Da{constructor(t){const i=t.featureProjection;let s;switch(t.source){case"bdtopo":s="BDTOPO_V3:batiment";break;default:return t.source}const a=new Va({format:new Wt.GeoJSON,strategy:Ba.tile(Ra.createXYZ({tileSize:512})),url:function(d){return`${`https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&request=GetFeature&typename=BDTOPO_V3:batiment&outputFormat=application/json&SRSNAME=${i}&startIndex=0&bbox=`}${d.join(",")},${i}`}}),n=t.extent??new Qe("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),r=t.extrusionOffset??(c=>{const u=-c.getProperties().hauteur;return Number.isNaN(u)?0:u}),l=t.style??(c=>{const d=c.getProperties();let g="#FFFFFF";switch(d.usage_1){case"Agricole":g="#96ff0d";break;case"Commercial et services":g="#d8ffd4";break;case"Industriel":g="#f0bb41";break;case"Religieux":g="#41b5f0";break;case"Résidentiel":g="#cec8be";break;case"Sportif":g="#ff0d45";break}return{fill:{color:new A.Color(g),shading:!0},stroke:{color:"black",lineWidth:void 0}}}),h={extent:n,extrusionOffset:r,maxLevel:t.maxLevel??11,minLevel:t.minLevel??11,source:a,style:l};super(h),this.name=t.source,A.fillObject3DUserData(this,{filename:s})}}const bn=e=>{const t=e.dataset.config,i=new yn({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class Mn extends Ga.PointCloudSourceBase{constructor(i){super();p(this,"dataProjection");p(this,"isCSVPointCloudSource",!0);p(this,"type","CSVPointCloudSource");p(this,"url");p(this,"_localVolume",null);p(this,"_metadata",null);p(this,"_opCounter",new za);p(this,"_origin",null);p(this,"_points",null);p(this,"_root",null);p(this,"_zArray",null);this.url=i.url,this.dataProjection=i.dataProjection}get loading(){return this._opCounter.loading}get progress(){return this._opCounter.progress}dispose(){}getHierarchy(){if(this._root==null)throw new Error("not initialized");return Promise.resolve(this._root)}getMemoryUsage(i){this._points!=null&&i.objects.set(this.id,{cpuMemory:this._points.byteLength,gpuMemory:this._points.byteLength})}getMetadata(){if(this._metadata==null)throw new Error("not initialized");return Promise.resolve(this._metadata)}getNodeData(i){if(this._points==null||this._origin==null||this._zArray==null||this._metadata==null||this._localVolume==null)throw new Error("not initialized");let s;return i.attribute!=null&&i.attribute.name==="Z"&&(s=new A.Float32BufferAttribute(this._zArray,1)),Promise.resolve({attribute:s,localBoundingBox:this._localVolume,origin:this._origin,pointCount:this._points.length/3,position:i.position?new A.Float32BufferAttribute(this._points,3,!1):void 0})}async initializeOnce(){this._opCounter.increment();const i=await Ti.load(this.url,Ha.CSVLoader,{csv:{shape:"array-row-table"},fetch:A.Fetcher.fetch}),s=new Float32Array(i.data.length*3),a=new Float32Array(i.data.length),n=new A.Box3().makeEmpty(),r=new A.Box3().makeEmpty(),l=new A.Vector3,h=new A.Vector3(i.data[0][0],i.data[0][1],i.data[0][2]);for(let g=0;g<i.data.length;g+=1){const u=i.data[g][0],f=i.data[g][1],m=i.data[g][2],C=u-h.x,v=f-h.y,I=m-h.z;n.expandByPoint(l.set(u,f,m)),r.expandByPoint(l.set(C,v,I)),s[g*3+0]=C,s[g*3+1]=v,s[g*3+2]=I,a[g]=m}this._points=s,this._zArray=a,this._origin=h,this._localVolume=r;const c=s.length/3,d={center:n.getCenter(new A.Vector3),depth:0,geometricError:0,hasData:!0,id:"root",pointCount:c,sourceId:this.id,volume:n};return this._root=d,this._metadata={attributes:[{dimension:1,interpretation:"unknown",max:n.max.z,min:n.min.z,name:"Z",size:4,type:"float"}],crs:this.dataProjection!=null?{name:this.dataProjection}:void 0,pointCount:c,volume:n},this._opCounter.decrement(),this}}class wn extends ja{constructor(i){super(i);p(this,"isPointCloudEntity",!0);const s=A.getConfig();if(this.colorMap=A.getColorMap(s.pointcloud),"url"in i.source){const a=A.Fetcher.getContext(i.source.url);A.fillObject3DUserData(this,{filename:a.filename})}}async initialize(i){await super.initialize(i),this.setActiveAttribute("Z")}}const En=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Fa({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async(n,r)=>{const c=await i.source.url.slice(n,r).arrayBuffer();return new Uint8Array(c)}});break;case"csv":s=new Mn({...i.source});break;case"las":s=new Ua({url:typeof i.source.url=="string"?A.getPublicFolderUrl(i.source.url):async()=>{const n=await A.Fetcher.fetchArrayBuffer(i.source.url);return new Uint8Array(n.slice(0))}});break;default:return i.source}const a=new wn({source:s});return Promise.resolve(a)};class Rs extends Za{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const _n=e=>{const t=e.dataset.config,i=new Rs({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class On extends Rs{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:Wa.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const xn=e=>{const{dataset:t}=e,i=t.config,s=new On({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},ri=new at("EPSG:4326",0,0,0);async function kn(e,t){const s=[];for(let n=0;n<e.length;n+=200){const r=e.slice(n,n+200),l=t.slice(n,n+200);s.push(Sn(r,l))}return(await Promise.all(s)).flat()}async function Sn(e,t){return(await A.Fetcher.fetchJson(`https://data.geopf.fr/altimetrie/1.0/calcul/alti/rest/elevation.json?lon=${e.join("|")}&lat=${t.join("|")}&zonly=true&resource=ign_rge_alti_wld&delimiter=|&indent=false`)).elevations}const Fs={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",ri),t.push(ri.longitude),i.push(ri.latitude)}),(await kn(t,i)).forEach((a,n)=>{e[n]._values[2]=a})}},Xi=e=>Fs.alticode(e),Nn=e=>{const t=e.getEntities(s=>s.isMap).at(0);if(t==null)throw new Error("No map attached to the instance");return async s=>(s.forEach(a=>{const n=t.getElevation({coordinates:a}).samples.sort((r,l)=>r.resolution-l.resolution).at(0);n!=null&&(a._values[2]=n.elevation)}),Promise.resolve())},Ln=(e,t=0)=>async s=>{let a=s.filter(n=>n._values[2]===t);for(const n of e)if(await n(a),a=a.filter(r=>r._values[2]===t),a.length===0)break},Us=(e,t,i=0)=>t?Ln([Nn(e),Xi],i):Xi;function Pn(e){e("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),e("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),e("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),e.WGS84=e["EPSG:4326"],e["EPSG:3785"]=e["EPSG:3857"],e.GOOGLE=e["EPSG:3857"],e["EPSG:900913"]=e["EPSG:3857"],e["EPSG:102113"]=e["EPSG:3857"]}var Bt=1,Vt=2,Kt=3,Tn=4,Ei=5,Ki=6378137,Dn=6356752314e-3,Qi=.0066943799901413165,Ie=484813681109536e-20,w=Math.PI/2,Bn=.16666666666666666,Vn=.04722222222222222,Rn=.022156084656084655,O=1e-10,J=.017453292519943295,pt=57.29577951308232,R=Math.PI/4,pe=Math.PI*2,Z=3.14159265359,nt={};nt.greenwich=0;nt.lisbon=-9.131906111111;nt.paris=2.337229166667;nt.bogota=-74.080916666667;nt.madrid=-3.687938888889;nt.rome=12.452333333333;nt.bern=7.439583333333;nt.jakarta=106.807719444444;nt.ferro=-17.666666666667;nt.brussels=4.367975;nt.stockholm=18.058277777778;nt.athens=23.7163375;nt.oslo=10.722916666667;const Fn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var $i=/[\s_\-\/\(\)]/g;function Ot(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace($i,""),a=-1,n,r;++a<i.length;)if(n=i[a],r=n.toLowerCase().replace($i,""),r===s)return e[n]}function _i(e){var t={},i=e.split("+").map(function(l){return l.trim()}).filter(function(l){return l}).reduce(function(l,h){var c=h.split("=");return c.push(!0),l[c[0].toLowerCase()]=c[1],l},{}),s,a,n,r={proj:"projName",datum:"datumCode",rf:function(l){t.rf=parseFloat(l)},lat_0:function(l){t.lat0=l*J},lat_1:function(l){t.lat1=l*J},lat_2:function(l){t.lat2=l*J},lat_ts:function(l){t.lat_ts=l*J},lon_0:function(l){t.long0=l*J},lon_1:function(l){t.long1=l*J},lon_2:function(l){t.long2=l*J},alpha:function(l){t.alpha=parseFloat(l)*J},gamma:function(l){t.rectified_grid_angle=parseFloat(l)},lonc:function(l){t.longc=l*J},x_0:function(l){t.x0=parseFloat(l)},y_0:function(l){t.y0=parseFloat(l)},k_0:function(l){t.k0=parseFloat(l)},k:function(l){t.k0=parseFloat(l)},a:function(l){t.a=parseFloat(l)},b:function(l){t.b=parseFloat(l)},r_a:function(){t.R_A=!0},zone:function(l){t.zone=parseInt(l,10)},south:function(){t.utmSouth=!0},towgs84:function(l){t.datum_params=l.split(",").map(function(h){return parseFloat(h)})},to_meter:function(l){t.to_meter=parseFloat(l)},units:function(l){t.units=l;var h=Ot(Fn,l);h&&(t.to_meter=h.to_meter)},from_greenwich:function(l){t.from_greenwich=l*J},pm:function(l){var h=Ot(nt,l);t.from_greenwich=(h||parseFloat(l))*J},nadgrids:function(l){l==="@null"?t.datumCode="none":t.nadgrids=l},axis:function(l){var h="ewnsud";l.length===3&&h.indexOf(l.substr(0,1))!==-1&&h.indexOf(l.substr(1,1))!==-1&&h.indexOf(l.substr(2,1))!==-1&&(t.axis=l)},approx:function(){t.approx=!0}};for(s in i)a=i[s],s in r?(n=r[s],typeof n=="function"?n(a):t[n]=a):t[s]=a;return typeof t.datumCode=="string"&&t.datumCode!=="WGS84"&&(t.datumCode=t.datumCode.toLowerCase()),t}class zs{static getId(t){const i=t.find(s=>Array.isArray(s)&&s[0]==="ID");return i&&i.length>=3?{authority:i[1],code:parseInt(i[2],10)}:null}static convertUnit(t,i="unit"){if(!t||t.length<3)return{type:i,name:"unknown",conversion_factor:null};const s=t[1],a=parseFloat(t[2])||null,n=t.find(l=>Array.isArray(l)&&l[0]==="ID"),r=n?{authority:n[1],code:parseInt(n[2],10)}:null;return{type:i,name:s,conversion_factor:a,id:r}}static convertAxis(t){const i=t[1]||"Unknown";let s;const a=i.match(/^\((.)\)$/);if(a){const c=a[1].toUpperCase();if(c==="E")s="east";else if(c==="N")s="north";else if(c==="U")s="up";else throw new Error(`Unknown axis abbreviation: ${c}`)}else s=t[2]?t[2].toLowerCase():"unknown";const n=t.find(c=>Array.isArray(c)&&c[0]==="ORDER"),r=n?parseInt(n[1],10):null,l=t.find(c=>Array.isArray(c)&&(c[0]==="LENGTHUNIT"||c[0]==="ANGLEUNIT"||c[0]==="SCALEUNIT")),h=this.convertUnit(l);return{name:i,direction:s,unit:h,order:r}}static extractAxes(t){return t.filter(i=>Array.isArray(i)&&i[0]==="AXIS").map(i=>this.convertAxis(i)).sort((i,s)=>(i.order||0)-(s.order||0))}static convert(t,i={}){switch(t[0]){case"PROJCRS":i.type="ProjectedCRS",i.name=t[1],i.base_crs=t.find(u=>Array.isArray(u)&&u[0]==="BASEGEOGCRS")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="BASEGEOGCRS")):null,i.conversion=t.find(u=>Array.isArray(u)&&u[0]==="CONVERSION")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="CONVERSION")):null;const s=t.find(u=>Array.isArray(u)&&u[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT");if(a){const u=this.convertUnit(a);i.coordinate_system.unit=u}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const n=t.find(u=>Array.isArray(u)&&(u[0]==="DATUM"||u[0]==="ENSEMBLE"));if(n){const u=this.convert(n);n[0]==="ENSEMBLE"?i.datum_ensemble=u:i.datum=u;const f=t.find(m=>Array.isArray(m)&&m[0]==="PRIMEM");f&&f[1]!=="Greenwich"&&(u.prime_meridian={name:f[1],longitude:parseFloat(f[2])})}i.coordinate_system={type:"ellipsoidal",axis:this.extractAxes(t)},i.id=this.getId(t);break;case"DATUM":i.type="GeodeticReferenceFrame",i.name=t[1],i.ellipsoid=t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(u=>Array.isArray(u)&&u[0]==="MEMBER").map(u=>({type:"DatumEnsembleMember",name:u[1],id:this.getId(u)}));const r=t.find(u=>Array.isArray(u)&&u[0]==="ENSEMBLEACCURACY");r&&(i.accuracy=parseFloat(r[1]));const l=t.find(u=>Array.isArray(u)&&u[0]==="ELLIPSOID");l&&(i.ellipsoid=this.convert(l)),i.id=this.getId(t);break;case"ELLIPSOID":i.type="Ellipsoid",i.name=t[1],i.semi_major_axis=parseFloat(t[2]),i.inverse_flattening=parseFloat(t[3]),t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT")&&this.convert(t.find(u=>Array.isArray(u)&&u[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(u=>Array.isArray(u)&&u[0]==="METHOD")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="METHOD")):null,i.parameters=t.filter(u=>Array.isArray(u)&&u[0]==="PARAMETER").map(u=>this.convert(u));break;case"METHOD":i.type="Method",i.name=t[1],i.id=this.getId(t);break;case"PARAMETER":i.type="Parameter",i.name=t[1],i.value=parseFloat(t[2]),i.unit=this.convertUnit(t.find(u=>Array.isArray(u)&&(u[0]==="LENGTHUNIT"||u[0]==="ANGLEUNIT"||u[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(u=>Array.isArray(u)&&u[0]==="SOURCECRS");if(h){const u=h.find(f=>Array.isArray(f));i.source_crs=u?this.convert(u):null}const c=t.find(u=>Array.isArray(u)&&u[0]==="TARGETCRS");if(c){const u=c.find(f=>Array.isArray(f));i.target_crs=u?this.convert(u):null}const d=t.find(u=>Array.isArray(u)&&u[0]==="ABRIDGEDTRANSFORMATION");d?i.transformation=this.convert(d):i.transformation=null;break;case"ABRIDGEDTRANSFORMATION":if(i.type="Transformation",i.name=t[1],i.method=t.find(u=>Array.isArray(u)&&u[0]==="METHOD")?this.convert(t.find(u=>Array.isArray(u)&&u[0]==="METHOD")):null,i.parameters=t.filter(u=>Array.isArray(u)&&(u[0]==="PARAMETER"||u[0]==="PARAMETERFILE")).map(u=>{if(u[0]==="PARAMETER")return this.convert(u);if(u[0]==="PARAMETERFILE")return{name:u[1],value:u[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const u=i.parameters[6];u.name==="Scale difference"&&(u.value=Math.round((u.value-1)*1e12)/1e6)}i.id=this.getId(t);break;case"AXIS":i.coordinate_system||(i.coordinate_system={type:"unspecified",axis:[]}),i.coordinate_system.axis.push(this.convertAxis(t));break;case"LENGTHUNIT":const g=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(u=>{u.unit||(u.unit=g)}),g.conversion_factor&&g.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:g});break;default:i.keyword=t[0];break}return i}}class Un extends zs{static convert(t,i={}){return super.convert(t,i),i.coordinate_system&&i.coordinate_system.subtype==="Cartesian"&&delete i.coordinate_system,i.usage&&delete i.usage,i}}class zn extends zs{static convert(t,i={}){super.convert(t,i);const s=t.find(n=>Array.isArray(n)&&n[0]==="CS");s&&(i.coordinate_system={subtype:s[1],axis:this.extractAxes(t)});const a=t.find(n=>Array.isArray(n)&&n[0]==="USAGE");if(a){const n=a.find(h=>Array.isArray(h)&&h[0]==="SCOPE"),r=a.find(h=>Array.isArray(h)&&h[0]==="AREA"),l=a.find(h=>Array.isArray(h)&&h[0]==="BBOX");i.usage={},n&&(i.usage.scope=n[1]),r&&(i.usage.area=r[1]),l&&(i.usage.bbox=l.slice(1))}return i}}function jn(e){return e.find(t=>Array.isArray(t)&&t[0]==="USAGE")?"2019":(e.find(t=>Array.isArray(t)&&t[0]==="CS")||e[0]==="BOUNDCRS"||e[0]==="PROJCRS"||e[0]==="GEOGCRS","2015")}function Gn(e){return(jn(e)==="2019"?zn:Un).convert(e)}function Hn(e){const t=e.toUpperCase();return t.includes("PROJCRS")||t.includes("GEOGCRS")||t.includes("BOUNDCRS")||t.includes("VERTCRS")||t.includes("LENGTHUNIT")||t.includes("ANGLEUNIT")||t.includes("SCALEUNIT")?"WKT2":(t.includes("PROJCS")||t.includes("GEOGCS")||t.includes("LOCAL_CS")||t.includes("VERT_CS")||t.includes("UNIT"),"WKT1")}var ve=1,js=2,Gs=3,He=4,Hs=5,Vi=-1,Zn=/\s/,Wn=/[A-Za-z]/,qn=/[A-Za-z84_]/,$e=/[,\]]/,Zs=/[\d\.E\-\+]/;function Mt(e){if(typeof e!="string")throw new Error("not a string");this.text=e.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=ve}Mt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==He)for(;Zn.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case ve:return this.neutral(e);case js:return this.keyword(e);case He:return this.quoted(e);case Hs:return this.afterquote(e);case Gs:return this.number(e);case Vi:return}};Mt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=He;return}if($e.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};Mt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=ve;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=ve,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Vi);return}};Mt.prototype.number=function(e){if(Zs.test(e)){this.word+=e;return}if($e.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};Mt.prototype.quoted=function(e){if(e==='"'){this.state=Hs;return}this.word+=e};Mt.prototype.keyword=function(e){if(qn.test(e)){this.word+=e;return}if(e==="["){var t=[];t.push(this.word),this.level++,this.root===null?this.root=t:this.currentObject.push(t),this.stack.push(this.currentObject),this.currentObject=t,this.state=ve;return}if($e.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};Mt.prototype.neutral=function(e){if(Wn.test(e)){this.word=e,this.state=js;return}if(e==='"'){this.word="",this.state=He;return}if(Zs.test(e)){this.word=e,this.state=Gs;return}if($e.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};Mt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Vi)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function Yn(e){var t=new Mt(e);return t.output()}function li(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(n,r){return qt(r,n),n},s);t&&(e[t]=a)}function qt(e,t){if(!Array.isArray(e)){t[e]=!0;return}var i=e.shift();if(i==="PARAMETER"&&(i=e.shift()),e.length===1){if(Array.isArray(e[0])){t[i]={},qt(e[0],t[i]);return}t[i]=e[0];return}if(!e.length){t[i]=!0;return}if(i==="TOWGS84"){t[i]=e;return}if(i==="AXIS"){i in t||(t[i]=[]),t[i].push(e);return}Array.isArray(i)||(t[i]={});var s;switch(i){case"UNIT":case"PRIMEM":case"VERT_DATUM":t[i]={name:e[0].toLowerCase(),convert:e[1]},e.length===3&&qt(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&qt(e[3],t[i]);return;case"EDATUM":case"ENGINEERINGDATUM":case"LOCAL_DATUM":case"DATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":e[0]=["name",e[0]],li(t,i,e);return;case"COMPD_CS":case"COMPOUNDCRS":case"FITTED_CS":case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"ENGCRS":case"ENGINEERINGCRS":e[0]=["name",e[0]],li(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return qt(e,t[i]);return li(t,i,e)}}var Jn=.017453292519943295;function At(e){return e*Jn}function Ws(e){const t=(e.projName||"").toLowerCase().replace(/_/g," ");!e.long0&&e.longc&&(t==="albers conic equal area"||t==="lambert azimuthal equal area")&&(e.long0=e.longc),!e.lat_ts&&e.lat1&&(t==="stereographic south pole"||t==="polar stereographic (variant b)")?(e.lat0=At(e.lat1>0?90:-90),e.lat_ts=e.lat1,delete e.lat1):!e.lat_ts&&e.lat0&&(t==="polar stereographic"||t==="polar stereographic (variant a)")&&(e.lat_ts=e.lat0,e.lat0=At(e.lat0>0?90:-90),delete e.lat1)}function ts(e){let t={units:null,to_meter:void 0};return typeof e=="string"?(t.units=e.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.units==="meter"&&(t.to_meter=1)):e&&e.name&&(t.units=e.name.toLowerCase(),t.units==="metre"&&(t.units="meter"),t.to_meter=e.conversion_factor),t}function es(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function is(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=es(e.ellipsoid.semi_major_axis),e.ellipsoid.inverse_flattening!==void 0?t.rf=e.ellipsoid.inverse_flattening:e.ellipsoid.semi_major_axis!==void 0&&e.ellipsoid.semi_minor_axis!==void 0&&(t.rf=t.a/(t.a-es(e.ellipsoid.semi_minor_axis))))}function Ze(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(Ze(e.source_crs,t),e.transformation&&(e.transformation.method&&e.transformation.method.name==="NTv2"?t.nadgrids=e.transformation.parameters[0].value:t.datum_params=e.transformation.parameters.map(i=>i.value)),t):(Object.keys(e).forEach(i=>{const s=e[i];if(s!==null)switch(i){case"name":if(t.srsCode)break;t.name=s,t.srsCode=s;break;case"type":s==="GeographicCRS"?t.projName="longlat":s==="ProjectedCRS"&&e.conversion&&e.conversion.method&&(t.projName=e.conversion.method.name);break;case"datum":case"datum_ensemble":s.ellipsoid&&(t.ellps=s.ellipsoid.name,is(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,is(s,t);break;case"prime_meridian":t.long0=(s.longitude||0)*Math.PI/180;break;case"coordinate_system":if(s.axis){if(t.axis=s.axis.map(a=>{const n=a.direction;if(n==="east")return"e";if(n==="north")return"n";if(n==="west")return"w";if(n==="south")return"s";throw new Error(`Unknown axis direction: ${n}`)}).join("")+"u",s.unit){const{units:a,to_meter:n}=ts(s.unit);t.units=a,t.to_meter=n}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:n}=ts(s.axis[0].unit);t.units=a,t.to_meter=n}}break;case"id":s.authority&&s.code&&(t.title=s.authority+":"+s.code);break;case"conversion":s.method&&s.method.name&&(t.projName=s.method.name),s.parameters&&s.parameters.forEach(a=>{const n=a.name.toLowerCase().replace(/\s+/g,"_"),r=a.value;a.unit&&a.unit.conversion_factor?t[n]=r*a.unit.conversion_factor:a.unit==="degree"?t[n]=r*Math.PI/180:t[n]=r});break;case"unit":s.name&&(t.units=s.name.toLowerCase(),t.units==="metre"&&(t.units="meter")),s.conversion_factor&&(t.to_meter=s.conversion_factor);break;case"base_crs":Ze(s,t),t.datumCode=s.id?s.id.authority+"_"+s.id.code:s.name;break}}),t.latitude_of_false_origin!==void 0&&(t.lat0=t.latitude_of_false_origin),t.longitude_of_false_origin!==void 0&&(t.long0=t.longitude_of_false_origin),t.latitude_of_standard_parallel!==void 0&&(t.lat0=t.latitude_of_standard_parallel,t.lat1=t.latitude_of_standard_parallel),t.latitude_of_1st_standard_parallel!==void 0&&(t.lat1=t.latitude_of_1st_standard_parallel),t.latitude_of_2nd_standard_parallel!==void 0&&(t.lat2=t.latitude_of_2nd_standard_parallel),t.latitude_of_projection_centre!==void 0&&(t.lat0=t.latitude_of_projection_centre),t.longitude_of_projection_centre!==void 0&&(t.longc=t.longitude_of_projection_centre),t.easting_at_false_origin!==void 0&&(t.x0=t.easting_at_false_origin),t.northing_at_false_origin!==void 0&&(t.y0=t.northing_at_false_origin),t.latitude_of_natural_origin!==void 0&&(t.lat0=t.latitude_of_natural_origin),t.longitude_of_natural_origin!==void 0&&(t.long0=t.longitude_of_natural_origin),t.longitude_of_origin!==void 0&&(t.long0=t.longitude_of_origin),t.false_easting!==void 0&&(t.x0=t.false_easting),t.easting_at_projection_centre&&(t.x0=t.easting_at_projection_centre),t.false_northing!==void 0&&(t.y0=t.false_northing),t.northing_at_projection_centre&&(t.y0=t.northing_at_projection_centre),t.standard_parallel_1!==void 0&&(t.lat1=t.standard_parallel_1),t.standard_parallel_2!==void 0&&(t.lat2=t.standard_parallel_2),t.scale_factor_at_natural_origin!==void 0&&(t.k0=t.scale_factor_at_natural_origin),t.scale_factor_at_projection_centre!==void 0&&(t.k0=t.scale_factor_at_projection_centre),t.scale_factor_on_pseudo_standard_parallel!==void 0&&(t.k0=t.scale_factor_on_pseudo_standard_parallel),t.azimuth!==void 0&&(t.alpha=t.azimuth),t.azimuth_at_projection_centre!==void 0&&(t.alpha=t.azimuth_at_projection_centre),t.angle_from_rectified_to_skew_grid&&(t.rectified_grid_angle=t.angle_from_rectified_to_skew_grid),Ws(t),t)}var Xn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function Kn(e,t){var i=t[0],s=t[1];!(i in e)&&s in e&&(e[i]=e[s],t.length===3&&(e[i]=t[2](e[i])))}function qs(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];Xn.indexOf(a)!==-1&&Qn(e[a]),typeof e[a]=="object"&&qs(e[a])}}function Qn(e){if(e.AUTHORITY){var t=Object.keys(e.AUTHORITY)[0];t&&t in e.AUTHORITY&&(e.title=t+":"+e.AUTHORITY[t])}if(e.type==="GEOGCS"?e.projName="longlat":e.type==="LOCAL_CS"?(e.projName="identity",e.local=!0):typeof e.PROJECTION=="object"?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var i="",s=0,a=e.AXIS.length;s<a;++s){var n=[e.AXIS[s][0].toLowerCase(),e.AXIS[s][1].toLowerCase()];n[0].indexOf("north")!==-1||(n[0]==="y"||n[0]==="lat")&&n[1]==="north"?i+="n":n[0].indexOf("south")!==-1||(n[0]==="y"||n[0]==="lat")&&n[1]==="south"?i+="s":n[0].indexOf("east")!==-1||(n[0]==="x"||n[0]==="lon")&&n[1]==="east"?i+="e":(n[0].indexOf("west")!==-1||(n[0]==="x"||n[0]==="lon")&&n[1]==="west")&&(i+="w")}i.length===2&&(i+="u"),i.length===3&&(e.axis=i)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),e.units==="metre"&&(e.units="meter"),e.UNIT.convert&&(e.type==="GEOGCS"?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var r=e.GEOGCS;e.type==="GEOGCS"&&(r=e),r&&(r.DATUM?e.datumCode=r.DATUM.name.toLowerCase():e.datumCode=r.name.toLowerCase(),e.datumCode.slice(0,2)==="d_"&&(e.datumCode=e.datumCode.slice(2)),e.datumCode==="new_zealand_1949"&&(e.datumCode="nzgd49"),(e.datumCode==="wgs_1984"||e.datumCode==="world_geodetic_system_1984")&&(e.PROJECTION==="Mercator_Auxiliary_Sphere"&&(e.sphere=!0),e.datumCode="wgs84"),e.datumCode==="belge_1972"&&(e.datumCode="rnb72"),r.DATUM&&r.DATUM.SPHEROID&&(e.ellps=r.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),e.ellps.toLowerCase().slice(0,13)==="international"&&(e.ellps="intl"),e.a=r.DATUM.SPHEROID.a,e.rf=parseFloat(r.DATUM.SPHEROID.rf,10)),r.DATUM&&r.DATUM.TOWGS84&&(e.datum_params=r.DATUM.TOWGS84),~e.datumCode.indexOf("osgb_1936")&&(e.datumCode="osgb36"),~e.datumCode.indexOf("osni_1952")&&(e.datumCode="osni52"),(~e.datumCode.indexOf("tm65")||~e.datumCode.indexOf("geodetic_datum_of_1965"))&&(e.datumCode="ire65"),e.datumCode==="ch1903+"&&(e.datumCode="ch1903"),~e.datumCode.indexOf("israel")&&(e.datumCode="isr93")),e.b&&!isFinite(e.b)&&(e.b=e.a),e.rectified_grid_angle&&(e.rectified_grid_angle=At(e.rectified_grid_angle));function l(d){var g=e.to_meter||1;return d*g}var h=function(d){return Kn(e,d)},c=[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_1","Latitude of 1st standard parallel"],["standard_parallel_2","Standard_Parallel_2"],["standard_parallel_2","Latitude of 2nd standard parallel"],["false_easting","False_Easting"],["false_easting","False easting"],["false-easting","Easting at false origin"],["false_northing","False_Northing"],["false_northing","False northing"],["false_northing","Northing at false origin"],["central_meridian","Central_Meridian"],["central_meridian","Longitude of natural origin"],["central_meridian","Longitude of false origin"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["latitude_of_origin","Latitude of natural origin"],["latitude_of_origin","Latitude of false origin"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",At],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",At],["x0","false_easting",l],["y0","false_northing",l],["long0","central_meridian",At],["lat0","latitude_of_origin",At],["lat0","standard_parallel_1",At],["lat1","standard_parallel_1",At],["lat2","standard_parallel_2",At],["azimuth","Azimuth"],["alpha","azimuth",At],["srsCode","name"]];c.forEach(h),Ws(e)}function Ys(e){if(typeof e=="object")return Ze(e);const t=Hn(e);var i=Yn(e);if(t==="WKT2"){const n=Gn(i);return Ze(n)}var s=i[0],a={};return qt(i,a),qs(a),a[s]}function $(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?$[e]=_i(arguments[1]):$[e]=Ys(arguments[1]):$[e]=i}else if(arguments.length===1){if(Array.isArray(e))return e.map(function(s){Array.isArray(s)?$.apply(t,s):$(s)});if(typeof e=="string"){if(e in $)return $[e]}else"EPSG"in e?$["EPSG:"+e.EPSG]=e:"ESRI"in e?$["ESRI:"+e.ESRI]=e:"IAU2000"in e?$["IAU2000:"+e.IAU2000]=e:console.log(e);return}}Pn($);function $n(e){return typeof e=="string"}function to(e){return e in $}var eo=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function io(e){return eo.some(function(t){return e.indexOf(t)>-1})}var so=["3857","900913","3785","102113"];function ao(e){var t=Ot(e,"authority");if(t){var i=Ot(t,"epsg");return i&&so.indexOf(i)>-1}}function no(e){var t=Ot(e,"extension");if(t)return Ot(t,"proj4")}function oo(e){return e[0]==="+"}function ro(e){if($n(e)){if(to(e))return $[e];if(io(e)){var t=Ys(e);if(ao(t))return $["EPSG:3857"];var i=no(t);return i?_i(i):t}if(oo(e))return _i(e)}else return e}function ss(e,t){e=e||{};var i,s;if(!t)return e;for(s in t)i=t[s],i!==void 0&&(e[s]=i);return e}function yt(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function Me(e){return e<0?-1:1}function k(e){return Math.abs(e)<=Z?e:e-Me(e)*pe}function Ct(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(w-t))/s}function ye(e,t){for(var i=.5*e,s,a,n=w-2*Math.atan(t),r=0;r<=15;r++)if(s=e*Math.sin(n),a=w-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-n,n+=a,Math.abs(a)<=1e-10)return n;return-9999}function lo(){var e=this.b/this.a;this.es=1-e*e,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function ho(e){var t=e.x,i=e.y;if(i*pt>90&&i*pt<-90&&t*pt>180&&t*pt<-180)return null;var s,a;if(Math.abs(Math.abs(i)-w)<=O)return null;if(this.sphere)s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0+this.a*this.k0*Math.log(Math.tan(R+.5*i));else{var n=Math.sin(i),r=Ct(this.e,i,n);s=this.x0+this.a*this.k0*k(t-this.long0),a=this.y0-this.a*this.k0*Math.log(r)}return e.x=s,e.y=a,e}function co(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=w-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var n=Math.exp(-i/(this.a*this.k0));if(a=ye(this.e,n),a===-9999)return null}return s=k(this.long0+t/(this.a*this.k0)),e.x=s,e.y=a,e}var go=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const uo={init:lo,forward:ho,inverse:co,names:go};function Ao(){}function as(e){return e}var mo=["longlat","identity"];const Co={init:Ao,forward:as,inverse:as,names:mo};var fo=[uo,Co],Be={},We=[];function Js(e,t){var i=We.length;return e.names?(We[i]=e,e.names.forEach(function(s){Be[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Io(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Be[t]<"u"&&We[Be[t]])return We[Be[t]]}function po(){fo.forEach(Js)}const vo={start:po,add:Js,get:Io};var L={};L.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};L.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};L.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};L.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};L.airy={a:6377563396e-3,b:635625691e-2,ellipseName:"Airy 1830"};L.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};L.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};L.mod_airy={a:6377340189e-3,b:6356034446e-3,ellipseName:"Modified Airy"};L.andrae={a:637710443e-2,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};L.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};L.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};L.bessel={a:6377397155e-3,rf:299.1528128,ellipseName:"Bessel 1841"};L.bess_nam={a:6377483865e-3,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};L.clrk66={a:63782064e-1,b:63565838e-1,ellipseName:"Clarke 1866"};L.clrk80={a:6378249145e-3,rf:293.4663,ellipseName:"Clarke 1880 mod."};L.clrk80ign={a:63782492e-1,b:6356515,rf:293.4660213,ellipseName:"Clarke 1880 (IGN)"};L.clrk58={a:6378293645208759e-9,rf:294.2606763692654,ellipseName:"Clarke 1858"};L.CPM={a:63757387e-1,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};L.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};L.engelis={a:637813605e-2,rf:298.2566,ellipseName:"Engelis 1985"};L.evrst30={a:6377276345e-3,rf:300.8017,ellipseName:"Everest 1830"};L.evrst48={a:6377304063e-3,rf:300.8017,ellipseName:"Everest 1948"};L.evrst56={a:6377301243e-3,rf:300.8017,ellipseName:"Everest 1956"};L.evrst69={a:6377295664e-3,rf:300.8017,ellipseName:"Everest 1969"};L.evrstSS={a:6377298556e-3,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};L.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};L.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};L.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};L.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};L.hough={a:6378270,rf:297,ellipseName:"Hough"};L.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};L.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};L.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};L.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};L.new_intl={a:63781575e-1,b:63567722e-1,ellipseName:"New International 1967"};L.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};L.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};L.SEasia={a:6378155,b:63567733205e-4,ellipseName:"Southeast Asia"};L.walbeck={a:6376896,b:63558348467e-4,ellipseName:"Walbeck"};L.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};L.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};L.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};var yo=L.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};L.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function bo(e,t,i,s){var a=e*e,n=t*t,r=(a-n)/a,l=0;s?(e*=1-r*(Bn+r*(Vn+r*Rn)),a=e*e,r=0):l=Math.sqrt(r);var h=(a-n)/n;return{es:r,e:l,ep2:h}}function Mo(e,t,i,s,a){if(!e){var n=Ot(L,s);n||(n=yo),e=n.a,t=n.b,i=n.rf}return i&&!t&&(t=(1-1/i)*e),(i===0||Math.abs(e-t)<O)&&(a=!0,t=e),{a:e,b:t,rf:i,sphere:a}}var Y={};Y.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};Y.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};Y.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};Y.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};Y.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};Y.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};Y.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};Y.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};Y.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};Y.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};Y.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};Y.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};Y.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};Y.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};Y.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};Y.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};Y.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function wo(e,t,i,s,a,n,r){var l={};return e===void 0||e==="none"?l.datum_type=Ei:l.datum_type=Tn,t&&(l.datum_params=t.map(parseFloat),(l.datum_params[0]!==0||l.datum_params[1]!==0||l.datum_params[2]!==0)&&(l.datum_type=Bt),l.datum_params.length>3&&(l.datum_params[3]!==0||l.datum_params[4]!==0||l.datum_params[5]!==0||l.datum_params[6]!==0)&&(l.datum_type=Vt,l.datum_params[3]*=Ie,l.datum_params[4]*=Ie,l.datum_params[5]*=Ie,l.datum_params[6]=l.datum_params[6]/1e6+1)),r&&(l.datum_type=Kt,l.grids=r),l.a=i,l.b=s,l.es=a,l.ep2=n,l}var Xs={};function Eo(e,t){var i=new DataView(t),s=xo(i),a=ko(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var n=So(i,a,s),r={header:a,subgrids:n};return Xs[e]=r,r}function _o(e){if(e===void 0)return null;var t=e.split(",");return t.map(Oo)}function Oo(e){if(e.length===0)return null;var t=e[0]==="@";return t&&(e=e.slice(1)),e==="null"?{name:"null",mandatory:!t,grid:null,isNull:!0}:{name:e,mandatory:!t,grid:Xs[e]||null,isNull:!1}}function Yt(e){return e/3600*Math.PI/180}function xo(e){var t=e.getInt32(8,!1);return t===11?!1:(t=e.getInt32(8,!0),t!==11&&console.warn("Failed to detect nadgrid endian-ness, defaulting to little-endian"),!0)}function ko(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:Oi(e,56,64).trim(),fromSemiMajorAxis:e.getFloat64(120,t),fromSemiMinorAxis:e.getFloat64(136,t),toSemiMajorAxis:e.getFloat64(152,t),toSemiMinorAxis:e.getFloat64(168,t)}}function Oi(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function So(e,t,i){for(var s=176,a=[],n=0;n<t.nSubgrids;n++){var r=Lo(e,s,i),l=Po(e,s,r,i),h=Math.round(1+(r.upperLongitude-r.lowerLongitude)/r.longitudeInterval),c=Math.round(1+(r.upperLatitude-r.lowerLatitude)/r.latitudeInterval);a.push({ll:[Yt(r.lowerLongitude),Yt(r.lowerLatitude)],del:[Yt(r.longitudeInterval),Yt(r.latitudeInterval)],lim:[h,c],count:r.gridNodeCount,cvs:No(l)})}return a}function No(e){return e.map(function(t){return[Yt(t.longitudeShift),Yt(t.latitudeShift)]})}function Lo(e,t,i){return{name:Oi(e,t+8,t+16).trim(),parent:Oi(e,t+24,t+24+8).trim(),lowerLatitude:e.getFloat64(t+72,i),upperLatitude:e.getFloat64(t+88,i),lowerLongitude:e.getFloat64(t+104,i),upperLongitude:e.getFloat64(t+120,i),latitudeInterval:e.getFloat64(t+136,i),longitudeInterval:e.getFloat64(t+152,i),gridNodeCount:e.getInt32(t+168,i)}}function Po(e,t,i,s){for(var a=t+176,n=16,r=[],l=0;l<i.gridNodeCount;l++){var h={latitudeShift:e.getFloat32(a+l*n,s),longitudeShift:e.getFloat32(a+l*n+4,s),latitudeAccuracy:e.getFloat32(a+l*n+8,s),longitudeAccuracy:e.getFloat32(a+l*n+12,s)};r.push(h)}return r}function vt(e,t){if(!(this instanceof vt))return new vt(e);t=t||function(c){if(c)throw c};var i=ro(e);if(typeof i!="object"){t(e);return}var s=vt.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Ot(Y,i.datumCode);a&&(i.datum_params=i.datum_params||(a.towgs84?a.towgs84.split(","):null),i.ellps=a.ellipse,i.datumName=a.datumName?a.datumName:i.datumCode)}i.k0=i.k0||1,i.axis=i.axis||"enu",i.ellps=i.ellps||"wgs84",i.lat1=i.lat1||i.lat0;var n=Mo(i.a,i.b,i.rf,i.ellps,i.sphere),r=bo(n.a,n.b,n.rf,i.R_A),l=_o(i.nadgrids),h=i.datum||wo(i.datumCode,i.datum_params,n.a,n.b,r.es,r.ep2,l);ss(this,i),ss(this,s),this.a=n.a,this.b=n.b,this.rf=n.rf,this.sphere=n.sphere,this.es=r.es,this.e=r.e,this.ep2=r.ep2,this.datum=h,this.init(),t(null,this)}vt.projections=vo;vt.projections.start();function To(e,t){return e.datum_type!==t.datum_type||e.a!==t.a||Math.abs(e.es-t.es)>5e-11?!1:e.datum_type===Bt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]:e.datum_type===Vt?e.datum_params[0]===t.datum_params[0]&&e.datum_params[1]===t.datum_params[1]&&e.datum_params[2]===t.datum_params[2]&&e.datum_params[3]===t.datum_params[3]&&e.datum_params[4]===t.datum_params[4]&&e.datum_params[5]===t.datum_params[5]&&e.datum_params[6]===t.datum_params[6]:!0}function Ks(e,t,i){var s=e.x,a=e.y,n=e.z?e.z:0,r,l,h,c;if(a<-w&&a>-1.001*w)a=-w;else if(a>w&&a<1.001*w)a=w;else{if(a<-w)return{x:-1/0,y:-1/0,z:e.z};if(a>w)return{x:1/0,y:1/0,z:e.z}}return s>Math.PI&&(s-=2*Math.PI),l=Math.sin(a),c=Math.cos(a),h=l*l,r=i/Math.sqrt(1-t*h),{x:(r+n)*c*Math.cos(s),y:(r+n)*c*Math.sin(s),z:(r*(1-t)+n)*l}}function Qs(e,t,i,s){var a=1e-12,n=a*a,r=30,l,h,c,d,g,u,f,m,C,v,I,b,M,_=e.x,x=e.y,E=e.z?e.z:0,S,D,W;if(l=Math.sqrt(_*_+x*x),h=Math.sqrt(_*_+x*x+E*E),l/i<a){if(S=0,h/i<a)return D=w,W=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(x,_);c=E/h,d=l/h,g=1/Math.sqrt(1-t*(2-t)*d*d),m=d*(1-t)*g,C=c*g,M=0;do M++,f=i/Math.sqrt(1-t*C*C),W=l*m+E*C-f*(1-t*C*C),u=t*f/(f+W),g=1/Math.sqrt(1-u*(2-u)*d*d),v=d*(1-u)*g,I=c*g,b=I*m-v*C,m=v,C=I;while(b*b>n&&M<r);return D=Math.atan(I/Math.abs(v)),{x:S,y:D,z:W}}function Do(e,t,i){if(t===Bt)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Vt){var s=i[0],a=i[1],n=i[2],r=i[3],l=i[4],h=i[5],c=i[6];return{x:c*(e.x-h*e.y+l*e.z)+s,y:c*(h*e.x+e.y-r*e.z)+a,z:c*(-l*e.x+r*e.y+e.z)+n}}}function Bo(e,t,i){if(t===Bt)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Vt){var s=i[0],a=i[1],n=i[2],r=i[3],l=i[4],h=i[5],c=i[6],d=(e.x-s)/c,g=(e.y-a)/c,u=(e.z-n)/c;return{x:d+h*g-l*u,y:-h*d+g+r*u,z:l*d-r*g+u}}}function xe(e){return e===Bt||e===Vt}function Vo(e,t,i){if(To(e,t)||e.datum_type===Ei||t.datum_type===Ei)return i;var s=e.a,a=e.es;if(e.datum_type===Kt){var n=ns(e,!1,i);if(n!==0)return;s=Ki,a=Qi}var r=t.a,l=t.b,h=t.es;if(t.datum_type===Kt&&(r=Ki,l=Dn,h=Qi),a===h&&s===r&&!xe(e.datum_type)&&!xe(t.datum_type))return i;if(i=Ks(i,a,s),xe(e.datum_type)&&(i=Do(i,e.datum_type,e.datum_params)),xe(t.datum_type)&&(i=Bo(i,t.datum_type,t.datum_params)),i=Qs(i,h,r,l),t.datum_type===Kt){var c=ns(t,!0,i);if(c!==0)return}return i}function ns(e,t,i){if(e.grids===null||e.grids.length===0)return console.log("Grid shift grids not found"),-1;for(var s={x:-i.x,y:i.y},a={x:Number.NaN,y:Number.NaN},n=[],r=0;r<e.grids.length;r++){var l=e.grids[r];if(n.push(l.name),l.isNull){a=s;break}if(l.mandatory,l.grid===null){if(l.mandatory)return console.log("Unable to find mandatory grid '"+l.name+"'"),-1;continue}var h=l.grid.subgrids[0],c=(Math.abs(h.del[1])+Math.abs(h.del[0]))/1e4,d=h.ll[0]-c,g=h.ll[1]-c,u=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,f=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(g>s.y||d>s.x||f<s.y||u<s.x)&&(a=Ro(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*pt+" "+s.y*pt+" tried: '"+n+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function Ro(e,t,i){var s={x:Number.NaN,y:Number.NaN};if(isNaN(e.x))return s;var a={x:e.x,y:e.y};a.x-=i.ll[0],a.y-=i.ll[1],a.x=k(a.x-Math.PI)+Math.PI;var n=os(a,i);if(t){if(isNaN(n.x))return s;n.x=a.x-n.x,n.y=a.y-n.y;var r=9,l=1e-12,h,c;do{if(c=os(n,i),isNaN(c.x)){console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.");break}h={x:a.x-(c.x+n.x),y:a.y-(c.y+n.y)},n.x+=h.x,n.y+=h.y}while(r--&&Math.abs(h.x)>l&&Math.abs(h.y)>l);if(r<0)return console.log("Inverse grid shift iterator failed to converge."),s;s.x=k(n.x+i.ll[0]),s.y=n.y+i.ll[1]}else isNaN(n.x)||(s.x=e.x+n.x,s.y=e.y+n.y);return s}function os(e,t){var i={x:e.x/t.del[0],y:e.y/t.del[1]},s={x:Math.floor(i.x),y:Math.floor(i.y)},a={x:i.x-1*s.x,y:i.y-1*s.y},n={x:Number.NaN,y:Number.NaN},r;if(s.x<0||s.x>=t.lim[0]||s.y<0||s.y>=t.lim[1])return n;r=s.y*t.lim[0]+s.x;var l={x:t.cvs[r][0],y:t.cvs[r][1]};r++;var h={x:t.cvs[r][0],y:t.cvs[r][1]};r+=t.lim[0];var c={x:t.cvs[r][0],y:t.cvs[r][1]};r--;var d={x:t.cvs[r][0],y:t.cvs[r][1]},g=a.x*a.y,u=a.x*(1-a.y),f=(1-a.x)*(1-a.y),m=(1-a.x)*a.y;return n.x=f*l.x+u*h.x+m*d.x+g*c.x,n.y=f*l.y+u*h.y+m*d.y+g*c.y,n}function rs(e,t,i){var s=i.x,a=i.y,n=i.z||0,r,l,h,c={};for(h=0;h<3;h++)if(!(t&&h===2&&i.z===void 0))switch(h===0?(r=s,"ew".indexOf(e.axis[h])!==-1?l="x":l="y"):h===1?(r=a,"ns".indexOf(e.axis[h])!==-1?l="y":l="x"):(r=n,l="z"),e.axis[h]){case"e":c[l]=r;break;case"w":c[l]=-r;break;case"n":c[l]=r;break;case"s":c[l]=-r;break;case"u":i[l]!==void 0&&(c.z=r);break;case"d":i[l]!==void 0&&(c.z=-r);break;default:return null}return c}function $s(e){var t={x:e[0],y:e[1]};return e.length>2&&(t.z=e[2]),e.length>3&&(t.m=e[3]),t}function Fo(e){ls(e.x),ls(e.y)}function ls(e){if(typeof Number.isFinite=="function"){if(Number.isFinite(e))return;throw new TypeError("coordinates must be finite numbers")}if(typeof e!="number"||e!==e||!isFinite(e))throw new TypeError("coordinates must be finite numbers")}function Uo(e,t){return(e.datum.datum_type===Bt||e.datum.datum_type===Vt||e.datum.datum_type===Kt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===Bt||t.datum.datum_type===Vt||t.datum.datum_type===Kt)&&e.datumCode!=="WGS84"}function qe(e,t,i,s){var a;Array.isArray(i)?i=$s(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var n=i.z!==void 0;if(Fo(i),e.datum&&t.datum&&Uo(e,t)&&(a=new vt("WGS84"),i=qe(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=rs(e,!1,i)),e.projName==="longlat")i={x:i.x*J,y:i.y*J,z:i.z||0};else if(e.to_meter&&(i={x:i.x*e.to_meter,y:i.y*e.to_meter,z:i.z||0}),i=e.inverse(i),!i)return;if(e.from_greenwich&&(i.x+=e.from_greenwich),i=Vo(e.datum,t.datum,i),!!i)return t.from_greenwich&&(i={x:i.x-t.from_greenwich,y:i.y,z:i.z||0}),t.projName==="longlat"?i={x:i.x*pt,y:i.y*pt,z:i.z||0}:(i=t.forward(i),t.to_meter&&(i={x:i.x/t.to_meter,y:i.y/t.to_meter,z:i.z||0})),s&&t.axis!=="enu"?rs(t,!0,i):(n||delete i.z,i)}var hs=vt("WGS84");function hi(e,t,i,s){var a,n,r;return Array.isArray(i)?(a=qe(e,t,i,s)||{x:NaN,y:NaN},i.length>2?typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"?typeof a.z=="number"?[a.x,a.y,a.z].concat(i.splice(3)):[a.x,a.y,i[2]].concat(i.splice(3)):[a.x,a.y].concat(i.splice(2)):[a.x,a.y]):(n=qe(e,t,i,s),r=Object.keys(i),r.length===2||r.forEach(function(l){if(typeof e.name<"u"&&e.name==="geocent"||typeof t.name<"u"&&t.name==="geocent"){if(l==="x"||l==="y"||l==="z")return}else if(l==="x"||l==="y")return;n[l]=i[l]}),n)}function cs(e){return e instanceof vt?e:e.oProj?e.oProj:vt(e)}function lt(e,t,i){e=cs(e);var s=!1,a;return typeof t>"u"?(t=e,e=hs,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=hs,s=!0),t=cs(t),i?hi(e,t,i):(a={forward:function(n,r){return hi(e,t,n,r)},inverse:function(n,r){return hi(t,e,n,r)}},s&&(a.oProj=t),a)}var gs=6,ta="AJSAJS",ea="AFAFAF",Jt=65,st=73,ct=79,Ae=86,me=90;const zo={forward:ia,inverse:jo,toPoint:sa};function ia(e,t){return t=t||5,Zo(Go({lat:e[1],lon:e[0]}),t)}function jo(e){var t=Ri(na(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function sa(e){var t=Ri(na(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function ci(e){return e*(Math.PI/180)}function us(e){return 180*(e/Math.PI)}function Go(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,n=.9996,r,l,h,c,d,g,u,f=ci(t),m=ci(i),C,v;v=Math.floor((i+180)/6)+1,i===180&&(v=60),t>=56&&t<64&&i>=3&&i<12&&(v=32),t>=72&&t<84&&(i>=0&&i<9?v=31:i>=9&&i<21?v=33:i>=21&&i<33?v=35:i>=33&&i<42&&(v=37)),r=(v-1)*6-180+3,C=ci(r),l=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(f)*Math.sin(f)),c=Math.tan(f)*Math.tan(f),d=l*Math.cos(f)*Math.cos(f),g=Math.cos(f)*(m-C),u=s*((1-a/4-3*a*a/64-5*a*a*a/256)*f-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*f)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*f)-35*a*a*a/3072*Math.sin(6*f));var I=n*h*(g+(1-c+d)*g*g*g/6+(5-18*c+c*c+72*d-58*l)*g*g*g*g*g/120)+5e5,b=n*(u+h*Math.tan(f)*(g*g/2+(5-c+9*d+4*d*d)*g*g*g*g/24+(61-58*c+c*c+600*d-330*l)*g*g*g*g*g*g/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(I),zoneNumber:v,zoneLetter:Ho(t)}}function Ri(e){var t=e.northing,i=e.easting,s=e.zoneLetter,a=e.zoneNumber;if(a<0||a>60)return null;var n=.9996,r=6378137,l=.00669438,h,c=(1-Math.sqrt(1-l))/(1+Math.sqrt(1-l)),d,g,u,f,m,C,v,I,b,M=i-5e5,_=t;s<"N"&&(_-=1e7),v=(a-1)*6-180+3,h=l/(1-l),C=_/n,I=C/(r*(1-l/4-3*l*l/64-5*l*l*l/256)),b=I+(3*c/2-27*c*c*c/32)*Math.sin(2*I)+(21*c*c/16-55*c*c*c*c/32)*Math.sin(4*I)+151*c*c*c/96*Math.sin(6*I),d=r/Math.sqrt(1-l*Math.sin(b)*Math.sin(b)),g=Math.tan(b)*Math.tan(b),u=h*Math.cos(b)*Math.cos(b),f=r*(1-l)/Math.pow(1-l*Math.sin(b)*Math.sin(b),1.5),m=M/(d*n);var x=b-d*Math.tan(b)/f*(m*m/2-(5+3*g+10*u-4*u*u-9*h)*m*m*m*m/24+(61+90*g+298*u+45*g*g-252*h-3*u*u)*m*m*m*m*m*m/720);x=us(x);var E=(m-(1+2*g+u)*m*m*m/6+(5-2*u+28*g-3*u*u+8*h+24*g*g)*m*m*m*m*m/120)/Math.cos(b);E=v+us(E);var S;if(e.accuracy){var D=Ri({northing:e.northing+e.accuracy,easting:e.easting+e.accuracy,zoneLetter:e.zoneLetter,zoneNumber:e.zoneNumber});S={top:D.lat,right:D.lon,bottom:x,left:E}}else S={lat:x,lon:E};return S}function Ho(e){var t="Z";return 84>=e&&e>=72?t="X":72>e&&e>=64?t="W":64>e&&e>=56?t="V":56>e&&e>=48?t="U":48>e&&e>=40?t="T":40>e&&e>=32?t="S":32>e&&e>=24?t="R":24>e&&e>=16?t="Q":16>e&&e>=8?t="P":8>e&&e>=0?t="N":0>e&&e>=-8?t="M":-8>e&&e>=-16?t="L":-16>e&&e>=-24?t="K":-24>e&&e>=-32?t="J":-32>e&&e>=-40?t="H":-40>e&&e>=-48?t="G":-48>e&&e>=-56?t="F":-56>e&&e>=-64?t="E":-64>e&&e>=-72?t="D":-72>e&&e>=-80&&(t="C"),t}function Zo(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Wo(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Wo(e,t,i){var s=aa(i),a=Math.floor(e/1e5),n=Math.floor(t/1e5)%20;return qo(a,n,s)}function aa(e){var t=e%gs;return t===0&&(t=gs),t}function qo(e,t,i){var s=i-1,a=ta.charCodeAt(s),n=ea.charCodeAt(s),r=a+e-1,l=n+t,h=!1;r>me&&(r=r-me+Jt-1,h=!0),(r===st||a<st&&r>st||(r>st||a<st)&&h)&&r++,(r===ct||a<ct&&r>ct||(r>ct||a<ct)&&h)&&(r++,r===st&&r++),r>me&&(r=r-me+Jt-1),l>Ae?(l=l-Ae+Jt-1,h=!0):h=!1,(l===st||n<st&&l>st||(l>st||n<st)&&h)&&l++,(l===ct||n<ct&&l>ct||(l>ct||n<ct)&&h)&&(l++,l===st&&l++),l>Ae&&(l=l-Ae+Jt-1);var c=String.fromCharCode(r)+String.fromCharCode(l);return c}function na(e){if(e&&e.length===0)throw"MGRSPoint coverting from nothing";for(var t=e.length,i=null,s="",a,n=0;!/[A-Z]/.test(a=e.charAt(n));){if(n>=2)throw"MGRSPoint bad conversion from: "+e;s+=a,n++}var r=parseInt(s,10);if(n===0||n+3>t)throw"MGRSPoint bad conversion from: "+e;var l=e.charAt(n++);if(l<="A"||l==="B"||l==="Y"||l>="Z"||l==="I"||l==="O")throw"MGRSPoint zone letter "+l+" not handled: "+e;i=e.substring(n,n+=2);for(var h=aa(r),c=Yo(i.charAt(0),h),d=Jo(i.charAt(1),h);d<Xo(l);)d+=2e6;var g=t-n;if(g%2!==0)throw`MGRSPoint has to have an even number
|
|
2
2
|
of digits after the zone letter and two 100km letters - front
|
|
3
3
|
half for easting meters, second half for
|
|
4
|
-
northing meters`+i;var d=u/2,C=0,p=0,A,v,I,w,M;return d>0&&(A=1e5/Math.pow(10,d),v=i.substring(o,o+d),C=parseFloat(v)*A,I=i.substring(o+d),p=parseFloat(I)*A),w=C+h,M=p+m,{easting:w,northing:M,zoneLetter:l,zoneNumber:r,accuracy:A}}function kr(i,t){for(var e=Dn.charCodeAt(t-1),s=1e5,n=!1;e!==i.charCodeAt(0);){if(e++,e===lt&&e++,e===pt&&e++,e>xe){if(n)throw"Bad character: "+i;e=ne,n=!0}s+=1e5}return s}function Sr(i,t){if(i>"V")throw"MGRSPoint given invalid Northing "+i;for(var e=Vn.charCodeAt(t-1),s=0,n=!1;e!==i.charCodeAt(0);){if(e++,e===lt&&e++,e===pt&&e++,e>_e){if(n)throw"Bad character: "+i;e=ne,n=!0}s+=1e5}return s}function Nr(i){var t;switch(i){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+i}function ce(i,t,e){if(!(this instanceof ce))return new ce(i,t,e);if(Array.isArray(i))this.x=i[0],this.y=i[1],this.z=i[2]||0;else if(typeof i=="object")this.x=i.x,this.y=i.y,this.z=i.z||0;else if(typeof i=="string"&&typeof t>"u"){var s=i.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=i,this.y=t,this.z=e||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}ce.fromMGRS=function(i){return new ce(Fn(i))};ce.prototype.toMGRS=function(i){return Rn([this.x,this.y],i)};var Pr=1,Lr=.25,Us=.046875,zs=.01953125,Gs=.01068115234375,Tr=.75,Br=.46875,Dr=.013020833333333334,Vr=.007120768229166667,Rr=.3645833333333333,Fr=.005696614583333333,Ur=.3076171875;function Gn(i){var t=[];t[0]=Pr-i*(Lr+i*(Us+i*(zs+i*Gs))),t[1]=i*(Tr-i*(Us+i*(zs+i*Gs)));var e=i*i;return t[2]=e*(Br-i*(Dr+i*Vr)),e*=i,t[3]=e*(Rr-i*Fr),t[4]=e*i*Ur,t}function Mi(i,t,e,s){return e*=t,t*=t,s[0]*i-e*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var zr=20;function jn(i,t,e){for(var s=1/(1-t),n=i,o=zr;o;--o){var r=Math.sin(n),l=1-t*r*r;if(l=(Mi(n,r,Math.cos(n),e)-i)*(l*Math.sqrt(l))*s,n-=l,Math.abs(l)<O)return n}return n}function Gr(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=Gn(this.es),this.ml0=Mi(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function jr(i){var t=i.x,e=i.y,s=k(t-this.long0),n,o,r,l=Math.sin(e),c=Math.cos(e);if(this.es){var m=c*s,u=Math.pow(m,2),d=this.ep2*Math.pow(c,2),C=Math.pow(d,2),p=Math.abs(c)>O?Math.tan(e):0,A=Math.pow(p,2),v=Math.pow(A,2);n=1-this.es*Math.pow(l,2),m=m/Math.sqrt(n);var I=Mi(e,l,c,this.en);o=this.a*(this.k0*m*(1+u/6*(1-A+d+u/20*(5-18*A+v+14*d-58*A*d+u/42*(61+179*v-v*A-479*A)))))+this.x0,r=this.a*(this.k0*(I-this.ml0+l*s*m/2*(1+u/12*(5-A+9*d+4*C+u/30*(61+v-58*A+270*d-330*A*d+u/56*(1385+543*v-v*A-3111*A))))))+this.y0}else{var h=c*Math.sin(s);if(Math.abs(Math.abs(h)-1)<O)return 93;if(o=.5*this.a*this.k0*Math.log((1+h)/(1-h))+this.x0,r=c*Math.cos(s)/Math.sqrt(1-Math.pow(h,2)),h=Math.abs(r),h>=1){if(h-1>O)return 93;r=0}else r=Math.acos(r);e<0&&(r=-r),r=this.a*this.k0*(r-this.lat0)+this.y0}return i.x=o,i.y=r,i}function Hr(i){var t,e,s,n,o=(i.x-this.x0)*(1/this.a),r=(i.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+r/this.k0,e=jn(t,this.es,this.en),Math.abs(e)<x){var u=Math.sin(e),d=Math.cos(e),C=Math.abs(d)>O?Math.tan(e):0,p=this.ep2*Math.pow(d,2),A=Math.pow(p,2),v=Math.pow(C,2),I=Math.pow(v,2);t=1-this.es*Math.pow(u,2);var w=o*Math.sqrt(t)/this.k0,M=Math.pow(w,2);t=t*C,s=e-t*M/(1-this.es)*.5*(1-M/12*(5+3*v-9*p*v+p-4*A-M/30*(61+90*v-252*p*v+45*I+46*p-M/56*(1385+3633*v+4095*I+1574*I*v)))),n=k(this.long0+w*(1-M/6*(1+2*v+p-M/20*(5+28*v+24*I+8*p*v+6*p-M/42*(61+662*v+1320*I+720*I*v))))/d)}else s=x*Ve(r),n=0;else{var l=Math.exp(o/this.k0),c=.5*(l-1/l),h=this.lat0+r/this.k0,m=Math.cos(h);t=Math.sqrt((1-Math.pow(m,2))/(1+Math.pow(c,2))),s=Math.asin(t),r<0&&(s=-s),c===0&&m===0?n=0:n=k(Math.atan2(c,m)+this.long0)}return i.x=n,i.y=s,i}var Zr=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const ai={init:Gr,forward:jr,inverse:Hr,names:Zr};function Hn(i){var t=Math.exp(i);return t=(t-1/t)/2,t}function vt(i,t){i=Math.abs(i),t=Math.abs(t);var e=Math.max(i,t),s=Math.min(i,t)/(e||1);return e*Math.sqrt(1+Math.pow(s,2))}function Wr(i){var t=1+i,e=t-1;return e===0?i:i*Math.log(t)/e}function qr(i){var t=Math.abs(i);return t=Wr(t*(1+t/(vt(1,t)+1))),i<0?-t:t}function cs(i,t){for(var e=2*Math.cos(2*t),s=i.length-1,n=i[s],o=0,r;--s>=0;)r=-o+e*n+i[s],o=n,n=r;return t+r*Math.sin(2*t)}function Yr(i,t){for(var e=2*Math.cos(t),s=i.length-1,n=i[s],o=0,r;--s>=0;)r=-o+e*n+i[s],o=n,n=r;return Math.sin(t)*r}function Xr(i){var t=Math.exp(i);return t=(t+1/t)/2,t}function Zn(i,t,e){for(var s=Math.sin(t),n=Math.cos(t),o=Hn(e),r=Xr(e),l=2*n*r,c=-2*s*o,h=i.length-1,m=i[h],u=0,d=0,C=0,p,A;--h>=0;)p=d,A=u,d=m,u=C,m=-p+l*d-c*u+i[h],C=-A+c*d+l*u;return l=s*r,c=n*o,[l*m-c*C,l*C+c*m]}function Jr(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(ai.init.apply(this),this.forward=ai.forward,this.inverse=ai.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var i=this.es/(1+Math.sqrt(1-this.es)),t=i/(2-i),e=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),e=e*t,this.cgb[1]=e*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=e*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),e=e*t,this.cgb[2]=e*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=e*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),e=e*t,this.cgb[3]=e*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=e*(1237/630+t*(-12/5+t*(-24832/14175))),e=e*t,this.cgb[4]=e*(4174/315+t*(-144838/6237)),this.cbg[4]=e*(-734/315+t*(109598/31185)),e=e*t,this.cgb[5]=e*(601676/22275),this.cbg[5]=e*(444337/155925),e=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+e*(1/4+e*(1/64+e/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=e*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=e*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),e=e*t,this.utg[2]=e*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=e*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),e=e*t,this.utg[3]=e*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=e*(49561/161280+t*(-179/168+t*(6601661/7257600))),e=e*t,this.utg[4]=e*(-4583/161280+t*(108847/3991680)),this.gtu[4]=e*(34729/80640+t*(-3418889/1995840)),e=e*t,this.utg[5]=e*(-20648693/638668800),this.gtu[5]=e*(212378941/319334400);var s=cs(this.cbg,this.lat0);this.Zb=-this.Qn*(s+Yr(this.gtu,2*s))}function Qr(i){var t=k(i.x-this.long0),e=i.y;e=cs(this.cbg,e);var s=Math.sin(e),n=Math.cos(e),o=Math.sin(t),r=Math.cos(t);e=Math.atan2(s,r*n),t=Math.atan2(o*n,vt(s,n*r)),t=qr(Math.tan(t));var l=Zn(this.gtu,2*e,2*t);e=e+l[0],t=t+l[1];var c,h;return Math.abs(t)<=2.623395162778?(c=this.a*(this.Qn*t)+this.x0,h=this.a*(this.Qn*e+this.Zb)+this.y0):(c=1/0,h=1/0),i.x=c,i.y=h,i}function Kr(i){var t=(i.x-this.x0)*(1/this.a),e=(i.y-this.y0)*(1/this.a);e=(e-this.Zb)/this.Qn,t=t/this.Qn;var s,n;if(Math.abs(t)<=2.623395162778){var o=Zn(this.utg,2*e,2*t);e=e+o[0],t=t+o[1],t=Math.atan(Hn(t));var r=Math.sin(e),l=Math.cos(e),c=Math.sin(t),h=Math.cos(t);e=Math.atan2(r*h,vt(c,h*l)),t=Math.atan2(c,h*l),s=k(t+this.long0),n=cs(this.cgb,e)}else s=1/0,n=1/0;return i.x=s,i.y=n,i}var $r=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const oi={init:Jr,forward:Qr,inverse:Kr,names:$r};function tl(i,t){if(i===void 0){if(i=Math.floor((k(t)+Math.PI)*30/Math.PI)+1,i<0)return 0;if(i>60)return 60}return i}var el="etmerc";function il(){var i=tl(this.zone,this.long0);if(i===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(i)-183)*$,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,oi.init.apply(this),this.forward=oi.forward,this.inverse=oi.inverse}var sl=["Universal Transverse Mercator System","utm"];const nl={init:il,names:sl,dependsOn:el};function hs(i,t){return Math.pow((1-i)/(1+i),t)}var al=20;function ol(){var i=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*i*i),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(i/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+F)/(Math.pow(Math.tan(.5*this.lat0+F),this.C)*hs(this.e*i,this.ratexp))}function rl(i){var t=i.x,e=i.y;return i.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*e+F),this.C)*hs(this.e*Math.sin(e),this.ratexp))-x,i.x=this.C*t,i}function ll(i){for(var t=1e-14,e=i.x/this.C,s=i.y,n=Math.pow(Math.tan(.5*s+F)/this.K,1/this.C),o=al;o>0&&(s=2*Math.atan(n*hs(this.e*Math.sin(i.y),-.5*this.e))-x,!(Math.abs(s-i.y)<t));--o)i.y=s;return o?(i.x=e,i.y=s,i):null}const gs={init:ol,forward:rl,inverse:ll};function cl(){gs.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function hl(i){var t,e,s,n;return i.x=k(i.x-this.long0),gs.forward.apply(this,[i]),t=Math.sin(i.y),e=Math.cos(i.y),s=Math.cos(i.x),n=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*e*s),i.x=n*e*Math.sin(i.x),i.y=n*(this.cosc0*t-this.sinc0*e*s),i.x=this.a*i.x+this.x0,i.y=this.a*i.y+this.y0,i}function gl(i){var t,e,s,n,o;if(i.x=(i.x-this.x0)/this.a,i.y=(i.y-this.y0)/this.a,i.x/=this.k0,i.y/=this.k0,o=Math.sqrt(i.x*i.x+i.y*i.y)){var r=2*Math.atan2(o,this.R2);t=Math.sin(r),e=Math.cos(r),n=Math.asin(e*this.sinc0+i.y*t*this.cosc0/o),s=Math.atan2(i.x*t,o*this.cosc0*e-i.y*this.sinc0*t)}else n=this.phic0,s=0;return i.x=s,i.y=n,gs.inverse.apply(this,[i]),i.x=k(i.x+this.long0),i}var ul=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const dl={init:cl,forward:hl,inverse:gl,names:ul};function ml(i,t,e){return t*=e,Math.tan(.5*(x+i))*Math.pow((1-t)/(1+t),.5*e)}function pl(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*(1+Ve(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=O&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*this.cons*Ot(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/yt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=Ot(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-x,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function Al(i){var t=i.x,e=i.y,s=Math.sin(e),n=Math.cos(e),o,r,l,c,h,m,u=k(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=O&&Math.abs(e+this.lat0)<=O?(i.x=NaN,i.y=NaN,i):this.sphere?(o=2*this.k0/(1+this.sinlat0*s+this.coslat0*n*Math.cos(u)),i.x=this.a*o*n*Math.sin(u)+this.x0,i.y=this.a*o*(this.coslat0*s-this.sinlat0*n*Math.cos(u))+this.y0,i):(r=2*Math.atan(this.ssfn_(e,s,this.e))-x,c=Math.cos(r),l=Math.sin(r),Math.abs(this.coslat0)<=O?(h=yt(this.e,e*this.con,this.con*s),m=2*this.a*this.k0*h/this.cons,i.x=this.x0+m*Math.sin(t-this.long0),i.y=this.y0-this.con*m*Math.cos(t-this.long0),i):(Math.abs(this.sinlat0)<O?(o=2*this.a*this.k0/(1+c*Math.cos(u)),i.y=o*l):(o=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*l+this.cosX0*c*Math.cos(u))),i.y=o*(this.cosX0*l-this.sinX0*c*Math.cos(u))+this.y0),i.x=o*c*Math.sin(u)+this.x0,i))}function Cl(i){i.x-=this.x0,i.y-=this.y0;var t,e,s,n,o,r=Math.sqrt(i.x*i.x+i.y*i.y);if(this.sphere){var l=2*Math.atan(r/(2*this.a*this.k0));return t=this.long0,e=this.lat0,r<=O?(i.x=t,i.y=e,i):(e=Math.asin(Math.cos(l)*this.sinlat0+i.y*Math.sin(l)*this.coslat0/r),Math.abs(this.coslat0)<O?this.lat0>0?t=k(this.long0+Math.atan2(i.x,-1*i.y)):t=k(this.long0+Math.atan2(i.x,i.y)):t=k(this.long0+Math.atan2(i.x*Math.sin(l),r*this.coslat0*Math.cos(l)-i.y*this.sinlat0*Math.sin(l))),i.x=t,i.y=e,i)}else if(Math.abs(this.coslat0)<=O){if(r<=O)return e=this.lat0,t=this.long0,i.x=t,i.y=e,i;i.x*=this.con,i.y*=this.con,s=r*this.cons/(2*this.a*this.k0),e=this.con*Be(this.e,s),t=this.con*k(this.con*this.long0+Math.atan2(i.x,-1*i.y))}else n=2*Math.atan(r*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,r<=O?o=this.X0:(o=Math.asin(Math.cos(n)*this.sinX0+i.y*Math.sin(n)*this.cosX0/r),t=k(this.long0+Math.atan2(i.x*Math.sin(n),r*this.cosX0*Math.cos(n)-i.y*this.sinX0*Math.sin(n)))),e=-1*Be(this.e,Math.tan(.5*(x+o)));return i.x=t,i.y=e,i}var fl=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const Il={init:pl,forward:Al,inverse:Cl,names:fl,ssfn_:ml};function vl(){var i=this.lat0;this.lambda0=this.long0;var t=Math.sin(i),e=this.a,s=this.rf,n=1/s,o=2*n-Math.pow(n,2),r=this.e=Math.sqrt(o);this.R=this.k0*e*Math.sqrt(1-o)/(1-o*Math.pow(t,2)),this.alpha=Math.sqrt(1+o/(1-o)*Math.pow(Math.cos(i),4)),this.b0=Math.asin(t/this.alpha);var l=Math.log(Math.tan(Math.PI/4+this.b0/2)),c=Math.log(Math.tan(Math.PI/4+i/2)),h=Math.log((1+r*t)/(1-r*t));this.K=l-this.alpha*c+this.alpha*r/2*h}function yl(i){var t=Math.log(Math.tan(Math.PI/4-i.y/2)),e=this.e/2*Math.log((1+this.e*Math.sin(i.y))/(1-this.e*Math.sin(i.y))),s=-this.alpha*(t+e)+this.K,n=2*(Math.atan(Math.exp(s))-Math.PI/4),o=this.alpha*(i.x-this.lambda0),r=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(n)+Math.cos(this.b0)*Math.cos(o))),l=Math.asin(Math.cos(this.b0)*Math.sin(n)-Math.sin(this.b0)*Math.cos(n)*Math.cos(o));return i.y=this.R/2*Math.log((1+Math.sin(l))/(1-Math.sin(l)))+this.y0,i.x=this.R*r+this.x0,i}function bl(i){for(var t=i.x-this.x0,e=i.y-this.y0,s=t/this.R,n=2*(Math.atan(Math.exp(e/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(n)+Math.sin(this.b0)*Math.cos(n)*Math.cos(s)),r=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(n))),l=this.lambda0+r/this.alpha,c=0,h=o,m=-1e3,u=0;Math.abs(h-m)>1e-7;){if(++u>20)return;c=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(h))/2)),m=h,h=2*Math.atan(Math.exp(c))-Math.PI/2}return i.x=l,i.y=h,i}var Ml=["somerc"];const wl={init:vl,forward:yl,inverse:bl,names:Ml};var te=1e-7;function El(i){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],e=typeof i.PROJECTION=="object"?Object.keys(i.PROJECTION)[0]:i.PROJECTION;return"no_uoff"in i||"no_off"in i||t.indexOf(e)!==-1}function _l(){var i,t,e,s,n,o,r,l,c,h,m=0,u,d=0,C=0,p=0,A=0,v=0,I=0;this.no_off=El(this),this.no_rot="no_rot"in this;var w=!1;"alpha"in this&&(w=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),w&&(I=this.alpha),M&&(m=this.rectified_grid_angle*$),w||M)d=this.longc;else if(C=this.long1,A=this.lat1,p=this.long2,v=this.lat2,Math.abs(A-v)<=te||(i=Math.abs(A))<=te||Math.abs(i-x)<=te||Math.abs(Math.abs(this.lat0)-x)<=te||Math.abs(Math.abs(v)-x)<=te)throw new Error;var y=1-this.es;t=Math.sqrt(y),Math.abs(this.lat0)>O?(l=Math.sin(this.lat0),e=Math.cos(this.lat0),i=1-this.es*l*l,this.B=e*e,this.B=Math.sqrt(1+this.es*this.B*this.B/y),this.A=this.B*this.k0*t/i,s=this.B*t/(e*Math.sqrt(i)),n=s*s-1,n<=0?n=0:(n=Math.sqrt(n),this.lat0<0&&(n=-n)),this.E=n+=s,this.E*=Math.pow(yt(this.e,this.lat0,l),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=n=1),w||M?(w?(u=Math.asin(Math.sin(I)/s),M||(m=I)):(u=m,I=Math.asin(s*Math.sin(u))),this.lam0=d-Math.asin(.5*(n-1/n)*Math.tan(u))/this.B):(o=Math.pow(yt(this.e,A,Math.sin(A)),this.B),r=Math.pow(yt(this.e,v,Math.sin(v)),this.B),n=this.E/o,c=(r-o)/(r+o),h=this.E*this.E,h=(h-r*o)/(h+r*o),i=C-p,i<-Math.pi?p-=Le:i>Math.pi&&(p+=Le),this.lam0=k(.5*(C+p)-Math.atan(h*Math.tan(.5*this.B*(C-p))/c)/this.B),u=Math.atan(2*Math.sin(this.B*k(C-this.lam0))/(n-1/n)),m=I=Math.asin(s*Math.sin(u))),this.singam=Math.sin(u),this.cosgam=Math.cos(u),this.sinrot=Math.sin(m),this.cosrot=Math.cos(m),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),n=.5*u,this.v_pole_n=this.ArB*Math.log(Math.tan(F-n)),this.v_pole_s=this.ArB*Math.log(Math.tan(F+n))}function xl(i){var t={},e,s,n,o,r,l,c,h;if(i.x=i.x-this.lam0,Math.abs(Math.abs(i.y)-x)>O){if(r=this.E/Math.pow(yt(this.e,i.y,Math.sin(i.y)),this.B),l=1/r,e=.5*(r-l),s=.5*(r+l),o=Math.sin(this.B*i.x),n=(e*this.singam-o*this.cosgam)/s,Math.abs(Math.abs(n)-1)<O)throw new Error;h=.5*this.ArB*Math.log((1-n)/(1+n)),l=Math.cos(this.B*i.x),Math.abs(l)<te?c=this.A*i.x:c=this.ArB*Math.atan2(e*this.cosgam+o*this.singam,l)}else h=i.y>0?this.v_pole_n:this.v_pole_s,c=this.ArB*i.y;return this.no_rot?(t.x=c,t.y=h):(c-=this.u_0,t.x=h*this.cosrot+c*this.sinrot,t.y=c*this.cosrot-h*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function Ol(i){var t,e,s,n,o,r,l,c={};if(i.x=(i.x-this.x0)*(1/this.a),i.y=(i.y-this.y0)*(1/this.a),this.no_rot?(e=i.y,t=i.x):(e=i.x*this.cosrot-i.y*this.sinrot,t=i.y*this.cosrot+i.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*e),n=.5*(s-1/s),o=.5*(s+1/s),r=Math.sin(this.BrA*t),l=(r*this.cosgam+n*this.singam)/o,Math.abs(Math.abs(l)-1)<O)c.x=0,c.y=l<0?-x:x;else{if(c.y=this.E/Math.sqrt((1+l)/(1-l)),c.y=Be(this.e,Math.pow(c.y,1/this.B)),c.y===1/0)throw new Error;c.x=-this.rB*Math.atan2(n*this.cosgam-r*this.singam,Math.cos(this.BrA*t))}return c.x+=this.lam0,c}var kl=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const Sl={init:_l,forward:xl,inverse:Ol,names:kl};function Nl(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<O)){var i=this.b/this.a;this.e=Math.sqrt(1-i*i);var t=Math.sin(this.lat1),e=Math.cos(this.lat1),s=Ot(this.e,t,e),n=yt(this.e,this.lat1,t),o=Math.sin(this.lat2),r=Math.cos(this.lat2),l=Ot(this.e,o,r),c=yt(this.e,this.lat2,o),h=yt(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>O?this.ns=Math.log(s/l)/Math.log(n/c):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(n,this.ns)),this.rh=this.a*this.f0*Math.pow(h,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function Pl(i){var t=i.x,e=i.y;Math.abs(2*Math.abs(e)-Math.PI)<=O&&(e=Ve(e)*(x-2*O));var s=Math.abs(Math.abs(e)-x),n,o;if(s>O)n=yt(this.e,e,Math.sin(e)),o=this.a*this.f0*Math.pow(n,this.ns);else{if(s=e*this.ns,s<=0)return null;o=0}var r=this.ns*k(t-this.long0);return i.x=this.k0*(o*Math.sin(r))+this.x0,i.y=this.k0*(this.rh-o*Math.cos(r))+this.y0,i}function Ll(i){var t,e,s,n,o,r=(i.x-this.x0)/this.k0,l=this.rh-(i.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(r*r+l*l),e=1):(t=-Math.sqrt(r*r+l*l),e=-1);var c=0;if(t!==0&&(c=Math.atan2(e*r,e*l)),t!==0||this.ns>0){if(e=1/this.ns,s=Math.pow(t/(this.a*this.f0),e),n=Be(this.e,s),n===-9999)return null}else n=-x;return o=k(c/this.ns+this.long0),i.x=o,i.y=n,i}var Tl=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const Bl={init:Nl,forward:Pl,inverse:Ll,names:Tl};function Dl(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function Vl(i){var t,e,s,n,o,r,l,c=i.x,h=i.y,m=k(c-this.long0);return t=Math.pow((1+this.e*Math.sin(h))/(1-this.e*Math.sin(h)),this.alfa*this.e/2),e=2*(Math.atan(this.k*Math.pow(Math.tan(h/2+this.s45),this.alfa)/t)-this.s45),s=-m*this.alfa,n=Math.asin(Math.cos(this.ad)*Math.sin(e)+Math.sin(this.ad)*Math.cos(e)*Math.cos(s)),o=Math.asin(Math.cos(e)*Math.sin(s)/Math.cos(n)),r=this.n*o,l=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(n/2+this.s45),this.n),i.y=l*Math.cos(r)/1,i.x=l*Math.sin(r)/1,this.czech||(i.y*=-1,i.x*=-1),i}function Rl(i){var t,e,s,n,o,r,l,c,h=i.x;i.x=i.y,i.y=h,this.czech||(i.y*=-1,i.x*=-1),r=Math.sqrt(i.x*i.x+i.y*i.y),o=Math.atan2(i.y,i.x),n=o/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/r,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(n)),e=Math.asin(Math.cos(s)*Math.sin(n)/Math.cos(t)),i.x=this.long0-e/this.alfa,l=t,c=0;var m=0;do i.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.e/2))-this.s45),Math.abs(l-i.y)<1e-10&&(c=1),l=i.y,m+=1;while(c===0&&m<15);return m>=15?null:i}var Fl=["Krovak","krovak"];const Ul={init:Dl,forward:Vl,inverse:Rl,names:Fl};function at(i,t,e,s,n){return i*n-t*Math.sin(2*n)+e*Math.sin(4*n)-s*Math.sin(6*n)}function Re(i){return 1-.25*i*(1+i/16*(3+1.25*i))}function Fe(i){return .375*i*(1+.25*i*(1+.46875*i))}function Ue(i){return .05859375*i*i*(1+.75*i)}function ze(i){return i*i*i*(35/3072)}function he(i,t,e){var s=t*e;return i/Math.sqrt(1-s*s)}function ue(i){return Math.abs(i)<x?i:i-Ve(i)*Math.PI}function Ci(i,t,e,s,n){var o,r;o=i/t;for(var l=0;l<15;l++)if(r=(i-(t*o-e*Math.sin(2*o)+s*Math.sin(4*o)-n*Math.sin(6*o)))/(t-2*e*Math.cos(2*o)+4*s*Math.cos(4*o)-6*n*Math.cos(6*o)),o+=r,Math.abs(r)<=1e-10)return o;return NaN}function zl(){this.sphere||(this.e0=Re(this.es),this.e1=Fe(this.es),this.e2=Ue(this.es),this.e3=ze(this.es),this.ml0=this.a*at(this.e0,this.e1,this.e2,this.e3,this.lat0))}function Gl(i){var t,e,s=i.x,n=i.y;if(s=k(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(n)*Math.sin(s)),e=this.a*(Math.atan2(Math.tan(n),Math.cos(s))-this.lat0);else{var o=Math.sin(n),r=Math.cos(n),l=he(this.a,this.e,o),c=Math.tan(n)*Math.tan(n),h=s*Math.cos(n),m=h*h,u=this.es*r*r/(1-this.es),d=this.a*at(this.e0,this.e1,this.e2,this.e3,n);t=l*h*(1-m*c*(1/6-(8-c+8*u)*m/120)),e=d-this.ml0+l*o/r*m*(.5+(5-c+6*u)*m/24)}return i.x=t+this.x0,i.y=e+this.y0,i}function jl(i){i.x-=this.x0,i.y-=this.y0;var t=i.x/this.a,e=i.y/this.a,s,n;if(this.sphere){var o=e+this.lat0;s=Math.asin(Math.sin(o)*Math.cos(t)),n=Math.atan2(Math.tan(t),Math.cos(o))}else{var r=this.ml0/this.a+e,l=Ci(r,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(l)-x)<=O)return i.x=this.long0,i.y=x,e<0&&(i.y*=-1),i;var c=he(this.a,this.e,Math.sin(l)),h=c*c*c/this.a/this.a*(1-this.es),m=Math.pow(Math.tan(l),2),u=t*this.a/c,d=u*u;s=l-c*Math.tan(l)/h*u*u*(.5-(1+3*m)*u*u/24),n=u*(1-d*(m/3+(1+3*m)*m*d/15))/Math.cos(l)}return i.x=k(n+this.long0),i.y=ue(s),i}var Hl=["Cassini","Cassini_Soldner","cass"];const Zl={init:zl,forward:Gl,inverse:jl,names:Hl};function Bt(i,t){var e;return i>1e-7?(e=i*t,(1-i*i)*(t/(1-e*e)-.5/i*Math.log((1-e)/(1+e)))):2*t}var Wl=1,ql=2,Yl=3,Xl=4;function Jl(){var i=Math.abs(this.lat0);if(Math.abs(i-x)<O?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(i)<O?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=Bt(this.e,1),this.mmf=.5/(1-this.es),this.apa=ac(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=Bt(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Ql(i){var t,e,s,n,o,r,l,c,h,m,u=i.x,d=i.y;if(u=k(u-this.long0),this.sphere){if(o=Math.sin(d),m=Math.cos(d),s=Math.cos(u),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(e=this.mode===this.EQUIT?1+m*s:1+this.sinph0*o+this.cosph0*m*s,e<=O)return null;e=Math.sqrt(2/e),t=e*m*Math.sin(u),e*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*m*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(d+this.lat0)<O)return null;e=F-d*.5,e=2*(this.mode===this.S_POLE?Math.cos(e):Math.sin(e)),t=e*Math.sin(u),e*=s}}else{switch(l=0,c=0,h=0,s=Math.cos(u),n=Math.sin(u),o=Math.sin(d),r=Bt(this.e,o),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(l=r/this.qp,c=Math.sqrt(1-l*l)),this.mode){case this.OBLIQ:h=1+this.sinb1*l+this.cosb1*c*s;break;case this.EQUIT:h=1+c*s;break;case this.N_POLE:h=x+d,r=this.qp-r;break;case this.S_POLE:h=d-x,r=this.qp+r;break}if(Math.abs(h)<O)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:h=Math.sqrt(2/h),this.mode===this.OBLIQ?e=this.ymf*h*(this.cosb1*l-this.sinb1*c*s):e=(h=Math.sqrt(2/(1+c*s)))*l*this.ymf,t=this.xmf*h*c*n;break;case this.N_POLE:case this.S_POLE:r>=0?(t=(h=Math.sqrt(r))*n,e=s*(this.mode===this.S_POLE?h:-h)):t=e=0;break}}return i.x=this.a*t+this.x0,i.y=this.a*e+this.y0,i}function Kl(i){i.x-=this.x0,i.y-=this.y0;var t=i.x/this.a,e=i.y/this.a,s,n,o,r,l,c,h;if(this.sphere){var m=0,u,d=0;if(u=Math.sqrt(t*t+e*e),n=u*.5,n>1)return null;switch(n=2*Math.asin(n),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(d=Math.sin(n),m=Math.cos(n)),this.mode){case this.EQUIT:n=Math.abs(u)<=O?0:Math.asin(e*d/u),t*=d,e=m*u;break;case this.OBLIQ:n=Math.abs(u)<=O?this.lat0:Math.asin(m*this.sinph0+e*d*this.cosph0/u),t*=d*this.cosph0,e=(m-Math.sin(n)*this.sinph0)*u;break;case this.N_POLE:e=-e,n=x-n;break;case this.S_POLE:n-=x;break}s=e===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,e)}else{if(h=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,e*=this.dd,c=Math.sqrt(t*t+e*e),c<O)return i.x=this.long0,i.y=this.lat0,i;r=2*Math.asin(.5*c/this.rq),o=Math.cos(r),t*=r=Math.sin(r),this.mode===this.OBLIQ?(h=o*this.sinb1+e*r*this.cosb1/c,l=this.qp*h,e=c*this.cosb1*o-e*this.sinb1*r):(h=e*r/c,l=this.qp*h,e=c*o)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(e=-e),l=t*t+e*e,!l)return i.x=this.long0,i.y=this.lat0,i;h=1-l/this.qp,this.mode===this.S_POLE&&(h=-h)}s=Math.atan2(t,e),n=oc(Math.asin(h),this.apa)}return i.x=k(this.long0+s),i.y=n,i}var $l=.3333333333333333,tc=.17222222222222222,ec=.10257936507936508,ic=.06388888888888888,sc=.0664021164021164,nc=.016415012942191543;function ac(i){var t,e=[];return e[0]=i*$l,t=i*i,e[0]+=t*tc,e[1]=t*ic,t*=i,e[0]+=t*ec,e[1]+=t*sc,e[2]=t*nc,e}function oc(i,t){var e=i+i;return i+t[0]*Math.sin(e)+t[1]*Math.sin(e+e)+t[2]*Math.sin(e+e+e)}var rc=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const lc={init:Jl,forward:Ql,inverse:Kl,names:rc,S_POLE:Wl,N_POLE:ql,EQUIT:Yl,OBLIQ:Xl};function Vt(i){return Math.abs(i)>1&&(i=i>1?1:-1),Math.asin(i)}function cc(){Math.abs(this.lat1+this.lat2)<O||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=Ot(this.e3,this.sin_po,this.cos_po),this.qs1=Bt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=Ot(this.e3,this.sin_po,this.cos_po),this.qs2=Bt(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=Bt(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>O?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function hc(i){var t=i.x,e=i.y;this.sin_phi=Math.sin(e),this.cos_phi=Math.cos(e);var s=Bt(this.e3,this.sin_phi),n=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,o=this.ns0*k(t-this.long0),r=n*Math.sin(o)+this.x0,l=this.rh-n*Math.cos(o)+this.y0;return i.x=r,i.y=l,i}function gc(i){var t,e,s,n,o,r;return i.x-=this.x0,i.y=this.rh-i.y+this.y0,this.ns0>=0?(t=Math.sqrt(i.x*i.x+i.y*i.y),s=1):(t=-Math.sqrt(i.x*i.x+i.y*i.y),s=-1),n=0,t!==0&&(n=Math.atan2(s*i.x,s*i.y)),s=t*this.ns0/this.a,this.sphere?r=Math.asin((this.c-s*s)/(2*this.ns0)):(e=(this.c-s*s)/this.ns0,r=this.phi1z(this.e3,e)),o=k(n/this.ns0+this.long0),i.x=o,i.y=r,i}function uc(i,t){var e,s,n,o,r,l=Vt(.5*t);if(i<O)return l;for(var c=i*i,h=1;h<=25;h++)if(e=Math.sin(l),s=Math.cos(l),n=i*e,o=1-n*n,r=.5*o*o/s*(t/(1-c)-e/o+.5/i*Math.log((1-n)/(1+n))),l=l+r,Math.abs(r)<=1e-7)return l;return null}var dc=["Albers_Conic_Equal_Area","Albers","aea"];const mc={init:cc,forward:hc,inverse:gc,names:dc,phi1z:uc};function pc(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function Ac(i){var t,e,s,n,o,r,l,c,h=i.x,m=i.y;return s=k(h-this.long0),t=Math.sin(m),e=Math.cos(m),n=Math.cos(s),r=this.sin_p14*t+this.cos_p14*e*n,o=1,r>0||Math.abs(r)<=O?(l=this.x0+this.a*o*e*Math.sin(s)/r,c=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*e*n)/r):(l=this.x0+this.infinity_dist*e*Math.sin(s),c=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*e*n)),i.x=l,i.y=c,i}function Cc(i){var t,e,s,n,o,r;return i.x=(i.x-this.x0)/this.a,i.y=(i.y-this.y0)/this.a,i.x/=this.k0,i.y/=this.k0,(t=Math.sqrt(i.x*i.x+i.y*i.y))?(n=Math.atan2(t,this.rc),e=Math.sin(n),s=Math.cos(n),r=Vt(s*this.sin_p14+i.y*e*this.cos_p14/t),o=Math.atan2(i.x*e,t*this.cos_p14*s-i.y*this.sin_p14*e),o=k(this.long0+o)):(r=this.phic0,o=0),i.x=o,i.y=r,i}var fc=["gnom"];const Ic={init:pc,forward:Ac,inverse:Cc,names:fc};function vc(i,t){var e=1-(1-i*i)/(2*i)*Math.log((1-i)/(1+i));if(Math.abs(Math.abs(t)-e)<1e-6)return t<0?-1*x:x;for(var s=Math.asin(.5*t),n,o,r,l,c=0;c<30;c++)if(o=Math.sin(s),r=Math.cos(s),l=i*o,n=Math.pow(1-l*l,2)/(2*r)*(t/(1-i*i)-o/(1-l*l)+.5/i*Math.log((1-l)/(1+l))),s+=n,Math.abs(n)<=1e-10)return s;return NaN}function yc(){this.sphere||(this.k0=Ot(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function bc(i){var t=i.x,e=i.y,s,n,o=k(t-this.long0);if(this.sphere)s=this.x0+this.a*o*Math.cos(this.lat_ts),n=this.y0+this.a*Math.sin(e)/Math.cos(this.lat_ts);else{var r=Bt(this.e,Math.sin(e));s=this.x0+this.a*this.k0*o,n=this.y0+this.a*r*.5/this.k0}return i.x=s,i.y=n,i}function Mc(i){i.x-=this.x0,i.y-=this.y0;var t,e;return this.sphere?(t=k(this.long0+i.x/this.a/Math.cos(this.lat_ts)),e=Math.asin(i.y/this.a*Math.cos(this.lat_ts))):(e=vc(this.e,2*i.y*this.k0/this.a),t=k(this.long0+i.x/(this.a*this.k0))),i.x=t,i.y=e,i}var wc=["cea"];const Ec={init:yc,forward:bc,inverse:Mc,names:wc};function _c(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function xc(i){var t=i.x,e=i.y,s=k(t-this.long0),n=ue(e-this.lat0);return i.x=this.x0+this.a*s*this.rc,i.y=this.y0+this.a*n,i}function Oc(i){var t=i.x,e=i.y;return i.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),i.y=ue(this.lat0+(e-this.y0)/this.a),i}var kc=["Equirectangular","Equidistant_Cylindrical","eqc"];const Sc={init:_c,forward:xc,inverse:Oc,names:kc};var js=20;function Nc(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Re(this.es),this.e1=Fe(this.es),this.e2=Ue(this.es),this.e3=ze(this.es),this.ml0=this.a*at(this.e0,this.e1,this.e2,this.e3,this.lat0)}function Pc(i){var t=i.x,e=i.y,s,n,o,r=k(t-this.long0);if(o=r*Math.sin(e),this.sphere)Math.abs(e)<=O?(s=this.a*r,n=-1*this.a*this.lat0):(s=this.a*Math.sin(o)/Math.tan(e),n=this.a*(ue(e-this.lat0)+(1-Math.cos(o))/Math.tan(e)));else if(Math.abs(e)<=O)s=this.a*r,n=-1*this.ml0;else{var l=he(this.a,this.e,Math.sin(e))/Math.tan(e);s=l*Math.sin(o),n=this.a*at(this.e0,this.e1,this.e2,this.e3,e)-this.ml0+l*(1-Math.cos(o))}return i.x=s+this.x0,i.y=n+this.y0,i}function Lc(i){var t,e,s,n,o,r,l,c,h;if(s=i.x-this.x0,n=i.y-this.y0,this.sphere)if(Math.abs(n+this.a*this.lat0)<=O)t=k(s/this.a+this.long0),e=0;else{r=this.lat0+n/this.a,l=s*s/this.a/this.a+r*r,c=r;var m;for(o=js;o;--o)if(m=Math.tan(c),h=-1*(r*(c*m+1)-c-.5*(c*c+l)*m)/((c-r)/m-1),c+=h,Math.abs(h)<=O){e=c;break}t=k(this.long0+Math.asin(s*Math.tan(c)/this.a)/Math.sin(e))}else if(Math.abs(n+this.ml0)<=O)e=0,t=k(this.long0+s/this.a);else{r=(this.ml0+n)/this.a,l=s*s/this.a/this.a+r*r,c=r;var u,d,C,p,A;for(o=js;o;--o)if(A=this.e*Math.sin(c),u=Math.sqrt(1-A*A)*Math.tan(c),d=this.a*at(this.e0,this.e1,this.e2,this.e3,c),C=this.e0-2*this.e1*Math.cos(2*c)+4*this.e2*Math.cos(4*c)-6*this.e3*Math.cos(6*c),p=d/this.a,h=(r*(u*p+1)-p-.5*u*(p*p+l))/(this.es*Math.sin(2*c)*(p*p+l-2*r*p)/(4*u)+(r-p)*(u*C-2/Math.sin(2*c))-C),c-=h,Math.abs(h)<=O){e=c;break}u=Math.sqrt(1-this.es*Math.pow(Math.sin(e),2))*Math.tan(e),t=k(this.long0+Math.asin(s*u/this.a)/Math.sin(e))}return i.x=t,i.y=e,i}var Tc=["Polyconic","poly"];const Bc={init:Nc,forward:Pc,inverse:Lc,names:Tc};function Dc(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function Vc(i){var t,e=i.x,s=i.y,n=s-this.lat0,o=e-this.long0,r=n/Pe*1e-5,l=o,c=1,h=0;for(t=1;t<=10;t++)c=c*r,h=h+this.A[t]*c;var m=h,u=l,d=1,C=0,p,A,v=0,I=0;for(t=1;t<=6;t++)p=d*m-C*u,A=C*m+d*u,d=p,C=A,v=v+this.B_re[t]*d-this.B_im[t]*C,I=I+this.B_im[t]*d+this.B_re[t]*C;return i.x=I*this.a+this.x0,i.y=v*this.a+this.y0,i}function Rc(i){var t,e=i.x,s=i.y,n=e-this.x0,o=s-this.y0,r=o/this.a,l=n/this.a,c=1,h=0,m,u,d=0,C=0;for(t=1;t<=6;t++)m=c*r-h*l,u=h*r+c*l,c=m,h=u,d=d+this.C_re[t]*c-this.C_im[t]*h,C=C+this.C_im[t]*c+this.C_re[t]*h;for(var p=0;p<this.iterations;p++){var A=d,v=C,I,w,M=r,y=l;for(t=2;t<=6;t++)I=A*d-v*C,w=v*d+A*C,A=I,v=w,M=M+(t-1)*(this.B_re[t]*A-this.B_im[t]*v),y=y+(t-1)*(this.B_im[t]*A+this.B_re[t]*v);A=1,v=0;var E=this.B_re[1],_=this.B_im[1];for(t=2;t<=6;t++)I=A*d-v*C,w=v*d+A*C,A=I,v=w,E=E+t*(this.B_re[t]*A-this.B_im[t]*v),_=_+t*(this.B_im[t]*A+this.B_re[t]*v);var S=E*E+_*_;d=(M*E+y*_)/S,C=(y*E-M*_)/S}var T=d,q=C,tt=1,L=0;for(t=1;t<=9;t++)tt=tt*T,L=L+this.D[t]*tt;var V=this.lat0+L*Pe*1e5,z=this.long0+q;return i.x=z,i.y=V,i}var Fc=["New_Zealand_Map_Grid","nzmg"];const Uc={init:Dc,forward:Vc,inverse:Rc,names:Fc};function zc(){}function Gc(i){var t=i.x,e=i.y,s=k(t-this.long0),n=this.x0+this.a*s,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+e/2.5))*1.25;return i.x=n,i.y=o,i}function jc(i){i.x-=this.x0,i.y-=this.y0;var t=k(this.long0+i.x/this.a),e=2.5*(Math.atan(Math.exp(.8*i.y/this.a))-Math.PI/4);return i.x=t,i.y=e,i}var Hc=["Miller_Cylindrical","mill"];const Zc={init:zc,forward:Gc,inverse:jc,names:Hc};var Wc=20;function qc(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Gn(this.es)}function Yc(i){var t,e,s=i.x,n=i.y;if(s=k(s-this.long0),this.sphere){if(!this.m)n=this.n!==1?Math.asin(this.n*Math.sin(n)):n;else for(var o=this.n*Math.sin(n),r=Wc;r;--r){var l=(this.m*n+Math.sin(n)-o)/(this.m+Math.cos(n));if(n-=l,Math.abs(l)<O)break}t=this.a*this.C_x*s*(this.m+Math.cos(n)),e=this.a*this.C_y*n}else{var c=Math.sin(n),h=Math.cos(n);e=this.a*Mi(n,c,h,this.en),t=this.a*s*h/Math.sqrt(1-this.es*c*c)}return i.x=t,i.y=e,i}function Xc(i){var t,e,s,n;return i.x-=this.x0,s=i.x/this.a,i.y-=this.y0,t=i.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=Vt((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=Vt(Math.sin(t)/this.n)),s=k(s+this.long0),t=ue(t)):(t=jn(i.y/this.a,this.es,this.en),n=Math.abs(t),n<x?(n=Math.sin(t),e=this.long0+i.x*Math.sqrt(1-this.es*n*n)/(this.a*Math.cos(t)),s=k(e)):n-O<x&&(s=this.long0)),i.x=s,i.y=t,i}var Jc=["Sinusoidal","sinu"];const Qc={init:qc,forward:Yc,inverse:Xc,names:Jc};function Kc(){}function $c(i){for(var t=i.x,e=i.y,s=k(t-this.long0),n=e,o=Math.PI*Math.sin(e);;){var r=-(n+Math.sin(n)-o)/(1+Math.cos(n));if(n+=r,Math.abs(r)<O)break}n/=2,Math.PI/2-Math.abs(e)<O&&(s=0);var l=.900316316158*this.a*s*Math.cos(n)+this.x0,c=1.4142135623731*this.a*Math.sin(n)+this.y0;return i.x=l,i.y=c,i}function th(i){var t,e;i.x-=this.x0,i.y-=this.y0,e=i.y/(1.4142135623731*this.a),Math.abs(e)>.999999999999&&(e=.999999999999),t=Math.asin(e);var s=k(this.long0+i.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),e=(2*t+Math.sin(2*t))/Math.PI,Math.abs(e)>1&&(e=1);var n=Math.asin(e);return i.x=s,i.y=n,i}var eh=["Mollweide","moll"];const ih={init:Kc,forward:$c,inverse:th,names:eh};function sh(){Math.abs(this.lat1+this.lat2)<O||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Re(this.es),this.e1=Fe(this.es),this.e2=Ue(this.es),this.e3=ze(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=Ot(this.e,this.sinphi,this.cosphi),this.ml1=at(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<O?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=Ot(this.e,this.sinphi,this.cosphi),this.ml2=at(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=at(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function nh(i){var t=i.x,e=i.y,s;if(this.sphere)s=this.a*(this.g-e);else{var n=at(this.e0,this.e1,this.e2,this.e3,e);s=this.a*(this.g-n)}var o=this.ns*k(t-this.long0),r=this.x0+s*Math.sin(o),l=this.y0+this.rh-s*Math.cos(o);return i.x=r,i.y=l,i}function ah(i){i.x-=this.x0,i.y=this.rh-i.y+this.y0;var t,e,s,n;this.ns>=0?(e=Math.sqrt(i.x*i.x+i.y*i.y),t=1):(e=-Math.sqrt(i.x*i.x+i.y*i.y),t=-1);var o=0;if(e!==0&&(o=Math.atan2(t*i.x,t*i.y)),this.sphere)return n=k(this.long0+o/this.ns),s=ue(this.g-e/this.a),i.x=n,i.y=s,i;var r=this.g-e/this.a;return s=Ci(r,this.e0,this.e1,this.e2,this.e3),n=k(this.long0+o/this.ns),i.x=n,i.y=s,i}var oh=["Equidistant_Conic","eqdc"];const rh={init:sh,forward:nh,inverse:ah,names:oh};function lh(){this.R=this.a}function ch(i){var t=i.x,e=i.y,s=k(t-this.long0),n,o;Math.abs(e)<=O&&(n=this.x0+this.R*s,o=this.y0);var r=Vt(2*Math.abs(e/Math.PI));(Math.abs(s)<=O||Math.abs(Math.abs(e)-x)<=O)&&(n=this.x0,e>=0?o=this.y0+Math.PI*this.R*Math.tan(.5*r):o=this.y0+Math.PI*this.R*-Math.tan(.5*r));var l=.5*Math.abs(Math.PI/s-s/Math.PI),c=l*l,h=Math.sin(r),m=Math.cos(r),u=m/(h+m-1),d=u*u,C=u*(2/h-1),p=C*C,A=Math.PI*this.R*(l*(u-p)+Math.sqrt(c*(u-p)*(u-p)-(p+c)*(d-p)))/(p+c);s<0&&(A=-A),n=this.x0+A;var v=c+u;return A=Math.PI*this.R*(C*v-l*Math.sqrt((p+c)*(c+1)-v*v))/(p+c),e>=0?o=this.y0+A:o=this.y0-A,i.x=n,i.y=o,i}function hh(i){var t,e,s,n,o,r,l,c,h,m,u,d,C;return i.x-=this.x0,i.y-=this.y0,u=Math.PI*this.R,s=i.x/u,n=i.y/u,o=s*s+n*n,r=-Math.abs(n)*(1+o),l=r-2*n*n+s*s,c=-2*r+1+2*n*n+o*o,C=n*n/c+(2*l*l*l/c/c/c-9*r*l/c/c)/27,h=(r-l*l/3/c)/c,m=2*Math.sqrt(-h/3),u=3*C/h/m,Math.abs(u)>1&&(u>=0?u=1:u=-1),d=Math.acos(u)/3,i.y>=0?e=(-m*Math.cos(d+Math.PI/3)-l/3/c)*Math.PI:e=-(-m*Math.cos(d+Math.PI/3)-l/3/c)*Math.PI,Math.abs(s)<O?t=this.long0:t=k(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(s*s-n*n)+o*o))/2/s),i.x=t,i.y=e,i}var gh=["Van_der_Grinten_I","VanDerGrinten","vandg"];const uh={init:lh,forward:ch,inverse:hh,names:gh};function dh(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function mh(i){var t=i.x,e=i.y,s=Math.sin(i.y),n=Math.cos(i.y),o=k(t-this.long0),r,l,c,h,m,u,d,C,p,A,v,I,w,M,y,E,_,S,T,q,tt,L,V;return this.sphere?Math.abs(this.sin_p12-1)<=O?(i.x=this.x0+this.a*(x-e)*Math.sin(o),i.y=this.y0-this.a*(x-e)*Math.cos(o),i):Math.abs(this.sin_p12+1)<=O?(i.x=this.x0+this.a*(x+e)*Math.sin(o),i.y=this.y0+this.a*(x+e)*Math.cos(o),i):(S=this.sin_p12*s+this.cos_p12*n*Math.cos(o),E=Math.acos(S),_=E?E/Math.sin(E):1,i.x=this.x0+this.a*_*n*Math.sin(o),i.y=this.y0+this.a*_*(this.cos_p12*s-this.sin_p12*n*Math.cos(o)),i):(r=Re(this.es),l=Fe(this.es),c=Ue(this.es),h=ze(this.es),Math.abs(this.sin_p12-1)<=O?(m=this.a*at(r,l,c,h,x),u=this.a*at(r,l,c,h,e),i.x=this.x0+(m-u)*Math.sin(o),i.y=this.y0-(m-u)*Math.cos(o),i):Math.abs(this.sin_p12+1)<=O?(m=this.a*at(r,l,c,h,x),u=this.a*at(r,l,c,h,e),i.x=this.x0+(m+u)*Math.sin(o),i.y=this.y0+(m+u)*Math.cos(o),i):(d=s/n,C=he(this.a,this.e,this.sin_p12),p=he(this.a,this.e,s),A=Math.atan((1-this.es)*d+this.es*C*this.sin_p12/(p*n)),v=Math.atan2(Math.sin(o),this.cos_p12*Math.tan(A)-this.sin_p12*Math.cos(o)),v===0?T=Math.asin(this.cos_p12*Math.sin(A)-this.sin_p12*Math.cos(A)):Math.abs(Math.abs(v)-Math.PI)<=O?T=-Math.asin(this.cos_p12*Math.sin(A)-this.sin_p12*Math.cos(A)):T=Math.asin(Math.sin(o)*Math.cos(A)/Math.sin(v)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),w=this.e*this.cos_p12*Math.cos(v)/Math.sqrt(1-this.es),M=I*w,y=w*w,q=T*T,tt=q*T,L=tt*T,V=L*T,E=C*T*(1-q*y*(1-y)/6+tt/8*M*(1-2*y)+L/120*(y*(4-7*y)-3*I*I*(1-7*y))-V/48*M),i.x=this.x0+E*Math.sin(v),i.y=this.y0+E*Math.cos(v),i))}function ph(i){i.x-=this.x0,i.y-=this.y0;var t,e,s,n,o,r,l,c,h,m,u,d,C,p,A,v,I,w,M,y,E,_,S,T;return this.sphere?(t=Math.sqrt(i.x*i.x+i.y*i.y),t>2*x*this.a?void 0:(e=t/this.a,s=Math.sin(e),n=Math.cos(e),o=this.long0,Math.abs(t)<=O?r=this.lat0:(r=Vt(n*this.sin_p12+i.y*s*this.cos_p12/t),l=Math.abs(this.lat0)-x,Math.abs(l)<=O?this.lat0>=0?o=k(this.long0+Math.atan2(i.x,-i.y)):o=k(this.long0-Math.atan2(-i.x,i.y)):o=k(this.long0+Math.atan2(i.x*s,t*this.cos_p12*n-i.y*this.sin_p12*s))),i.x=o,i.y=r,i)):(c=Re(this.es),h=Fe(this.es),m=Ue(this.es),u=ze(this.es),Math.abs(this.sin_p12-1)<=O?(d=this.a*at(c,h,m,u,x),t=Math.sqrt(i.x*i.x+i.y*i.y),C=d-t,r=Ci(C/this.a,c,h,m,u),o=k(this.long0+Math.atan2(i.x,-1*i.y)),i.x=o,i.y=r,i):Math.abs(this.sin_p12+1)<=O?(d=this.a*at(c,h,m,u,x),t=Math.sqrt(i.x*i.x+i.y*i.y),C=t-d,r=Ci(C/this.a,c,h,m,u),o=k(this.long0+Math.atan2(i.x,i.y)),i.x=o,i.y=r,i):(t=Math.sqrt(i.x*i.x+i.y*i.y),v=Math.atan2(i.x,i.y),p=he(this.a,this.e,this.sin_p12),I=Math.cos(v),w=this.e*this.cos_p12*I,M=-w*w/(1-this.es),y=3*this.es*(1-M)*this.sin_p12*this.cos_p12*I/(1-this.es),E=t/p,_=E-M*(1+M)*Math.pow(E,3)/6-y*(1+3*M)*Math.pow(E,4)/24,S=1-M*_*_/2-E*_*_*_/6,A=Math.asin(this.sin_p12*Math.cos(_)+this.cos_p12*Math.sin(_)*I),o=k(this.long0+Math.asin(Math.sin(v)*Math.sin(_)/Math.cos(A))),T=Math.sin(A),r=Math.atan2((T-this.es*S*this.sin_p12)*Math.tan(A),T*(1-this.es)),i.x=o,i.y=r,i))}var Ah=["Azimuthal_Equidistant","aeqd"];const Ch={init:dh,forward:mh,inverse:ph,names:Ah};function fh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function Ih(i){var t,e,s,n,o,r,l,c,h=i.x,m=i.y;return s=k(h-this.long0),t=Math.sin(m),e=Math.cos(m),n=Math.cos(s),r=this.sin_p14*t+this.cos_p14*e*n,o=1,(r>0||Math.abs(r)<=O)&&(l=this.a*o*e*Math.sin(s),c=this.y0+this.a*o*(this.cos_p14*t-this.sin_p14*e*n)),i.x=l,i.y=c,i}function vh(i){var t,e,s,n,o,r,l;return i.x-=this.x0,i.y-=this.y0,t=Math.sqrt(i.x*i.x+i.y*i.y),e=Vt(t/this.a),s=Math.sin(e),n=Math.cos(e),r=this.long0,Math.abs(t)<=O?(l=this.lat0,i.x=r,i.y=l,i):(l=Vt(n*this.sin_p14+i.y*s*this.cos_p14/t),o=Math.abs(this.lat0)-x,Math.abs(o)<=O?(this.lat0>=0?r=k(this.long0+Math.atan2(i.x,-i.y)):r=k(this.long0-Math.atan2(-i.x,i.y)),i.x=r,i.y=l,i):(r=k(this.long0+Math.atan2(i.x*s,t*this.cos_p14*n-i.y*this.sin_p14*s)),i.x=r,i.y=l,i))}var yh=["ortho"];const bh={init:fh,forward:Ih,inverse:vh,names:yh};var W={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},U={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function Mh(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=x-F/2?this.face=W.TOP:this.lat0<=-(x-F/2)?this.face=W.BOTTOM:Math.abs(this.long0)<=F?this.face=W.FRONT:Math.abs(this.long0)<=x+F?this.face=this.long0>0?W.RIGHT:W.LEFT:this.face=W.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function wh(i){var t={x:0,y:0},e,s,n,o,r,l,c={value:0};if(i.x-=this.long0,this.es!==0?e=Math.atan(this.one_minus_f_squared*Math.tan(i.y)):e=i.y,s=i.x,this.face===W.TOP)o=x-e,s>=F&&s<=x+F?(c.value=U.AREA_0,n=s-x):s>x+F||s<=-(x+F)?(c.value=U.AREA_1,n=s>0?s-X:s+X):s>-(x+F)&&s<=-F?(c.value=U.AREA_2,n=s+x):(c.value=U.AREA_3,n=s);else if(this.face===W.BOTTOM)o=x+e,s>=F&&s<=x+F?(c.value=U.AREA_0,n=-s+x):s<F&&s>=-F?(c.value=U.AREA_1,n=-s):s<-F&&s>=-(x+F)?(c.value=U.AREA_2,n=-s-x):(c.value=U.AREA_3,n=s>0?-s+X:-s-X);else{var h,m,u,d,C,p,A;this.face===W.RIGHT?s=re(s,+x):this.face===W.BACK?s=re(s,+X):this.face===W.LEFT&&(s=re(s,-x)),d=Math.sin(e),C=Math.cos(e),p=Math.sin(s),A=Math.cos(s),h=C*A,m=C*p,u=d,this.face===W.FRONT?(o=Math.acos(h),n=qe(o,u,m,c)):this.face===W.RIGHT?(o=Math.acos(m),n=qe(o,u,-h,c)):this.face===W.BACK?(o=Math.acos(-h),n=qe(o,u,-m,c)):this.face===W.LEFT?(o=Math.acos(-m),n=qe(o,u,h,c)):(o=n=0,c.value=U.AREA_0)}return l=Math.atan(12/X*(n+Math.acos(Math.sin(n)*Math.cos(F))-x)),r=Math.sqrt((1-Math.cos(o))/(Math.cos(l)*Math.cos(l))/(1-Math.cos(Math.atan(1/Math.cos(n))))),c.value===U.AREA_1?l+=x:c.value===U.AREA_2?l+=X:c.value===U.AREA_3&&(l+=1.5*X),t.x=r*Math.cos(l),t.y=r*Math.sin(l),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,i.x=t.x,i.y=t.y,i}function Eh(i){var t={lam:0,phi:0},e,s,n,o,r,l,c,h,m,u={value:0};if(i.x=(i.x-this.x0)/this.a,i.y=(i.y-this.y0)/this.a,s=Math.atan(Math.sqrt(i.x*i.x+i.y*i.y)),e=Math.atan2(i.y,i.x),i.x>=0&&i.x>=Math.abs(i.y)?u.value=U.AREA_0:i.y>=0&&i.y>=Math.abs(i.x)?(u.value=U.AREA_1,e-=x):i.x<0&&-i.x>=Math.abs(i.y)?(u.value=U.AREA_2,e=e<0?e+X:e-X):(u.value=U.AREA_3,e+=x),m=X/12*Math.tan(e),r=Math.sin(m)/(Math.cos(m)-1/Math.sqrt(2)),l=Math.atan(r),n=Math.cos(e),o=Math.tan(s),c=1-n*n*o*o*(1-Math.cos(Math.atan(1/Math.cos(l)))),c<-1?c=-1:c>1&&(c=1),this.face===W.TOP)h=Math.acos(c),t.phi=x-h,u.value===U.AREA_0?t.lam=l+x:u.value===U.AREA_1?t.lam=l<0?l+X:l-X:u.value===U.AREA_2?t.lam=l-x:t.lam=l;else if(this.face===W.BOTTOM)h=Math.acos(c),t.phi=h-x,u.value===U.AREA_0?t.lam=-l+x:u.value===U.AREA_1?t.lam=-l:u.value===U.AREA_2?t.lam=-l-x:t.lam=l<0?-l-X:-l+X;else{var d,C,p;d=c,m=d*d,m>=1?p=0:p=Math.sqrt(1-m)*Math.sin(l),m+=p*p,m>=1?C=0:C=Math.sqrt(1-m),u.value===U.AREA_1?(m=C,C=-p,p=m):u.value===U.AREA_2?(C=-C,p=-p):u.value===U.AREA_3&&(m=C,C=p,p=-m),this.face===W.RIGHT?(m=d,d=-C,C=m):this.face===W.BACK?(d=-d,C=-C):this.face===W.LEFT&&(m=d,d=C,C=-m),t.phi=Math.acos(-p)-x,t.lam=Math.atan2(C,d),this.face===W.RIGHT?t.lam=re(t.lam,-x):this.face===W.BACK?t.lam=re(t.lam,-X):this.face===W.LEFT&&(t.lam=re(t.lam,+x))}if(this.es!==0){var A,v,I;A=t.phi<0?1:0,v=Math.tan(t.phi),I=this.b/Math.sqrt(v*v+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-I*I)/(this.one_minus_f*I)),A&&(t.phi=-t.phi)}return t.lam+=this.long0,i.x=t.lam,i.y=t.phi,i}function qe(i,t,e,s){var n;return i<O?(s.value=U.AREA_0,n=0):(n=Math.atan2(t,e),Math.abs(n)<=F?s.value=U.AREA_0:n>F&&n<=x+F?(s.value=U.AREA_1,n-=x):n>x+F||n<=-(x+F)?(s.value=U.AREA_2,n=n>=0?n-X:n+X):(s.value=U.AREA_3,n+=x)),n}function re(i,t){var e=i+t;return e<-X?e+=Le:e>+X&&(e-=Le),e}var _h=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const xh={init:Mh,forward:wh,inverse:Eh,names:_h};var $i=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],Oe=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Wn=.8487,qn=1.3523,Yn=_t/5,Oh=1/Yn,ae=18,fi=function(i,t){return i[0]+t*(i[1]+t*(i[2]+t*i[3]))},kh=function(i,t){return i[1]+t*(2*i[2]+t*3*i[3])};function Sh(i,t,e,s){for(var n=t;s;--s){var o=i(n);if(n-=o,Math.abs(o)<e)break}return n}function Nh(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function Ph(i){var t=k(i.x-this.long0),e=Math.abs(i.y),s=Math.floor(e*Yn);s<0?s=0:s>=ae&&(s=ae-1),e=_t*(e-Oh*s);var n={x:fi($i[s],e)*t,y:fi(Oe[s],e)};return i.y<0&&(n.y=-n.y),n.x=n.x*this.a*Wn+this.x0,n.y=n.y*this.a*qn+this.y0,n}function Lh(i){var t={x:(i.x-this.x0)/(this.a*Wn),y:Math.abs(i.y-this.y0)/(this.a*qn)};if(t.y>=1)t.x/=$i[ae][0],t.y=i.y<0?-x:x;else{var e=Math.floor(t.y*ae);for(e<0?e=0:e>=ae&&(e=ae-1);;)if(Oe[e][0]>t.y)--e;else if(Oe[e+1][0]<=t.y)++e;else break;var s=Oe[e],n=5*(t.y-s[0])/(Oe[e+1][0]-s[0]);n=Sh(function(o){return(fi(s,o)-t.y)/kh(s,o)},n,O,100),t.x/=fi($i[e],n),t.y=(5*e+n)*$,i.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var Th=["Robinson","robin"];const Bh={init:Nh,forward:Ph,inverse:Lh,names:Th};function Dh(){this.name="geocent"}function Vh(i){var t=Ln(i,this.es,this.a);return t}function Rh(i){var t=Tn(i,this.es,this.a,this.b);return t}var Fh=["Geocentric","geocentric","geocent","Geocent"];const Uh={init:Dh,forward:Vh,inverse:Rh,names:Fh};var it={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},Ae={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function zh(){if(Object.keys(Ae).forEach((function(e){if(typeof this[e]>"u")this[e]=Ae[e].def;else{if(Ae[e].num&&isNaN(this[e]))throw new Error("Invalid parameter value, must be numeric "+e+" = "+this[e]);Ae[e].num&&(this[e]=parseFloat(this[e]))}Ae[e].degrees&&(this[e]=this[e]*$)}).bind(this)),Math.abs(Math.abs(this.lat0)-x)<O?this.mode=this.lat0<0?it.S_POLE:it.N_POLE:Math.abs(this.lat0)<O?this.mode=it.EQUIT:(this.mode=it.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var i=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(i),this.sw=Math.sin(i)}function Gh(i){i.x-=this.long0;var t=Math.sin(i.y),e=Math.cos(i.y),s=Math.cos(i.x),n,o;switch(this.mode){case it.OBLIQ:o=this.sinph0*t+this.cosph0*e*s;break;case it.EQUIT:o=e*s;break;case it.S_POLE:o=-t;break;case it.N_POLE:o=t;break}switch(o=this.pn1/(this.p-o),n=o*e*Math.sin(i.x),this.mode){case it.OBLIQ:o*=this.cosph0*t-this.sinph0*e*s;break;case it.EQUIT:o*=t;break;case it.N_POLE:o*=-(e*s);break;case it.S_POLE:o*=e*s;break}var r,l;return r=o*this.cg+n*this.sg,l=1/(r*this.sw*this.h1+this.cw),n=(n*this.cg-o*this.sg)*this.cw*l,o=r*l,i.x=n*this.a,i.y=o*this.a,i}function jh(i){i.x/=this.a,i.y/=this.a;var t={x:i.x,y:i.y},e,s,n;n=1/(this.pn1-i.y*this.sw),e=this.pn1*i.x*n,s=this.pn1*i.y*this.cw*n,i.x=e*this.cg+s*this.sg,i.y=s*this.cg-e*this.sg;var o=vt(i.x,i.y);if(Math.abs(o)<O)t.x=0,t.y=i.y;else{var r,l;switch(l=1-o*o*this.pfact,l=(this.p-Math.sqrt(l))/(this.pn1/o+o/this.pn1),r=Math.sqrt(1-l*l),this.mode){case it.OBLIQ:t.y=Math.asin(r*this.sinph0+i.y*l*this.cosph0/o),i.y=(r-this.sinph0*Math.sin(t.y))*o,i.x*=l*this.cosph0;break;case it.EQUIT:t.y=Math.asin(i.y*l/o),i.y=r*o,i.x*=l;break;case it.N_POLE:t.y=Math.asin(r),i.y=-i.y;break;case it.S_POLE:t.y=-Math.asin(r);break}t.x=Math.atan2(i.x,i.y)}return i.x=t.x+this.long0,i.y=t.y,i}var Hh=["Tilted_Perspective","tpers"];const Zh={init:zh,forward:Gh,inverse:jh,names:Hh};function Wh(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var i=1-this.es,t=1/i;this.radius_p=Math.sqrt(i),this.radius_p2=i,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function qh(i){var t=i.x,e=i.y,s,n,o,r;if(t=t-this.long0,this.shape==="ellipse"){e=Math.atan(this.radius_p2*Math.tan(e));var l=this.radius_p/vt(this.radius_p*Math.cos(e),Math.sin(e));if(n=l*Math.cos(t)*Math.cos(e),o=l*Math.sin(t)*Math.cos(e),r=l*Math.sin(e),(this.radius_g-n)*n-o*o-r*r*this.radius_p_inv2<0)return i.x=Number.NaN,i.y=Number.NaN,i;s=this.radius_g-n,this.flip_axis?(i.x=this.radius_g_1*Math.atan(o/vt(r,s)),i.y=this.radius_g_1*Math.atan(r/s)):(i.x=this.radius_g_1*Math.atan(o/s),i.y=this.radius_g_1*Math.atan(r/vt(o,s)))}else this.shape==="sphere"&&(s=Math.cos(e),n=Math.cos(t)*s,o=Math.sin(t)*s,r=Math.sin(e),s=this.radius_g-n,this.flip_axis?(i.x=this.radius_g_1*Math.atan(o/vt(r,s)),i.y=this.radius_g_1*Math.atan(r/s)):(i.x=this.radius_g_1*Math.atan(o/s),i.y=this.radius_g_1*Math.atan(r/vt(o,s))));return i.x=i.x*this.a,i.y=i.y*this.a,i}function Yh(i){var t=-1,e=0,s=0,n,o,r,l;if(i.x=i.x/this.a,i.y=i.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(i.y/this.radius_g_1),e=Math.tan(i.x/this.radius_g_1)*vt(1,s)):(e=Math.tan(i.x/this.radius_g_1),s=Math.tan(i.y/this.radius_g_1)*vt(1,e));var c=s/this.radius_p;if(n=e*e+c*c+t*t,o=2*this.radius_g*t,r=o*o-4*n*this.C,r<0)return i.x=Number.NaN,i.y=Number.NaN,i;l=(-o-Math.sqrt(r))/(2*n),t=this.radius_g+l*t,e*=l,s*=l,i.x=Math.atan2(e,t),i.y=Math.atan(s*Math.cos(i.x)/t),i.y=Math.atan(this.radius_p_inv2*Math.tan(i.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(i.y/this.radius_g_1),e=Math.tan(i.x/this.radius_g_1)*Math.sqrt(1+s*s)):(e=Math.tan(i.x/this.radius_g_1),s=Math.tan(i.y/this.radius_g_1)*Math.sqrt(1+e*e)),n=e*e+s*s+t*t,o=2*this.radius_g*t,r=o*o-4*n*this.C,r<0)return i.x=Number.NaN,i.y=Number.NaN,i;l=(-o-Math.sqrt(r))/(2*n),t=this.radius_g+l*t,e*=l,s*=l,i.x=Math.atan2(e,t),i.y=Math.atan(s*Math.cos(i.x)/t)}return i.x=i.x+this.long0,i}var Xh=["Geostationary Satellite View","Geostationary_Satellite","geos"];const Jh={init:Wh,forward:qh,inverse:Yh,names:Xh};function Qh(i){i.Proj.projections.add(ai),i.Proj.projections.add(oi),i.Proj.projections.add(nl),i.Proj.projections.add(dl),i.Proj.projections.add(Il),i.Proj.projections.add(wl),i.Proj.projections.add(Sl),i.Proj.projections.add(Bl),i.Proj.projections.add(Ul),i.Proj.projections.add(Zl),i.Proj.projections.add(lc),i.Proj.projections.add(mc),i.Proj.projections.add(Ic),i.Proj.projections.add(Ec),i.Proj.projections.add(Sc),i.Proj.projections.add(Bc),i.Proj.projections.add(Uc),i.Proj.projections.add(Zc),i.Proj.projections.add(Qc),i.Proj.projections.add(ih),i.Proj.projections.add(rh),i.Proj.projections.add(uh),i.Proj.projections.add(Ch),i.Proj.projections.add(bh),i.Proj.projections.add(xh),i.Proj.projections.add(Bh),i.Proj.projections.add(Uh),i.Proj.projections.add(Zh),i.Proj.projections.add(Jh)}dt.defaultDatum="WGS84";dt.Proj=xt;dt.WGS84=new dt.Proj("WGS84");dt.Point=ce;dt.toPoint=Bn;dt.defs=nt;dt.nadgrid=or;dt.transform=Ai;dt.mgrs=br;dt.version="__VERSION__";Qh(dt);async function Kh(i){let t=null;const e=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of e){const n=i.match(s);if(n!==null){t=n[1];break}}if(t!=null){const s=`EPSG:${t}`;if(dt.defs(s)===void 0){const n=await g.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);os.registerCRS(s,n)}return s}throw new Error(`Could not find projection for ${i}`)}const us={loadProjCrsIfNeeded:Kh};async function $h(i,t,e,s,n){const o=new g.Clock;o.start();const r=[],l=new Map;for(const c of i){const h=c.getGeometry(),m=h==null?void 0:h.getType();if(h==null||m==null)continue;const u=[],d=h.getFlatCoordinates(),C=h.getStride();if(!(C>=3&&d[2]!=null&&d[2]!==n)){for(let p=0;p<d.length;p+=C){const A=new ct(t,d[p+0],d[p+1],C>=3?d[p+2]:n);u.push(A),r.push(A)}l.set(c.ol_uid,u)}}console.debug(`Fetching altitudes for ${r.length} coordinates from ${i.length} features...`),await e(r);for(const c of i){const h=l.get(c.ol_uid),m=c.getGeometry();if(!(m==null||h==null))switch(m.getType()){case"LineString":case"MultiPoint":{const u=m,d=u.getCoordinates();for(let C=0;C<d.length;C+=1)d[C][2]=h[C].values[2]+s;u.setCoordinates(d);break}case"MultiLineString":case"Polygon":{const u=m,d=u.getCoordinates();let C=0;for(let p=0;p<d.length;p+=1)for(let A=0;A<d[p].length;A+=1)d[p][A][2]=h[C].values[2]+s,C+=1;u.setCoordinates(d);break}case"MultiPolygon":{const u=m,d=u.getCoordinates();let C=0;for(let p=0;p<d.length;p+=1)for(let A=0;A<d[p].length;A+=1)for(let v=0;v<d[p][A].length;v+=1)d[p][A][v][2]=h[C].values[2]+s,C+=1;u.setCoordinates(d);break}case"Point":{const u=m,d=u.getCoordinates();d[2]=h[0].values[2]+s,u.setCoordinates(d);break}}}console.debug(`Fetched all missing altitudes in ${o.getElapsedTime()}s`),o.stop()}function tg(i,t,e){for(const s of i){const n=s.getGeometry();if(n==null)continue;const o=n.getStride(),r=n.getFlatCoordinates();if(!(o>=3&&r[2]!=null&&r[2]!==e))switch(n.getType()){case"LineString":case"MultiPoint":{const l=n,c=l.getCoordinates();for(let h=0;h<c.length;h+=1)c[h][2]=t;l.setCoordinates(c);break}case"MultiLineString":case"Polygon":{const l=n,c=l.getCoordinates();for(let h=0;h<c.length;h+=1)for(let m=0;m<c[h].length;m+=1)c[h][m][2]=t;l.setCoordinates(c);break}case"MultiPolygon":{const l=n,c=l.getCoordinates();for(let h=0;h<c.length;h+=1)for(let m=0;m<c[h].length;m+=1)for(let u=0;u<c[h][m].length;u+=1)c[h][m][u][2]=t;l.setCoordinates(c);break}case"Point":{const l=n,c=l.getCoordinates();c[2]=t,l.setCoordinates(c);break}}}}async function eg(i,t,e,s){const n=await us.loadProjCrsIfNeeded(e??"EPSG:4326");return t.readFeatures(i,{dataProjection:n,featureProjection:s})}function ig(i,t,e,s){return Xn(t.readFeatures(i,{dataProjection:e,featureProjection:s}))}function sg(i,t){const e=new g.Group,s=new La,n=i.map(o=>{const r=o.getGeometry();if(r!=null){const l=r.getType();let c;switch(l){case"LineString":c=s.build(r);break;case"MultiLineString":c=s.build(r);break;case"MultiPoint":c=s.build(r);break;case"MultiPolygon":c=s.build(r,t);break;case"Point":c=s.build(r);break;case"Polygon":c=s.build(r,t);break;default:console.warn(`Unsupported type ${l}`),c=null}if(c)for(const[h,m]of Object.entries(o.getProperties()))h!=="geometry"&&(c.userData[h]=m);return c}});for(const o of n)o!=null&&e.add(o);return e}function Xn(i){return i.filter(t=>{var s;if("getType"in t)return!1;const e=(s=t.getGeometry())==null?void 0:s.getType();return!(e==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(e))})}const ge={fetchZCoordinates:$h,fillZCoordinates:tg,readFeatures:eg,readSimpleFeatures:ig,toMeshes:sg,toSimpleFeatures:Xn},ng=new Sa,ag=new Na,og=new Pa,At={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class rg{constructor(t){f(this,"elevation");f(this,"options");this.options=t,this.elevation=t.elevation}context(){return g.Fetcher.getContext(this.options.url)}async load(t){const e=await g.Fetcher.fetchJson(this.options.url),s=gg(e);return await ms(t,s,this.options)}}class ds{constructor(t,e){f(this,"elevation");f(this,"format");f(this,"noDataValue");f(this,"options");this.format=t,this.options=e,this.elevation=e.elevation,this.noDataValue=e.noDataValue}context(){return g.Fetcher.getContext(this.options.url)}async load(t){const e=await g.Fetcher.fetchText(this.options.url);return await ug(t,e,this.format,this.options)}}class lg extends ds{constructor(t){super(ag,t)}}class cg extends ds{constructor(t){super(og,t)}}async function ms(i,t,e){const s=await us.loadProjCrsIfNeeded(e.dataProjection??At.dataProjection),n=t.flatMap(l=>ng.readFeatures(l,{dataProjection:s,featureProjection:e.featureProjection})),o=ge.toSimpleFeatures(n);if(e.fetchElevation??At.fetchElevation){const l=e.fetchElevationFast??At.fetchElevationFast,c=e.fetchElevationOffset??At.fetchElevationOffset,h=e.noDataValue??At.noDataValue;await ge.fetchZCoordinates(o,e.featureProjection,bn(i,l,h),c,h)}return o}function hg(i,t,e=At.elevation,s=At.noDataValue){const n=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??e;return ge.fillZCoordinates(i,n,s),ge.toMeshes(i,t)}function gg(i){switch(i.type){case"Feature":return[i];case"FeatureCollection":return i.features;case"GeometryCollection":return i.geometries.map(e=>({geometry:e,properties:{},type:"Feature"}));default:return[{geometry:i,properties:{},type:"Feature"}]}}async function ug(i,t,e,s){const n=ge.readSimpleFeatures(t,e,s.dataProjection??At.dataProjection,s.featureProjection);if(s.fetchElevation??At.fetchElevation){const r=s.fetchElevationFast??At.fetchElevationFast,l=s.fetchElevationOffset??At.fetchElevationOffset,c=s.noDataValue??At.noDataValue;await ge.fetchZCoordinates(n,s.featureProjection,bn(i,r,c),l,c)}return n}class dg extends pn{constructor(e){super(new g.Group);f(this,"sources");this.sources=Array.isArray(e)?e:[e]}async preprocess(){for(const e of this.sources){const s=await e.load(this.instance),n=hg(s,{elevation:e.elevation,fill:{color:vs.DEFAULT_SURFACE_COLOR},stroke:{color:vs.DEFAULT_LINE_COLOR}},e.elevation,e.noDataValue);this.object3d.add(n),this.onObjectCreated(n);const o=e.context();g.fillObject3DUserData(n,{filename:o.filename})}this.notifyChange(this.object3d)}}async function mg(i,t){const e=await as.load(i,ka.GeoPackageLoader,{fetch:g.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[n,o]of Object.entries(e.tables))for(const r of o.table.features)r.properties||(r.properties={}),r.properties.table=n,s.push(r);return s}class pg{constructor(t){f(this,"elevation");f(this,"options");this.options=t,this.elevation=t.elevation}context(){return g.Fetcher.getContext(this.options.url)}async load(t){const e=await mg(this.options.url,this.options.featureProjection);return await ms(t,e,{...this.options,dataProjection:this.options.featureProjection})}}async function Ag(i,t){return(await as.load(i,Ta.ShapefileLoader,{fetch:g.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class Cg{constructor(t){f(this,"elevation");f(this,"options");this.options=t,this.elevation=t.elevation}context(){return g.Fetcher.getContext(this.options.url)}async load(t){const e=await Ag(this.options.url,this.options.featureProjection);return await ms(t,e,{...this.options,dataProjection:this.options.featureProjection})}}class ts extends g.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new g.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(e){e.element instanceof e.element.ownerDocument.defaultView.Element&&e.element.parentNode!==null&&e.element.remove()})})}copy(t,e){return super.copy(t,e),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new g.Vector3;new g.Matrix4;new g.Matrix4;new g.Vector3;new g.Vector3;const Tt="#377c5f",fg="yellow",Ig="#ffd500",vg="#73d1bd",ri=5,yg=new g.Vector2,Jn=new g.Color(Tt),bg=new g.Color,Ti=bg.copyLinearToSRGB(Jn),Hs=`#${new g.Color(Ba.getContrastColor(Jn)).getHexString()}`,Bi=12,Mg="bold",Di=[];class wg extends pn{constructor(e,s){super(new g.Group);f(this,"sources");f(this,"_labels");f(this,"_styleCallback");f(this,"_textCallback");this.sources=Array.isArray(e)?e:[e],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const e=this._labels.map(n=>n.position);return new g.Box3().setFromPoints(e)}pick(e,s){const n=this.instance.canvasToNormalizedCoords(e,yg),o=new g.Raycaster;o.setFromCamera(n,this.instance.view.camera);const r=this.pickLabels(o);return r?[{distance:r.position.distanceTo(o.ray.origin),entity:this,isLabelPickResult:!0,object:r,point:r.position}]:[]}updateOpacity(){const e=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=e)}updateVisibility(){this.object3d.traverse(e=>{e.visible=this.visible})}async preprocess(){for(const e of this.sources){const s=await e.load(this.instance),n=new g.Group,o=e.elevation??0,r=c=>new g.Vector3(c[0],c[1],c[2]??o);for(const c of s){const h=c.getGeometry();if(h!=null){const m=h.getType(),u=[];switch(m){case"LineString":case"MultiPoint":u.push(...h.getCoordinates());break;case"MultiLineString":case"Polygon":u.push(...h.getCoordinates()[0]);break;case"MultiPolygon":u.push(...h.getCoordinates()[0][0]);break;case"Point":u.push(h.getCoordinates());break}if(u.length>0){const d=u.map(p=>this.createLabel(r(p),c)),C=new g.Group;d.forEach(p=>{C.add(p),this._labels.push(p)});for(const[p,A]of Object.entries(c.getProperties()))p!=="geometry"&&(C.userData[p]=A);n.add(C)}}}this.object3d.add(n),this.onObjectCreated(n);const l=e.context();g.fillObject3DUserData(n,{filename:l.filename})}this.notifyChange(this.object3d)}createLabel(e,s){const n=document.createElement("div"),o=document.createElement("span");this.updateStyle(o,s),o.innerText=this._textCallback(s,e);const r=document.createElement("div");n.appendChild(r),r.appendChild(o);const l=new ts(n);return l.position.copy(e),l.updateMatrix(),l.updateMatrixWorld(!0),n.addEventListener("mouseover",()=>l.userData.hover=!0),n.addEventListener("mouseleave",()=>l.userData.hover=!1),l}pickLabels(e){let s=null;return this._labels.forEach(n=>{s==null&&(Di.length=0,this.raycastLabel(n,e,Di),Di.length>0&&(s=n))}),s}raycastLabel(e,s,n){e.userData.hover===!0&&n.push({distance:e.position.distanceTo(s.ray.origin),object:e,point:e.position})}updateStyle(e,s){e.style.backgroundColor=`rgb(${Ti.r*255} ${Ti.g*255} ${Ti.b*255})`,e.style.borderWidth="1px",e.style.borderStyle="solid",e.style.borderColor=Hs,e.style.borderRadius=`${g.MathUtils.clamp(Bi-4,5,10)}px`,e.style.color=Hs;const n=g.MathUtils.clamp(Math.round(Bi/4),2,10);e.style.padding=`${n}px ${n}px ${n}px ${n}px`,e.style.fontSize=`${Bi}px`,e.style.fontWeight=Mg,e.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(e,s)}}class Eg extends ut{constructor(e){super({color:Tt,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:ri});f(this,"source");this.source=e}async preprocess(){const s=(await this.source.load(this.instance)).at(0),n=s==null?void 0:s.getGeometry();if(s!=null&&n!=null){const o=this.source.elevation??0,r=h=>new g.Vector3(h[0],h[1],h[2]??o);switch(n.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(n.getCoordinates().map(r));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(n.getCoordinates()[0].map(r));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(n.getCoordinates().map(r));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(n.getCoordinates()[0][0].map(r));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([r(n.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(n.getCoordinates()[0].map(r));break;default:throw new Error("could not import shape from given geometry: "+n.getType())}const c=this.source.context();g.fillObject3DUserData(this,{filename:c.filename});for(const[h,m]of Object.entries(s.getProperties()))h!=="geometry"&&(this.userData[h]=m)}this.notifyChange(this.object3d)}}const _g=i=>{const{dataset:t,instance:e}=i,s=t.config,n=Array.isArray(s.source)?s.source:[s.source],o=[],r=s.rendering??"mesh";let l;for(const c of n){const h={dataProjection:c.dataProjection??t.get("dataProjection"),elevation:c.elevation??t.get("elevation"),featureProjection:e.referenceCrs,fetchElevation:c.fetchElevation??t.get("fetchElevation"),fetchElevationFast:c.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:c.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:c.noDataValue??t.get("noDataValue"),url:c.url};switch(c.type){case"geojson":o.push(new rg({...h}));break;case"geopackage":o.push(new pg({...h}));break;case"gpx":o.push(new lg({...h}));break;case"kml":o.push(new cg({...h}));break;case"ol":o.push(new ds(c.format,{...h}));break;case"shapefile":o.push(new Cg({...h}));break;default:return c}}switch(r){case"label":l=new wg(o,s);break;case"mesh":l=new dg(o);break;case"shape":l=new Eg(o[0]);break;default:return r}return Promise.resolve(l)},es={featureCollection:so,flatPointcloud:oo,pointcloud:co,tiledIfc:ro,vector:_g};async function xg(i,t){const e={dataset:t,instance:i},s=es[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const n=await s(e);return"dataset"in n.object3d.userData||(n.object3d.userData.dataset={}),n.object3d.userData.dataset.name=t.name,n}function Og(i,t){es[i]!=null&&console.warn(`replacing entity builder for dataset type '${i}'`),es[i]=t}const kg={getEntity:xg},Vi=i=>({name:i.filename,source:{type:"csv",url:i.file},type:"flatPointcloud",visible:!0}),Zs=i=>({name:i.filename,source:{type:i.filename.endsWith(".copc.laz")?"copc":"las",url:i.file},type:"flatPointcloud",visible:!0}),Sg=i=>{let t;switch(i.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${i.extension}' not supported`)}return{name:i.filename,source:{style:"default",type:t,url:i.file},type:"colorLayer",visible:!0}},Ng=i=>{let t;switch(i.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${i.extension}' not supported`)}return{name:i.filename,rendering:i.configuration.importedVectorDatasetRendering,source:{fetchElevation:i.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:i.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:i.file},type:"vector",visible:!0}},Ce=i=>i.configuration.importedVectorDatasetRendering==="overlay"?Sg(i):Ng(i),Ii={csv:Vi,dsv:Vi,"geo.json":Ce,geojson:Ce,gpkg:Ce,gpx:Ce,kml:Ce,las:Zs,laz:Zs,tsv:Vi};function Pg(i,t){if(typeof i=="string"){const s=g.getPublicFolderUrl(i),n=new URL(s),l=`${n.origin}${n.pathname}`.split("/").pop();if(l==null)throw new Error("Could not determine filename");const c=l.split(".").at(-1);if(c==null)throw new Error(`File has no extension: ${l}`);return{configuration:t,extension:c,file:i,filename:l}}if(i.name==null)throw new Error("Could not determine filename");const e=i.name.split(".").at(-1);if(e==null)throw new Error(`File has no extension: ${i.name}`);return{configuration:t,extension:e,file:i,filename:i.name}}async function Lg(i,t){const e=Pg(i,t),s=Tg(e.filename);if(s==null)throw new Error(`File format ${e.extension} not supported`);const n=s(e);return Promise.resolve(new g.Dataset(n))}function Tg(i){const t=Object.keys(Ii);for(const e of t)if(i.endsWith(e))return Ii[e];return null}function Bg(i,t){Ii[i]!=null&&console.warn(`replacing loader for file extension '.${i}'`),Ii[i]=t}const Dg={importFile:Lg},Qn=[];class Vg{constructor(){f(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){ut.isShapePickResult(t)&&this.highlightShape(t);for(const e of Qn){const s=e(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const e=t.entity;if(e.userData.highlightable){const s=new g.Color(e.color);e.color=e.userData.highlightColor,e.instance.notifyChange(),this._clearHighlight=()=>{e.color=s,e.instance.notifyChange()}}}}const Rg=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,style:"unit",unit:"meter",unitDisplay:"short"}),Fg=i=>`${Rg.format(i.length)}`,vi=class vi extends ut{constructor(){super({color:fg,lineLabelFormatter:Fg,showLineLabel:!0});f(this,"isMeasure3D",!0);this.userData.highlightable=!0,this.userData.highlightColor=Ig,this.depthTest=!0}get from(){return this.points[0]}get length(){return this.getLength()}get to(){return this.points[1]}clone(){return new vi().copy(this)}copy(e){return this.setPoints([e.from,e.to]),this}};f(vi,"isMeasure3D",e=>g.isObject(e)&&e.isMeasure3D);let De=vi;class Ug{constructor(t,e,s,n){f(this,"attributes");f(this,"name");f(this,"parent");f(this,"point");this.name=t,this.parent=e,this.attributes=s,this.point=n.clone()}}class zg{constructor(t,e,s){f(this,"_grid");f(this,"_instance");this._instance=t;const n=e.dimensions(),o=e.center();this._grid=new g.GridHelper(1,100),this._grid.name=s,this._grid.scale.set(n.x,1,n.y),this._grid.visible=!0,this._grid.position.set(o.x,o.y,-100),this._grid.rotateOnAxis(new g.Vector3(1,0,0),Math.PI/2);const r=this._grid.material;r.opacity=.5,r.transparent=!0,this._grid.updateMatrixWorld(),this._instance.add(this._grid)}get visible(){return this._grid.visible}set visible(t){this._grid.visible=t,this._instance.notifyChange(this._grid)}dispose(){this._instance.remove(this._grid),this._grid.geometry.dispose(),this._grid.material.dispose()}}async function Gg(i,t,e,s){const n=new ee.WMTSCapabilities,o=await g.Fetcher.fetchText(t),r=n.read(o),l=za.optionsFromCapabilities(r,{layer:i});if(l===null)throw new Error("Cannot resolve WMTS source from capabilities");return new $t.WMTS(l)}async function jg(i,t){const e=await wi(t.config);switch(t.type){case"colorLayer":{const s=t.config;return new le({...e,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}case"elevationLayer":{const s=t.config;return new Ne({...e,minmax:s.minmax})}case"maskLayer":{const s=t.config;return new ui({...e,maskMode:s.maskMode})}default:return t.type}}function Hg(i){if(i==null)return new Q.Style;switch(i){case"LineString":case"MultiLineString":return new Q.Style({stroke:new Q.Stroke({color:"yellow",width:1})});case"MultiPoint":case"Point":return new Q.Style({image:new Q.Circle({fill:new Q.Fill({color:"yellow"}),radius:3,stroke:new Q.Stroke({color:"black"})})});case"MultiPolygon":case"Polygon":return new Q.Style({fill:new Q.Fill({color:"rgba(50, 50, 200, 0.4)"}),stroke:new Q.Stroke({color:"black",width:1})});default:return console.warn(`Geometry ${i} not supported`),new Q.Style}}function Zg(i){if(i.imageFormat)switch(i.imageFormat){case"Bil":return new ys;case"GeoTIFF":return new Ra;case"MapboxTerrain":return new Fa;default:return i.imageFormat}switch(i.format){case"image/x-bil;bits=32":return new ys;default:return}}function Wg(i){return{colorSpace:i.colorSpace,flipY:i.flipY,is8bit:i.is8bit}}async function qg(i){const t=await wi(i);switch(i.type){case"color":{const e=i.options;return new le({...t,elevationRange:e.elevationRange})}case"elevation":{const e=i.options;return new Ne({...t,magFilter:e.magFilter,minFilter:e.minFilter,minmax:e.minmax??{max:5e3,min:0},noDataOptions:{replaceNoData:!1}})}case"mask":{const e=i.options;return new ui({...t,maskMode:e.maskMode})}default:return i.type}}async function wi(i){const t=g.getConfig(),e=await Kn(i.source),s="options"in i?i.options:i,n=g.getExtent(s.extent),o=s.interpretation?new Va(s.interpretation.mode,s.interpretation):void 0,r=s.colorMap??("type"in i&&i.type==="elevation"?t.basemap.colormap:void 0),l=r?g.getColorMap(r):void 0,c="resolution"in i.source?i.source.resolution:void 0;let h,m;return"type"in i&&i.type==="color"&&(h=i.options.minFilter,m=i.options.magFilter),{backgroundColor:s.backgroundColor,colorMap:l,extent:n,interpretation:o,magFilter:m,minFilter:h,name:i.name,noDataOptions:s.noDataOptions,preloadImages:s.preloadImages,resolutionFactor:c,showEmptyTextures:s.showEmptyTextures,showTileBorders:s.showTileBorders,source:e}}async function Yg(i,t){const e=await wi(i),s=i.options;return new le({extent:t,...e,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}async function Kn(i){const t=Wg(i);switch(i.type){case"bingmaps":return new Yt({...t,source:new $t.BingMaps(i)});case"cog":return new Ua({...t,crs:li(i,i.projection),url:g.getPublicFolderUrl(i.url)});case"geojson":return new Ee({...t,...await Ye(i,new ee.GeoJSON)});case"gpx":return new Ee({...t,...await Ye(i,new ee.GPX)});case"kml":return new Ee({...t,...await Ye(i,new ee.KML)});case"mvt":return new bs({...t,...Ws(i),format:new ee.MVT});case"osm":return new Yt({...t,source:new $t.OSM(i)});case"stadiamaps":return new Yt({...t,source:new $t.StadiaMaps(i)});case"vector":return new Ee({...t,...await Ye(i,i.format)});case"vector-tile":return new bs({...t,...Ws(i),format:i.format});case"wms":{const e=new $t.TileWMS({crossOrigin:"anonymous",params:{FORMAT:i.format,LAYERS:Array.isArray(i.layer)?i.layer:[i.layer]},projection:li(i),url:i.url});return new Yt({...t,...Ri(i,e)})}case"wmts":{const e=await Gg(i.layer,i.url,i.format,li(i));return new Yt({...t,...Ri(i,e)})}case"xyz":return new Yt({...t,...Ri(i,new $t.XYZ(i))});default:return i}}async function Xg(i){return i.url instanceof Blob?g.Fetcher.toDataURL(i.url):g.getPublicFolderUrl(i.url)}function li(i,t){return i.dataProjection??("projection"in i?i.projection:void 0)??t}function $n(i){if(typeof i=="string"){if(i==="default")return e=>{var s;return Hg((s=e.getGeometry())==null?void 0:s.getType())};const t=g.getDynamicStyles();return t[i]==null?(console.warn(`Could not find style ${i} in configuration`),new Q.Style({})):t[i]}return Jg(i)}function Ri(i,t){return{extent:g.getExtent(i.extent),format:Zg(i),httpTimeout:i.httpTimeout,noDataValue:i.noDataValue??i.nodata,retries:i.retries,source:t}}async function Ye(i,t){const e=await Xg(i);return{data:{format:t,url:e},dataProjection:li(i,"EPSG:4326"),style:$n(i.style)}}function Ws(i){return{backgroundColor:i.backgroundColor,style:$n(i.style),url:g.getPublicFolderUrl(i.url)}}function Jg(i){function t(n){if(n)return new Q.Stroke({color:n.color,width:n.width})}function e(n){if(n)return new Q.Fill({color:n.color})}function s(n){if(n)return new Q.Circle({fill:e(n.fill),radius:n.radius,stroke:t(n.stroke)})}return new Q.Style({fill:e(i.fill),image:s(i.point),stroke:t(i.stroke)})}const is={getDatasetLayer:jg,getLayer:qg,getLayerOptions:wi,getOverlay:Yg,getSource:Kn};class Qg{constructor(t,e,s){f(this,"_instance");f(this,"_plane");this._instance=t;const n=e.dimensions(),o=e.center();this._plane=new g.Mesh(new g.PlaneGeometry(n.x,n.y,1,1),new g.MeshBasicMaterial({color:"black"})),this._plane.name=s,this._plane.position.set(o.x,o.y,-101),this._plane.updateMatrixWorld(),this._instance.add(this._plane)}get visible(){return this._plane.visible}set visible(t){this._plane.visible=t,this._instance.notifyChange(this._plane)}dispose(){this._instance.remove(this._plane),this._plane.geometry.dispose(),this._plane.material.dispose()}}const de=St.defineStore("giro3d",()=>{const i=a.shallowRef(null),t=a.shallowRef(null),e=a.shallowRef(null);function s(){return i.value}function n(A){i.value=A}function o(){return t.value}function r(A){t.value=A}function l(){return e.value}function c(A){e.value=A}function h(){const A=g.getConfig(),v=A.camera;return Array.isArray(v.position)?(console.warn("Configuration is using an array for camera.position, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),new ct("EPSG:4326",v.position[0],v.position[1],v.altitude).as(A.default_crs)):("z"in v.position||console.warn("Configuration is using a 2D object for camera.position, you should switch to a 3D object; see https://gitlab.com/giro3d/piero/-/issues/38 for more information. This will be removed in release v24.7."),new ct(v.position.crs??A.default_crs,v.position.x,v.position.y,"z"in v.position?v.position.z:v.altitude).as(A.default_crs))}function m(){const A=g.getConfig();return"lookAt"in A.camera&&A.camera.lookAt?new ct(A.camera.lookAt.crs??A.default_crs,A.camera.lookAt.x,A.camera.lookAt.y,A.camera.lookAt.z).as(A.default_crs):d().center()}function u(){const A=g.getConfig();return{backgroundColor:A.basemap.backgroundColor??"white",backgroundOpacity:A.basemap.backgroundOpacity,colorimetry:A.basemap.colorimetry,contourLines:A.basemap.contourLines,elevationRange:A.basemap.elevationRange,graticule:A.basemap.graticule,lighting:A.basemap.lighting??{elevationLayersOnly:!0,enabled:!0},showOutline:A.basemap.showOutline,side:A.basemap.side??g.FrontSide,terrain:A.basemap.terrain}}function d(){const A=g.getConfig();if(A.basemap.extent)return g.getExtent(A.basemap.extent);console.warn("Configuration is using basemap.center/basemap.size, you should switch to extent. This will be removed in release v24.10.");const v=A.basemap.size,I=A.basemap.center;if(v==null||I==null)throw new Error("basemap.center and basemap.size need to be defined");let w;return Array.isArray(I)?(console.warn("Configuration is using an array for basemap.center, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),w=new ct("EPSG:4326",I[0],I[1],0)):w=new ct(I.crs??A.default_crs,I.x,I.y,0),w=w.as(A.default_crs),yi.fromCenterAndSize(A.default_crs,{x:w.x,y:w.y},v[0],v[1])}function C(){return g.getConfig().default_crs}function p(){var A;(A=i.value)==null||A.notifyChange()}return{getCRS:C,getDefaultBasemapExtent:d,getDefaultBasemapOptions:u,getDefaultCameraLookAt:m,getDefaultCameraPosition:h,getInspector:l,getMainView:s,getMinimapView:o,notifyChange:p,setInspector:c,setMainView:n,setMinimapView:r}});class Kg extends g.EventDispatcher{constructor(){super(...arguments);f(this,"canSetOpacity",!1);f(this,"name","Graticule");f(this,"uuid","graticule");f(this,"_enabled",!1);f(this,"_instance");f(this,"_map");f(this,"_visible",!1)}get displayed(){return this.enabled&&this.visible}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._updateVisible()}set instance(e){this._instance=e}set map(e){this._map=e}get visible(){return this._visible}set visible(e){this._visible=e,this._updateVisible()}_updateVisible(){this._map&&this._instance&&(this._map.graticule.enabled=this.displayed,this._instance.notifyChange(this._map))}}class ta extends g.EventDispatcher{constructor(e){super();f(this,"name");f(this,"uuid");f(this,"_opacity",1);f(this,"_visible",!1);this.name=e,this.uuid=g.MathUtils.generateUUID()}get opacity(){return this._opacity}set opacity(e){this._opacity=e,this.dispatchEvent({type:"opacity"})}get visible(){return this._visible}set visible(e){this._visible=e,this.dispatchEvent({type:"visible"})}delete(){this.dispatchEvent({type:"delete"})}}class $g extends ta{constructor({name:e,source:s,type:n,...o}){super(e);f(this,"options");f(this,"source");f(this,"type");f(this,"_loading");this._loading=!1,this.type=n,this.source=s,this.options=o}get isLoading(){return this._loading}set isLoading(e){this._loading=e}}class tu extends ta{constructor({name:e,source:s,...n}){super(e);f(this,"options");f(this,"source");f(this,"_loading");this._loading=!1,this.source=s,this.options=n}get isLoading(){return this._loading}set isLoading(e){this._loading=e}}function eu(){const i=g.getConfig(),t=[],e=i.basemap.layers;for(const s of e){const n=new $g(s);n.visible=s.visible,t.push(n)}return t}function iu(){const i=g.getConfig();if("graticule"in i.basemap&&i.basemap.graticule!==void 0){const t=new Kg;return typeof i.basemap.graticule=="boolean"?t.visible=i.basemap.graticule:t.visible=i.basemap.graticule.enabled??!0,a.shallowReactive(t)}}function su(){const i=g.getConfig(),t=[];for(const e of i.overlays){let s;"source"in e?s=e:(console.warn(`Configuration for ${e.name} is deprecated. This will be removed in release v24.7.`),s={name:e.name,source:{...e},visible:e.visible});const n=new tu(s);n.visible=e.visible,t.push(n)}return t}const ea=St.defineStore("layers",()=>{const i=a.shallowReactive(eu().map(p=>a.shallowReactive(p))),t=a.computed(()=>i.length),e=a.shallowReactive(su().map(p=>a.shallowReactive(p))),s=a.computed(()=>e.length),n=iu();function o(){return i}function r(){return n}function l(p,A){p.visible=A}function c(p,A){p.opacity=A}function h(){return e}function m(p,A){p.visible=A}function u(p,A){p.opacity=A}function d(p){const A=e.indexOf(p);if(A>0){const v=e[A-1];e[A-1]=p,e[A]=v}}function C(p){const A=e.indexOf(p);if(A<e.length-1){const v=e[A+1];e[A+1]=p,e[A]=v}}return{basemapCount:t,getBasemaps:o,getGraticuleLayer:r,getOverlays:h,moveOverlayDown:C,moveOverlayUp:d,overlayCount:s,setBasemapOpacity:c,setBasemapVisibility:l,setOverlayOpacity:u,setOverlayVisibility:m}}),nu=3e3,ss="grid",ns="plane",au=5e3;class ou extends g.EventDispatcher{constructor(e){super();f(this,"_baseLayers");f(this,"_basemap");f(this,"_boundOnAfterCameraUpdate");f(this,"_cameraStore",g.useCameraStore());f(this,"_datasetLayers");f(this,"_giro3dStore",de());f(this,"_grid");f(this,"_instance");f(this,"_layerStore",ea());f(this,"_overlays");f(this,"_plane");this._instance=e,this._baseLayers=new Map,this._overlays=new Map,this._datasetLayers=new Set;const s=this._giro3dStore.getDefaultBasemapExtent(),n=this._giro3dStore.getDefaultBasemapOptions();this._basemap=new gi({extent:s,...n}),this._basemap.terrain.segments=32,this._basemap.name="basemaps",this._instance.add(this._basemap),this._grid=new zg(this._instance,s,ss),this._plane=new Qg(this._instance,s,ns),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);for(const r of this._layerStore.getOverlays())r.visible&&this.loadOverlay(r);for(const r of this._layerStore.getBasemaps())r.visible&&this.loadBasemap(r);const o=this._layerStore.getGraticuleLayer();o&&(o.instance=this._instance,o.map=this._basemap),this._layerStore.$onAction(({after:r,args:l,name:c})=>{r(()=>{switch(c){case"moveOverlayDown":case"moveOverlayUp":this.onOverlayReordered(l[0]);break;case"setBasemapOpacity":this.onLayerOpacityChanged(l[0],l[1]);break;case"setBasemapVisibility":this.onLayerVisibilityChanged(l[0],l[1]);break;case"setOverlayOpacity":this.onOverlayOpacityChanged(l[0],l[1]);break;case"setOverlayVisibility":this.onOverlayVisibilityChanged(l[0],l[1]);break}})})}get extent(){return this._basemap.extent}async addDatasetLayer(e){this._datasetLayers.add(e.id),await this._basemap.addLayer(e),this.updateLayerOrdering()}dispose(){this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._instance.remove(this._basemap),this._plane.dispose(),this._grid.dispose(),this._basemap.dispose({disposeLayers:!0})}notify(e){this._instance.notifyChange(e)}removeBasemapLayer(e){this._datasetLayers.delete(e.id),this._basemap.removeLayer(e,{disposeLayer:!0}),this._instance.notifyChange(this._basemap)}setMapOpacity(e){this._basemap.opacity=e,this._instance.notifyChange(this._basemap)}async getLayer(e,s=!0){const n=this._baseLayers.get(e.uuid);return!n&&s?this.loadBasemap(e):n}async getOverlay(e,s=!0){const n=this._overlays.get(e.uuid);return!n&&s?this.loadOverlay(e):n}async loadBasemap(e){const s=await is.getLayer(e);return this._baseLayers.set(e.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=e.visible,le.isColorLayer(s)&&(s.opacity=e.opacity),Ne.isElevationLayer(s)&&(s.addEventListener("visible-property-changed",()=>{this._basemap.visible=s.visible,this._instance.notifyChange(this._basemap)}),this._basemap.visible=s.visible),this._instance.notifyChange(this._basemap),s}async loadOverlay(e){const s=await is.getOverlay(e,this.extent);return this._overlays.set(e.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=e.visible,s.opacity=e.opacity,this._instance.notifyChange(this._basemap),s}onAfterCameraUpdate(){const e=this._cameraStore.getCamera3dPosition(),s=this._grid.visible,n=e.z<nu;s!==n&&(this._grid.visible=n,this._plane.visible=n);const o=this._layerStore.getGraticuleLayer();if(o){const r=o.enabled,l=e.z<au;r!==l&&(o.enabled=l)}}async onLayerOpacityChanged(e,s){const n=await this.getLayer(e);n&&le.isColorLayer(n)&&(n.opacity=s,this.notify(n)),n&&Ne.isElevationLayer(n)&&this.setMapOpacity(e.opacity)}async onLayerVisibilityChanged(e,s){e.type==="elevation"&&s&&[...this._baseLayers.keys()].forEach(r=>{if(r===e.uuid)return;const l=this._baseLayers.get(r);if(l&&Ne.isElevationLayer(l)){this._baseLayers.delete(r),this.removeBasemapLayer(l);const c=this._layerStore.getBasemaps().find(h=>h.uuid===r);c&&this._layerStore.setBasemapVisibility(c,!1)}});const n=await this.getLayer(e,s);n&&(n.visible=s,s||(this._baseLayers.delete(e.uuid),this.removeBasemapLayer(n)),this.notify(n))}async onOverlayOpacityChanged(e,s){const n=await this.getOverlay(e);n&&(n.opacity=s,this.notify(n))}onOverlayReordered(e){e.visible&&this.updateLayerOrdering()}async onOverlayVisibilityChanged(e,s){const n=await this.getOverlay(e,s);n&&(n.visible=s,s||(this._overlays.delete(e.uuid),this.removeBasemapLayer(n)),this.notify(n))}updateLayerOrdering(){const e=[...this._layerStore.getBasemaps().map(s=>{var n;return(n=this._baseLayers.get(s.uuid))==null?void 0:n.id}).reverse(),...this._layerStore.getOverlays().map(s=>{var n;return(n=this._overlays.get(s.uuid))==null?void 0:n.id}).reverse(),...[...this._datasetLayers.values()].reverse()];this._basemap.sortColorLayers((s,n)=>{const o=e.indexOf(s.id),r=e.indexOf(n.id);return o>=0&&r>=0?o-r:0})}}const ia=[];function ru(i,t){return ut.isShapePickResult(i)?-1:ut.isShapePickResult(t)?1:i.distance-t.distance}class qs{constructor(){f(this,"_analysisStore",g.useAnalysisStore())}getFeatureFromPickedObject(t){var m,u;const{entity:e,features:s,object:n}=t,o=(e==null?void 0:e.object3d)??n;let r=(u=(m=o.userData)==null?void 0:m.dataset)==null?void 0:u.name;const l=(e==null?void 0:e.id)??o.uuid,c=[],h=new Map;if(h.set("Dataset",c),e){if(An.isMapPickResult(t)){if(s==null||s.length===0)return null;const d=s.at(0);r=this.getNameFromOLFeature(d.feature)??r,this.getAttributesFromOLFeature(d.feature,h),c.push({key:"Layer",value:d.layer.name})}else if(Da.isPointsPickResult(t))this.getAttributesFromPointCloud(t,h);else if(!e.isFeatureCollection){if(ut.isShapePickResult(t)){const d=t.entity;if(De.isMeasure3D(d)){const C=d.userData.measure;r=(C==null?void 0:C.title)??r,this.getAttributesFromMeasure(t,h)}else{const C=d.userData.annotation;r=(C==null?void 0:C.title)??r,this.getAttributesFromAnnotation(t,h)}}}for(const d of ia)d(t,h)}return e!=null&&e.userData&&this.getAttributesFromEntity(e,h),(n==null?void 0:n.userData)!=null&&this.getAttributesFromPickedObject3D(t,h),n!=null&&this.getDatasetAttributes(n,c),new Ug(r,l,h,t.point)}getFirstFeatureAt(t,e,s=1,n){const o=this.getObjectsAt(t,e,s,n);if(o!=null&&o.length>0)return o;const r=this.getMapAt(t,e,s);return r?[r]:null}getGeometryAttributes(t,e){const s=new g.Box3,n=new g.Vector3,o=new g.Vector3;s.setFromObject(t),s.getCenter(o),s.getSize(n),e.push({key:"Center",value:[o.x.toFixed(2),o.y.toFixed(2),o.z.toFixed(2)]});const r="m";e.push({key:"Size",value:[`${n.x.toFixed(2)}${r}`,`${n.y.toFixed(2)}${r}`,`${n.z.toFixed(2)}${r}`]})}getMapAt(t,e,s=1){const n=t.getObjects(r=>r.isMap);return t.pickObjectsAt(e,{limit:1,pickFeatures:!0,radius:s,sortByDistance:!0,where:n}).at(0)??null}getMouseCoordinate(t,e){const s=t.getObjects(o=>o.isMap),n=t.pickObjectsAt(e,{limit:1,radius:0,where:s}).at(0);return(n==null?void 0:n.point)??null}getObjectsAt(t,e,s=1,n){let o=t.getObjects(l=>gi.isMap(l)!==!0&&l.name!==ns&&l.name!==ss);n&&(o=o.filter(n));const r=t.pickObjectsAt(e,{filter:l=>this.filterPick(t,l),pickFeatures:!0,radius:s,where:o});return r.sort(ru),r??null}hasFeature(t,e){const s=t.getObjects(o=>o.isMap!==!0&&o.name!==ns&&o.name!==ss);return t.pickObjectsAt(e,{limit:1,radius:0,where:s}).at(0)!=null}pick(t,e){var n;const s=(n=this.getFirstFeatureAt(t,e))==null?void 0:n.at(0);if(s){const o=this.getFeatureFromPickedObject(s);if(o)return{feature:o,pickResult:s,point:s.point}}return null}filterPick(t,e){if(this._analysisStore.isClippingBoxEnabled()){const s=this._analysisStore.getClippingBox().containsPoint(e.point);if(this._analysisStore.isClippingBoxInverted()){if(s)return!1}else if(!s)return!1}return!(e.distance<t.view.camera.near||e.distance>t.view.camera.far)}getAttributesFromAnnotation(t,e){e.has("GeoJSON")||e.set("GeoJSON",[]);const s=e.get("GeoJSON"),n=t.entity,o=n.userData,{annotation:r,measurements:l,type:c}=o;if(r!=null)for(const[u,d]of Object.entries(r.properties))u==="geometry"||u==="geometryProperty"||u==="metadata"||u==="entity"||s.push({key:u,value:d});e.has("Measurement")||e.set("Measurement",[]);const h=e.get("Measurement");c==="MultiPoint"&&h.push({key:"Number of points",value:n.points.length});const m="m";l.area!=null&&h.push({key:"Area",value:`${l.area.toFixed(2)}${m}²`}),l.perimeter!=null&&h.push({key:c==="Polygon"?"Perimeter":"Length",value:`${l.perimeter.toFixed(2)}${m}`}),l.minmax!=null&&(h.push({key:"Min altitude",value:`${l.minmax[0].toFixed(2)}${m}`}),h.push({key:"Max altitude",value:`${l.minmax[1].toFixed(2)}${m}`}))}getAttributesFromEntity(t,e){e.has("Feature")||e.set("Feature",[]);const s=e.get("Feature");(t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,s)}getAttributesFromMeasure(t,e){e.has("GeoJSON")||e.set("GeoJSON",[]);const s=e.get("GeoJSON"),n=t.entity;for(const[r,l]of Object.entries(n.userData.measure.properties))r==="geometry"||r==="geometryProperty"||r==="metadata"||r==="entity"||s.push({key:r,value:l});e.has("Measurement")||e.set("Measurement",[]);const o=e.get("Measurement");o.push({key:"From",value:n.from}),o.push({key:"To",value:n.to}),o.push({key:"Length",value:`${n.length.toFixed(2)}m`})}getAttributesFromObject3D(t,e){if((t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,e),t!=null&&t.parent){if("isFeatureTile"in t.parent&&t.parent.isFeatureTile===!0)return;this.getAttributesFromObject3D(t.parent,e)}}getAttributesFromOLFeature(t,e){e.has("Feature")||e.set("Feature",[]);const s=e.get("Feature");t.getId()!==void 0&&s.push({key:"fid",value:t.getId()});for(const[n,o]of Object.entries(t.getProperties()))n==="geometry"||n==="geometryProperty"||s.push({key:n,value:o})}getAttributesFromPickedObject3D(t,e){e.has("Feature")||e.set("Feature",[]);const s=e.get("Feature");this.getAttributesFromObject3D(t.object,s)}getAttributesFromPointCloud(t,e){var s;(s=e.get("Dataset"))==null||s.push({key:"Tile",value:t.object.name})}getAttributesFromUserData(t,e){for(const[s,n]of Object.entries(t))if(!(s==="geometry"||s==="geometryProperty"||s==="metadata"||s==="entity"||s==="dataset"||s==="bbox"||s==="hover")){if(s==="feature"&&typeof n=="object"&&"ol_uid"in n){this.getAttributesFromUserData(n.getProperties(),e);continue}if(s==="properties"){this.getAttributesFromUserData(n,e);continue}if(typeof n!="object"){if(s==="id"){e.push({key:"fid",value:n});continue}e.push({key:s,value:n})}}}getDatasetAttributes(t,e){var s,n,o,r;((n=(s=t==null?void 0:t.userData)==null?void 0:s.dataset)==null?void 0:n.name)!=null&&e.push({key:"Dataset",value:t.userData.dataset.name}),((r=(o=t==null?void 0:t.userData)==null?void 0:o.dataset)==null?void 0:r.filename)!=null&&e.push({key:"File",value:t.userData.dataset.filename}),t.parent&&this.getDatasetAttributes(t.parent,e)}getNameFromOLFeature(t){return t.get("nom")??t.get("name")??t.getId()}}class lu{registerDatasetType(t,e){if(e.icon!=null&&(fn[t]=e.icon),e.name!=null&&(In[t]=e.name),e.highlight&&Qn.push(e.highlight),Og(t,e.entityBuilder),e.fileExtensions)if(e.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of e.fileExtensions)Bg(s,e.loader);e.propertyView&&si.set(t,e.propertyView),e.attributeExtractor&&ia.push(e.attributeExtractor)}}const cu=170;class hu{constructor(){f(this,"geometry");f(this,"material");f(this,"object3D");f(this,"_height");this.geometry=new g.PlaneGeometry(1,1,1,1),this.material=new g.MeshBasicMaterial({color:43690,opacity:.5,transparent:!0}),this.object3D=new g.Mesh(this.geometry,this.material),this.object3D.renderOrder=2,this.visible=!1,this._height=cu}set height(t){this._height=t}get height(){return this._height}set visible(t){this.object3D.visible=t}get visible(){return this.object3D.visible}dispose(){this.object3D.removeFromParent(),this.geometry.dispose(),this.material.dispose()}setPosition(t,e,s,n,o){this.object3D.scale.set(n,o,1),this.object3D.position.set(t,e,s),this.object3D.updateMatrixWorld()}}class gu{constructor(t,e){f(this,"_instance");f(this,"_layerManager");f(this,"_plane");f(this,"_store",g.useAnalysisStore());this._instance=t,this._layerManager=e,this._plane=null,this._store.$onAction(({after:s,name:n})=>{s(()=>{switch(n){case"enableFloodingPlane":this.updatePlane();break;case"setFloodingPlaneHeight":this.updatePlane();break}})})}dispose(){this._plane&&(this._instance.remove(this._plane.object3D),this._plane.dispose())}async updatePlane(){this._plane||(this._plane=new hu,await this._instance.add(this._plane.object3D));const t=this._layerManager.extent,e=t.centerAsVector2(),s=t.dimensions();this._plane.visible=this._store.isFloodingPlaneEnabled(),this._plane.setPosition(e.x,e.y,this._store.floodingPlaneHeight,s.x,s.y),this._instance.notifyChange()}}const Ft=new g.Raycaster,et=new g.Vector3,Pt=new g.Vector3,H=new g.Quaternion,Ys={X:new g.Vector3(1,0,0),Y:new g.Vector3(0,1,0),Z:new g.Vector3(0,0,1)},Fi={type:"change"},Xs={type:"mouseDown",mode:null},Js={type:"mouseUp",mode:null},Qs={type:"objectChange"};class uu extends g.Controls{constructor(t,e=null){super(void 0,e);const s=new fu(this);this._root=s;const n=new Iu;this._gizmo=n,s.add(n);const o=new vu;this._plane=o,s.add(o);const r=this;function l(M,y){let E=y;Object.defineProperty(r,M,{get:function(){return E!==void 0?E:y},set:function(_){E!==_&&(E=_,o[M]=_,n[M]=_,r.dispatchEvent({type:M+"-changed",value:_}),r.dispatchEvent(Fi))}}),r[M]=y,o[M]=y,n[M]=y}l("camera",t),l("object",void 0),l("enabled",!0),l("axis",null),l("mode","translate"),l("translationSnap",null),l("rotationSnap",null),l("scaleSnap",null),l("space","world"),l("size",1),l("dragging",!1),l("showX",!0),l("showY",!0),l("showZ",!0),l("minX",-1/0),l("maxX",1/0),l("minY",-1/0),l("maxY",1/0),l("minZ",-1/0),l("maxZ",1/0);const c=new g.Vector3,h=new g.Vector3,m=new g.Quaternion,u=new g.Quaternion,d=new g.Vector3,C=new g.Quaternion,p=new g.Vector3,A=new g.Vector3,v=new g.Vector3,I=0,w=new g.Vector3;l("worldPosition",c),l("worldPositionStart",h),l("worldQuaternion",m),l("worldQuaternionStart",u),l("cameraPosition",d),l("cameraQuaternion",C),l("pointStart",p),l("pointEnd",A),l("rotationAxis",v),l("rotationAngle",I),l("eye",w),this._offset=new g.Vector3,this._startNorm=new g.Vector3,this._endNorm=new g.Vector3,this._cameraScale=new g.Vector3,this._parentPosition=new g.Vector3,this._parentQuaternion=new g.Quaternion,this._parentQuaternionInv=new g.Quaternion,this._parentScale=new g.Vector3,this._worldScaleStart=new g.Vector3,this._worldQuaternionInv=new g.Quaternion,this._worldScale=new g.Vector3,this._positionStart=new g.Vector3,this._quaternionStart=new g.Quaternion,this._scaleStart=new g.Vector3,this._getPointer=du.bind(this),this._onPointerDown=pu.bind(this),this._onPointerHover=mu.bind(this),this._onPointerMove=Au.bind(this),this._onPointerUp=Cu.bind(this),e!==null&&this.connect()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(t){if(this.object===void 0||this.dragging===!0)return;t!==null&&Ft.setFromCamera(t,this.camera);const e=Ui(this._gizmo.picker[this.mode],Ft);e?this.axis=e.object.name:this.axis=null}pointerDown(t){if(!(this.object===void 0||this.dragging===!0||t!=null&&t.button!==0)&&this.axis!==null){t!==null&&Ft.setFromCamera(t,this.camera);const e=Ui(this._plane,Ft,!0);e&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(e.point).sub(this.worldPositionStart)),this.dragging=!0,Xs.mode=this.mode,this.dispatchEvent(Xs)}}pointerMove(t){const e=this.axis,s=this.mode,n=this.object;let o=this.space;if(s==="scale"?o="local":(e==="E"||e==="XYZE"||e==="XYZ")&&(o="world"),n===void 0||e===null||this.dragging===!1||t!==null&&t.button!==-1)return;t!==null&&Ft.setFromCamera(t,this.camera);const r=Ui(this._plane,Ft,!0);if(r){if(this.pointEnd.copy(r.point).sub(this.worldPositionStart),s==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),o==="local"&&e!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),e.indexOf("X")===-1&&(this._offset.x=0),e.indexOf("Y")===-1&&(this._offset.y=0),e.indexOf("Z")===-1&&(this._offset.z=0),o==="local"&&e!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),n.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(o==="local"&&(n.position.applyQuaternion(H.copy(this._quaternionStart).invert()),e.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.position.applyQuaternion(this._quaternionStart)),o==="world"&&(n.parent&&n.position.add(et.setFromMatrixPosition(n.parent.matrixWorld)),e.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),e.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),e.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.parent&&n.position.sub(et.setFromMatrixPosition(n.parent.matrixWorld)))),n.position.x=Math.max(this.minX,Math.min(this.maxX,n.position.x)),n.position.y=Math.max(this.minY,Math.min(this.maxY,n.position.y)),n.position.z=Math.max(this.minZ,Math.min(this.maxZ,n.position.z));else if(s==="scale"){if(e.search("XYZ")!==-1){let l=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(l*=-1),Pt.set(l,l,l)}else et.copy(this.pointStart),Pt.copy(this.pointEnd),et.applyQuaternion(this._worldQuaternionInv),Pt.applyQuaternion(this._worldQuaternionInv),Pt.divide(et),e.search("X")===-1&&(Pt.x=1),e.search("Y")===-1&&(Pt.y=1),e.search("Z")===-1&&(Pt.z=1);n.scale.copy(this._scaleStart).multiply(Pt),this.scaleSnap&&(e.search("X")!==-1&&(n.scale.x=Math.round(n.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Y")!==-1&&(n.scale.y=Math.round(n.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),e.search("Z")!==-1&&(n.scale.z=Math.round(n.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(s==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const l=20/this.worldPosition.distanceTo(et.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;e==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(et.copy(this.rotationAxis).cross(this.eye))*l):(e==="X"||e==="Y"||e==="Z")&&(this.rotationAxis.copy(Ys[e]),et.copy(Ys[e]),o==="local"&&et.applyQuaternion(this.worldQuaternion),et.cross(this.eye),et.length()===0?c=!0:this.rotationAngle=this._offset.dot(et.normalize())*l),(e==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),o==="local"&&e!=="E"&&e!=="XYZE"?(n.quaternion.copy(this._quaternionStart),n.quaternion.multiply(H.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),n.quaternion.copy(H.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),n.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(Fi),this.dispatchEvent(Qs)}}pointerUp(t){t!==null&&t.button!==0||(this.dragging&&this.axis!==null&&(Js.mode=this.mode,this.dispatchEvent(Js)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this._root.dispose()}attach(t){return this.object=t,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(Fi),this.dispatchEvent(Qs),this.pointStart.copy(this.pointEnd))}getRaycaster(){return Ft}getMode(){return this.mode}setMode(t){this.mode=t}setTranslationSnap(t){this.translationSnap=t}setRotationSnap(t){this.rotationSnap=t}setScaleSnap(t){this.scaleSnap=t}setSize(t){this.size=t}setSpace(t){this.space=t}}function du(i){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:i.button};{const t=this.domElement.getBoundingClientRect();return{x:(i.clientX-t.left)/t.width*2-1,y:-(i.clientY-t.top)/t.height*2+1,button:i.button}}}function mu(i){if(this.enabled)switch(i.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(i));break}}function pu(i){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(i.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(i)),this.pointerDown(this._getPointer(i)))}function Au(i){this.enabled&&this.pointerMove(this._getPointer(i))}function Cu(i){this.enabled&&(this.domElement.releasePointerCapture(i.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(i)))}function Ui(i,t,e){const s=t.intersectObject(i,!0);for(let n=0;n<s.length;n++)if(s[n].object.visible||e)return s[n];return!1}const Xe=new g.Euler,G=new g.Vector3(0,1,0),Ks=new g.Vector3(0,0,0),$s=new g.Matrix4,Je=new g.Quaternion,ci=new g.Quaternion,bt=new g.Vector3,tn=new g.Matrix4,ke=new g.Vector3(1,0,0),Gt=new g.Vector3(0,1,0),Se=new g.Vector3(0,0,1),Qe=new g.Vector3,fe=new g.Vector3,Ie=new g.Vector3;class fu extends g.Object3D{constructor(t){super(),this.isTransformControlsRoot=!0,this.controls=t,this.visible=!1}updateMatrixWorld(t){const e=this.controls;e.object!==void 0&&(e.object.updateMatrixWorld(),e.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):e.object.parent.matrixWorld.decompose(e._parentPosition,e._parentQuaternion,e._parentScale),e.object.matrixWorld.decompose(e.worldPosition,e.worldQuaternion,e._worldScale),e._parentQuaternionInv.copy(e._parentQuaternion).invert(),e._worldQuaternionInv.copy(e.worldQuaternion).invert()),e.camera.updateMatrixWorld(),e.camera.matrixWorld.decompose(e.cameraPosition,e.cameraQuaternion,e._cameraScale),e.camera.isOrthographicCamera?e.camera.getWorldDirection(e.eye).negate():e.eye.copy(e.cameraPosition).sub(e.worldPosition).normalize(),super.updateMatrixWorld(t)}dispose(){this.traverse(function(t){t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}}class Iu extends g.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const t=new g.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),e=new g.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),s=t.clone();s.opacity=.15;const n=e.clone();n.opacity=.5;const o=t.clone();o.color.setHex(16711680);const r=t.clone();r.color.setHex(65280);const l=t.clone();l.color.setHex(255);const c=t.clone();c.color.setHex(16711680),c.opacity=.5;const h=t.clone();h.color.setHex(65280),h.opacity=.5;const m=t.clone();m.color.setHex(255),m.opacity=.5;const u=t.clone();u.opacity=.25;const d=t.clone();d.color.setHex(16776960),d.opacity=.25,t.clone().color.setHex(16776960);const p=t.clone();p.color.setHex(7895160);const A=new g.CylinderGeometry(0,.04,.1,12);A.translate(0,.05,0);const v=new g.BoxGeometry(.08,.08,.08);v.translate(0,.04,0);const I=new g.BufferGeometry;I.setAttribute("position",new g.Float32BufferAttribute([0,0,0,1,0,0],3));const w=new g.CylinderGeometry(.0075,.0075,.5,3);w.translate(0,.25,0);function M(J,Ge){const Ct=new g.TorusGeometry(J,.0075,3,64,Ge*Math.PI*2);return Ct.rotateY(Math.PI/2),Ct.rotateX(Math.PI/2),Ct}function y(){const J=new g.BufferGeometry;return J.setAttribute("position",new g.Float32BufferAttribute([0,0,0,1,1,1],3)),J}const E={X:[[new g.Mesh(A,o),[.5,0,0],[0,0,-Math.PI/2]],[new g.Mesh(A,o),[-.5,0,0],[0,0,Math.PI/2]],[new g.Mesh(w,o),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new g.Mesh(A,r),[0,.5,0]],[new g.Mesh(A,r),[0,-.5,0],[Math.PI,0,0]],[new g.Mesh(w,r)]],Z:[[new g.Mesh(A,l),[0,0,.5],[Math.PI/2,0,0]],[new g.Mesh(A,l),[0,0,-.5],[-Math.PI/2,0,0]],[new g.Mesh(w,l),null,[Math.PI/2,0,0]]],XYZ:[[new g.Mesh(new g.OctahedronGeometry(.1,0),u.clone()),[0,0,0]]],XY:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),m.clone()),[.15,.15,0]]],YZ:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),c.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),h.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},_={X:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new g.Mesh(new g.OctahedronGeometry(.2,0),s)]],XY:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]]},S={START:[[new g.Mesh(new g.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],END:[[new g.Mesh(new g.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],DELTA:[[new g.Line(y(),n),null,null,null,"helper"]],X:[[new g.Line(I,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new g.Line(I,n.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new g.Line(I,n.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},T={XYZE:[[new g.Mesh(M(.5,1),p),null,[0,Math.PI/2,0]]],X:[[new g.Mesh(M(.5,.5),o)]],Y:[[new g.Mesh(M(.5,.5),r),null,[0,0,-Math.PI/2]]],Z:[[new g.Mesh(M(.5,.5),l),null,[0,Math.PI/2,0]]],E:[[new g.Mesh(M(.75,1),d),null,[0,Math.PI/2,0]]]},q={AXIS:[[new g.Line(I,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},tt={XYZE:[[new g.Mesh(new g.SphereGeometry(.25,10,8),s)]],X:[[new g.Mesh(new g.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new g.Mesh(new g.TorusGeometry(.5,.1,4,24),s),[0,0,0],[Math.PI/2,0,0]]],Z:[[new g.Mesh(new g.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,0,-Math.PI/2]]],E:[[new g.Mesh(new g.TorusGeometry(.75,.1,2,24),s)]]},L={X:[[new g.Mesh(v,o),[.5,0,0],[0,0,-Math.PI/2]],[new g.Mesh(w,o),[0,0,0],[0,0,-Math.PI/2]],[new g.Mesh(v,o),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new g.Mesh(v,r),[0,.5,0]],[new g.Mesh(w,r)],[new g.Mesh(v,r),[0,-.5,0],[0,0,Math.PI]]],Z:[[new g.Mesh(v,l),[0,0,.5],[Math.PI/2,0,0]],[new g.Mesh(w,l),[0,0,0],[Math.PI/2,0,0]],[new g.Mesh(v,l),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),m),[.15,.15,0]]],YZ:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new g.Mesh(new g.BoxGeometry(.15,.15,.01),h),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new g.Mesh(new g.BoxGeometry(.1,.1,.1),u.clone())]]},V={X:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new g.Mesh(new g.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new g.Mesh(new g.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new g.Mesh(new g.BoxGeometry(.2,.2,.2),s),[0,0,0]]]},z={X:[[new g.Line(I,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new g.Line(I,n.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new g.Line(I,n.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function Y(J){const Ge=new g.Object3D;for(const Ct in J)for(let qt=J[Ct].length;qt--;){const ot=J[Ct][qt][0].clone(),je=J[Ct][qt][1],He=J[Ct][qt][2],Ze=J[Ct][qt][3],ma=J[Ct][qt][4];ot.name=Ct,ot.tag=ma,je&&ot.position.set(je[0],je[1],je[2]),He&&ot.rotation.set(He[0],He[1],He[2]),Ze&&ot.scale.set(Ze[0],Ze[1],Ze[2]),ot.updateMatrix();const Is=ot.geometry.clone();Is.applyMatrix4(ot.matrix),ot.geometry=Is,ot.renderOrder=1/0,ot.position.set(0,0,0),ot.rotation.set(0,0,0),ot.scale.set(1,1,1),Ge.add(ot)}return Ge}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=Y(E)),this.add(this.gizmo.rotate=Y(T)),this.add(this.gizmo.scale=Y(L)),this.add(this.picker.translate=Y(_)),this.add(this.picker.rotate=Y(tt)),this.add(this.picker.scale=Y(V)),this.add(this.helper.translate=Y(S)),this.add(this.helper.rotate=Y(q)),this.add(this.helper.scale=Y(z)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(t){const s=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:ci;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let n=[];n=n.concat(this.picker[this.mode].children),n=n.concat(this.gizmo[this.mode].children),n=n.concat(this.helper[this.mode].children);for(let o=0;o<n.length;o++){const r=n[o];r.visible=!0,r.rotation.set(0,0,0),r.position.copy(this.worldPosition);let l;if(this.camera.isOrthographicCamera?l=(this.camera.top-this.camera.bottom)/this.camera.zoom:l=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),r.scale.set(1,1,1).multiplyScalar(l*this.size/4),r.tag==="helper"){r.visible=!1,r.name==="AXIS"?(r.visible=!!this.axis,this.axis==="X"&&(H.setFromEuler(Xe.set(0,0,0)),r.quaternion.copy(s).multiply(H),Math.abs(G.copy(ke).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Y"&&(H.setFromEuler(Xe.set(0,0,Math.PI/2)),r.quaternion.copy(s).multiply(H),Math.abs(G.copy(Gt).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Z"&&(H.setFromEuler(Xe.set(0,Math.PI/2,0)),r.quaternion.copy(s).multiply(H),Math.abs(G.copy(Se).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="XYZE"&&(H.setFromEuler(Xe.set(0,Math.PI/2,0)),G.copy(this.rotationAxis),r.quaternion.setFromRotationMatrix($s.lookAt(Ks,G,Gt)),r.quaternion.multiply(H),r.visible=this.dragging),this.axis==="E"&&(r.visible=!1)):r.name==="START"?(r.position.copy(this.worldPositionStart),r.visible=this.dragging):r.name==="END"?(r.position.copy(this.worldPosition),r.visible=this.dragging):r.name==="DELTA"?(r.position.copy(this.worldPositionStart),r.quaternion.copy(this.worldQuaternionStart),et.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),et.applyQuaternion(this.worldQuaternionStart.clone().invert()),r.scale.copy(et),r.visible=this.dragging):(r.quaternion.copy(s),this.dragging?r.position.copy(this.worldPositionStart):r.position.copy(this.worldPosition),this.axis&&(r.visible=this.axis.search(r.name)!==-1));continue}r.quaternion.copy(s),this.mode==="translate"||this.mode==="scale"?(r.name==="X"&&Math.abs(G.copy(ke).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Y"&&Math.abs(G.copy(Gt).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Z"&&Math.abs(G.copy(Se).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XY"&&Math.abs(G.copy(Se).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="YZ"&&Math.abs(G.copy(ke).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XZ"&&Math.abs(G.copy(Gt).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1)):this.mode==="rotate"&&(Je.copy(s),G.copy(this.eye).applyQuaternion(H.copy(s).invert()),r.name.search("E")!==-1&&r.quaternion.setFromRotationMatrix($s.lookAt(this.eye,Ks,Gt)),r.name==="X"&&(H.setFromAxisAngle(ke,Math.atan2(-G.y,G.z)),H.multiplyQuaternions(Je,H),r.quaternion.copy(H)),r.name==="Y"&&(H.setFromAxisAngle(Gt,Math.atan2(G.x,G.z)),H.multiplyQuaternions(Je,H),r.quaternion.copy(H)),r.name==="Z"&&(H.setFromAxisAngle(Se,Math.atan2(G.y,G.x)),H.multiplyQuaternions(Je,H),r.quaternion.copy(H))),r.visible=r.visible&&(r.name.indexOf("X")===-1||this.showX),r.visible=r.visible&&(r.name.indexOf("Y")===-1||this.showY),r.visible=r.visible&&(r.name.indexOf("Z")===-1||this.showZ),r.visible=r.visible&&(r.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),r.material._color=r.material._color||r.material.color.clone(),r.material._opacity=r.material._opacity||r.material.opacity,r.material.color.copy(r.material._color),r.material.opacity=r.material._opacity,this.enabled&&this.axis&&(r.name===this.axis||this.axis.split("").some(function(c){return r.name===c}))&&(r.material.color.setHex(16776960),r.material.opacity=1)}super.updateMatrixWorld(t)}}class vu extends g.Mesh{constructor(){super(new g.PlaneGeometry(1e5,1e5,2,2),new g.MeshBasicMaterial({visible:!1,wireframe:!0,side:g.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(t){let e=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(e="local"),Qe.copy(ke).applyQuaternion(e==="local"?this.worldQuaternion:ci),fe.copy(Gt).applyQuaternion(e==="local"?this.worldQuaternion:ci),Ie.copy(Se).applyQuaternion(e==="local"?this.worldQuaternion:ci),G.copy(fe),this.mode){case"translate":case"scale":switch(this.axis){case"X":G.copy(this.eye).cross(Qe),bt.copy(Qe).cross(G);break;case"Y":G.copy(this.eye).cross(fe),bt.copy(fe).cross(G);break;case"Z":G.copy(this.eye).cross(Ie),bt.copy(Ie).cross(G);break;case"XY":bt.copy(Ie);break;case"YZ":bt.copy(Qe);break;case"XZ":G.copy(Ie),bt.copy(fe);break;case"XYZ":case"E":bt.set(0,0,0);break}break;case"rotate":default:bt.set(0,0,0)}bt.length()===0?this.quaternion.copy(this.cameraQuaternion):(tn.lookAt(et.set(0,0,0),bt,G),this.quaternion.setFromRotationMatrix(tn)),super.updateMatrixWorld(t)}}const yu=new g.MeshBasicMaterial({color:"yellow",opacity:.1,transparent:!0});class bu{constructor(t){f(this,"_cameraStore",g.useCameraStore());f(this,"_clippingBox");f(this,"_clippingBoxHelper");f(this,"_clippingBoxMesh");f(this,"_datasetStore",g.useDatasetStore());f(this,"_instance");f(this,"_previousTransformControls");f(this,"_store",g.useAnalysisStore());f(this,"_transformControls");f(this,"_volumeHelpers");this._instance=t,this._volumeHelpers=new g.Group,t.scene.add(this._volumeHelpers),this._clippingBox=null,this._clippingBoxHelper=null,this._clippingBoxMesh=null,this._transformControls=null,this._previousTransformControls=this._cameraStore.getNavigationMode(),this._store.$onAction(({after:e,name:s})=>{e(()=>{switch(s){case"displayClippingBoxHelper":case"enableClippingBox":case"setClippingBox":case"setClippingBoxSize":this.updateClippingBox();break;case"setClippingBoxCenter":this.moveClippingBox();break;case"setClippingBoxInverted":this.applyClippingPlanes();break}})}),this._datasetStore.$onAction(({after:e,name:s})=>{e(()=>{switch(s){case"attachEntity":this.applyClippingPlanes();break}})})}dispose(){this._instance.scene.remove(this._volumeHelpers),this.disposeClippingBox()}applyClippingPlanes(){const t=this._store.isClippingBoxEnabled()?this.getPlanesFromBoxSides():[];for(const e of this._datasetStore.getDatasets()){const s=this._datasetStore.getEntity(e);s&&(s.clippingPlanes=t,s.traverseMaterials(n=>{n.clipIntersection=this._store.isClippingBoxInverted()}),this._instance.notifyChange(s))}}createClippingBox(t,e){if(this._clippingBox=new g.Box3,this._clippingBox.setFromCenterAndSize(t,e),this._store.isClippingBoxHelperDisplayed()){const s=new g.BoxGeometry(e.x,e.y,e.z);this._clippingBoxMesh=new g.Mesh(s,yu),this._clippingBoxHelper=new g.Box3Helper(this._clippingBox,new g.Color("yellow")),this._clippingBoxMesh.renderOrder=2,this._clippingBoxMesh.position.copy(t),this._clippingBoxMesh.updateMatrixWorld(),this._clippingBoxHelper.updateMatrixWorld(),this._transformControls=new uu(this._instance.view.camera,this._instance.domElement),this._transformControls.addEventListener("change",()=>{this._cameraStore.getNavigationMode()!=="disabled"||this._clippingBoxMesh===null||(this._store.clippingBoxCenter.copy(this._clippingBoxMesh.position),this.moveClippingBox())}),this._transformControls.addEventListener("dragging-changed",n=>{n.value!=null?(this._previousTransformControls=this._cameraStore.getNavigationMode(),this._cameraStore.setNavigationMode("disabled"),this._cameraStore.setIsUserInteracting(!0)):(this._cameraStore.setNavigationMode(this._previousTransformControls),setTimeout(()=>this._cameraStore.setIsUserInteracting(!1),0))}),this._volumeHelpers.add(this._clippingBoxHelper),this._volumeHelpers.add(this._clippingBoxMesh),this._transformControls.attach(this._clippingBoxMesh),this._transformControls.getHelper().updateMatrixWorld(),this._instance.scene.add(this._transformControls.getHelper()),this._instance.notifyChange()}}disposeClippingBox(){var t,e,s,n,o,r,l,c;(t=this._transformControls)==null||t.detach(),(e=this._transformControls)==null||e.getHelper().removeFromParent(),(s=this._transformControls)==null||s.dispose(),(o=(n=this._clippingBoxMesh)==null?void 0:n.geometry)==null||o.dispose(),(r=this._clippingBoxMesh)==null||r.removeFromParent(),(l=this._clippingBoxHelper)==null||l.removeFromParent(),(c=this._clippingBoxHelper)==null||c.dispose(),this._instance.notifyChange()}getPlanesFromBoxSides(){if(this._clippingBox===null)throw new Error("No clippingBox defined");const t=[];return t.push(new g.Plane(new g.Vector3(0,0,1),-this._clippingBox.min.z)),t.push(new g.Plane(new g.Vector3(0,0,-1),+this._clippingBox.max.z)),t.push(new g.Plane(new g.Vector3(1,0,0),-this._clippingBox.min.x)),t.push(new g.Plane(new g.Vector3(-1,0,0),+this._clippingBox.max.x)),t.push(new g.Plane(new g.Vector3(0,1,0),-this._clippingBox.min.y)),t.push(new g.Plane(new g.Vector3(0,-1,0),+this._clippingBox.max.y)),this._store.isClippingBoxInverted()&&t.forEach(e=>e.negate()),t}moveClippingBox(){var t,e,s,n,o;this._store.isClippingBoxEnabled()&&(this._clippingBox===null&&this.createClippingBox(this._store.clippingBoxCenter,this._store.clippingBoxSize),(t=this._clippingBox)==null||t.setFromCenterAndSize(this._store.clippingBoxCenter,this._store.clippingBoxSize),this._store.isClippingBoxHelperDisplayed()&&((e=this._clippingBoxMesh)==null||e.position.copy(this._store.clippingBoxCenter),(s=this._clippingBoxMesh)==null||s.updateMatrixWorld(),(n=this._clippingBoxHelper)==null||n.updateMatrixWorld(),(o=this._transformControls)==null||o.getHelper().updateMatrixWorld(),this._instance.notifyChange(this._volumeHelpers),this._instance.notifyChange(this._transformControls))),this.applyClippingPlanes()}updateClippingBox(){this.disposeClippingBox(),this._store.isClippingBoxEnabled()&&this.createClippingBox(this._store.clippingBoxCenter,this._store.clippingBoxSize),this.applyClippingPlanes()}}class Mu{constructor(t){f(this,"_datasetStore",g.useDatasetStore());f(this,"_instance");f(this,"_store",g.useAnalysisStore());this._instance=t,this._store.$onAction(({after:e,name:s})=>{e(()=>{switch(s){case"enableCrossSection":case"setCrossSectionCenter":case"setCrossSectionOrientation":this.updateCrossSection();break}})}),this.updateCrossSection()}dispose(){}updateCrossSection(){const t=[];if(this._store.isCrossSectionEnabled()){const e=g.MathUtils.DEG2RAD*this._store.crossSectionOrientation,s=Math.cos(e),n=Math.sin(e),o=new g.Vector3(s,n,0),r=new g.Plane(o,0).distanceToPoint(this._store.crossSectionCenter),l=new g.Plane(o,-r);t.push(l)}this._instance.renderer.clippingPlanes=t;for(const e of this._datasetStore.getDatasets()){const s=this._datasetStore.getEntity(e);s&&s.dispatchEvent({clippingPlanes:t,type:"clippingPlanes-property-changed"})}this._instance.notifyChange()}}class wu{constructor(t,e){f(this,"_clippingBoxManager");f(this,"_crossSectionManager");f(this,"_floodingPlaneManager");f(this,"_instance");this._instance=t,this._floodingPlaneManager=new gu(t,e),this._crossSectionManager=new Mu(t),this._clippingBoxManager=new bu(t)}dispose(){this._clippingBoxManager.dispose(),this._crossSectionManager.dispose(),this._floodingPlaneManager.dispose()}}const ps=St.defineStore("annotations",()=>{const i=a.reactive([]),t=a.ref("normal"),e=a.computed(()=>i.length),s=a.ref(!1),n=a.ref(!0);function o(){return s.value}function r(){return n.value}function l(_){n.value=_}function c(_){s.value=_}function h(){return t.value}function m(_){t.value=_}function u(){return i}function d(_){i.splice(i.indexOf(_),1)}function C(){}function p(){}function A(){}function v(_){i.push(_)}function I(_){return i.some(S=>S.title===_)}function w(_){}function M(){}function y(_){}function E(_){}return{add:v,count:e,createLine:p,createPoint:C,createPolygon:A,edit:w,getAnnotationMode:h,getAnnotations:u,hasAnnotation:I,importAnnotationFile:y,importAnnotationsFiles:E,isUserDrawing:o,remove:d,setAnnotationMode:m,setIsUserDrawing:c,setShowLabels:l,showLabels:r,stopEdition:M}}),me=St.defineStore("notifications",()=>{function i(t){}return{push:i}});class sa extends g.EventDispatcher{constructor(e,s,n={}){super();f(this,"properties");f(this,"title");f(this,"uuid");f(this,"_isEditing");f(this,"_object");f(this,"_visible");this.title=e,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=n,this.uuid=g.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(e){this._isEditing=e,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(e){this._visible=e,this.dispatchEvent({type:"visible"})}static toCollection(e){return{features:e.map(n=>n.toGeoJSON()),type:"FeatureCollection",id:`${g.Download.getBaseUrl()}#${g.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:g.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const e=this.object.toGeoJSON({includeAltitudes:!0});return e.id=`${g.Download.getBaseUrl()}#${this.uuid}`,e.properties={...e.properties,title:this.title,updated:new Date().toISOString()},e}}class st{constructor(t,e,s="info"){f(this,"level");f(this,"text");f(this,"title");this.title=t,this.text=e,this.level=s}static empty(){return new st("","","info")}}function Eu(i){let t=1/0,e=-1/0,s;Array.isArray(i)?s=i:s=i.points;for(let n=0;n<s.length;n+=1)t=Math.min(t,s[n].z),e=Math.max(e,s[n].z);return[t,e]}const _u={getMinMaxAltitudes:Eu};function xu(i){return window.prompt("Annotation name",i)}const na=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),en=i=>{let t=i.area,e="m²";return t>1e6&&(t=t/1e6,e="km²"),`${na.format(t)} ${e}`},Ou=new g.Vector3,ku=new g.Vector3,sn=i=>t=>{const{camera:e}=i,{end:s,start:n}=t,o=Ou.copy(n).project(e),r=ku.copy(s).project(e),l=Math.pow(100/i.width,2);if(o.distanceToSquared(r)<l)return null;let h=t.length;if(h==null||h<=0)return null;let m="m";return h>1e3&&(h=h/1e3,m="km"),`${na.format(h)} ${m}`},zi=i=>{const t=i.shape;return t.userData.annotation?t.userData.annotation.title:null};class Su{constructor(t,e,s){f(this,"_boundExitEdition");f(this,"_boundOnEndDrag");f(this,"_boundOnKeyDown");f(this,"_boundOnStartDrag");f(this,"_boundUpdateLabels");f(this,"_drawTool");f(this,"_editedShape",null);f(this,"_editedShapePreviousPoints",null);f(this,"_instance");f(this,"_isEditing",!1);f(this,"_notificationStore",me());f(this,"_picker");f(this,"_shapes",new Map);f(this,"_store",ps());this._instance=t,this._picker=s,this._drawTool=new Rt({instance:t}),this._boundOnEndDrag=()=>{e.enabled=!0},this._boundOnStartDrag=()=>{e.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:n,args:o,name:r})=>{n(()=>{switch(r){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(o[0]);break;case"importAnnotationFile":this.importAnnotationFile(o[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(o[0]);break;case"remove":this.deleteAnnotation(o[0]);break;case"setShowLabels":this.udpateLabelVisibility(o[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,e,s={}){const n=new sa(t,()=>e,s);return e.userData.annotation=n,n.addEventListener("visible",()=>this.updateDrawing(n)),this._store.add(n),this._shapes.set(n.uuid,e),n}addShape(t,e,s){if(t&&!this._shapes.has(t.id)){const n=t.userData;n.type=e,n.highlightable=!0;let o=s;if(this._store.hasAnnotation(o)){for(let l=1;l<1e3&&(o=`${s} (${l})`,!!this._store.hasAnnotation(o));l+=1);this._store.hasAnnotation(o)&&(o="Achievement unlocked: 1000 annotations with default name")}const r=xu(o);if(r!=null){this.computeMeasurements(t);const l=this.pushNewAnnotation(r,t);this._shapes.set(l.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:_u.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const e=t.object;this._instance.remove(e),this._shapes.delete(t.uuid)}}draw(t,e,s,n){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...n}).then(o=>{this.addShape(o,e,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:sn(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:zi,vertexRadius:ri})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:en})}editAnnotation(t){const e=this._shapes.get(t.uuid);if(!e){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=e,this._editedShapePreviousPoints=[...e.points],t.isEditing=!0,e.color=vg,e.userData.highlightable=!1,this._instance.notifyChange(e),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[e]})}filterPickResults(t,e){return e?t:t.filter(s=>!ut.isShapePickResult(s))}getCreationOptions(){return{color:Tt,pick:this.pick.bind(this)}}async importAnnotation(t,e){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=g.MathUtils.generateUUID()),e.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const e=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:n}=await this.importBlob(t,e);this._notificationStore.push(new st("Annotations",`${s} annotations imported (${n} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const e=[];let s=0,n=0;const o=[],r=new Set(this._store.getAnnotations().map(l=>l.title));for(const l of t)e.push(this.importBlob(l,r).then(({nbImported:c,nbSkipped:h})=>{s+=c,n+=h}).catch(c=>{o.push(c.message)}));await Promise.allSettled(e),o.length>0?this._notificationStore.push(new st("Annotations",`${s} annotations imported (${n} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new st("Annotations",`${s} annotations imported (${n} skipped)`,"success"))}async importBlob(t,e){const s=await t.text(),n=JSON.parse(s),o=n.type==="FeatureCollection"?n.features:[n];let r=0,l=0;for(const c of o)await this.importAnnotation(c,e)?r++:l++;return{nbImported:r,nbSkipped:l}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const e="EPSG:4326",s=o=>{const r=new ct(e,o[0],o[1],o[2]??0);return r.as(this._instance.referenceCrs,r).toVector3()};let n;switch(t.geometry.type){case"LineString":n=new ut({beforeRemovePoint:Rt.limitRemovePointHook(2),color:Tt,segmentLabelFormatter:sn(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),n.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":n=new ut({beforeRemovePoint:Rt.limitRemovePointHook(1),color:Tt,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:zi,vertexRadius:ri}),n.setPoints(t.geometry.coordinates.map(s));break;case"Point":n=new ut({beforeRemovePoint:Rt.inhibitHook,color:Tt,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:zi,vertexRadius:ri}),n.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":n=new ut({afterRemovePoint:Rt.afterRemovePointOfRing,afterUpdatePoint:Rt.afterUpdatePointOfRing,beforeRemovePoint:Rt.limitRemovePointHook(4),color:Tt,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:en}),n.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(n),await this._instance.add(n),n}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let e;switch(this._store.getAnnotationMode()){case"mapOnly":e=this.pickMap(t);break;case"normal":e=this.pickDefault(t);break;case"objectsOnly":e=this.pickFeatures(t);break}return e}pickDefault(t){const e=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(e,this._isEditing)}pickFeatures(t){const e=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(e,this._isEditing)}pickMap(t){const e=this._instance.pickObjectsAt(t,{filter:s=>ut.isShapePickResult(s)||An.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(e,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=Tt,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(e=>{switch(e.userData.type){case"LineString":e.showSegmentLabels=t;break;case"MultiPoint":case"Point":e.showVertexLabels=t;break;case"Polygon":e.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(e=>e.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
|
|
4
|
+
northing meters`+e;var u=g/2,f=0,m=0,C,v,I,b,M;return u>0&&(C=1e5/Math.pow(10,u),v=e.substring(n,n+u),f=parseFloat(v)*C,I=e.substring(n+u),m=parseFloat(I)*C),b=f+c,M=m+d,{easting:b,northing:M,zoneLetter:l,zoneNumber:r,accuracy:C}}function Yo(e,t){for(var i=ta.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===st&&i++,i===ct&&i++,i>me){if(a)throw"Bad character: "+e;i=Jt,a=!0}s+=1e5}return s}function Jo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=ea.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===st&&i++,i===ct&&i++,i>Ae){if(a)throw"Bad character: "+e;i=Jt,a=!0}s+=1e5}return s}function Xo(e){var t;switch(e){case"C":t=11e5;break;case"D":t=2e6;break;case"E":t=28e5;break;case"F":t=37e5;break;case"G":t=46e5;break;case"H":t=55e5;break;case"J":t=64e5;break;case"K":t=73e5;break;case"L":t=82e5;break;case"M":t=91e5;break;case"N":t=0;break;case"P":t=8e5;break;case"Q":t=17e5;break;case"R":t=26e5;break;case"S":t=35e5;break;case"T":t=44e5;break;case"U":t=53e5;break;case"V":t=62e5;break;case"W":t=7e6;break;case"X":t=79e5;break;default:t=-1}if(t>=0)return t;throw"Invalid zone letter: "+e}function te(e,t,i){if(!(this instanceof te))return new te(e,t,i);if(Array.isArray(e))this.x=e[0],this.y=e[1],this.z=e[2]||0;else if(typeof e=="object")this.x=e.x,this.y=e.y,this.z=e.z||0;else if(typeof e=="string"&&typeof t>"u"){var s=e.split(",");this.x=parseFloat(s[0],10),this.y=parseFloat(s[1],10),this.z=parseFloat(s[2],10)||0}else this.x=e,this.y=t,this.z=i||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}te.fromMGRS=function(e){return new te(sa(e))};te.prototype.toMGRS=function(e){return ia([this.x,this.y],e)};var Ko=1,Qo=.25,ds=.046875,As=.01953125,ms=.01068115234375,$o=.75,tr=.46875,er=.013020833333333334,ir=.007120768229166667,sr=.3645833333333333,ar=.005696614583333333,nr=.3076171875;function oa(e){var t=[];t[0]=Ko-e*(Qo+e*(ds+e*(As+e*ms))),t[1]=e*($o-e*(ds+e*(As+e*ms)));var i=e*e;return t[2]=i*(tr-e*(er+e*ir)),i*=e,t[3]=i*(sr-e*ar),t[4]=i*e*nr,t}function ti(e,t,i,s){return i*=t,t*=t,s[0]*e-i*(s[1]+t*(s[2]+t*(s[3]+t*s[4])))}var or=20;function ra(e,t,i){for(var s=1/(1-t),a=e,n=or;n;--n){var r=Math.sin(a),l=1-t*r*r;if(l=(ti(a,r,Math.cos(a),i)-e)*(l*Math.sqrt(l))*s,a-=l,Math.abs(l)<O)return a}return a}function rr(){this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.es&&(this.en=oa(this.es),this.ml0=ti(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function lr(e){var t=e.x,i=e.y,s=k(t-this.long0),a,n,r,l=Math.sin(i),h=Math.cos(i);if(this.es){var d=h*s,g=Math.pow(d,2),u=this.ep2*Math.pow(h,2),f=Math.pow(u,2),m=Math.abs(h)>O?Math.tan(i):0,C=Math.pow(m,2),v=Math.pow(C,2);a=1-this.es*Math.pow(l,2),d=d/Math.sqrt(a);var I=ti(i,l,h,this.en);n=this.a*(this.k0*d*(1+g/6*(1-C+u+g/20*(5-18*C+v+14*u-58*C*u+g/42*(61+179*v-v*C-479*C)))))+this.x0,r=this.a*(this.k0*(I-this.ml0+l*s*d/2*(1+g/12*(5-C+9*u+4*f+g/30*(61+v-58*C+270*u-330*C*u+g/56*(1385+543*v-v*C-3111*C))))))+this.y0}else{var c=h*Math.sin(s);if(Math.abs(Math.abs(c)-1)<O)return 93;if(n=.5*this.a*this.k0*Math.log((1+c)/(1-c))+this.x0,r=h*Math.cos(s)/Math.sqrt(1-Math.pow(c,2)),c=Math.abs(r),c>=1){if(c-1>O)return 93;r=0}else r=Math.acos(r);i<0&&(r=-r),r=this.a*this.k0*(r-this.lat0)+this.y0}return e.x=n,e.y=r,e}function hr(e){var t,i,s,a,n=(e.x-this.x0)*(1/this.a),r=(e.y-this.y0)*(1/this.a);if(this.es)if(t=this.ml0+r/this.k0,i=ra(t,this.es,this.en),Math.abs(i)<w){var g=Math.sin(i),u=Math.cos(i),f=Math.abs(u)>O?Math.tan(i):0,m=this.ep2*Math.pow(u,2),C=Math.pow(m,2),v=Math.pow(f,2),I=Math.pow(v,2);t=1-this.es*Math.pow(g,2);var b=n*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*f,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*v-9*m*v+m-4*C-M/30*(61+90*v-252*m*v+45*I+46*m-M/56*(1385+3633*v+4095*I+1574*I*v)))),a=k(this.long0+b*(1-M/6*(1+2*v+m-M/20*(5+28*v+24*I+8*m*v+6*m-M/42*(61+662*v+1320*I+720*I*v))))/u)}else s=w*Me(r),a=0;else{var l=Math.exp(n/this.k0),h=.5*(l-1/l),c=this.lat0+r/this.k0,d=Math.cos(c);t=Math.sqrt((1-Math.pow(d,2))/(1+Math.pow(h,2))),s=Math.asin(t),r<0&&(s=-s),h===0&&d===0?a=0:a=k(Math.atan2(h,d)+this.long0)}return e.x=a,e.y=s,e}var cr=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const Ve={init:rr,forward:lr,inverse:hr,names:cr};function la(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function mt(e,t){e=Math.abs(e),t=Math.abs(t);var i=Math.max(e,t),s=Math.min(e,t)/(i||1);return i*Math.sqrt(1+Math.pow(s,2))}function gr(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function ur(e){var t=Math.abs(e);return t=gr(t*(1+t/(mt(1,t)+1))),e<0?-t:t}function Fi(e,t){for(var i=2*Math.cos(2*t),s=e.length-1,a=e[s],n=0,r;--s>=0;)r=-n+i*a+e[s],n=a,a=r;return t+r*Math.sin(2*t)}function dr(e,t){for(var i=2*Math.cos(t),s=e.length-1,a=e[s],n=0,r;--s>=0;)r=-n+i*a+e[s],n=a,a=r;return Math.sin(t)*r}function Ar(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function ha(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),n=la(i),r=Ar(i),l=2*a*r,h=-2*s*n,c=e.length-1,d=e[c],g=0,u=0,f=0,m,C;--c>=0;)m=u,C=g,u=d,g=f,d=-m+l*u-h*g+e[c],f=-C+h*u+l*g;return l=s*r,h=a*n,[l*d-h*f,l*f+h*d]}function mr(){if(!this.approx&&(isNaN(this.es)||this.es<=0))throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');this.approx&&(Ve.init.apply(this),this.forward=Ve.forward,this.inverse=Ve.inverse),this.x0=this.x0!==void 0?this.x0:0,this.y0=this.y0!==void 0?this.y0:0,this.long0=this.long0!==void 0?this.long0:0,this.lat0=this.lat0!==void 0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var e=this.es/(1+Math.sqrt(1-this.es)),t=e/(2-e),i=t;this.cgb[0]=t*(2+t*(-2/3+t*(-2+t*(116/45+t*(26/45+t*(-2854/675)))))),this.cbg[0]=t*(-2+t*(2/3+t*(4/3+t*(-82/45+t*(32/45+t*(4642/4725)))))),i=i*t,this.cgb[1]=i*(7/3+t*(-8/5+t*(-227/45+t*(2704/315+t*(2323/945))))),this.cbg[1]=i*(5/3+t*(-16/15+t*(-13/9+t*(904/315+t*(-1522/945))))),i=i*t,this.cgb[2]=i*(56/15+t*(-136/35+t*(-1262/105+t*(73814/2835)))),this.cbg[2]=i*(-26/15+t*(34/21+t*(8/5+t*(-12686/2835)))),i=i*t,this.cgb[3]=i*(4279/630+t*(-332/35+t*(-399572/14175))),this.cbg[3]=i*(1237/630+t*(-12/5+t*(-24832/14175))),i=i*t,this.cgb[4]=i*(4174/315+t*(-144838/6237)),this.cbg[4]=i*(-734/315+t*(109598/31185)),i=i*t,this.cgb[5]=i*(601676/22275),this.cbg[5]=i*(444337/155925),i=Math.pow(t,2),this.Qn=this.k0/(1+t)*(1+i*(1/4+i*(1/64+i/256))),this.utg[0]=t*(-.5+t*(2/3+t*(-37/96+t*(1/360+t*(81/512+t*(-96199/604800)))))),this.gtu[0]=t*(.5+t*(-2/3+t*(5/16+t*(41/180+t*(-127/288+t*(7891/37800)))))),this.utg[1]=i*(-1/48+t*(-1/15+t*(437/1440+t*(-46/105+t*(1118711/3870720))))),this.gtu[1]=i*(13/48+t*(-3/5+t*(557/1440+t*(281/630+t*(-1983433/1935360))))),i=i*t,this.utg[2]=i*(-17/480+t*(37/840+t*(209/4480+t*(-5569/90720)))),this.gtu[2]=i*(61/240+t*(-103/140+t*(15061/26880+t*(167603/181440)))),i=i*t,this.utg[3]=i*(-4397/161280+t*(11/504+t*(830251/7257600))),this.gtu[3]=i*(49561/161280+t*(-179/168+t*(6601661/7257600))),i=i*t,this.utg[4]=i*(-4583/161280+t*(108847/3991680)),this.gtu[4]=i*(34729/80640+t*(-3418889/1995840)),i=i*t,this.utg[5]=i*(-20648693/638668800),this.gtu[5]=i*(212378941/319334400);var s=Fi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+dr(this.gtu,2*s))}function Cr(e){var t=k(e.x-this.long0),i=e.y;i=Fi(this.cbg,i);var s=Math.sin(i),a=Math.cos(i),n=Math.sin(t),r=Math.cos(t);i=Math.atan2(s,r*a),t=Math.atan2(n*a,mt(s,a*r)),t=ur(Math.tan(t));var l=ha(this.gtu,2*i,2*t);i=i+l[0],t=t+l[1];var h,c;return Math.abs(t)<=2.623395162778?(h=this.a*(this.Qn*t)+this.x0,c=this.a*(this.Qn*i+this.Zb)+this.y0):(h=1/0,c=1/0),e.x=h,e.y=c,e}function fr(e){var t=(e.x-this.x0)*(1/this.a),i=(e.y-this.y0)*(1/this.a);i=(i-this.Zb)/this.Qn,t=t/this.Qn;var s,a;if(Math.abs(t)<=2.623395162778){var n=ha(this.utg,2*i,2*t);i=i+n[0],t=t+n[1],t=Math.atan(la(t));var r=Math.sin(i),l=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(r*c,mt(h,c*l)),t=Math.atan2(h,c*l),s=k(t+this.long0),a=Fi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Ir=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const Re={init:mr,forward:Cr,inverse:fr,names:Ir};function pr(e,t){if(e===void 0){if(e=Math.floor((k(t)+Math.PI)*30/Math.PI)+1,e<0)return 0;if(e>60)return 60}return e}var vr="etmerc";function yr(){var e=pr(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*J,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Re.init.apply(this),this.forward=Re.forward,this.inverse=Re.inverse}var br=["Universal Transverse Mercator System","utm"];const Mr={init:yr,names:br,dependsOn:vr};function Ui(e,t){return Math.pow((1-e)/(1+e),t)}var wr=20;function Er(){var e=Math.sin(this.lat0),t=Math.cos(this.lat0);t*=t,this.rc=Math.sqrt(1-this.es)/(1-this.es*e*e),this.C=Math.sqrt(1+this.es*t*t/(1-this.es)),this.phic0=Math.asin(e/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+R)/(Math.pow(Math.tan(.5*this.lat0+R),this.C)*Ui(this.e*e,this.ratexp))}function _r(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+R),this.C)*Ui(this.e*Math.sin(i),this.ratexp))-w,e.x=this.C*t,e}function Or(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+R)/this.K,1/this.C),n=wr;n>0&&(s=2*Math.atan(a*Ui(this.e*Math.sin(e.y),-.5*this.e))-w,!(Math.abs(s-e.y)<t));--n)e.y=s;return n?(e.x=i,e.y=s,e):null}const zi={init:Er,forward:_r,inverse:Or};function xr(){zi.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))}function kr(e){var t,i,s,a;return e.x=k(e.x-this.long0),zi.forward.apply(this,[e]),t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a=this.k0*this.R2/(1+this.sinc0*t+this.cosc0*i*s),e.x=a*i*Math.sin(e.x),e.y=a*(this.cosc0*t-this.sinc0*i*s),e.x=this.a*e.x+this.x0,e.y=this.a*e.y+this.y0,e}function Sr(e){var t,i,s,a,n;if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,n=Math.sqrt(e.x*e.x+e.y*e.y)){var r=2*Math.atan2(n,this.R2);t=Math.sin(r),i=Math.cos(r),a=Math.asin(i*this.sinc0+e.y*t*this.cosc0/n),s=Math.atan2(e.x*t,n*this.cosc0*i-e.y*this.sinc0*t)}else a=this.phic0,s=0;return e.x=s,e.y=a,zi.inverse.apply(this,[e]),e.x=k(e.x+this.long0),e}var Nr=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const Lr={init:xr,forward:kr,inverse:Sr,names:Nr};function Pr(e,t,i){return t*=i,Math.tan(.5*(w+e))*Math.pow((1-t)/(1+t),.5*i)}function Tr(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*(1+Me(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=O&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=O&&(this.k0=.5*this.cons*yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/Ct(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=yt(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-w,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function Dr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),n,r,l,h,c,d,g=k(t-this.long0);return Math.abs(Math.abs(t-this.long0)-Math.PI)<=O&&Math.abs(i+this.lat0)<=O?(e.x=NaN,e.y=NaN,e):this.sphere?(n=2*this.k0/(1+this.sinlat0*s+this.coslat0*a*Math.cos(g)),e.x=this.a*n*a*Math.sin(g)+this.x0,e.y=this.a*n*(this.coslat0*s-this.sinlat0*a*Math.cos(g))+this.y0,e):(r=2*Math.atan(this.ssfn_(i,s,this.e))-w,h=Math.cos(r),l=Math.sin(r),Math.abs(this.coslat0)<=O?(c=Ct(this.e,i*this.con,this.con*s),d=2*this.a*this.k0*c/this.cons,e.x=this.x0+d*Math.sin(t-this.long0),e.y=this.y0-this.con*d*Math.cos(t-this.long0),e):(Math.abs(this.sinlat0)<O?(n=2*this.a*this.k0/(1+h*Math.cos(g)),e.y=n*l):(n=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*l+this.cosX0*h*Math.cos(g))),e.y=n*(this.cosX0*l-this.sinX0*h*Math.cos(g))+this.y0),e.x=n*h*Math.sin(g)+this.x0,e))}function Br(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,n,r=Math.sqrt(e.x*e.x+e.y*e.y);if(this.sphere){var l=2*Math.atan(r/(2*this.a*this.k0));return t=this.long0,i=this.lat0,r<=O?(e.x=t,e.y=i,e):(i=Math.asin(Math.cos(l)*this.sinlat0+e.y*Math.sin(l)*this.coslat0/r),Math.abs(this.coslat0)<O?this.lat0>0?t=k(this.long0+Math.atan2(e.x,-1*e.y)):t=k(this.long0+Math.atan2(e.x,e.y)):t=k(this.long0+Math.atan2(e.x*Math.sin(l),r*this.coslat0*Math.cos(l)-e.y*this.sinlat0*Math.sin(l))),e.x=t,e.y=i,e)}else if(Math.abs(this.coslat0)<=O){if(r<=O)return i=this.lat0,t=this.long0,e.x=t,e.y=i,e;e.x*=this.con,e.y*=this.con,s=r*this.cons/(2*this.a*this.k0),i=this.con*ye(this.e,s),t=this.con*k(this.con*this.long0+Math.atan2(e.x,-1*e.y))}else a=2*Math.atan(r*this.cosX0/(2*this.a*this.k0*this.ms1)),t=this.long0,r<=O?n=this.X0:(n=Math.asin(Math.cos(a)*this.sinX0+e.y*Math.sin(a)*this.cosX0/r),t=k(this.long0+Math.atan2(e.x*Math.sin(a),r*this.cosX0*Math.cos(a)-e.y*this.sinX0*Math.sin(a)))),i=-1*ye(this.e,Math.tan(.5*(w+n)));return e.x=t,e.y=i,e}var Vr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const Rr={init:Tr,forward:Dr,inverse:Br,names:Vr,ssfn_:Pr};function Fr(){var e=this.lat0;this.lambda0=this.long0;var t=Math.sin(e),i=this.a,s=this.rf,a=1/s,n=2*a-Math.pow(a,2),r=this.e=Math.sqrt(n);this.R=this.k0*i*Math.sqrt(1-n)/(1-n*Math.pow(t,2)),this.alpha=Math.sqrt(1+n/(1-n)*Math.pow(Math.cos(e),4)),this.b0=Math.asin(t/this.alpha);var l=Math.log(Math.tan(Math.PI/4+this.b0/2)),h=Math.log(Math.tan(Math.PI/4+e/2)),c=Math.log((1+r*t)/(1-r*t));this.K=l-this.alpha*h+this.alpha*r/2*c}function Ur(e){var t=Math.log(Math.tan(Math.PI/4-e.y/2)),i=this.e/2*Math.log((1+this.e*Math.sin(e.y))/(1-this.e*Math.sin(e.y))),s=-this.alpha*(t+i)+this.K,a=2*(Math.atan(Math.exp(s))-Math.PI/4),n=this.alpha*(e.x-this.lambda0),r=Math.atan(Math.sin(n)/(Math.sin(this.b0)*Math.tan(a)+Math.cos(this.b0)*Math.cos(n))),l=Math.asin(Math.cos(this.b0)*Math.sin(a)-Math.sin(this.b0)*Math.cos(a)*Math.cos(n));return e.y=this.R/2*Math.log((1+Math.sin(l))/(1-Math.sin(l)))+this.y0,e.x=this.R*r+this.x0,e}function zr(e){for(var t=e.x-this.x0,i=e.y-this.y0,s=t/this.R,a=2*(Math.atan(Math.exp(i/this.R))-Math.PI/4),n=Math.asin(Math.cos(this.b0)*Math.sin(a)+Math.sin(this.b0)*Math.cos(a)*Math.cos(s)),r=Math.atan(Math.sin(s)/(Math.cos(this.b0)*Math.cos(s)-Math.sin(this.b0)*Math.tan(a))),l=this.lambda0+r/this.alpha,h=0,c=n,d=-1e3,g=0;Math.abs(c-d)>1e-7;){if(++g>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+n/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(c))/2)),d=c,c=2*Math.atan(Math.exp(h))-Math.PI/2}return e.x=l,e.y=c,e}var jr=["somerc"];const Gr={init:Fr,forward:Ur,inverse:zr,names:jr};var Zt=1e-7;function Hr(e){var t=["Hotine_Oblique_Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin"],i=typeof e.PROJECTION=="object"?Object.keys(e.PROJECTION)[0]:e.PROJECTION;return"no_uoff"in e||"no_off"in e||t.indexOf(i)!==-1}function Zr(){var e,t,i,s,a,n,r,l,h,c,d=0,g,u=0,f=0,m=0,C=0,v=0,I=0;this.no_off=Hr(this),this.no_rot="no_rot"in this;var b=!1;"alpha"in this&&(b=!0);var M=!1;if("rectified_grid_angle"in this&&(M=!0),b&&(I=this.alpha),M&&(d=this.rectified_grid_angle*J),b||M)u=this.longc;else if(f=this.long1,C=this.lat1,m=this.long2,v=this.lat2,Math.abs(C-v)<=Zt||(e=Math.abs(C))<=Zt||Math.abs(e-w)<=Zt||Math.abs(Math.abs(this.lat0)-w)<=Zt||Math.abs(Math.abs(v)-w)<=Zt)throw new Error;var _=1-this.es;t=Math.sqrt(_),Math.abs(this.lat0)>O?(l=Math.sin(this.lat0),i=Math.cos(this.lat0),e=1-this.es*l*l,this.B=i*i,this.B=Math.sqrt(1+this.es*this.B*this.B/_),this.A=this.B*this.k0*t/e,s=this.B*t/(i*Math.sqrt(e)),a=s*s-1,a<=0?a=0:(a=Math.sqrt(a),this.lat0<0&&(a=-a)),this.E=a+=s,this.E*=Math.pow(Ct(this.e,this.lat0,l),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(g=Math.asin(Math.sin(I)/s),M||(d=I)):(g=d,I=Math.asin(s*Math.sin(g))),this.lam0=u-Math.asin(.5*(a-1/a)*Math.tan(g))/this.B):(n=Math.pow(Ct(this.e,C,Math.sin(C)),this.B),r=Math.pow(Ct(this.e,v,Math.sin(v)),this.B),a=this.E/n,h=(r-n)/(r+n),c=this.E*this.E,c=(c-r*n)/(c+r*n),e=f-m,e<-Math.pi?m-=pe:e>Math.pi&&(m+=pe),this.lam0=k(.5*(f+m)-Math.atan(c*Math.tan(.5*this.B*(f-m))/h)/this.B),g=Math.atan(2*Math.sin(this.B*k(f-this.lam0))/(a-1/a)),d=I=Math.asin(s*Math.sin(g))),this.singam=Math.sin(g),this.cosgam=Math.cos(g),this.sinrot=Math.sin(d),this.cosrot=Math.cos(d),this.rB=1/this.B,this.ArB=this.A*this.rB,this.BrA=1/this.ArB,this.A*this.B,this.no_off?this.u_0=0:(this.u_0=Math.abs(this.ArB*Math.atan(Math.sqrt(s*s-1)/Math.cos(I))),this.lat0<0&&(this.u_0=-this.u_0)),a=.5*g,this.v_pole_n=this.ArB*Math.log(Math.tan(R-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(R+a))}function Wr(e){var t={},i,s,a,n,r,l,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-w)>O){if(r=this.E/Math.pow(Ct(this.e,e.y,Math.sin(e.y)),this.B),l=1/r,i=.5*(r-l),s=.5*(r+l),n=Math.sin(this.B*e.x),a=(i*this.singam-n*this.cosgam)/s,Math.abs(Math.abs(a)-1)<O)throw new Error;c=.5*this.ArB*Math.log((1-a)/(1+a)),l=Math.cos(this.B*e.x),Math.abs(l)<Zt?h=this.A*e.x:h=this.ArB*Math.atan2(i*this.cosgam+n*this.singam,l)}else c=e.y>0?this.v_pole_n:this.v_pole_s,h=this.ArB*e.y;return this.no_rot?(t.x=h,t.y=c):(h-=this.u_0,t.x=c*this.cosrot+h*this.sinrot,t.y=h*this.cosrot-c*this.sinrot),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t}function qr(e){var t,i,s,a,n,r,l,h={};if(e.x=(e.x-this.x0)*(1/this.a),e.y=(e.y-this.y0)*(1/this.a),this.no_rot?(i=e.y,t=e.x):(i=e.x*this.cosrot-e.y*this.sinrot,t=e.y*this.cosrot+e.x*this.sinrot+this.u_0),s=Math.exp(-this.BrA*i),a=.5*(s-1/s),n=.5*(s+1/s),r=Math.sin(this.BrA*t),l=(r*this.cosgam+a*this.singam)/n,Math.abs(Math.abs(l)-1)<O)h.x=0,h.y=l<0?-w:w;else{if(h.y=this.E/Math.sqrt((1+l)/(1-l)),h.y=ye(this.e,Math.pow(h.y,1/this.B)),h.y===1/0)throw new Error;h.x=-this.rB*Math.atan2(a*this.cosgam-r*this.singam,Math.cos(this.BrA*t))}return h.x+=this.lam0,h}var Yr=["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Two_Point_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","Oblique_Mercator","omerc"];const Jr={init:Zr,forward:Wr,inverse:qr,names:Yr};function Xr(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<O)){var e=this.b/this.a;this.e=Math.sqrt(1-e*e);var t=Math.sin(this.lat1),i=Math.cos(this.lat1),s=yt(this.e,t,i),a=Ct(this.e,this.lat1,t),n=Math.sin(this.lat2),r=Math.cos(this.lat2),l=yt(this.e,n,r),h=Ct(this.e,this.lat2,n),c=Ct(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>O?this.ns=Math.log(s/l)/Math.log(a/h):this.ns=t,isNaN(this.ns)&&(this.ns=t),this.f0=s/(this.ns*Math.pow(a,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}}function Kr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=O&&(i=Me(i)*(w-2*O));var s=Math.abs(Math.abs(i)-w),a,n;if(s>O)a=Ct(this.e,i,Math.sin(i)),n=this.a*this.f0*Math.pow(a,this.ns);else{if(s=i*this.ns,s<=0)return null;n=0}var r=this.ns*k(t-this.long0);return e.x=this.k0*(n*Math.sin(r))+this.x0,e.y=this.k0*(this.rh-n*Math.cos(r))+this.y0,e}function Qr(e){var t,i,s,a,n,r=(e.x-this.x0)/this.k0,l=this.rh-(e.y-this.y0)/this.k0;this.ns>0?(t=Math.sqrt(r*r+l*l),i=1):(t=-Math.sqrt(r*r+l*l),i=-1);var h=0;if(t!==0&&(h=Math.atan2(i*r,i*l)),t!==0||this.ns>0){if(i=1/this.ns,s=Math.pow(t/(this.a*this.f0),i),a=ye(this.e,s),a===-9999)return null}else a=-w;return n=k(h/this.ns+this.long0),e.x=n,e.y=a,e}var $r=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_1SP","Lambert_Conformal_Conic_2SP","lcc","Lambert Conic Conformal (1SP)","Lambert Conic Conformal (2SP)"];const tl={init:Xr,forward:Kr,inverse:Qr,names:$r};function el(){this.a=6377397155e-3,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.7417649320975901-.308341501185665),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq}function il(e){var t,i,s,a,n,r,l,h=e.x,c=e.y,d=k(h-this.long0);return t=Math.pow((1+this.e*Math.sin(c))/(1-this.e*Math.sin(c)),this.alfa*this.e/2),i=2*(Math.atan(this.k*Math.pow(Math.tan(c/2+this.s45),this.alfa)/t)-this.s45),s=-d*this.alfa,a=Math.asin(Math.cos(this.ad)*Math.sin(i)+Math.sin(this.ad)*Math.cos(i)*Math.cos(s)),n=Math.asin(Math.cos(i)*Math.sin(s)/Math.cos(a)),r=this.n*n,l=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(a/2+this.s45),this.n),e.y=l*Math.cos(r)/1,e.x=l*Math.sin(r)/1,this.czech||(e.y*=-1,e.x*=-1),e}function sl(e){var t,i,s,a,n,r,l,h,c=e.x;e.x=e.y,e.y=c,this.czech||(e.y*=-1,e.x*=-1),r=Math.sqrt(e.x*e.x+e.y*e.y),n=Math.atan2(e.y,e.x),a=n/Math.sin(this.s0),s=2*(Math.atan(Math.pow(this.ro0/r,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),t=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(a)),i=Math.asin(Math.cos(s)*Math.sin(a)/Math.cos(t)),e.x=this.long0-i/this.alfa,l=t,h=0;var d=0;do e.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(t/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(l))/(1-this.e*Math.sin(l)),this.e/2))-this.s45),Math.abs(l-e.y)<1e-10&&(h=1),l=e.y,d+=1;while(h===0&&d<15);return d>=15?null:e}var al=["Krovak","krovak"];const nl={init:el,forward:il,inverse:sl,names:al};function tt(e,t,i,s,a){return e*a-t*Math.sin(2*a)+i*Math.sin(4*a)-s*Math.sin(6*a)}function we(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function Ee(e){return .375*e*(1+.25*e*(1+.46875*e))}function _e(e){return .05859375*e*e*(1+.75*e)}function Oe(e){return e*e*e*(35/3072)}function ee(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function se(e){return Math.abs(e)<w?e:e-Me(e)*Math.PI}function Ye(e,t,i,s,a){var n,r;n=e/t;for(var l=0;l<15;l++)if(r=(e-(t*n-i*Math.sin(2*n)+s*Math.sin(4*n)-a*Math.sin(6*n)))/(t-2*i*Math.cos(2*n)+4*s*Math.cos(4*n)-6*a*Math.cos(6*n)),n+=r,Math.abs(r)<=1e-10)return n;return NaN}function ol(){this.sphere||(this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0))}function rl(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere)t=this.a*Math.asin(Math.cos(a)*Math.sin(s)),i=this.a*(Math.atan2(Math.tan(a),Math.cos(s))-this.lat0);else{var n=Math.sin(a),r=Math.cos(a),l=ee(this.a,this.e,n),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),d=c*c,g=this.es*r*r/(1-this.es),u=this.a*tt(this.e0,this.e1,this.e2,this.e3,a);t=l*c*(1-d*h*(1/6-(8-h+8*g)*d/120)),i=u-this.ml0+l*n/r*d*(.5+(5-h+6*g)*d/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function ll(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a;if(this.sphere){var n=i+this.lat0;s=Math.asin(Math.sin(n)*Math.cos(t)),a=Math.atan2(Math.tan(t),Math.cos(n))}else{var r=this.ml0/this.a+i,l=Ye(r,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(l)-w)<=O)return e.x=this.long0,e.y=w,i<0&&(e.y*=-1),e;var h=ee(this.a,this.e,Math.sin(l)),c=h*h*h/this.a/this.a*(1-this.es),d=Math.pow(Math.tan(l),2),g=t*this.a/h,u=g*g;s=l-h*Math.tan(l)/c*g*g*(.5-(1+3*d)*g*g/24),a=g*(1-u*(d/3+(1+3*d)*d*u/15))/Math.cos(l)}return e.x=k(a+this.long0),e.y=se(s),e}var hl=["Cassini","Cassini_Soldner","cass"];const cl={init:ol,forward:rl,inverse:ll,names:hl};function _t(e,t){var i;return e>1e-7?(i=e*t,(1-e*e)*(t/(1-i*i)-.5/e*Math.log((1-i)/(1+i)))):2*t}var gl=1,ul=2,dl=3,Al=4;function ml(){var e=Math.abs(this.lat0);if(Math.abs(e-w)<O?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<O?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var t;switch(this.qp=_t(this.e,1),this.mmf=.5/(1-this.es),this.apa=wl(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=_t(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd;break}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))}function Cl(e){var t,i,s,a,n,r,l,h,c,d,g=e.x,u=e.y;if(g=k(g-this.long0),this.sphere){if(n=Math.sin(u),d=Math.cos(u),s=Math.cos(g),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(i=this.mode===this.EQUIT?1+d*s:1+this.sinph0*n+this.cosph0*d*s,i<=O)return null;i=Math.sqrt(2/i),t=i*d*Math.sin(g),i*=this.mode===this.EQUIT?n:this.cosph0*n-this.sinph0*d*s}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(s=-s),Math.abs(u+this.lat0)<O)return null;i=R-u*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(g),i*=s}}else{switch(l=0,h=0,c=0,s=Math.cos(g),a=Math.sin(g),n=Math.sin(u),r=_t(this.e,n),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(l=r/this.qp,h=Math.sqrt(1-l*l)),this.mode){case this.OBLIQ:c=1+this.sinb1*l+this.cosb1*h*s;break;case this.EQUIT:c=1+h*s;break;case this.N_POLE:c=w+u,r=this.qp-r;break;case this.S_POLE:c=u-w,r=this.qp+r;break}if(Math.abs(c)<O)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:c=Math.sqrt(2/c),this.mode===this.OBLIQ?i=this.ymf*c*(this.cosb1*l-this.sinb1*h*s):i=(c=Math.sqrt(2/(1+h*s)))*l*this.ymf,t=this.xmf*c*h*a;break;case this.N_POLE:case this.S_POLE:r>=0?(t=(c=Math.sqrt(r))*a,i=s*(this.mode===this.S_POLE?c:-c)):t=i=0;break}}return e.x=this.a*t+this.x0,e.y=this.a*i+this.y0,e}function fl(e){e.x-=this.x0,e.y-=this.y0;var t=e.x/this.a,i=e.y/this.a,s,a,n,r,l,h,c;if(this.sphere){var d=0,g,u=0;if(g=Math.sqrt(t*t+i*i),a=g*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(u=Math.sin(a),d=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(g)<=O?0:Math.asin(i*u/g),t*=u,i=d*g;break;case this.OBLIQ:a=Math.abs(g)<=O?this.lat0:Math.asin(d*this.sinph0+i*u*this.cosph0/g),t*=u*this.cosph0,i=(d-Math.sin(a)*this.sinph0)*g;break;case this.N_POLE:i=-i,a=w-a;break;case this.S_POLE:a-=w;break}s=i===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(t,i)}else{if(c=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(t/=this.dd,i*=this.dd,h=Math.sqrt(t*t+i*i),h<O)return e.x=this.long0,e.y=this.lat0,e;r=2*Math.asin(.5*h/this.rq),n=Math.cos(r),t*=r=Math.sin(r),this.mode===this.OBLIQ?(c=n*this.sinb1+i*r*this.cosb1/h,l=this.qp*c,i=h*this.cosb1*n-i*this.sinb1*r):(c=i*r/h,l=this.qp*c,i=h*n)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),l=t*t+i*i,!l)return e.x=this.long0,e.y=this.lat0,e;c=1-l/this.qp,this.mode===this.S_POLE&&(c=-c)}s=Math.atan2(t,i),a=El(Math.asin(c),this.apa)}return e.x=k(this.long0+s),e.y=a,e}var Il=.3333333333333333,pl=.17222222222222222,vl=.10257936507936508,yl=.06388888888888888,bl=.0664021164021164,Ml=.016415012942191543;function wl(e){var t,i=[];return i[0]=e*Il,t=e*e,i[0]+=t*pl,i[1]=t*yl,t*=e,i[0]+=t*vl,i[1]+=t*bl,i[2]=t*Ml,i}function El(e,t){var i=e+e;return e+t[0]*Math.sin(i)+t[1]*Math.sin(i+i)+t[2]*Math.sin(i+i+i)}var _l=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const Ol={init:ml,forward:Cl,inverse:fl,names:_l,S_POLE:gl,N_POLE:ul,EQUIT:dl,OBLIQ:Al};function xt(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function xl(){Math.abs(this.lat1+this.lat2)<O||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=yt(this.e3,this.sin_po,this.cos_po),this.qs1=_t(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=yt(this.e3,this.sin_po,this.cos_po),this.qs2=_t(this.e3,this.sin_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=_t(this.e3,this.sin_po),Math.abs(this.lat1-this.lat2)>O?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)}function kl(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=_t(this.e3,this.sin_phi),a=this.a*Math.sqrt(this.c-this.ns0*s)/this.ns0,n=this.ns0*k(t-this.long0),r=a*Math.sin(n)+this.x0,l=this.rh-a*Math.cos(n)+this.y0;return e.x=r,e.y=l,e}function Sl(e){var t,i,s,a,n,r;return e.x-=this.x0,e.y=this.rh-e.y+this.y0,this.ns0>=0?(t=Math.sqrt(e.x*e.x+e.y*e.y),s=1):(t=-Math.sqrt(e.x*e.x+e.y*e.y),s=-1),a=0,t!==0&&(a=Math.atan2(s*e.x,s*e.y)),s=t*this.ns0/this.a,this.sphere?r=Math.asin((this.c-s*s)/(2*this.ns0)):(i=(this.c-s*s)/this.ns0,r=this.phi1z(this.e3,i)),n=k(a/this.ns0+this.long0),e.x=n,e.y=r,e}function Nl(e,t){var i,s,a,n,r,l=xt(.5*t);if(e<O)return l;for(var h=e*e,c=1;c<=25;c++)if(i=Math.sin(l),s=Math.cos(l),a=e*i,n=1-a*a,r=.5*n*n/s*(t/(1-h)-i/n+.5/e*Math.log((1-a)/(1+a))),l=l+r,Math.abs(r)<=1e-7)return l;return null}var Ll=["Albers_Conic_Equal_Area","Albers","aea"];const Pl={init:xl,forward:kl,inverse:Sl,names:Ll,phi1z:Nl};function Tl(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function Dl(e){var t,i,s,a,n,r,l,h,c=e.x,d=e.y;return s=k(c-this.long0),t=Math.sin(d),i=Math.cos(d),a=Math.cos(s),r=this.sin_p14*t+this.cos_p14*i*a,n=1,r>0||Math.abs(r)<=O?(l=this.x0+this.a*n*i*Math.sin(s)/r,h=this.y0+this.a*n*(this.cos_p14*t-this.sin_p14*i*a)/r):(l=this.x0+this.infinity_dist*i*Math.sin(s),h=this.y0+this.infinity_dist*(this.cos_p14*t-this.sin_p14*i*a)),e.x=l,e.y=h,e}function Bl(e){var t,i,s,a,n,r;return e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,e.x/=this.k0,e.y/=this.k0,(t=Math.sqrt(e.x*e.x+e.y*e.y))?(a=Math.atan2(t,this.rc),i=Math.sin(a),s=Math.cos(a),r=xt(s*this.sin_p14+e.y*i*this.cos_p14/t),n=Math.atan2(e.x*i,t*this.cos_p14*s-e.y*this.sin_p14*i),n=k(this.long0+n)):(r=this.phic0,n=0),e.x=n,e.y=r,e}var Vl=["gnom"];const Rl={init:Tl,forward:Dl,inverse:Bl,names:Vl};function Fl(e,t){var i=1-(1-e*e)/(2*e)*Math.log((1-e)/(1+e));if(Math.abs(Math.abs(t)-i)<1e-6)return t<0?-1*w:w;for(var s=Math.asin(.5*t),a,n,r,l,h=0;h<30;h++)if(n=Math.sin(s),r=Math.cos(s),l=e*n,a=Math.pow(1-l*l,2)/(2*r)*(t/(1-e*e)-n/(1-l*l)+.5/e*Math.log((1-l)/(1+l))),s+=a,Math.abs(a)<=1e-10)return s;return NaN}function Ul(){this.sphere||(this.k0=yt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function zl(e){var t=e.x,i=e.y,s,a,n=k(t-this.long0);if(this.sphere)s=this.x0+this.a*n*Math.cos(this.lat_ts),a=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var r=_t(this.e,Math.sin(i));s=this.x0+this.a*this.k0*n,a=this.y0+this.a*r*.5/this.k0}return e.x=s,e.y=a,e}function jl(e){e.x-=this.x0,e.y-=this.y0;var t,i;return this.sphere?(t=k(this.long0+e.x/this.a/Math.cos(this.lat_ts)),i=Math.asin(e.y/this.a*Math.cos(this.lat_ts))):(i=Fl(this.e,2*e.y*this.k0/this.a),t=k(this.long0+e.x/(this.a*this.k0))),e.x=t,e.y=i,e}var Gl=["cea"];const Hl={init:Ul,forward:zl,inverse:jl,names:Gl};function Zl(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)}function Wl(e){var t=e.x,i=e.y,s=k(t-this.long0),a=se(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function ql(e){var t=e.x,i=e.y;return e.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=se(this.lat0+(i-this.y0)/this.a),e}var Yl=["Equirectangular","Equidistant_Cylindrical","eqc"];const Jl={init:Zl,forward:Wl,inverse:ql,names:Yl};var Cs=20;function Xl(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0)}function Kl(e){var t=e.x,i=e.y,s,a,n,r=k(t-this.long0);if(n=r*Math.sin(i),this.sphere)Math.abs(i)<=O?(s=this.a*r,a=-1*this.a*this.lat0):(s=this.a*Math.sin(n)/Math.tan(i),a=this.a*(se(i-this.lat0)+(1-Math.cos(n))/Math.tan(i)));else if(Math.abs(i)<=O)s=this.a*r,a=-1*this.ml0;else{var l=ee(this.a,this.e,Math.sin(i))/Math.tan(i);s=l*Math.sin(n),a=this.a*tt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+l*(1-Math.cos(n))}return e.x=s+this.x0,e.y=a+this.y0,e}function Ql(e){var t,i,s,a,n,r,l,h,c;if(s=e.x-this.x0,a=e.y-this.y0,this.sphere)if(Math.abs(a+this.a*this.lat0)<=O)t=k(s/this.a+this.long0),i=0;else{r=this.lat0+a/this.a,l=s*s/this.a/this.a+r*r,h=r;var d;for(n=Cs;n;--n)if(d=Math.tan(h),c=-1*(r*(h*d+1)-h-.5*(h*h+l)*d)/((h-r)/d-1),h+=c,Math.abs(c)<=O){i=h;break}t=k(this.long0+Math.asin(s*Math.tan(h)/this.a)/Math.sin(i))}else if(Math.abs(a+this.ml0)<=O)i=0,t=k(this.long0+s/this.a);else{r=(this.ml0+a)/this.a,l=s*s/this.a/this.a+r*r,h=r;var g,u,f,m,C;for(n=Cs;n;--n)if(C=this.e*Math.sin(h),g=Math.sqrt(1-C*C)*Math.tan(h),u=this.a*tt(this.e0,this.e1,this.e2,this.e3,h),f=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),m=u/this.a,c=(r*(g*m+1)-m-.5*g*(m*m+l))/(this.es*Math.sin(2*h)*(m*m+l-2*r*m)/(4*g)+(r-m)*(g*f-2/Math.sin(2*h))-f),h-=c,Math.abs(c)<=O){i=h;break}g=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=k(this.long0+Math.asin(s*g/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var $l=["Polyconic","poly"];const th={init:Xl,forward:Kl,inverse:Ql,names:$l};function eh(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013}function ih(e){var t,i=e.x,s=e.y,a=s-this.lat0,n=i-this.long0,r=a/Ie*1e-5,l=n,h=1,c=0;for(t=1;t<=10;t++)h=h*r,c=c+this.A[t]*h;var d=c,g=l,u=1,f=0,m,C,v=0,I=0;for(t=1;t<=6;t++)m=u*d-f*g,C=f*d+u*g,u=m,f=C,v=v+this.B_re[t]*u-this.B_im[t]*f,I=I+this.B_im[t]*u+this.B_re[t]*f;return e.x=I*this.a+this.x0,e.y=v*this.a+this.y0,e}function sh(e){var t,i=e.x,s=e.y,a=i-this.x0,n=s-this.y0,r=n/this.a,l=a/this.a,h=1,c=0,d,g,u=0,f=0;for(t=1;t<=6;t++)d=h*r-c*l,g=c*r+h*l,h=d,c=g,u=u+this.C_re[t]*h-this.C_im[t]*c,f=f+this.C_im[t]*h+this.C_re[t]*c;for(var m=0;m<this.iterations;m++){var C=u,v=f,I,b,M=r,_=l;for(t=2;t<=6;t++)I=C*u-v*f,b=v*u+C*f,C=I,v=b,M=M+(t-1)*(this.B_re[t]*C-this.B_im[t]*v),_=_+(t-1)*(this.B_im[t]*C+this.B_re[t]*v);C=1,v=0;var x=this.B_re[1],E=this.B_im[1];for(t=2;t<=6;t++)I=C*u-v*f,b=v*u+C*f,C=I,v=b,x=x+t*(this.B_re[t]*C-this.B_im[t]*v),E=E+t*(this.B_im[t]*C+this.B_re[t]*v);var S=x*x+E*E;u=(M*x+_*E)/S,f=(_*x-M*E)/S}var D=u,W=f,et=1,P=0;for(t=1;t<=9;t++)et=et*D,P=P+this.D[t]*et;var U=this.lat0+P*Ie*1e5,z=this.long0+W;return e.x=z,e.y=U,e}var ah=["New_Zealand_Map_Grid","nzmg"];const nh={init:eh,forward:ih,inverse:sh,names:ah};function oh(){}function rh(e){var t=e.x,i=e.y,s=k(t-this.long0),a=this.x0+this.a*s,n=this.y0+this.a*Math.log(Math.tan(Math.PI/4+i/2.5))*1.25;return e.x=a,e.y=n,e}function lh(e){e.x-=this.x0,e.y-=this.y0;var t=k(this.long0+e.x/this.a),i=2.5*(Math.atan(Math.exp(.8*e.y/this.a))-Math.PI/4);return e.x=t,e.y=i,e}var hh=["Miller_Cylindrical","mill"];const ch={init:oh,forward:rh,inverse:lh,names:hh};var gh=20;function uh(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=oa(this.es)}function dh(e){var t,i,s=e.x,a=e.y;if(s=k(s-this.long0),this.sphere){if(!this.m)a=this.n!==1?Math.asin(this.n*Math.sin(a)):a;else for(var n=this.n*Math.sin(a),r=gh;r;--r){var l=(this.m*a+Math.sin(a)-n)/(this.m+Math.cos(a));if(a-=l,Math.abs(l)<O)break}t=this.a*this.C_x*s*(this.m+Math.cos(a)),i=this.a*this.C_y*a}else{var h=Math.sin(a),c=Math.cos(a);i=this.a*ti(a,h,c,this.en),t=this.a*s*c/Math.sqrt(1-this.es*h*h)}return e.x=t,e.y=i,e}function Ah(e){var t,i,s,a;return e.x-=this.x0,s=e.x/this.a,e.y-=this.y0,t=e.y/this.a,this.sphere?(t/=this.C_y,s=s/(this.C_x*(this.m+Math.cos(t))),this.m?t=xt((this.m*t+Math.sin(t))/this.n):this.n!==1&&(t=xt(Math.sin(t)/this.n)),s=k(s+this.long0),t=se(t)):(t=ra(e.y/this.a,this.es,this.en),a=Math.abs(t),a<w?(a=Math.sin(t),i=this.long0+e.x*Math.sqrt(1-this.es*a*a)/(this.a*Math.cos(t)),s=k(i)):a-O<w&&(s=this.long0)),e.x=s,e.y=t,e}var mh=["Sinusoidal","sinu"];const Ch={init:uh,forward:dh,inverse:Ah,names:mh};function fh(){}function Ih(e){for(var t=e.x,i=e.y,s=k(t-this.long0),a=i,n=Math.PI*Math.sin(i);;){var r=-(a+Math.sin(a)-n)/(1+Math.cos(a));if(a+=r,Math.abs(r)<O)break}a/=2,Math.PI/2-Math.abs(i)<O&&(s=0);var l=.900316316158*this.a*s*Math.cos(a)+this.x0,h=1.4142135623731*this.a*Math.sin(a)+this.y0;return e.x=l,e.y=h,e}function ph(e){var t,i;e.x-=this.x0,e.y-=this.y0,i=e.y/(1.4142135623731*this.a),Math.abs(i)>.999999999999&&(i=.999999999999),t=Math.asin(i);var s=k(this.long0+e.x/(.900316316158*this.a*Math.cos(t)));s<-Math.PI&&(s=-Math.PI),s>Math.PI&&(s=Math.PI),i=(2*t+Math.sin(2*t))/Math.PI,Math.abs(i)>1&&(i=1);var a=Math.asin(i);return e.x=s,e.y=a,e}var vh=["Mollweide","moll"];const yh={init:fh,forward:Ih,inverse:ph,names:vh};function bh(){Math.abs(this.lat1+this.lat2)<O||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=we(this.es),this.e1=Ee(this.es),this.e2=_e(this.es),this.e3=Oe(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=yt(this.e,this.sinphi,this.cosphi),this.ml1=tt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<O?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=yt(this.e,this.sinphi,this.cosphi),this.ml2=tt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=tt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))}function Mh(e){var t=e.x,i=e.y,s;if(this.sphere)s=this.a*(this.g-i);else{var a=tt(this.e0,this.e1,this.e2,this.e3,i);s=this.a*(this.g-a)}var n=this.ns*k(t-this.long0),r=this.x0+s*Math.sin(n),l=this.y0+this.rh-s*Math.cos(n);return e.x=r,e.y=l,e}function wh(e){e.x-=this.x0,e.y=this.rh-e.y+this.y0;var t,i,s,a;this.ns>=0?(i=Math.sqrt(e.x*e.x+e.y*e.y),t=1):(i=-Math.sqrt(e.x*e.x+e.y*e.y),t=-1);var n=0;if(i!==0&&(n=Math.atan2(t*e.x,t*e.y)),this.sphere)return a=k(this.long0+n/this.ns),s=se(this.g-i/this.a),e.x=a,e.y=s,e;var r=this.g-i/this.a;return s=Ye(r,this.e0,this.e1,this.e2,this.e3),a=k(this.long0+n/this.ns),e.x=a,e.y=s,e}var Eh=["Equidistant_Conic","eqdc"];const _h={init:bh,forward:Mh,inverse:wh,names:Eh};function Oh(){this.R=this.a}function xh(e){var t=e.x,i=e.y,s=k(t-this.long0),a,n;Math.abs(i)<=O&&(a=this.x0+this.R*s,n=this.y0);var r=xt(2*Math.abs(i/Math.PI));(Math.abs(s)<=O||Math.abs(Math.abs(i)-w)<=O)&&(a=this.x0,i>=0?n=this.y0+Math.PI*this.R*Math.tan(.5*r):n=this.y0+Math.PI*this.R*-Math.tan(.5*r));var l=.5*Math.abs(Math.PI/s-s/Math.PI),h=l*l,c=Math.sin(r),d=Math.cos(r),g=d/(c+d-1),u=g*g,f=g*(2/c-1),m=f*f,C=Math.PI*this.R*(l*(g-m)+Math.sqrt(h*(g-m)*(g-m)-(m+h)*(u-m)))/(m+h);s<0&&(C=-C),a=this.x0+C;var v=h+g;return C=Math.PI*this.R*(f*v-l*Math.sqrt((m+h)*(h+1)-v*v))/(m+h),i>=0?n=this.y0+C:n=this.y0-C,e.x=a,e.y=n,e}function kh(e){var t,i,s,a,n,r,l,h,c,d,g,u,f;return e.x-=this.x0,e.y-=this.y0,g=Math.PI*this.R,s=e.x/g,a=e.y/g,n=s*s+a*a,r=-Math.abs(a)*(1+n),l=r-2*a*a+s*s,h=-2*r+1+2*a*a+n*n,f=a*a/h+(2*l*l*l/h/h/h-9*r*l/h/h)/27,c=(r-l*l/3/h)/h,d=2*Math.sqrt(-c/3),g=3*f/c/d,Math.abs(g)>1&&(g>=0?g=1:g=-1),u=Math.acos(g)/3,e.y>=0?i=(-d*Math.cos(u+Math.PI/3)-l/3/h)*Math.PI:i=-(-d*Math.cos(u+Math.PI/3)-l/3/h)*Math.PI,Math.abs(s)<O?t=this.long0:t=k(this.long0+Math.PI*(n-1+Math.sqrt(1+2*(s*s-a*a)+n*n))/2/s),e.x=t,e.y=i,e}var Sh=["Van_der_Grinten_I","VanDerGrinten","vandg"];const Nh={init:Oh,forward:xh,inverse:kh,names:Sh};function Lh(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function Ph(e){var t=e.x,i=e.y,s=Math.sin(e.y),a=Math.cos(e.y),n=k(t-this.long0),r,l,h,c,d,g,u,f,m,C,v,I,b,M,_,x,E,S,D,W,et,P,U;return this.sphere?Math.abs(this.sin_p12-1)<=O?(e.x=this.x0+this.a*(w-i)*Math.sin(n),e.y=this.y0-this.a*(w-i)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(e.x=this.x0+this.a*(w+i)*Math.sin(n),e.y=this.y0+this.a*(w+i)*Math.cos(n),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(n),x=Math.acos(S),E=x?x/Math.sin(x):1,e.x=this.x0+this.a*E*a*Math.sin(n),e.y=this.y0+this.a*E*(this.cos_p12*s-this.sin_p12*a*Math.cos(n)),e):(r=we(this.es),l=Ee(this.es),h=_e(this.es),c=Oe(this.es),Math.abs(this.sin_p12-1)<=O?(d=this.a*tt(r,l,h,c,w),g=this.a*tt(r,l,h,c,i),e.x=this.x0+(d-g)*Math.sin(n),e.y=this.y0-(d-g)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(d=this.a*tt(r,l,h,c,w),g=this.a*tt(r,l,h,c,i),e.x=this.x0+(d+g)*Math.sin(n),e.y=this.y0+(d+g)*Math.cos(n),e):(u=s/a,f=ee(this.a,this.e,this.sin_p12),m=ee(this.a,this.e,s),C=Math.atan((1-this.es)*u+this.es*f*this.sin_p12/(m*a)),v=Math.atan2(Math.sin(n),this.cos_p12*Math.tan(C)-this.sin_p12*Math.cos(n)),v===0?D=Math.asin(this.cos_p12*Math.sin(C)-this.sin_p12*Math.cos(C)):Math.abs(Math.abs(v)-Math.PI)<=O?D=-Math.asin(this.cos_p12*Math.sin(C)-this.sin_p12*Math.cos(C)):D=Math.asin(Math.sin(n)*Math.cos(C)/Math.sin(v)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(v)/Math.sqrt(1-this.es),M=I*b,_=b*b,W=D*D,et=W*D,P=et*D,U=P*D,x=f*D*(1-W*_*(1-_)/6+et/8*M*(1-2*_)+P/120*(_*(4-7*_)-3*I*I*(1-7*_))-U/48*M),e.x=this.x0+x*Math.sin(v),e.y=this.y0+x*Math.cos(v),e))}function Th(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,n,r,l,h,c,d,g,u,f,m,C,v,I,b,M,_,x,E,S,D;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*w*this.a?void 0:(i=t/this.a,s=Math.sin(i),a=Math.cos(i),n=this.long0,Math.abs(t)<=O?r=this.lat0:(r=xt(a*this.sin_p12+e.y*s*this.cos_p12/t),l=Math.abs(this.lat0)-w,Math.abs(l)<=O?this.lat0>=0?n=k(this.long0+Math.atan2(e.x,-e.y)):n=k(this.long0-Math.atan2(-e.x,e.y)):n=k(this.long0+Math.atan2(e.x*s,t*this.cos_p12*a-e.y*this.sin_p12*s))),e.x=n,e.y=r,e)):(h=we(this.es),c=Ee(this.es),d=_e(this.es),g=Oe(this.es),Math.abs(this.sin_p12-1)<=O?(u=this.a*tt(h,c,d,g,w),t=Math.sqrt(e.x*e.x+e.y*e.y),f=u-t,r=Ye(f/this.a,h,c,d,g),n=k(this.long0+Math.atan2(e.x,-1*e.y)),e.x=n,e.y=r,e):Math.abs(this.sin_p12+1)<=O?(u=this.a*tt(h,c,d,g,w),t=Math.sqrt(e.x*e.x+e.y*e.y),f=t-u,r=Ye(f/this.a,h,c,d,g),n=k(this.long0+Math.atan2(e.x,e.y)),e.x=n,e.y=r,e):(t=Math.sqrt(e.x*e.x+e.y*e.y),v=Math.atan2(e.x,e.y),m=ee(this.a,this.e,this.sin_p12),I=Math.cos(v),b=this.e*this.cos_p12*I,M=-b*b/(1-this.es),_=3*this.es*(1-M)*this.sin_p12*this.cos_p12*I/(1-this.es),x=t/m,E=x-M*(1+M)*Math.pow(x,3)/6-_*(1+3*M)*Math.pow(x,4)/24,S=1-M*E*E/2-x*E*E*E/6,C=Math.asin(this.sin_p12*Math.cos(E)+this.cos_p12*Math.sin(E)*I),n=k(this.long0+Math.asin(Math.sin(v)*Math.sin(E)/Math.cos(C))),D=Math.sin(C),r=Math.atan2((D-this.es*S*this.sin_p12)*Math.tan(C),D*(1-this.es)),e.x=n,e.y=r,e))}var Dh=["Azimuthal_Equidistant","aeqd"];const Bh={init:Lh,forward:Ph,inverse:Th,names:Dh};function Vh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function Rh(e){var t,i,s,a,n,r,l,h,c=e.x,d=e.y;return s=k(c-this.long0),t=Math.sin(d),i=Math.cos(d),a=Math.cos(s),r=this.sin_p14*t+this.cos_p14*i*a,n=1,(r>0||Math.abs(r)<=O)&&(l=this.a*n*i*Math.sin(s),h=this.y0+this.a*n*(this.cos_p14*t-this.sin_p14*i*a)),e.x=l,e.y=h,e}function Fh(e){var t,i,s,a,n,r,l;return e.x-=this.x0,e.y-=this.y0,t=Math.sqrt(e.x*e.x+e.y*e.y),i=xt(t/this.a),s=Math.sin(i),a=Math.cos(i),r=this.long0,Math.abs(t)<=O?(l=this.lat0,e.x=r,e.y=l,e):(l=xt(a*this.sin_p14+e.y*s*this.cos_p14/t),n=Math.abs(this.lat0)-w,Math.abs(n)<=O?(this.lat0>=0?r=k(this.long0+Math.atan2(e.x,-e.y)):r=k(this.long0-Math.atan2(-e.x,e.y)),e.x=r,e.y=l,e):(r=k(this.long0+Math.atan2(e.x*s,t*this.cos_p14*a-e.y*this.sin_p14*s)),e.x=r,e.y=l,e))}var Uh=["ortho"];const zh={init:Vh,forward:Rh,inverse:Fh,names:Uh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},F={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function jh(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=w-R/2?this.face=H.TOP:this.lat0<=-(w-R/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=R?this.face=H.FRONT:Math.abs(this.long0)<=w+R?this.face=this.long0>0?H.RIGHT:H.LEFT:this.face=H.BACK,this.es!==0&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)}function Gh(e){var t={x:0,y:0},i,s,a,n,r,l,h={value:0};if(e.x-=this.long0,this.es!==0?i=Math.atan(this.one_minus_f_squared*Math.tan(e.y)):i=e.y,s=e.x,this.face===H.TOP)n=w-i,s>=R&&s<=w+R?(h.value=F.AREA_0,a=s-w):s>w+R||s<=-(w+R)?(h.value=F.AREA_1,a=s>0?s-Z:s+Z):s>-(w+R)&&s<=-R?(h.value=F.AREA_2,a=s+w):(h.value=F.AREA_3,a=s);else if(this.face===H.BOTTOM)n=w+i,s>=R&&s<=w+R?(h.value=F.AREA_0,a=-s+w):s<R&&s>=-R?(h.value=F.AREA_1,a=-s):s<-R&&s>=-(w+R)?(h.value=F.AREA_2,a=-s-w):(h.value=F.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,d,g,u,f,m,C;this.face===H.RIGHT?s=Qt(s,+w):this.face===H.BACK?s=Qt(s,+Z):this.face===H.LEFT&&(s=Qt(s,-w)),u=Math.sin(i),f=Math.cos(i),m=Math.sin(s),C=Math.cos(s),c=f*C,d=f*m,g=u,this.face===H.FRONT?(n=Math.acos(c),a=ke(n,g,d,h)):this.face===H.RIGHT?(n=Math.acos(d),a=ke(n,g,-c,h)):this.face===H.BACK?(n=Math.acos(-c),a=ke(n,g,-d,h)):this.face===H.LEFT?(n=Math.acos(-d),a=ke(n,g,c,h)):(n=a=0,h.value=F.AREA_0)}return l=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(R))-w)),r=Math.sqrt((1-Math.cos(n))/(Math.cos(l)*Math.cos(l))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===F.AREA_1?l+=w:h.value===F.AREA_2?l+=Z:h.value===F.AREA_3&&(l+=1.5*Z),t.x=r*Math.cos(l),t.y=r*Math.sin(l),t.x=t.x*this.a+this.x0,t.y=t.y*this.a+this.y0,e.x=t.x,e.y=t.y,e}function Hh(e){var t={lam:0,phi:0},i,s,a,n,r,l,h,c,d,g={value:0};if(e.x=(e.x-this.x0)/this.a,e.y=(e.y-this.y0)/this.a,s=Math.atan(Math.sqrt(e.x*e.x+e.y*e.y)),i=Math.atan2(e.y,e.x),e.x>=0&&e.x>=Math.abs(e.y)?g.value=F.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(g.value=F.AREA_1,i-=w):e.x<0&&-e.x>=Math.abs(e.y)?(g.value=F.AREA_2,i=i<0?i+Z:i-Z):(g.value=F.AREA_3,i+=w),d=Z/12*Math.tan(i),r=Math.sin(d)/(Math.cos(d)-1/Math.sqrt(2)),l=Math.atan(r),a=Math.cos(i),n=Math.tan(s),h=1-a*a*n*n*(1-Math.cos(Math.atan(1/Math.cos(l)))),h<-1?h=-1:h>1&&(h=1),this.face===H.TOP)c=Math.acos(h),t.phi=w-c,g.value===F.AREA_0?t.lam=l+w:g.value===F.AREA_1?t.lam=l<0?l+Z:l-Z:g.value===F.AREA_2?t.lam=l-w:t.lam=l;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-w,g.value===F.AREA_0?t.lam=-l+w:g.value===F.AREA_1?t.lam=-l:g.value===F.AREA_2?t.lam=-l-w:t.lam=l<0?-l-Z:-l+Z;else{var u,f,m;u=h,d=u*u,d>=1?m=0:m=Math.sqrt(1-d)*Math.sin(l),d+=m*m,d>=1?f=0:f=Math.sqrt(1-d),g.value===F.AREA_1?(d=f,f=-m,m=d):g.value===F.AREA_2?(f=-f,m=-m):g.value===F.AREA_3&&(d=f,f=m,m=-d),this.face===H.RIGHT?(d=u,u=-f,f=d):this.face===H.BACK?(u=-u,f=-f):this.face===H.LEFT&&(d=u,u=f,f=-d),t.phi=Math.acos(-m)-w,t.lam=Math.atan2(f,u),this.face===H.RIGHT?t.lam=Qt(t.lam,-w):this.face===H.BACK?t.lam=Qt(t.lam,-Z):this.face===H.LEFT&&(t.lam=Qt(t.lam,+w))}if(this.es!==0){var C,v,I;C=t.phi<0?1:0,v=Math.tan(t.phi),I=this.b/Math.sqrt(v*v+this.one_minus_f_squared),t.phi=Math.atan(Math.sqrt(this.a*this.a-I*I)/(this.one_minus_f*I)),C&&(t.phi=-t.phi)}return t.lam+=this.long0,e.x=t.lam,e.y=t.phi,e}function ke(e,t,i,s){var a;return e<O?(s.value=F.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=R?s.value=F.AREA_0:a>R&&a<=w+R?(s.value=F.AREA_1,a-=w):a>w+R||a<=-(w+R)?(s.value=F.AREA_2,a=a>=0?a-Z:a+Z):(s.value=F.AREA_3,a+=w)),a}function Qt(e,t){var i=e+t;return i<-Z?i+=pe:i>+Z&&(i-=pe),i}var Zh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Wh={init:jh,forward:Gh,inverse:Hh,names:Zh};var xi=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-986701e-12],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,18736e-12],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,934959e-12],[.7986,-.00755338,-500009e-10,935324e-12],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],Ce=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-126793e-14,422642e-15],[.124,.0124,507171e-14,-160604e-14],[.186,.0123999,-190189e-13,600152e-14],[.248,.0124002,710039e-13,-224e-10],[.31,.0123992,-264997e-12,835986e-13],[.372,.0124029,988983e-12,-311994e-12],[.434,.0123893,-369093e-11,-435621e-12],[.4958,.0123198,-102252e-10,-345523e-12],[.5571,.0121916,-154081e-10,-582288e-12],[.6176,.0119938,-241424e-10,-525327e-12],[.6769,.011713,-320223e-10,-516405e-12],[.7346,.0113541,-397684e-10,-609052e-12],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-140374e-14],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],ca=.8487,ga=1.3523,ua=pt/5,qh=1/ua,Xt=18,Je=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},Yh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function Jh(e,t,i,s){for(var a=t;s;--s){var n=e(a);if(a-=n,Math.abs(n)<i)break}return a}function Xh(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function Kh(e){var t=k(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*ua);s<0?s=0:s>=Xt&&(s=Xt-1),i=pt*(i-qh*s);var a={x:Je(xi[s],i)*t,y:Je(Ce[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*ca+this.x0,a.y=a.y*this.a*ga+this.y0,a}function Qh(e){var t={x:(e.x-this.x0)/(this.a*ca),y:Math.abs(e.y-this.y0)/(this.a*ga)};if(t.y>=1)t.x/=xi[Xt][0],t.y=e.y<0?-w:w;else{var i=Math.floor(t.y*Xt);for(i<0?i=0:i>=Xt&&(i=Xt-1);;)if(Ce[i][0]>t.y)--i;else if(Ce[i+1][0]<=t.y)++i;else break;var s=Ce[i],a=5*(t.y-s[0])/(Ce[i+1][0]-s[0]);a=Jh(function(n){return(Je(s,n)-t.y)/Yh(s,n)},a,O,100),t.x/=Je(xi[i],a),t.y=(5*i+a)*J,e.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var $h=["Robinson","robin"];const tc={init:Xh,forward:Kh,inverse:Qh,names:$h};function ec(){this.name="geocent"}function ic(e){var t=Ks(e,this.es,this.a);return t}function sc(e){var t=Qs(e,this.es,this.a,this.b);return t}var ac=["Geocentric","geocentric","geocent","Geocent"];const nc={init:ec,forward:ic,inverse:sc,names:ac};var K={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},oe={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};function oc(){if(Object.keys(oe).forEach((function(i){if(typeof this[i]>"u")this[i]=oe[i].def;else{if(oe[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);oe[i].num&&(this[i]=parseFloat(this[i]))}oe[i].degrees&&(this[i]=this[i]*J)}).bind(this)),Math.abs(Math.abs(this.lat0)-w)<O?this.mode=this.lat0<0?K.S_POLE:K.N_POLE:Math.abs(this.lat0)<O?this.mode=K.EQUIT:(this.mode=K.OBLIQ,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var e=this.tilt,t=this.azi;this.cg=Math.cos(t),this.sg=Math.sin(t),this.cw=Math.cos(e),this.sw=Math.sin(e)}function rc(e){e.x-=this.long0;var t=Math.sin(e.y),i=Math.cos(e.y),s=Math.cos(e.x),a,n;switch(this.mode){case K.OBLIQ:n=this.sinph0*t+this.cosph0*i*s;break;case K.EQUIT:n=i*s;break;case K.S_POLE:n=-t;break;case K.N_POLE:n=t;break}switch(n=this.pn1/(this.p-n),a=n*i*Math.sin(e.x),this.mode){case K.OBLIQ:n*=this.cosph0*t-this.sinph0*i*s;break;case K.EQUIT:n*=t;break;case K.N_POLE:n*=-(i*s);break;case K.S_POLE:n*=i*s;break}var r,l;return r=n*this.cg+a*this.sg,l=1/(r*this.sw*this.h1+this.cw),a=(a*this.cg-n*this.sg)*this.cw*l,n=r*l,e.x=a*this.a,e.y=n*this.a,e}function lc(e){e.x/=this.a,e.y/=this.a;var t={x:e.x,y:e.y},i,s,a;a=1/(this.pn1-e.y*this.sw),i=this.pn1*e.x*a,s=this.pn1*e.y*this.cw*a,e.x=i*this.cg+s*this.sg,e.y=s*this.cg-i*this.sg;var n=mt(e.x,e.y);if(Math.abs(n)<O)t.x=0,t.y=e.y;else{var r,l;switch(l=1-n*n*this.pfact,l=(this.p-Math.sqrt(l))/(this.pn1/n+n/this.pn1),r=Math.sqrt(1-l*l),this.mode){case K.OBLIQ:t.y=Math.asin(r*this.sinph0+e.y*l*this.cosph0/n),e.y=(r-this.sinph0*Math.sin(t.y))*n,e.x*=l*this.cosph0;break;case K.EQUIT:t.y=Math.asin(e.y*l/n),e.y=r*n,e.x*=l;break;case K.N_POLE:t.y=Math.asin(r),e.y=-e.y;break;case K.S_POLE:t.y=-Math.asin(r);break}t.x=Math.atan2(e.x,e.y)}return e.x=t.x+this.long0,e.y=t.y,e}var hc=["Tilted_Perspective","tpers"];const cc={init:oc,forward:rc,inverse:lc,names:hc};function gc(){if(this.flip_axis=this.sweep==="x"?1:0,this.h=Number(this.h),this.radius_g_1=this.h/this.a,this.radius_g_1<=0||this.radius_g_1>1e10)throw new Error;if(this.radius_g=1+this.radius_g_1,this.C=this.radius_g*this.radius_g-1,this.es!==0){var e=1-this.es,t=1/e;this.radius_p=Math.sqrt(e),this.radius_p2=e,this.radius_p_inv2=t,this.shape="ellipse"}else this.radius_p=1,this.radius_p2=1,this.radius_p_inv2=1,this.shape="sphere";this.title||(this.title="Geostationary Satellite View")}function uc(e){var t=e.x,i=e.y,s,a,n,r;if(t=t-this.long0,this.shape==="ellipse"){i=Math.atan(this.radius_p2*Math.tan(i));var l=this.radius_p/mt(this.radius_p*Math.cos(i),Math.sin(i));if(a=l*Math.cos(t)*Math.cos(i),n=l*Math.sin(t)*Math.cos(i),r=l*Math.sin(i),(this.radius_g-a)*a-n*n-r*r*this.radius_p_inv2<0)return e.x=Number.NaN,e.y=Number.NaN,e;s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(n/mt(r,s)),e.y=this.radius_g_1*Math.atan(r/s)):(e.x=this.radius_g_1*Math.atan(n/s),e.y=this.radius_g_1*Math.atan(r/mt(n,s)))}else this.shape==="sphere"&&(s=Math.cos(i),a=Math.cos(t)*s,n=Math.sin(t)*s,r=Math.sin(i),s=this.radius_g-a,this.flip_axis?(e.x=this.radius_g_1*Math.atan(n/mt(r,s)),e.y=this.radius_g_1*Math.atan(r/s)):(e.x=this.radius_g_1*Math.atan(n/s),e.y=this.radius_g_1*Math.atan(r/mt(n,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function dc(e){var t=-1,i=0,s=0,a,n,r,l;if(e.x=e.x/this.a,e.y=e.y/this.a,this.shape==="ellipse"){this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*mt(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*mt(1,i));var h=s/this.radius_p;if(a=i*i+h*h+t*t,n=2*this.radius_g*t,r=n*n-4*a*this.C,r<0)return e.x=Number.NaN,e.y=Number.NaN,e;l=(-n-Math.sqrt(r))/(2*a),t=this.radius_g+l*t,i*=l,s*=l,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t),e.y=Math.atan(this.radius_p_inv2*Math.tan(e.y))}else if(this.shape==="sphere"){if(this.flip_axis?(s=Math.tan(e.y/this.radius_g_1),i=Math.tan(e.x/this.radius_g_1)*Math.sqrt(1+s*s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*Math.sqrt(1+i*i)),a=i*i+s*s+t*t,n=2*this.radius_g*t,r=n*n-4*a*this.C,r<0)return e.x=Number.NaN,e.y=Number.NaN,e;l=(-n-Math.sqrt(r))/(2*a),t=this.radius_g+l*t,i*=l,s*=l,e.x=Math.atan2(i,t),e.y=Math.atan(s*Math.cos(e.x)/t)}return e.x=e.x+this.long0,e}var Ac=["Geostationary Satellite View","Geostationary_Satellite","geos"];const mc={init:gc,forward:uc,inverse:dc,names:Ac};function Cc(e){e.Proj.projections.add(Ve),e.Proj.projections.add(Re),e.Proj.projections.add(Mr),e.Proj.projections.add(Lr),e.Proj.projections.add(Rr),e.Proj.projections.add(Gr),e.Proj.projections.add(Jr),e.Proj.projections.add(tl),e.Proj.projections.add(nl),e.Proj.projections.add(cl),e.Proj.projections.add(Ol),e.Proj.projections.add(Pl),e.Proj.projections.add(Rl),e.Proj.projections.add(Hl),e.Proj.projections.add(Jl),e.Proj.projections.add(th),e.Proj.projections.add(nh),e.Proj.projections.add(ch),e.Proj.projections.add(Ch),e.Proj.projections.add(yh),e.Proj.projections.add(_h),e.Proj.projections.add(Nh),e.Proj.projections.add(Bh),e.Proj.projections.add(zh),e.Proj.projections.add(Wh),e.Proj.projections.add(tc),e.Proj.projections.add(nc),e.Proj.projections.add(cc),e.Proj.projections.add(mc)}lt.defaultDatum="WGS84";lt.Proj=vt;lt.WGS84=new lt.Proj("WGS84");lt.Point=te;lt.toPoint=$s;lt.defs=$;lt.nadgrid=Eo;lt.transform=qe;lt.mgrs=zo;lt.version="__VERSION__";Cc(lt);async function fc(e){let t=null;const i=[/EPSG:+(\d+)/,/http:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/,/https:\/\/www.opengis.net\/def\/crs\/EPSG\/0\/(\d+)/];for(const s of i){const a=e.match(s);if(a!==null){t=a[1];break}}if(t!=null){const s=`EPSG:${t}`;if(lt.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);Bi.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const ji={loadProjCrsIfNeeded:fc};async function Ic(e,t,i,s,a){const n=new A.Clock;n.start();const r=[],l=new Map;for(const h of e){const c=h.getGeometry(),d=c==null?void 0:c.getType();if(c==null||d==null)continue;const g=[],u=c.getFlatCoordinates(),f=c.getStride();if(!(f>=3&&u[2]!=null&&u[2]!==a)){for(let m=0;m<u.length;m+=f){const C=new at(t,u[m+0],u[m+1],f>=3?u[m+2]:a);g.push(C),r.push(C)}l.set(h.ol_uid,g)}}console.debug(`Fetching altitudes for ${r.length} coordinates from ${e.length} features...`),await i(r);for(const h of e){const c=l.get(h.ol_uid),d=h.getGeometry();if(!(d==null||c==null))switch(d.getType()){case"LineString":case"MultiPoint":{const g=d,u=g.getCoordinates();for(let f=0;f<u.length;f+=1)u[f][2]=c[f].values[2]+s;g.setCoordinates(u);break}case"MultiLineString":case"Polygon":{const g=d,u=g.getCoordinates();let f=0;for(let m=0;m<u.length;m+=1)for(let C=0;C<u[m].length;C+=1)u[m][C][2]=c[f].values[2]+s,f+=1;g.setCoordinates(u);break}case"MultiPolygon":{const g=d,u=g.getCoordinates();let f=0;for(let m=0;m<u.length;m+=1)for(let C=0;C<u[m].length;C+=1)for(let v=0;v<u[m][C].length;v+=1)u[m][C][v][2]=c[f].values[2]+s,f+=1;g.setCoordinates(u);break}case"Point":{const g=d,u=g.getCoordinates();u[2]=c[0].values[2]+s,g.setCoordinates(u);break}}}console.debug(`Fetched all missing altitudes in ${n.getElapsedTime()}s`),n.stop()}function pc(e,t,i){for(const s of e){const a=s.getGeometry();if(a==null)continue;const n=a.getStride(),r=a.getFlatCoordinates();if(!(n>=3&&r[2]!=null&&r[2]!==i))switch(a.getType()){case"LineString":case"MultiPoint":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)h[c][2]=t;l.setCoordinates(h);break}case"MultiLineString":case"Polygon":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)for(let d=0;d<h[c].length;d+=1)h[c][d][2]=t;l.setCoordinates(h);break}case"MultiPolygon":{const l=a,h=l.getCoordinates();for(let c=0;c<h.length;c+=1)for(let d=0;d<h[c].length;d+=1)for(let g=0;g<h[c][d].length;g+=1)h[c][d][g][2]=t;l.setCoordinates(h);break}case"Point":{const l=a,h=l.getCoordinates();h[2]=t,l.setCoordinates(h);break}}}}async function vc(e,t,i,s){const a=await ji.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function yc(e,t,i,s){return da(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function bc(e,t){const i=new A.Group,s=new Ka,a=e.map(n=>{const r=n.getGeometry();if(r!=null){const l=r.getType();let h;switch(l){case"LineString":h=s.build(r);break;case"MultiLineString":h=s.build(r);break;case"MultiPoint":h=s.build(r);break;case"MultiPolygon":h=s.build(r,t);break;case"Point":h=s.build(r);break;case"Polygon":h=s.build(r,t);break;default:console.warn(`Unsupported type ${l}`),h=null}if(h)for(const[c,d]of Object.entries(n.getProperties()))c!=="geometry"&&(h.userData[c]=d);return h}});for(const n of a)n!=null&&i.add(n);return i}function da(e){return e.filter(t=>{var s;if("getType"in t)return!1;const i=(s=t.getGeometry())==null?void 0:s.getType();return!(i==null||!["LineString","MultiLineString","MultiPoint","MultiPolygon","Point","Polygon"].includes(i))})}const ie={fetchZCoordinates:Ic,fillZCoordinates:pc,readFeatures:vc,readSimpleFeatures:yc,toMeshes:bc,toSimpleFeatures:da},Mc=new Ya,wc=new Ja,Ec=new Xa,gt={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class _c{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchJson(this.options.url),s=Sc(i);return await Hi(t,s,this.options)}}class Gi{constructor(t,i){p(this,"elevation");p(this,"format");p(this,"noDataValue");p(this,"options");this.format=t,this.options=i,this.elevation=i.elevation,this.noDataValue=i.noDataValue}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await A.Fetcher.fetchText(this.options.url);return await Nc(t,i,this.format,this.options)}}class Oc extends Gi{constructor(t){super(wc,t)}}class xc extends Gi{constructor(t){super(Ec,t)}}async function Hi(e,t,i){const s=await ji.loadProjCrsIfNeeded(i.dataProjection??gt.dataProjection),a=t.flatMap(l=>Mc.readFeatures(l,{dataProjection:s,featureProjection:i.featureProjection})),n=ie.toSimpleFeatures(a);if(i.fetchElevation??gt.fetchElevation){const l=i.fetchElevationFast??gt.fetchElevationFast,h=i.fetchElevationOffset??gt.fetchElevationOffset,c=i.noDataValue??gt.noDataValue;await ie.fetchZCoordinates(n,i.featureProjection,Us(e,l,c),h,c)}return n}function kc(e,t,i=gt.elevation,s=gt.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return ie.fillZCoordinates(e,a,s),ie.toMeshes(e,t)}function Sc(e){switch(e.type){case"Feature":return[e];case"FeatureCollection":return e.features;case"GeometryCollection":return e.geometries.map(i=>({geometry:i,properties:{},type:"Feature"}));default:return[{geometry:e,properties:{},type:"Feature"}]}}async function Nc(e,t,i,s){const a=ie.readSimpleFeatures(t,i,s.dataProjection??gt.dataProjection,s.featureProjection);if(s.fetchElevation??gt.fetchElevation){const r=s.fetchElevationFast??gt.fetchElevationFast,l=s.fetchElevationOffset??gt.fetchElevationOffset,h=s.noDataValue??gt.noDataValue;await ie.fetchZCoordinates(a,s.featureProjection,Us(e,r,h),l,h)}return a}class Lc extends Di{constructor(i){super(new A.Group);p(this,"sources");this.sources=Array.isArray(i)?i:[i]}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=kc(s,{elevation:i.elevation,fill:{color:qi.DEFAULT_SURFACE_COLOR},stroke:{color:qi.DEFAULT_LINE_COLOR}},i.elevation,i.noDataValue);this.object3d.add(a),this.onObjectCreated(a);const n=i.context();A.fillObject3DUserData(a,{filename:n.filename})}this.notifyChange(this.object3d)}}async function Pc(e,t){const i=await Ti.load(e,qa.GeoPackageLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0}}),s=[];for(const[a,n]of Object.entries(i.tables))for(const r of n.table.features)r.properties||(r.properties={}),r.properties.table=a,s.push(r);return s}class Tc{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await Pc(this.options.url,this.options.featureProjection);return await Hi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function Dc(e,t){return(await Ti.load(e,Qa.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}class Bc{constructor(t){p(this,"elevation");p(this,"options");this.options=t,this.elevation=t.elevation}context(){return A.Fetcher.getContext(this.options.url)}async load(t){const i=await Dc(this.options.url,this.options.featureProjection);return await Hi(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class ki extends A.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS2DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.center=new A.Vector2(.5,.5),this.addEventListener("removed",function(){this.traverse(function(i){i.element instanceof i.element.ownerDocument.defaultView.Element&&i.element.parentNode!==null&&i.element.remove()})})}copy(t,i){return super.copy(t,i),this.element=t.element.cloneNode(!0),this.center=t.center,this}}new A.Vector3;new A.Matrix4;new A.Matrix4;new A.Vector3;new A.Vector3;const Et="#377c5f",Vc="yellow",Rc="#ffd500",Fc="#73d1bd",Fe=5,Uc=new A.Vector2,Aa=new A.Color(Et),zc=new A.Color,gi=zc.copyLinearToSRGB(Aa),fs=`#${new A.Color($a.getContrastColor(Aa)).getHexString()}`,ui=12,jc="bold",di=[];class Gc extends Di{constructor(i,s){super(new A.Group);p(this,"sources");p(this,"_labels");p(this,"_styleCallback");p(this,"_textCallback");this.sources=Array.isArray(i)?i:[i],this._labels=[],this._textCallback=(s==null?void 0:s.text)||(()=>"P"),this._styleCallback=s==null?void 0:s.style}getBoundingBox(){const i=this._labels.map(a=>a.position);return new A.Box3().setFromPoints(i)}pick(i,s){const a=this.instance.canvasToNormalizedCoords(i,Uc),n=new A.Raycaster;n.setFromCamera(a,this.instance.view.camera);const r=this.pickLabels(n);return r?[{distance:r.position.distanceTo(n.ray.origin),entity:this,isLabelPickResult:!0,object:r,point:r.position}]:[]}updateOpacity(){const i=`${this.opacity*100}%`;this._labels.forEach(s=>s.element.style.opacity=i)}updateVisibility(){this.object3d.traverse(i=>{i.visible=this.visible})}async preprocess(){for(const i of this.sources){const s=await i.load(this.instance),a=new A.Group,n=i.elevation??0,r=h=>new A.Vector3(h[0],h[1],h[2]??n);for(const h of s){const c=h.getGeometry();if(c!=null){const d=c.getType(),g=[];switch(d){case"LineString":case"MultiPoint":g.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":g.push(...c.getCoordinates()[0]);break;case"MultiPolygon":g.push(...c.getCoordinates()[0][0]);break;case"Point":g.push(c.getCoordinates());break}if(g.length>0){const u=g.map(m=>this.createLabel(r(m),h)),f=new A.Group;u.forEach(m=>{f.add(m),this._labels.push(m)});for(const[m,C]of Object.entries(h.getProperties()))m!=="geometry"&&(f.userData[m]=C);a.add(f)}}}this.object3d.add(a),this.onObjectCreated(a);const l=i.context();A.fillObject3DUserData(a,{filename:l.filename})}this.notifyChange(this.object3d)}createLabel(i,s){const a=document.createElement("div"),n=document.createElement("span");this.updateStyle(n,s),n.innerText=this._textCallback(s,i);const r=document.createElement("div");a.appendChild(r),r.appendChild(n);const l=new ki(a);return l.position.copy(i),l.updateMatrix(),l.updateMatrixWorld(!0),a.addEventListener("mouseover",()=>l.userData.hover=!0),a.addEventListener("mouseleave",()=>l.userData.hover=!1),l}pickLabels(i){let s=null;return this._labels.forEach(a=>{s==null&&(di.length=0,this.raycastLabel(a,i,di),di.length>0&&(s=a))}),s}raycastLabel(i,s,a){i.userData.hover===!0&&a.push({distance:i.position.distanceTo(s.ray.origin),object:i,point:i.position})}updateStyle(i,s){i.style.backgroundColor=`rgb(${gi.r*255} ${gi.g*255} ${gi.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=fs,i.style.borderRadius=`${A.MathUtils.clamp(ui-4,5,10)}px`,i.style.color=fs;const a=A.MathUtils.clamp(Math.round(ui/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${ui}px`,i.style.fontWeight=jc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class Hc extends rt{constructor(i){super({color:Et,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:Fe});p(this,"source");this.source=i}async preprocess(){const s=(await this.source.load(this.instance)).at(0),a=s==null?void 0:s.getGeometry();if(s!=null&&a!=null){const n=this.source.elevation??0,r=c=>new A.Vector3(c[0],c[1],c[2]??n);switch(a.getType()){case"LineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(r));break;case"MultiLineString":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!0,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates()[0].map(r));break;case"MultiPoint":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints(a.getCoordinates().map(r));break;case"MultiPolygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0][0].map(r));break;case"Point":this.showVertexLabels=!0,this.showLine=!1,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!1,this.showSurfaceLabel=!1,this.setPoints([r(a.getCoordinates())]);break;case"Polygon":this.showVertexLabels=!1,this.showLine=!0,this.showVertices=!0,this.showSegmentLabels=!1,this.showSurface=!0,this.showSurfaceLabel=!0,this.setPoints(a.getCoordinates()[0].map(r));break;default:throw new Error("could not import shape from given geometry: "+a.getType())}const h=this.source.context();A.fillObject3DUserData(this,{filename:h.filename});for(const[c,d]of Object.entries(s.getProperties()))c!=="geometry"&&(this.userData[c]=d)}this.notifyChange(this.object3d)}}const Zc=e=>{const{dataset:t,instance:i}=e,s=t.config,a=Array.isArray(s.source)?s.source:[s.source],n=[],r=s.rendering??"mesh";let l;for(const h of a){const c={dataProjection:h.dataProjection??t.get("dataProjection"),elevation:h.elevation??t.get("elevation"),featureProjection:i.referenceCrs,fetchElevation:h.fetchElevation??t.get("fetchElevation"),fetchElevationFast:h.fetchElevationFast??t.get("fetchElevationFast"),fetchElevationOffset:h.fetchElevationOffset??t.get("fetchElevationOffset"),noDataValue:h.noDataValue??t.get("noDataValue"),url:h.url};switch(h.type){case"geojson":n.push(new _c({...c}));break;case"geopackage":n.push(new Tc({...c}));break;case"gpx":n.push(new Oc({...c}));break;case"kml":n.push(new xc({...c}));break;case"ol":n.push(new Gi(h.format,{...c}));break;case"shapefile":n.push(new Bc({...c}));break;default:return h}}switch(r){case"label":l=new Gc(n,s);break;case"mesh":l=new Lc(n);break;case"shape":l=new Hc(n[0]);break;default:return r}return Promise.resolve(l)},Si={featureCollection:bn,flatPointcloud:En,pointcloud:xn,tiledIfc:_n,vector:Zc};async function Wc(e,t){const i={dataset:t,instance:e},s=Si[t.type];if(s==null)throw new Error(`no entity builder found for dataset type '${t.type}'`);const a=await s(i);return"dataset"in a.object3d.userData||(a.object3d.userData.dataset={}),a.object3d.userData.dataset.name=t.name,a}function qc(e,t){Si[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),Si[e]=t}const Yc={getEntity:Wc},Ai=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Is=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),Jc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,source:{style:"default",type:t,url:e.file},type:"colorLayer",visible:!0}},Xc=e=>{let t;switch(e.extension){case"geojson":case"json":t="geojson";break;case"gpkg":t="geopackage";break;case"gpx":t="gpx";break;case"kml":t="kml";break;default:throw new Error(`File extension '${e.extension}' not supported`)}return{name:e.filename,rendering:e.configuration.importedVectorDatasetRendering,source:{fetchElevation:e.configuration.importedMeshDatasetFetchElevation??!0,fetchElevationFast:e.configuration.importedMeshDatasetFetchElevationFast??!1,type:t,url:e.file},type:"vector",visible:!0}},re=e=>e.configuration.importedVectorDatasetRendering==="overlay"?Jc(e):Xc(e),Xe={csv:Ai,dsv:Ai,"geo.json":re,geojson:re,gpkg:re,gpx:re,kml:re,las:Is,laz:Is,tsv:Ai};function Kc(e,t){if(typeof e=="string"){const s=A.getPublicFolderUrl(e),a=new URL(s),l=`${a.origin}${a.pathname}`.split("/").pop();if(l==null)throw new Error("Could not determine filename");const h=l.split(".").at(-1);if(h==null)throw new Error(`File has no extension: ${l}`);return{configuration:t,extension:h,file:e,filename:l}}if(e.name==null)throw new Error("Could not determine filename");const i=e.name.split(".").at(-1);if(i==null)throw new Error(`File has no extension: ${e.name}`);return{configuration:t,extension:i,file:e,filename:e.name}}async function Qc(e,t){const i=Kc(e,t),s=$c(i.filename);if(s==null)throw new Error(`File format ${i.extension} not supported`);const a=s(i);return Promise.resolve(new A.Dataset(a))}function $c(e){const t=Object.keys(Xe);for(const i of t)if(e.endsWith(i))return Xe[i];return null}function tg(e,t){Xe[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Xe[e]=t}const eg={importFile:Qc},ma=[];class ig{constructor(){p(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){rt.isShapePickResult(t)&&this.highlightShape(t);for(const i of ma){const s=i(t);s&&(this._clearHighlight=s)}}}highlightShape(t){const i=t.entity;if(i.userData.highlightable){const s=new A.Color(i.color);i.color=i.userData.highlightColor,i.instance.notifyChange(),this._clearHighlight=()=>{i.color=s,i.instance.notifyChange()}}}}const sg=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,style:"unit",unit:"meter",unitDisplay:"short"}),ag=e=>`${sg.format(e.length)}`,Ke=class Ke extends rt{constructor(){super({color:Vc,lineLabelFormatter:ag,showLineLabel:!0});p(this,"isMeasure3D",!0);this.userData.highlightable=!0,this.userData.highlightColor=Rc,this.depthTest=!0}get from(){return this.points[0]}get length(){return this.getLength()}get to(){return this.points[1]}clone(){return new Ke().copy(this)}copy(i){return this.setPoints([i.from,i.to]),this}};p(Ke,"isMeasure3D",i=>A.isObject(i)&&i.isMeasure3D);let be=Ke;class ng{constructor(t,i,s,a){p(this,"attributes");p(this,"name");p(this,"parent");p(this,"point");this.name=t,this.parent=i,this.attributes=s,this.point=a.clone()}}class og{constructor(t,i,s){p(this,"_grid");p(this,"_instance");this._instance=t;const a=i.dimensions(),n=i.center();this._grid=new A.GridHelper(1,100),this._grid.name=s,this._grid.scale.set(a.x,1,a.y),this._grid.visible=!0,this._grid.position.set(n.x,n.y,-100),this._grid.rotateOnAxis(new A.Vector3(1,0,0),Math.PI/2);const r=this._grid.material;r.opacity=.5,r.transparent=!0,this._grid.updateMatrixWorld(),this._instance.add(this._grid)}get visible(){return this._grid.visible}set visible(t){this._grid.visible=t,this._instance.notifyChange(this._grid)}dispose(){this._instance.remove(this._grid),this._grid.geometry.dispose(),this._grid.material.dispose()}}async function rg(e,t,i,s){const a=new Wt.WMTSCapabilities,n=await A.Fetcher.fetchText(t),r=a.read(n),l=on.optionsFromCapabilities(r,{layer:e});if(l===null)throw new Error("Cannot resolve WMTS source from capabilities");return new Ht.WMTS(l)}async function lg(e,t){const i=await ei(t.config);switch(t.type){case"colorLayer":{const s=t.config;return new $t({...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}case"elevationLayer":{const s=t.config;return new fe({...i,minmax:s.minmax})}case"maskLayer":{const s=t.config;return new Ge({...i,maskMode:s.maskMode})}default:return t.type}}function hg(e){if(e==null)return new q.Style;switch(e){case"LineString":case"MultiLineString":return new q.Style({stroke:new q.Stroke({color:"yellow",width:1})});case"MultiPoint":case"Point":return new q.Style({image:new q.Circle({fill:new q.Fill({color:"yellow"}),radius:3,stroke:new q.Stroke({color:"black"})})});case"MultiPolygon":case"Polygon":return new q.Style({fill:new q.Fill({color:"rgba(50, 50, 200, 0.4)"}),stroke:new q.Stroke({color:"black",width:1})});default:return console.warn(`Geometry ${e} not supported`),new q.Style}}function cg(e){if(e.imageFormat)switch(e.imageFormat){case"Bil":return new Yi;case"GeoTIFF":return new sn;case"MapboxTerrain":return new an;default:return e.imageFormat}switch(e.format){case"image/x-bil;bits=32":return new Yi;default:return}}function gg(e){return{colorSpace:e.colorSpace,flipY:e.flipY,is8bit:e.is8bit}}async function ug(e){const t=await ei(e);switch(e.type){case"color":{const i=e.options;return new $t({...t,elevationRange:i.elevationRange})}case"elevation":{const i=e.options;return new fe({...t,magFilter:i.magFilter,minFilter:i.minFilter,minmax:i.minmax??{max:5e3,min:0},noDataOptions:{replaceNoData:!1}})}case"mask":{const i=e.options;return new Ge({...t,maskMode:i.maskMode})}default:return e.type}}async function ei(e){const t=A.getConfig(),i=await Ca(e.source),s="options"in e?e.options:e,a=A.getExtent(s.extent),n=s.interpretation?new en(s.interpretation.mode,s.interpretation):void 0,r=s.colorMap??("type"in e&&e.type==="elevation"?t.basemap.colormap:void 0),l=r?A.getColorMap(r):void 0,h="resolution"in e.source?e.source.resolution:void 0;let c,d;return"type"in e&&e.type==="color"&&(c=e.options.minFilter,d=e.options.magFilter),{backgroundColor:s.backgroundColor,colorMap:l,extent:a,interpretation:n,magFilter:d,minFilter:c,name:e.name,noDataOptions:s.noDataOptions,preloadImages:s.preloadImages,resolutionFactor:h,showEmptyTextures:s.showEmptyTextures,showTileBorders:s.showTileBorders,source:i}}async function dg(e,t){const i=await ei(e),s=e.options;return new $t({extent:t,...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}async function Ca(e){const t=gg(e);switch(e.type){case"bingmaps":return new Ft({...t,source:new Ht.BingMaps(e)});case"cog":return new nn({...t,crs:Ue(e,e.projection),url:A.getPublicFolderUrl(e.url)});case"geojson":return new de({...t,...await Se(e,new Wt.GeoJSON)});case"gpx":return new de({...t,...await Se(e,new Wt.GPX)});case"kml":return new de({...t,...await Se(e,new Wt.KML)});case"mvt":return new Ji({...t,...ps(e),format:new Wt.MVT});case"osm":return new Ft({...t,source:new Ht.OSM(e)});case"stadiamaps":return new Ft({...t,source:new Ht.StadiaMaps(e)});case"vector":return new de({...t,...await Se(e,e.format)});case"vector-tile":return new Ji({...t,...ps(e),format:e.format});case"wms":{const i=new Ht.TileWMS({crossOrigin:"anonymous",params:{FORMAT:e.format,LAYERS:Array.isArray(e.layer)?e.layer:[e.layer]},projection:Ue(e),url:e.url});return new Ft({...t,...mi(e,i)})}case"wmts":{const i=await rg(e.layer,e.url,e.format,Ue(e));return new Ft({...t,...mi(e,i)})}case"xyz":return new Ft({...t,...mi(e,new Ht.XYZ(e))});default:return e}}async function Ag(e){return e.url instanceof Blob?A.Fetcher.toDataURL(e.url):A.getPublicFolderUrl(e.url)}function Ue(e,t){return e.dataProjection??("projection"in e?e.projection:void 0)??t}function fa(e){if(typeof e=="string"){if(e==="default")return i=>{var s;return hg((s=i.getGeometry())==null?void 0:s.getType())};const t=A.getDynamicStyles();return t[e]==null?(console.warn(`Could not find style ${e} in configuration`),new q.Style({})):t[e]}return mg(e)}function mi(e,t){return{extent:A.getExtent(e.extent),format:cg(e),httpTimeout:e.httpTimeout,noDataValue:e.noDataValue??e.nodata,retries:e.retries,source:t}}async function Se(e,t){const i=await Ag(e);return{data:{format:t,url:i},dataProjection:Ue(e,"EPSG:4326"),style:fa(e.style)}}function ps(e){return{backgroundColor:e.backgroundColor,style:fa(e.style),url:A.getPublicFolderUrl(e.url)}}function mg(e){function t(a){if(a)return new q.Stroke({color:a.color,width:a.width})}function i(a){if(a)return new q.Fill({color:a.color})}function s(a){if(a)return new q.Circle({fill:i(a.fill),radius:a.radius,stroke:t(a.stroke)})}return new q.Style({fill:i(e.fill),image:s(e.point),stroke:t(e.stroke)})}const Ni={getDatasetLayer:lg,getLayer:ug,getLayerOptions:ei,getOverlay:dg,getSource:Ca};class Cg{constructor(t,i,s){p(this,"_instance");p(this,"_plane");this._instance=t;const a=i.dimensions(),n=i.center();this._plane=new A.Mesh(new A.PlaneGeometry(a.x,a.y,1,1),new A.MeshBasicMaterial({color:"black"})),this._plane.name=s,this._plane.position.set(n.x,n.y,-101),this._plane.updateMatrixWorld(),this._instance.add(this._plane)}get visible(){return this._plane.visible}set visible(t){this._plane.visible=t,this._instance.notifyChange(this._plane)}dispose(){this._instance.remove(this._plane),this._plane.geometry.dispose(),this._plane.material.dispose()}}const ae=kt.defineStore("giro3d",()=>{const e=o.shallowRef(null),t=o.shallowRef(null),i=o.shallowRef(null);function s(){return e.value}function a(C){e.value=C}function n(){return t.value}function r(C){t.value=C}function l(){return i.value}function h(C){i.value=C}function c(){const C=A.getConfig(),v=C.camera;return Array.isArray(v.position)?(console.warn("Configuration is using an array for camera.position, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),new at("EPSG:4326",v.position[0],v.position[1],v.altitude).as(C.default_crs)):("z"in v.position||console.warn("Configuration is using a 2D object for camera.position, you should switch to a 3D object; see https://gitlab.com/giro3d/piero/-/issues/38 for more information. This will be removed in release v24.7."),new at(v.position.crs??C.default_crs,v.position.x,v.position.y,"z"in v.position?v.position.z:v.altitude).as(C.default_crs))}function d(){const C=A.getConfig();return"lookAt"in C.camera&&C.camera.lookAt?new at(C.camera.lookAt.crs??C.default_crs,C.camera.lookAt.x,C.camera.lookAt.y,C.camera.lookAt.z).as(C.default_crs):u().center()}function g(){const C=A.getConfig();return{backgroundColor:C.basemap.backgroundColor??"white",backgroundOpacity:C.basemap.backgroundOpacity,colorimetry:C.basemap.colorimetry,contourLines:C.basemap.contourLines,elevationRange:C.basemap.elevationRange,graticule:C.basemap.graticule,lighting:C.basemap.lighting??{elevationLayersOnly:!0,enabled:!0},showOutline:C.basemap.showOutline,side:C.basemap.side??A.FrontSide,terrain:C.basemap.terrain}}function u(){const C=A.getConfig();if(C.basemap.extent)return A.getExtent(C.basemap.extent);console.warn("Configuration is using basemap.center/basemap.size, you should switch to extent. This will be removed in release v24.10.");const v=C.basemap.size,I=C.basemap.center;if(v==null||I==null)throw new Error("basemap.center and basemap.size need to be defined");let b;return Array.isArray(I)?(console.warn("Configuration is using an array for basemap.center, you should switch to an object; see https://gitlab.com/giro3d/piero/-/issues/24 for more information. This will be removed in release v24.7."),b=new at("EPSG:4326",I[0],I[1],0)):b=new at(I.crs??C.default_crs,I.x,I.y,0),b=b.as(C.default_crs),Qe.fromCenterAndSize(C.default_crs,{x:b.x,y:b.y},v[0],v[1])}function f(){return A.getConfig().default_crs}function m(){var C;(C=e.value)==null||C.notifyChange()}return{getCRS:f,getDefaultBasemapExtent:u,getDefaultBasemapOptions:g,getDefaultCameraLookAt:d,getDefaultCameraPosition:c,getInspector:l,getMainView:s,getMinimapView:n,notifyChange:m,setInspector:h,setMainView:a,setMinimapView:r}});class fg extends A.EventDispatcher{constructor(){super(...arguments);p(this,"canSetOpacity",!1);p(this,"name","Graticule");p(this,"uuid","graticule");p(this,"_enabled",!1);p(this,"_instance");p(this,"_map");p(this,"_visible",!1)}get displayed(){return this.enabled&&this.visible}get enabled(){return this._enabled}set enabled(i){this._enabled=i,this._updateVisible()}set instance(i){this._instance=i}set map(i){this._map=i}get visible(){return this._visible}set visible(i){this._visible=i,this._updateVisible()}_updateVisible(){this._map&&this._instance&&(this._map.graticule.enabled=this.displayed,this._instance.notifyChange(this._map))}}class Ia extends A.EventDispatcher{constructor(i){super();p(this,"name");p(this,"uuid");p(this,"_opacity",1);p(this,"_visible",!1);this.name=i,this.uuid=A.MathUtils.generateUUID()}get opacity(){return this._opacity}set opacity(i){this._opacity=i,this.dispatchEvent({type:"opacity"})}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}delete(){this.dispatchEvent({type:"delete"})}}class Ig extends Ia{constructor({name:i,source:s,type:a,...n}){super(i);p(this,"options");p(this,"source");p(this,"type");p(this,"_loading");this._loading=!1,this.type=a,this.source=s,this.options=n}get isLoading(){return this._loading}set isLoading(i){this._loading=i}}class pg extends Ia{constructor({name:i,source:s,...a}){super(i);p(this,"options");p(this,"source");p(this,"_loading");this._loading=!1,this.source=s,this.options=a}get isLoading(){return this._loading}set isLoading(i){this._loading=i}}function vg(){const e=A.getConfig(),t=[],i=e.basemap.layers;for(const s of i){const a=new Ig(s);a.visible=s.visible,t.push(a)}return t}function yg(){const e=A.getConfig();if("graticule"in e.basemap&&e.basemap.graticule!==void 0){const t=new fg;return typeof e.basemap.graticule=="boolean"?t.visible=e.basemap.graticule:t.visible=e.basemap.graticule.enabled??!0,o.shallowReactive(t)}}function bg(){const e=A.getConfig(),t=[];for(const i of e.overlays){let s;"source"in i?s=i:(console.warn(`Configuration for ${i.name} is deprecated. This will be removed in release v24.7.`),s={name:i.name,source:{...i},visible:i.visible});const a=new pg(s);a.visible=i.visible,t.push(a)}return t}const pa=kt.defineStore("layers",()=>{const e=o.shallowReactive(vg().map(m=>o.shallowReactive(m))),t=o.computed(()=>e.length),i=o.shallowReactive(bg().map(m=>o.shallowReactive(m))),s=o.computed(()=>i.length),a=yg();function n(){return e}function r(){return a}function l(m,C){m.visible=C}function h(m,C){m.opacity=C}function c(){return i}function d(m,C){m.visible=C}function g(m,C){m.opacity=C}function u(m){const C=i.indexOf(m);if(C>0){const v=i[C-1];i[C-1]=m,i[C]=v}}function f(m){const C=i.indexOf(m);if(C<i.length-1){const v=i[C+1];i[C+1]=m,i[C]=v}}return{basemapCount:t,getBasemaps:n,getGraticuleLayer:r,getOverlays:c,moveOverlayDown:f,moveOverlayUp:u,overlayCount:s,setBasemapOpacity:h,setBasemapVisibility:l,setOverlayOpacity:g,setOverlayVisibility:d}}),Mg=3e3,Li="grid",Pi="plane",wg=5e3;class Eg extends A.EventDispatcher{constructor(i){super();p(this,"_baseLayers");p(this,"_basemap");p(this,"_boundOnAfterCameraUpdate");p(this,"_cameraStore",A.useCameraStore());p(this,"_datasetLayers");p(this,"_giro3dStore",ae());p(this,"_grid");p(this,"_instance");p(this,"_layerStore",pa());p(this,"_overlays");p(this,"_plane");this._instance=i,this._baseLayers=new Map,this._overlays=new Map,this._datasetLayers=new Set;const s=this._giro3dStore.getDefaultBasemapExtent(),a=this._giro3dStore.getDefaultBasemapOptions();this._basemap=new je({extent:s,...a}),this._basemap.terrain.segments=32,this._basemap.name="basemaps",this._instance.add(this._basemap),this._grid=new og(this._instance,s,Li),this._plane=new Cg(this._instance,s,Pi),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);for(const r of this._layerStore.getOverlays())r.visible&&this.loadOverlay(r);for(const r of this._layerStore.getBasemaps())r.visible&&this.loadBasemap(r);const n=this._layerStore.getGraticuleLayer();n&&(n.instance=this._instance,n.map=this._basemap),this._layerStore.$onAction(({after:r,args:l,name:h})=>{r(()=>{switch(h){case"moveOverlayDown":case"moveOverlayUp":this.onOverlayReordered(l[0]);break;case"setBasemapOpacity":this.onLayerOpacityChanged(l[0],l[1]);break;case"setBasemapVisibility":this.onLayerVisibilityChanged(l[0],l[1]);break;case"setOverlayOpacity":this.onOverlayOpacityChanged(l[0],l[1]);break;case"setOverlayVisibility":this.onOverlayVisibilityChanged(l[0],l[1]);break}})})}get extent(){return this._basemap.extent}async addDatasetLayer(i){this._datasetLayers.add(i.id),await this._basemap.addLayer(i),this.updateLayerOrdering()}dispose(){this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._instance.remove(this._basemap),this._plane.dispose(),this._grid.dispose(),this._basemap.dispose({disposeLayers:!0})}notify(i){this._instance.notifyChange(i)}removeBasemapLayer(i){this._datasetLayers.delete(i.id),this._basemap.removeLayer(i,{disposeLayer:!0}),this._instance.notifyChange(this._basemap)}setMapOpacity(i){this._basemap.opacity=i,this._instance.notifyChange(this._basemap)}async getLayer(i,s=!0){const a=this._baseLayers.get(i.uuid);return!a&&s?this.loadBasemap(i):a}async getOverlay(i,s=!0){const a=this._overlays.get(i.uuid);return!a&&s?this.loadOverlay(i):a}async loadBasemap(i){const s=await Ni.getLayer(i);return this._baseLayers.set(i.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=i.visible,$t.isColorLayer(s)&&(s.opacity=i.opacity),fe.isElevationLayer(s)&&(s.addEventListener("visible-property-changed",()=>{this._basemap.visible=s.visible,this._instance.notifyChange(this._basemap)}),this._basemap.visible=s.visible),this._instance.notifyChange(this._basemap),s}async loadOverlay(i){const s=await Ni.getOverlay(i,this.extent);return this._overlays.set(i.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=i.visible,s.opacity=i.opacity,this._instance.notifyChange(this._basemap),s}onAfterCameraUpdate(){const i=this._cameraStore.getCamera3dPosition(),s=this._grid.visible,a=i.z<Mg;s!==a&&(this._grid.visible=a,this._plane.visible=a);const n=this._layerStore.getGraticuleLayer();if(n){const r=n.enabled,l=i.z<wg;r!==l&&(n.enabled=l)}}async onLayerOpacityChanged(i,s){const a=await this.getLayer(i);a&&$t.isColorLayer(a)&&(a.opacity=s,this.notify(a)),a&&fe.isElevationLayer(a)&&this.setMapOpacity(i.opacity)}async onLayerVisibilityChanged(i,s){i.type==="elevation"&&s&&[...this._baseLayers.keys()].forEach(r=>{if(r===i.uuid)return;const l=this._baseLayers.get(r);if(l&&fe.isElevationLayer(l)){this._baseLayers.delete(r),this.removeBasemapLayer(l);const h=this._layerStore.getBasemaps().find(c=>c.uuid===r);h&&this._layerStore.setBasemapVisibility(h,!1)}});const a=await this.getLayer(i,s);a&&(a.visible=s,s||(this._baseLayers.delete(i.uuid),this.removeBasemapLayer(a)),this.notify(a))}async onOverlayOpacityChanged(i,s){const a=await this.getOverlay(i);a&&(a.opacity=s,this.notify(a))}onOverlayReordered(i){i.visible&&this.updateLayerOrdering()}async onOverlayVisibilityChanged(i,s){const a=await this.getOverlay(i,s);a&&(a.visible=s,s||(this._overlays.delete(i.uuid),this.removeBasemapLayer(a)),this.notify(a))}updateLayerOrdering(){const i=[...this._layerStore.getBasemaps().map(s=>{var a;return(a=this._baseLayers.get(s.uuid))==null?void 0:a.id}).reverse(),...this._layerStore.getOverlays().map(s=>{var a;return(a=this._overlays.get(s.uuid))==null?void 0:a.id}).reverse(),...[...this._datasetLayers.values()].reverse()];this._basemap.sortColorLayers((s,a)=>{const n=i.indexOf(s.id),r=i.indexOf(a.id);return n>=0&&r>=0?n-r:0})}}const va=[];function _g(e,t){return rt.isShapePickResult(e)?-1:rt.isShapePickResult(t)?1:e.distance-t.distance}class vs{constructor(){p(this,"_moduleStore",A.useModuleStore())}getFeatureFromPickedObject(t){var d,g;const{entity:i,features:s,object:a}=t,n=(i==null?void 0:i.object3d)??a;let r=(g=(d=n.userData)==null?void 0:d.dataset)==null?void 0:g.name;const l=(i==null?void 0:i.id)??n.uuid,h=[],c=new Map;if(c.set("Dataset",h),i){if(Ts.isMapPickResult(t)){if(s==null||s.length===0)return null;const u=s.at(0);r=this.getNameFromOLFeature(u.feature)??r,this.getAttributesFromOLFeature(u.feature,c),h.push({key:"Layer",value:u.layer.name})}else if(tn.isPointsPickResult(t))this.getAttributesFromPointCloud(t,c);else if(!i.isFeatureCollection){if(rt.isShapePickResult(t)){const u=t.entity;if(be.isMeasure3D(u)){const f=u.userData.measure;r=(f==null?void 0:f.title)??r,this.getAttributesFromMeasure(t,c)}else{const f=u.userData.annotation;r=(f==null?void 0:f.title)??r,this.getAttributesFromAnnotation(t,c)}}}for(const u of va)u(t,c)}return i!=null&&i.userData&&this.getAttributesFromEntity(i,c),(a==null?void 0:a.userData)!=null&&this.getAttributesFromPickedObject3D(t,c),a!=null&&this.getDatasetAttributes(a,h),new ng(r,l,c,t.point)}getFirstFeatureAt(t,i,s=1,a){const n=this.getObjectsAt(t,i,s,a);if(n!=null&&n.length>0)return n;const r=this.getMapAt(t,i,s);return r?[r]:null}getGeometryAttributes(t,i){const s=new A.Box3,a=new A.Vector3,n=new A.Vector3;s.setFromObject(t),s.getCenter(n),s.getSize(a),i.push({key:"Center",value:[n.x.toFixed(2),n.y.toFixed(2),n.z.toFixed(2)]});const r="m";i.push({key:"Size",value:[`${a.x.toFixed(2)}${r}`,`${a.y.toFixed(2)}${r}`,`${a.z.toFixed(2)}${r}`]})}getMapAt(t,i,s=1){const a=t.getObjects(r=>r.isMap);return t.pickObjectsAt(i,{limit:1,pickFeatures:!0,radius:s,sortByDistance:!0,where:a}).at(0)??null}getMouseCoordinate(t,i){const s=t.getObjects(n=>n.isMap),a=t.pickObjectsAt(i,{limit:1,radius:0,where:s}).at(0);return(a==null?void 0:a.point)??null}getObjectsAt(t,i,s=1,a){let n=t.getObjects(l=>je.isMap(l)!==!0&&l.name!==Pi&&l.name!==Li);a&&(n=n.filter(a));const r=t.pickObjectsAt(i,{filter:l=>this.filterPick(t,l),pickFeatures:!0,radius:s,where:n});return r.sort(_g),r??null}hasFeature(t,i){const s=t.getObjects(n=>n.isMap!==!0&&n.name!==Pi&&n.name!==Li);return t.pickObjectsAt(i,{limit:1,radius:0,where:s}).at(0)!=null}pick(t,i){var a;const s=(a=this.getFirstFeatureAt(t,i))==null?void 0:a.at(0);if(s){const n=this.getFeatureFromPickedObject(s);if(n)return{feature:n,pickResult:s,point:s.point}}return null}filterPick(t,i){const s=this._moduleStore.getModule(A.moduleId);if(s!=null&&s.isClippingBoxEnabled()){const a=s.getClippingBox().containsPoint(i.point);if(s.isClippingBoxInverted()){if(a)return!1}else if(!a)return!1}return!(i.distance<t.view.camera.near||i.distance>t.view.camera.far)}getAttributesFromAnnotation(t,i){i.has("GeoJSON")||i.set("GeoJSON",[]);const s=i.get("GeoJSON"),a=t.entity,n=a.userData,{annotation:r,measurements:l,type:h}=n;if(r!=null)for(const[g,u]of Object.entries(r.properties))g==="geometry"||g==="geometryProperty"||g==="metadata"||g==="entity"||s.push({key:g,value:u});i.has("Measurement")||i.set("Measurement",[]);const c=i.get("Measurement");h==="MultiPoint"&&c.push({key:"Number of points",value:a.points.length});const d="m";l.area!=null&&c.push({key:"Area",value:`${l.area.toFixed(2)}${d}²`}),l.perimeter!=null&&c.push({key:h==="Polygon"?"Perimeter":"Length",value:`${l.perimeter.toFixed(2)}${d}`}),l.minmax!=null&&(c.push({key:"Min altitude",value:`${l.minmax[0].toFixed(2)}${d}`}),c.push({key:"Max altitude",value:`${l.minmax[1].toFixed(2)}${d}`}))}getAttributesFromEntity(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");(t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,s)}getAttributesFromMeasure(t,i){i.has("GeoJSON")||i.set("GeoJSON",[]);const s=i.get("GeoJSON"),a=t.entity;for(const[r,l]of Object.entries(a.userData.measure.properties))r==="geometry"||r==="geometryProperty"||r==="metadata"||r==="entity"||s.push({key:r,value:l});i.has("Measurement")||i.set("Measurement",[]);const n=i.get("Measurement");n.push({key:"From",value:a.from}),n.push({key:"To",value:a.to}),n.push({key:"Length",value:`${a.length.toFixed(2)}m`})}getAttributesFromObject3D(t,i){if((t==null?void 0:t.userData)!=null&&this.getAttributesFromUserData(t.userData,i),t!=null&&t.parent){if("isFeatureTile"in t.parent&&t.parent.isFeatureTile===!0)return;this.getAttributesFromObject3D(t.parent,i)}}getAttributesFromOLFeature(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");t.getId()!==void 0&&s.push({key:"fid",value:t.getId()});for(const[a,n]of Object.entries(t.getProperties()))a==="geometry"||a==="geometryProperty"||s.push({key:a,value:n})}getAttributesFromPickedObject3D(t,i){i.has("Feature")||i.set("Feature",[]);const s=i.get("Feature");this.getAttributesFromObject3D(t.object,s)}getAttributesFromPointCloud(t,i){var s;(s=i.get("Dataset"))==null||s.push({key:"Tile",value:t.object.name})}getAttributesFromUserData(t,i){for(const[s,a]of Object.entries(t))if(!(s==="geometry"||s==="geometryProperty"||s==="metadata"||s==="entity"||s==="dataset"||s==="bbox"||s==="hover")){if(s==="feature"&&typeof a=="object"&&"ol_uid"in a){this.getAttributesFromUserData(a.getProperties(),i);continue}if(s==="properties"){this.getAttributesFromUserData(a,i);continue}if(typeof a!="object"){if(s==="id"){i.push({key:"fid",value:a});continue}i.push({key:s,value:a})}}}getDatasetAttributes(t,i){var s,a,n,r;((a=(s=t==null?void 0:t.userData)==null?void 0:s.dataset)==null?void 0:a.name)!=null&&i.push({key:"Dataset",value:t.userData.dataset.name}),((r=(n=t==null?void 0:t.userData)==null?void 0:n.dataset)==null?void 0:r.filename)!=null&&i.push({key:"File",value:t.userData.dataset.filename}),t.parent&&this.getDatasetAttributes(t.parent,i)}getNameFromOLFeature(t){return t.get("nom")??t.get("name")??t.getId()}}class Og{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(Bs[t]=i.icon),i.name!=null&&(Vs[t]=i.name),i.highlight&&ma.push(i.highlight),qc(t,i.entityBuilder),i.fileExtensions)if(i.loader==null)console.warn(`File extensions have been specified for dataset ${t}, but no loader function has been provided.`);else for(const s of i.fileExtensions)tg(s,i.loader);i.propertyView&&De.set(t,i.propertyView),i.attributeExtractor&&va.push(i.attributeExtractor)}}class xg{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}const Zi=kt.defineStore("annotations",()=>{const e=o.reactive([]),t=o.ref("normal"),i=o.computed(()=>e.length),s=o.ref(!1),a=o.ref(!0);function n(){return s.value}function r(){return a.value}function l(E){a.value=E}function h(E){s.value=E}function c(){return t.value}function d(E){t.value=E}function g(){return e}function u(E){e.splice(e.indexOf(E),1)}function f(){}function m(){}function C(){}function v(E){e.push(E)}function I(E){return e.some(S=>S.title===E)}function b(E){}function M(){}function _(E){}function x(E){}return{add:v,count:i,createLine:m,createPoint:f,createPolygon:C,edit:b,getAnnotationMode:c,getAnnotations:g,hasAnnotation:I,importAnnotationFile:_,importAnnotationsFiles:x,isUserDrawing:n,remove:u,setAnnotationMode:d,setIsUserDrawing:h,setShowLabels:l,showLabels:r,stopEdition:M}}),Rt=kt.defineStore("notifications",()=>{function e(t){}return{push:e}});class ya extends A.EventDispatcher{constructor(i,s,a={}){super();p(this,"properties");p(this,"title");p(this,"uuid");p(this,"_isEditing");p(this,"_object");p(this,"_visible");this.title=i,this._visible=!0,this._isEditing=!1,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get isEditing(){return this._isEditing}set isEditing(i){this._isEditing=i,this.dispatchEvent({type:"isEditing"})}get object(){return this._object()}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D annotations",updated:new Date().toISOString()}}}toGeoJSON(){const i=this.object.toGeoJSON({includeAltitudes:!0});return i.id=`${A.Download.getBaseUrl()}#${this.uuid}`,i.properties={...i.properties,title:this.title,updated:new Date().toISOString()},i}}class Q{constructor(t,i,s="info"){p(this,"level");p(this,"text");p(this,"title");this.title=t,this.text=i,this.level=s}static empty(){return new Q("","","info")}}function kg(e){let t=1/0,i=-1/0,s;Array.isArray(e)?s=e:s=e.points;for(let a=0;a<s.length;a+=1)t=Math.min(t,s[a].z),i=Math.max(i,s[a].z);return[t,i]}const Sg={getMinMaxAltitudes:kg};function Ng(e){return window.prompt("Annotation name",e)}const ba=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),ys=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${ba.format(t)} ${i}`},Lg=new A.Vector3,Pg=new A.Vector3,bs=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,n=Lg.copy(a).project(i),r=Pg.copy(s).project(i),l=Math.pow(100/e.width,2);if(n.distanceToSquared(r)<l)return null;let c=t.length;if(c==null||c<=0)return null;let d="m";return c>1e3&&(c=c/1e3,d="km"),`${ba.format(c)} ${d}`},Ci=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Tg{constructor(t,i,s){p(this,"_boundExitEdition");p(this,"_boundOnEndDrag");p(this,"_boundOnKeyDown");p(this,"_boundOnStartDrag");p(this,"_boundUpdateLabels");p(this,"_drawTool");p(this,"_editedShape",null);p(this,"_editedShapePreviousPoints",null);p(this,"_instance");p(this,"_isEditing",!1);p(this,"_notificationStore",Rt());p(this,"_picker");p(this,"_shapes",new Map);p(this,"_store",Zi());this._instance=t,this._picker=s,this._drawTool=new Nt({instance:t}),this._boundOnEndDrag=()=>{i.enabled=!0},this._boundOnStartDrag=()=>{i.enabled=!1},this._boundUpdateLabels=this.updateLabels.bind(this),this._boundExitEdition=()=>{this._instance.domElement.removeEventListener("contextmenu",this._boundExitEdition),this.stopEdition(!1)},this._drawTool.addEventListener("start-drag",this._boundOnStartDrag),this._drawTool.addEventListener("end-drag",this._boundOnEndDrag),this._boundOnKeyDown=this.onKeyDown.bind(this),document.addEventListener("keydown",this._boundOnKeyDown),this._instance.addEventListener("after-camera-update",this._boundUpdateLabels),this._store.$onAction(({after:a,args:n,name:r})=>{a(()=>{switch(r){case"createLine":this.drawLine();break;case"createPoint":this.drawPoint();break;case"createPolygon":this.drawPolygon();break;case"edit":this.editAnnotation(n[0]);break;case"importAnnotationFile":this.importAnnotationFile(n[0]);break;case"importAnnotationsFiles":this.importAnnotationFiles(n[0]);break;case"remove":this.deleteAnnotation(n[0]);break;case"setShowLabels":this.udpateLabelVisibility(n[0]);break;case"stopEdition":this.stopEdition(!1);break}})})}dispose(){document.removeEventListener("keydown",this._boundOnKeyDown),this._drawTool.removeEventListener("start-drag",this._boundOnStartDrag),this._drawTool.removeEventListener("end-drag",this._boundOnEndDrag),this._instance.removeEventListener("after-camera-update",this._boundUpdateLabels),this._shapes.forEach(t=>this._instance.remove(t)),this._drawTool.dispose()}pushNewAnnotation(t,i,s={}){const a=new ya(t,()=>i,s);return i.userData.annotation=a,a.addEventListener("visible",()=>this.updateDrawing(a)),this._store.add(a),this._shapes.set(a.uuid,i),a}addShape(t,i,s){if(t&&!this._shapes.has(t.id)){const a=t.userData;a.type=i,a.highlightable=!0;let n=s;if(this._store.hasAnnotation(n)){for(let l=1;l<1e3&&(n=`${s} (${l})`,!!this._store.hasAnnotation(n));l+=1);this._store.hasAnnotation(n)&&(n="Achievement unlocked: 1000 annotations with default name")}const r=Ng(n);if(r!=null){this.computeMeasurements(t);const l=this.pushNewAnnotation(r,t);this._shapes.set(l.uuid,t)}else this._instance.remove(t)}}computeMeasurements(t){t.userData.measurements={minmax:Sg.getMinMaxAltitudes(t)},(t.userData.type==="Polygon"||t.userData.type==="LineString")&&(t.userData.measurements.perimeter=t.getLength()),t.userData.type==="Polygon"&&(t.userData.measurements.area=t.getArea())}deleteAnnotation(t){if(this._shapes.has(t.uuid)){const i=t.object;this._instance.remove(i),this._shapes.delete(t.uuid)}}draw(t,i,s,a){this._store.setIsUserDrawing(!0),this._drawTool[t]({...this.getCreationOptions(),...a}).then(n=>{this.addShape(n,i,s)}).finally(()=>this._store.setIsUserDrawing(!1))}drawLine(){this.draw("createLineString","LineString","New line annotation",{segmentLabelFormatter:bs(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:Ci,vertexRadius:Fe})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:ys})}editAnnotation(t){const i=this._shapes.get(t.uuid);if(!i){console.warn(`no shape found for annotation ${t.uuid}`);return}this._editedShape=i,this._editedShapePreviousPoints=[...i.points],t.isEditing=!0,i.color=Fc,i.userData.highlightable=!1,this._instance.notifyChange(i),this._store.setIsUserDrawing(!0),this._instance.domElement.addEventListener("contextmenu",this._boundExitEdition),this._isEditing=!0,this._drawTool.enterEditMode({pick:this.pick.bind(this),shapesToEdit:[i]})}filterPickResults(t,i){return i?t:t.filter(s=>!rt.isShapePickResult(s))}getCreationOptions(){return{color:Et,pick:this.pick.bind(this)}}async importAnnotation(t,i){if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=await this.importShapeFromGeoJSON(t);return this.pushNewAnnotation(t.properties.title,s,t.properties),!0}async importAnnotationFile(t){const i=new Set(this._store.getAnnotations().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}catch{}}async importAnnotationFiles(t){const i=[];let s=0,a=0;const n=[],r=new Set(this._store.getAnnotations().map(l=>l.title));for(const l of t)i.push(this.importBlob(l,r).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{n.push(h.message)}));await Promise.allSettled(i),n.length>0?this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new Q("Annotations",`${s} annotations imported (${a} skipped)`,"success"))}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),n=a.type==="FeatureCollection"?a.features:[a];let r=0,l=0;for(const h of n)await this.importAnnotation(h,i)?r++:l++;return{nbImported:r,nbSkipped:l}}async importShapeFromGeoJSON(t){if(t.type!=="Feature")throw new Error("not a valid GeoJSON feature");const i="EPSG:4326",s=n=>{const r=new at(i,n[0],n[1],n[2]??0);return r.as(this._instance.referenceCrs,r).toVector3()};let a;switch(t.geometry.type){case"LineString":a=new rt({beforeRemovePoint:Nt.limitRemovePointHook(2),color:Et,segmentLabelFormatter:bs(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new rt({beforeRemovePoint:Nt.limitRemovePointHook(1),color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ci,vertexRadius:Fe}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new rt({beforeRemovePoint:Nt.inhibitHook,color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:Ci,vertexRadius:Fe}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new rt({afterRemovePoint:Nt.afterRemovePointOfRing,afterUpdatePoint:Nt.afterUpdatePointOfRing,beforeRemovePoint:Nt.limitRemovePointHook(4),color:Et,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:ys}),a.setPoints(t.geometry.coordinates[0].map(s));break;default:throw new Error("could not import shape from given GeoJSON geometry: "+t.geometry.type)}return this.computeMeasurements(a),await this._instance.add(a),a}onKeyDown(t){t.code==="Escape"&&this.stopEdition(!0)}pick(t){let i;switch(this._store.getAnnotationMode()){case"mapOnly":i=this.pickMap(t);break;case"normal":i=this.pickDefault(t);break;case"objectsOnly":i=this.pickFeatures(t);break}return i}pickDefault(t){const i=this._instance.pickObjectsAt(t,{sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}pickFeatures(t){const i=this._picker.getObjectsAt(this._instance,t,0)??[];return this.filterPickResults(i,this._isEditing)}pickMap(t){const i=this._instance.pickObjectsAt(t,{filter:s=>rt.isShapePickResult(s)||Ts.isMapPickResult(s),sortByDistance:!0});return this.filterPickResults(i,this._isEditing)}stopEdition(t){this._drawTool.exitEditMode(),this._isEditing=!1,this._store.setIsUserDrawing(!1),this._editedShape&&(t&&this._editedShapePreviousPoints&&(this._editedShape.setPoints(this._editedShapePreviousPoints),this._editedShapePreviousPoints=null),this._editedShape.userData.annotation!=null&&(this._editedShape.userData.annotation.isEditing=!1),this._editedShape.color=Et,this._editedShape.userData.highlightable=!0,this._editedShape=null)}udpateLabelVisibility(t){this._shapes.forEach(i=>{switch(i.userData.type){case"LineString":i.showSegmentLabels=t;break;case"MultiPoint":case"Point":i.showVertexLabels=t;break;case"Polygon":i.showSurfaceLabel=t;break}})}updateDrawing(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}updateLabels(){this._shapes.forEach(t=>{t.visible&&t.rebuildLabels()})}}/*!
|
|
5
5
|
* camera-controls
|
|
6
6
|
* https://github.com/yomotsu/camera-controls
|
|
7
7
|
* (c) 2017 @yomotsu
|
|
8
8
|
* Released under the MIT License.
|
|
9
|
-
*/const Z={LEFT:1,RIGHT:2,MIDDLE:4},b=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Xt={NONE:0,IN:1,OUT:-1};function Ut(i){return i.isPerspectiveCamera}function Lt(i){return i.isOrthographicCamera}const Jt=Math.PI*2,nn=Math.PI/2,aa=1e-5,ve=Math.PI/180;function ft(i,t,e){return Math.max(t,Math.min(e,i))}function j(i,t=aa){return Math.abs(i)<t}function R(i,t,e=aa){return j(i-t,e)}function an(i,t){return Math.round(i/t)*t}function ye(i){return isFinite(i)?i:i<0?-Number.MAX_VALUE:Number.MAX_VALUE}function be(i){return Math.abs(i)<Number.MAX_VALUE?i:i*(1/0)}function Ke(i,t,e,s,n=1/0,o){s=Math.max(1e-4,s);const r=2/s,l=r*o,c=1/(1+l+.48*l*l+.235*l*l*l);let h=i-t;const m=t,u=n*s;h=ft(h,-u,u),t=i-h;const d=(e.value+r*h)*o;e.value=(e.value-r*d)*c;let C=t+(h+d)*c;return m-i>0==C>m&&(C=m,e.value=(C-m)/o),C}function on(i,t,e,s,n=1/0,o,r){s=Math.max(1e-4,s);const l=2/s,c=l*o,h=1/(1+c+.48*c*c+.235*c*c*c);let m=t.x,u=t.y,d=t.z,C=i.x-m,p=i.y-u,A=i.z-d;const v=m,I=u,w=d,M=n*s,y=M*M,E=C*C+p*p+A*A;if(E>y){const J=Math.sqrt(E);C=C/J*M,p=p/J*M,A=A/J*M}m=i.x-C,u=i.y-p,d=i.z-A;const _=(e.x+l*C)*o,S=(e.y+l*p)*o,T=(e.z+l*A)*o;e.x=(e.x-l*_)*h,e.y=(e.y-l*S)*h,e.z=(e.z-l*T)*h,r.x=m+(C+_)*h,r.y=u+(p+S)*h,r.z=d+(A+T)*h;const q=v-i.x,tt=I-i.y,L=w-i.z,V=r.x-v,z=r.y-I,Y=r.z-w;return q*V+tt*z+L*Y>0&&(r.x=v,r.y=I,r.z=w,e.x=(r.x-v)/o,e.y=(r.y-I)/o,e.z=(r.z-w)/o),r}function Gi(i,t){t.set(0,0),i.forEach(e=>{t.x+=e.clientX,t.y+=e.clientY}),t.x/=i.length,t.y/=i.length}function ji(i,t){return Lt(i)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Nu{constructor(){this._listeners={}}addEventListener(t,e){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(e)===-1&&s[t].push(e)}hasEventListener(t,e){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(e)!==-1}removeEventListener(t,e){const n=this._listeners[t];if(n!==void 0){const o=n.indexOf(e);o!==-1&&n.splice(o,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const n=s.slice(0);for(let o=0,r=n.length;o<r;o++)n[o].call(this,t)}}}var Hi;const Pu="2.10.1",$e=1/8,Lu=/Mac/.test((Hi=globalThis==null?void 0:globalThis.navigator)===null||Hi===void 0?void 0:Hi.platform);let N,rn,ti,Zi,rt,B,D,Qt,Me,Mt,wt,zt,ln,cn,mt,we,Kt,hn,Wi,gn,qi,Yi,ei;class gt extends Nu{static install(t){N=t.THREE,rn=Object.freeze(new N.Vector3(0,0,0)),ti=Object.freeze(new N.Vector3(0,1,0)),Zi=Object.freeze(new N.Vector3(0,0,1)),rt=new N.Vector2,B=new N.Vector3,D=new N.Vector3,Qt=new N.Vector3,Me=new N.Vector3,Mt=new N.Vector3,wt=new N.Vector3,zt=new N.Vector3,ln=new N.Vector3,cn=new N.Vector3,mt=new N.Spherical,we=new N.Spherical,Kt=new N.Box3,hn=new N.Box3,Wi=new N.Sphere,gn=new N.Quaternion,qi=new N.Quaternion,Yi=new N.Matrix4,ei=new N.Raycaster}static get ACTION(){return b}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,e){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=b.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Xt.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(I,w,M,y)=>{let E,_;if(Ut(this._camera)){const S=B.copy(this._camera.position).sub(this._target),T=this._camera.getEffectiveFOV()*ve,q=S.length()*Math.tan(T*.5);E=this.truckSpeed*I*q/this._elementRect.height,_=this.truckSpeed*w*q/this._elementRect.height}else if(Lt(this._camera)){const S=this._camera;E=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,_=this.truckSpeed*w*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;y?(M?this.setFocalOffset(this._focalOffsetEnd.x+E,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(E,0,!0),this.forward(-_,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+E,this._focalOffsetEnd.y+_,this._focalOffsetEnd.z,!0):this.truck(E,_,!0)},this._rotateInternal=(I,w)=>{const M=Jt*this.azimuthRotateSpeed*I/this._elementRect.height,y=Jt*this.polarRotateSpeed*w/this._elementRect.height;this.rotate(M,y,!0)},this._dollyInternal=(I,w,M)=>{const y=Math.pow(.95,-I*this.dollySpeed),E=this._sphericalEnd.radius,_=this._sphericalEnd.radius*y,S=ft(_,this.minDistance,this.maxDistance),T=S-_;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(_,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(T,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?_:S)-E,this._dollyControlCoord.set(w,M)),this._lastDollyDirection=Math.sign(-I)},this._zoomInternal=(I,w,M)=>{const y=Math.pow(.95,I*this.dollySpeed),E=this._zoom,_=this._zoom*y;this.zoomTo(_,!0),this.dollyToCursor&&(this._changedZoom+=_-E,this._dollyControlCoord.set(w,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,ti),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=b.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(B.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:b.ROTATE,middle:b.DOLLY,right:b.TRUCK,wheel:Ut(this._camera)?b.DOLLY:Lt(this._camera)?b.ZOOM:b.NONE},this.touches={one:b.TOUCH_ROTATE,two:Ut(this._camera)?b.TOUCH_DOLLY_TRUCK:Lt(this._camera)?b.TOUCH_ZOOM_TRUCK:b.NONE,three:b.TOUCH_TRUCK};const s=new N.Vector2,n=new N.Vector2,o=new N.Vector2,r=I=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),E=I.clientX/y.width,_=I.clientY/y.height;if(E<this._interactiveArea.left||E>this._interactiveArea.right||_<this._interactiveArea.top||_>this._interactiveArea.bottom)return}const w=I.pointerType!=="mouse"?null:(I.buttons&Z.LEFT)===Z.LEFT?Z.LEFT:(I.buttons&Z.MIDDLE)===Z.MIDDLE?Z.MIDDLE:(I.buttons&Z.RIGHT)===Z.RIGHT?Z.RIGHT:null;if(w!==null){const y=this._findPointerByMouseButton(w);y&&this._disposePointer(y)}if((I.buttons&Z.LEFT)===Z.LEFT&&this._lockedPointer)return;const M={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY,deltaX:0,deltaY:0,mouseButton:w};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",c),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",c),this._isDragging=!0,d(I)},l=I=>{I.cancelable&&I.preventDefault();const w=I.pointerId,M=this._lockedPointer||this._findPointerById(w);if(M){if(M.clientX=I.clientX,M.clientY=I.clientY,M.deltaX=I.movementX,M.deltaY=I.movementY,this._state=0,I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(I.buttons&Z.LEFT)===Z.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(I.buttons&Z.MIDDLE)===Z.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(I.buttons&Z.RIGHT)===Z.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},c=I=>{const w=this._findPointerById(I.pointerId);if(!(w&&w===this._lockedPointer)){if(w&&this._disposePointer(w),I.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=b.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=b.NONE;p()}};let h=-1;const m=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===b.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const _=this._domElement.getBoundingClientRect(),S=I.clientX/_.width,T=I.clientY/_.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||T<this._interactiveArea.top||T>this._interactiveArea.bottom)return}if(I.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===b.ROTATE||this.mouseButtons.wheel===b.TRUCK){const _=performance.now();h-_<1e3&&this._getClientRect(this._elementRect),h=_}const w=Lu?-1:-3,M=I.deltaMode===1||I.ctrlKey?I.deltaY/w:I.deltaY/(w*10),y=this.dollyToCursor?(I.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(I.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case b.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case b.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case b.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case b.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case b.DOLLY:{this._dollyInternal(-M,y,E),this._isUserControllingDolly=!0;break}case b.ZOOM:{this._zoomInternal(-M,y,E),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},u=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===gt.ACTION.NONE){const w=I instanceof PointerEvent?I.pointerId:0,M=this._findPointerById(w);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",c);return}I.preventDefault()}},d=I=>{if(!this._enabled)return;if(Gi(this._activePointers,rt),this._getClientRect(this._elementRect),s.copy(rt),n.copy(rt),this._activePointers.length>=2){const M=rt.x-this._activePointers[1].clientX,y=rt.y-this._activePointers[1].clientY,E=Math.sqrt(M*M+y*y);o.set(0,E);const _=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;n.set(_,S)}if(this._state=0,!I)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in I&&I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(I.buttons&Z.LEFT)===Z.LEFT&&(this._state=this._state|this.mouseButtons.left),(I.buttons&Z.MIDDLE)===Z.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(I.buttons&Z.RIGHT)===Z.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&b.ROTATE)===b.ROTATE||(this._state&b.TOUCH_ROTATE)===b.TOUCH_ROTATE||(this._state&b.TOUCH_DOLLY_ROTATE)===b.TOUCH_DOLLY_ROTATE||(this._state&b.TOUCH_ZOOM_ROTATE)===b.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&b.TRUCK)===b.TRUCK||(this._state&b.SCREEN_PAN)===b.SCREEN_PAN||(this._state&b.TOUCH_TRUCK)===b.TOUCH_TRUCK||(this._state&b.TOUCH_SCREEN_PAN)===b.TOUCH_SCREEN_PAN||(this._state&b.TOUCH_DOLLY_TRUCK)===b.TOUCH_DOLLY_TRUCK||(this._state&b.TOUCH_DOLLY_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN||(this._state&b.TOUCH_ZOOM_TRUCK)===b.TOUCH_ZOOM_TRUCK||(this._state&b.TOUCH_ZOOM_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&b.DOLLY)===b.DOLLY||(this._state&b.TOUCH_DOLLY)===b.TOUCH_DOLLY||(this._state&b.TOUCH_DOLLY_TRUCK)===b.TOUCH_DOLLY_TRUCK||(this._state&b.TOUCH_DOLLY_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN||(this._state&b.TOUCH_DOLLY_OFFSET)===b.TOUCH_DOLLY_OFFSET||(this._state&b.TOUCH_DOLLY_ROTATE)===b.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&b.ZOOM)===b.ZOOM||(this._state&b.TOUCH_ZOOM)===b.TOUCH_ZOOM||(this._state&b.TOUCH_ZOOM_TRUCK)===b.TOUCH_ZOOM_TRUCK||(this._state&b.TOUCH_ZOOM_SCREEN_PAN)===b.TOUCH_ZOOM_SCREEN_PAN||(this._state&b.TOUCH_ZOOM_OFFSET)===b.TOUCH_ZOOM_OFFSET||(this._state&b.TOUCH_ZOOM_ROTATE)===b.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&b.OFFSET)===b.OFFSET||(this._state&b.TOUCH_OFFSET)===b.TOUCH_OFFSET||(this._state&b.TOUCH_DOLLY_OFFSET)===b.TOUCH_DOLLY_OFFSET||(this._state&b.TOUCH_ZOOM_OFFSET)===b.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Gi(this._activePointers,rt);const w=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=w?-w.deltaX:n.x-rt.x,y=w?-w.deltaY:n.y-rt.y;if(n.copy(rt),((this._state&b.ROTATE)===b.ROTATE||(this._state&b.TOUCH_ROTATE)===b.TOUCH_ROTATE||(this._state&b.TOUCH_DOLLY_ROTATE)===b.TOUCH_DOLLY_ROTATE||(this._state&b.TOUCH_ZOOM_ROTATE)===b.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,y),this._isUserControllingRotate=!0),(this._state&b.DOLLY)===b.DOLLY||(this._state&b.ZOOM)===b.ZOOM){const E=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,_=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&b.DOLLY)===b.DOLLY?(this._dollyInternal(S*y*$e,E,_),this._isUserControllingDolly=!0):(this._zoomInternal(S*y*$e,E,_),this._isUserControllingZoom=!0)}if((this._state&b.TOUCH_DOLLY)===b.TOUCH_DOLLY||(this._state&b.TOUCH_ZOOM)===b.TOUCH_ZOOM||(this._state&b.TOUCH_DOLLY_TRUCK)===b.TOUCH_DOLLY_TRUCK||(this._state&b.TOUCH_ZOOM_TRUCK)===b.TOUCH_ZOOM_TRUCK||(this._state&b.TOUCH_DOLLY_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN||(this._state&b.TOUCH_ZOOM_SCREEN_PAN)===b.TOUCH_ZOOM_SCREEN_PAN||(this._state&b.TOUCH_DOLLY_OFFSET)===b.TOUCH_DOLLY_OFFSET||(this._state&b.TOUCH_ZOOM_OFFSET)===b.TOUCH_ZOOM_OFFSET||(this._state&b.TOUCH_DOLLY_ROTATE)===b.TOUCH_DOLLY_ROTATE||(this._state&b.TOUCH_ZOOM_ROTATE)===b.TOUCH_ZOOM_ROTATE){const E=rt.x-this._activePointers[1].clientX,_=rt.y-this._activePointers[1].clientY,S=Math.sqrt(E*E+_*_),T=o.y-S;o.set(0,S);const q=this.dollyToCursor?(n.x-this._elementRect.x)/this._elementRect.width*2-1:0,tt=this.dollyToCursor?(n.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&b.TOUCH_DOLLY)===b.TOUCH_DOLLY||(this._state&b.TOUCH_DOLLY_ROTATE)===b.TOUCH_DOLLY_ROTATE||(this._state&b.TOUCH_DOLLY_TRUCK)===b.TOUCH_DOLLY_TRUCK||(this._state&b.TOUCH_DOLLY_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN||(this._state&b.TOUCH_DOLLY_OFFSET)===b.TOUCH_DOLLY_OFFSET?(this._dollyInternal(T*$e,q,tt),this._isUserControllingDolly=!0):(this._zoomInternal(T*$e,q,tt),this._isUserControllingZoom=!0)}((this._state&b.TRUCK)===b.TRUCK||(this._state&b.TOUCH_TRUCK)===b.TOUCH_TRUCK||(this._state&b.TOUCH_DOLLY_TRUCK)===b.TOUCH_DOLLY_TRUCK||(this._state&b.TOUCH_ZOOM_TRUCK)===b.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,y,!1,!1),this._isUserControllingTruck=!0),((this._state&b.SCREEN_PAN)===b.SCREEN_PAN||(this._state&b.TOUCH_SCREEN_PAN)===b.TOUCH_SCREEN_PAN||(this._state&b.TOUCH_DOLLY_SCREEN_PAN)===b.TOUCH_DOLLY_SCREEN_PAN||(this._state&b.TOUCH_ZOOM_SCREEN_PAN)===b.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,y,!1,!0),this._isUserControllingTruck=!0),((this._state&b.OFFSET)===b.OFFSET||(this._state&b.TOUCH_OFFSET)===b.TOUCH_OFFSET||(this._state&b.TOUCH_DOLLY_OFFSET)===b.TOUCH_DOLLY_OFFSET||(this._state&b.TOUCH_ZOOM_OFFSET)===b.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,y,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{Gi(this._activePointers,rt),n.copy(rt),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",c),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",c),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",A),this._domElement.ownerDocument.addEventListener("pointerlockerror",v),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",c),d())},this.unlockPointer=()=>{var I,w,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(I=this._domElement)===null||I===void 0||I.ownerDocument.exitPointerLock(),(w=this._domElement)===null||w===void 0||w.ownerDocument.removeEventListener("pointerlockchange",A),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",v),this.cancel()};const A=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},v=()=>{this.unlockPointer()};this._addAllEventListeners=I=>{this._domElement=I,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",c),this._domElement.addEventListener("wheel",m,{passive:!1}),this._domElement.addEventListener("contextmenu",u)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",c),this._domElement.removeEventListener("wheel",m,{passive:!1}),this._domElement.removeEventListener("contextmenu",u),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",c),this._domElement.ownerDocument.removeEventListener("pointerlockchange",A),this._domElement.ownerDocument.removeEventListener("pointerlockerror",v))},this.cancel=()=>{this._state!==b.NONE&&(this._state=b.NONE,this._activePointers.length=0,p())},e&&this.connect(e),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=ft(t.width,0,1),this._interactiveArea.height=ft(t.height,0,1),this._interactiveArea.x=ft(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=ft(t.y,0,1-this._interactiveArea.height)}addEventListener(t,e){super.addEventListener(t,e)}removeEventListener(t,e){super.removeEventListener(t,e)}rotate(t,e,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+e,s)}rotateAzimuthTo(t,e=!1){return this.rotateTo(t,this._sphericalEnd.phi,e)}rotatePolarTo(t,e=!1){return this.rotateTo(this._sphericalEnd.theta,t,e)}rotateTo(t,e,s=!1){this._isUserControllingRotate=!1;const n=ft(t,this.minAzimuthAngle,this.maxAzimuthAngle),o=ft(e,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=n,this._sphericalEnd.phi=o,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!s||R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(t,e=!1){return this.dollyTo(this._sphericalEnd.radius-t,e)}dollyTo(t,e=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Xt.NONE,this._changedDolly=0,this._dollyToNoClamp(ft(t,this.minDistance,this.maxDistance),e)}_dollyToNoClamp(t,e=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),l=R(r,this._spherical.radius);if(!(s>t)&&l)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,r)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,e||(this._spherical.radius=this._sphericalEnd.radius);const o=!e||R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(o)}dollyInFixed(t,e=!1){this._targetEnd.add(this._getCameraDirection(Me).multiplyScalar(t)),e||this._target.copy(this._targetEnd);const s=!e||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,e=!1){return this.zoomTo(this._zoomEnd+t,e)}zoomTo(t,e=!1){this._isUserControllingZoom=!1,this._zoomEnd=ft(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,e||(this._zoom=this._zoomEnd);const s=!e||R(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,e,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,e,s)}truck(t,e,s=!1){this._camera.updateMatrix(),Mt.setFromMatrixColumn(this._camera.matrix,0),wt.setFromMatrixColumn(this._camera.matrix,1),Mt.multiplyScalar(t),wt.multiplyScalar(-e);const n=B.copy(Mt).add(wt),o=D.copy(this._targetEnd).add(n);return this.moveTo(o.x,o.y,o.z,s)}forward(t,e=!1){B.setFromMatrixColumn(this._camera.matrix,0),B.crossVectors(this._camera.up,B),B.multiplyScalar(t);const s=D.copy(this._targetEnd).add(B);return this.moveTo(s.x,s.y,s.z,e)}elevate(t,e=!1){return B.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+B.x,this._targetEnd.y+B.y,this._targetEnd.z+B.z,e)}moveTo(t,e,s,n=!1){this._isUserControllingTruck=!1;const o=B.set(t,e,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,o,this.boundaryFriction),this._needsUpdate=!0,n||this._target.copy(this._targetEnd);const r=!n||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(t,e,s,n=!1){const l=B.set(t,e,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(l.x,l.y,l.z,n)}fitToBox(t,e,{cover:s=!1,paddingLeft:n=0,paddingRight:o=0,paddingBottom:r=0,paddingTop:l=0}={}){const c=[],h=t.isBox3?Kt.copy(t):Kt.setFromObject(t);h.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const m=an(this._sphericalEnd.theta,nn),u=an(this._sphericalEnd.phi,nn);c.push(this.rotateTo(m,u,e));const d=B.setFromSpherical(this._sphericalEnd).normalize(),C=gn.setFromUnitVectors(d,Zi),p=R(Math.abs(d.y),1);p&&C.multiply(qi.setFromAxisAngle(ti,m)),C.multiply(this._yAxisUpSpaceInverse);const A=hn.makeEmpty();D.copy(h.min).applyQuaternion(C),A.expandByPoint(D),D.copy(h.min).setX(h.max.x).applyQuaternion(C),A.expandByPoint(D),D.copy(h.min).setY(h.max.y).applyQuaternion(C),A.expandByPoint(D),D.copy(h.max).setZ(h.min.z).applyQuaternion(C),A.expandByPoint(D),D.copy(h.min).setZ(h.max.z).applyQuaternion(C),A.expandByPoint(D),D.copy(h.max).setY(h.min.y).applyQuaternion(C),A.expandByPoint(D),D.copy(h.max).setX(h.min.x).applyQuaternion(C),A.expandByPoint(D),D.copy(h.max).applyQuaternion(C),A.expandByPoint(D),A.min.x-=n,A.min.y-=r,A.max.x+=o,A.max.y+=l,C.setFromUnitVectors(Zi,d),p&&C.premultiply(qi.invert()),C.premultiply(this._yAxisUpSpace);const v=A.getSize(B),I=A.getCenter(D).applyQuaternion(C);if(Ut(this._camera)){const w=this.getDistanceToFitBox(v.x,v.y,v.z,s);c.push(this.moveTo(I.x,I.y,I.z,e)),c.push(this.dollyTo(w,e)),c.push(this.setFocalOffset(0,0,0,e))}else if(Lt(this._camera)){const w=this._camera,M=w.right-w.left,y=w.top-w.bottom,E=s?Math.max(M/v.x,y/v.y):Math.min(M/v.x,y/v.y);c.push(this.moveTo(I.x,I.y,I.z,e)),c.push(this.zoomTo(E,e)),c.push(this.setFocalOffset(0,0,0,e))}return Promise.all(c)}fitToSphere(t,e){const s=[],o="isObject3D"in t?gt.createBoundingSphere(t,Wi):Wi.copy(t);if(s.push(this.moveTo(o.center.x,o.center.y,o.center.z,e)),Ut(this._camera)){const r=this.getDistanceToFitSphere(o.radius);s.push(this.dollyTo(r,e))}else if(Lt(this._camera)){const r=this._camera.right-this._camera.left,l=this._camera.top-this._camera.bottom,c=2*o.radius,h=Math.min(r/c,l/c);s.push(this.zoomTo(h,e))}return s.push(this.setFocalOffset(0,0,0,e)),Promise.all(s)}setLookAt(t,e,s,n,o,r,l=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xt.NONE,this._changedDolly=0;const c=D.set(n,o,r),h=B.set(t,e,s);this._targetEnd.copy(c),this._sphericalEnd.setFromVector3(h.sub(c).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,l||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const m=!l||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold)&&R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(m)}lerpLookAt(t,e,s,n,o,r,l,c,h,m,u,d,C,p=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Xt.NONE,this._changedDolly=0;const A=B.set(n,o,r),v=D.set(t,e,s);mt.setFromVector3(v.sub(A).applyQuaternion(this._yAxisUpSpace));const I=Qt.set(m,u,d),w=D.set(l,c,h);we.setFromVector3(w.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(A.lerp(I,C));const M=we.theta-mt.theta,y=we.phi-mt.phi,E=we.radius-mt.radius;this._sphericalEnd.set(mt.radius+E*C,mt.phi+y*C,mt.theta+M*C),this.normalizeRotations(),this._needsUpdate=!0,p||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const _=!p||R(this._target.x,this._targetEnd.x,this.restThreshold)&&R(this._target.y,this._targetEnd.y,this.restThreshold)&&R(this._target.z,this._targetEnd.z,this.restThreshold)&&R(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&R(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&R(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(_)}setPosition(t,e,s,n=!1){return this.setLookAt(t,e,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,n)}setTarget(t,e,s,n=!1){const o=this.getPosition(B),r=this.setLookAt(o.x,o.y,o.z,t,e,s,n);return this._sphericalEnd.phi=ft(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(t,e,s,n=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,e,s),this._needsUpdate=!0,n||this._focalOffset.copy(this._focalOffsetEnd);const o=!n||R(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&R(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&R(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}setOrbitPoint(t,e,s){this._camera.updateMatrixWorld(),Mt.setFromMatrixColumn(this._camera.matrixWorldInverse,0),wt.setFromMatrixColumn(this._camera.matrixWorldInverse,1),zt.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const n=B.set(t,e,s),o=n.distanceTo(this._camera.position),r=n.sub(this._camera.position);Mt.multiplyScalar(r.x),wt.multiplyScalar(r.y),zt.multiplyScalar(r.z),B.copy(Mt).add(wt).add(zt),B.z=B.z+o,this.dollyTo(o,!1),this.setFocalOffset(-B.x,B.y,-B.z,!1),this.moveTo(t,e,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,e,s,n){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,e,s,n):this._viewport.copy(t)}getDistanceToFitBox(t,e,s,n=!1){if(ji(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const o=t/e,r=this._camera.getEffectiveFOV()*ve,l=this._camera.aspect;return((n?o>l:o<l)?e:t/l)*.5/Math.tan(r*.5)+s*.5}getDistanceToFitSphere(t){if(ji(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const e=this._camera.getEffectiveFOV()*ve,s=Math.atan(Math.tan(e*.5)*this._camera.aspect)*2,n=1<this._camera.aspect?e:s;return t/Math.sin(n*.5)}getTarget(t,e=!0){return(t&&t.isVector3?t:new N.Vector3).copy(e?this._targetEnd:this._target)}getPosition(t,e=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(e?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(e?this._targetEnd:this._target)}getSpherical(t,e=!0){return(t||new N.Spherical).copy(e?this._sphericalEnd:this._spherical)}getFocalOffset(t,e=!0){return(t&&t.isVector3?t:new N.Vector3).copy(e?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Jt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Jt),this._spherical.theta+=Jt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Jt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!R(this._camera.up.x,this._cameraUp0.x)||!R(this._camera.up.y,this._cameraUp0.y)||!R(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(B);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const e=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(e)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ti),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=B.subVectors(this._target,this._camera.position).normalize(),e=D.crossVectors(t,this._camera.up);this._camera.up.crossVectors(e,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(B);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const e=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,n=this._sphericalEnd.radius-this._spherical.radius,o=ln.subVectors(this._targetEnd,this._target),r=cn.subVectors(this._focalOffsetEnd,this._focalOffset),l=this._zoomEnd-this._zoom;if(j(e))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const u=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ke(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,u,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const u=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ke(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,u,1/0,t),this._needsUpdate=!0}if(j(n))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const u=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ke(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,u,this.maxSpeed,t),this._needsUpdate=!0}if(j(o.x)&&j(o.y)&&j(o.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const u=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;on(this._target,this._targetEnd,this._targetVelocity,u,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(r.x)&&j(r.y)&&j(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const u=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;on(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,u,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(l))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const u=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ke(this._zoom,this._zoomEnd,this._zoomVelocity,u,1/0,t)}if(this.dollyToCursor){if(Ut(this._camera)&&this._changedDolly!==0){const u=this._spherical.radius-this._lastDistance,d=this._camera,C=this._getCameraDirection(Me),p=B.copy(C).cross(d.up).normalize();p.lengthSq()===0&&(p.x=1);const A=D.crossVectors(p,C),v=this._sphericalEnd.radius*Math.tan(d.getEffectiveFOV()*ve*.5),w=(this._sphericalEnd.radius-u-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=Qt.copy(this._targetEnd).add(p.multiplyScalar(this._dollyControlCoord.x*v*d.aspect)).add(A.multiplyScalar(this._dollyControlCoord.y*v)),y=B.copy(this._targetEnd).lerp(M,w),E=this._lastDollyDirection===Xt.IN&&this._spherical.radius<=this.minDistance,_=this._lastDollyDirection===Xt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(E||_)){this._sphericalEnd.radius-=u,this._spherical.radius-=u;const T=D.copy(C).multiplyScalar(-u);y.add(T)}this._boundary.clampPoint(y,y);const S=D.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedDolly-=u,j(this._changedDolly)&&(this._changedDolly=0)}else if(Lt(this._camera)&&this._changedZoom!==0){const u=this._zoom-this._lastZoom,d=this._camera,C=B.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(d.near+d.far)/(d.near-d.far)).unproject(d),p=D.set(0,0,-1).applyQuaternion(d.quaternion),A=Qt.copy(C).add(p.multiplyScalar(-C.dot(d.up))),I=-(this._zoom-u-this._zoom)/this._zoom,w=this._getCameraDirection(Me),M=this._targetEnd.dot(w),y=B.copy(this._targetEnd).lerp(A,I),E=y.dot(w),_=w.multiplyScalar(E-M);y.sub(_),this._boundary.clampPoint(y,y);const S=D.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedZoom-=u,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const c=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,c),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(Mt.setFromMatrixColumn(this._camera.matrix,0),wt.setFromMatrixColumn(this._camera.matrix,1),zt.setFromMatrixColumn(this._camera.matrix,2),Mt.multiplyScalar(this._focalOffset.x),wt.multiplyScalar(-this._focalOffset.y),zt.multiplyScalar(this._focalOffset.z),B.copy(Mt).add(wt).add(zt),this._camera.position.add(B),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),B.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const m=this._needsUpdate;return m&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):m?(this.dispatchEvent({type:"update"}),j(e,this.restThreshold)&&j(s,this.restThreshold)&&j(n,this.restThreshold)&&j(o.x,this.restThreshold)&&j(o.y,this.restThreshold)&&j(o.z,this.restThreshold)&&j(r.x,this.restThreshold)&&j(r.y,this.restThreshold)&&j(r.z,this.restThreshold)&&j(l,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!m&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=m,this._needsUpdate=!1,m}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:ye(this.maxDistance),minZoom:this.minZoom,maxZoom:ye(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ye(this.maxPolarAngle),minAzimuthAngle:ye(this.minAzimuthAngle),maxAzimuthAngle:ye(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:B.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,e=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=be(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=be(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=be(s.maxPolarAngle),this.minAzimuthAngle=be(s.minAzimuthAngle),this.maxAzimuthAngle=be(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],e),mt.setFromVector3(B.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(mt.theta,mt.phi,e),this.dollyTo(mt.radius,e),this.zoomTo(s.zoom,e),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],e),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Pu),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(e=>e.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(e=>e.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,e,s){const n=e.lengthSq();if(n===0)return t;const o=D.copy(e).add(t),l=this._boundary.clampPoint(o,Qt).sub(o),c=l.lengthSq();if(c===0)return t.add(e);if(c===n)return t;if(s===0)return t.add(e).add(l);{const h=1+s*c/e.dot(l);return t.add(D.copy(e).multiplyScalar(h)).add(l.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Ut(this._camera)){const t=this._camera,e=t.near,s=t.getEffectiveFOV()*ve,n=Math.tan(s*.5)*e,o=n*t.aspect;this._nearPlaneCorners[0].set(-o,-n,0),this._nearPlaneCorners[1].set(o,-n,0),this._nearPlaneCorners[2].set(o,n,0),this._nearPlaneCorners[3].set(-o,n,0)}else if(Lt(this._camera)){const t=this._camera,e=1/t.zoom,s=t.left*e,n=t.right*e,o=t.top*e,r=t.bottom*e;this._nearPlaneCorners[0].set(s,o,0),this._nearPlaneCorners[1].set(n,o,0),this._nearPlaneCorners[2].set(n,r,0),this._nearPlaneCorners[3].set(s,r,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||ji(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(Me);Yi.lookAt(rn,s,this._camera.up);for(let n=0;n<4;n++){const o=D.copy(this._nearPlaneCorners[n]);o.applyMatrix4(Yi);const r=Qt.addVectors(this._target,o);ei.set(r,s),ei.far=this._spherical.radius+1;const l=ei.intersectObjects(this.colliderMeshes);l.length!==0&&l[0].distance<t&&(t=l[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const e=this._domElement.getBoundingClientRect();return t.x=e.left,t.y=e.top,this._viewport?(t.x+=this._viewport.x,t.y+=e.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=e.width,t.height=e.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(e=>{const s=()=>{this.removeEventListener("rest",s),e()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,e=new N.Sphere){const s=e,n=s.center;Kt.makeEmpty(),t.traverseVisible(r=>{r.isMesh&&Kt.expandByObject(r)}),Kt.getCenter(n);let o=0;return t.traverseVisible(r=>{if(!r.isMesh)return;const l=r;if(!l.geometry)return;const c=l.geometry.clone();c.applyMatrix4(l.matrixWorld);const m=c.attributes.position;for(let u=0,d=m.count;u<d;u++)B.fromBufferAttribute(m,u),o=Math.max(o,n.distanceToSquared(B))}),s.radius=Math.sqrt(o),s}}class Ei{constructor(t,e,s){f(this,"camera");f(this,"focalOffset");f(this,"target");this.camera=t,this.target=e,this.focalOffset=s}}class Tu extends Ga{constructor(e,s,n){super(e,n,"Camera Controls");f(this,"camera");f(this,"_boundOnAfterCameraUpdate");f(this,"_cameraPosition");this.camera=s,this._cameraPosition=new Ei(new g.Vector3,new g.Vector3,new g.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const o=this.gui.addFolder("Position");o.close(),this._controllers.push(o.add(this._cameraPosition.camera,"x")),this._controllers.push(o.add(this._cameraPosition.camera,"y")),this._controllers.push(o.add(this._cameraPosition.camera,"z"));const r=this.gui.addFolder("Target");r.close(),this._controllers.push(r.add(this._cameraPosition.target,"x")),this._controllers.push(r.add(this._cameraPosition.target,"y")),this._controllers.push(r.add(this._cameraPosition.target,"z"));const l=this.gui.addFolder("Focal offset");l.close(),this._controllers.push(l.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}gt.install({THREE:{Box3:g.Box3,MathUtils:g.MathUtils,Matrix4:g.Matrix4,Quaternion:g.Quaternion,Raycaster:g.Raycaster,Sphere:g.Sphere,Spherical:g.Spherical,Vector2:g.Vector2,Vector3:g.Vector3,Vector4:g.Vector4}});class Bu extends g.EventDispatcher{constructor(e,s){super();f(this,"_boundOnAfterCameraUpdate");f(this,"_boundOnBeforeCameraUpdate");f(this,"_boundOrbitControlsOnContextMenu");f(this,"_boundOrbitControlsOnKey");f(this,"_boundOrbitControlsOnMouseUp");f(this,"_boundOrbitControlsOnWheel");f(this,"_boundPositionOnMapOnClick");f(this,"_boundPositionOnMapOnContextMenu");f(this,"_boundPositionOnMapOnMouseMove");f(this,"_cameraControlsInspector");f(this,"_clock");f(this,"_giro3dStore",de());f(this,"_instance");f(this,"_orbitControls");f(this,"_orbitHelper");f(this,"_picker");f(this,"_pickObjectsAt");f(this,"_positionOnMapHelper");f(this,"_store",g.useCameraStore());this._instance=e,this._picker=s,this._orbitControls=new gt(this._instance.view.camera,this._instance.domElement);const n=document.createElement("div");n.className="helper",n.id="orbit-helper";const o=document.createElement("i");o.className="bi bi-mouse2-fill text-dark shadow",n.append(o),this._orbitHelper=new ts(n),this._instance.add(this._orbitHelper);const r=document.createElement("div");r.className="helper",r.id="position-on-map-helper";const l=document.createElement("i");l.className="fg-position-man text-dark shadow",r.append(l),this._positionOnMapHelper=new ts(r),this._instance.add(this._positionOnMapHelper),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=h=>{var m;return((m=this._picker.getFirstFeatureAt(this._instance,h,1))==null?void 0:m.at(0))??null},this._clock=new g.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:h,name:m})=>{switch(m){case"lookTopDownAt":this.lookTopDownAt(h[0]);break;case"setCameraPosition":this.setCamera(h[0]);break;case"setNavigationMode":this.setNavigationMode(h[0]);break}});const c=this._giro3dStore.getInspector();c!=null&&this.initializeInspector(c),this._giro3dStore.$onAction(({after:h,args:m,name:u})=>{h(()=>{switch(u){case"setInspector":this.initializeInspector(m[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(e){this._orbitControls.enabled=e}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls(),this._instance.remove(this._positionOnMapHelper),this._instance.remove(this._orbitHelper)}executeInteraction(e){this._orbitControls.update(this._clock.getDelta());const s=e();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(e){const s=this._orbitControls,n=e??new Ei(new g.Vector3,new g.Vector3,new g.Vector3);return s.getPosition(n.camera),s.getTarget(n.target),s.getFocalOffset(n.focalOffset),n}goToBox(e,s=!0,n={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const o=this.getBox(e);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(o,s,n)))}async lookAt(e,s,n=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(e.x,e.y,e.z,s.x,s.y,s.z,n))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(e,s=!0){const n=new g.Vector3,o=new g.Vector3,r=new g.Vector3(0,0,1),l=this.getBox(e);l.min.z=l.max.z,l.getCenter(n),l.getSize(o);const c=this._orbitControls.getDistanceToFitBox(o.x,o.y,0),h=r.multiplyScalar(c).add(n);return h.x+=o.x/10,h.y-=o.y/10,this.lookAt(h,n,s)}setCamera(e){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(e.camera.x,e.camera.y,e.camera.z,e.target.x,e.target.y,e.target.z,!1),this._orbitControls.setFocalOffset(e.focalOffset.z,e.focalOffset.y,e.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(e,s=4e3){const n=new ct(e.crs,e.west,e.south,s).toVector3(),o=e.centerAsVector3();this.lookAt(n,o,!1)}getBox(e){let s=new g.Box3;if(e.isBox3)s=e.clone();else if(e.isEntity3D){const n=e,o=n.getBoundingBox();o&&!o.isEmpty()?s=o.clone():"extent"in n&&(s=n.extent.toBox3(0,200))}else if(e.isObject3D)s.setFromObject(e);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._positionOnMapHelper.visible=!1,this._instance.domElement.style.cursor="auto",this._instance.notifyChange())}_enablePositionOnMap(){this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(e){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),e&&(this._cameraControlsInspector=new Tu(e.gui,this,this._instance),e.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const e=this._clock.getDelta();this._orbitControls.update(e)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(e){const s=this._picker.getMapAt(this._instance,e);if(s){this._disablePositionOnMap();const n=new g.Vector3;this._instance.view.camera.getWorldDirection(n),n.normalize().setLength(3);const o=s.point.clone();o.z+=1.7;const r=o.clone();r.add(n),r.z=o.z,this.lookAt(o,r,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(e){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),e.preventDefault()}onPositionOnMapMouseMove(e){const s=this._picker.getMapAt(this._instance,e);this._instance.domElement.style.cursor=s?"none":"auto",this._positionOnMapHelper.visible=s!=null,s&&(this._positionOnMapHelper.position.copy(s.point),this._positionOnMapHelper.updateMatrixWorld()),this._instance.notifyChange()}orbitControlsOnContextMenu(e){if(this._store.getNavigationMode()!=="orbit")return;const s=this._pickObjectsAt(e);s?(this._orbitHelper.visible=!0,this._orbitHelper.position.copy(s.point),this._orbitHelper.updateMatrixWorld(),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z)):(this._orbitHelper.visible=!0,this._orbitControls.getTarget(this._orbitHelper.position),this._orbitHelper.updateMatrixWorld())}orbitControlsOnKey(e){const s=this._store.getNavigationMode();if(s==="position-on-map"){e.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const n={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let o=0,r=0,l=0,c=0,h=e.ctrlKey||e.metaKey||e.shiftKey?200:20;switch(s==="first-person"&&(h/=10),e.code){case n.ARROW_BOTTOM:s==="first-person"?r=-1:o=-1;break;case n.ARROW_LEFT:case n.KEY_LEFT:l=-1;break;case n.ARROW_RIGHT:case n.KEY_RIGHT:l=1;break;case n.ARROW_UP:s==="first-person"?r=1:o=1;break;case n.KEY_DOWN:c=1;break;case n.KEY_UP:c=-1;break}o&&this.executeInteraction(()=>this._orbitControls.forward(o*this._orbitControls.truckSpeed*h,!0)),r&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(r*this._orbitControls.truckSpeed*h,!0)),l&&this.executeInteraction(()=>this._orbitControls.truck(l*this._orbitControls.truckSpeed*h,0,!0)),c&&this.executeInteraction(()=>this._orbitControls.truck(0,c*this._orbitControls.truckSpeed*h,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._orbitHelper.visible=!1,this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(e){switch(this._disablePositionOnMap(),e){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=gt.ACTION.ROTATE,this._orbitControls.mouseButtons.right=gt.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=gt.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=gt.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new g.Vector3,n=this._instance.view.camera.position.clone(),o=new g.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),o.copy(n).add(s),this.lookAt(n,o,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=gt.ACTION.TRUCK,this._orbitControls.mouseButtons.right=gt.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=gt.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=gt.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new g.Vector3,n=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const o=new g.Raycaster;o.camera=this._instance.view.camera,o.set(n,s);const r=o.intersectObject(this._instance.scene).at(0);r&&this.lookAt(n,r.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return e}this._instance.domElement.focus()}}const jt=new g.EventDispatcher,oa=i=>g.isObject(i)&&(i.type==="colorLayer"||i.type==="maskLayer"||i.type==="elevationLayer"),Du=i=>g.isObject(i)&&!oa(i);class Vu{constructor(t,e){f(this,"_axisGrids",new Map);f(this,"_entities",new Map);f(this,"_instance");f(this,"_layerManager");f(this,"_masks",new Map);f(this,"_notifications",me());f(this,"_overlays",new Map);f(this,"_store",g.useDatasetStore());this._instance=t,this._layerManager=e,this._store.$onAction(({after:s,args:n,name:o})=>{s(()=>{switch(o){case"importFromFile":this.importFromFile(n[0]);break;case"remove":this.deleteDataset(n[0]);break;case"setVisible":this.onVisibilityChanged(n[0],n[1]);break;case"toggleGrid":this.onToggleGrid(n[0]);break;case"toggleMask":this.onToggleMask(n[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const e=this._store.getBoundingBox(t);if(e==null||e.isEmpty())return;const s=new ja({style:{color:new g.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:e.max.z+10,extent:yi.fromBox3(this._instance.referenceCrs,e).withMargin(20,20),floor:e.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const e=this._store.getBoundingBox(t);if(e==null||e.isEmpty())return;e.expandByVector(new g.Vector3(-5,-5,0));const s=new Ha({geometry:new Za([[[e.min.x,e.min.y],[e.min.x,e.max.y],[e.max.x,e.max.y],[e.max.x,e.min.y],[e.min.x,e.min.y]]]),name:"Mask polygon"}),n=new ui({name:`mask-${t.uuid}`,source:new Ee({data:[s],style:new Q.Style({fill:new Q.Fill({color:"white"})})})});n.maskMode=ui.MaskMode.Inverted;const o=this._instance.getObjects(r=>gi.isMap(r));for(const r of o)await r.addLayer(n),this._instance.notifyChange(r);this._masks.set(t.uuid,n)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const e=this._entities.get(t.uuid);e&&(this._instance.remove(e),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),jt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const e=this._axisGrids.get(t.uuid);e&&this._instance.remove(e),this._axisGrids.delete(t.uuid)}deleteMask(t){const e=this._masks.get(t.uuid);e&&this._instance.getObjects(n=>gi.isMap(n)).forEach(n=>{n.removeLayer(e),this._instance.notifyChange(n)}),this._masks.delete(t.uuid)}async importFromFile(t){let e;const s=t instanceof File?t.name:t;try{this._notifications.push(new st(s,"Importing file..."));const n=await Dg.importFile(t,g.getConfig());e=this._store.add(n),this._notifications.push(new st(e.name,"Import done, parsing data...","success"))}catch(n){console.error(n),this._notifications.push(new st(s,n.message,"error"));return}try{e.isPreloading=!0,await this.preloadDataset(e),this._notifications.push(new st(e.name,"Import successful.","success"))}catch{}jt.dispatchEvent({type:"dataset-added",value:e})}onDatasetPreloaded(t,e){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,e),this._store.attachEntity(t,e)}onDatasetPreloadedAsLayer(t,e){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,e)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,e){try{t.visible=e,!t.isPreloaded&&e&&await this.preloadDataset(t),await this.updateDataset(t),g.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,e))}catch{t.visible=!1}jt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(g.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(oa(t)){const e=await is.getDatasetLayer(this._instance,t);e.visible=t.visible,this._overlays.set(t.uuid,e),await this._layerManager.addDatasetLayer(e),this.onDatasetPreloadedAsLayer(t,e)}else if(Du(t)){const e=await kg.getEntity(this._instance,t);e.visible=t.visible,this._entities.set(t.uuid,e),await this._instance.add(e),this.onDatasetPreloaded(t,e)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(e){throw console.error("Could not load dataset",t,e),t.isPreloading=!1,this._notifications.push(new st(t.name,`Could not load dataset : ${e.message}`,"error")),e}return t}async updateDataset(t){const e=this._entities.get(t.uuid);e&&(e.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(e));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class Ru{constructor(t){f(this,"_hoverMeasurement");f(this,"_picker");f(this,"_raycaster");this._picker=t,this._raycaster=new g.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,e){var n;const s=(n=this._picker.getFirstFeatureAt(t,e,0,o=>!ut.isShape(o)))==null?void 0:n.at(0);if(s&&s.normal){const o=s.normal.clone();o.transformDirection(s.object.matrixWorld),o.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,o);const r=this._raycaster.intersectObject(t.scene,!0).filter(l=>l.distance>1e-5&&l.object.userData.parentEntity!==this._hoverMeasurement).at(0);r&&(this._hoverMeasurement||(this._hoverMeasurement=new De,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,r.point]),t.notifyChange(this._hoverMeasurement))}}}const As=St.defineStore("measurement",()=>{const i=a.reactive([]),t=a.ref("laser"),e=a.computed(()=>i.length),s=a.ref(!1);function n(){return s.value}function o(v){s.value=v}function r(){return t.value}function l(v){t.value=v}function c(){return i}function h(v){i.splice(i.indexOf(v),1)}function m(v){i.push(v)}function u(v){return i.some(I=>I.title===v)}function d(v){}function C(v){}function p(){}function A(){}return{add:m,count:e,end:A,getMeasurementMode:r,getMeasures:c,hasMeasure:u,importMeasureFile:d,importMeasureFiles:C,isUserMeasuring:n,remove:h,setIsUserMeasuring:o,setMeasurementMode:l,start:p}});class ra extends g.EventDispatcher{constructor(e,s,n={}){super();f(this,"properties");f(this,"title");f(this,"uuid");f(this,"_object");f(this,"_visible");this.title=e,this._visible=!0,this._object=s,this.properties=n,this.uuid=g.MathUtils.generateUUID()}get object(){return this._object}set object(e){this._object=e}get visible(){return this._visible}set visible(e){this._visible=e,this.dispatchEvent({type:"visible"})}static toCollection(e){return{features:e.map(n=>n.toGeoJSON()),type:"FeatureCollection",id:`${g.Download.getBaseUrl()}#${g.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:g.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${g.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function Fu(i){return window.prompt("Measure name",i)}class Uu{constructor(t,e,s){f(this,"_boundMeasure");f(this,"_boundOnEscape");f(this,"_boundPause");f(this,"_boundRestart");f(this,"_boundSaveMeasure");f(this,"_camera");f(this,"_instance");f(this,"_measureTool");f(this,"_notificationStore",me());f(this,"_paused",!1);f(this,"_store",As());this._instance=t,this._measureTool=new Ru(s),this._camera=e,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:n,args:o,name:r})=>{n(()=>{switch(r){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(o[0]);break;case"importMeasureFiles":this.importMeasureFiles(o[0]);break;case"remove":this.deleteMeasure(o[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(e=>e.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,e){const s=await t.text(),n=JSON.parse(s),o=n.type==="FeatureCollection"?n.features:[n];let r=0,l=0;for(const c of o)await this.importMeasure(c,e)?r++:l++;return{nbImported:r,nbSkipped:l}}async importMeasure(t,e){var r;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=g.MathUtils.generateUUID()),e.has(t.properties.title))return!1;const s=new g.Vector3(...t.geometry.coordinates[0]),n=new g.Vector3(...t.geometry.coordinates[1]),o=new De;return o.setPoints([s,n]),await this.pushNewMeasure((r=t.properties)==null?void 0:r.title,o,t.properties),!0}async importMeasureFile(t){const e=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:n}=await this.importBlob(t,e);this._notificationStore.push(new st("Measures",`${s} measures imported (${n} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const e=[];let s=0,n=0;const o=[],r=new Set(this._store.getMeasures().map(l=>l.title));for(const l of t)e.push(this.importBlob(l,r).then(({nbImported:c,nbSkipped:h})=>{s+=c,n+=h}).catch(c=>{o.push(c.message)}));await Promise.allSettled(e),o.length>0?this._notificationStore.push(new st("Measures",`${s} measures imported (${n} skipped); ${o.length} errors: ${o}`,"warning")):this._notificationStore.push(new st("Measures",`${s} measures imported (${n} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,e,s={}){await this._instance.add(e);const n=new ra(t,e,s);e.userData.measure=n,n.addEventListener("visible",()=>this.updateMeasure(n)),this._store.add(n),this._instance.notifyChange(e)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let e="New measurement";if(this._store.hasMeasure(e)){for(let n=1;n<1e3&&(e=`New measurement (${n})`,!!this._store.hasMeasure(e));n+=1);this._store.hasMeasure(e)&&(e="Achieved unlocked: 1000 measurements with default name")}const s=Fu(e);s!=null&&this.pushNewMeasure(s,t)}}}}class zu extends g.EventDispatcher{constructor(e){super();f(this,"ambientLight");f(this,"analysisManager");f(this,"annotationManager");f(this,"camera");f(this,"datasetManager");f(this,"dirLight");f(this,"highlighter");f(this,"layerManager");f(this,"mainInstance");f(this,"measurementManager");f(this,"picker");f(this,"_boundOnFrameEnd");f(this,"_store",de());this.mainInstance=e,this.picker=new qs,this.camera=new Bu(this.mainInstance,this.picker);const s=this._store.getDefaultCameraPosition(),n=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),n.toVector3()),this.layerManager=new ou(this.mainInstance),this.datasetManager=new Vu(this.mainInstance,this.layerManager),this.annotationManager=new Su(this.mainInstance,this.camera,this.picker),this.analysisManager=new wu(this.mainInstance,this.layerManager),this.highlighter=new Vg,this.picker=new qs,this.measurementManager=new Uu(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const o=16777215;this.ambientLight=new g.AmbientLight(o,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new g.DirectionalLight(o,2),this.dirLight.position.set(n.x-1e4,n.y-1e4,1e4),this.dirLight.target.position.set(n.x,n.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.analysisManager.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const e=new g.Box3,s=new g.Box3;return this.mainInstance.scene.traverse(n=>{s.setFromObject(n),e.union(s)}),e}getObjects3d(){const e=[];return this.mainInstance.scene.traverse(s=>{e.push(s)}),e}onFrameEnd(){const e=this.mainInstance.view.camera;e.near=2,this.dispatchEvent({type:"update"})}}class Gu{constructor(){f(this,"geometry");f(this,"object3D");this.geometry=new g.BufferGeometry,this.object3D=new g.LineSegments(this.geometry,new g.LineBasicMaterial({color:16711680})),this.object3D.position.set(0,0,1),this.object3D.updateMatrixWorld()}setCorners(t,e,s,n){this.geometry.setFromPoints([t,e,e,s,s,n,n,t])}}const ju=new Wa("EPSG:3857",-20037508342789244e-9,20037508342789244e-9,-20037508342789244e-9,20037508342789244e-9);function Hu(i){const t=new le({name:"osm",source:new Ya({source:new Xa})});return t.visible=!0,i.addLayer(t)}class Zu{constructor(t){f(this,"_basemap");f(this,"_boundUpdateViewbox");f(this,"_mainInstance");f(this,"_minimapInstance");f(this,"_viewbox");this._mainInstance=null,this._minimapInstance=t,this._viewbox=new Gu,this._minimapInstance.scene.add(this._viewbox.object3D),this._viewbox.object3D.updateMatrixWorld(),this._minimapInstance.notifyChange(),this._basemap=new qa({extent:ju}),this._basemap.name="minimap",this._minimapInstance.add(this._basemap),Hu(this._basemap);const e=new ct("EPSG:4326",4.84,45.76).as(this._minimapInstance.referenceCrs),s=new g.Vector3(e.x,e.y,0),n=this._minimapInstance.view.camera;n.position.set(s.x,s.y,2e4),n.lookAt(s.x,s.y+1,0),this._minimapInstance.notifyChange(),this._boundUpdateViewbox=this.updateViewbox.bind(this)}dispose(){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._minimapInstance.remove(this._basemap),this._minimapInstance.scene.remove(this._viewbox.object3D),this._basemap.dispose(),this._viewbox.geometry.dispose(),this._viewbox.object3D.geometry.dispose(),this._viewbox.object3D.material.dispose()}getCorners(){const t=this._mainInstance,e=this._minimapInstance;if(t===null)throw new Error("Must call setMainInstance before getCorners");const s=t.engine.getWindowSize(),n=(h,m)=>{var C;const d=(C=t.pickObjectsAt(new g.Vector2(h,m),{limit:1,radius:0}).at(0))==null?void 0:C.point;if(d){const p=new ct(t.referenceCrs,d.x,d.y,1).as(e.referenceCrs).toVector3();return p.z=1,p}},o=n(0,0),r=n(s.x-1,0),l=n(0,s.y-1),c=n(s.x-1,s.y-1);if(!(!o||!r||!l||!c))return{ll:l,lr:c,ul:o,ur:r}}setMainInstance(t){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._mainInstance=t,t&&t.addEventListener("after-camera-update",this._boundUpdateViewbox)}updateViewbox(){if(this._mainInstance===null)throw new Error("Must call setMainInstance before updateViewbox");const t=this._mainInstance.view.camera,e=this._minimapInstance.view.camera;this._viewbox.object3D.visible=!1;const s=t.position,n=new ct(this._mainInstance.referenceCrs,s.x,s.y,0).as(this._minimapInstance.referenceCrs),{x:o,y:r}=n;e.position.set(o,r,e.position.z),e.lookAt(o,r+1,0),this._minimapInstance.notifyChange(this._basemap)}}class Wu{constructor(t){f(this,"_cameraController");this._cameraController=t.camera}getCameraController(){return this._cameraController}}const qu={class:"toast-container"},Yu=["v-if"],Xu={class:"me-auto mx-2"},Ju=["innerHTML"],Qu=a.defineComponent({__name:"AlertToast",setup(i){const t=a.ref(null),e=a.ref(st.empty());function s(l){e.value=l,to.Toast.getOrCreateInstance(t.value).show()}me().$onAction(({args:l,name:c})=>{switch(c){case"push":s(l[0]);break}});function o(){if(e.value==null)return"text-bg-success";switch(e.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function r(){if(e.value==null)return"text-bg-success";switch(e.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(l,c)=>(a.openBlock(),a.createElementBlock("div",qu,[a.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[a.createElementVNode("div",{class:a.normalizeClass(["toast-header",r()])},[a.createElementVNode("i",{"v-if":e.value.level==="info",class:a.normalizeClass(["bi",o()])},null,10,Yu),a.createElementVNode("strong",Xu,a.toDisplayString(e.value.title),1),c[0]||(c[0]=a.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),a.createElementVNode("div",{class:"toast-body",innerHTML:e.value.text},null,8,Ju)],512)]))}}),Ku=g._export_sfc(Qu,[["__scopeId","data-v-002327a6"]]),$u=a.defineComponent({__name:"ColorFragment",props:{color:{}},setup(i){a.useCssVars(s=>({"8f755d56":e}));const e=`#${i.color.getHexString()}`;return(s,n)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[a.createElementVNode("span",{class:"color"},[a.createElementVNode("span",{class:"d-none"},a.toDisplayString(e))]),a.createTextVNode(" "+a.toDisplayString(e))],64))}}),td=g._export_sfc($u,[["__scopeId","data-v-535f5fef"]]),ed={class:"text-secondary"},id=a.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",ed,[a.createElementVNode("span",null,[a.createElementVNode("b",null,a.toDisplayString(i.prefix),1),a.createTextVNode(" "+a.toDisplayString(i.value)+a.toDisplayString(i.suffix),1)])]))}}),kt=g._export_sfc(id,[["__scopeId","data-v-ce90ec07"]]),sd=["href"],nd=["src","alt"],ad={controls:"",style:{"max-width":"200px"}},od=["src","type"],rd=["href"],ld=["href"],cd=["title","src"],hd=["href"],gd=["href"],ud=a.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(i){const t=i;return(e,s)=>{var n,o;return(n=t.type)!=null&&n.startsWith("image/")?(a.openBlock(),a.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[a.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,nd)],8,sd)):(o=t.type)!=null&&o.startsWith("video/")?(a.openBlock(),a.createElementBlock(a.Fragment,{key:1},[a.createElementVNode("video",ad,[a.createElementVNode("source",{src:t.href,type:t.type},null,8,od),s[0]||(s[0]=a.createTextVNode(" Download the ",-1)),a.createElementVNode("a",{href:t.href},"video",8,rd),s[1]||(s[1]=a.createTextVNode(".",-1))]),s[2]||(s[2]=a.createElementVNode("br",null,null,-1)),s[3]||(s[3]=a.createTextVNode(" Download the ",-1)),a.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,ld),s[4]||(s[4]=a.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(a.openBlock(),a.createElementBlock(a.Fragment,{key:2},[a.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,cd),s[5]||(s[5]=a.createElementVNode("br",null,null,-1)),s[6]||(s[6]=a.createTextVNode(" Download the ",-1)),a.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,hd),s[7]||(s[7]=a.createTextVNode(". ",-1))],64)):(a.openBlock(),a.createElementBlock("a",{key:3,href:t.href,target:"_blank"},a.toDisplayString(t.title),9,gd))}}}),dd=["title"],md={key:0,class:"text-secondary"},pd={key:1,class:"text-secondary"},Ad={key:0},Cd={key:3,class:"d-flex align-items-center justify-content-between"},fd={key:4,class:"text-secondary"},Id=["title"],vd=a.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(i){const t=i;let e;switch(t.attrName){case"IFCType":e=["badge","bg-secondary","text-light","text-truncate"];break;default:e=["text-truncate"]}return(s,n)=>{const o=a.resolveComponent("AttributeItem",!0);return a.openBlock(),a.createElementBlock("tr",null,[a.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},a.toDisplayString(s.attrName),9,dd),a.createElementVNode("td",{class:a.normalizeClass(a.unref(e))},[t.attrValue===void 0?(a.openBlock(),a.createElementBlock("span",md,"undefined")):t.attrValue===null?(a.openBlock(),a.createElementBlock("span",pd,"null")):typeof t.attrValue=="object"?(a.openBlock(),a.createElementBlock(a.Fragment,{key:2},[Array.isArray(t.attrValue)?(a.openBlock(),a.createElementBlock("table",Ad,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(t.attrValue,(r,l)=>(a.openBlock(),a.createBlock(o,{key:l,"attr-name":`[${l}]`,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])):a.unref(g.isLink)(t.attrValue)?(a.openBlock(),a.createBlock(ud,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):a.unref(g.isColor)(t.attrValue)?(a.openBlock(),a.createBlock(td,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):a.unref(g.isVector3)(t.attrValue)?(a.openBlock(),a.createElementBlock("div",Cd,[a.createVNode(kt,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),a.createVNode(kt,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),a.createVNode(kt,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(a.openBlock(),a.createElementBlock("span",fd,"Object"))],64)):(a.openBlock(),a.createElementBlock("span",{key:3,title:t.attrValue},a.toDisplayString(t.attrValue),9,Id))],2)])}}}),la=g._export_sfc(vd,[["__scopeId","data-v-1c2e92b2"]]),yd={key:0},bd={class:"badge bg-info-subtle text-dark mb-0"},Md={class:"table table-striped table-sm w-100"},wd=a.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(i){return(t,e)=>t.children.length>0?(a.openBlock(),a.createElementBlock("div",yd,[a.createElementVNode("h6",bd,a.toDisplayString(t.title),1),a.createElementVNode("table",Md,[a.createElementVNode("tbody",null,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(t.children,(s,n)=>(a.openBlock(),a.createBlock(la,{key:n,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):a.createCommentVNode("",!0)}}),Ed={class:"card"},_d={class:"card-header d-flex align-items-center justify-content-between"},xd={class:"text-truncate mx-2"},Od={class:"card-body content py-2 px-1"},kd={class:"card-footer py-0"},Sd={class:"d-flex align-items-center column-gap-3"},Nd=a.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(i){const t=i,e=a.ref(!1);function s(){const n=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(n).then(()=>{e.value=!0,setTimeout(()=>e.value=!1,2e3)}).catch(o=>{console.log("failed",o)})}return(n,o)=>(a.openBlock(),a.createElementBlock("div",Ed,[a.createElementVNode("div",_d,[o[1]||(o[1]=a.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),a.createElementVNode("span",xd,a.toDisplayString(n.name??n.parent),1),a.createElementVNode("button",{onClick:o[0]||(o[0]=r=>n.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),a.createElementVNode("div",Od,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(n.attributes.entries(),(r,l)=>(a.openBlock(),a.createBlock(wd,{key:l,title:r[0],children:r[1]},null,8,["title","children"]))),128))]),a.createElementVNode("div",kd,[a.createElementVNode("div",Sd,[a.createVNode(kt,{value:n.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),a.createVNode(kt,{value:n.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),a.createVNode(kt,{value:n.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),a.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[a.createElementVNode("i",{class:a.normalizeClass(["bi",e.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Pd=g._export_sfc(Nd,[["__scopeId","data-v-b1912966"]]),Ld="data:image/png;base64,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",Td={id:"loading-screen",class:"container"},Bd={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Dd={class:"logo"},Vd=["src"],Rd=a.defineComponent({__name:"LoadingScreen",setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",Td,[e[1]||(e[1]=a.createElementVNode("h1",null,"Loading...",-1)),a.createElementVNode("h2",null,[(a.openBlock(),a.createElementBlock("svg",Bd,[...e[0]||(e[0]=[a.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),a.createElementVNode("div",Dd,[a.createElementVNode("img",{src:a.unref(Ld)},null,8,Vd)])]))}}),Fd=g._export_sfc(Rd,[["__scopeId","data-v-712b955c"]]),Ud={class:"main"},zd=a.defineComponent({__name:"MainView",setup(i){const t=a.ref(null),e=a.ref(null),s=a.shallowRef(null),n=de();return a.onMounted(()=>{s.value=new os({backgroundColor:null,crs:n.getCRS(),target:t.value}),n.setMainView(s.value)}),a.onUnmounted(()=>{n.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(o,r)=>(a.openBlock(),a.createElementBlock("div",Ud,[a.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),a.createElementVNode("div",{ref_key:"inspectorView",ref:e,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),Gd=g._export_sfc(zd,[["__scopeId","data-v-0d10144c"]]),jd=a.defineComponent({__name:"MinimapView",setup(i){const t=a.ref(null),e=a.shallowRef(),s=de();return a.onMounted(()=>{e.value=new os({backgroundColor:13421772,crs:"EPSG:3857",target:t.value}),e.value.scene.add(new g.DirectionalLight),s.setMinimapView(e.value)}),a.onUnmounted(()=>{var n;s.setMinimapView(null),(n=e.value)==null||n.dispose()}),(n,o)=>(a.openBlock(),a.createElementBlock("div",{ref_key:"target",ref:t,class:"main"},null,512))}}),Hd=g._export_sfc(jd,[["__scopeId","data-v-d78f1f47"]]),Zd={class:"form-check form-switch"},Wd=["checked"],Cs=a.defineComponent({__name:"SwitchToggle",props:["modelValue"],emits:["update:modelValue"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",Zd,[a.createElementVNode("input",{class:"form-check-input",type:"checkbox",role:"switch",checked:i.modelValue,onInput:e[0]||(e[0]=s=>t.$emit("update:modelValue",s.target.checked))},null,40,Wd),a.renderSlot(t.$slots,"default")]))}}),qd={class:"card root"},Yd={class:"d-flex align-items-center"},Xd=["aria-pressed"],Jd=a.defineComponent({__name:"NavigationButtons",setup(i){const t=g.useCameraStore(),e=me(),s=a.ref(t.getNavigationModeRef());a.watch(s,o=>{t.setNavigationMode(o);let r,l;switch(o){case"disabled":{r="Disabled",l="Camera is disabled";break}case"first-person":{r="First person",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
|
|
9
|
+
*/const G={LEFT:1,RIGHT:2,MIDDLE:4},y=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Ut={NONE:0,IN:1,OUT:-1};function Lt(e){return e.isPerspectiveCamera}function wt(e){return e.isOrthographicCamera}const zt=Math.PI*2,Ms=Math.PI/2,Ma=1e-5,le=Math.PI/180;function dt(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=Ma){return Math.abs(e)<t}function V(e,t,i=Ma){return j(e-t,i)}function ws(e,t){return Math.round(e/t)*t}function he(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function ce(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function Ne(e,t,i,s,a=1/0,n){s=Math.max(1e-4,s);const r=2/s,l=r*n,h=1/(1+l+.48*l*l+.235*l*l*l);let c=e-t;const d=t,g=a*s;c=dt(c,-g,g),t=e-c;const u=(i.value+r*c)*n;i.value=(i.value-r*u)*h;let f=t+(c+u)*h;return d-e>0==f>d&&(f=d,i.value=(f-d)/n),f}function Es(e,t,i,s,a=1/0,n,r){s=Math.max(1e-4,s);const l=2/s,h=l*n,c=1/(1+h+.48*h*h+.235*h*h*h);let d=t.x,g=t.y,u=t.z,f=e.x-d,m=e.y-g,C=e.z-u;const v=d,I=g,b=u,M=a*s,_=M*M,x=f*f+m*m+C*C;if(x>_){const St=Math.sqrt(x);f=f/St*M,m=m/St*M,C=C/St*M}d=e.x-f,g=e.y-m,u=e.z-C;const E=(i.x+l*f)*n,S=(i.y+l*m)*n,D=(i.z+l*C)*n;i.x=(i.x-l*E)*c,i.y=(i.y-l*S)*c,i.z=(i.z-l*D)*c,r.x=d+(f+E)*c,r.y=g+(m+S)*c,r.z=u+(C+D)*c;const W=v-e.x,et=I-e.y,P=b-e.z,U=r.x-v,z=r.y-I,ut=r.z-b;return W*U+et*z+P*ut>0&&(r.x=v,r.y=I,r.z=b,i.x=(r.x-v)/n,i.y=(r.y-I)/n,i.z=(r.z-b)/n),r}function fi(e,t){t.set(0,0),e.forEach(i=>{t.x+=i.clientX,t.y+=i.clientY}),t.x/=e.length,t.y/=e.length}function Ii(e,t){return wt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Dg{constructor(){this._listeners={}}addEventListener(t,i){const s=this._listeners;s[t]===void 0&&(s[t]=[]),s[t].indexOf(i)===-1&&s[t].push(i)}hasEventListener(t,i){const s=this._listeners;return s[t]!==void 0&&s[t].indexOf(i)!==-1}removeEventListener(t,i){const a=this._listeners[t];if(a!==void 0){const n=a.indexOf(i);n!==-1&&a.splice(n,1)}}removeAllEventListeners(t){if(!t){this._listeners={};return}Array.isArray(this._listeners[t])&&(this._listeners[t].length=0)}dispatchEvent(t){const s=this._listeners[t.type];if(s!==void 0){t.target=this;const a=s.slice(0);for(let n=0,r=a.length;n<r;n++)a[n].call(this,t)}}}var pi;const Bg="2.10.1",Le=1/8,Vg=/Mac/.test((pi=globalThis==null?void 0:globalThis.navigator)===null||pi===void 0?void 0:pi.platform);let N,_s,Pe,vi,it,T,B,jt,ge,ft,It,Pt,Os,xs,ht,ue,Gt,ks,yi,Ss,bi,Mi,Te;class ot extends Dg{static install(t){N=t.THREE,_s=Object.freeze(new N.Vector3(0,0,0)),Pe=Object.freeze(new N.Vector3(0,1,0)),vi=Object.freeze(new N.Vector3(0,0,1)),it=new N.Vector2,T=new N.Vector3,B=new N.Vector3,jt=new N.Vector3,ge=new N.Vector3,ft=new N.Vector3,It=new N.Vector3,Pt=new N.Vector3,Os=new N.Vector3,xs=new N.Vector3,ht=new N.Spherical,ue=new N.Spherical,Gt=new N.Box3,ks=new N.Box3,yi=new N.Sphere,Ss=new N.Quaternion,bi=new N.Quaternion,Mi=new N.Matrix4,Te=new N.Raycaster}static get ACTION(){return y}set verticalDragToForward(t){console.warn("camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.")}constructor(t,i){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=y.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Ut.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new N.Vector3,this._focalOffsetVelocity=new N.Vector3,this._zoomVelocity={value:0},this._truckInternal=(I,b,M,_)=>{let x,E;if(Lt(this._camera)){const S=T.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*le,W=S.length()*Math.tan(D*.5);x=this.truckSpeed*I*W/this._elementRect.height,E=this.truckSpeed*b*W/this._elementRect.height}else if(wt(this._camera)){const S=this._camera;x=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,E=this.truckSpeed*b*(S.top-S.bottom)/S.zoom/this._elementRect.height}else return;_?(M?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(x,0,!0),this.forward(-E,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y+E,this._focalOffsetEnd.z,!0):this.truck(x,E,!0)},this._rotateInternal=(I,b)=>{const M=zt*this.azimuthRotateSpeed*I/this._elementRect.height,_=zt*this.polarRotateSpeed*b/this._elementRect.height;this.rotate(M,_,!0)},this._dollyInternal=(I,b,M)=>{const _=Math.pow(.95,-I*this.dollySpeed),x=this._sphericalEnd.radius,E=this._sphericalEnd.radius*_,S=dt(E,this.minDistance,this.maxDistance),D=S-E;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(E,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?E:S)-x,this._dollyControlCoord.set(b,M)),this._lastDollyDirection=Math.sign(-I)},this._zoomInternal=(I,b,M)=>{const _=Math.pow(.95,I*this.dollySpeed),x=this._zoom,E=this._zoom*_;this.zoomTo(E,!0),this.dollyToCursor&&(this._changedZoom+=E-x,this._dollyControlCoord.set(b,M))},typeof N>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=t,this._yAxisUpSpace=new N.Quaternion().setFromUnitVectors(this._camera.up,Pe),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=y.NONE,this._target=new N.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new N.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new N.Spherical().setFromVector3(T.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new N.Vector3,new N.Vector3,new N.Vector3,new N.Vector3],this._updateNearPlaneCorners(),this._boundary=new N.Box3(new N.Vector3(-1/0,-1/0,-1/0),new N.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new N.Vector2,this.mouseButtons={left:y.ROTATE,middle:y.DOLLY,right:y.TRUCK,wheel:Lt(this._camera)?y.DOLLY:wt(this._camera)?y.ZOOM:y.NONE},this.touches={one:y.TOUCH_ROTATE,two:Lt(this._camera)?y.TOUCH_DOLLY_TRUCK:wt(this._camera)?y.TOUCH_ZOOM_TRUCK:y.NONE,three:y.TOUCH_TRUCK};const s=new N.Vector2,a=new N.Vector2,n=new N.Vector2,r=I=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const _=this._domElement.getBoundingClientRect(),x=I.clientX/_.width,E=I.clientY/_.height;if(x<this._interactiveArea.left||x>this._interactiveArea.right||E<this._interactiveArea.top||E>this._interactiveArea.bottom)return}const b=I.pointerType!=="mouse"?null:(I.buttons&G.LEFT)===G.LEFT?G.LEFT:(I.buttons&G.MIDDLE)===G.MIDDLE?G.MIDDLE:(I.buttons&G.RIGHT)===G.RIGHT?G.RIGHT:null;if(b!==null){const _=this._findPointerByMouseButton(b);_&&this._disposePointer(_)}if((I.buttons&G.LEFT)===G.LEFT&&this._lockedPointer)return;const M={pointerId:I.pointerId,clientX:I.clientX,clientY:I.clientY,deltaX:0,deltaY:0,mouseButton:b};this._activePointers.push(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),this._isDragging=!0,u(I)},l=I=>{I.cancelable&&I.preventDefault();const b=I.pointerId,M=this._lockedPointer||this._findPointerById(b);if(M){if(M.clientX=I.clientX,M.clientY=I.clientY,M.deltaX=I.movementX,M.deltaY=I.movementY,this._state=0,I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(I.buttons&G.LEFT)===G.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},h=I=>{const b=this._findPointerById(I.pointerId);if(!(b&&b===this._lockedPointer)){if(b&&this._disposePointer(b),I.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=y.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=y.NONE;m()}};let c=-1;const d=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===y.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const E=this._domElement.getBoundingClientRect(),S=I.clientX/E.width,D=I.clientY/E.height;if(S<this._interactiveArea.left||S>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(I.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===y.ROTATE||this.mouseButtons.wheel===y.TRUCK){const E=performance.now();c-E<1e3&&this._getClientRect(this._elementRect),c=E}const b=Vg?-1:-3,M=I.deltaMode===1||I.ctrlKey?I.deltaY/b:I.deltaY/(b*10),_=this.dollyToCursor?(I.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(I.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case y.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case y.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case y.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case y.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case y.DOLLY:{this._dollyInternal(-M,_,x),this._isUserControllingDolly=!0;break}case y.ZOOM:{this._zoomInternal(-M,_,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},g=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===ot.ACTION.NONE){const b=I instanceof PointerEvent?I.pointerId:0,M=this._findPointerById(b);M&&this._disposePointer(M),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h);return}I.preventDefault()}},u=I=>{if(!this._enabled)return;if(fi(this._activePointers,it),this._getClientRect(this._elementRect),s.copy(it),a.copy(it),this._activePointers.length>=2){const M=it.x-this._activePointers[1].clientX,_=it.y-this._activePointers[1].clientY,x=Math.sqrt(M*M+_*_);n.set(0,x);const E=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(E,S)}if(this._state=0,!I)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in I&&I.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(I.buttons&G.LEFT)===G.LEFT&&(this._state=this._state|this.mouseButtons.left),(I.buttons&G.MIDDLE)===G.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(I.buttons&G.RIGHT)===G.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&y.ROTATE)===y.ROTATE||(this._state&y.TOUCH_ROTATE)===y.TOUCH_ROTATE||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&y.TRUCK)===y.TRUCK||(this._state&y.SCREEN_PAN)===y.SCREEN_PAN||(this._state&y.TOUCH_TRUCK)===y.TOUCH_TRUCK||(this._state&y.TOUCH_SCREEN_PAN)===y.TOUCH_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&y.DOLLY)===y.DOLLY||(this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&y.ZOOM)===y.ZOOM||(this._state&y.TOUCH_ZOOM)===y.TOUCH_ZOOM||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&y.OFFSET)===y.OFFSET||(this._state&y.TOUCH_OFFSET)===y.TOUCH_OFFSET||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,fi(this._activePointers,it);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-it.x,_=b?-b.deltaY:a.y-it.y;if(a.copy(it),((this._state&y.ROTATE)===y.ROTATE||(this._state&y.TOUCH_ROTATE)===y.TOUCH_ROTATE||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,_),this._isUserControllingRotate=!0),(this._state&y.DOLLY)===y.DOLLY||(this._state&y.ZOOM)===y.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&y.DOLLY)===y.DOLLY?(this._dollyInternal(S*_*Le,x,E),this._isUserControllingDolly=!0):(this._zoomInternal(S*_*Le,x,E),this._isUserControllingZoom=!0)}if((this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_ZOOM)===y.TOUCH_ZOOM||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_ZOOM_ROTATE)===y.TOUCH_ZOOM_ROTATE){const x=it.x-this._activePointers[1].clientX,E=it.y-this._activePointers[1].clientY,S=Math.sqrt(x*x+E*E),D=n.y-S;n.set(0,S);const W=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,et=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&y.TOUCH_DOLLY)===y.TOUCH_DOLLY||(this._state&y.TOUCH_DOLLY_ROTATE)===y.TOUCH_DOLLY_ROTATE||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*Le,W,et),this._isUserControllingDolly=!0):(this._zoomInternal(D*Le,W,et),this._isUserControllingZoom=!0)}((this._state&y.TRUCK)===y.TRUCK||(this._state&y.TOUCH_TRUCK)===y.TOUCH_TRUCK||(this._state&y.TOUCH_DOLLY_TRUCK)===y.TOUCH_DOLLY_TRUCK||(this._state&y.TOUCH_ZOOM_TRUCK)===y.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,_,!1,!1),this._isUserControllingTruck=!0),((this._state&y.SCREEN_PAN)===y.SCREEN_PAN||(this._state&y.TOUCH_SCREEN_PAN)===y.TOUCH_SCREEN_PAN||(this._state&y.TOUCH_DOLLY_SCREEN_PAN)===y.TOUCH_DOLLY_SCREEN_PAN||(this._state&y.TOUCH_ZOOM_SCREEN_PAN)===y.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,_,!1,!0),this._isUserControllingTruck=!0),((this._state&y.OFFSET)===y.OFFSET||(this._state&y.TOUCH_OFFSET)===y.TOUCH_OFFSET||(this._state&y.TOUCH_DOLLY_OFFSET)===y.TOUCH_DOLLY_OFFSET||(this._state&y.TOUCH_ZOOM_OFFSET)===y.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,_,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},m=()=>{fi(this._activePointers,it),a.copy(it),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",C),this._domElement.ownerDocument.addEventListener("pointerlockerror",v),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),u())},this.unlockPointer=()=>{var I,b,M;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(I=this._domElement)===null||I===void 0||I.ownerDocument.exitPointerLock(),(b=this._domElement)===null||b===void 0||b.ownerDocument.removeEventListener("pointerlockchange",C),(M=this._domElement)===null||M===void 0||M.ownerDocument.removeEventListener("pointerlockerror",v),this.cancel()};const C=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},v=()=>{this.unlockPointer()};this._addAllEventListeners=I=>{this._domElement=I,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",h),this._domElement.addEventListener("wheel",d,{passive:!1}),this._domElement.addEventListener("contextmenu",g)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",h),this._domElement.removeEventListener("wheel",d,{passive:!1}),this._domElement.removeEventListener("contextmenu",g),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",h),this._domElement.ownerDocument.removeEventListener("pointerlockchange",C),this._domElement.ownerDocument.removeEventListener("pointerlockerror",v))},this.cancel=()=>{this._state!==y.NONE&&(this._state=y.NONE,this._activePointers.length=0,m())},i&&this.connect(i),this.update(0)}get camera(){return this._camera}set camera(t){this._camera=t,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(t){this._enabled=t,this._domElement&&(t?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(t){this._spherical.radius===t&&this._sphericalEnd.radius===t||(this._spherical.radius=t,this._sphericalEnd.radius=t,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(t){this._spherical.theta===t&&this._sphericalEnd.theta===t||(this._spherical.theta=t,this._sphericalEnd.theta=t,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(t){this._spherical.phi===t&&this._sphericalEnd.phi===t||(this._spherical.phi=t,this._sphericalEnd.phi=t,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(t){this._boundaryEnclosesCamera=t,this._needsUpdate=!0}set interactiveArea(t){this._interactiveArea.width=dt(t.width,0,1),this._interactiveArea.height=dt(t.height,0,1),this._interactiveArea.x=dt(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=dt(t.y,0,1-this._interactiveArea.height)}addEventListener(t,i){super.addEventListener(t,i)}removeEventListener(t,i){super.removeEventListener(t,i)}rotate(t,i,s=!1){return this.rotateTo(this._sphericalEnd.theta+t,this._sphericalEnd.phi+i,s)}rotateAzimuthTo(t,i=!1){return this.rotateTo(t,this._sphericalEnd.phi,i)}rotatePolarTo(t,i=!1){return this.rotateTo(this._sphericalEnd.theta,t,i)}rotateTo(t,i,s=!1){this._isUserControllingRotate=!1;const a=dt(t,this.minAzimuthAngle,this.maxAzimuthAngle),n=dt(i,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=a,this._sphericalEnd.phi=n,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!s||V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(t,i=!1){return this.dollyTo(this._sphericalEnd.radius-t,i)}dollyTo(t,i=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0,this._dollyToNoClamp(dt(t,this.minDistance,this.maxDistance),i)}_dollyToNoClamp(t,i=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),l=V(r,this._spherical.radius);if(!(s>t)&&l)return Promise.resolve();this._sphericalEnd.radius=Math.min(t,r)}else this._sphericalEnd.radius=t;this._needsUpdate=!0,i||(this._spherical.radius=this._sphericalEnd.radius);const n=!i||V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(n)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(ge).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(t,i=!1){return this.zoomTo(this._zoomEnd+t,i)}zoomTo(t,i=!1){this._isUserControllingZoom=!1,this._zoomEnd=dt(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||V(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(t,i,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(t,i,s)}truck(t,i,s=!1){this._camera.updateMatrix(),ft.setFromMatrixColumn(this._camera.matrix,0),It.setFromMatrixColumn(this._camera.matrix,1),ft.multiplyScalar(t),It.multiplyScalar(-i);const a=T.copy(ft).add(It),n=B.copy(this._targetEnd).add(a);return this.moveTo(n.x,n.y,n.z,s)}forward(t,i=!1){T.setFromMatrixColumn(this._camera.matrix,0),T.crossVectors(this._camera.up,T),T.multiplyScalar(t);const s=B.copy(this._targetEnd).add(T);return this.moveTo(s.x,s.y,s.z,i)}elevate(t,i=!1){return T.copy(this._camera.up).multiplyScalar(t),this.moveTo(this._targetEnd.x+T.x,this._targetEnd.y+T.y,this._targetEnd.z+T.z,i)}moveTo(t,i,s,a=!1){this._isUserControllingTruck=!1;const n=T.set(t,i,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,n,this.boundaryFriction),this._needsUpdate=!0,a||this._target.copy(this._targetEnd);const r=!a||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(t,i,s,a=!1){const l=T.set(t,i,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(l.x,l.y,l.z,a)}fitToBox(t,i,{cover:s=!1,paddingLeft:a=0,paddingRight:n=0,paddingBottom:r=0,paddingTop:l=0}={}){const h=[],c=t.isBox3?Gt.copy(t):Gt.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const d=ws(this._sphericalEnd.theta,Ms),g=ws(this._sphericalEnd.phi,Ms);h.push(this.rotateTo(d,g,i));const u=T.setFromSpherical(this._sphericalEnd).normalize(),f=Ss.setFromUnitVectors(u,vi),m=V(Math.abs(u.y),1);m&&f.multiply(bi.setFromAxisAngle(Pe,d)),f.multiply(this._yAxisUpSpaceInverse);const C=ks.makeEmpty();B.copy(c.min).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setX(c.max.x).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setY(c.max.y).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setZ(c.min.z).applyQuaternion(f),C.expandByPoint(B),B.copy(c.min).setZ(c.max.z).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setY(c.min.y).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).setX(c.min.x).applyQuaternion(f),C.expandByPoint(B),B.copy(c.max).applyQuaternion(f),C.expandByPoint(B),C.min.x-=a,C.min.y-=r,C.max.x+=n,C.max.y+=l,f.setFromUnitVectors(vi,u),m&&f.premultiply(bi.invert()),f.premultiply(this._yAxisUpSpace);const v=C.getSize(T),I=C.getCenter(B).applyQuaternion(f);if(Lt(this._camera)){const b=this.getDistanceToFitBox(v.x,v.y,v.z,s);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.dollyTo(b,i)),h.push(this.setFocalOffset(0,0,0,i))}else if(wt(this._camera)){const b=this._camera,M=b.right-b.left,_=b.top-b.bottom,x=s?Math.max(M/v.x,_/v.y):Math.min(M/v.x,_/v.y);h.push(this.moveTo(I.x,I.y,I.z,i)),h.push(this.zoomTo(x,i)),h.push(this.setFocalOffset(0,0,0,i))}return Promise.all(h)}fitToSphere(t,i){const s=[],n="isObject3D"in t?ot.createBoundingSphere(t,yi):yi.copy(t);if(s.push(this.moveTo(n.center.x,n.center.y,n.center.z,i)),Lt(this._camera)){const r=this.getDistanceToFitSphere(n.radius);s.push(this.dollyTo(r,i))}else if(wt(this._camera)){const r=this._camera.right-this._camera.left,l=this._camera.top-this._camera.bottom,h=2*n.radius,c=Math.min(r/h,l/h);s.push(this.zoomTo(c,i))}return s.push(this.setFocalOffset(0,0,0,i)),Promise.all(s)}setLookAt(t,i,s,a,n,r,l=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0;const h=B.set(a,n,r),c=T.set(t,i,s);this._targetEnd.copy(h),this._sphericalEnd.setFromVector3(c.sub(h).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,l||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const d=!l||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold)&&V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(d)}lerpLookAt(t,i,s,a,n,r,l,h,c,d,g,u,f,m=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Ut.NONE,this._changedDolly=0;const C=T.set(a,n,r),v=B.set(t,i,s);ht.setFromVector3(v.sub(C).applyQuaternion(this._yAxisUpSpace));const I=jt.set(d,g,u),b=B.set(l,h,c);ue.setFromVector3(b.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(C.lerp(I,f));const M=ue.theta-ht.theta,_=ue.phi-ht.phi,x=ue.radius-ht.radius;this._sphericalEnd.set(ht.radius+x*f,ht.phi+_*f,ht.theta+M*f),this.normalizeRotations(),this._needsUpdate=!0,m||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const E=!m||V(this._target.x,this._targetEnd.x,this.restThreshold)&&V(this._target.y,this._targetEnd.y,this.restThreshold)&&V(this._target.z,this._targetEnd.z,this.restThreshold)&&V(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&V(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&V(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(E)}setPosition(t,i,s,a=!1){return this.setLookAt(t,i,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,a)}setTarget(t,i,s,a=!1){const n=this.getPosition(T),r=this.setLookAt(n.x,n.y,n.z,t,i,s,a);return this._sphericalEnd.phi=dt(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(t,i,s,a=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(t,i,s),this._needsUpdate=!0,a||this._focalOffset.copy(this._focalOffsetEnd);const n=!a||V(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&V(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&V(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),ft.setFromMatrixColumn(this._camera.matrixWorldInverse,0),It.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Pt.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=T.set(t,i,s),n=a.distanceTo(this._camera.position),r=a.sub(this._camera.position);ft.multiplyScalar(r.x),It.multiplyScalar(r.y),Pt.multiplyScalar(r.z),T.copy(ft).add(It).add(Pt),T.z=T.z+n,this.dollyTo(n,!1),this.setFocalOffset(-T.x,T.y,-T.z,!1),this.moveTo(t,i,s,!1)}setBoundary(t){if(!t){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(t),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(t,i,s,a){if(t===null){this._viewport=null;return}this._viewport=this._viewport||new N.Vector4,typeof t=="number"?this._viewport.set(t,i,s,a):this._viewport.copy(t)}getDistanceToFitBox(t,i,s,a=!1){if(Ii(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const n=t/i,r=this._camera.getEffectiveFOV()*le,l=this._camera.aspect;return((a?n>l:n<l)?i:t/l)*.5/Math.tan(r*.5)+s*.5}getDistanceToFitSphere(t){if(Ii(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*le,s=Math.atan(Math.tan(i*.5)*this._camera.aspect)*2,a=1<this._camera.aspect?i:s;return t/Math.sin(a*.5)}getTarget(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._targetEnd:this._target)}getPosition(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).setFromSpherical(i?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(i?this._targetEnd:this._target)}getSpherical(t,i=!0){return(t||new N.Spherical).copy(i?this._sphericalEnd:this._spherical)}getFocalOffset(t,i=!0){return(t&&t.isVector3?t:new N.Vector3).copy(i?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%zt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=zt),this._spherical.theta+=zt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/zt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!V(this._camera.up.x,this._cameraUp0.x)||!V(this._camera.up.y,this._cameraUp0.y)||!V(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const i=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,t),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,t),this.zoomTo(this._zoom0,t)];return Promise.all(i)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,Pe),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=T.subVectors(this._target,this._camera.position).normalize(),i=B.crossVectors(t,this._camera.up);this._camera.up.crossVectors(i,t).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(T);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(t){const i=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,a=this._sphericalEnd.radius-this._spherical.radius,n=Os.subVectors(this._targetEnd,this._target),r=xs.subVectors(this._focalOffsetEnd,this._focalOffset),l=this._zoomEnd-this._zoom;if(j(i))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Ne(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,g,1/0,t),this._needsUpdate=!0}if(j(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const g=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Ne(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,g,1/0,t),this._needsUpdate=!0}if(j(a))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const g=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Ne(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,g,this.maxSpeed,t),this._needsUpdate=!0}if(j(n.x)&&j(n.y)&&j(n.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const g=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Es(this._target,this._targetEnd,this._targetVelocity,g,this.maxSpeed,t,this._target),this._needsUpdate=!0}if(j(r.x)&&j(r.y)&&j(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const g=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Es(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,g,this.maxSpeed,t,this._focalOffset),this._needsUpdate=!0}if(j(l))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const g=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Ne(this._zoom,this._zoomEnd,this._zoomVelocity,g,1/0,t)}if(this.dollyToCursor){if(Lt(this._camera)&&this._changedDolly!==0){const g=this._spherical.radius-this._lastDistance,u=this._camera,f=this._getCameraDirection(ge),m=T.copy(f).cross(u.up).normalize();m.lengthSq()===0&&(m.x=1);const C=B.crossVectors(m,f),v=this._sphericalEnd.radius*Math.tan(u.getEffectiveFOV()*le*.5),b=(this._sphericalEnd.radius-g-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=jt.copy(this._targetEnd).add(m.multiplyScalar(this._dollyControlCoord.x*v*u.aspect)).add(C.multiplyScalar(this._dollyControlCoord.y*v)),_=T.copy(this._targetEnd).lerp(M,b),x=this._lastDollyDirection===Ut.IN&&this._spherical.radius<=this.minDistance,E=this._lastDollyDirection===Ut.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||E)){this._sphericalEnd.radius-=g,this._spherical.radius-=g;const D=B.copy(f).multiplyScalar(-g);_.add(D)}this._boundary.clampPoint(_,_);const S=B.subVectors(_,this._targetEnd);this._targetEnd.copy(_),this._target.add(S),this._changedDolly-=g,j(this._changedDolly)&&(this._changedDolly=0)}else if(wt(this._camera)&&this._changedZoom!==0){const g=this._zoom-this._lastZoom,u=this._camera,f=T.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(u.near+u.far)/(u.near-u.far)).unproject(u),m=B.set(0,0,-1).applyQuaternion(u.quaternion),C=jt.copy(f).add(m.multiplyScalar(-f.dot(u.up))),I=-(this._zoom-g-this._zoom)/this._zoom,b=this._getCameraDirection(ge),M=this._targetEnd.dot(b),_=T.copy(this._targetEnd).lerp(C,I),x=_.dot(b),E=b.multiplyScalar(x-M);_.sub(E),this._boundary.clampPoint(_,_);const S=B.subVectors(_,this._targetEnd);this._targetEnd.copy(_),this._target.add(S),this._changedZoom-=g,j(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const h=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,h),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!j(this._focalOffset.x)||!j(this._focalOffset.y)||!j(this._focalOffset.z))&&(ft.setFromMatrixColumn(this._camera.matrix,0),It.setFromMatrixColumn(this._camera.matrix,1),Pt.setFromMatrixColumn(this._camera.matrix,2),ft.multiplyScalar(this._focalOffset.x),It.multiplyScalar(-this._focalOffset.y),Pt.multiplyScalar(this._focalOffset.z),T.copy(ft).add(It).add(Pt),this._camera.position.add(T),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),T.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const d=this._needsUpdate;return d&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):d?(this.dispatchEvent({type:"update"}),j(i,this.restThreshold)&&j(s,this.restThreshold)&&j(a,this.restThreshold)&&j(n.x,this.restThreshold)&&j(n.y,this.restThreshold)&&j(n.z,this.restThreshold)&&j(r.x,this.restThreshold)&&j(r.y,this.restThreshold)&&j(r.z,this.restThreshold)&&j(l,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!d&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=d,this._needsUpdate=!1,d}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:he(this.maxDistance),minZoom:this.minZoom,maxZoom:he(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:he(this.maxPolarAngle),minAzimuthAngle:he(this.minAzimuthAngle),maxAzimuthAngle:he(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:T.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(t,i=!1){const s=JSON.parse(t);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=ce(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=ce(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=ce(s.maxPolarAngle),this.minAzimuthAngle=ce(s.minAzimuthAngle),this.maxAzimuthAngle=ce(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],i),ht.setFromVector3(T.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(ht.theta,ht.phi,i),this.dollyTo(ht.radius,i),this.zoomTo(s.zoom,i),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],i),this._needsUpdate=!0}connect(t){if(this._domElement){console.warn("camera-controls is already connected.");return}t.setAttribute("data-camera-controls-version",Bg),this._addAllEventListeners(t),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(t){return t.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(t){return this._getTargetDirection(t).negate()}_findPointerById(t){return this._activePointers.find(i=>i.pointerId===t)}_findPointerByMouseButton(t){return this._activePointers.find(i=>i.mouseButton===t)}_disposePointer(t){this._activePointers.splice(this._activePointers.indexOf(t),1)}_encloseToBoundary(t,i,s){const a=i.lengthSq();if(a===0)return t;const n=B.copy(i).add(t),l=this._boundary.clampPoint(n,jt).sub(n),h=l.lengthSq();if(h===0)return t.add(i);if(h===a)return t;if(s===0)return t.add(i).add(l);{const c=1+s*h/i.dot(l);return t.add(B.copy(i).multiplyScalar(c)).add(l.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Lt(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*le,a=Math.tan(s*.5)*i,n=a*t.aspect;this._nearPlaneCorners[0].set(-n,-a,0),this._nearPlaneCorners[1].set(n,-a,0),this._nearPlaneCorners[2].set(n,a,0),this._nearPlaneCorners[3].set(-n,a,0)}else if(wt(this._camera)){const t=this._camera,i=1/t.zoom,s=t.left*i,a=t.right*i,n=t.top*i,r=t.bottom*i;this._nearPlaneCorners[0].set(s,n,0),this._nearPlaneCorners[1].set(a,n,0),this._nearPlaneCorners[2].set(a,r,0),this._nearPlaneCorners[3].set(s,r,0)}}_collisionTest(){let t=1/0;if(!(this.colliderMeshes.length>=1)||Ii(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(ge);Mi.lookAt(_s,s,this._camera.up);for(let a=0;a<4;a++){const n=B.copy(this._nearPlaneCorners[a]);n.applyMatrix4(Mi);const r=jt.addVectors(this._target,n);Te.set(r,s),Te.far=this._spherical.radius+1;const l=Te.intersectObjects(this.colliderMeshes);l.length!==0&&l[0].distance<t&&(t=l[0].distance)}return t}_getClientRect(t){if(!this._domElement)return;const i=this._domElement.getBoundingClientRect();return t.x=i.left,t.y=i.top,this._viewport?(t.x+=this._viewport.x,t.y+=i.height-this._viewport.w-this._viewport.y,t.width=this._viewport.z,t.height=this._viewport.w):(t.width=i.width,t.height=i.height),t}_createOnRestPromise(t){return t?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(i=>{const s=()=>{this.removeEventListener("rest",s),i()};this.addEventListener("rest",s)}))}_addAllEventListeners(t){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(t){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(t){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(t,i=new N.Sphere){const s=i,a=s.center;Gt.makeEmpty(),t.traverseVisible(r=>{r.isMesh&&Gt.expandByObject(r)}),Gt.getCenter(a);let n=0;return t.traverseVisible(r=>{if(!r.isMesh)return;const l=r;if(!l.geometry)return;const h=l.geometry.clone();h.applyMatrix4(l.matrixWorld);const d=h.attributes.position;for(let g=0,u=d.count;g<u;g++)T.fromBufferAttribute(d,g),n=Math.max(n,a.distanceToSquared(T))}),s.radius=Math.sqrt(n),s}}class ii{constructor(t,i,s){p(this,"camera");p(this,"focalOffset");p(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Rg extends rn{constructor(i,s,a){super(i,a,"Camera Controls");p(this,"camera");p(this,"_boundOnAfterCameraUpdate");p(this,"_cameraPosition");this.camera=s,this._cameraPosition=new ii(new A.Vector3,new A.Vector3,new A.Vector3),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this.instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate);const n=this.gui.addFolder("Position");n.close(),this._controllers.push(n.add(this._cameraPosition.camera,"x")),this._controllers.push(n.add(this._cameraPosition.camera,"y")),this._controllers.push(n.add(this._cameraPosition.camera,"z"));const r=this.gui.addFolder("Target");r.close(),this._controllers.push(r.add(this._cameraPosition.target,"x")),this._controllers.push(r.add(this._cameraPosition.target,"y")),this._controllers.push(r.add(this._cameraPosition.target,"z"));const l=this.gui.addFolder("Focal offset");l.close(),this._controllers.push(l.add(this._cameraPosition.focalOffset,"x")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"y")),this._controllers.push(l.add(this._cameraPosition.focalOffset,"z"))}dispose(){this.instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),super.dispose()}onAfterCameraUpdate(){this.camera.getCameraPosition(this._cameraPosition)}}ot.install({THREE:{Box3:A.Box3,MathUtils:A.MathUtils,Matrix4:A.Matrix4,Quaternion:A.Quaternion,Raycaster:A.Raycaster,Sphere:A.Sphere,Spherical:A.Spherical,Vector2:A.Vector2,Vector3:A.Vector3,Vector4:A.Vector4}});class Fg extends A.EventDispatcher{constructor(i,s){super();p(this,"_boundOnAfterCameraUpdate");p(this,"_boundOnBeforeCameraUpdate");p(this,"_boundOrbitControlsOnContextMenu");p(this,"_boundOrbitControlsOnKey");p(this,"_boundOrbitControlsOnMouseUp");p(this,"_boundOrbitControlsOnWheel");p(this,"_boundPositionOnMapOnClick");p(this,"_boundPositionOnMapOnContextMenu");p(this,"_boundPositionOnMapOnMouseMove");p(this,"_cameraControlsInspector");p(this,"_clock");p(this,"_giro3dStore",ae());p(this,"_instance");p(this,"_orbitControls");p(this,"_orbitHelper");p(this,"_picker");p(this,"_pickObjectsAt");p(this,"_positionOnMapHelper");p(this,"_store",A.useCameraStore());this._instance=i,this._picker=s,this._orbitControls=new ot(this._instance.view.camera,this._instance.domElement);const a=document.createElement("div");a.className="helper",a.id="orbit-helper";const n=document.createElement("i");n.className="bi bi-mouse2-fill text-dark shadow",a.append(n),this._orbitHelper=new ki(a),this._instance.add(this._orbitHelper);const r=document.createElement("div");r.className="helper",r.id="position-on-map-helper";const l=document.createElement("i");l.className="fg-position-man text-dark shadow",r.append(l),this._positionOnMapHelper=new ki(r),this._instance.add(this._positionOnMapHelper),this._cameraControlsInspector=null,this.initializeOrbitControls(),this._pickObjectsAt=c=>{var d;return((d=this._picker.getFirstFeatureAt(this._instance,c,1))==null?void 0:d.at(0))??null},this._clock=new A.Clock,this._boundOnBeforeCameraUpdate=this.onBeforeCameraUpdate.bind(this),this._boundOnAfterCameraUpdate=this.onAfterCameraUpdate.bind(this),this._instance.addEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.addEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu=null,this._store.$onAction(({args:c,name:d})=>{switch(d){case"lookTopDownAt":this.lookTopDownAt(c[0]);break;case"setCameraPosition":this.setCamera(c[0]);break;case"setNavigationMode":this.setNavigationMode(c[0]);break}});const h=this._giro3dStore.getInspector();h!=null&&this.initializeInspector(h),this._giro3dStore.$onAction(({after:c,args:d,name:g})=>{c(()=>{switch(g){case"setInspector":this.initializeInspector(d[0]);break}})})}get enabled(){return this._orbitControls.enabled}set enabled(i){this._orbitControls.enabled=i}dispose(){this._instance.removeEventListener("before-camera-update",this._boundOnBeforeCameraUpdate),this._instance.removeEventListener("after-camera-update",this._boundOnAfterCameraUpdate),this._disablePositionOnMap(),this.disposeOrbitControls(),this._instance.remove(this._positionOnMapHelper),this._instance.remove(this._orbitHelper)}executeInteraction(i){this._orbitControls.update(this._clock.getDelta());const s=i();return this._orbitControls.update(this._clock.getDelta()),this._orbitControls.dispatchEvent({type:"update"}),s}getCameraPosition(i){const s=this._orbitControls,a=i??new ii(new A.Vector3,new A.Vector3,new A.Vector3);return s.getPosition(a.camera),s.getTarget(a.target),s.getFocalOffset(a.focalOffset),a}goToBox(i,s=!0,a={paddingBottom:10,paddingLeft:10,paddingRight:10,paddingTop:10}){const n=this.getBox(i);return this.executeInteraction(()=>(this._orbitControls.setFocalOffset(0,0,0),this._orbitControls.fitToBox(n,s,a)))}async lookAt(i,s,a=!1){await this.executeInteraction(async()=>(this._orbitControls.setFocalOffset(0,0,0,!1),this._orbitControls.setLookAt(i.x,i.y,i.z,s.x,s.y,s.z,a))),this._orbitControls.setOrbitPoint(s.x,s.y,s.z)}lookTopDownAt(i,s=!0){const a=new A.Vector3,n=new A.Vector3,r=new A.Vector3(0,0,1),l=this.getBox(i);l.min.z=l.max.z,l.getCenter(a),l.getSize(n);const h=this._orbitControls.getDistanceToFitBox(n.x,n.y,0),c=r.multiplyScalar(h).add(a);return c.x+=n.x/10,c.y-=n.y/10,this.lookAt(c,a,s)}setCamera(i){this.executeInteraction(async()=>(this._orbitControls.setOrbitPoint(0,0,0),this._orbitControls.setLookAt(i.camera.x,i.camera.y,i.camera.z,i.target.x,i.target.y,i.target.z,!1),this._orbitControls.setFocalOffset(i.focalOffset.z,i.focalOffset.y,i.focalOffset.z,!1),this._orbitControls.update(0),Promise.resolve()))}setInitialPosition(i,s=4e3){const a=new at(i.crs,i.west,i.south,s).toVector3(),n=i.centerAsVector3();this.lookAt(a,n,!1)}getBox(i){let s=new A.Box3;if(i.isBox3)s=i.clone();else if(i.isEntity3D){const a=i,n=a.getBoundingBox();n&&!n.isEmpty()?s=n.clone():"extent"in a&&(s=a.extent.toBox3(0,200))}else if(i.isObject3D)s.setFromObject(i);else throw new Error("obj should be instanceof Box3, Object3D or Entity3D");if(s.isEmpty())throw new Error("Could not find bounding box of object");return s.min.z=Math.max(s.min.z,0),s.max.z=Math.min(s.max.z,2e3),s}_disablePositionOnMap(){(this._boundPositionOnMapOnClick||this._boundPositionOnMapOnMouseMove||this._boundPositionOnMapOnContextMenu)&&(this._boundPositionOnMapOnClick&&this._instance.domElement.removeEventListener("click",this._boundPositionOnMapOnClick),this._boundPositionOnMapOnClick=null,this._boundPositionOnMapOnMouseMove&&this._instance.domElement.removeEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._boundPositionOnMapOnMouseMove=null,this._boundPositionOnMapOnContextMenu&&this._instance.domElement.removeEventListener("contextmenu",this._boundPositionOnMapOnContextMenu),this._boundPositionOnMapOnContextMenu=null,this._positionOnMapHelper.visible=!1,this._instance.domElement.style.cursor="auto",this._instance.notifyChange())}_enablePositionOnMap(){this._boundPositionOnMapOnClick=this.onPositionOnMapClick.bind(this),this._boundPositionOnMapOnMouseMove=this.onPositionOnMapMouseMove.bind(this),this._boundPositionOnMapOnContextMenu=this.onPositionOnMapContextMenu.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundPositionOnMapOnMouseMove),this._instance.domElement.addEventListener("click",this._boundPositionOnMapOnClick),this._instance.domElement.addEventListener("contextmenu",this._boundPositionOnMapOnContextMenu)}disposeOrbitControls(){this._instance.domElement.removeEventListener("keydown",this._boundOrbitControlsOnKey),this._instance.domElement.removeEventListener("wheel",this._boundOrbitControlsOnWheel),this._instance.domElement.removeEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.removeEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._orbitControls.disconnect()}initializeInspector(i){this._cameraControlsInspector&&this._cameraControlsInspector.dispose(),i&&(this._cameraControlsInspector=new Rg(i.gui,this,this._instance),i.addPanel(this._cameraControlsInspector))}initializeOrbitControls(){this._orbitControls.infinityDolly=!0,this.setNavigationMode(this._store.getNavigationMode()),this._boundOrbitControlsOnContextMenu=this.orbitControlsOnContextMenu.bind(this),this._boundOrbitControlsOnMouseUp=this.orbitControlsOnMouseUp.bind(this),this._instance.domElement.addEventListener("contextmenu",this._boundOrbitControlsOnContextMenu),this._instance.domElement.addEventListener("mouseup",this._boundOrbitControlsOnMouseUp),this._boundOrbitControlsOnWheel=this.orbitControlsOnWheel.bind(this),this._instance.domElement.addEventListener("wheel",this._boundOrbitControlsOnWheel),this._orbitControls.addEventListener("update",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>this._instance.notifyChange(this._instance.view.camera)),this._orbitControls.addEventListener("control",()=>{(this._orbitControls.active||this._orbitControls.currentAction!==0)&&(this.dispatchEvent({type:"interaction-start"}),this._store.setIsUserInteracting(!0))}),this._orbitControls.addEventListener("controlend",()=>setTimeout(()=>{this._store.setIsUserInteracting(!1),this.dispatchEvent({type:"interaction-end"})})),this._boundOrbitControlsOnKey=this.orbitControlsOnKey.bind(this),this._instance.domElement.addEventListener("keydown",this._boundOrbitControlsOnKey)}onAfterCameraUpdate(){this._store.setCurrentPosition(this.getCameraPosition(),this._instance.view.camera.position)}onBeforeCameraUpdate(){const i=this._clock.getDelta();this._orbitControls.update(i)&&this._instance.notifyChange(this._instance.view.camera)}onPositionOnMapClick(i){const s=this._picker.getMapAt(this._instance,i);if(s){this._disablePositionOnMap();const a=new A.Vector3;this._instance.view.camera.getWorldDirection(a),a.normalize().setLength(3);const n=s.point.clone();n.z+=1.7;const r=n.clone();r.add(a),r.z=n.z,this.lookAt(n,r,!0).finally(()=>this._store.setNavigationMode("first-person"))}}onPositionOnMapContextMenu(i){this._disablePositionOnMap(),this._store.setNavigationMode("orbit"),i.preventDefault()}onPositionOnMapMouseMove(i){const s=this._picker.getMapAt(this._instance,i);this._instance.domElement.style.cursor=s?"none":"auto",this._positionOnMapHelper.visible=s!=null,s&&(this._positionOnMapHelper.position.copy(s.point),this._positionOnMapHelper.updateMatrixWorld()),this._instance.notifyChange()}orbitControlsOnContextMenu(i){if(this._store.getNavigationMode()!=="orbit")return;const s=this._pickObjectsAt(i);s?(this._orbitHelper.visible=!0,this._orbitHelper.position.copy(s.point),this._orbitHelper.updateMatrixWorld(),this._orbitControls.setOrbitPoint(s.point.x,s.point.y,s.point.z)):(this._orbitHelper.visible=!0,this._orbitControls.getTarget(this._orbitHelper.position),this._orbitHelper.updateMatrixWorld())}orbitControlsOnKey(i){const s=this._store.getNavigationMode();if(s==="position-on-map"){i.code==="Escape"&&this._store.setNavigationMode("orbit");return}if(s!=="orbit"&&s!=="first-person")return;const a={ARROW_BOTTOM:"ArrowDown",ARROW_LEFT:"ArrowLeft",ARROW_RIGHT:"ArrowRight",ARROW_UP:"ArrowUp",KEY_DOWN:"KeyS",KEY_LEFT:"KeyA",KEY_RIGHT:"KeyD",KEY_UP:"KeyW"};let n=0,r=0,l=0,h=0,c=i.ctrlKey||i.metaKey||i.shiftKey?200:20;switch(s==="first-person"&&(c/=10),i.code){case a.ARROW_BOTTOM:s==="first-person"?r=-1:n=-1;break;case a.ARROW_LEFT:case a.KEY_LEFT:l=-1;break;case a.ARROW_RIGHT:case a.KEY_RIGHT:l=1;break;case a.ARROW_UP:s==="first-person"?r=1:n=1;break;case a.KEY_DOWN:h=1;break;case a.KEY_UP:h=-1;break}n&&this.executeInteraction(()=>this._orbitControls.forward(n*this._orbitControls.truckSpeed*c,!0)),r&&this.executeInteraction(()=>this._orbitControls.dollyInFixed(r*this._orbitControls.truckSpeed*c,!0)),l&&this.executeInteraction(()=>this._orbitControls.truck(l*this._orbitControls.truckSpeed*c,0,!0)),h&&this.executeInteraction(()=>this._orbitControls.truck(0,h*this._orbitControls.truckSpeed*c,!0))}orbitControlsOnMouseUp(){this._store.getNavigationMode()==="orbit"&&(this._orbitHelper.visible=!1,this._instance.notifyChange())}orbitControlsOnWheel(){this._orbitControls.dispatchEvent({type:"controlstart"}),setTimeout(()=>this._orbitControls.dispatchEvent({type:"controlend"}),0)}setNavigationMode(i){switch(this._disablePositionOnMap(),i){case"disabled":this._orbitControls.enabled=!1;break;case"first-person":{this._orbitControls.dollyToCursor=!1,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=2,this._orbitControls.dollySpeed=20,this._orbitControls.azimuthRotateSpeed=.3,this._orbitControls.polarRotateSpeed=.3,this._orbitControls.mouseButtons.left=ot.ACTION.ROTATE,this._orbitControls.mouseButtons.right=ot.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=ot.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=ot.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone(),n=new A.Vector3;this._instance.view.camera.getWorldDirection(s),s.normalize().setLength(3),n.copy(a).add(s),this.lookAt(a,n,!1)}break;case"orbit":{this._orbitControls.dollyToCursor=!0,this._orbitControls.minDistance=2,this._orbitControls.maxDistance=1/0,this._orbitControls.dollySpeed=1,this._orbitControls.azimuthRotateSpeed=1,this._orbitControls.polarRotateSpeed=1,this._orbitControls.mouseButtons.left=ot.ACTION.TRUCK,this._orbitControls.mouseButtons.right=ot.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=ot.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=ot.ACTION.DOLLY,this._orbitControls.enabled=!0;const s=new A.Vector3,a=this._instance.view.camera.position.clone();this._instance.view.camera.getWorldDirection(s);const n=new A.Raycaster;n.camera=this._instance.view.camera,n.set(a,s);const r=n.intersectObject(this._instance.scene).at(0);r&&this.lookAt(a,r.point,!1)}break;case"position-on-map":this._orbitControls.enabled=!1,this._enablePositionOnMap();break;default:return i}this._instance.domElement.focus()}}const Tt=new A.EventDispatcher,wa=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),Ug=e=>A.isObject(e)&&!wa(e);class zg{constructor(t,i){p(this,"_axisGrids",new Map);p(this,"_entities",new Map);p(this,"_instance");p(this,"_layerManager");p(this,"_masks",new Map);p(this,"_notifications",Rt());p(this,"_overlays",new Map);p(this,"_store",A.useDatasetStore());this._instance=t,this._layerManager=i,this._store.$onAction(({after:s,args:a,name:n})=>{s(()=>{switch(n){case"importFromFile":this.importFromFile(a[0]);break;case"remove":this.deleteDataset(a[0]);break;case"setVisible":this.onVisibilityChanged(a[0],a[1]);break;case"toggleGrid":this.onToggleGrid(a[0]);break;case"toggleMask":this.onToggleMask(a[0]);break}})});for(const s of this._store.getDatasets())s.visible&&this.preloadDataset(s)}dispose(){}async createGrid(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;const s=new ln({style:{color:new A.Color("orange"),fontSize:12,numberFormat:Intl.NumberFormat("fr")},ticks:{x:50,y:50,z:50},volume:{ceiling:i.max.z+10,extent:Qe.fromBox3(this._instance.referenceCrs,i).withMargin(20,20),floor:i.min.z-10}});s.name=`AxisGrid-${t.uuid}`,await this._instance.add(s),this._axisGrids.set(t.uuid,s)}async createMask(t){const i=this._store.getBoundingBox(t);if(i==null||i.isEmpty())return;i.expandByVector(new A.Vector3(-5,-5,0));const s=new hn({geometry:new cn([[[i.min.x,i.min.y],[i.min.x,i.max.y],[i.max.x,i.max.y],[i.max.x,i.min.y],[i.min.x,i.min.y]]]),name:"Mask polygon"}),a=new Ge({name:`mask-${t.uuid}`,source:new de({data:[s],style:new q.Style({fill:new q.Fill({color:"white"})})})});a.maskMode=Ge.MaskMode.Inverted;const n=this._instance.getObjects(r=>je.isMap(r));for(const r of n)await r.addLayer(a),this._instance.notifyChange(r);this._masks.set(t.uuid,a)}deleteDataset(t){this.deleteGrid(t),this.deleteMask(t);const i=this._entities.get(t.uuid);i&&(this._instance.remove(i),this._instance.notifyChange());const s=this._overlays.get(t.uuid);s&&this._layerManager.removeBasemapLayer(s),Tt.dispatchEvent({type:"dataset-removed",value:t})}deleteGrid(t){const i=this._axisGrids.get(t.uuid);i&&this._instance.remove(i),this._axisGrids.delete(t.uuid)}deleteMask(t){const i=this._masks.get(t.uuid);i&&this._instance.getObjects(a=>je.isMap(a)).forEach(a=>{a.removeLayer(i),this._instance.notifyChange(a)}),this._masks.delete(t.uuid)}async importFromFile(t){let i;const s=t instanceof File?t.name:t;try{this._notifications.push(new Q(s,"Importing file..."));const a=await eg.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new Q(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new Q(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new Q(i.name,"Import successful.","success"))}catch{}Tt.dispatchEvent({type:"dataset-added",value:i})}onDatasetPreloaded(t,i){t.isPreloaded=!0,t.isPreloading=!1,t.onObjectPreloaded&&t.onObjectPreloaded(t,i),this._store.attachEntity(t,i)}onDatasetPreloadedAsLayer(t,i){t.isPreloaded=!0,t.isPreloading=!1,this._store.attachLayer(t,i)}async onToggleGrid(t){this._axisGrids.has(t.uuid)?this.deleteGrid(t):await this.createGrid(t)}async onToggleMask(t){this._masks.has(t.uuid)?this.deleteMask(t):await this.createMask(t)}async onVisibilityChanged(t,i){try{t.visible=i,!t.isPreloaded&&i&&await this.preloadDataset(t),await this.updateDataset(t),A.Datagroup.isGroup(t)&&t.children.forEach(s=>void this.onVisibilityChanged(s,i))}catch{t.visible=!1}Tt.dispatchEvent({type:"dataset-visibility-changed",value:t})}async preloadDataset(t){if(t.isPreloaded)return Promise.resolve(t);if(A.Datagroup.isGroup(t))return t.isPreloaded=!0,Promise.resolve(t);t.isPreloading=!0;try{if(wa(t)){const i=await Ni.getDatasetLayer(this._instance,t);i.visible=t.visible,this._overlays.set(t.uuid,i),await this._layerManager.addDatasetLayer(i),this.onDatasetPreloadedAsLayer(t,i)}else if(Ug(t)){const i=await Yc.getEntity(this._instance,t);i.visible=t.visible,this._entities.set(t.uuid,i),await this._instance.add(i),this.onDatasetPreloaded(t,i)}else throw new Error("Dataset is neither an overlay or 3d mesh")}catch(i){throw console.error("Could not load dataset",t,i),t.isPreloading=!1,this._notifications.push(new Q(t.name,`Could not load dataset : ${i.message}`,"error")),i}return t}async updateDataset(t){const i=this._entities.get(t.uuid);i&&(i.visible=t.visible,t.visible&&"isMaskingBasemap"in t.config&&t.config.isMaskingBasemap===!0?await this.createMask(t):!t.visible&&this._masks.has(t.uuid)&&this.deleteMask(t),this._instance.notifyChange(i));const s=this._overlays.get(t.uuid);s&&(s.visible=t.visible,this._layerManager.notify(s))}}class jg{constructor(t){p(this,"_hoverMeasurement");p(this,"_picker");p(this,"_raycaster");this._picker=t,this._raycaster=new A.Raycaster,this._hoverMeasurement=null}clean(){this._hoverMeasurement&&(this._hoverMeasurement.instance.remove(this._hoverMeasurement),this._hoverMeasurement=null)}dispose(){this.clean()}getLastMeasurement(){var t;return(t=this._hoverMeasurement)==null?void 0:t.clone()}measure(t,i){var a;const s=(a=this._picker.getFirstFeatureAt(t,i,0,n=>!rt.isShape(n)))==null?void 0:a.at(0);if(s&&s.normal){const n=s.normal.clone();n.transformDirection(s.object.matrixWorld),n.normalize(),this._raycaster.camera=t.view.camera,this._raycaster.set(s.point,n);const r=this._raycaster.intersectObject(t.scene,!0).filter(l=>l.distance>1e-5&&l.object.userData.parentEntity!==this._hoverMeasurement).at(0);r&&(this._hoverMeasurement||(this._hoverMeasurement=new be,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,r.point]),t.notifyChange(this._hoverMeasurement))}}}const Wi=kt.defineStore("measurement",()=>{const e=o.reactive([]),t=o.ref("laser"),i=o.computed(()=>e.length),s=o.ref(!1);function a(){return s.value}function n(v){s.value=v}function r(){return t.value}function l(v){t.value=v}function h(){return e}function c(v){e.splice(e.indexOf(v),1)}function d(v){e.push(v)}function g(v){return e.some(I=>I.title===v)}function u(v){}function f(v){}function m(){}function C(){}return{add:d,count:i,end:C,getMeasurementMode:r,getMeasures:h,hasMeasure:g,importMeasureFile:u,importMeasureFiles:f,isUserMeasuring:a,remove:c,setIsUserMeasuring:n,setMeasurementMode:l,start:m}});class Ea extends A.EventDispatcher{constructor(i,s,a={}){super();p(this,"properties");p(this,"title");p(this,"uuid");p(this,"_object");p(this,"_visible");this.title=i,this._visible=!0,this._object=s,this.properties=a,this.uuid=A.MathUtils.generateUUID()}get object(){return this._object}set object(i){this._object=i}get visible(){return this._visible}set visible(i){this._visible=i,this.dispatchEvent({type:"visible"})}static toCollection(i){return{features:i.map(a=>a.toGeoJSON()),type:"FeatureCollection",id:`${A.Download.getBaseUrl()}#${A.MathUtils.generateUUID()}`,properties:{creator:"Giro3D",generator:{title:"Giro3D",uri:A.Download.getBaseUrl()},lang:"en",links:[{href:"http://www.opengis.net/spec/owc-atom/1.0/req/core",rel:"profile",title:"This file is compliant with version 1.0 of OGC Context"}],title:"Giro3D measures",updated:new Date().toISOString()}}}toGeoJSON(){return{geometry:{coordinates:[this.object.from.toArray(),this.object.to.toArray()],type:"LineString"},id:`${A.Download.getBaseUrl()}#${this.uuid}`,properties:{...this.properties,title:this.title,updated:new Date().toISOString()},type:"Feature"}}}function Gg(e){return window.prompt("Measure name",e)}class Hg{constructor(t,i,s){p(this,"_boundMeasure");p(this,"_boundOnEscape");p(this,"_boundPause");p(this,"_boundRestart");p(this,"_boundSaveMeasure");p(this,"_camera");p(this,"_instance");p(this,"_measureTool");p(this,"_notificationStore",Rt());p(this,"_paused",!1);p(this,"_store",Wi());this._instance=t,this._measureTool=new jg(s),this._camera=i,this._boundPause=()=>{this._paused=!0},this._boundRestart=()=>{this._paused=!1},this._camera.addEventListener("interaction-start",this._boundPause),this._camera.addEventListener("interaction-end",this._boundRestart),this._boundOnEscape=this.onEscape.bind(this),document.addEventListener("keydown",this._boundOnEscape),this._store.$onAction(({after:a,args:n,name:r})=>{a(()=>{switch(r){case"end":this.stopMeasuring();break;case"importMeasureFile":this.importMeasureFile(n[0]);break;case"importMeasureFiles":this.importMeasureFiles(n[0]);break;case"remove":this.deleteMeasure(n[0]);break;case"start":this.startMeasuring();break}})}),this._boundMeasure=this.measure.bind(this),this._boundSaveMeasure=this.saveMeasure.bind(this),this._instance.domElement.addEventListener("mousemove",this._boundMeasure),this._instance.domElement.addEventListener("click",this._boundSaveMeasure)}dispose(){this._instance.domElement.removeEventListener("mousemove",this._boundMeasure),this._instance.domElement.removeEventListener("click",this._boundSaveMeasure),this._camera.removeEventListener("interaction-start",this._boundPause),this._camera.removeEventListener("interaction-end",this._boundRestart),document.removeEventListener("keydown",this._boundOnEscape),this._measureTool.dispose()}startMeasuring(){this._store.setIsUserMeasuring(!0)}stopMeasuring(){this._store.setIsUserMeasuring(!1),this._measureTool.clean(),this._instance.notifyChange()}updateMeasure(t){t.object.visible=t.visible,t.object.traverse(i=>i.visible=t.visible),this._instance.notifyChange()}deleteMeasure(t){this._instance.remove(t.object),this._instance.notifyChange()}async importBlob(t,i){const s=await t.text(),a=JSON.parse(s),n=a.type==="FeatureCollection"?a.features:[a];let r=0,l=0;for(const h of n)await this.importMeasure(h,i)?r++:l++;return{nbImported:r,nbSkipped:l}}async importMeasure(t,i){var r;if(t.geometry.type!=="LineString")throw new Error(`Cannot import geometry type ${t.geometry.type}`);if((t.properties==null||typeof t.properties!="object")&&(t.properties={}),t.properties.title==null&&(t.properties.title=A.MathUtils.generateUUID()),i.has(t.properties.title))return!1;const s=new A.Vector3(...t.geometry.coordinates[0]),a=new A.Vector3(...t.geometry.coordinates[1]),n=new be;return n.setPoints([s,a]),await this.pushNewMeasure((r=t.properties)==null?void 0:r.title,n,t.properties),!0}async importMeasureFile(t){const i=new Set(this._store.getMeasures().map(s=>s.title));try{const{nbImported:s,nbSkipped:a}=await this.importBlob(t,i);this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}catch{}}async importMeasureFiles(t){const i=[];let s=0,a=0;const n=[],r=new Set(this._store.getMeasures().map(l=>l.title));for(const l of t)i.push(this.importBlob(l,r).then(({nbImported:h,nbSkipped:c})=>{s+=h,a+=c}).catch(h=>{n.push(h.message)}));await Promise.allSettled(i),n.length>0?this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new Q("Measures",`${s} measures imported (${a} skipped)`,"success"))}measure(t){!this._paused&&this._store.isUserMeasuring()&&this._measureTool.measure(this._instance,t)}onEscape(t){t.code==="Escape"&&this._store.isUserMeasuring()&&this.stopMeasuring()}async pushNewMeasure(t,i,s={}){await this._instance.add(i);const a=new Ea(t,i,s);i.userData.measure=a,a.addEventListener("visible",()=>this.updateMeasure(a)),this._store.add(a),this._instance.notifyChange(i)}saveMeasure(){if(!this._paused&&this._store.isUserMeasuring()){const t=this._measureTool.getLastMeasurement();if(t&&!Number.isNaN(t.length)){let i="New measurement";if(this._store.hasMeasure(i)){for(let a=1;a<1e3&&(i=`New measurement (${a})`,!!this._store.hasMeasure(i));a+=1);this._store.hasMeasure(i)&&(i="Achieved unlocked: 1000 measurements with default name")}const s=Gg(i);s!=null&&this.pushNewMeasure(s,t)}}}}class Zg extends A.EventDispatcher{constructor(i){super();p(this,"ambientLight");p(this,"annotationManager");p(this,"camera");p(this,"datasetManager");p(this,"dirLight");p(this,"highlighter");p(this,"layerManager");p(this,"mainInstance");p(this,"measurementManager");p(this,"picker");p(this,"_boundOnFrameEnd");p(this,"_store",ae());this.mainInstance=i,this.picker=new vs,this.camera=new Fg(this.mainInstance,this.picker);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new Eg(this.mainInstance),this.datasetManager=new zg(this.mainInstance,this.layerManager),this.annotationManager=new Tg(this.mainInstance,this.camera,this.picker),this.highlighter=new ig,this.picker=new vs,this.measurementManager=new Hg(this.mainInstance,this.camera,this.picker),this._boundOnFrameEnd=this.onFrameEnd.bind(this),this.mainInstance.addEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.renderingOptions.enableEDL=!0,this.mainInstance.renderingOptions.enableInpainting=!1,this.mainInstance.renderingOptions.enablePointCloudOcclusion=!1;const n=16777215;this.ambientLight=new A.AmbientLight(n,.6),this.mainInstance.scene.add(this.ambientLight),this.dirLight=new A.DirectionalLight(n,2),this.dirLight.position.set(a.x-1e4,a.y-1e4,1e4),this.dirLight.target.position.set(a.x,a.y,0),this.mainInstance.scene.add(this.dirLight),this.mainInstance.scene.add(this.dirLight.target),this.dirLight.updateMatrixWorld(),this.mainInstance.scene.updateMatrixWorld(),this.mainInstance.notifyChange()}dispose(){this.mainInstance.removeEventListener("update-end",this._boundOnFrameEnd),this.mainInstance.scene.remove(this.dirLight.target),this.mainInstance.scene.remove(this.dirLight),this.mainInstance.scene.remove(this.ambientLight),this.measurementManager.dispose(),this.highlighter.dispose(),this.annotationManager.dispose(),this.layerManager.dispose(),this.camera.dispose()}getBoundingBox(){const i=new A.Box3,s=new A.Box3;return this.mainInstance.scene.traverse(a=>{s.setFromObject(a),i.union(s)}),i}getObjects3d(){const i=[];return this.mainInstance.scene.traverse(s=>{i.push(s)}),i}onFrameEnd(){const i=this.mainInstance.view.camera;i.near=2,this.dispatchEvent({type:"update"})}}class Wg{constructor(){p(this,"geometry");p(this,"object3D");this.geometry=new A.BufferGeometry,this.object3D=new A.LineSegments(this.geometry,new A.LineBasicMaterial({color:16711680})),this.object3D.position.set(0,0,1),this.object3D.updateMatrixWorld()}setCorners(t,i,s,a){this.geometry.setFromPoints([t,i,i,s,s,a,a,t])}}const qg=new gn("EPSG:3857",-20037508342789244e-9,20037508342789244e-9,-20037508342789244e-9,20037508342789244e-9);function Yg(e){const t=new $t({name:"osm",source:new dn({source:new An})});return t.visible=!0,e.addLayer(t)}class Jg{constructor(t){p(this,"_basemap");p(this,"_boundUpdateViewbox");p(this,"_mainInstance");p(this,"_minimapInstance");p(this,"_viewbox");this._mainInstance=null,this._minimapInstance=t,this._viewbox=new Wg,this._minimapInstance.scene.add(this._viewbox.object3D),this._viewbox.object3D.updateMatrixWorld(),this._minimapInstance.notifyChange(),this._basemap=new un({extent:qg}),this._basemap.name="minimap",this._minimapInstance.add(this._basemap),Yg(this._basemap);const i=new at("EPSG:4326",4.84,45.76).as(this._minimapInstance.referenceCrs),s=new A.Vector3(i.x,i.y,0),a=this._minimapInstance.view.camera;a.position.set(s.x,s.y,2e4),a.lookAt(s.x,s.y+1,0),this._minimapInstance.notifyChange(),this._boundUpdateViewbox=this.updateViewbox.bind(this)}dispose(){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._minimapInstance.remove(this._basemap),this._minimapInstance.scene.remove(this._viewbox.object3D),this._basemap.dispose(),this._viewbox.geometry.dispose(),this._viewbox.object3D.geometry.dispose(),this._viewbox.object3D.material.dispose()}getCorners(){const t=this._mainInstance,i=this._minimapInstance;if(t===null)throw new Error("Must call setMainInstance before getCorners");const s=t.engine.getWindowSize(),a=(c,d)=>{var f;const u=(f=t.pickObjectsAt(new A.Vector2(c,d),{limit:1,radius:0}).at(0))==null?void 0:f.point;if(u){const m=new at(t.referenceCrs,u.x,u.y,1).as(i.referenceCrs).toVector3();return m.z=1,m}},n=a(0,0),r=a(s.x-1,0),l=a(0,s.y-1),h=a(s.x-1,s.y-1);if(!(!n||!r||!l||!h))return{ll:l,lr:h,ul:n,ur:r}}setMainInstance(t){this._mainInstance&&this._mainInstance.removeEventListener("after-camera-update",this._boundUpdateViewbox),this._mainInstance=t,t&&t.addEventListener("after-camera-update",this._boundUpdateViewbox)}updateViewbox(){if(this._mainInstance===null)throw new Error("Must call setMainInstance before updateViewbox");const t=this._mainInstance.view.camera,i=this._minimapInstance.view.camera;this._viewbox.object3D.visible=!1;const s=t.position,a=new at(this._mainInstance.referenceCrs,s.x,s.y,0).as(this._minimapInstance.referenceCrs),{x:n,y:r}=a;i.position.set(n,r,i.position.z),i.lookAt(n,r+1,0),this._minimapInstance.notifyChange(this._basemap)}}class Xg{constructor(t){p(this,"_cameraController");p(this,"_instance");this._cameraController=t.camera,this._instance=t.instance}getBoundingBox(){const t=this._instance.getEntities(),i=new A.Box3().makeEmpty();for(const s of t)if(Di.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}}const Kg={class:"toast-container"},Qg=["v-if"],$g={class:"me-auto mx-2"},tu=["innerHTML"],eu=o.defineComponent({__name:"AlertToast",setup(e){const t=o.ref(null),i=o.ref(Q.empty());function s(l){i.value=l,In.Toast.getOrCreateInstance(t.value).show()}Rt().$onAction(({args:l,name:h})=>{switch(h){case"push":s(l[0]);break}});function n(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"bi-exclamation-circle-fill";case"info":return"bi-check-circle-fill";case"success":return"bi-check-lg";case"warning":return"bi-exclamation-triangle-fill";default:return"text-bg-success"}}function r(){if(i.value==null)return"text-bg-success";switch(i.value.level){case"error":return"text-bg-danger";case"info":return"text-bg-secondary";case"success":return"text-bg-success";case"warning":return"text-bg-warning";default:return"text-bg-success"}}return(l,h)=>(o.openBlock(),o.createElementBlock("div",Kg,[o.createElementVNode("div",{ref_key:"alertToast",ref:t,class:"toast",role:"alert","aria-live":"assertive","aria-atomic":"true"},[o.createElementVNode("div",{class:o.normalizeClass(["toast-header",r()])},[o.createElementVNode("i",{"v-if":i.value.level==="info",class:o.normalizeClass(["bi",n()])},null,10,Qg),o.createElementVNode("strong",$g,o.toDisplayString(i.value.title),1),h[0]||(h[0]=o.createElementVNode("button",{type:"button",class:"btn-close","data-bs-dismiss":"toast","aria-label":"Close"},null,-1))],2),o.createElementVNode("div",{class:"toast-body",innerHTML:i.value.text},null,8,tu)],512)]))}}),iu=A._export_sfc(eu,[["__scopeId","data-v-002327a6"]]),su=o.defineComponent({__name:"ColorFragment",props:{color:{}},setup(e){o.useCssVars(s=>({"8f755d56":i}));const i=`#${e.color.getHexString()}`;return(s,a)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("span",{class:"color"},[o.createElementVNode("span",{class:"d-none"},o.toDisplayString(i))]),o.createTextVNode(" "+o.toDisplayString(i))],64))}}),au=A._export_sfc(su,[["__scopeId","data-v-535f5fef"]]),nu={class:"text-secondary"},ou=o.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",nu,[o.createElementVNode("span",null,[o.createElementVNode("b",null,o.toDisplayString(e.prefix),1),o.createTextVNode(" "+o.toDisplayString(e.value)+o.toDisplayString(e.suffix),1)])]))}}),bt=A._export_sfc(ou,[["__scopeId","data-v-ce90ec07"]]),ru=["href"],lu=["src","alt"],hu={controls:"",style:{"max-width":"200px"}},cu=["src","type"],gu=["href"],uu=["href"],du=["title","src"],Au=["href"],mu=["href"],Cu=o.defineComponent({__name:"LinkFragment",props:{href:{},title:{},type:{}},setup(e){const t=e;return(i,s)=>{var a,n;return(a=t.type)!=null&&a.startsWith("image/")?(o.openBlock(),o.createElementBlock("a",{key:0,href:t.href,target:"_blank"},[o.createElementVNode("img",{src:t.href,alt:t.title,style:{"max-width":"200px"}},null,8,lu)],8,ru)):(n=t.type)!=null&&n.startsWith("video/")?(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[o.createElementVNode("video",hu,[o.createElementVNode("source",{src:t.href,type:t.type},null,8,cu),s[0]||(s[0]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href},"video",8,gu),s[1]||(s[1]=o.createTextVNode(".",-1))]),s[2]||(s[2]=o.createElementVNode("br",null,null,-1)),s[3]||(s[3]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href,target:"_blank"},"video",8,uu),s[4]||(s[4]=o.createTextVNode(". ",-1))],64)):t.type==="application/pdf"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:2},[o.createElementVNode("iframe",{title:t.title,width:"200",height:"300",src:t.href,frameborder:"1",sandbox:"allow-same-origin allow-scripts"},null,8,du),s[5]||(s[5]=o.createElementVNode("br",null,null,-1)),s[6]||(s[6]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href,target:"_blank"},"file",8,Au),s[7]||(s[7]=o.createTextVNode(". ",-1))],64)):(o.openBlock(),o.createElementBlock("a",{key:3,href:t.href,target:"_blank"},o.toDisplayString(t.title),9,mu))}}}),fu=["title"],Iu={key:0,class:"text-secondary"},pu={key:1,class:"text-secondary"},vu={key:0},yu={key:3,class:"d-flex align-items-center justify-content-between"},bu={key:4,class:"text-secondary"},Mu=["title"],wu=o.defineComponent({__name:"AttributeItem",props:{attrName:{},attrValue:{}},setup(e){const t=e;let i;switch(t.attrName){case"IFCType":i=["badge","bg-secondary","text-light","text-truncate"];break;default:i=["text-truncate"]}return(s,a)=>{const n=o.resolveComponent("AttributeItem",!0);return o.openBlock(),o.createElementBlock("tr",null,[o.createElementVNode("th",{title:s.attrName,class:"align-top text-truncate"},o.toDisplayString(s.attrName),9,fu),o.createElementVNode("td",{class:o.normalizeClass(o.unref(i))},[t.attrValue===void 0?(o.openBlock(),o.createElementBlock("span",Iu,"undefined")):t.attrValue===null?(o.openBlock(),o.createElementBlock("span",pu,"null")):typeof t.attrValue=="object"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:2},[Array.isArray(t.attrValue)?(o.openBlock(),o.createElementBlock("table",vu,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(t.attrValue,(r,l)=>(o.openBlock(),o.createBlock(n,{key:l,"attr-name":`[${l}]`,"attr-value":r},null,8,["attr-name","attr-value"]))),128))])):o.unref(A.isLink)(t.attrValue)?(o.openBlock(),o.createBlock(Cu,{key:1,href:t.attrValue.href,title:t.attrValue.title,type:t.attrValue.type},null,8,["href","title","type"])):o.unref(A.isColor)(t.attrValue)?(o.openBlock(),o.createBlock(au,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):o.unref(A.isVector3)(t.attrValue)?(o.openBlock(),o.createElementBlock("div",yu,[o.createVNode(bt,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(o.openBlock(),o.createElementBlock("span",bu,"Object"))],64)):(o.openBlock(),o.createElementBlock("span",{key:3,title:t.attrValue},o.toDisplayString(t.attrValue),9,Mu))],2)])}}}),_a=A._export_sfc(wu,[["__scopeId","data-v-1c2e92b2"]]),Eu={key:0},_u={class:"badge bg-info-subtle text-dark mb-0"},Ou={class:"table table-striped table-sm w-100"},xu=o.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(o.openBlock(),o.createElementBlock("div",Eu,[o.createElementVNode("h6",_u,o.toDisplayString(t.title),1),o.createElementVNode("table",Ou,[o.createElementVNode("tbody",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(t.children,(s,a)=>(o.openBlock(),o.createBlock(_a,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):o.createCommentVNode("",!0)}}),ku={class:"card"},Su={class:"card-header d-flex align-items-center justify-content-between"},Nu={class:"text-truncate mx-2"},Lu={class:"card-body content py-2 px-1"},Pu={class:"card-footer py-0"},Tu={class:"d-flex align-items-center column-gap-3"},Du=o.defineComponent({__name:"AttributePanel",props:{attributes:{},name:{},parent:{},point:{}},emits:["close"],setup(e){const t=e,i=o.ref(!1);function s(){const a=`${t.point.x};${t.point.y};${t.point.z}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,setTimeout(()=>i.value=!1,2e3)}).catch(n=>{console.log("failed",n)})}return(a,n)=>(o.openBlock(),o.createElementBlock("div",ku,[o.createElementVNode("div",Su,[n[1]||(n[1]=o.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),o.createElementVNode("span",Nu,o.toDisplayString(a.name??a.parent),1),o.createElementVNode("button",{onClick:n[0]||(n[0]=r=>a.$emit("close")),type:"button",class:"btn-close","aria-label":"Close"})]),o.createElementVNode("div",Lu,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(a.attributes.entries(),(r,l)=>(o.openBlock(),o.createBlock(xu,{key:l,title:r[0],children:r[1]},null,8,["title","children"]))),128))]),o.createElementVNode("div",Pu,[o.createElementVNode("div",Tu,[o.createVNode(bt,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:a.point.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"]),o.createElementVNode("button",{onClick:s,type:"button",class:"btn btn-link"},[o.createElementVNode("i",{class:o.normalizeClass(["bi",i.value?["bi-clipboard-check","test-success"]:["bi-clipboard"]])},null,2)])])])]))}}),Bu=A._export_sfc(Du,[["__scopeId","data-v-b1912966"]]),Vu="data:image/png;base64,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",Ru={id:"loading-screen",class:"container"},Fu={xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"currentColor",class:"bi bi-geo-alt-fill pulse",viewBox:"0 0 16 16",style:{"vertical-align":"middle"}},Uu={class:"logo"},zu=["src"],ju=o.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",Ru,[i[1]||(i[1]=o.createElementVNode("h1",null,"Loading...",-1)),o.createElementVNode("h2",null,[(o.openBlock(),o.createElementBlock("svg",Fu,[...i[0]||(i[0]=[o.createElementVNode("path",{d:"M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"},null,-1)])]))]),o.createElementVNode("div",Uu,[o.createElementVNode("img",{src:o.unref(Vu)},null,8,zu)])]))}}),Gu=A._export_sfc(ju,[["__scopeId","data-v-712b955c"]]),Hu={class:"main"},Zu=o.defineComponent({__name:"MainView",setup(e){const t=o.ref(null),i=o.ref(null),s=o.shallowRef(null),a=ae();return o.onMounted(()=>{s.value=new Bi({backgroundColor:null,crs:a.getCRS(),target:t.value}),a.setMainView(s.value)}),o.onUnmounted(()=>{a.setMainView(null),s.value&&(s.value.view.setControls(null),s.value.dispose())}),(n,r)=>(o.openBlock(),o.createElementBlock("div",Hu,[o.createElementVNode("div",{ref_key:"mainView",ref:t,class:"main",id:"main-view"},null,512),o.createElementVNode("div",{ref_key:"inspectorView",ref:i,id:"inspector",class:"position-absolute top-0 start-0 mh-100 overflow-auto"},null,512)]))}}),Wu=A._export_sfc(Zu,[["__scopeId","data-v-0d10144c"]]),qu=o.defineComponent({__name:"MinimapView",setup(e){const t=o.ref(null),i=o.shallowRef(),s=ae();return o.onMounted(()=>{i.value=new Bi({backgroundColor:13421772,crs:"EPSG:3857",target:t.value}),i.value.scene.add(new A.DirectionalLight),s.setMinimapView(i.value)}),o.onUnmounted(()=>{var a;s.setMinimapView(null),(a=i.value)==null||a.dispose()}),(a,n)=>(o.openBlock(),o.createElementBlock("div",{ref_key:"target",ref:t,class:"main"},null,512))}}),Yu=A._export_sfc(qu,[["__scopeId","data-v-d78f1f47"]]),Ju={class:"card root"},Xu={class:"d-flex align-items-center"},Ku=["aria-pressed"],Qu=o.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Rt(),s=o.ref(t.getNavigationModeRef());o.watch(s,n=>{t.setNavigationMode(n);let r,l;switch(n){case"disabled":{r="Disabled",l="Camera is disabled";break}case"first-person":{r="First person",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to rotate; Right-click to pan<br>
|
|
10
10
|
<i class="bi bi-mouse2"></i> Scroll to zoom<br>
|
|
11
11
|
<i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right<br>
|
|
12
12
|
<i class="bi bi-keyboard"></i> W/D/A/S: move up/down/left/right`;break}case"orbit":{r="Free navigation",l=`<i class="bi bi-hand-index-thumb"></i> Left-click to pan; Right-click to orbit<br>
|
|
13
13
|
<i class="bi bi-mouse2"></i> Scroll to zoom to cursor<br>
|
|
14
14
|
<i class="bi bi-keyboard"></i> Up/Down/Left/Right: move forward/backward/left/right`;break}case"position-on-map":{r="Position on map",l=`<i class="bi bi-hand-index-thumb"></i> Left-click on the map to move to First Person view on the ground.<br>
|
|
15
|
-
Cancel with right-click or Escape`;break}default:return o}e.push(new st("Navigation",`Navigation mode set to <strong>${r}</strong>.<br>${l}`,"success"))});function n(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(o,r)=>(a.openBlock(),a.createElementBlock("div",qd,[a.createElementVNode("div",Yd,[r[2]||(r[2]=a.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),a.createVNode(Cs,{"model-value":s.value==="first-person","onUpdate:modelValue":r[0]||(r[0]=l=>s.value=l?"first-person":"orbit")},null,8,["model-value"]),r[3]||(r[3]=a.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),r[4]||(r[4]=a.createElementVNode("div",{class:"vr mx-2"},null,-1)),a.createElementVNode("button",{class:a.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:n},[...r[1]||(r[1]=[a.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Xd)])]))}}),Qd=g._export_sfc(Jd,[["__scopeId","data-v-b890a4be"]]),Kd="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",$d="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",tm="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",em="data:image/png;base64,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",im="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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",ca=St.defineStore("modules",()=>{const i=a.ref([]);function t(s){i.value=s}function e(){return i.value}return{getLoadedModules:e,setLoadedModules:t}});var sm={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@tarekraafat/autocomplete.js":{description:"Simple autocomplete pure vanilla Javascript library.",homepage:"https://tarekraafat.github.io/autoComplete.js",license:"Apache-2.0"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const nm={class:"list-group my-3"},am={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},om={class:"d-flex w-100 justify-content-between"},rm=["src"],lm={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},cm={class:"d-flex w-100 justify-content-between"},hm=["src"],gm={class:"list-group-item"},um={class:"d-flex w-100 justify-content-between"},dm=["src"],mm={class:"list-group-item"},pm={class:"d-flex w-100 justify-content-between"},Am={class:"text-end"},Cm=["src"],fm=["src"],Im=["href"],vm={key:0,class:"blockquote fw-light"},ym=a.defineComponent({__name:"AboutPanel",setup(i){const t=sm,e=ca().getLoadedModules();return(s,n)=>(a.openBlock(),a.createElementBlock("div",null,[n[4]||(n[4]=a.createStaticVNode('<p data-v-8c8cc9e6><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-8c8cc9e6>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-8c8cc9e6>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-8c8cc9e6>Going further</h5><p data-v-8c8cc9e6> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-8c8cc9e6>our GitLab project</a> for more info. </p><h5 data-v-8c8cc9e6>Contributors</h5><p data-v-8c8cc9e6><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-8c8cc9e6>Brought to you by the Giro3D contributors.</a></p><h5 data-v-8c8cc9e6>Sponsors</h5>',6)),a.createElementVNode("div",nm,[a.createElementVNode("a",am,[a.createElementVNode("div",om,[n[0]||(n[0]=a.createElementVNode("span",null,"Oslandia",-1)),a.createElementVNode("img",{src:a.unref(em),class:"logo",alt:"Oslandia"},null,8,rm)])]),a.createElementVNode("a",lm,[a.createElementVNode("div",cm,[n[1]||(n[1]=a.createElementVNode("span",null,"BPI France",-1)),a.createElementVNode("img",{src:a.unref(Kd),class:"logo",alt:"BPI France"},null,8,hm)])]),a.createElementVNode("span",gm,[a.createElementVNode("div",um,[n[2]||(n[2]=a.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),a.createElementVNode("img",{src:a.unref($d),class:"logo",alt:"France 2030"},null,8,dm)])]),a.createElementVNode("span",mm,[a.createElementVNode("div",pm,[n[3]||(n[3]=a.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),a.createElementVNode("div",Am,[a.createElementVNode("img",{src:a.unref(tm),class:"logo",alt:"France Relance"},null,8,Cm),a.createElementVNode("img",{src:a.unref(im),class:"logo",alt:"European Union - Next Generation EU"},null,8,fm)])])])]),n[5]||(n[5]=a.createStaticVNode('<p data-v-8c8cc9e6> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-8c8cc9e6>infos+3d@oslandia.com</a>. </p><h5 data-v-8c8cc9e6>License</h5><p data-v-8c8cc9e6><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-8c8cc9e6>MIT License</a></p><h5 data-v-8c8cc9e6>Credits</h5><p data-v-8c8cc9e6>Data and services used from:</p><ul data-v-8c8cc9e6><li data-v-8c8cc9e6><a target="_blank" href="https://ign.fr/" data-v-8c8cc9e6>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-8c8cc9e6><a target="_blank" href="https://www.grandlyon.com/" data-v-8c8cc9e6>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-8c8cc9e6><a target="_blank" href="https://www.openstreetmap.org" data-v-8c8cc9e6>OpenStreetMap</a> (Imagery) </li><li data-v-8c8cc9e6><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-8c8cc9e6>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-8c8cc9e6><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-8c8cc9e6>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-8c8cc9e6><a target="_blank" href="https://oslandia.com" data-v-8c8cc9e6>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-8c8cc9e6><a target="_blank" href="https://bimdata.io/" data-v-8c8cc9e6>BIMData</a> (IFC model)</li></ul><p data-v-8c8cc9e6>Third-parties:</p>',7)),a.createElementVNode("ul",null,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(Object.entries(a.unref(t)),([o,r])=>(a.openBlock(),a.createElementBlock("li",{key:o},[a.createElementVNode("a",{target:"_blank",href:r.homepage},a.toDisplayString(o)+" ("+a.toDisplayString(r.license)+")",9,Im),r.description?(a.openBlock(),a.createElementBlock("blockquote",vm,a.toDisplayString(r.description),1)):a.createCommentVNode("",!0)]))),128))]),n[6]||(n[6]=a.createElementVNode("p",null,"Loaded modules:",-1)),a.createElementVNode("ul",null,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(e),o=>(a.openBlock(),a.createElementBlock("li",{key:o.name},a.toDisplayString(o.name),1))),128))]),n[7]||(n[7]=a.createElementVNode("hr",null,null,-1))]))}}),bm=g._export_sfc(ym,[["__scopeId","data-v-8c8cc9e6"]]),Mm={class:"input-group"},wm={class:"form-check form-switch"},Em=["checked"],_m={class:"input-group"},xm={class:"form-check form-switch"},Om=["checked"],km={class:"accordion mt-3"},Sm={class:"accordion-item"},Nm={id:"clippingbox-size",class:"accordion-collapse collapse show","data-bs-parent":"#accordionExample"},Pm={class:"accordion-body"},Lm={class:"d-flex justify-content-between align-items-end w-100"},Tm={class:"input-group mb-3"},Bm=["value"],Dm=["value"],Vm=["value"],Rm={class:"input-group mb-3"},Fm=["value"],Um=["value"],zm=["value"],Gm={class:"accordion-item"},jm={id:"clippingbox-floorpreset",class:"accordion-collapse collapse show","data-bs-parent":"#accordionExample"},Hm={class:"accordion-body"},Zm={class:"row w-100"},Wm={class:"col-sm-6"},qm={class:"input-group input-group-sm"},Ym={class:"row w-100"},Xm={class:"col-sm-6"},Jm={class:"input-group input-group-sm"},Qm={class:"row w-100"},Km={class:"col-sm-6"},$m={class:"input-group input-group-sm"},tp=a.defineComponent({__name:"ClippingBox",setup(i){const t=g.getConfig(),e=g.useAnalysisStore(),s=g.useCameraStore(),n=M=>Number.parseFloat(M.target.value);function o(){const{target:M}=s.getCameraPosition();e.setClippingBoxCenter(M.clone())}function r(M){const y=e.clippingBoxSize.clone();y.setX(M),e.setClippingBoxSize(y)}function l(M){const y=e.clippingBoxSize.clone();y.setY(M),e.setClippingBoxSize(y)}function c(M){const y=e.clippingBoxSize.clone();y.setZ(M),e.setClippingBoxSize(y)}function h(M){const y=e.clippingBoxCenter.clone();y.setX(M),e.setClippingBoxCenter(y)}function m(M){const y=e.clippingBoxCenter.clone();y.setY(M),e.setClippingBoxCenter(y)}function u(M){const y=e.clippingBoxCenter.clone();y.setZ(M),e.setClippingBoxCenter(y)}const d=a.ref(t.analysis.clipping_box.floor_preset.altitude),C=a.ref(t.analysis.clipping_box.floor_preset.size),p=a.ref(t.analysis.clipping_box.floor_preset.floor);function A(){p.value-=1;const M=e.clippingBoxCenter.clone();M.setZ(I()),e.setClippingBoxCenter(M)}function v(){p.value+=1;const M=e.clippingBoxCenter.clone();M.setZ(I()),e.setClippingBoxCenter(M)}function I(){return d.value+(p.value+.5)*C.value}function w(){const{target:M}=s.getCameraPosition(),y=M.clone();y.z=I();const E=new g.Vector3(1e3,1e3,C.value);e.setClippingBoxSize(E),e.setClippingBoxCenter(y)}return(M,y)=>(a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("div",Mm,[a.createElementVNode("div",wm,[a.createElementVNode("input",{class:"form-check-input",checked:a.unref(e).isClippingBoxInverted(),type:"checkbox",role:"switch",id:"invert-clippingbox",onInput:y[0]||(y[0]=E=>a.unref(e).setClippingBoxInverted(!a.unref(e).isClippingBoxInverted()))},null,40,Em),y[13]||(y[13]=a.createElementVNode("label",{class:"form-check-label",for:"invert-clippingbox"},"Invert clipping box",-1))])]),a.createElementVNode("div",_m,[a.createElementVNode("div",xm,[a.createElementVNode("input",{class:"form-check-input",checked:a.unref(e).isClippingBoxHelperDisplayed(),type:"checkbox",role:"switch",id:"enable-clippingbox-helper",onInput:y[1]||(y[1]=E=>a.unref(e).displayClippingBoxHelper(!a.unref(e).isClippingBoxHelperDisplayed()))},null,40,Om),y[14]||(y[14]=a.createElementVNode("label",{class:"form-check-label",for:"enable-clippingbox-helper"},"Show 3D helper",-1))])]),a.createElementVNode("div",km,[a.createElementVNode("div",Sm,[y[17]||(y[17]=a.createElementVNode("h2",{class:"accordion-header"},[a.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":"#clippingbox-size","aria-expanded":"true","aria-controls":"clippingbox-size"}," Clipping box size ")],-1)),a.createElementVNode("div",Nm,[a.createElementVNode("div",Pm,[a.createElementVNode("div",Lm,[y[15]||(y[15]=a.createElementVNode("label",{class:"form-label flex-grow"},"Center (x, y, z)",-1)),a.createElementVNode("button",{type:"button",class:"btn btn-outline-secondary btn-sm",onClick:y[2]||(y[2]=E=>o())}," Set from view ")]),a.createElementVNode("div",Tm,[a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-x",value:a.unref(e).clippingBoxCenter.x,onInput:y[3]||(y[3]=E=>h(n(E)))},null,40,Bm),a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-y",value:a.unref(e).clippingBoxCenter.y,onInput:y[4]||(y[4]=E=>m(n(E)))},null,40,Dm),a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-z",value:a.unref(e).clippingBoxCenter.z,onInput:y[5]||(y[5]=E=>u(n(E)))},null,40,Vm)]),y[16]||(y[16]=a.createElementVNode("label",{class:"form-label"},"Size (x, y, z)",-1)),a.createElementVNode("div",Rm,[a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-x",min:"1",value:a.unref(e).clippingBoxSize.x,onInput:y[6]||(y[6]=E=>r(n(E)))},null,40,Fm),a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-y",min:"1",value:a.unref(e).clippingBoxSize.y,onInput:y[7]||(y[7]=E=>l(n(E)))},null,40,Um),a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-size-z",min:"1",value:a.unref(e).clippingBoxSize.z,onInput:y[8]||(y[8]=E=>c(n(E)))},null,40,zm)])])])]),a.createElementVNode("div",Gm,[y[25]||(y[25]=a.createElementVNode("h2",{class:"accordion-header"},[a.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":"#clippingbox-floorpreset","aria-expanded":"true","aria-controls":"clippingbox-floorpreset"}," Floor preset ")],-1)),a.createElementVNode("div",jm,[a.createElementVNode("div",Hm,[a.createElementVNode("div",Zm,[y[19]||(y[19]=a.createElementVNode("label",{for:"floor-reference-altitude",class:"col-sm-6 col-form-label col-form-label-sm"},"Reference altitude",-1)),a.createElementVNode("div",Wm,[a.createElementVNode("div",qm,[a.withDirectives(a.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-reference-altitude","onUpdate:modelValue":y[9]||(y[9]=E=>d.value=E)},null,512),[[a.vModelText,d.value]]),y[18]||(y[18]=a.createElementVNode("span",{class:"input-group-text"},"m",-1))])])]),a.createElementVNode("div",Ym,[y[21]||(y[21]=a.createElementVNode("label",{for:"floor-size",class:"col-sm-6 col-form-label col-form-label-sm"},"Floor size",-1)),a.createElementVNode("div",Xm,[a.createElementVNode("div",Jm,[a.withDirectives(a.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-size","onUpdate:modelValue":y[10]||(y[10]=E=>C.value=E)},null,512),[[a.vModelText,C.value]]),y[20]||(y[20]=a.createElementVNode("span",{class:"input-group-text"},"m",-1))])])]),a.createElementVNode("div",Qm,[y[24]||(y[24]=a.createElementVNode("label",{for:"floor-number",class:"col-sm-6 col-form-label col-form-label-sm"},"Floor number",-1)),a.createElementVNode("div",Km,[a.createElementVNode("div",$m,[a.withDirectives(a.createElementVNode("input",{type:"number",class:"form-control form-control-sm",id:"floor-number","onUpdate:modelValue":y[11]||(y[11]=E=>p.value=E)},null,512),[[a.vModelText,p.value]]),a.createElementVNode("button",{class:"btn btn-outline-secondary btn-sm px-0",type:"button",onClick:v},[...y[22]||(y[22]=[a.createElementVNode("i",{class:"bi bi-arrow-up-short"},null,-1)])]),a.createElementVNode("button",{class:"btn btn-outline-secondary btn-sm px-0",type:"button",onClick:A},[...y[23]||(y[23]=[a.createElementVNode("i",{class:"bi bi-arrow-down-short"},null,-1)])])])])]),a.createElementVNode("button",{type:"button",class:"btn btn-outline-secondary btn-sm",onClick:y[12]||(y[12]=E=>w())}," Set ")])])])])]))}}),ep=g._export_sfc(tp,[["__scopeId","data-v-c3db5a32"]]),ip={class:"input-group mb-3"},sp=["value"],np={class:"input-group mb-3"},ap=["value"],op={class:"input-group mb-3"},rp={class:"input-group mb-3"},lp=["value"],cp=["value"],hp=a.defineComponent({__name:"CrossSection",setup(i){const t=g.useAnalysisStore();function e(o){t.setCrossSectionOrientation(o)}function s(o){const r=t.crossSectionCenter.clone();r.setX(o),t.setCrossSectionCenter(r)}function n(o){const r=t.crossSectionCenter.clone();r.setY(o),t.setCrossSectionCenter(r)}return(o,r)=>(a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("div",ip,[r[4]||(r[4]=a.createElementVNode("label",{for:"plane-orientation-range",class:"form-label"},"Plane orientation (0-360°)",-1)),a.createElementVNode("input",{id:"plane-orientation-range",title:"Altitude",type:"range",class:"form-range",min:"0",step:"0.1",max:"360",value:a.unref(t).crossSectionOrientation,onInput:r[0]||(r[0]=l=>e(Number.parseFloat(l.target.value)))},null,40,sp),a.createElementVNode("div",np,[a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-orientation-number",step:"0.1",value:a.unref(t).crossSectionOrientation,onInput:r[1]||(r[1]=l=>e(Number.parseFloat(l.target.value)))},null,40,ap)])]),r[6]||(r[6]=a.createElementVNode("hr",null,null,-1)),a.createElementVNode("div",op,[r[5]||(r[5]=a.createElementVNode("label",{class:"form-label"},"Center (x, y)",-1)),a.createElementVNode("div",rp,[a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-x",value:a.unref(t).crossSectionCenter.x,onInput:r[2]||(r[2]=l=>s(Number.parseFloat(l.target.value)))},null,40,lp),a.createElementVNode("input",{type:"number",class:"form-control",id:"plane-center-y",value:a.unref(t).crossSectionCenter.y,onInput:r[3]||(r[3]=l=>n(Number.parseFloat(l.target.value)))},null,40,cp)])])]))}}),gp={class:"input-group mb-3"},up=["value"],dp={class:"input-group mb-3"},mp=["value"],pp=a.defineComponent({__name:"FloodingPlane",setup(i){const t=g.useAnalysisStore();function e(s){t.setFloodingPlaneHeight(s)}return(s,n)=>(a.openBlock(),a.createElementBlock("div",gp,[n[3]||(n[3]=a.createElementVNode("label",{for:"flooding-altitude-range",class:"form-label"},"Altitude",-1)),a.createElementVNode("input",{id:"flooding-altitude-range",title:"Altitude",type:"range",class:"form-range",min:"0",step:"0.1",max:"500",value:a.unref(t).floodingPlaneHeight,onInput:n[0]||(n[0]=o=>e(Number.parseFloat(o.target.value)))},null,40,up),a.createElementVNode("div",dp,[a.createElementVNode("input",{type:"number",class:"form-control",id:"flooding-altitude-number",step:"0.1",value:a.unref(t).floodingPlaneHeight,onInput:n[1]||(n[1]=o=>e(Number.parseFloat(o.target.value)))},null,40,mp),n[2]||(n[2]=a.createElementVNode("span",{class:"input-group-text"},"m",-1))])]))}}),Ap=a.defineComponent({__name:"BarChart",setup(i){Et.Chart.register(Et.BarController,Et.BarElement,Et.CategoryScale,Et.LinearScale);const t=a.ref();return a.onMounted(()=>{new Et.Chart(t.value,{data:{datasets:[{backgroundColor:["rgba(255, 99, 132, 0.2)","rgba(54, 162, 235, 0.2)","rgba(255, 206, 86, 0.2)","rgba(75, 192, 192, 0.2)","rgba(153, 102, 255, 0.2)","rgba(255, 159, 64, 0.2)"],borderColor:["rgba(255, 99, 132, 1)","rgba(54, 162, 235, 1)","rgba(255, 206, 86, 1)","rgba(75, 192, 192, 1)","rgba(153, 102, 255, 1)","rgba(255, 159, 64, 1)"],borderWidth:1,data:[12,19,3,5,2,3],label:"# of Votes"}],labels:["Red","Blue","Yellow","Green","Purple","Orange"]},type:"bar"})}),(e,s)=>(a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("canvas",{ref_key:"ctx",ref:t},null,512)]))}}),Cp=a.defineComponent({__name:"DoughnutChart",setup(i){Et.Chart.register(Et.DoughnutController,Et.ArcElement);const t=a.ref();return a.onMounted(()=>{new Et.Chart(t.value,{data:{datasets:[{backgroundColor:["rgb(255, 99, 132)","rgb(54, 162, 235)","rgb(255, 205, 86)"],data:[300,50,100],hoverOffset:4,label:"My First Dataset"}],labels:["Red","Blue","Yellow"]},type:"doughnut"})}),(e,s)=>(a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("canvas",{ref_key:"ctx",ref:t},null,512)]))}}),fp={class:"border p-2"},Ip={class:"float-none w-auto form-text mb-0 px-2"},vp={key:0,class:"form-text mt-0 mx-2"},yp=["id","aria-label"],bp=["value"],Mp={key:1,class:"form-text mt-0 mx-2"},fs=a.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(i,{emit:t}){const e=i,s=t,n=a.ref(e.current);function o(l){const c=e.items[l];n.value=c,s("updated:current",c)}const r=g.MathUtils.generateUUID();return(l,c)=>(a.openBlock(),a.createElementBlock("fieldset",fp,[a.createElementVNode("legend",Ip,a.toDisplayString(l.label),1),l.descriptionPosition==="top"&&n.value!==null&&n.value.description?(a.openBlock(),a.createElementBlock("div",vp,a.toDisplayString(n.value.description),1)):a.createCommentVNode("",!0),a.createElementVNode("select",{id:a.unref(r),class:"form-select","aria-label":l.label,onInput:c[0]||(c[0]=h=>o(h.target.selectedIndex))},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(l.items,(h,m)=>(a.openBlock(),a.createElementBlock("option",{key:m,value:m},a.toDisplayString(h.name),9,bp))),128))],40,yp),l.descriptionPosition!=="top"&&n.value!==null&&n.value.description?(a.openBlock(),a.createElementBlock("div",Mp,a.toDisplayString(n.value.description),1)):a.createCommentVNode("",!0)]))}}),wp={class:"root"},Ep={class:"text-align-center"},_p=a.defineComponent({__name:"LoadingIndicator",props:{text:String},setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",wp,[e[0]||(e[0]=a.createElementVNode("div",{class:"spinner-border text-secondary",role:"status"},[a.createElementVNode("span",{class:"visually-hidden"},"Loading...")],-1)),a.createElementVNode("div",Ep,a.toDisplayString(i.text),1)]))}}),xp=g._export_sfc(_p,[["__scopeId","data-v-012bbf48"]]),Op=St.defineStore("statistics",()=>{function i(){return[]}return{getCompatibleDatasets:i}}),kp={class:"mb-3"},Sp={class:"row w-100 my-2"},Np={key:1},Pp={class:"border m-2 p-1"},Lp={class:"border m-2 p-1"},Tp=a.defineComponent({__name:"Statistics",setup(i){const t=Op(),e=a.ref(null),s=a.ref(!1),n=a.ref(!1);async function o(){s.value=!0,n.value=!1,await Qa.delay(1e3),s.value=!1,n.value=!0}function r(l){e.value=l,s.value=!1,n.value=!1}return(l,c)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[a.createElementVNode("div",kp,[a.createVNode(fs,{label:"Source",current:null,items:a.unref(t).getCompatibleDatasets(),"onUpdated:current":c[0]||(c[0]=h=>r(h))},null,8,["items"])]),a.createVNode(g._sfc_main,{title:"Generate stats...",class:"btn-primary",onClick:o,icon:"bi-pie-chart-fill",text:"Generate"}),a.createElementVNode("div",Sp,[s.value?(a.openBlock(),a.createBlock(xp,{key:0,text:"processing..."})):a.createCommentVNode("",!0),n.value?(a.openBlock(),a.createElementBlock("div",Np,[a.createElementVNode("div",Pp,[a.createVNode(Ap)]),a.createElementVNode("div",Lp,[a.createVNode(Cp)])])):a.createCommentVNode("",!0)])],64))}}),Bp=g._export_sfc(Tp,[["__scopeId","data-v-89145074"]]),Dp={class:"card"},Vp={class:"card-header"},Rp={class:"form-check form-switch d-flex"},Fp=["checked","disabled","id"],Up=["for"],zp={key:0,class:"card-body"},Gp=a.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},expanded:{type:Boolean},icon:{},id:{},title:{}},emits:["update:expanded"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",Dp,[a.createElementVNode("h5",Vp,[a.createElementVNode("div",Rp,[a.createElementVNode("input",{class:"form-check-input",checked:t.expanded,disabled:!t.collapsible,type:"checkbox",role:"switch",id:`enable-${t.id}`,onInput:e[0]||(e[0]=s=>t.$emit("update:expanded",!t.expanded))},null,40,Fp),a.createElementVNode("label",{class:"form-check-label flex-fill",for:`enable-${t.id}`},[t.icon?(a.openBlock(),a.createElementBlock("i",{key:0,class:a.normalizeClass(["bi icon",t.icon])},null,2)):a.createCommentVNode("",!0),a.createTextVNode(" "+a.toDisplayString(t.title),1)],8,Up)])]),t.expanded?(a.openBlock(),a.createElementBlock("div",zp,[a.renderSlot(t.$slots,"default",{},void 0,!0)])):a.createCommentVNode("",!0)]))}}),ii=g._export_sfc(Gp,[["__scopeId","data-v-54281730"]]),jp=a.defineComponent({__name:"AnalysisPanel",setup(i){const t=g.useAnalysisStore();return(e,s)=>(a.openBlock(),a.createElementBlock("div",null,[a.createVNode(ii,{class:"tool",id:"flooding-plane",title:"Flooding plane",icon:"bi-layers-half",expanded:a.unref(t).isFloodingPlaneEnabled(),collapsible:!0,"onUpdate:expanded":a.unref(t).enableFloodingPlane},{default:a.withCtx(()=>[a.createVNode(pp)]),_:1},8,["expanded","onUpdate:expanded"]),a.createVNode(ii,{class:"tool",id:"cross-section",title:"Cross section",icon:"bi-circle-half",expanded:a.unref(t).isCrossSectionEnabled(),collapsible:!0,"onUpdate:expanded":a.unref(t).enableCrossSection},{default:a.withCtx(()=>[a.createVNode(hp)]),_:1},8,["expanded","onUpdate:expanded"]),a.createVNode(ii,{class:"tool",id:"clipping-box",title:"Clipping Box",icon:"bi-bounding-box",expanded:a.unref(t).isClippingBoxEnabled(),collapsible:!0,"onUpdate:expanded":a.unref(t).enableClippingBox},{default:a.withCtx(()=>[a.createVNode(ep)]),_:1},8,["expanded","onUpdate:expanded"]),a.createVNode(ii,{class:"tool",id:"statistics",title:"Statistics",icon:"bi-bar-chart-line",expanded:a.unref(t).isStatisticsEnabled(),collapsible:!0,"onUpdate:expanded":a.unref(t).enableStatistics},{default:a.withCtx(()=>[a.createVNode(Bp)]),_:1},8,["expanded","onUpdate:expanded"])]))}}),Hp=g._export_sfc(jp,[["__scopeId","data-v-c440c28f"]]),Zp={},Wp={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function qp(i,t){return a.openBlock(),a.createElementBlock("fieldset",Wp,[t[0]||(t[0]=a.createElementVNode("hr",null,null,-1)),a.renderSlot(i.$slots,"default")])}const _i=g._export_sfc(Zp,[["render",qp]]),xi=a.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(i,{emit:t}){const e=t,s=a.ref(!1),n=a.ref(null);function o(u){if(u){const d=[];for(const C of u)d.push(C);e("import",d)}}function r(u){const d=u.target.files;o(d)}function l(u){s.value=!0,u.preventDefault()}function c(u){s.value=!1,u.preventDefault()}function h(u){u.preventDefault(),u.dataTransfer&&(u.dataTransfer.dropEffect="copy")}function m(u){var C;s.value=!1;const d=(C=u.dataTransfer)==null?void 0:C.files;o(d),u.preventDefault()}return(u,d)=>(a.openBlock(),a.createElementBlock("div",{draggable:"true",onDragover:h,onDragenter:l,onDragleave:c,onDrop:m},[a.createVNode(g._sfc_main,{title:u.title,text:u.text,icon:u.icon??"bi-box-arrow-left",onClick:d[0]||(d[0]=C=>n.value.click()),class:a.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),a.createElementVNode("input",{ref_key:"hiddenInput",ref:n,class:"btn btn-outline-secondary d-none",type:"file",onInput:r,multiple:"true"},null,544)],32))}}),Yp=a.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(i){return(t,e)=>(a.openBlock(),a.createBlock(Cs,{"model-value":t.visible,"onUpdate:modelValue":e[0]||(e[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),pe=g._export_sfc(Yp,[["__scopeId","data-v-7c3ff3bf"]]),Xp=a.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",null,a.toDisplayString(i.text),1))}}),Oi=g._export_sfc(Xp,[["__scopeId","data-v-a385fce5"]]),Jp={class:"list-group-item item"},Qp={class:"d-flex"},Kp=["title"],$p={class:"icons"},tA=["data-bs-target"],eA=["id"],iA={key:1,class:"table table-striped table-sm table-responsive-sm"},sA=a.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(i){const t=i,e=a.ref(t.annotation.isEditing),s=()=>{e.value=t.annotation.isEditing};return a.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),a.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(n,o)=>(a.openBlock(),a.createElementBlock("li",Jp,[a.createElementVNode("div",Qp,[a.createVNode(pe,{visible:n.visible,"onUpdate:visible":o[0]||(o[0]=r=>n.$emit("update:visible",r))},null,8,["visible"]),a.createElementVNode("a",{class:"title",title:n.annotation.title,href:"#",onClick:o[1]||(o[1]=r=>n.$emit("zoom"))},a.toDisplayString(n.annotation.title),9,Kp),a.createElementVNode("div",$p,[a.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${n.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...o[5]||(o[5]=[a.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,tA),a.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:o[2]||(o[2]=r=>e.value?n.$emit("stop-edit"):n.$emit("edit"))},[a.createElementVNode("i",{class:a.normalizeClass(`bi bi-pencil ${e.value?"text-primary":""}`)},null,2)]),a.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:o[3]||(o[3]=r=>n.$emit("download"))},[...o[6]||(o[6]=[a.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),a.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:o[4]||(o[4]=r=>n.$emit("delete"))},[...o[7]||(o[7]=[a.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),a.createElementVNode("div",{class:"collapse m-2",id:`collapse-${n.annotation.uuid}`},[Object.entries(n.annotation.properties).length===0?(a.openBlock(),a.createBlock(Oi,{key:0,text:"No properties"})):(a.openBlock(),a.createElementBlock("table",iA,[o[8]||(o[8]=a.createElementVNode("thead",null,[a.createElementVNode("tr",null,[a.createElementVNode("th",null,"Key"),a.createElementVNode("th",null,"Value")])],-1)),a.createElementVNode("tbody",null,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(Object.entries(n.annotation.properties),([r,l])=>(a.openBlock(),a.createBlock(la,{key:r,"attr-name":r,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])]))],8,eA)]))}}),nA=g._export_sfc(sA,[["__scopeId","data-v-364a81a5"]]),un=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],aA={class:"d-flex flex-column h-100"},oA={class:"list-group list-group-flush flex-fill overflow-auto"},rA=a.defineComponent({__name:"AnnotationPanel",setup(i){const t=ps(),e=g.useCameraStore(),s=a.ref(t.getAnnotationMode());a.watch(s,h=>{t.setAnnotationMode(h)});function n(h){const m=h.toGeoJSON();g.Download.downloadAsJson(m,`annotation-${h.title}.json`)}function o(){const h=sa.toCollection(t.getAnnotations());g.Download.downloadAsJson(h,"annotations.json")}function r(h){e.lookTopDownAt(h.object)}function l(h){t.importAnnotationsFiles(h)}function c(h){s.value=h==null?void 0:h.value}return(h,m)=>(a.openBlock(),a.createElementBlock("div",aA,[a.unref(t).count===0?(a.openBlock(),a.createBlock(Oi,{key:0,text:"No annotations"})):a.createCommentVNode("",!0),a.createElementVNode("ul",oA,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(t).getAnnotations(),u=>(a.openBlock(),a.createBlock(nA,{key:u.title,annotation:u,visible:u.visible,"onUpdate:visible":()=>{u.visible=!u.visible,h.$forceUpdate()},onEdit:d=>a.unref(t).edit(u),onStopEdit:m[0]||(m[0]=d=>a.unref(t).stopEdition()),onDelete:d=>a.unref(t).remove(u),onDownload:d=>n(u),onZoom:d=>r(u)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),a.createVNode(_i,{disabled:a.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:a.withCtx(()=>[a.createVNode(Cs,{"model-value":a.unref(t).showLabels(),"onUpdate:modelValue":m[1]||(m[1]=u=>a.unref(t).setShowLabels(u)),title:"show labels"},{default:a.withCtx(()=>[...m[6]||(m[6]=[a.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),a.createVNode(fs,{label:"Picking mode","description-position":"top",current:a.unref(un)[0],items:a.unref(un),"onUpdated:current":m[2]||(m[2]=u=>c(u)),class:"mb-2"},null,8,["current","items"]),a.createVNode(g._sfc_main,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:m[3]||(m[3]=u=>a.unref(t).createPoint())}),a.createVNode(g._sfc_main,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:m[4]||(m[4]=u=>a.unref(t).createLine())}),a.createVNode(g._sfc_main,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:m[5]||(m[5]=u=>a.unref(t).createPolygon())}),a.createVNode(g._sfc_main,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:o}),a.createVNode(xi,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:l})]),_:1},8,["disabled"])]))}}),lA={key:0},cA={class:"modal-dialog"},hA={class:"modal-content"},gA={class:"modal-header"},uA={class:"modal-title fs-5",id:"exampleModalLabel"},dA={class:"modal-body"},mA={class:"modal-footer"},pA=a.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(i){return(t,e)=>i.show?(a.openBlock(),a.createElementBlock("div",lA,[e[2]||(e[2]=a.createElementVNode("div",{class:"background"},null,-1)),a.createElementVNode("div",{class:a.normalizeClass(["modal","fade","d-block",i.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[a.createElementVNode("div",cA,[a.createElementVNode("div",hA,[a.createElementVNode("div",gA,[a.createElementVNode("h1",uA,a.toDisplayString(i.title),1),a.createElementVNode("button",{type:"button",class:"btn-close",onClick:e[0]||(e[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),a.createElementVNode("div",dA,[a.renderSlot(t.$slots,"default",{},void 0,!0)]),a.createElementVNode("div",mA,[a.createElementVNode("button",{type:"button",onClick:e[1]||(e[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):a.createCommentVNode("",!0)}}),AA=g._export_sfc(pA,[["__scopeId","data-v-1f7f2e97"]]),CA={class:"list-group-item item d-flex d-flex-end"},fA=a.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("li",CA,[a.createElementVNode("a",{class:"bookmark",href:"#",onClick:e[0]||(e[0]=s=>t.$emit("goto"))},a.toDisplayString(i.name),1),a.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:e[1]||(e[1]=s=>t.$emit("share"))},[...e[3]||(e[3]=[a.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),a.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:e[2]||(e[2]=s=>t.$emit("delete"))},[...e[4]||(e[4]=[a.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),IA=g._export_sfc(fA,[["__scopeId","data-v-682112f6"]]),vA={class:"input-group mb-3"},yA={class:"form-control text-truncate"},bA={class:"input-group-text",id:"basic-addon2"},MA=a.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(i){function t(e){navigator.clipboard.writeText(e)}return(e,s)=>(a.openBlock(),a.createElementBlock("div",null,[s[2]||(s[2]=a.createElementVNode("p",null,"Use this link to share your bookmark",-1)),a.createElementVNode("div",vA,[a.createElementVNode("span",yA,a.toDisplayString(e.url),1),a.createElementVNode("span",bA,[a.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(e.url))},[...s[1]||(s[1]=[a.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class Ht extends g.EventDispatcher{constructor(e,s){super();f(this,"camera");f(this,"name");this.name=e,this.camera=s}static new(e,s){const o=new URL(s).searchParams.get("view");if(o===null)throw new Error("Could not deserialize bookmark");const r=JSON.parse(o),l=new g.Vector3(r.camera[0],r.camera[1],r.camera[2]),c=new g.Vector3(r.target[0],r.target[1],r.target[2]),h=new g.Vector3(r.focalOffset[0],r.focalOffset[1],r.focalOffset[2]),m=new Ei(l,c,h);return new Ht(e,m)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const e=g.Download.getBaseUrl()+"?",s=this.camera,n={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},o=new URL(e),r=o.searchParams;return r.set("tour","none"),r.set("view",JSON.stringify(n)),o}goTo(){this.dispatchEvent({type:"goto"})}}function wA(){const i=g.getConfig(),t=[];for(const e of i.bookmarks){const s=e.position,n=e.target,o=e.focalOffset,r=e.title,l=new Ei(new g.Vector3(s.x,s.y,s.z),new g.Vector3(n.x,n.y,n.z),new g.Vector3(o.x,o.y,o.z));t.push(new Ht(r,l))}return t}const ha=St.defineStore("bookmarks",()=>{const i=a.ref(new Set(wA())),t=a.computed(()=>i.value.size);function e(r){i.value.add(r),jt.dispatchEvent({type:"bookmark-added",value:r})}function s(r){i.value.delete(r),jt.dispatchEvent({type:"bookmark-removed",value:r})}function n(){i.value.clear()}function o(){return[...i.value]}return{add:e,clear:n,count:t,getBookmarks:o,remove:s}}),EA={class:"d-flex flex-column h-100"},_A={class:"list-group list-group-flush flex-fill overflow-auto"},xA=a.defineComponent({__name:"BookmarkPanel",setup(i){const t=a.ref(!1),e=a.ref(null),s=a.ref(null),n=me(),o=ha(),r=g.useCameraStore();function l(){const p=window.prompt("Bookmark name","New bookmark");if(p!=null){const A=new Ht(p,r.getCameraPosition());o.add(A)}}function c(){const p=[];for(const A of o.getBookmarks())p.push({title:A.name,url:A.getUrl().toString()});g.Download.downloadAsJson(p,"bookmarks.json")}function h(p){r.setCameraPosition(p.camera)}function m(p){for(const A of p)u(A)}async function u(p){const A=await p.text(),v=JSON.parse(A),I=new Set(o.getBookmarks().map(y=>y.name));let w=0,M=0;v.forEach(y=>{I.has(y.title)?M++:(o.add(Ht.new(y.title,y.url)),w++)}),n.push(new st("Bookmarks",`${w} bookmarks imported (${M} skipped)`,"success"))}function d(p){e.value=p.getUrl().toString(),s.value="Share bookmark",t.value=!0}function C(){const p=new Ht("temp",r.getCameraPosition());e.value=p.getUrl().toString(),s.value="Share current view",t.value=!0}return(p,A)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[a.createElementVNode("div",EA,[a.unref(o).count===0?(a.openBlock(),a.createBlock(Oi,{key:0,text:"No bookmarks"})):a.createCommentVNode("",!0),a.createElementVNode("ul",_A,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(o).getBookmarks(),v=>(a.openBlock(),a.createBlock(IA,{key:v.name,name:v.name,onShare:I=>d(v),onDelete:I=>a.unref(o).remove(v),onGoto:I=>h(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),a.createVNode(_i,null,{default:a.withCtx(()=>[a.createVNode(g._sfc_main,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:A[0]||(A[0]=()=>{l(),p.$forceUpdate()})}),a.createVNode(g._sfc_main,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:C}),a.createVNode(g._sfc_main,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:c,icon:"bi-box-arrow-right",text:"Export bookmarks"}),a.createVNode(xi,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:m})]),_:1})]),a.createVNode(AA,{show:t.value,title:s.value,onClose:A[1]||(A[1]=()=>t.value=!1)},{default:a.withCtx(()=>[a.createVNode(MA,{url:e.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),OA={},kA={class:"list-group list-group-flush border-start"};function SA(i,t){return a.openBlock(),a.createElementBlock("ul",kA,[a.renderSlot(i.$slots,"default")])}const hi=g._export_sfc(OA,[["render",SA],["__scopeId","data-v-461b97dc"]]),NA=["aria-expanded","aria-controls"],PA={key:0,class:"icon me-2"},LA={class:"flex-fill"},TA={key:1,class:"icon ms-2"},BA=["id"],Xi=a.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(i,{emit:t}){const e=i,s=t,n=g.MathUtils.generateUUID(),o=`#${n}`,r=a.ref(null);return a.onMounted(()=>{var l,c,h;e.expanded&&((l=r.value)==null||l.classList.add("show")),(c=r.value)==null||c.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(h=r.value)==null||h.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(l,c)=>(a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("h6",null,[a.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:o,"data-bs-toggle":"collapse",role:"button","aria-expanded":l.expanded,"aria-controls":a.unref(n)},[l.iconPosition==="left"?(a.openBlock(),a.createElementBlock("div",PA,[...c[0]||(c[0]=[a.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):a.createCommentVNode("",!0),a.createElementVNode("span",LA,a.toDisplayString(l.title),1),l.iconPosition!=="left"?(a.openBlock(),a.createElementBlock("div",TA,[...c[1]||(c[1]=[a.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):a.createCommentVNode("",!0)],8,NA)]),a.createElementVNode("div",{ref_key:"collapsible",ref:r,id:a.unref(n),class:"collapse"},[a.renderSlot(l.$slots,"default")],8,BA)]))}}),DA=a.defineComponent({__name:"ListLabel",props:{title:{}},setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",{class:a.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},a.toDisplayString(t.title),3))}}),VA={class:"slider d-flex"},RA={key:0,title:"Transparent",class:"bi-x-diamond me-1"},FA={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},UA=["value"],zA={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},GA=a.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",VA,[t.size!=="small"?(a.openBlock(),a.createElementBlock("i",RA)):a.createCommentVNode("",!0),t.size==="small"?(a.openBlock(),a.createElementBlock("i",FA)):a.createCommentVNode("",!0),a.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:e[0]||(e[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,UA),t.size!=="small"?(a.openBlock(),a.createElementBlock("i",zA)):a.createCommentVNode("",!0)]))}}),ga=g._export_sfc(GA,[["__scopeId","data-v-5b0604f2"]]),jA={class:"list-group-item"},HA={class:"d-flex"},ZA=a.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(i){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},e={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,n)=>(a.openBlock(),a.createElementBlock("li",jA,[a.createElementVNode("div",HA,[a.createVNode(g.IconList,{class:"me-1 text-body-tertiary"},{default:a.withCtx(()=>[a.createVNode(g._sfc_main$1,{icon:t[s.type],title:e[s.type]},null,8,["icon","title"])]),_:1}),a.createVNode(pe,{visible:s.visible,"onUpdate:visible":n[0]||(n[0]=o=>s.$emit("update:visible",o))},null,8,["visible"]),a.createVNode(DA,{title:s.name,class:a.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(a.openBlock(),a.createBlock(ga,{key:0,class:a.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":n[1]||(n[1]=o=>s.$emit("update:opacity",o))},null,8,["class","opacity"])):a.createCommentVNode("",!0)])]))}}),dn=g._export_sfc(ZA,[["__scopeId","data-v-a7bbfe26"]]),WA={},qA={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function YA(i,t){return a.openBlock(),a.createElementBlock("div",qA,[...t[0]||(t[0]=[a.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const ua=g._export_sfc(WA,[["render",YA]]),XA={class:"d-flex"},JA={key:0,class:"icon spinner d-inline-block"},QA={key:1,class:"list-group-item"},KA=a.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(i){const t=i,e=a.reactive(t.group.leafs()),s=a.ref(!1),n=a.ref(!1),o=a.ref(t.group.visible);a.watch(e,c=>{s.value=c.some(h=>h.isPreloading),n.value=c.some(h=>h.isPreloaded),o.value=c.some(h=>h.visible)});const r=g.MathUtils.generateUUID(),l=`#${r}`;return(c,h)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[a.createElementVNode("div",XA,[a.createVNode(g.IconList,{class:"me-1 text-body-tertiary"},{default:a.withCtx(()=>[...h[10]||(h[10]=[a.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),a.createVNode(pe,{visible:o.value,"onUpdate:visible":h[0]||(h[0]=m=>c.$emit("update:visible",c.group,m))},null,8,["visible"]),a.createVNode(g.IconList,{class:"me-1"},{default:a.withCtx(()=>[a.createVNode(g.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":l,"aria-controls":a.unref(r),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),a.createVNode(g._sfc_main$2,{class:"label",disabled:!o.value||!n.value,text:c.group.name,title:`Zoom to ${c.group.name}`,onClick:h[1]||(h[1]=m=>c.$emit("zoom",c.group))},null,8,["disabled","text","title"]),a.createVNode(g.IconList,{class:"ms-1"},{default:a.withCtx(()=>[s.value?(a.openBlock(),a.createElementBlock("div",JA,[a.createVNode(ua,{title:"Loading..."})])):a.createCommentVNode("",!0),n.value&&(c.group.config.canMaskBasemap||c.group.config.isMaskingBasemap)?(a.openBlock(),a.createBlock(g.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=m=>c.$emit("update:toggle-mask",c.group))})):a.createCommentVNode("",!0),n.value?(a.openBlock(),a.createBlock(g.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:h[3]||(h[3]=m=>c.$emit("clipTo",c.group))})):a.createCommentVNode("",!0),n.value?(a.openBlock(),a.createBlock(g.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[4]||(h[4]=m=>c.$emit("update:toggle-grid",c.group))})):a.createCommentVNode("",!0)]),_:1})]),a.createVNode(hi,{id:a.unref(r),class:"collapse pb-3"},{default:a.withCtx(()=>[c.group.children.length>0?(a.openBlock(!0),a.createElementBlock(a.Fragment,{key:0},a.renderList(c.group.children,m=>(a.openBlock(),a.createBlock(da,{key:m.name,dataset:m,onZoom:h[5]||(h[5]=u=>c.$emit("zoom",u)),onClipTo:h[6]||(h[6]=u=>c.$emit("clipTo",u)),"onUpdate:toggleGrid":h[7]||(h[7]=u=>c.$emit("update:toggle-grid",u)),"onUpdate:toggleMask":h[8]||(h[8]=u=>c.$emit("update:toggle-mask",u)),"onUpdate:visible":h[9]||(h[9]=(u,d)=>c.$emit("update:visible",u,d))},null,8,["dataset"]))),128)):(a.openBlock(),a.createElementBlock("li",QA,"No dataset in this group"))]),_:1},8,["id"])],64))}}),$A=g._export_sfc(KA,[["__scopeId","data-v-7592eab8"]]),tC={class:"d-flex"},eC={key:0,class:"icon spinner d-inline-block"},iC=["id"],sC=a.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(i){const t=g.useDatasetStore(),e=i,s=g.refAndWatch(e.dataset,"isPreloading"),n=g.refAndWatch(e.dataset,"isPreloaded"),o=g.refAndWatch(e.dataset,"visible");function r(){t.remove(e.dataset)}return(l,c)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[a.createElementVNode("div",tC,[a.createVNode(g.IconList,{class:"me-1 text-body-tertiary"},{default:a.withCtx(()=>[a.createVNode(g._sfc_main$1,{icon:a.unref(fn)[l.dataset.type]??"bi-file-earmark-x",title:a.unref(In)[l.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),a.createVNode(pe,{visible:a.unref(o),"onUpdate:visible":c[0]||(c[0]=h=>l.$emit("update:visible",l.dataset,h))},null,8,["visible"]),a.createVNode(g._sfc_main$2,{class:"label",disabled:!a.unref(o)||!a.unref(n),text:l.dataset.name,title:`Zoom to ${l.dataset.name}`,onClick:c[1]||(c[1]=h=>l.$emit("zoom",l.dataset))},null,8,["disabled","text","title"]),a.createVNode(g.IconList,{class:"ms-1"},{default:a.withCtx(()=>[a.unref(s)?(a.openBlock(),a.createElementBlock("div",eC,[a.createVNode(ua,{title:"Loading..."})])):a.createCommentVNode("",!0),a.unref(si).has(l.dataset.type)&&a.unref(n)?(a.openBlock(),a.createBlock(g.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${l.dataset.uuid}`,"aria-controls":`collapse-${l.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):a.createCommentVNode("",!0),a.unref(n)&&("canMaskBasemap"in l.dataset.config&&l.dataset.config.canMaskBasemap||"isMaskingBasemap"in l.dataset.config&&l.dataset.config.isMaskingBasemap)?(a.openBlock(),a.createBlock(g.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=h=>l.$emit("update:toggle-mask",l.dataset))})):a.createCommentVNode("",!0),a.unref(n)?(a.openBlock(),a.createBlock(g.IconListButton,{key:3,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=h=>l.$emit("clipTo",l.dataset))})):a.createCommentVNode("",!0),a.unref(n)?(a.openBlock(),a.createBlock(g.IconListButton,{key:4,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=h=>l.$emit("update:toggle-grid",l.dataset))})):a.createCommentVNode("",!0),a.createVNode(g.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:r})]),_:1})]),a.unref(si).has(l.dataset.type)?(a.openBlock(),a.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${l.dataset.uuid}`},[(a.openBlock(),a.createBlock(a.resolveDynamicComponent(a.unref(si).get(l.dataset.type)),{dataset:l.dataset},null,8,["dataset"]))],8,iC)):a.createCommentVNode("",!0)],64))}}),nC=g._export_sfc(sC,[["__scopeId","data-v-eaf54a36"]]),aC={class:"list-group-item"},da=a.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("li",aC,[a.unref(g.Datagroup).isGroup(t.dataset)?(a.openBlock(),a.createBlock($A,{key:0,group:t.dataset,onZoom:e[0]||(e[0]=s=>t.$emit("zoom",s)),onClipTo:e[1]||(e[1]=s=>t.$emit("clipTo",s)),"onUpdate:toggleGrid":e[2]||(e[2]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":e[3]||(e[3]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":e[4]||(e[4]=(s,n)=>t.$emit("update:visible",s,n))},null,8,["group"])):(a.openBlock(),a.createBlock(nC,{key:1,dataset:t.dataset,onZoom:e[5]||(e[5]=s=>t.$emit("zoom",s)),onClipTo:e[6]||(e[6]=s=>t.$emit("clipTo",s)),"onUpdate:toggleGrid":e[7]||(e[7]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":e[8]||(e[8]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":e[9]||(e[9]=(s,n)=>t.$emit("update:visible",s,n))},null,8,["dataset"]))]))}}),oC={class:"list-group-item d-flex"},rC=a.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("li",oC,[a.createVNode(g.IconList,{class:"me-1 text-body-tertiary"},{default:a.withCtx(()=>[a.createVNode(g._sfc_main$1,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),a.createVNode(pe,{visible:t.visible,"onUpdate:visible":e[0]||(e[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),a.createVNode(g._sfc_main$2,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:e[1]||(e[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),a.createVNode(ga,{class:a.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":e[2]||(e[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),a.createVNode(g.IconList,{class:"ms-1"},{default:a.withCtx(()=>[a.createVNode(g.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:e[3]||(e[3]=s=>t.$emit("update:move-up"))}),a.createVNode(g.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:e[4]||(e[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),lC=g._export_sfc(rC,[["__scopeId","data-v-8755c19f"]]),cC={class:"d-flex flex-column h-100"},hC={class:"flex-fill overflow-auto"},gC=a.defineComponent({__name:"DatasetPanel",setup(i){const t=g.useDatasetStore(),e=g.useCameraStore(),s=g.useAnalysisStore(),n=ea();function o(h){const m=t.getBoundingBox(h);m!=null&&m.isEmpty()||(s.setClippingBox(m),s.enableClippingBox(!0))}function r(h){for(const m of h)t.importFromFile(m)}function l(){const h=document.getElementById("dataset-import-url");t.importFromFile(h.value)}function c(h){const m=t.getBoundingBox(h);m!=null&&m.isEmpty()||e.lookTopDownAt(m)}return(h,m)=>(a.openBlock(),a.createElementBlock("div",cC,[a.createElementVNode("div",hC,[a.createVNode(Xi,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:a.withCtx(()=>[a.createVNode(hi,{id:"layers-list-group"},{default:a.withCtx(()=>[a.unref(n).getGraticuleLayer()!==void 0?(a.openBlock(),a.createBlock(dn,{key:0,type:"graticule",opacity:1,name:a.unref(n).getGraticuleLayer().name,isLoading:!1,visible:a.unref(n).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":m[0]||(m[0]=u=>a.unref(n).getGraticuleLayer().visible=u)},null,8,["name","visible"])):a.createCommentVNode("",!0),(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(n).getBasemaps(),u=>(a.openBlock(),a.createBlock(dn,{key:u.name,type:u.type,opacity:u.opacity,name:u.name,isLoading:u.isLoading,visible:u.visible,hasOpacitySlider:u.type==="color"||u.type==="elevation","onUpdate:visible":d=>a.unref(n).setBasemapVisibility(u,d),"onUpdate:opacity":d=>a.unref(n).setBasemapOpacity(u,d)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),a.unref(n).overlayCount>0?(a.openBlock(),a.createBlock(Xi,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:a.withCtx(()=>[a.createVNode(hi,null,{default:a.withCtx(()=>[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(n).getOverlays(),u=>(a.openBlock(),a.createBlock(lC,{key:u.name,opacity:u.opacity,name:u.name,visible:u.visible,"onUpdate:visible":d=>a.unref(n).setOverlayVisibility(u,d),"onUpdate:opacity":d=>a.unref(n).setOverlayOpacity(u,d),"onUpdate:moveUp":d=>a.unref(n).moveOverlayUp(u),"onUpdate:moveDown":d=>a.unref(n).moveOverlayDown(u)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):a.createCommentVNode("",!0),a.createVNode(Xi,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:a.withCtx(()=>[a.createVNode(hi,null,{default:a.withCtx(()=>[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(t).getTree(),u=>(a.openBlock(),a.createBlock(da,{key:u.name,dataset:u,onUpdated:m[1]||(m[1]=d=>h.$forceUpdate()),onZoom:m[2]||(m[2]=d=>c(d)),onClipTo:m[3]||(m[3]=d=>o(d)),"onUpdate:toggleGrid":m[4]||(m[4]=d=>a.unref(t).toggleGrid(d)),"onUpdate:toggleMask":m[5]||(m[5]=d=>a.unref(t).toggleMask(d)),"onUpdate:visible":m[6]||(m[6]=(d,C)=>a.unref(t).setVisible(d,C))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),a.createVNode(_i,null,{default:a.withCtx(()=>[a.createElementVNode("div",{class:"input-group mb-3"},[m[7]||(m[7]=a.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),a.createElementVNode("button",{onClick:l,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),a.createVNode(xi,{title:"Import file",text:"Import file",onImport:r})]),_:1})]))}}),uC={class:"list-group-item item"},dC={class:"d-flex"},mC=["title"],pC={class:"icons"},AC=a.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("li",uC,[a.createElementVNode("div",dC,[a.createVNode(pe,{visible:t.visible,"onUpdate:visible":e[0]||(e[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),a.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:e[1]||(e[1]=s=>t.$emit("zoom"))},a.toDisplayString(t.measure.title)+" ("+a.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,mC),a.createElementVNode("div",pC,[a.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:e[2]||(e[2]=s=>t.$emit("delete"))},[...e[3]||(e[3]=[a.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),CC=g._export_sfc(AC,[["__scopeId","data-v-bcecb7b2"]]),mn=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],fC={class:"d-flex flex-column h-100"},IC={class:"list-group list-group-flush flex-fill overflow-auto"},vC=a.defineComponent({__name:"MeasurementPanel",setup(i){const t=As(),e=g.useCameraStore(),s=a.ref(t.getMeasurementMode());a.watch(s,h=>{t.setMeasurementMode(h)});function n(h){const m=h.toGeoJSON();g.Download.downloadAsJson(m,`measure-${h.title}.json`)}function o(){const h=ra.toCollection(t.getMeasures());g.Download.downloadAsJson(h,"measures.json")}function r(h){e.lookTopDownAt(h.object)}function l(h){t.importMeasureFiles(h)}function c(h){s.value=h==null?void 0:h.value}return(h,m)=>(a.openBlock(),a.createElementBlock("div",fC,[m[3]||(m[3]=a.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[a.createElementVNode("i",{class:"bi bi-cone-striped"}),a.createTextVNode(" This feature is experimental ")],-1)),a.unref(t).count===0?(a.openBlock(),a.createBlock(Oi,{key:0,text:"No measurements"})):a.createCommentVNode("",!0),a.createElementVNode("ul",IC,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(t).getMeasures(),u=>(a.openBlock(),a.createBlock(CC,{key:u.title,measure:u,visible:u.visible,"onUpdate:visible":()=>{u.visible=!u.visible,h.$forceUpdate()},onDelete:d=>a.unref(t).remove(u),onDownload:d=>n(u),onZoom:d=>r(u)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),a.createVNode(_i,{id:"measures-fieldset"},{default:a.withCtx(()=>[a.createVNode(fs,{label:"Mode","description-position":"top",current:a.unref(mn)[0],items:a.unref(mn),"onUpdated:current":m[0]||(m[0]=u=>c(u)),class:"mb-2"},null,8,["current","items"]),a.unref(t).isUserMeasuring()?(a.openBlock(),a.createBlock(g._sfc_main,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:m[1]||(m[1]=u=>a.unref(t).end())})):(a.openBlock(),a.createBlock(g._sfc_main,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:m[2]||(m[2]=u=>a.unref(t).start())})),a.createVNode(g._sfc_main,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:o,icon:"bi-box-arrow-right",text:"Export measures"}),a.createVNode(xi,{title:"Import measures from GeoJSON",text:"Import measures",onImport:l})]),_:1})]))}}),yC={class:"panel",id:"panel-container"},bC={class:"title"},MC={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},wC={class:"content"},EC=a.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(i){const t=Cn(),e=`packages-v1.0.0-beta.1
|
|
16
|
-
`;return(s,n)=>{var o;return a.openBlock(),a.createElementBlock("div",yC,[a.createElementVNode("h5",bC,[a.createTextVNode(a.toDisplayString((o=a.unref(t).find(r=>r.key===s.selected))==null?void 0:o.title)+" ",1),s.selected==="about"?(a.openBlock(),a.createElementBlock("span",MC,"Version: "+a.toDisplayString(a.unref(e)),1)):a.createCommentVNode("",!0)]),a.createElementVNode("div",wC,[s.selected==="datasets"?(a.openBlock(),a.createBlock(gC,{key:0})):a.createCommentVNode("",!0),s.selected==="about"?(a.openBlock(),a.createBlock(bm,{key:1})):a.createCommentVNode("",!0),s.selected==="bookmarks"?(a.openBlock(),a.createBlock(xA,{key:2})):a.createCommentVNode("",!0),s.selected==="analysis"?(a.openBlock(),a.createBlock(Hp,{key:3})):a.createCommentVNode("",!0),s.selected==="annotations"?(a.openBlock(),a.createBlock(rA,{key:4})):a.createCommentVNode("",!0),s.selected==="measures"?(a.openBlock(),a.createBlock(vC,{key:5})):a.createCommentVNode("",!0)])])}}}),_C=g._export_sfc(EC,[["__scopeId","data-v-381fd038"]]),xC=["aria-valuenow"],OC={methods:{tick(){this.$forceUpdate()}}},kC=a.defineComponent({...OC,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":i.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[i.progress!=1?(a.openBlock(),a.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:a.normalizeStyle(`width: ${i.progress*100}%`)},null,4)):a.createCommentVNode("",!0)],8,xC))}}),SC={async geocode(i){const t=await g.Fetcher.fetchJson(`https://api-adresse.data.gouv.fr/search/?q=${i}`),e=t.features.map(s=>new ct("EPSG:4326",s.geometry.coordinates[0],s.geometry.coordinates[1],0));return await yn.alticode(e),e.forEach((s,n)=>{t.features[n].properties.crs="EPSG:2154",t.features[n].properties.z=s.altitude}),t.features.map(s=>s.properties)}},NC={class:"main"},PC={class:"input-group",id:"address-search"},LC=a.defineComponent({__name:"SearchOverlay",emits:["update:poi"],setup(i,{emit:t}){const e=a.ref(null),s=t;return a.onMounted(()=>{new Ka({data:{keys:["label"],src:o=>SC.geocode(o)},debounce:300,placeHolder:"Search places...",resultItem:{highlight:!0},resultsList:{noResults:!0},selector:"#search-place-autocomplete",threshold:3,searchEngine:(o,r)=>r}),e.value.addEventListener("selection",o=>{const r=o.detail.selection.value;s("update:poi",r)})}),(n,o)=>(a.openBlock(),a.createElementBlock("div",NC,[a.createElementVNode("div",PC,[a.createElementVNode("input",{ref_key:"inputField",ref:e,id:"search-place-autocomplete",class:"rounded-pill form-control",type:"search",dir:"ltr",placeholder:"Search places...",spellcheck:"false",autocorrect:"off",autocomplete:"off",autocapitalize:"off",maxlength:"2048",tabindex:"1"},null,512)])]))}}),TC=g._export_sfc(LC,[["__scopeId","data-v-46d63936"]]),BC={class:"d-flex column-gap-3"},DC=a.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(i){return(t,e)=>{var s,n,o;return a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("div",BC,[e[0]||(e[0]=a.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),a.createVNode(kt,{value:(s=i.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),a.createVNode(kt,{value:(n=i.y)==null?void 0:n.toFixed(0),prefix:"Y:"},null,8,["value"]),a.createVNode(kt,{value:(o=i.z)==null?void 0:o.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),VC=g._export_sfc(DC,[["__scopeId","data-v-3d05468b"]]),RC="data:image/png;base64,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",FC={class:"nav-item"},UC=["id","title"],zC=a.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(i){return(t,e)=>(a.openBlock(),a.createElementBlock("li",FC,[a.createElementVNode("a",{id:`toolbar-${i.tourkey}`,class:a.normalizeClass(["nav-link",i.active?"active":null]),href:"#",title:i.title},[a.createElementVNode("i",{class:a.normalizeClass(["bi",i.icon])},null,2)],10,UC)]))}}),GC={class:"toolbar"},jC={id:"menu",class:"nav nav-pills flex-column"},HC={class:"nav-item mt-2"},ZC={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},WC=["src"],qC=a.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(i){const t=Cn();return(e,s)=>(a.openBlock(),a.createElementBlock("div",GC,[a.createElementVNode("ul",jC,[a.createElementVNode("li",HC,[a.createElementVNode("a",ZC,[a.createElementVNode("img",{src:a.unref(RC),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,WC)])]),(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(t),n=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[n.enabled?(a.openBlock(),a.createBlock(zC,{active:e.active===n.key,key:n.key,tourkey:n.key,title:n.title,icon:n.icon,onClick:o=>e.$emit("selected",n.key)},null,8,["active","tourkey","title","icon","onClick"])):a.createCommentVNode("",!0)],64))),256))])]))}}),YC=g._export_sfc(qC,[["__scopeId","data-v-f84bccda"]]),XC=a.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(i){const t=a.ref("datasets"),e=a.ref(1),s=a.ref(new g.Vector3(0,0,0)),n=new g.Vector2,o=a.ref(null),r=a.ref(null),l=a.ref(!1),c=a.ref(!0);let h=!1;const m=de(),u=g.useCameraStore(),d=ps(),C=As(),p=a.shallowRef(null),A=a.shallowRef(null),v=a.ref();a.onMounted(()=>{const L=m.getMainView(),V=m.getMinimapView();L&&M(L),V&&y(V),m.$onAction(({after:z,args:Y,name:J})=>{z(()=>{switch(J){case"setMainView":Y[0]===null?I():M(Y[0]);break;case"setMinimapView":Y[0]===null?w():y(Y[0]);break}})}),v.value=setInterval(()=>{h&&(q(n),tt(n),h=!1)},50),setTimeout(()=>{c.value=!1},1e3),jt.dispatchEvent({type:"ready"})}),a.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),w(),I()});function I(){var L;A.value&&A.value.setMainInstance(null),(L=p.value)==null||L.dispose(),p.value=null}function w(){var L;(L=A.value)==null||L.dispose()}function M(L){const V=m.getMainView();if(V===null)throw new Error("mainview is null");p.value=new zu(V),p.value.addEventListener("update",()=>{p.value&&(e.value=p.value.mainInstance.progress,l.value=p.value.mainInstance.loading)}),i.getContext().view=new Wu({camera:p.value.camera}),A.value&&A.value.setMainInstance(L)}function y(L){A.value=new Zu(L),p.value&&A.value.setMainInstance(p.value.mainInstance)}function E(L){p.value&&(p.value.mainInstance.eventToCanvasCoords(L,n),h=!0)}function _(L){if(!p.value)return;const V=p.value.mainInstance,z=new ct(L.crs,L.x,L.y,L.z).as(V.referenceCrs),J=yi.fromCenterAndSize(z.crs,z.toVector2(),1e3,1e3).toBox3(L.z,L.z+200);p.value.camera.lookTopDownAt(J,!1)}function S(L,V){if(p.value==null||p.value.mainInstance==null||u.getNavigationMode()==="position-on-map"||u.isUserInteracting()||d.isUserDrawing()||C.isUserMeasuring())return;const z=p.value.picker.pick(p.value.mainInstance,L);if((z==null?void 0:z.point)!=null){const Y=z.point;s.value.x=Y.x,s.value.y=Y.y,s.value.z=Y.z}(z==null?void 0:z.feature)!=null?(r.value=z.feature.name,o.value=z.feature):(r.value=null,o.value=null),(z==null?void 0:z.pickResult)!=null?p.value.highlighter.highlightFromPick(z.pickResult):p.value.highlighter.clear()}function T(L){L===t.value?t.value=null:t.value=L}function q(L){if(p.value!=null){const V=p.value.picker.getMouseCoordinate(p.value.mainInstance,L);V&&(s.value.x=V.x,s.value.y=V.y,s.value.z=V.z)}}function tt(L){if(p.value){if(u.getNavigationMode()==="position-on-map"||d.isUserDrawing()||C.isUserMeasuring())return;const V=p.value.picker.hasFeature(p.value.mainInstance,L);p.value.mainInstance.domElement.style.cursor=V?"pointer":"auto"}}return(L,V)=>(a.openBlock(),a.createElementBlock(a.Fragment,null,[c.value?(a.openBlock(),a.createBlock(Fd,{key:0})):a.createCommentVNode("",!0),a.createVNode(Gd,{id:"main-view",onClick:V[0]||(V[0]=z=>S(z)),onMousemove:E,class:"mainview"}),o.value!=null?(a.openBlock(),a.createBlock(Pd,{key:1,onClose:V[1]||(V[1]=z=>o.value=null),attributes:o.value.attributes,name:o.value.name,parent:o.value.parent,point:o.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):a.createCommentVNode("",!0),a.createVNode(VC,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),a.createVNode(YC,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:V[2]||(V[2]=z=>T(z))},null,8,["active"]),a.createVNode(Hd,{class:"component minimap"}),t.value!=null?(a.openBlock(),a.createBlock(_C,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):a.createCommentVNode("",!0),a.createVNode(kC,{progress:e.value,class:"loading-indicator"},null,8,["progress"]),a.createVNode(TC,{id:"address-search",class:"search","onUpdate:poi":_}),a.createVNode(Qd,{class:"navigation-buttons"}),a.createVNode(Ku)],64))}}),JC=g._export_sfc(XC,[["__scopeId","data-v-f76ce0d4"]]);async function QC(i){let t;if(typeof i.configuration=="string"){console.info(`Loading remote configuration from: ${i.configuration}`);const e=await g.loadRemoteConfiguration(i.configuration);console.info("Remote configuration successfuly loaded."),t=e}else t=i.configuration;return t}async function KC(i){const t=await QC(i);await g.setConfiguration(t),console.info("Configuration loaded."),i.dynamicStyles&&g.setDynamicStyles(i.dynamicStyles),g.Download.setBaseUrl(i.baseUrl);const e=St.createPinia();ca(e).setLoadedModules(i.modules??[]);const n={baseURL:new URL(g.Download.getBaseUrl()),bookmarks:new eo(ha(e)),configuration:t,datasets:new lu,events:jt},o=n,r=[];if(i.modules)for(const c of i.modules){const h=Promise.resolve(c.initialize(o));r.push(h),console.info(`Module ${c.name} initialized.`)}await Promise.all(r);const l=a.createApp(JC,{getContext:()=>n});l.use(e),l.mount(i.container)}exports.Fetcher=g.Fetcher;exports.fillObject3DUserData=g.fillObject3DUserData;exports.Bookmark=Ht;exports.Projections=us;exports.createPieroApp=KC;
|
|
15
|
+
Cancel with right-click or Escape`;break}default:return n}i.push(new Q("Navigation",`Navigation mode set to <strong>${r}</strong>.<br>${l}`,"success"))});function a(){s.value!=="position-on-map"?s.value="position-on-map":s.value="orbit"}return(n,r)=>(o.openBlock(),o.createElementBlock("div",Ju,[o.createElementVNode("div",Xu,[r[2]||(r[2]=o.createElementVNode("i",{title:"Free navigation",class:"mx-2 bi bi-camera-reels-fill"},null,-1)),o.createVNode(A._sfc_main,{"model-value":s.value==="first-person","onUpdate:modelValue":r[0]||(r[0]=l=>s.value=l?"first-person":"orbit")},null,8,["model-value"]),r[3]||(r[3]=o.createElementVNode("i",{title:"First person view",class:"bi bi-universal-access"},null,-1)),r[4]||(r[4]=o.createElementVNode("div",{class:"vr mx-2"},null,-1)),o.createElementVNode("button",{class:o.normalizeClass(["btn btn-sm btn-outline-secondary",s.value==="position-on-map"?"active":null]),"aria-pressed":s.value==="position-on-map","data-bs-toggle":"button",title:"Position on map",onClick:a},[...r[1]||(r[1]=[o.createElementVNode("i",{class:"fg-position-man"},null,-1)])],10,Ku)])]))}}),$u=A._export_sfc(Qu,[["__scopeId","data-v-b890a4be"]]),td="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABXCAYAAAC+73jDAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gBw97HPKo1A06fo/gSEnUkzgftjkMaf9+3uk1IJxTLs2q10pA9uzSIYwm+sFM+eADsobiez6VFocEKUXUubU6I5/5OHBG7lDlYmRrFJZ7wXP428MoLtIxkUBsYeRhpDILHAZ9PouqW7s+YdnpDpsrDVqIDjv2aH7sc8PvbQX3qMiurARWtTmAjlWSdggHI4FGRsPQDczaYhJ8yL9/OpF+mhJaGNqk9l0AAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA5daVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM5NTZmNTIxLWU2YjAtNGRiNi1hMTk2LWM3ZjkwZjE1YzYwZiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMTVlNTExOS1lZDExLTRjY2YtOGEzYi1lN2QyZDJkZjBkNzUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NjYzMjQ3ZS1mMmVjLTQwZmQtYjE3OC03NzFhNjEwMTRmYWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjM3MjAyNDAyIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjE3KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzoxNyswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFiYjlmOWJiLWYyYzAtNGM4Yi1iYjgxLTU1ODE4NjY0NmQ2YiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMTlUMTQ6NDc6MjYrMDE6MDAiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTUwOTQ2YzYtODBkMy00MmI4LTgwOTUtZDcwYTE3MjNlNDM1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6MTcrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+wSyPngAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAywAAAMsABKGRa2wAAAAd0SU1FB+kJFAsbEeAnRtoAACAASURBVHja7Z15mBXVnfc/p6ru0vf2vi/0ytqsoiIgKiogxp1EMkFnjJqocTIzmSWTmUzezCRxljca500m+6hjYsYlibtRcV/iBiqICMjaNND0vnfftarO+0dVX7qhl6ru24hwf8/TDw/Q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",ed="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACTCAYAAABszOBRAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBBEsMgCLz7ij5BBBWeYxo70x/0+QUhnSTTnXGzsmRF0/y8X+lhKECJaucmrWUFCUkZKjg7xmLItHhBWnhwrSfBMIqWTMee4wc46vAL8M9QVU9B/AxjuxpCkc+3oDgIbaKiYj8miiAsbkAEDL9WbsL9fIVt5ivYVzJiWbNYmHu3PXV9vb3qOVjKRMCsjMjeg7ZqwqFClLWgjaANpruyt4I/yL93OpC+DARZTFnCKNgAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM0N2M4ZTNiLTg2ZjUtNDM3NC04Mzg2LTBjMGQwNGE1YTQxNSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNDVjNDdmMC1mODVmLTQ3NzAtYjVlNy1hMmU0ZDFmNWUwNzkiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMDVhMDI1NS05NzY5LTRhZGQtYjQ3Yy1iOGU4MjlkZDdlNDciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3NjU4NjgwODMzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjM4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyNzozOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMzU4MmQ4LWUxMTgtNGY1Yi1hNDdiLTlkYjM4ZjIxNTk2ZiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI3OjM4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Ptv0Ik4AAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfpCRQLGyZYmuPVAAAgAElEQVR42u2dd3gc5bX/P2dmd1Use9eybIMNXorp/VJCCZAAAUy4kOQmJEAS4ELosPSA6WB6y8iEml9CAjcJhB4IJgQIhBAw3XSDgTFuuMhaWX135vz+eF/Z69VIVrMsGZ3nmcfyzpaZd77v6UX4GpLrerEwpASIqzISWA9YFxgNjAFKgCqgvOijCiwGmoA6+/dXwDxgrgj1QGtpqbQ0NZ2ufI1J1vYbjMU8NwhIqjIW2BHYBtgE2BiYACR7uR5tAAotyHzgE+BD4G3gAxGWqmaWDQFrsN+UeFWqTAS+CewFbAlsCDir+GjOcqJllis1AYuARgugLwuAVAUMs3+vZ7lcOVABjCjgds3Ax8C7wD+B/4jwhWqmcQhYg4K89YA9gUOBnboApAXAXGAm8J59+F8CNUBWhHrVTFM3OWOFKikgBYwFJlpQbwuMAzayYP0E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",id="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcQwCPvPFDdCAnnAOOlLug1u/HMKrdqqlmIIRg4hrL/vFj4DlHLIpUnVWiOQNSt1JBINfecU88475kNL93o4BUKJEdmuUr3/qKfTwEJHVi5GMrsw3QXN7i8PI3+Ix0SEZHEjdSMmE5IbdPtWrCrt+oVpjXeInTBom0lHrUymPe+5YXtLwTtMtHLiCGYWG4DHKYE7EgWjgMaEhpE3cGHySbCQtz0dCH8eW1rDzUi1YAAAAYNpQ0NQSUNDIHByb2ZpbGUAAHicfZE7SMNAHMa/pkp9VBzMIMUhQ3Wyi4p0rFUoQoVQK7TqYB59QZOGJMXFUXAtOPhYrDq4OOvq4CoIgg8Qd8FJ0UVK/F9SaBHjwXE/vrvv4+47gGtWFc3qSQCabpuZVFLI5VeF0Cv6wWMQEcQlxTLmRDEN3/F1jwBb72Isy//cn2NILVgKEBCIE4ph2sQbxLObtsF4n5hXypJKfE48adIFiR+ZLnv8xrjkMscyeTObmSfmiYVSF8tdrJRNjXiGOKpqOuVzOY9VxluMtWpdad+TvTBc0FeWmU5zDCksYgkiBMioo4IqbMRo1UmxkKH9pI8/4vpFcsnkqkAhxwJq0CC5frA/+N2tVZye8pLCSaD3xXE+xoHQLtBqOM73seO0ToDgM3Cld/y1JhD/JL3R0aJHwPA2cHHd0eQ94HIHGH0yJFNypSBNrlgE3s/om/LAyC0wsOb11t7H6QOQpa7SN8DBITBRoux1n3f3dff275l2fz/Q5HLMN5rr0QAADXppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6NGVjMGMxNzUtNmE3NS00OGJlLTllZGYtOGNlNDQyM2ZmMmU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU1YmZlYWVjLWNhZDAtNGZlNi1iMGJkLTM2ODEyMWNmYWFmMSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjliODczYjYyLTY4ZDUtNDU3ZS1iNzVkLWFmN2Y3MGU5YTkzMyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE3NTgzNjc2NzMwNDY0MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjU6MDk6MjBUMTM6Mjc6NTIrMDI6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1OjA5OjIwVDEzOjI3OjUyKzAyOjAwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGJhNTc0MjgtZDMyOS00MzUzLWI2YjMtYzk1YjRmYzg1MzQ0IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKE1hYyBPUykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDktMjBUMTM6Mjc6NTMrMDI6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+fJLSCgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJFAsbNdwkogsAACAASURBVHja7J13eBRV98c/syVt03shvRA6KbQkdGkCERAQEMuLxgoWFAs2FLF3BQuCgoqIiPTeew+EXkIICek92ZRt8/sj+QHJbpJNsiHhfTnPw6PMDHfn3rnfe/o5Anep2ch1/hQrwA/wBtwAZ8AesK36r7TqDzX+Xwdoqv5fW/X3AqAYyKv6kwmkAElZcQuVd1e7eUi4uwQmAYIP0B4IAYKr/j8UcL9ljZtjrcWqP1nAeeAMkAhcBM5kxS28evfr3AXI7QaDAxAGhAM9gRjAqer0b03rqaniOnuBw8BR4FhW3MK8u1/xLkBMLSZFAP2BYUBXwPwOXDsRUAGngLXAHuBIVtzC4rtf+S5AGgoKD6AvcD8wELADJP9l0xSBImAX8DewMytuYerdr38XILWBwhUYCjwERAFWphpbi0iFKFIO+Mkt8JRb4SyzwlIi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",sd="data:image/png;base64,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",ad="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAtCAYAAADr0SSvAAAAyHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBRDsMgCP3nFDuCgFo4jm1tshvs+EOhS9vsJT6QR54I9M/7gNcAYYZcFqlaazJkzUrNEkmONhlTnjyxnRre60B7CGQltsh+lRr9Zx1/Bh6aZeViJFsI613QHP7yMIqHeExElsQgoGHE5AKGQfNvpaqyXL+w9nSH+IFBx0Y6amV17XnPi21vL/YOE3VGTsbM4gPwOAW4WaLGVrBGtIaRizHOVvSF/NvTCfgCF5hawfSmwyAAAAGDaUNDUElDQyBwcm9maWxlAAB4nH2RO0jDQBzGv6ZKfVQczCDFIUN1souKdKxVKEKFUCu06mAefUGThiTFxVFwLTj4WKw6uDjr6uAqCIIPEHfBSdFFSvxfUmgR48FxP7677+PuO4BrVhXN6kkAmm6bmVRSyOVXhdAr+sFjEBHEJcUy5kQxDd/xdY8AW+9iLMv/3J9jSC1YChAQiBOKYdrEG8Szm7bBeJ+YV8qSSnxOPGnSBYkfmS57/Ma45DLHMnkzm5kn5omFUhfLXayUTY14hjiqajrlczmPVcZbjLVqXWnfk70wXNBXlplOcwwpLGIJIgTIqKOCKmzEaNVJsZCh/aSPP+L6RXLJ5KpAIccCatAguX6wP/jdrVWcnvKSwkmg98VxPsaB0C7QajjO97HjtE6A4DNwpXf8tSYQ/yS90dGiR8DwNnBx3dHkPeByBxh9MiRTcqUgTa5YBN7P6JvywMgtMLDm9dbex+kDkKWu0jfAwSEwUaLsdZ9393X39u+Zdn8/0ORyzDea69EAAA16aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM4NjdiYjcyLWU1NWEtNGZkZS1hYTlmLTdiYzZhNTJhNGIzZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NWE1ZGEyYy01YjhmLTQ1ZTQtOGJkYy01N2Q0ZmJkZGQ1NWUiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplN2YyOWQyZS1kMDg1LTQ4ZWYtODYyZS0wZDM1NTRjOGVlYWQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJNYWMgT1MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzU4MzY3Njk4OTQxNjMxIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1OjA5OjIwVDEzOjI4OjE4KzAyOjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNTowOToyMFQxMzoyODoxOCswMjowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlNDAxNmZmLWZkZDItNDA4MS05YjU2LWY2ODYzYjk1Y2E1ZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChNYWMgT1MpIgogICAgICBzdEV2dDp3aGVuPSIyMDI1LTA5LTIwVDEzOjI4OjE4KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pl6bkfoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfpCRQLHBI2b4GnAAAU8UlEQVR42u2deXwV1dnHv/feDCQkyCpQFtkXZS0KAi8UpSqgqCMuMB3FQa0bBV+LS1GLSNVirdoWS221dWy9jlIsA1YQRBZFVFbZ14Y1IEsgELKQIbnvH+eZZnLfBIkmrPf5fPKZ3Jk55zxz5jznWc7vOROKxWJfTJ21uu1T0dUa5zHdfFmDwvGj+uUBLUKhUF78dU23uwPTyij+IvB7YANwHOjkuZZ3JjyXptvNgU+BecBdnmsdJ0EnTUlA3VgsVmtztnded0Th8UKAGkCorLEGNAAOyoALUoYc1wOFQOwMerQbgFXAiIRwfDcBSVD5aKPnWjeVMlOHgL+KcBRpul0DuBpIB/KB64Fc4F3PtfZLGQ0YBHQQzfM1MMtzrSJNtxsDPYCVwIXAlcAe4D3PtXICbfYA+gobn3qutSjAUwPAA74Aemm6/bHnWkWl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";var nd={"@loaders.gl/core":{description:"The core API for working with loaders.gl loaders and writers",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/csv":{description:"Framework-independent loader for CSV and DSV table formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/geopackage":{description:"GeoPackage data loaders",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/las":{description:"Framework-independent loader for the LAS and LAZ formats",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@loaders.gl/shapefile":{description:"Loader for the Shapefile Format",homepage:"https://github.com/visgl/loaders.gl",license:"MIT"},"@popperjs/core":{description:"Tooltip and Popover Positioning Engine",homepage:"https://github.com/popperjs/popper-core",license:"MIT"},"@tarekraafat/autocomplete.js":{description:"Simple autocomplete pure vanilla Javascript library.",homepage:"https://tarekraafat.github.io/autoComplete.js",license:"Apache-2.0"},bootstrap:{description:"The most popular front-end framework for developing responsive, mobile first projects on the web.",homepage:"https://getbootstrap.com/",license:"MIT"},"bootstrap-icons":{description:"Official open source SVG icon library for Bootstrap",homepage:"https://icons.getbootstrap.com/",license:"MIT"},"camera-controls":{homepage:"https://github.com/yomotsu/camera-controls",license:"MIT"},"chart.js":{description:"Simple HTML5 charts using the canvas element.",homepage:"https://www.chartjs.org",license:"MIT"},"chroma-js":{description:"JavaScript library for color conversions",homepage:"https://github.com/gka/chroma.js",license:"(BSD-3-Clause AND Apache-2.0)"},"d3-dsv":{description:"A parser and formatter for delimiter-separated values, such as CSV and TSV",homepage:"https://d3js.org/d3-dsv/",license:"BSD-3-Clause"},"font-gis":{description:"Icon font set for use with GIS and spatial analysis tools",homepage:"https://github.com/Viglino/font-gis",license:"Apache-2.0"},"openbim-components":{homepage:"https://ifcjs.github.io/components/",license:"MIT"},pinia:{description:"Intuitive, type safe and flexible Store for Vue",homepage:"https://github.com/vuejs/pinia#readme",license:"MIT"},proj4:{description:"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.",homepage:"https://proj4js.github.io/proj4js/",license:"MIT"},"regenerator-runtime":{description:"Runtime for Regenerator-compiled generator and async functions.",homepage:"https://github.com/facebook/regenerator/tree/main/packages/runtime",license:"MIT"},"shepherd.js":{description:"Guide your users through a tour of your app.",homepage:"https://shepherdjs.dev",license:"MIT"},"web-ifc":{description:"ifc loading on the web",homepage:"https://ifcjs.github.io/web-ifc/docs/"}};const od={class:"list-group my-3"},rd={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},ld={class:"d-flex w-100 justify-content-between"},hd=["src"],cd={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},gd={class:"d-flex w-100 justify-content-between"},ud=["src"],dd={class:"list-group-item"},Ad={class:"d-flex w-100 justify-content-between"},md=["src"],Cd={class:"list-group-item"},fd={class:"d-flex w-100 justify-content-between"},Id={class:"text-end"},pd=["src"],vd=["src"],yd=["href"],bd={key:0,class:"blockquote fw-light"},Md=o.defineComponent({__name:"AboutPanel",setup(e){const t=nd,i=A.useModuleStore().getLoadedModules();return(s,a)=>(o.openBlock(),o.createElementBlock("div",null,[a[4]||(a[4]=o.createStaticVNode('<p data-v-4397f0a3><a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>Piero</a> is a fully-configurable open-source web application for 3D visualization. It is powered by <a href="https://giro3d.org" target="_blank" data-v-4397f0a3>Giro3D</a>, a versatile framework to visualize geospatial data in the browser. </p><h5 class="mt-3" data-v-4397f0a3>Going further</h5><p data-v-4397f0a3> If you wish to run your own instance of Piero, or if you wish to contribute to this application, head up to <a href="https://gitlab.com/giro3d/piero" target="_blank" data-v-4397f0a3>our GitLab project</a> for more info. </p><h5 data-v-4397f0a3>Contributors</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/CONTRIBUTORS.md" data-v-4397f0a3>Brought to you by the Giro3D contributors.</a></p><h5 data-v-4397f0a3>Sponsors</h5>',6)),o.createElementVNode("div",od,[o.createElementVNode("a",rd,[o.createElementVNode("div",ld,[a[0]||(a[0]=o.createElementVNode("span",null,"Oslandia",-1)),o.createElementVNode("img",{src:o.unref(sd),class:"logo",alt:"Oslandia"},null,8,hd)])]),o.createElementVNode("a",cd,[o.createElementVNode("div",gd,[a[1]||(a[1]=o.createElementVNode("span",null,"BPI France",-1)),o.createElementVNode("img",{src:o.unref(td),class:"logo",alt:"BPI France"},null,8,ud)])]),o.createElementVNode("span",dd,[o.createElementVNode("div",Ad,[a[2]||(a[2]=o.createElementVNode("span",null,"Funded by the French government as part of France 2030",-1)),o.createElementVNode("img",{src:o.unref(ed),class:"logo",alt:"France 2030"},null,8,md)])]),o.createElementVNode("span",Cd,[o.createElementVNode("div",fd,[a[3]||(a[3]=o.createElementVNode("span",null,"Funded by the European Union - Next Generation EU as part of the France Relance plan",-1)),o.createElementVNode("div",Id,[o.createElementVNode("img",{src:o.unref(id),class:"logo",alt:"France Relance"},null,8,pd),o.createElementVNode("img",{src:o.unref(ad),class:"logo",alt:"European Union - Next Generation EU"},null,8,vd)])])])]),a[5]||(a[5]=o.createStaticVNode('<p data-v-4397f0a3> If you wish to sponsor Giro3D and Piero, you can contact us at <a href="mailto:infos+3d@oslandia.com" data-v-4397f0a3>infos+3d@oslandia.com</a>. </p><h5 data-v-4397f0a3>License</h5><p data-v-4397f0a3><a target="_blank" href="https://gitlab.com/giro3d/piero/-/blob/main/LICENSE" data-v-4397f0a3>MIT License</a></p><h5 data-v-4397f0a3>Credits</h5><p data-v-4397f0a3>Data and services used from:</p><ul data-v-4397f0a3><li data-v-4397f0a3><a target="_blank" href="https://ign.fr/" data-v-4397f0a3>IGN</a> (Imagery, Elevation model, LIDAR data, Elevation API) </li><li data-v-4397f0a3><a target="_blank" href="https://www.grandlyon.com/" data-v-4397f0a3>Métropole Grand Lyon</a> (Imagery, Elevation model, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://www.openstreetmap.org" data-v-4397f0a3>OpenStreetMap</a> (Imagery) </li><li data-v-4397f0a3><a target="_blank" href="https://adresse.data.gouv.fr/" data-v-4397f0a3>adresse.data.gouv.fr</a> (Geocoding API) </li><li data-v-4397f0a3><a target="_blank" href="https://cadastre.data.gouv.fr" data-v-4397f0a3>Données cadastrales ouvertes</a> (Cadastre) </li><li data-v-4397f0a3><a target="_blank" href="https://oslandia.com" data-v-4397f0a3>Oslandia</a> (CityJSON reconstructions, overlay layers) </li><li data-v-4397f0a3><a target="_blank" href="https://bimdata.io/" data-v-4397f0a3>BIMData</a> (IFC model)</li></ul><p data-v-4397f0a3>Third-parties:</p>',7)),o.createElementVNode("ul",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(Object.entries(o.unref(t)),([n,r])=>(o.openBlock(),o.createElementBlock("li",{key:n},[o.createElementVNode("a",{target:"_blank",href:r.homepage},o.toDisplayString(n)+" ("+o.toDisplayString(r.license)+")",9,yd),r.description?(o.openBlock(),o.createElementBlock("blockquote",bd,o.toDisplayString(r.description),1)):o.createCommentVNode("",!0)]))),128))]),a[6]||(a[6]=o.createElementVNode("p",null,"Loaded modules:",-1)),o.createElementVNode("ul",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(i),n=>(o.openBlock(),o.createElementBlock("li",{key:n.name},[o.createElementVNode("code",null,o.toDisplayString(n.id),1)]))),128))]),a[7]||(a[7]=o.createElementVNode("hr",null,null,-1))]))}}),wd=A._export_sfc(Md,[["__scopeId","data-v-4397f0a3"]]),X=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Ed(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(X[e&255]+X[e>>8&255]+X[e>>16&255]+X[e>>24&255]+"-"+X[t&255]+X[t>>8&255]+"-"+X[t>>16&15|64]+X[t>>24&255]+"-"+X[i&63|128]+X[i>>8&255]+"-"+X[i>>16&255]+X[i>>24&255]+X[s&255]+X[s>>8&255]+X[s>>16&255]+X[s>>24&255]).toLowerCase()}const Oa=kt.defineStore("analysis",()=>{const e=o.ref([]);function t(s){const a={collapsible:!0,component:o.shallowRef(s.component),icon:s.icon,id:Ed(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),_d=["id"],Od={class:"accordion-header"},xd=["data-bs-target","aria-controls"],kd=["id"],Sd={class:"accordion-body"},Nd=o.defineComponent({__name:"ToolWrapper",props:{collapsible:{type:Boolean},icon:{},id:{},title:{}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:"accordion-item",id:t.id},[o.createElementVNode("h2",Od,[o.createElementVNode("button",{class:"accordion-button",type:"button","data-bs-toggle":"collapse","data-bs-target":`#${t.id}-collapse`,"aria-expanded":"false","aria-controls":`${t.id}-collapse`},[t.icon?(o.openBlock(),o.createElementBlock("i",{key:0,class:o.normalizeClass(["bi icon",t.icon])},null,2)):o.createCommentVNode("",!0),o.createTextVNode(" "+o.toDisplayString(t.title),1)],8,xd)]),o.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[o.createElementVNode("div",Sd,[o.renderSlot(t.$slots,"default",{},void 0,!0)])],8,kd)],8,_d))}}),Ld=A._export_sfc(Nd,[["__scopeId","data-v-acce0d55"]]),Pd={class:"accordion",id:"analysis-accordion"},Td={key:0,class:"warning"},Dd=o.defineComponent({__name:"AnalysisPanel",setup(e){const t=Oa();return(i,s)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",Pd,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTools(),a=>(o.openBlock(),o.createBlock(Ld,{id:a.id,key:a.id,title:a.name,icon:a.icon,collapsible:a.collapsible},{default:o.withCtx(()=>[(o.openBlock(),o.createBlock(o.resolveDynamicComponent(a.component)))]),_:2},1032,["id","title","icon","collapsible"]))),128))]),o.unref(t).getTools().length===0?(o.openBlock(),o.createElementBlock("div",Td,"No analysis tool registered.")):o.createCommentVNode("",!0)],64))}}),Bd=A._export_sfc(Dd,[["__scopeId","data-v-48d1d631"]]),Vd={},Rd={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Fd(e,t){return o.openBlock(),o.createElementBlock("fieldset",Rd,[t[0]||(t[0]=o.createElementVNode("hr",null,null,-1)),o.renderSlot(e.$slots,"default")])}const si=A._export_sfc(Vd,[["render",Fd]]),ai=o.defineComponent({__name:"ImportButton",props:{icon:{},text:{},title:{}},emits:["import"],setup(e,{emit:t}){const i=t,s=o.ref(!1),a=o.ref(null);function n(g){if(g){const u=[];for(const f of g)u.push(f);i("import",u)}}function r(g){const u=g.target.files;n(u)}function l(g){s.value=!0,g.preventDefault()}function h(g){s.value=!1,g.preventDefault()}function c(g){g.preventDefault(),g.dataTransfer&&(g.dataTransfer.dropEffect="copy")}function d(g){var f;s.value=!1;const u=(f=g.dataTransfer)==null?void 0:f.files;n(u),g.preventDefault()}return(g,u)=>(o.openBlock(),o.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:l,onDragleave:h,onDrop:d},[o.createVNode(A._sfc_main$1,{title:g.title,text:g.text,icon:g.icon??"bi-box-arrow-left",onClick:u[0]||(u[0]=f=>a.value.click()),class:o.normalizeClass(["w-100",s.value?"btn-primary":"btn-outline-secondary"])},null,8,["title","text","icon","class"]),o.createElementVNode("input",{ref_key:"hiddenInput",ref:a,class:"btn btn-outline-secondary d-none",type:"file",onInput:r,multiple:"true"},null,544)],32))}}),Ud={class:"border p-2"},zd={class:"float-none w-auto form-text mb-0 px-2"},jd={key:0,class:"form-text mt-0 mx-2"},Gd=["id","aria-label"],Hd=["value"],Zd={key:1,class:"form-text mt-0 mx-2"},xa=o.defineComponent({__name:"DropdownView",props:{current:{},descriptionPosition:{},items:{},label:{}},emits:["updated:current"],setup(e,{emit:t}){const i=e,s=t,a=o.ref(i.current);function n(l){const h=i.items[l];a.value=h,s("updated:current",h)}const r=A.MathUtils.generateUUID();return(l,h)=>(o.openBlock(),o.createElementBlock("fieldset",Ud,[o.createElementVNode("legend",zd,o.toDisplayString(l.label),1),l.descriptionPosition==="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",jd,o.toDisplayString(a.value.description),1)):o.createCommentVNode("",!0),o.createElementVNode("select",{id:o.unref(r),class:"form-select","aria-label":l.label,onInput:h[0]||(h[0]=c=>n(c.target.selectedIndex))},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(l.items,(c,d)=>(o.openBlock(),o.createElementBlock("option",{key:d,value:d},o.toDisplayString(c.name),9,Hd))),128))],40,Gd),l.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",Zd,o.toDisplayString(a.value.description),1)):o.createCommentVNode("",!0)]))}}),Wd=o.defineComponent({__name:"VisibilityControl",props:{visible:{type:Boolean}},emits:["update:visible"],setup(e){return(t,i)=>(o.openBlock(),o.createBlock(A._sfc_main,{"model-value":t.visible,"onUpdate:modelValue":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["model-value"]))}}),ne=A._export_sfc(Wd,[["__scopeId","data-v-7c3ff3bf"]]),qd=o.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",null,o.toDisplayString(e.text),1))}}),ni=A._export_sfc(qd,[["__scopeId","data-v-a385fce5"]]),Yd={class:"list-group-item item"},Jd={class:"d-flex"},Xd=["title"],Kd={class:"icons"},Qd=["data-bs-target"],$d=["id"],tA={key:1,class:"table table-striped table-sm table-responsive-sm"},eA=o.defineComponent({__name:"AnnotationItem",props:{annotation:{},visible:{type:Boolean}},emits:["edit","stop-edit","delete","download","update:visible","zoom"],setup(e){const t=e,i=o.ref(t.annotation.isEditing),s=()=>{i.value=t.annotation.isEditing};return o.onMounted(()=>{t.annotation.addEventListener("isEditing",s)}),o.onUnmounted(()=>{t.annotation.removeEventListener("isEditing",s)}),(a,n)=>(o.openBlock(),o.createElementBlock("li",Yd,[o.createElementVNode("div",Jd,[o.createVNode(ne,{visible:a.visible,"onUpdate:visible":n[0]||(n[0]=r=>a.$emit("update:visible",r))},null,8,["visible"]),o.createElementVNode("a",{class:"title",title:a.annotation.title,href:"#",onClick:n[1]||(n[1]=r=>a.$emit("zoom"))},o.toDisplayString(a.annotation.title),9,Xd),o.createElementVNode("div",Kd,[o.createElementVNode("a",{href:"#",class:"icon",title:"Attribute table","data-bs-toggle":"collapse","data-bs-target":`#collapse-${a.annotation.uuid}`,"aria-expanded":"false","aria-controls":"`#collapse-${annotation.uuid}`"},[...n[5]||(n[5]=[o.createElementVNode("i",{class:"bi bi-card-list"},null,-1)])],8,Qd),o.createElementVNode("a",{href:"#",class:"icon",title:"Edit geometry (right-click to exit edition, or press Escape to cancel modifications)",onClick:n[2]||(n[2]=r=>i.value?a.$emit("stop-edit"):a.$emit("edit"))},[o.createElementVNode("i",{class:o.normalizeClass(`bi bi-pencil ${i.value?"text-primary":""}`)},null,2)]),o.createElementVNode("a",{href:"#",class:"icon",title:"Download...",onClick:n[3]||(n[3]=r=>a.$emit("download"))},[...n[6]||(n[6]=[o.createElementVNode("i",{class:"bi bi-download"},null,-1)])]),o.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:n[4]||(n[4]=r=>a.$emit("delete"))},[...n[7]||(n[7]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])]),o.createElementVNode("div",{class:"collapse m-2",id:`collapse-${a.annotation.uuid}`},[Object.entries(a.annotation.properties).length===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No properties"})):(o.openBlock(),o.createElementBlock("table",tA,[n[8]||(n[8]=o.createElementVNode("thead",null,[o.createElementVNode("tr",null,[o.createElementVNode("th",null,"Key"),o.createElementVNode("th",null,"Value")])],-1)),o.createElementVNode("tbody",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(Object.entries(a.annotation.properties),([r,l])=>(o.openBlock(),o.createBlock(_a,{key:r,"attr-name":r,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])]))],8,$d)]))}}),iA=A._export_sfc(eA,[["__scopeId","data-v-364a81a5"]]),Ns=[{name:"Default",value:"normal"},{description:"Will only pick points from the map and not to any 3D object",name:"Map only",value:"mapOnly"},{description:"Will only pick points from 3D objects, and not from the map",name:"3D objects only",value:"objectsOnly"}],sA={class:"d-flex flex-column h-100"},aA={class:"list-group list-group-flush flex-fill overflow-auto"},nA=o.defineComponent({__name:"AnnotationPanel",setup(e){const t=Zi(),i=A.useCameraStore(),s=o.ref(t.getAnnotationMode());o.watch(s,c=>{t.setAnnotationMode(c)});function a(c){const d=c.toGeoJSON();A.Download.downloadAsJson(d,`annotation-${c.title}.json`)}function n(){const c=ya.toCollection(t.getAnnotations());A.Download.downloadAsJson(c,"annotations.json")}function r(c){i.lookTopDownAt(c.object)}function l(c){t.importAnnotationsFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,d)=>(o.openBlock(),o.createElementBlock("div",sA,[o.unref(t).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No annotations"})):o.createCommentVNode("",!0),o.createElementVNode("ul",aA,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getAnnotations(),g=>(o.openBlock(),o.createBlock(iA,{key:g.title,annotation:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onEdit:u=>o.unref(t).edit(g),onStopEdit:d[0]||(d[0]=u=>o.unref(t).stopEdition()),onDelete:u=>o.unref(t).remove(g),onDownload:u=>a(g),onZoom:u=>r(g)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(si,{disabled:o.unref(t).isUserDrawing(),id:"annotations-fieldset"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main,{"model-value":o.unref(t).showLabels(),"onUpdate:modelValue":d[1]||(d[1]=g=>o.unref(t).setShowLabels(g)),title:"show labels"},{default:o.withCtx(()=>[...d[6]||(d[6]=[o.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),o.createVNode(xa,{label:"Picking mode","description-position":"top",current:o.unref(Ns)[0],items:o.unref(Ns),"onUpdated:current":d[2]||(d[2]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),o.createVNode(A._sfc_main$1,{title:"Add point annotation",text:"New points",icon:"bi-pin",class:"btn-primary",onClick:d[3]||(d[3]=g=>o.unref(t).createPoint())}),o.createVNode(A._sfc_main$1,{title:"Add line annotation",text:"New line",icon:"bi-bezier2",class:"btn-primary",onClick:d[4]||(d[4]=g=>o.unref(t).createLine())}),o.createVNode(A._sfc_main$1,{title:"Add polygon annotation",text:"New polygon",icon:"bi-heptagon",class:"btn-primary",onClick:d[5]||(d[5]=g=>o.unref(t).createPolygon())}),o.createVNode(A._sfc_main$1,{title:"Export annotations to GeoJSON",text:"Export annotations",icon:"bi-box-arrow-right",class:"btn-outline-secondary",onClick:n}),o.createVNode(ai,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:l})]),_:1},8,["disabled"])]))}}),oA={key:0},rA={class:"modal-dialog"},lA={class:"modal-content"},hA={class:"modal-header"},cA={class:"modal-title fs-5",id:"exampleModalLabel"},gA={class:"modal-body"},uA={class:"modal-footer"},dA=o.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(o.openBlock(),o.createElementBlock("div",oA,[i[2]||(i[2]=o.createElementVNode("div",{class:"background"},null,-1)),o.createElementVNode("div",{class:o.normalizeClass(["modal","fade","d-block",e.show?"show":null]),id:"exampleModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[o.createElementVNode("div",rA,[o.createElementVNode("div",lA,[o.createElementVNode("div",hA,[o.createElementVNode("h1",cA,o.toDisplayString(e.title),1),o.createElementVNode("button",{type:"button",class:"btn-close",onClick:i[0]||(i[0]=s=>t.$emit("close")),"data-bs-dismiss":"modal","aria-label":"Close"})]),o.createElementVNode("div",gA,[o.renderSlot(t.$slots,"default",{},void 0,!0)]),o.createElementVNode("div",uA,[o.createElementVNode("button",{type:"button",onClick:i[1]||(i[1]=s=>t.$emit("close")),class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ")])])])],2)])):o.createCommentVNode("",!0)}}),AA=A._export_sfc(dA,[["__scopeId","data-v-1f7f2e97"]]),mA={class:"list-group-item item d-flex d-flex-end"},CA=o.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",mA,[o.createElementVNode("a",{class:"bookmark",href:"#",onClick:i[0]||(i[0]=s=>t.$emit("goto"))},o.toDisplayString(e.name),1),o.createElementVNode("a",{href:"#",class:"icon",title:"Share this bookmark",onClick:i[1]||(i[1]=s=>t.$emit("share"))},[...i[3]||(i[3]=[o.createElementVNode("i",{class:"bi bi-share"},null,-1)])]),o.createElementVNode("a",{href:"#",class:"icon",title:"Delete this bookmark",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[4]||(i[4]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])]))}}),fA=A._export_sfc(CA,[["__scopeId","data-v-682112f6"]]),IA={class:"input-group mb-3"},pA={class:"form-control text-truncate"},vA={class:"input-group-text",id:"basic-addon2"},yA=o.defineComponent({__name:"ShareBookmarkModal",props:{url:{}},setup(e){function t(i){navigator.clipboard.writeText(i)}return(i,s)=>(o.openBlock(),o.createElementBlock("div",null,[s[2]||(s[2]=o.createElementVNode("p",null,"Use this link to share your bookmark",-1)),o.createElementVNode("div",IA,[o.createElementVNode("span",pA,o.toDisplayString(i.url),1),o.createElementVNode("span",vA,[o.createElementVNode("a",{title:"Copy to clipboard",href:"#",class:"text-secondary",onClick:s[0]||(s[0]=()=>t(i.url))},[...s[1]||(s[1]=[o.createElementVNode("i",{class:"bi bi-clipboard"},null,-1)])])])])]))}});class Dt extends A.EventDispatcher{constructor(i,s){super();p(this,"camera");p(this,"name");this.name=i,this.camera=s}static new(i,s){const n=new URL(s).searchParams.get("view");if(n===null)throw new Error("Could not deserialize bookmark");const r=JSON.parse(n),l=new A.Vector3(r.camera[0],r.camera[1],r.camera[2]),h=new A.Vector3(r.target[0],r.target[1],r.target[2]),c=new A.Vector3(r.focalOffset[0],r.focalOffset[1],r.focalOffset[2]),d=new ii(l,h,c);return new Dt(i,d)}delete(){this.dispatchEvent({type:"delete"})}getUrl(){const i=A.Download.getBaseUrl()+"?",s=this.camera,a={camera:[s.camera.x,s.camera.y,s.camera.z],focalOffset:[s.focalOffset.x,s.focalOffset.y,s.focalOffset.z],target:[s.target.x,s.target.y,s.target.z]},n=new URL(i),r=n.searchParams;return r.set("tour","none"),r.set("view",JSON.stringify(a)),n}goTo(){this.dispatchEvent({type:"goto"})}}function bA(){const e=A.getConfig(),t=[];for(const i of e.bookmarks){const s=i.position,a=i.target,n=i.focalOffset,r=i.title,l=new ii(new A.Vector3(s.x,s.y,s.z),new A.Vector3(a.x,a.y,a.z),new A.Vector3(n.x,n.y,n.z));t.push(new Dt(r,l))}return t}const ka=kt.defineStore("bookmarks",()=>{const e=o.ref(new Set(bA())),t=o.computed(()=>e.value.size);function i(r){e.value.add(r),Tt.dispatchEvent({type:"bookmark-added",value:r})}function s(r){e.value.delete(r),Tt.dispatchEvent({type:"bookmark-removed",value:r})}function a(){e.value.clear()}function n(){return[...e.value]}return{add:i,clear:a,count:t,getBookmarks:n,remove:s}}),MA={class:"d-flex flex-column h-100"},wA={class:"list-group list-group-flush flex-fill overflow-auto"},EA=o.defineComponent({__name:"BookmarkPanel",setup(e){const t=o.ref(!1),i=o.ref(null),s=o.ref(null),a=Rt(),n=ka(),r=A.useCameraStore();function l(){const m=window.prompt("Bookmark name","New bookmark");if(m!=null){const C=new Dt(m,r.getCameraPosition());n.add(C)}}function h(){const m=[];for(const C of n.getBookmarks())m.push({title:C.name,url:C.getUrl().toString()});A.Download.downloadAsJson(m,"bookmarks.json")}function c(m){r.setCameraPosition(m.camera)}function d(m){for(const C of m)g(C)}async function g(m){const C=await m.text(),v=JSON.parse(C),I=new Set(n.getBookmarks().map(_=>_.name));let b=0,M=0;v.forEach(_=>{I.has(_.title)?M++:(n.add(Dt.new(_.title,_.url)),b++)}),a.push(new Q("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function u(m){i.value=m.getUrl().toString(),s.value="Share bookmark",t.value=!0}function f(){const m=new Dt("temp",r.getCameraPosition());i.value=m.getUrl().toString(),s.value="Share current view",t.value=!0}return(m,C)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",MA,[o.unref(n).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No bookmarks"})):o.createCommentVNode("",!0),o.createElementVNode("ul",wA,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(n).getBookmarks(),v=>(o.openBlock(),o.createBlock(fA,{key:v.name,name:v.name,onShare:I=>u(v),onDelete:I=>o.unref(n).remove(v),onGoto:I=>c(v)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),o.createVNode(si,null,{default:o.withCtx(()=>[o.createVNode(A._sfc_main$1,{text:"New bookmark",icon:"bi-plus-lg",title:"Create a new bookmark from the current view",class:"btn-primary",onClick:C[0]||(C[0]=()=>{l(),m.$forceUpdate()})}),o.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:f}),o.createVNode(A._sfc_main$1,{title:"Export bookmarks to GeoJSON",class:"btn-outline-secondary",onClick:h,icon:"bi-box-arrow-right",text:"Export bookmarks"}),o.createVNode(ai,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:d})]),_:1})]),o.createVNode(AA,{show:t.value,title:s.value,onClose:C[1]||(C[1]=()=>t.value=!1)},{default:o.withCtx(()=>[o.createVNode(yA,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),_A={},OA={class:"list-group list-group-flush border-start"};function xA(e,t){return o.openBlock(),o.createElementBlock("ul",OA,[o.renderSlot(e.$slots,"default")])}const ze=A._export_sfc(_A,[["render",xA],["__scopeId","data-v-461b97dc"]]),kA=["aria-expanded","aria-controls"],SA={key:0,class:"icon me-2"},NA={class:"flex-fill"},LA={key:1,class:"icon ms-2"},PA=["id"],wi=o.defineComponent({__name:"SectionCollapsible",props:{expanded:{type:Boolean},iconPosition:{},title:{}},emits:["update:expanded"],setup(e,{emit:t}){const i=e,s=t,a=A.MathUtils.generateUUID(),n=`#${a}`,r=o.ref(null);return o.onMounted(()=>{var l,h,c;i.expanded&&((l=r.value)==null||l.classList.add("show")),(h=r.value)==null||h.addEventListener("hidden.bs.collapse",()=>s("update:expanded",!1)),(c=r.value)==null||c.addEventListener("shown.bs.collapse",()=>s("update:expanded",!0))}),(l,h)=>(o.openBlock(),o.createElementBlock("div",null,[o.createElementVNode("h6",null,[o.createElementVNode("a",{class:"d-flex text-nowrap text-truncate overflow-hidden link-underline link-underline-opacity-0 link-underline-opacity-75-hover link-body-emphasis",href:n,"data-bs-toggle":"collapse",role:"button","aria-expanded":l.expanded,"aria-controls":o.unref(a)},[l.iconPosition==="left"?(o.openBlock(),o.createElementBlock("div",SA,[...h[0]||(h[0]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0),o.createElementVNode("span",NA,o.toDisplayString(l.title),1),l.iconPosition!=="left"?(o.openBlock(),o.createElementBlock("div",LA,[...h[1]||(h[1]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0)],8,kA)]),o.createElementVNode("div",{ref_key:"collapsible",ref:r,id:o.unref(a),class:"collapse"},[o.renderSlot(l.$slots,"default")],8,PA)]))}}),TA=o.defineComponent({__name:"ListLabel",props:{title:{}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["d-inline-block flex-fill text-nowrap text-truncate overflow-hidden px-1",t.$attrs.class])},o.toDisplayString(t.title),3))}}),DA={class:"slider d-flex"},BA={key:0,title:"Transparent",class:"bi-x-diamond me-1"},VA={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},RA=["value"],FA={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},UA=o.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",DA,[t.size!=="small"?(o.openBlock(),o.createElementBlock("i",BA)):o.createCommentVNode("",!0),t.size==="small"?(o.openBlock(),o.createElementBlock("i",VA)):o.createCommentVNode("",!0),o.createElementVNode("input",{title:"Opacity",type:"range",class:"form-range",min:"0",step:"0.01",max:"1",onInput:i[0]||(i[0]=s=>t.$emit("update:opacity",Number.parseFloat(s.target.value))),value:t.opacity},null,40,RA),t.size!=="small"?(o.openBlock(),o.createElementBlock("i",FA)):o.createCommentVNode("",!0)]))}}),Sa=A._export_sfc(UA,[["__scopeId","data-v-5b0604f2"]]),zA={class:"list-group-item"},jA={class:"d-flex"},GA=o.defineComponent({__name:"BasemapItem",props:{hasOpacitySlider:{type:Boolean},isLoading:{type:Boolean},name:{},opacity:{},type:{},visible:{type:Boolean}},emits:["update:opacity","update:visible"],setup(e){const t={color:"fg-landcover-map",elevation:"fg-profile",graticule:"fg-grid",mask:"bi-mask"},i={color:"Color layer",elevation:"Elevation layer",graticule:"Graticule",mask:"Mask layer"};return(s,a)=>(o.openBlock(),o.createElementBlock("li",zA,[o.createElementVNode("div",jA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:t[s.type],title:i[s.type]},null,8,["icon","title"])]),_:1}),o.createVNode(ne,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=n=>s.$emit("update:visible",n))},null,8,["visible"]),o.createVNode(TA,{title:s.name,class:o.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(o.openBlock(),o.createBlock(Sa,{key:0,class:o.normalizeClass(["opacity-slider",s.visible?null:"disabled"]),opacity:s.opacity,"onUpdate:opacity":a[1]||(a[1]=n=>s.$emit("update:opacity",n))},null,8,["class","opacity"])):o.createCommentVNode("",!0)])]))}}),Ls=A._export_sfc(GA,[["__scopeId","data-v-a7bbfe26"]]),HA={},ZA={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function WA(e,t){return o.openBlock(),o.createElementBlock("div",ZA,[...t[0]||(t[0]=[o.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const Na=A._export_sfc(HA,[["render",WA]]),qA={class:"d-flex"},YA={key:0,class:"icon spinner d-inline-block"},JA={key:1,class:"list-group-item"},XA=o.defineComponent({__name:"DatagroupItem",props:{group:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=e,i=o.reactive(t.group.leafs()),s=o.ref(!1),a=o.ref(!1),n=o.ref(t.group.visible);o.watch(i,h=>{s.value=h.some(c=>c.isPreloading),a.value=h.some(c=>c.isPreloaded),n.value=h.some(c=>c.visible)});const r=A.MathUtils.generateUUID(),l=`#${r}`;return(h,c)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",qA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[...c[10]||(c[10]=[o.createElementVNode("i",{class:"bi bi-folder2",title:"Group"},null,-1)])]),_:1}),o.createVNode(ne,{visible:n.value,"onUpdate:visible":c[0]||(c[0]=d=>h.$emit("update:visible",h.group,d))},null,8,["visible"]),o.createVNode(A.IconList,{class:"me-1"},{default:o.withCtx(()=>[o.createVNode(A.IconListButton,{title:"Expand group",icon:"bi-chevron-down","data-bs-toggle":"collapse","data-bs-target":l,"aria-controls":o.unref(r),"aria-expanded":"false"},null,8,["aria-controls"])]),_:1}),o.createVNode(A._sfc_main$3,{class:"label",disabled:!n.value||!a.value,text:h.group.name,title:`Zoom to ${h.group.name}`,onClick:c[1]||(c[1]=d=>h.$emit("zoom",h.group))},null,8,["disabled","text","title"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[s.value?(o.openBlock(),o.createElementBlock("div",YA,[o.createVNode(Na,{title:"Loading..."})])):o.createCommentVNode("",!0),a.value&&(h.group.config.canMaskBasemap||h.group.config.isMaskingBasemap)?(o.openBlock(),o.createBlock(A.IconListButton,{key:1,title:"Toggle basemap masking",icon:"bi-mask",onClick:c[2]||(c[2]=d=>h.$emit("update:toggle-mask",h.group))})):o.createCommentVNode("",!0),a.value?(o.openBlock(),o.createBlock(A.IconListButton,{key:2,title:"Clip to",icon:"bi-bounding-box",onClick:c[3]||(c[3]=d=>h.$emit("clipTo",h.group))})):o.createCommentVNode("",!0),a.value?(o.openBlock(),o.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:c[4]||(c[4]=d=>h.$emit("update:toggle-grid",h.group))})):o.createCommentVNode("",!0)]),_:1})]),o.createVNode(ze,{id:o.unref(r),class:"collapse pb-3"},{default:o.withCtx(()=>[h.group.children.length>0?(o.openBlock(!0),o.createElementBlock(o.Fragment,{key:0},o.renderList(h.group.children,d=>(o.openBlock(),o.createBlock(La,{key:d.name,dataset:d,onZoom:c[5]||(c[5]=g=>h.$emit("zoom",g)),onClipTo:c[6]||(c[6]=g=>h.$emit("clipTo",g)),"onUpdate:toggleGrid":c[7]||(c[7]=g=>h.$emit("update:toggle-grid",g)),"onUpdate:toggleMask":c[8]||(c[8]=g=>h.$emit("update:toggle-mask",g)),"onUpdate:visible":c[9]||(c[9]=(g,u)=>h.$emit("update:visible",g,u))},null,8,["dataset"]))),128)):(o.openBlock(),o.createElementBlock("li",JA,"No dataset in this group"))]),_:1},8,["id"])],64))}}),KA=A._export_sfc(XA,[["__scopeId","data-v-7592eab8"]]),QA={class:"d-flex"},$A={key:0,class:"icon spinner d-inline-block"},tm=["id"],em=o.defineComponent({__name:"DatasetItem",props:{dataset:{}},emits:["zoom","clipTo","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){const t=A.useDatasetStore(),i=e,s=A.refAndWatch(i.dataset,"isPreloading"),a=A.refAndWatch(i.dataset,"isPreloaded"),n=A.refAndWatch(i.dataset,"visible");function r(){t.remove(i.dataset)}return(l,h)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",QA,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:o.unref(Bs)[l.dataset.type]??"bi-file-earmark-x",title:o.unref(Vs)[l.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),o.createVNode(ne,{visible:o.unref(n),"onUpdate:visible":h[0]||(h[0]=c=>l.$emit("update:visible",l.dataset,c))},null,8,["visible"]),o.createVNode(A._sfc_main$3,{class:"label",disabled:!o.unref(n)||!o.unref(a),text:l.dataset.name,title:`Zoom to ${l.dataset.name}`,onClick:h[1]||(h[1]=c=>l.$emit("zoom",l.dataset))},null,8,["disabled","text","title"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[o.unref(s)?(o.openBlock(),o.createElementBlock("div",$A,[o.createVNode(Na,{title:"Loading..."})])):o.createCommentVNode("",!0),o.unref(De).has(l.dataset.type)&&o.unref(a)?(o.openBlock(),o.createBlock(A.IconListButton,{key:1,title:"Show dataset properties",icon:"bi-card-list","data-bs-toggle":"collapse","data-bs-target":`#collapse-${l.dataset.uuid}`,"aria-controls":`collapse-${l.dataset.uuid}`,"aria-expanded":"false"},null,8,["data-bs-target","aria-controls"])):o.createCommentVNode("",!0),o.unref(a)&&("canMaskBasemap"in l.dataset.config&&l.dataset.config.canMaskBasemap||"isMaskingBasemap"in l.dataset.config&&l.dataset.config.isMaskingBasemap)?(o.openBlock(),o.createBlock(A.IconListButton,{key:2,title:"Toggle basemap masking",icon:"bi-mask",onClick:h[2]||(h[2]=c=>l.$emit("update:toggle-mask",l.dataset))})):o.createCommentVNode("",!0),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getCustomActions(l.dataset,{isVisible:o.unref(n),isPreloaded:o.unref(a)}),c=>(o.openBlock(),o.createBlock(A.IconListButton,{key:c.title,title:c.title,icon:c.icon,onClick:d=>c.action(l.dataset)},null,8,["title","icon","onClick"]))),128)),o.unref(a)?(o.openBlock(),o.createBlock(A.IconListButton,{key:3,title:"Toggle 3D grid",icon:"bi-box",onClick:h[3]||(h[3]=c=>l.$emit("update:toggle-grid",l.dataset))})):o.createCommentVNode("",!0),o.createVNode(A.IconListButton,{title:"Delete this dataset",icon:"bi-trash",onClick:r})]),_:1})]),o.unref(De).has(l.dataset.type)?(o.openBlock(),o.createElementBlock("div",{key:0,class:"collapse m-2",id:`collapse-${l.dataset.uuid}`},[(o.openBlock(),o.createBlock(o.resolveDynamicComponent(o.unref(De).get(l.dataset.type)),{dataset:l.dataset},null,8,["dataset"]))],8,tm)):o.createCommentVNode("",!0)],64))}}),im=A._export_sfc(em,[["__scopeId","data-v-1aa9a2d7"]]),sm={class:"list-group-item"},La=o.defineComponent({__name:"DatasetOrGroupItem",props:{dataset:{}},emits:["zoom","update:toggle-grid","update:toggle-mask","update:visible"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",sm,[o.unref(A.Datagroup).isGroup(t.dataset)?(o.openBlock(),o.createBlock(KA,{key:0,group:t.dataset,onZoom:i[0]||(i[0]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[1]||(i[1]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[2]||(i[2]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[3]||(i[3]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["group"])):(o.openBlock(),o.createBlock(im,{key:1,dataset:t.dataset,onZoom:i[4]||(i[4]=s=>t.$emit("zoom",s)),"onUpdate:toggleGrid":i[5]||(i[5]=s=>t.$emit("update:toggle-grid",s)),"onUpdate:toggleMask":i[6]||(i[6]=s=>t.$emit("update:toggle-mask",s)),"onUpdate:visible":i[7]||(i[7]=(s,a)=>t.$emit("update:visible",s,a))},null,8,["dataset"]))]))}}),am={class:"list-group-item d-flex"},nm=o.defineComponent({__name:"OverlayItem",props:{name:{},opacity:{},visible:{type:Boolean}},emits:["update:visible","update:opacity","update:move-up","update:move-down","zoom"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",am,[o.createVNode(A.IconList,{class:"me-1 text-body-tertiary"},{default:o.withCtx(()=>[o.createVNode(A._sfc_main$2,{icon:"fg-contour-map",title:"Overlay"})]),_:1}),o.createVNode(ne,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),o.createVNode(A._sfc_main$3,{class:"label",disabled:!t.visible,title:`Zoom to ${t.name}`,text:t.name,onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},null,8,["disabled","title","text"]),o.createVNode(Sa,{class:o.normalizeClass(["opacity-slider",t.visible?null:"disabled"]),opacity:t.opacity,size:"small","onUpdate:opacity":i[2]||(i[2]=s=>t.$emit("update:opacity",s))},null,8,["class","opacity"]),o.createVNode(A.IconList,{class:"ms-1"},{default:o.withCtx(()=>[o.createVNode(A.IconListButton,{title:"Move up",icon:"bi-arrow-up",onClick:i[3]||(i[3]=s=>t.$emit("update:move-up"))}),o.createVNode(A.IconListButton,{title:"Move down",icon:"bi-arrow-down",onClick:i[4]||(i[4]=s=>t.$emit("update:move-down"))})]),_:1})]))}}),om=A._export_sfc(nm,[["__scopeId","data-v-8755c19f"]]),rm={class:"d-flex flex-column h-100"},lm={class:"flex-fill overflow-auto"},hm=o.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=pa();function a(l){for(const h of l)t.importFromFile(h)}function n(){const l=document.getElementById("dataset-import-url");t.importFromFile(l.value)}function r(l){const h=t.getBoundingBox(l);h!=null&&h.isEmpty()||i.lookTopDownAt(h)}return(l,h)=>(o.openBlock(),o.createElementBlock("div",rm,[o.createElementVNode("div",lm,[o.createVNode(wi,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(ze,{id:"layers-list-group"},{default:o.withCtx(()=>[o.unref(s).getGraticuleLayer()!==void 0?(o.openBlock(),o.createBlock(Ls,{key:0,type:"graticule",opacity:1,name:o.unref(s).getGraticuleLayer().name,isLoading:!1,visible:o.unref(s).getGraticuleLayer().visible,hasOpacitySlider:!1,"onUpdate:visible":h[0]||(h[0]=c=>o.unref(s).getGraticuleLayer().visible=c)},null,8,["name","visible"])):o.createCommentVNode("",!0),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(s).getBasemaps(),c=>(o.openBlock(),o.createBlock(Ls,{key:c.name,type:c.type,opacity:c.opacity,name:c.name,isLoading:c.isLoading,visible:c.visible,hasOpacitySlider:c.type==="color"||c.type==="elevation","onUpdate:visible":d=>o.unref(s).setBasemapVisibility(c,d),"onUpdate:opacity":d=>o.unref(s).setBasemapOpacity(c,d)},null,8,["type","opacity","name","isLoading","visible","hasOpacitySlider","onUpdate:visible","onUpdate:opacity"]))),128))]),_:1})]),_:1}),o.unref(s).overlayCount>0?(o.openBlock(),o.createBlock(wi,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(ze,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(s).getOverlays(),c=>(o.openBlock(),o.createBlock(om,{key:c.name,opacity:c.opacity,name:c.name,visible:c.visible,"onUpdate:visible":d=>o.unref(s).setOverlayVisibility(c,d),"onUpdate:opacity":d=>o.unref(s).setOverlayOpacity(c,d),"onUpdate:moveUp":d=>o.unref(s).moveOverlayUp(c),"onUpdate:moveDown":d=>o.unref(s).moveOverlayDown(c)},null,8,["opacity","name","visible","onUpdate:visible","onUpdate:opacity","onUpdate:moveUp","onUpdate:moveDown"]))),128))]),_:1})]),_:1})):o.createCommentVNode("",!0),o.createVNode(wi,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:o.withCtx(()=>[o.createVNode(ze,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTree(),c=>(o.openBlock(),o.createBlock(La,{key:c.name,dataset:c,onUpdated:h[1]||(h[1]=d=>l.$forceUpdate()),onZoom:h[2]||(h[2]=d=>r(d)),"onUpdate:toggleGrid":h[3]||(h[3]=d=>o.unref(t).toggleGrid(d)),"onUpdate:toggleMask":h[4]||(h[4]=d=>o.unref(t).toggleMask(d)),"onUpdate:visible":h[5]||(h[5]=(d,g)=>o.unref(t).setVisible(d,g))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),o.createVNode(si,null,{default:o.withCtx(()=>[o.createElementVNode("div",{class:"input-group mb-3"},[h[6]||(h[6]=o.createElementVNode("input",{type:"text",id:"dataset-import-url",class:"form-control",placeholder:"https://","aria-label":"URL to import","aria-describedby":"button-dataset-import-url"},null,-1)),o.createElementVNode("button",{onClick:n,class:"btn btn-outline-secondary",type:"button",id:"button-dataset-import-url"}," Import URL ")]),o.createVNode(ai,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),cm={class:"list-group-item item"},gm={class:"d-flex"},um=["title"],dm={class:"icons"},Am=o.defineComponent({__name:"MeasurementItem",props:{measure:{},visible:{type:Boolean}},emits:["delete","download","update:visible","zoom"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",cm,[o.createElementVNode("div",gm,[o.createVNode(ne,{visible:t.visible,"onUpdate:visible":i[0]||(i[0]=s=>t.$emit("update:visible",s))},null,8,["visible"]),o.createElementVNode("a",{class:"title",title:t.measure.title,href:"#",onClick:i[1]||(i[1]=s=>t.$emit("zoom"))},o.toDisplayString(t.measure.title)+" ("+o.toDisplayString(t.measure.object.length.toFixed(2))+"m)",9,um),o.createElementVNode("div",dm,[o.createElementVNode("a",{href:"#",class:"icon",title:"Delete",onClick:i[2]||(i[2]=s=>t.$emit("delete"))},[...i[3]||(i[3]=[o.createElementVNode("i",{class:"bi bi-trash"},null,-1)])])])])]))}}),mm=A._export_sfc(Am,[["__scopeId","data-v-bcecb7b2"]]),Ps=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],Cm={class:"d-flex flex-column h-100"},fm={class:"list-group list-group-flush flex-fill overflow-auto"},Im=o.defineComponent({__name:"MeasurementPanel",setup(e){const t=Wi(),i=A.useCameraStore(),s=o.ref(t.getMeasurementMode());o.watch(s,c=>{t.setMeasurementMode(c)});function a(c){const d=c.toGeoJSON();A.Download.downloadAsJson(d,`measure-${c.title}.json`)}function n(){const c=Ea.toCollection(t.getMeasures());A.Download.downloadAsJson(c,"measures.json")}function r(c){i.lookTopDownAt(c.object)}function l(c){t.importMeasureFiles(c)}function h(c){s.value=c==null?void 0:c.value}return(c,d)=>(o.openBlock(),o.createElementBlock("div",Cm,[d[3]||(d[3]=o.createElementVNode("div",{class:"alert alert-warning py-2",role:"alert"},[o.createElementVNode("i",{class:"bi bi-cone-striped"}),o.createTextVNode(" This feature is experimental ")],-1)),o.unref(t).count===0?(o.openBlock(),o.createBlock(ni,{key:0,text:"No measurements"})):o.createCommentVNode("",!0),o.createElementVNode("ul",fm,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getMeasures(),g=>(o.openBlock(),o.createBlock(mm,{key:g.title,measure:g,visible:g.visible,"onUpdate:visible":()=>{g.visible=!g.visible,c.$forceUpdate()},onDelete:u=>o.unref(t).remove(g),onDownload:u=>a(g),onZoom:u=>r(g)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(si,{id:"measures-fieldset"},{default:o.withCtx(()=>[o.createVNode(xa,{label:"Mode","description-position":"top",current:o.unref(Ps)[0],items:o.unref(Ps),"onUpdated:current":d[0]||(d[0]=g=>h(g)),class:"mb-2"},null,8,["current","items"]),o.unref(t).isUserMeasuring()?(o.openBlock(),o.createBlock(A._sfc_main$1,{key:0,title:"Stop measuring",text:"Stop measuring",icon:"bi-stop-circle",class:"btn-primary",onClick:d[1]||(d[1]=g=>o.unref(t).end())})):(o.openBlock(),o.createBlock(A._sfc_main$1,{key:1,title:"Start measuring",text:"Start measuring",icon:"bi-rulers",class:"btn-primary",onClick:d[2]||(d[2]=g=>o.unref(t).start())})),o.createVNode(A._sfc_main$1,{title:"Export measures to GeoJSON",class:"btn-outline-secondary",onClick:n,icon:"bi-box-arrow-right",text:"Export measures"}),o.createVNode(ai,{title:"Import measures from GeoJSON",text:"Import measures",onImport:l})]),_:1})]))}}),pm={class:"panel",id:"panel-container"},vm={class:"title"},ym={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},bm={class:"content"},Mm=o.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=Ds(),i=`packages-v1.0.0-beta.2
|
|
16
|
+
`;return(s,a)=>{var n;return o.openBlock(),o.createElementBlock("div",pm,[o.createElementVNode("h5",vm,[o.createTextVNode(o.toDisplayString((n=o.unref(t).find(r=>r.key===s.selected))==null?void 0:n.title)+" ",1),s.selected==="about"?(o.openBlock(),o.createElementBlock("span",ym,"Version: "+o.toDisplayString(o.unref(i)),1)):o.createCommentVNode("",!0)]),o.createElementVNode("div",bm,[s.selected==="datasets"?(o.openBlock(),o.createBlock(hm,{key:0})):o.createCommentVNode("",!0),s.selected==="about"?(o.openBlock(),o.createBlock(wd,{key:1})):o.createCommentVNode("",!0),s.selected==="bookmarks"?(o.openBlock(),o.createBlock(EA,{key:2})):o.createCommentVNode("",!0),s.selected==="analysis"?(o.openBlock(),o.createBlock(Bd,{key:3})):o.createCommentVNode("",!0),s.selected==="annotations"?(o.openBlock(),o.createBlock(nA,{key:4})):o.createCommentVNode("",!0),s.selected==="measures"?(o.openBlock(),o.createBlock(Im,{key:5})):o.createCommentVNode("",!0)])])}}}),wm=A._export_sfc(Mm,[["__scopeId","data-v-381fd038"]]),Em=["aria-valuenow"],_m={methods:{tick(){this.$forceUpdate()}}},Om=o.defineComponent({..._m,__name:"ProgressBar",props:{progress:{required:!0,type:Number}},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",{class:"progress",role:"progressbar","aria-label":"Progress","aria-valuenow":e.progress*100,"aria-valuemin":"0","aria-valuemax":"100"},[e.progress!=1?(o.openBlock(),o.createElementBlock("div",{key:0,class:"progress-bar progress-bar-striped progress-bar-animated",style:o.normalizeStyle(`width: ${e.progress*100}%`)},null,4)):o.createCommentVNode("",!0)],8,Em))}}),xm={async geocode(e){const t=await A.Fetcher.fetchJson(`https://api-adresse.data.gouv.fr/search/?q=${e}`),i=t.features.map(s=>new at("EPSG:4326",s.geometry.coordinates[0],s.geometry.coordinates[1],0));return await Fs.alticode(i),i.forEach((s,a)=>{t.features[a].properties.crs="EPSG:2154",t.features[a].properties.z=s.altitude}),t.features.map(s=>s.properties)}},km={class:"main"},Sm={class:"input-group",id:"address-search"},Nm=o.defineComponent({__name:"SearchOverlay",emits:["update:poi"],setup(e,{emit:t}){const i=o.ref(null),s=t;return o.onMounted(()=>{new Cn({data:{keys:["label"],src:n=>xm.geocode(n)},debounce:300,placeHolder:"Search places...",resultItem:{highlight:!0},resultsList:{noResults:!0},selector:"#search-place-autocomplete",threshold:3,searchEngine:(n,r)=>r}),i.value.addEventListener("selection",n=>{const r=n.detail.selection.value;s("update:poi",r)})}),(a,n)=>(o.openBlock(),o.createElementBlock("div",km,[o.createElementVNode("div",Sm,[o.createElementVNode("input",{ref_key:"inputField",ref:i,id:"search-place-autocomplete",class:"rounded-pill form-control",type:"search",dir:"ltr",placeholder:"Search places...",spellcheck:"false",autocorrect:"off",autocomplete:"off",autocapitalize:"off",maxlength:"2048",tabindex:"1"},null,512)])]))}}),Lm=A._export_sfc(Nm,[["__scopeId","data-v-46d63936"]]),Pm={class:"d-flex column-gap-3"},Tm=o.defineComponent({__name:"StatusBar",props:{x:Number,y:Number,z:Number},setup(e){return(t,i)=>{var s,a,n;return o.openBlock(),o.createElementBlock("div",null,[o.createElementVNode("div",Pm,[i[0]||(i[0]=o.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),o.createVNode(bt,{value:(s=e.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(bt,{value:(a=e.y)==null?void 0:a.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(bt,{value:(n=e.z)==null?void 0:n.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),Dm=A._export_sfc(Tm,[["__scopeId","data-v-3d05468b"]]),Bm="data:image/png;base64,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",Vm={class:"nav-item"},Rm=["id","title"],Fm=o.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",Vm,[o.createElementVNode("a",{id:`toolbar-${e.tourkey}`,class:o.normalizeClass(["nav-link",e.active?"active":null]),href:"#",title:e.title},[o.createElementVNode("i",{class:o.normalizeClass(["bi",e.icon])},null,2)],10,Rm)]))}}),Um={class:"toolbar"},zm={id:"menu",class:"nav nav-pills flex-column"},jm={class:"nav-item mt-2"},Gm={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},Hm=["src"],Zm=o.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=Ds();return(i,s)=>(o.openBlock(),o.createElementBlock("div",Um,[o.createElementVNode("ul",zm,[o.createElementVNode("li",jm,[o.createElementVNode("a",Gm,[o.createElementVNode("img",{src:o.unref(Bm),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,Hm)])]),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t),a=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[a.enabled?(o.openBlock(),o.createBlock(Fm,{active:i.active===a.key,key:a.key,tourkey:a.key,title:a.title,icon:a.icon,onClick:n=>i.$emit("selected",a.key)},null,8,["active","tourkey","title","icon","onClick"])):o.createCommentVNode("",!0)],64))),256))])]))}}),Wm=A._export_sfc(Zm,[["__scopeId","data-v-f84bccda"]]),qm=o.defineComponent({__name:"App",props:{getContext:{type:Function}},setup(e){const t=o.ref("datasets"),i=o.ref(1),s=o.ref(new A.Vector3(0,0,0)),a=new A.Vector2,n=o.ref(null),r=o.ref(null),l=o.ref(!1),h=o.ref(!0);let c=!1;const d=ae(),g=A.useCameraStore(),u=Zi(),f=Wi(),m=o.shallowRef(null),C=o.shallowRef(null),v=o.ref();o.onMounted(()=>{const P=d.getMainView(),U=d.getMinimapView();P&&M(P),U&&_(U),d.$onAction(({after:z,args:ut,name:St})=>{z(()=>{switch(St){case"setMainView":ut[0]===null?I():M(ut[0]);break;case"setMinimapView":ut[0]===null?b():_(ut[0]);break}})}),v.value=setInterval(()=>{c&&(W(a),et(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),Tt.dispatchEvent({type:"ready"})}),o.onUnmounted(()=>{v.value!=null&&(clearInterval(v.value),v.value=void 0),b(),I()});function I(){var P;C.value&&C.value.setMainInstance(null),(P=m.value)==null||P.dispose(),m.value=null}function b(){var P;(P=C.value)==null||P.dispose()}function M(P){const U=d.getMainView();if(U===null)throw new Error("mainview is null");m.value=new Zg(U),m.value.addEventListener("update",()=>{m.value&&(i.value=m.value.mainInstance.progress,l.value=m.value.mainInstance.loading)}),e.getContext().view=new Xg({camera:m.value.camera,instance:m.value.mainInstance}),C.value&&C.value.setMainInstance(P)}function _(P){C.value=new Jg(P),m.value&&C.value.setMainInstance(m.value.mainInstance)}function x(P){m.value&&(m.value.mainInstance.eventToCanvasCoords(P,a),c=!0)}function E(P){if(!m.value)return;const U=m.value.mainInstance,z=new at(P.crs,P.x,P.y,P.z).as(U.referenceCrs),St=Qe.fromCenterAndSize(z.crs,z.toVector2(),1e3,1e3).toBox3(P.z,P.z+200);m.value.camera.lookTopDownAt(St,!1)}function S(P,U){if(m.value==null||m.value.mainInstance==null||g.getNavigationMode()==="position-on-map"||g.isUserInteracting()||u.isUserDrawing()||f.isUserMeasuring())return;const z=m.value.picker.pick(m.value.mainInstance,P);if((z==null?void 0:z.point)!=null){const ut=z.point;s.value.x=ut.x,s.value.y=ut.y,s.value.z=ut.z}(z==null?void 0:z.feature)!=null?(r.value=z.feature.name,n.value=z.feature):(r.value=null,n.value=null),(z==null?void 0:z.pickResult)!=null?m.value.highlighter.highlightFromPick(z.pickResult):m.value.highlighter.clear()}function D(P){P===t.value?t.value=null:t.value=P}function W(P){if(m.value!=null){const U=m.value.picker.getMouseCoordinate(m.value.mainInstance,P);U&&(s.value.x=U.x,s.value.y=U.y,s.value.z=U.z)}}function et(P){if(m.value){if(g.getNavigationMode()==="position-on-map"||u.isUserDrawing()||f.isUserMeasuring())return;const U=m.value.picker.hasFeature(m.value.mainInstance,P);m.value.mainInstance.domElement.style.cursor=U?"pointer":"auto"}}return(P,U)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[h.value?(o.openBlock(),o.createBlock(Gu,{key:0})):o.createCommentVNode("",!0),o.createVNode(Wu,{id:"main-view",onClick:U[0]||(U[0]=z=>S(z)),onMousemove:x,class:"mainview"}),n.value!=null?(o.openBlock(),o.createBlock(Bu,{key:1,onClose:U[1]||(U[1]=z=>n.value=null),attributes:n.value.attributes,name:n.value.name,parent:n.value.parent,point:n.value.point,class:"component attribute-panel"},null,8,["attributes","name","parent","point"])):o.createCommentVNode("",!0),o.createVNode(Dm,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),o.createVNode(Wm,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:U[2]||(U[2]=z=>D(z))},null,8,["active"]),o.createVNode(Yu,{class:"component minimap"}),t.value!=null?(o.openBlock(),o.createBlock(wm,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):o.createCommentVNode("",!0),o.createVNode(Om,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),o.createVNode(Lm,{id:"address-search",class:"search","onUpdate:poi":E}),o.createVNode($u,{class:"navigation-buttons"}),o.createVNode(iu)],64))}}),Ym=A._export_sfc(qm,[["__scopeId","data-v-876eb3a3"]]);async function Jm(e){let t;if(typeof e.configuration=="string"){console.info(`Loading remote configuration from: ${e.configuration}`);const i=await A.loadRemoteConfiguration(e.configuration);console.info("Remote configuration successfuly loaded."),t=i}else t=e.configuration;return t}async function Xm(e){const t=await Jm(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=kt.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=Oa(i),n={analysis:new pn(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new vn(ka(i)),configuration:t,datasets:new Og(A.useDatasetStore(i)),events:Tt,notifications:new xg(Rt(i))},r=n,l=[];if(e.modules)for(const c of e.modules){const d=Promise.resolve(c.initialize(r));l.push(d),console.info(`Module ${c.name} initialized.`)}await Promise.all(l);const h=o.createApp(Ym,{getContext:()=>n});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=Dt;exports.Projections=ji;exports.createPieroApp=Xm;
|
|
17
17
|
//# sourceMappingURL=index.cjs.js.map
|