@giro3d/piero 1.0.0-beta.2 → 1.0.0-beta.3
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 +23 -25
- 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 +2845 -2935
- 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 +937 -753
- package/dist/modules.es.js.map +1 -1
- package/dist/src/api/SearchApi.d.ts +34 -0
- package/dist/src/api/WidgetApi.d.ts +17 -0
- package/dist/src/api/index.d.ts +2 -1
- package/dist/src/components/SearchOverlay.vue.d.ts +4 -5
- package/dist/src/context.d.ts +10 -0
- package/dist/src/events.d.ts +7 -1
- package/dist/src/modules/OpenLayersMinimap.d.ts +7 -0
- package/dist/src/modules/PostProcessEntities.d.ts +16 -0
- package/dist/src/modules/geocoding/CoordinatesSearch.d.ts +7 -0
- package/dist/src/modules/geocoding/FrenchBanGeocoder.d.ts +10 -0
- package/dist/src/modules/index.d.ts +5 -1
- package/dist/src/modules/minimap/OpenLayersMinimapComponent.vue.d.ts +8 -0
- package/dist/src/stores/giro3d.d.ts +1 -7
- package/dist/src/stores/search.d.ts +12 -0
- package/dist/src/stores/widgets.d.ts +12 -0
- package/package.json +2 -2
- package/dist/src/components/MinimapView.vue.d.ts +0 -4
- package/dist/src/providers/BanProvider.d.ts +0 -11
- package/dist/src/providers/Geocoding.d.ts +0 -7
- package/dist/src/services/MinimapController.d.ts +0 -19
package/dist/index.cjs.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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
|
|
1
|
+
"use strict";var Ta=Object.defineProperty;var Da=(e,t,i)=>t in e?Ta(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var p=(e,t,i)=>Da(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const vt=require("pinia"),o=require("vue"),A=require("./Components.cjs.js"),Xe=require("@giro3d/giro3d/core/geographic/Extent"),Ba=require("@giro3d/giro3d/entities/FeatureCollection"),Gt=require("ol/format"),Va=require("ol/loadingstrategy.js"),Ra=require("ol/source/Vector"),Fa=require("ol/tilegrid.js"),Ua=require("@giro3d/giro3d/sources/COPCSource"),za=require("@giro3d/giro3d/sources/LASSource"),ja=require("@giro3d/giro3d/core/OperationCounter"),Ga=require("@giro3d/giro3d/entities/PointCloud"),Ha=require("@giro3d/giro3d/sources/PointCloudSource"),Pi=require("@loaders.gl/core"),Za=require("@loaders.gl/csv"),Wa=require("@giro3d/giro3d/entities/Tiles3D"),qa=require("@giro3d/giro3d/renderer/PointCloudMaterial"),Ya=require("@loaders.gl/geopackage"),Zi=require("@giro3d/giro3d/core/FeatureTypes"),Ti=require("@giro3d/giro3d/entities/Entity3D"),Ja=require("ol/format/GeoJSON"),Xa=require("ol/format/GPX"),Ka=require("ol/format/KML"),Ct=require("@giro3d/giro3d/core/geographic/Coordinates"),Qa=require("@giro3d/giro3d/renderer/geometries/GeometryConverter"),Ls=require("@giro3d/giro3d/core/Instance"),$a=require("@loaders.gl/shapefile"),tn=require("@giro3d/giro3d/utils/ColorUtils"),nt=require("@giro3d/giro3d/entities/Shape"),en=require("@giro3d/giro3d/core/picking/PickPointsAt"),Ps=require("@giro3d/giro3d/core/picking/PickTilesAt"),Ue=require("@giro3d/giro3d/entities/Map"),me=require("@giro3d/giro3d/core/layer/ColorLayer"),de=require("@giro3d/giro3d/core/layer/ElevationLayer"),sn=require("@giro3d/giro3d/core/layer/Interpretation"),ze=require("@giro3d/giro3d/core/layer/MaskLayer"),Wi=require("@giro3d/giro3d/formats/BilFormat"),an=require("@giro3d/giro3d/formats/GeoTIFFFormat"),nn=require("@giro3d/giro3d/formats/MapboxTerrainFormat"),on=require("@giro3d/giro3d/sources/GeoTIFFSource"),Bt=require("@giro3d/giro3d/sources/TiledImageSource"),he=require("@giro3d/giro3d/sources/VectorSource"),qi=require("@giro3d/giro3d/sources/VectorTileSource"),zt=require("ol/source"),rn=require("ol/source/WMTS"),W=require("ol/style");require("@giro3d/giro3d/utils/HttpConfiguration");const kt=require("@giro3d/giro3d/interactions/DrawTool"),ln=require("@giro3d/giro3d/gui/Panel"),hn=require("@giro3d/giro3d/entities/AxisGrid"),cn=require("ol/Feature"),gn=require("ol/geom/Polygon");require("@giro3d/giro3d/utils/Fetcher");const un=require("bootstrap");require("@giro3d/giro3d/gui/Inspector");const dn=require("@trevoreyre/autocomplete-vue");function An(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 mn=An(un);class Cn{constructor(t){this.store=t}registerTool(t){this.store.registerTool(t)}}class fn{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 ni=null;function Ts(){return ni||(ni=[{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"}]),ni}const Pe=new Map,Ds={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"},Bs={colorLayer:"Color Layer",elevationLayer:"Elevation layer",featureCollection:"Feature Collection",maskLayer:"Mask Layer",pointcloud:"Point Cloud",tiledIfc:"IFC",vector:"Vector"};class In extends Ba{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 Ra({format:new Gt.GeoJSON,strategy:Va.tile(Fa.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 Xe("EPSG:2154",-111629.52,127502884e-2,597603379e-2,723016164e-2),r=t.extrusionOffset??(c=>{const g=-c.getProperties().hauteur;return Number.isNaN(g)?0:g}),l=t.style??(c=>{const d=c.getProperties();let u="#FFFFFF";switch(d.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 A.Color(u),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 pn=e=>{const t=e.dataset.config,i=new In({...t,featureProjection:e.instance.referenceCrs});return Promise.resolve(i)};class vn extends Ha.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 ja);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 Pi.load(this.url,Za.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 u=0;u<i.data.length;u+=1){const g=i.data[u][0],m=i.data[u][1],f=i.data[u][2],C=g-h.x,y=m-h.y,I=f-h.z;n.expandByPoint(l.set(g,m,f)),r.expandByPoint(l.set(C,y,I)),s[u*3+0]=C,s[u*3+1]=y,s[u*3+2]=I,a[u]=f}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 yn extends Ga{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 bn=e=>{const{dataset:t}=e,i=t.config;let s;switch(i.source.type){case"copc":s=new Ua({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 vn({...i.source});break;case"las":s=new za({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 yn({source:s});return Promise.resolve(a)};class Vs extends Wa{constructor(t,i){super({...t,...i}),A.fillObject3DUserData(this,{filename:t.url})}}const Mn=e=>{const t=e.dataset.config,i=new Vs({...t.source,url:A.getPublicFolderUrl(t.source.url)});return Promise.resolve(i)};class En extends Vs{constructor(t){const i=A.getConfig();super(t,{colorMap:A.getColorMap(i.pointcloud),pointCloudMode:qa.MODE.ELEVATION}),this.name=`pointcloud-${t.name}`}}const wn=e=>{const{dataset:t}=e,i=t.config,s=new En({...i.source,name:i.name,url:A.getPublicFolderUrl(i.source.url)});return Promise.resolve(s)},oi=new Ct("EPSG:4326",0,0,0);async function _n(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(On(r,l))}return(await Promise.all(s)).flat()}async function On(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 xn={async alticode(e){const t=[],i=[];e.forEach(a=>{a.as("EPSG:4326",oi),t.push(oi.longitude),i.push(oi.latitude)}),(await _n(t,i)).forEach((a,n)=>{e[n]._values[2]=a})}},Yi=e=>xn.alticode(e),kn=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())},Sn=(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},Rs=(e,t,i=0)=>t?Sn([kn(e),Yi],i):Yi;function Nn(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 Pt=1,Tt=2,Yt=3,Ln=4,Ei=5,Ji=6378137,Pn=6356752314e-3,Xi=.0066943799901413165,Ae=484813681109536e-20,E=Math.PI/2,Tn=.16666666666666666,Dn=.04722222222222222,Bn=.022156084656084655,O=1e-10,Y=.017453292519943295,ft=57.29577951308232,U=Math.PI/4,Ce=Math.PI*2,Z=3.14159265359,st={};st.greenwich=0;st.lisbon=-9.131906111111;st.paris=2.337229166667;st.bogota=-74.080916666667;st.madrid=-3.687938888889;st.rome=12.452333333333;st.bern=7.439583333333;st.jakarta=106.807719444444;st.ferro=-17.666666666667;st.brussels=4.367975;st.stockholm=18.058277777778;st.athens=23.7163375;st.oslo=10.722916666667;const Vn={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var Ki=/[\s_\-\/\(\)]/g;function Ot(e,t){if(e[t])return e[t];for(var i=Object.keys(e),s=t.toLowerCase().replace(Ki,""),a=-1,n,r;++a<i.length;)if(n=i[a],r=n.toLowerCase().replace(Ki,""),r===s)return e[n]}function wi(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*Y},lat_1:function(l){t.lat1=l*Y},lat_2:function(l){t.lat2=l*Y},lat_ts:function(l){t.lat_ts=l*Y},lon_0:function(l){t.long0=l*Y},lon_1:function(l){t.long1=l*Y},lon_2:function(l){t.long2=l*Y},alpha:function(l){t.alpha=parseFloat(l)*Y},gamma:function(l){t.rectified_grid_angle=parseFloat(l)},lonc:function(l){t.longc=l*Y},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(Vn,l);h&&(t.to_meter=h.to_meter)},from_greenwich:function(l){t.from_greenwich=l*Y},pm:function(l){var h=Ot(st,l);t.from_greenwich=(h||parseFloat(l))*Y},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 Fs{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(g=>Array.isArray(g)&&g[0]==="BASEGEOGCRS")?this.convert(t.find(g=>Array.isArray(g)&&g[0]==="BASEGEOGCRS")):null,i.conversion=t.find(g=>Array.isArray(g)&&g[0]==="CONVERSION")?this.convert(t.find(g=>Array.isArray(g)&&g[0]==="CONVERSION")):null;const s=t.find(g=>Array.isArray(g)&&g[0]==="CS");s&&(i.coordinate_system={type:s[1],axis:this.extractAxes(t)});const a=t.find(g=>Array.isArray(g)&&g[0]==="LENGTHUNIT");if(a){const g=this.convertUnit(a);i.coordinate_system.unit=g}i.id=this.getId(t);break;case"BASEGEOGCRS":case"GEOGCRS":i.type="GeographicCRS",i.name=t[1];const n=t.find(g=>Array.isArray(g)&&(g[0]==="DATUM"||g[0]==="ENSEMBLE"));if(n){const g=this.convert(n);n[0]==="ENSEMBLE"?i.datum_ensemble=g:i.datum=g;const m=t.find(f=>Array.isArray(f)&&f[0]==="PRIMEM");m&&m[1]!=="Greenwich"&&(g.prime_meridian={name:m[1],longitude:parseFloat(m[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(g=>Array.isArray(g)&&g[0]==="ELLIPSOID")?this.convert(t.find(g=>Array.isArray(g)&&g[0]==="ELLIPSOID")):null;break;case"ENSEMBLE":i.type="DatumEnsemble",i.name=t[1],i.members=t.filter(g=>Array.isArray(g)&&g[0]==="MEMBER").map(g=>({type:"DatumEnsembleMember",name:g[1],id:this.getId(g)}));const r=t.find(g=>Array.isArray(g)&&g[0]==="ENSEMBLEACCURACY");r&&(i.accuracy=parseFloat(r[1]));const l=t.find(g=>Array.isArray(g)&&g[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(g=>Array.isArray(g)&&g[0]==="LENGTHUNIT")&&this.convert(t.find(g=>Array.isArray(g)&&g[0]==="LENGTHUNIT"),i);break;case"CONVERSION":i.type="Conversion",i.name=t[1],i.method=t.find(g=>Array.isArray(g)&&g[0]==="METHOD")?this.convert(t.find(g=>Array.isArray(g)&&g[0]==="METHOD")):null,i.parameters=t.filter(g=>Array.isArray(g)&&g[0]==="PARAMETER").map(g=>this.convert(g));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(g=>Array.isArray(g)&&(g[0]==="LENGTHUNIT"||g[0]==="ANGLEUNIT"||g[0]==="SCALEUNIT"))),i.id=this.getId(t);break;case"BOUNDCRS":i.type="BoundCRS";const h=t.find(g=>Array.isArray(g)&&g[0]==="SOURCECRS");if(h){const g=h.find(m=>Array.isArray(m));i.source_crs=g?this.convert(g):null}const c=t.find(g=>Array.isArray(g)&&g[0]==="TARGETCRS");if(c){const g=c.find(m=>Array.isArray(m));i.target_crs=g?this.convert(g):null}const d=t.find(g=>Array.isArray(g)&&g[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(g=>Array.isArray(g)&&g[0]==="METHOD")?this.convert(t.find(g=>Array.isArray(g)&&g[0]==="METHOD")):null,i.parameters=t.filter(g=>Array.isArray(g)&&(g[0]==="PARAMETER"||g[0]==="PARAMETERFILE")).map(g=>{if(g[0]==="PARAMETER")return this.convert(g);if(g[0]==="PARAMETERFILE")return{name:g[1],value:g[2],id:{authority:"EPSG",code:8656}}}),i.parameters.length===7){const g=i.parameters[6];g.name==="Scale difference"&&(g.value=Math.round((g.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 u=this.convertUnit(t,"LinearUnit");i.coordinate_system&&i.coordinate_system.axis&&i.coordinate_system.axis.forEach(g=>{g.unit||(g.unit=u)}),u.conversion_factor&&u.conversion_factor!==1&&i.semi_major_axis&&(i.semi_major_axis={value:i.semi_major_axis,unit:u});break;default:i.keyword=t[0];break}return i}}class Rn extends Fs{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 Fn extends Fs{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 Un(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 zn(e){return(Un(e)==="2019"?Fn:Rn).convert(e)}function jn(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 fe=1,Us=2,zs=3,je=4,js=5,Di=-1,Gn=/\s/,Hn=/[A-Za-z]/,Zn=/[A-Za-z84_]/,Ke=/[,\]]/,Gs=/[\d\.E\-\+]/;function bt(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=fe}bt.prototype.readCharicter=function(){var e=this.text[this.place++];if(this.state!==je)for(;Gn.test(e);){if(this.place>=this.text.length)return;e=this.text[this.place++]}switch(this.state){case fe:return this.neutral(e);case Us:return this.keyword(e);case je:return this.quoted(e);case js:return this.afterquote(e);case zs:return this.number(e);case Di:return}};bt.prototype.afterquote=function(e){if(e==='"'){this.word+='"',this.state=je;return}if(Ke.test(e)){this.word=this.word.trim(),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in afterquote yet, index '+this.place)};bt.prototype.afterItem=function(e){if(e===","){this.word!==null&&this.currentObject.push(this.word),this.word=null,this.state=fe;return}if(e==="]"){this.level--,this.word!==null&&(this.currentObject.push(this.word),this.word=null),this.state=fe,this.currentObject=this.stack.pop(),this.currentObject||(this.state=Di);return}};bt.prototype.number=function(e){if(Gs.test(e)){this.word+=e;return}if(Ke.test(e)){this.word=parseFloat(this.word),this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in number yet, index '+this.place)};bt.prototype.quoted=function(e){if(e==='"'){this.state=js;return}this.word+=e};bt.prototype.keyword=function(e){if(Zn.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=fe;return}if(Ke.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in keyword yet, index '+this.place)};bt.prototype.neutral=function(e){if(Hn.test(e)){this.word=e,this.state=Us;return}if(e==='"'){this.word="",this.state=je;return}if(Gs.test(e)){this.word=e,this.state=zs;return}if(Ke.test(e)){this.afterItem(e);return}throw new Error(`havn't handled "`+e+'" in neutral yet, index '+this.place)};bt.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(this.state===Di)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)};function Wn(e){var t=new bt(e);return t.output()}function ri(e,t,i){Array.isArray(t)&&(i.unshift(t),t=null);var s=t?{}:e,a=i.reduce(function(n,r){return Ht(r,n),n},s);t&&(e[t]=a)}function Ht(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]={},Ht(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&&Ht(e[2],t[i]);return;case"SPHEROID":case"ELLIPSOID":t[i]={name:e[0],a:e[1],rf:e[2]},e.length===4&&Ht(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]],ri(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]],ri(t,i,e),t[i].type=i;return;default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return Ht(e,t[i]);return ri(t,i,e)}}var qn=.017453292519943295;function gt(e){return e*qn}function Hs(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=gt(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=gt(e.lat0>0?90:-90),delete e.lat1)}function Qi(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 $i(e){return typeof e=="object"?e.value*e.unit.conversion_factor:e}function ts(e,t){e.ellipsoid.radius?(t.a=e.ellipsoid.radius,t.rf=0):(t.a=$i(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-$i(e.ellipsoid.semi_minor_axis))))}function Ge(e,t={}){return!e||typeof e!="object"?e:e.type==="BoundCRS"?(Ge(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,ts(s,t)),s.prime_meridian&&(t.from_greenwich=s.prime_meridian.longitude*Math.PI/180);break;case"ellipsoid":t.ellps=s.name,ts(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}=Qi(s.unit);t.units=a,t.to_meter=n}else if(s.axis[0]&&s.axis[0].unit){const{units:a,to_meter:n}=Qi(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":Ge(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),Hs(t),t)}var Yn=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function Jn(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 Zs(e){for(var t=Object.keys(e),i=0,s=t.length;i<s;++i){var a=t[i];Yn.indexOf(a)!==-1&&Xn(e[a]),typeof e[a]=="object"&&Zs(e[a])}}function Xn(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=gt(e.rectified_grid_angle));function l(d){var u=e.to_meter||1;return d*u}var h=function(d){return Jn(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",gt],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",gt],["x0","false_easting",l],["y0","false_northing",l],["long0","central_meridian",gt],["lat0","latitude_of_origin",gt],["lat0","standard_parallel_1",gt],["lat1","standard_parallel_1",gt],["lat2","standard_parallel_2",gt],["azimuth","Azimuth"],["alpha","azimuth",gt],["srsCode","name"]];c.forEach(h),Hs(e)}function Ws(e){if(typeof e=="object")return Ge(e);const t=jn(e);var i=Wn(e);if(t==="WKT2"){const n=zn(i);return Ge(n)}var s=i[0],a={};return Ht(i,a),Zs(a),a[s]}function $(e){var t=this;if(arguments.length===2){var i=arguments[1];typeof i=="string"?i.charAt(0)==="+"?$[e]=wi(arguments[1]):$[e]=Ws(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}}Nn($);function Kn(e){return typeof e=="string"}function Qn(e){return e in $}var $n=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"];function to(e){return $n.some(function(t){return e.indexOf(t)>-1})}var eo=["3857","900913","3785","102113"];function io(e){var t=Ot(e,"authority");if(t){var i=Ot(t,"epsg");return i&&eo.indexOf(i)>-1}}function so(e){var t=Ot(e,"extension");if(t)return Ot(t,"proj4")}function ao(e){return e[0]==="+"}function no(e){if(Kn(e)){if(Qn(e))return $[e];if(to(e)){var t=Ws(e);if(io(t))return $["EPSG:3857"];var i=so(t);return i?wi(i):t}if(ao(e))return wi(e)}else return e}function es(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 pt(e,t,i){var s=e*t;return i/Math.sqrt(1-s*s)}function ve(e){return e<0?-1:1}function k(e){return Math.abs(e)<=Z?e:e-ve(e)*Ce}function dt(e,t,i){var s=e*i,a=.5*e;return s=Math.pow((1-s)/(1+s),a),Math.tan(.5*(E-t))/s}function Ie(e,t){for(var i=.5*e,s,a,n=E-2*Math.atan(t),r=0;r<=15;r++)if(s=e*Math.sin(n),a=E-2*Math.atan(t*Math.pow((1-s)/(1+s),i))-n,n+=a,Math.abs(a)<=1e-10)return n;return-9999}function oo(){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=pt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function ro(e){var t=e.x,i=e.y;if(i*ft>90&&i*ft<-90&&t*ft>180&&t*ft<-180)return null;var s,a;if(Math.abs(Math.abs(i)-E)<=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(U+.5*i));else{var n=Math.sin(i),r=dt(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 lo(e){var t=e.x-this.x0,i=e.y-this.y0,s,a;if(this.sphere)a=E-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var n=Math.exp(-i/(this.a*this.k0));if(a=Ie(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 ho=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"];const co={init:oo,forward:ro,inverse:lo,names:ho};function go(){}function is(e){return e}var uo=["longlat","identity"];const Ao={init:go,forward:is,inverse:is,names:uo};var mo=[co,Ao],Te={},He=[];function qs(e,t){var i=He.length;return e.names?(He[i]=e,e.names.forEach(function(s){Te[s.toLowerCase()]=i}),this):(console.log(t),!0)}function Co(e){if(!e)return!1;var t=e.toLowerCase();if(typeof Te[t]<"u"&&He[Te[t]])return He[Te[t]]}function fo(){mo.forEach(qs)}const Io={start:fo,add:qs,get:Co};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 po=L.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};L.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};function vo(e,t,i,s){var a=e*e,n=t*t,r=(a-n)/a,l=0;s?(e*=1-r*(Tn+r*(Dn+r*Bn)),a=e*e,r=0):l=Math.sqrt(r);var h=(a-n)/n;return{es:r,e:l,ep2:h}}function yo(e,t,i,s,a){if(!e){var n=Ot(L,s);n||(n=po),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 q={};q.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};q.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};q.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};q.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};q.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};q.potsdam={towgs84:"598.1,73.7,418.2,0.202,0.045,-2.455,6.7",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};q.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};q.hermannskogel={towgs84:"577.326,90.129,463.919,5.137,1.474,5.297,2.4232",ellipse:"bessel",datumName:"Hermannskogel"};q.osni52={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"};q.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};q.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};q.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};q.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};q.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};q.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};q.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};q.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"};function bo(e,t,i,s,a,n,r){var l={};return e===void 0||e==="none"?l.datum_type=Ei:l.datum_type=Ln,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=Pt),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=Tt,l.datum_params[3]*=Ae,l.datum_params[4]*=Ae,l.datum_params[5]*=Ae,l.datum_params[6]=l.datum_params[6]/1e6+1)),r&&(l.datum_type=Yt,l.grids=r),l.a=i,l.b=s,l.es=a,l.ep2=n,l}var Ys={};function Mo(e,t){var i=new DataView(t),s=_o(i),a=Oo(i,s);a.nSubgrids>1&&console.log("Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored");var n=xo(i,a,s),r={header:a,subgrids:n};return Ys[e]=r,r}function Eo(e){if(e===void 0)return null;var t=e.split(",");return t.map(wo)}function wo(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:Ys[e]||null,isNull:!1}}function Zt(e){return e/3600*Math.PI/180}function _o(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 Oo(e,t){return{nFields:e.getInt32(8,t),nSubgridFields:e.getInt32(24,t),nSubgrids:e.getInt32(40,t),shiftType:_i(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 _i(e,t,i){return String.fromCharCode.apply(null,new Uint8Array(e.buffer.slice(t,i)))}function xo(e,t,i){for(var s=176,a=[],n=0;n<t.nSubgrids;n++){var r=So(e,s,i),l=No(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:[Zt(r.lowerLongitude),Zt(r.lowerLatitude)],del:[Zt(r.longitudeInterval),Zt(r.latitudeInterval)],lim:[h,c],count:r.gridNodeCount,cvs:ko(l)})}return a}function ko(e){return e.map(function(t){return[Zt(t.longitudeShift),Zt(t.latitudeShift)]})}function So(e,t,i){return{name:_i(e,t+8,t+16).trim(),parent:_i(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 No(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 It(e,t){if(!(this instanceof It))return new It(e);t=t||function(c){if(c)throw c};var i=no(e);if(typeof i!="object"){t(e);return}var s=It.projections.get(i.projName);if(!s){t(e);return}if(i.datumCode&&i.datumCode!=="none"){var a=Ot(q,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=yo(i.a,i.b,i.rf,i.ellps,i.sphere),r=vo(n.a,n.b,n.rf,i.R_A),l=Eo(i.nadgrids),h=i.datum||bo(i.datumCode,i.datum_params,n.a,n.b,r.es,r.ep2,l);es(this,i),es(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)}It.projections=Io;It.projections.start();function Lo(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===Pt?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===Tt?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 Js(e,t,i){var s=e.x,a=e.y,n=e.z?e.z:0,r,l,h,c;if(a<-E&&a>-1.001*E)a=-E;else if(a>E&&a<1.001*E)a=E;else{if(a<-E)return{x:-1/0,y:-1/0,z:e.z};if(a>E)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 Xs(e,t,i,s){var a=1e-12,n=a*a,r=30,l,h,c,d,u,g,m,f,C,y,I,b,M,_=e.x,x=e.y,w=e.z?e.z:0,S,D,P;if(l=Math.sqrt(_*_+x*x),h=Math.sqrt(_*_+x*x+w*w),l/i<a){if(S=0,h/i<a)return D=E,P=-s,{x:e.x,y:e.y,z:e.z}}else S=Math.atan2(x,_);c=w/h,d=l/h,u=1/Math.sqrt(1-t*(2-t)*d*d),f=d*(1-t)*u,C=c*u,M=0;do M++,m=i/Math.sqrt(1-t*C*C),P=l*f+w*C-m*(1-t*C*C),g=t*m/(m+P),u=1/Math.sqrt(1-g*(2-g)*d*d),y=d*(1-g)*u,I=c*u,b=I*f-y*C,f=y,C=I;while(b*b>n&&M<r);return D=Math.atan(I/Math.abs(y)),{x:S,y:D,z:P}}function Po(e,t,i){if(t===Pt)return{x:e.x+i[0],y:e.y+i[1],z:e.z+i[2]};if(t===Tt){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 To(e,t,i){if(t===Pt)return{x:e.x-i[0],y:e.y-i[1],z:e.z-i[2]};if(t===Tt){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,u=(e.y-a)/c,g=(e.z-n)/c;return{x:d+h*u-l*g,y:-h*d+u+r*g,z:l*d-r*u+g}}}function _e(e){return e===Pt||e===Tt}function Do(e,t,i){if(Lo(e,t)||e.datum_type===Ei||t.datum_type===Ei)return i;var s=e.a,a=e.es;if(e.datum_type===Yt){var n=ss(e,!1,i);if(n!==0)return;s=Ji,a=Xi}var r=t.a,l=t.b,h=t.es;if(t.datum_type===Yt&&(r=Ji,l=Pn,h=Xi),a===h&&s===r&&!_e(e.datum_type)&&!_e(t.datum_type))return i;if(i=Js(i,a,s),_e(e.datum_type)&&(i=Po(i,e.datum_type,e.datum_params)),_e(t.datum_type)&&(i=To(i,t.datum_type,t.datum_params)),i=Xs(i,h,r,l),t.datum_type===Yt){var c=ss(t,!0,i);if(c!==0)return}return i}function ss(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,u=h.ll[1]-c,g=h.ll[0]+(h.lim[0]-1)*h.del[0]+c,m=h.ll[1]+(h.lim[1]-1)*h.del[1]+c;if(!(u>s.y||d>s.x||m<s.y||g<s.x)&&(a=Bo(s,t,h),!isNaN(a.x)))break}return isNaN(a.x)?(console.log("Failed to find a grid shift table for location '"+-s.x*ft+" "+s.y*ft+" tried: '"+n+"'"),-1):(i.x=-a.x,i.y=a.y,0)}function Bo(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=as(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=as(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 as(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]},u=a.x*a.y,g=a.x*(1-a.y),m=(1-a.x)*(1-a.y),f=(1-a.x)*a.y;return n.x=m*l.x+g*h.x+f*d.x+u*c.x,n.y=m*l.y+g*h.y+f*d.y+u*c.y,n}function ns(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 Ks(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 Vo(e){os(e.x),os(e.y)}function os(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 Ro(e,t){return(e.datum.datum_type===Pt||e.datum.datum_type===Tt||e.datum.datum_type===Yt)&&t.datumCode!=="WGS84"||(t.datum.datum_type===Pt||t.datum.datum_type===Tt||t.datum.datum_type===Yt)&&e.datumCode!=="WGS84"}function Ze(e,t,i,s){var a;Array.isArray(i)?i=Ks(i):i={x:i.x,y:i.y,z:i.z,m:i.m};var n=i.z!==void 0;if(Vo(i),e.datum&&t.datum&&Ro(e,t)&&(a=new It("WGS84"),i=Ze(e,a,i,s),e=a),s&&e.axis!=="enu"&&(i=ns(e,!1,i)),e.projName==="longlat")i={x:i.x*Y,y:i.y*Y,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=Do(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*ft,y:i.y*ft,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"?ns(t,!0,i):(n||delete i.z,i)}var rs=It("WGS84");function li(e,t,i,s){var a,n,r;return Array.isArray(i)?(a=Ze(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=Ze(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 ls(e){return e instanceof It?e:e.oProj?e.oProj:It(e)}function ot(e,t,i){e=ls(e);var s=!1,a;return typeof t>"u"?(t=e,e=rs,s=!0):(typeof t.x<"u"||Array.isArray(t))&&(i=t,t=e,e=rs,s=!0),t=ls(t),i?li(e,t,i):(a={forward:function(n,r){return li(e,t,n,r)},inverse:function(n,r){return li(t,e,n,r)}},s&&(a.oProj=t),a)}var hs=6,Qs="AJSAJS",$s="AFAFAF",Wt=65,it=73,lt=79,ce=86,ge=90;const Fo={forward:ta,inverse:Uo,toPoint:ea};function ta(e,t){return t=t||5,Go(zo({lat:e[1],lon:e[0]}),t)}function Uo(e){var t=Bi(sa(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat,t.lon,t.lat]:[t.left,t.bottom,t.right,t.top]}function ea(e){var t=Bi(sa(e.toUpperCase()));return t.lat&&t.lon?[t.lon,t.lat]:[(t.left+t.right)/2,(t.top+t.bottom)/2]}function hi(e){return e*(Math.PI/180)}function cs(e){return 180*(e/Math.PI)}function zo(e){var t=e.lat,i=e.lon,s=6378137,a=.00669438,n=.9996,r,l,h,c,d,u,g,m=hi(t),f=hi(i),C,y;y=Math.floor((i+180)/6)+1,i===180&&(y=60),t>=56&&t<64&&i>=3&&i<12&&(y=32),t>=72&&t<84&&(i>=0&&i<9?y=31:i>=9&&i<21?y=33:i>=21&&i<33?y=35:i>=33&&i<42&&(y=37)),r=(y-1)*6-180+3,C=hi(r),l=a/(1-a),h=s/Math.sqrt(1-a*Math.sin(m)*Math.sin(m)),c=Math.tan(m)*Math.tan(m),d=l*Math.cos(m)*Math.cos(m),u=Math.cos(m)*(f-C),g=s*((1-a/4-3*a*a/64-5*a*a*a/256)*m-(3*a/8+3*a*a/32+45*a*a*a/1024)*Math.sin(2*m)+(15*a*a/256+45*a*a*a/1024)*Math.sin(4*m)-35*a*a*a/3072*Math.sin(6*m));var I=n*h*(u+(1-c+d)*u*u*u/6+(5-18*c+c*c+72*d-58*l)*u*u*u*u*u/120)+5e5,b=n*(g+h*Math.tan(m)*(u*u/2+(5-c+9*d+4*d*d)*u*u*u*u/24+(61-58*c+c*c+600*d-330*l)*u*u*u*u*u*u/720));return t<0&&(b+=1e7),{northing:Math.round(b),easting:Math.round(I),zoneNumber:y,zoneLetter:jo(t)}}function Bi(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,u,g,m,f,C,y,I,b,M=i-5e5,_=t;s<"N"&&(_-=1e7),y=(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)),u=Math.tan(b)*Math.tan(b),g=h*Math.cos(b)*Math.cos(b),m=r*(1-l)/Math.pow(1-l*Math.sin(b)*Math.sin(b),1.5),f=M/(d*n);var x=b-d*Math.tan(b)/m*(f*f/2-(5+3*u+10*g-4*g*g-9*h)*f*f*f*f/24+(61+90*u+298*g+45*u*u-252*h-3*g*g)*f*f*f*f*f*f/720);x=cs(x);var w=(f-(1+2*u+g)*f*f*f/6+(5-2*g+28*u-3*g*g+8*h+24*u*u)*f*f*f*f*f/120)/Math.cos(b);w=y+cs(w);var S;if(e.accuracy){var D=Bi({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:w}}else S={lat:x,lon:w};return S}function jo(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 Go(e,t){var i="00000"+e.easting,s="00000"+e.northing;return e.zoneNumber+e.zoneLetter+Ho(e.easting,e.northing,e.zoneNumber)+i.substr(i.length-5,t)+s.substr(s.length-5,t)}function Ho(e,t,i){var s=ia(i),a=Math.floor(e/1e5),n=Math.floor(t/1e5)%20;return Zo(a,n,s)}function ia(e){var t=e%hs;return t===0&&(t=hs),t}function Zo(e,t,i){var s=i-1,a=Qs.charCodeAt(s),n=$s.charCodeAt(s),r=a+e-1,l=n+t,h=!1;r>ge&&(r=r-ge+Wt-1,h=!0),(r===it||a<it&&r>it||(r>it||a<it)&&h)&&r++,(r===lt||a<lt&&r>lt||(r>lt||a<lt)&&h)&&(r++,r===it&&r++),r>ge&&(r=r-ge+Wt-1),l>ce?(l=l-ce+Wt-1,h=!0):h=!1,(l===it||n<it&&l>it||(l>it||n<it)&&h)&&l++,(l===lt||n<lt&&l>lt||(l>lt||n<lt)&&h)&&(l++,l===it&&l++),l>ce&&(l=l-ce+Wt-1);var c=String.fromCharCode(r)+String.fromCharCode(l);return c}function sa(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=ia(r),c=Wo(i.charAt(0),h),d=qo(i.charAt(1),h);d<Yo(l);)d+=2e6;var u=t-n;if(u%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`+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()})}}/*!
|
|
4
|
+
northing meters`+e;var g=u/2,m=0,f=0,C,y,I,b,M;return g>0&&(C=1e5/Math.pow(10,g),y=e.substring(n,n+g),m=parseFloat(y)*C,I=e.substring(n+g),f=parseFloat(I)*C),b=m+c,M=f+d,{easting:b,northing:M,zoneLetter:l,zoneNumber:r,accuracy:C}}function Wo(e,t){for(var i=Qs.charCodeAt(t-1),s=1e5,a=!1;i!==e.charCodeAt(0);){if(i++,i===it&&i++,i===lt&&i++,i>ge){if(a)throw"Bad character: "+e;i=Wt,a=!0}s+=1e5}return s}function qo(e,t){if(e>"V")throw"MGRSPoint given invalid Northing "+e;for(var i=$s.charCodeAt(t-1),s=0,a=!1;i!==e.charCodeAt(0);){if(i++,i===it&&i++,i===lt&&i++,i>ce){if(a)throw"Bad character: "+e;i=Wt,a=!0}s+=1e5}return s}function Yo(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 Xt(e,t,i){if(!(this instanceof Xt))return new Xt(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")}Xt.fromMGRS=function(e){return new Xt(ea(e))};Xt.prototype.toMGRS=function(e){return ta([this.x,this.y],e)};var Jo=1,Xo=.25,gs=.046875,us=.01953125,ds=.01068115234375,Ko=.75,Qo=.46875,$o=.013020833333333334,tr=.007120768229166667,er=.3645833333333333,ir=.005696614583333333,sr=.3076171875;function aa(e){var t=[];t[0]=Jo-e*(Xo+e*(gs+e*(us+e*ds))),t[1]=e*(Ko-e*(gs+e*(us+e*ds)));var i=e*e;return t[2]=i*(Qo-e*($o+e*tr)),i*=e,t[3]=i*(er-e*ir),t[4]=i*e*sr,t}function Qe(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 ar=20;function na(e,t,i){for(var s=1/(1-t),a=e,n=ar;n;--n){var r=Math.sin(a),l=1-t*r*r;if(l=(Qe(a,r,Math.cos(a),i)-e)*(l*Math.sqrt(l))*s,a-=l,Math.abs(l)<O)return a}return a}function nr(){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=aa(this.es),this.ml0=Qe(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))}function or(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,u=Math.pow(d,2),g=this.ep2*Math.pow(h,2),m=Math.pow(g,2),f=Math.abs(h)>O?Math.tan(i):0,C=Math.pow(f,2),y=Math.pow(C,2);a=1-this.es*Math.pow(l,2),d=d/Math.sqrt(a);var I=Qe(i,l,h,this.en);n=this.a*(this.k0*d*(1+u/6*(1-C+g+u/20*(5-18*C+y+14*g-58*C*g+u/42*(61+179*y-y*C-479*C)))))+this.x0,r=this.a*(this.k0*(I-this.ml0+l*s*d/2*(1+u/12*(5-C+9*g+4*m+u/30*(61+y-58*C+270*g-330*C*g+u/56*(1385+543*y-y*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 rr(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=na(t,this.es,this.en),Math.abs(i)<E){var u=Math.sin(i),g=Math.cos(i),m=Math.abs(g)>O?Math.tan(i):0,f=this.ep2*Math.pow(g,2),C=Math.pow(f,2),y=Math.pow(m,2),I=Math.pow(y,2);t=1-this.es*Math.pow(u,2);var b=n*Math.sqrt(t)/this.k0,M=Math.pow(b,2);t=t*m,s=i-t*M/(1-this.es)*.5*(1-M/12*(5+3*y-9*f*y+f-4*C-M/30*(61+90*y-252*f*y+45*I+46*f-M/56*(1385+3633*y+4095*I+1574*I*y)))),a=k(this.long0+b*(1-M/6*(1+2*y+f-M/20*(5+28*y+24*I+8*f*y+6*f-M/42*(61+662*y+1320*I+720*I*y))))/g)}else s=E*ve(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 lr=["Fast_Transverse_Mercator","Fast Transverse Mercator"];const De={init:nr,forward:or,inverse:rr,names:lr};function oa(e){var t=Math.exp(e);return t=(t-1/t)/2,t}function ut(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 hr(e){var t=1+e,i=t-1;return i===0?e:e*Math.log(t)/i}function cr(e){var t=Math.abs(e);return t=hr(t*(1+t/(ut(1,t)+1))),e<0?-t:t}function Vi(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 gr(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 ur(e){var t=Math.exp(e);return t=(t+1/t)/2,t}function ra(e,t,i){for(var s=Math.sin(t),a=Math.cos(t),n=oa(i),r=ur(i),l=2*a*r,h=-2*s*n,c=e.length-1,d=e[c],u=0,g=0,m=0,f,C;--c>=0;)f=g,C=u,g=d,u=m,d=-f+l*g-h*u+e[c],m=-C+h*g+l*u;return l=s*r,h=a*n,[l*d-h*m,l*m+h*d]}function dr(){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&&(De.init.apply(this),this.forward=De.forward,this.inverse=De.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=Vi(this.cbg,this.lat0);this.Zb=-this.Qn*(s+gr(this.gtu,2*s))}function Ar(e){var t=k(e.x-this.long0),i=e.y;i=Vi(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,ut(s,a*r)),t=cr(Math.tan(t));var l=ra(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 mr(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=ra(this.utg,2*i,2*t);i=i+n[0],t=t+n[1],t=Math.atan(oa(t));var r=Math.sin(i),l=Math.cos(i),h=Math.sin(t),c=Math.cos(t);i=Math.atan2(r*c,ut(h,c*l)),t=Math.atan2(h,c*l),s=k(t+this.long0),a=Vi(this.cgb,i)}else s=1/0,a=1/0;return e.x=s,e.y=a,e}var Cr=["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc","Transverse_Mercator","Transverse Mercator","tmerc"];const Be={init:dr,forward:Ar,inverse:mr,names:Cr};function fr(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 Ir="etmerc";function pr(){var e=fr(this.zone,this.long0);if(e===void 0)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(e)-183)*Y,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Be.init.apply(this),this.forward=Be.forward,this.inverse=Be.inverse}var vr=["Universal Transverse Mercator System","utm"];const yr={init:pr,names:vr,dependsOn:Ir};function Ri(e,t){return Math.pow((1-e)/(1+e),t)}var br=20;function Mr(){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+U)/(Math.pow(Math.tan(.5*this.lat0+U),this.C)*Ri(this.e*e,this.ratexp))}function Er(e){var t=e.x,i=e.y;return e.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*i+U),this.C)*Ri(this.e*Math.sin(i),this.ratexp))-E,e.x=this.C*t,e}function wr(e){for(var t=1e-14,i=e.x/this.C,s=e.y,a=Math.pow(Math.tan(.5*s+U)/this.K,1/this.C),n=br;n>0&&(s=2*Math.atan(a*Ri(this.e*Math.sin(e.y),-.5*this.e))-E,!(Math.abs(s-e.y)<t));--n)e.y=s;return n?(e.x=i,e.y=s,e):null}const Fi={init:Mr,forward:Er,inverse:wr};function _r(){Fi.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 Or(e){var t,i,s,a;return e.x=k(e.x-this.long0),Fi.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 xr(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,Fi.inverse.apply(this,[e]),e.x=k(e.x+this.long0),e}var kr=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"];const Sr={init:_r,forward:Or,inverse:xr,names:kr};function Nr(e,t,i){return t*=i,Math.tan(.5*(E+e))*Math.pow((1-t)/(1+t),.5*i)}function Lr(){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*pt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/dt(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=pt(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-E,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))}function Pr(e){var t=e.x,i=e.y,s=Math.sin(i),a=Math.cos(i),n,r,l,h,c,d,u=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(u)),e.x=this.a*n*a*Math.sin(u)+this.x0,e.y=this.a*n*(this.coslat0*s-this.sinlat0*a*Math.cos(u))+this.y0,e):(r=2*Math.atan(this.ssfn_(i,s,this.e))-E,h=Math.cos(r),l=Math.sin(r),Math.abs(this.coslat0)<=O?(c=dt(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(u)),e.y=n*l):(n=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*l+this.cosX0*h*Math.cos(u))),e.y=n*(this.cosX0*l-this.sinX0*h*Math.cos(u))+this.y0),e.x=n*h*Math.sin(u)+this.x0,e))}function Tr(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*Ie(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*Ie(this.e,Math.tan(.5*(E+n)));return e.x=t,e.y=i,e}var Dr=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"];const Br={init:Lr,forward:Pr,inverse:Tr,names:Dr,ssfn_:Nr};function Vr(){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 Rr(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 Fr(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,u=0;Math.abs(c-d)>1e-7;){if(++u>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 Ur=["somerc"];const zr={init:Vr,forward:Rr,inverse:Fr,names:Ur};var jt=1e-7;function jr(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 Gr(){var e,t,i,s,a,n,r,l,h,c,d=0,u,g=0,m=0,f=0,C=0,y=0,I=0;this.no_off=jr(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*Y),b||M)g=this.longc;else if(m=this.long1,C=this.lat1,f=this.long2,y=this.lat2,Math.abs(C-y)<=jt||(e=Math.abs(C))<=jt||Math.abs(e-E)<=jt||Math.abs(Math.abs(this.lat0)-E)<=jt||Math.abs(Math.abs(y)-E)<=jt)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(dt(this.e,this.lat0,l),this.B)):(this.B=1/t,this.A=this.k0,this.E=s=a=1),b||M?(b?(u=Math.asin(Math.sin(I)/s),M||(d=I)):(u=d,I=Math.asin(s*Math.sin(u))),this.lam0=g-Math.asin(.5*(a-1/a)*Math.tan(u))/this.B):(n=Math.pow(dt(this.e,C,Math.sin(C)),this.B),r=Math.pow(dt(this.e,y,Math.sin(y)),this.B),a=this.E/n,h=(r-n)/(r+n),c=this.E*this.E,c=(c-r*n)/(c+r*n),e=m-f,e<-Math.pi?f-=Ce:e>Math.pi&&(f+=Ce),this.lam0=k(.5*(m+f)-Math.atan(c*Math.tan(.5*this.B*(m-f))/h)/this.B),u=Math.atan(2*Math.sin(this.B*k(m-this.lam0))/(a-1/a)),d=I=Math.asin(s*Math.sin(u))),this.singam=Math.sin(u),this.cosgam=Math.cos(u),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*u,this.v_pole_n=this.ArB*Math.log(Math.tan(U-a)),this.v_pole_s=this.ArB*Math.log(Math.tan(U+a))}function Hr(e){var t={},i,s,a,n,r,l,h,c;if(e.x=e.x-this.lam0,Math.abs(Math.abs(e.y)-E)>O){if(r=this.E/Math.pow(dt(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)<jt?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 Zr(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?-E:E;else{if(h.y=this.E/Math.sqrt((1+l)/(1-l)),h.y=Ie(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 Wr=["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 qr={init:Gr,forward:Hr,inverse:Zr,names:Wr};function Yr(){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=pt(this.e,t,i),a=dt(this.e,this.lat1,t),n=Math.sin(this.lat2),r=Math.cos(this.lat2),l=pt(this.e,n,r),h=dt(this.e,this.lat2,n),c=dt(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 Jr(e){var t=e.x,i=e.y;Math.abs(2*Math.abs(i)-Math.PI)<=O&&(i=ve(i)*(E-2*O));var s=Math.abs(Math.abs(i)-E),a,n;if(s>O)a=dt(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 Xr(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=Ie(this.e,s),a===-9999)return null}else a=-E;return n=k(h/this.ns+this.long0),e.x=n,e.y=a,e}var Kr=["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 Qr={init:Yr,forward:Jr,inverse:Xr,names:Kr};function $r(){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 tl(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 el(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 il=["Krovak","krovak"];const sl={init:$r,forward:tl,inverse:el,names:il};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 ye(e){return 1-.25*e*(1+e/16*(3+1.25*e))}function be(e){return .375*e*(1+.25*e*(1+.46875*e))}function Me(e){return .05859375*e*e*(1+.75*e)}function Ee(e){return e*e*e*(35/3072)}function Kt(e,t,i){var s=t*i;return e/Math.sqrt(1-s*s)}function $t(e){return Math.abs(e)<E?e:e-ve(e)*Math.PI}function We(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 al(){this.sphere||(this.e0=ye(this.es),this.e1=be(this.es),this.e2=Me(this.es),this.e3=Ee(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0))}function nl(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=Kt(this.a,this.e,n),h=Math.tan(a)*Math.tan(a),c=s*Math.cos(a),d=c*c,u=this.es*r*r/(1-this.es),g=this.a*tt(this.e0,this.e1,this.e2,this.e3,a);t=l*c*(1-d*h*(1/6-(8-h+8*u)*d/120)),i=g-this.ml0+l*n/r*d*(.5+(5-h+6*u)*d/24)}return e.x=t+this.x0,e.y=i+this.y0,e}function ol(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=We(r,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(l)-E)<=O)return e.x=this.long0,e.y=E,i<0&&(e.y*=-1),e;var h=Kt(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),u=t*this.a/h,g=u*u;s=l-h*Math.tan(l)/c*u*u*(.5-(1+3*d)*u*u/24),a=u*(1-g*(d/3+(1+3*d)*d*g/15))/Math.cos(l)}return e.x=k(a+this.long0),e.y=$t(s),e}var rl=["Cassini","Cassini_Soldner","cass"];const ll={init:al,forward:nl,inverse:ol,names:rl};function wt(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 hl=1,cl=2,gl=3,ul=4;function dl(){var e=Math.abs(this.lat0);if(Math.abs(e-E)<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=wt(this.e,1),this.mmf=.5/(1-this.es),this.apa=bl(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=wt(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 Al(e){var t,i,s,a,n,r,l,h,c,d,u=e.x,g=e.y;if(u=k(u-this.long0),this.sphere){if(n=Math.sin(g),d=Math.cos(g),s=Math.cos(u),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(u),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(g+this.lat0)<O)return null;i=U-g*.5,i=2*(this.mode===this.S_POLE?Math.cos(i):Math.sin(i)),t=i*Math.sin(u),i*=s}}else{switch(l=0,h=0,c=0,s=Math.cos(u),a=Math.sin(u),n=Math.sin(g),r=wt(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=E+g,r=this.qp-r;break;case this.S_POLE:c=g-E,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 ml(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,u,g=0;if(u=Math.sqrt(t*t+i*i),a=u*.5,a>1)return null;switch(a=2*Math.asin(a),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(g=Math.sin(a),d=Math.cos(a)),this.mode){case this.EQUIT:a=Math.abs(u)<=O?0:Math.asin(i*g/u),t*=g,i=d*u;break;case this.OBLIQ:a=Math.abs(u)<=O?this.lat0:Math.asin(d*this.sinph0+i*g*this.cosph0/u),t*=g*this.cosph0,i=(d-Math.sin(a)*this.sinph0)*u;break;case this.N_POLE:i=-i,a=E-a;break;case this.S_POLE:a-=E;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=Ml(Math.asin(c),this.apa)}return e.x=k(this.long0+s),e.y=a,e}var Cl=.3333333333333333,fl=.17222222222222222,Il=.10257936507936508,pl=.06388888888888888,vl=.0664021164021164,yl=.016415012942191543;function bl(e){var t,i=[];return i[0]=e*Cl,t=e*e,i[0]+=t*fl,i[1]=t*pl,t*=e,i[0]+=t*Il,i[1]+=t*vl,i[2]=t*yl,i}function Ml(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 El=["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"];const wl={init:dl,forward:Al,inverse:ml,names:El,S_POLE:hl,N_POLE:cl,EQUIT:gl,OBLIQ:ul};function xt(e){return Math.abs(e)>1&&(e=e>1?1:-1),Math.asin(e)}function _l(){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=pt(this.e3,this.sin_po,this.cos_po),this.qs1=wt(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=pt(this.e3,this.sin_po,this.cos_po),this.qs2=wt(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=wt(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 Ol(e){var t=e.x,i=e.y;this.sin_phi=Math.sin(i),this.cos_phi=Math.cos(i);var s=wt(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 xl(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 kl(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 Sl=["Albers_Conic_Equal_Area","Albers","aea"];const Nl={init:_l,forward:Ol,inverse:xl,names:Sl,phi1z:kl};function Ll(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1}function Pl(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 Tl(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 Dl=["gnom"];const Bl={init:Ll,forward:Pl,inverse:Tl,names:Dl};function Vl(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*E:E;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 Rl(){this.sphere||(this.k0=pt(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))}function Fl(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=wt(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 Ul(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=Vl(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 zl=["cea"];const jl={init:Rl,forward:Fl,inverse:Ul,names:zl};function Gl(){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 Hl(e){var t=e.x,i=e.y,s=k(t-this.long0),a=$t(i-this.lat0);return e.x=this.x0+this.a*s*this.rc,e.y=this.y0+this.a*a,e}function Zl(e){var t=e.x,i=e.y;return e.x=k(this.long0+(t-this.x0)/(this.a*this.rc)),e.y=$t(this.lat0+(i-this.y0)/this.a),e}var Wl=["Equirectangular","Equidistant_Cylindrical","eqc"];const ql={init:Gl,forward:Hl,inverse:Zl,names:Wl};var As=20;function Yl(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=ye(this.es),this.e1=be(this.es),this.e2=Me(this.es),this.e3=Ee(this.es),this.ml0=this.a*tt(this.e0,this.e1,this.e2,this.e3,this.lat0)}function Jl(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*($t(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=Kt(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 Xl(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=As;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 u,g,m,f,C;for(n=As;n;--n)if(C=this.e*Math.sin(h),u=Math.sqrt(1-C*C)*Math.tan(h),g=this.a*tt(this.e0,this.e1,this.e2,this.e3,h),m=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),f=g/this.a,c=(r*(u*f+1)-f-.5*u*(f*f+l))/(this.es*Math.sin(2*h)*(f*f+l-2*r*f)/(4*u)+(r-f)*(u*m-2/Math.sin(2*h))-m),h-=c,Math.abs(c)<=O){i=h;break}u=Math.sqrt(1-this.es*Math.pow(Math.sin(i),2))*Math.tan(i),t=k(this.long0+Math.asin(s*u/this.a)/Math.sin(i))}return e.x=t,e.y=i,e}var Kl=["Polyconic","poly"];const Ql={init:Yl,forward:Jl,inverse:Xl,names:Kl};function $l(){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 th(e){var t,i=e.x,s=e.y,a=s-this.lat0,n=i-this.long0,r=a/Ae*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,u=l,g=1,m=0,f,C,y=0,I=0;for(t=1;t<=6;t++)f=g*d-m*u,C=m*d+g*u,g=f,m=C,y=y+this.B_re[t]*g-this.B_im[t]*m,I=I+this.B_im[t]*g+this.B_re[t]*m;return e.x=I*this.a+this.x0,e.y=y*this.a+this.y0,e}function eh(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,u,g=0,m=0;for(t=1;t<=6;t++)d=h*r-c*l,u=c*r+h*l,h=d,c=u,g=g+this.C_re[t]*h-this.C_im[t]*c,m=m+this.C_im[t]*h+this.C_re[t]*c;for(var f=0;f<this.iterations;f++){var C=g,y=m,I,b,M=r,_=l;for(t=2;t<=6;t++)I=C*g-y*m,b=y*g+C*m,C=I,y=b,M=M+(t-1)*(this.B_re[t]*C-this.B_im[t]*y),_=_+(t-1)*(this.B_im[t]*C+this.B_re[t]*y);C=1,y=0;var x=this.B_re[1],w=this.B_im[1];for(t=2;t<=6;t++)I=C*g-y*m,b=y*g+C*m,C=I,y=b,x=x+t*(this.B_re[t]*C-this.B_im[t]*y),w=w+t*(this.B_im[t]*C+this.B_re[t]*y);var S=x*x+w*w;g=(M*x+_*w)/S,m=(_*x-M*w)/S}var D=g,P=m,R=1,B=0;for(t=1;t<=9;t++)R=R*D,B=B+this.D[t]*R;var Q=this.lat0+B*Ae*1e5,ee=this.long0+P;return e.x=ee,e.y=Q,e}var ih=["New_Zealand_Map_Grid","nzmg"];const sh={init:$l,forward:th,inverse:eh,names:ih};function ah(){}function nh(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 oh(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 rh=["Miller_Cylindrical","mill"];const lh={init:ah,forward:nh,inverse:oh,names:rh};var hh=20;function ch(){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=aa(this.es)}function gh(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=hh;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*Qe(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 uh(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=$t(t)):(t=na(e.y/this.a,this.es,this.en),a=Math.abs(t),a<E?(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<E&&(s=this.long0)),e.x=s,e.y=t,e}var dh=["Sinusoidal","sinu"];const Ah={init:ch,forward:gh,inverse:uh,names:dh};function mh(){}function Ch(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 fh(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 Ih=["Mollweide","moll"];const ph={init:mh,forward:Ch,inverse:fh,names:Ih};function vh(){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=ye(this.es),this.e1=be(this.es),this.e2=Me(this.es),this.e3=Ee(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=pt(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=pt(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 yh(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 bh(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=$t(this.g-i/this.a),e.x=a,e.y=s,e;var r=this.g-i/this.a;return s=We(r,this.e0,this.e1,this.e2,this.e3),a=k(this.long0+n/this.ns),e.x=a,e.y=s,e}var Mh=["Equidistant_Conic","eqdc"];const Eh={init:vh,forward:yh,inverse:bh,names:Mh};function wh(){this.R=this.a}function _h(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)-E)<=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),u=d/(c+d-1),g=u*u,m=u*(2/c-1),f=m*m,C=Math.PI*this.R*(l*(u-f)+Math.sqrt(h*(u-f)*(u-f)-(f+h)*(g-f)))/(f+h);s<0&&(C=-C),a=this.x0+C;var y=h+u;return C=Math.PI*this.R*(m*y-l*Math.sqrt((f+h)*(h+1)-y*y))/(f+h),i>=0?n=this.y0+C:n=this.y0-C,e.x=a,e.y=n,e}function Oh(e){var t,i,s,a,n,r,l,h,c,d,u,g,m;return e.x-=this.x0,e.y-=this.y0,u=Math.PI*this.R,s=e.x/u,a=e.y/u,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,m=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),u=3*m/c/d,Math.abs(u)>1&&(u>=0?u=1:u=-1),g=Math.acos(u)/3,e.y>=0?i=(-d*Math.cos(g+Math.PI/3)-l/3/h)*Math.PI:i=-(-d*Math.cos(g+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 xh=["Van_der_Grinten_I","VanDerGrinten","vandg"];const kh={init:wh,forward:_h,inverse:Oh,names:xh};function Sh(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)}function Nh(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,u,g,m,f,C,y,I,b,M,_,x,w,S,D,P,R,B,Q;return this.sphere?Math.abs(this.sin_p12-1)<=O?(e.x=this.x0+this.a*(E-i)*Math.sin(n),e.y=this.y0-this.a*(E-i)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(e.x=this.x0+this.a*(E+i)*Math.sin(n),e.y=this.y0+this.a*(E+i)*Math.cos(n),e):(S=this.sin_p12*s+this.cos_p12*a*Math.cos(n),x=Math.acos(S),w=x?x/Math.sin(x):1,e.x=this.x0+this.a*w*a*Math.sin(n),e.y=this.y0+this.a*w*(this.cos_p12*s-this.sin_p12*a*Math.cos(n)),e):(r=ye(this.es),l=be(this.es),h=Me(this.es),c=Ee(this.es),Math.abs(this.sin_p12-1)<=O?(d=this.a*tt(r,l,h,c,E),u=this.a*tt(r,l,h,c,i),e.x=this.x0+(d-u)*Math.sin(n),e.y=this.y0-(d-u)*Math.cos(n),e):Math.abs(this.sin_p12+1)<=O?(d=this.a*tt(r,l,h,c,E),u=this.a*tt(r,l,h,c,i),e.x=this.x0+(d+u)*Math.sin(n),e.y=this.y0+(d+u)*Math.cos(n),e):(g=s/a,m=Kt(this.a,this.e,this.sin_p12),f=Kt(this.a,this.e,s),C=Math.atan((1-this.es)*g+this.es*m*this.sin_p12/(f*a)),y=Math.atan2(Math.sin(n),this.cos_p12*Math.tan(C)-this.sin_p12*Math.cos(n)),y===0?D=Math.asin(this.cos_p12*Math.sin(C)-this.sin_p12*Math.cos(C)):Math.abs(Math.abs(y)-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(y)),I=this.e*this.sin_p12/Math.sqrt(1-this.es),b=this.e*this.cos_p12*Math.cos(y)/Math.sqrt(1-this.es),M=I*b,_=b*b,P=D*D,R=P*D,B=R*D,Q=B*D,x=m*D*(1-P*_*(1-_)/6+R/8*M*(1-2*_)+B/120*(_*(4-7*_)-3*I*I*(1-7*_))-Q/48*M),e.x=this.x0+x*Math.sin(y),e.y=this.y0+x*Math.cos(y),e))}function Lh(e){e.x-=this.x0,e.y-=this.y0;var t,i,s,a,n,r,l,h,c,d,u,g,m,f,C,y,I,b,M,_,x,w,S,D;return this.sphere?(t=Math.sqrt(e.x*e.x+e.y*e.y),t>2*E*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)-E,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=ye(this.es),c=be(this.es),d=Me(this.es),u=Ee(this.es),Math.abs(this.sin_p12-1)<=O?(g=this.a*tt(h,c,d,u,E),t=Math.sqrt(e.x*e.x+e.y*e.y),m=g-t,r=We(m/this.a,h,c,d,u),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?(g=this.a*tt(h,c,d,u,E),t=Math.sqrt(e.x*e.x+e.y*e.y),m=t-g,r=We(m/this.a,h,c,d,u),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),y=Math.atan2(e.x,e.y),f=Kt(this.a,this.e,this.sin_p12),I=Math.cos(y),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/f,w=x-M*(1+M)*Math.pow(x,3)/6-_*(1+3*M)*Math.pow(x,4)/24,S=1-M*w*w/2-x*w*w*w/6,C=Math.asin(this.sin_p12*Math.cos(w)+this.cos_p12*Math.sin(w)*I),n=k(this.long0+Math.asin(Math.sin(y)*Math.sin(w)/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 Ph=["Azimuthal_Equidistant","aeqd"];const Th={init:Sh,forward:Nh,inverse:Lh,names:Ph};function Dh(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)}function Bh(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 Vh(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)-E,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 Rh=["ortho"];const Fh={init:Dh,forward:Bh,inverse:Vh,names:Rh};var H={FRONT:1,RIGHT:2,BACK:3,LEFT:4,TOP:5,BOTTOM:6},z={AREA_0:1,AREA_1:2,AREA_2:3,AREA_3:4};function Uh(){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>=E-U/2?this.face=H.TOP:this.lat0<=-(E-U/2)?this.face=H.BOTTOM:Math.abs(this.long0)<=U?this.face=H.FRONT:Math.abs(this.long0)<=E+U?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 zh(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=E-i,s>=U&&s<=E+U?(h.value=z.AREA_0,a=s-E):s>E+U||s<=-(E+U)?(h.value=z.AREA_1,a=s>0?s-Z:s+Z):s>-(E+U)&&s<=-U?(h.value=z.AREA_2,a=s+E):(h.value=z.AREA_3,a=s);else if(this.face===H.BOTTOM)n=E+i,s>=U&&s<=E+U?(h.value=z.AREA_0,a=-s+E):s<U&&s>=-U?(h.value=z.AREA_1,a=-s):s<-U&&s>=-(E+U)?(h.value=z.AREA_2,a=-s-E):(h.value=z.AREA_3,a=s>0?-s+Z:-s-Z);else{var c,d,u,g,m,f,C;this.face===H.RIGHT?s=Jt(s,+E):this.face===H.BACK?s=Jt(s,+Z):this.face===H.LEFT&&(s=Jt(s,-E)),g=Math.sin(i),m=Math.cos(i),f=Math.sin(s),C=Math.cos(s),c=m*C,d=m*f,u=g,this.face===H.FRONT?(n=Math.acos(c),a=Oe(n,u,d,h)):this.face===H.RIGHT?(n=Math.acos(d),a=Oe(n,u,-c,h)):this.face===H.BACK?(n=Math.acos(-c),a=Oe(n,u,-d,h)):this.face===H.LEFT?(n=Math.acos(-d),a=Oe(n,u,c,h)):(n=a=0,h.value=z.AREA_0)}return l=Math.atan(12/Z*(a+Math.acos(Math.sin(a)*Math.cos(U))-E)),r=Math.sqrt((1-Math.cos(n))/(Math.cos(l)*Math.cos(l))/(1-Math.cos(Math.atan(1/Math.cos(a))))),h.value===z.AREA_1?l+=E:h.value===z.AREA_2?l+=Z:h.value===z.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 jh(e){var t={lam:0,phi:0},i,s,a,n,r,l,h,c,d,u={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)?u.value=z.AREA_0:e.y>=0&&e.y>=Math.abs(e.x)?(u.value=z.AREA_1,i-=E):e.x<0&&-e.x>=Math.abs(e.y)?(u.value=z.AREA_2,i=i<0?i+Z:i-Z):(u.value=z.AREA_3,i+=E),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=E-c,u.value===z.AREA_0?t.lam=l+E:u.value===z.AREA_1?t.lam=l<0?l+Z:l-Z:u.value===z.AREA_2?t.lam=l-E:t.lam=l;else if(this.face===H.BOTTOM)c=Math.acos(h),t.phi=c-E,u.value===z.AREA_0?t.lam=-l+E:u.value===z.AREA_1?t.lam=-l:u.value===z.AREA_2?t.lam=-l-E:t.lam=l<0?-l-Z:-l+Z;else{var g,m,f;g=h,d=g*g,d>=1?f=0:f=Math.sqrt(1-d)*Math.sin(l),d+=f*f,d>=1?m=0:m=Math.sqrt(1-d),u.value===z.AREA_1?(d=m,m=-f,f=d):u.value===z.AREA_2?(m=-m,f=-f):u.value===z.AREA_3&&(d=m,m=f,f=-d),this.face===H.RIGHT?(d=g,g=-m,m=d):this.face===H.BACK?(g=-g,m=-m):this.face===H.LEFT&&(d=g,g=m,m=-d),t.phi=Math.acos(-f)-E,t.lam=Math.atan2(m,g),this.face===H.RIGHT?t.lam=Jt(t.lam,-E):this.face===H.BACK?t.lam=Jt(t.lam,-Z):this.face===H.LEFT&&(t.lam=Jt(t.lam,+E))}if(this.es!==0){var C,y,I;C=t.phi<0?1:0,y=Math.tan(t.phi),I=this.b/Math.sqrt(y*y+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 Oe(e,t,i,s){var a;return e<O?(s.value=z.AREA_0,a=0):(a=Math.atan2(t,i),Math.abs(a)<=U?s.value=z.AREA_0:a>U&&a<=E+U?(s.value=z.AREA_1,a-=E):a>E+U||a<=-(E+U)?(s.value=z.AREA_2,a=a>=0?a-Z:a+Z):(s.value=z.AREA_3,a+=E)),a}function Jt(e,t){var i=e+t;return i<-Z?i+=Ce:i>+Z&&(i-=Ce),i}var Gh=["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"];const Hh={init:Uh,forward:zh,inverse:jh,names:Gh};var Oi=[[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]],ue=[[-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]],la=.8487,ha=1.3523,ca=ft/5,Zh=1/ca,qt=18,qe=function(e,t){return e[0]+t*(e[1]+t*(e[2]+t*e[3]))},Wh=function(e,t){return e[1]+t*(2*e[2]+t*3*e[3])};function qh(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 Yh(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"}function Jh(e){var t=k(e.x-this.long0),i=Math.abs(e.y),s=Math.floor(i*ca);s<0?s=0:s>=qt&&(s=qt-1),i=ft*(i-Zh*s);var a={x:qe(Oi[s],i)*t,y:qe(ue[s],i)};return e.y<0&&(a.y=-a.y),a.x=a.x*this.a*la+this.x0,a.y=a.y*this.a*ha+this.y0,a}function Xh(e){var t={x:(e.x-this.x0)/(this.a*la),y:Math.abs(e.y-this.y0)/(this.a*ha)};if(t.y>=1)t.x/=Oi[qt][0],t.y=e.y<0?-E:E;else{var i=Math.floor(t.y*qt);for(i<0?i=0:i>=qt&&(i=qt-1);;)if(ue[i][0]>t.y)--i;else if(ue[i+1][0]<=t.y)++i;else break;var s=ue[i],a=5*(t.y-s[0])/(ue[i+1][0]-s[0]);a=qh(function(n){return(qe(s,n)-t.y)/Wh(s,n)},a,O,100),t.x/=qe(Oi[i],a),t.y=(5*i+a)*Y,e.y<0&&(t.y=-t.y)}return t.x=k(t.x+this.long0),t}var Kh=["Robinson","robin"];const Qh={init:Yh,forward:Jh,inverse:Xh,names:Kh};function $h(){this.name="geocent"}function tc(e){var t=Js(e,this.es,this.a);return t}function ec(e){var t=Xs(e,this.es,this.a,this.b);return t}var ic=["Geocentric","geocentric","geocent","Geocent"];const sc={init:$h,forward:tc,inverse:ec,names:ic};var X={N_POLE:0,S_POLE:1,EQUIT:2,OBLIQ:3},ie={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 ac(){if(Object.keys(ie).forEach((function(i){if(typeof this[i]>"u")this[i]=ie[i].def;else{if(ie[i].num&&isNaN(this[i]))throw new Error("Invalid parameter value, must be numeric "+i+" = "+this[i]);ie[i].num&&(this[i]=parseFloat(this[i]))}ie[i].degrees&&(this[i]=this[i]*Y)}).bind(this)),Math.abs(Math.abs(this.lat0)-E)<O?this.mode=this.lat0<0?X.S_POLE:X.N_POLE:Math.abs(this.lat0)<O?this.mode=X.EQUIT:(this.mode=X.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 nc(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 X.OBLIQ:n=this.sinph0*t+this.cosph0*i*s;break;case X.EQUIT:n=i*s;break;case X.S_POLE:n=-t;break;case X.N_POLE:n=t;break}switch(n=this.pn1/(this.p-n),a=n*i*Math.sin(e.x),this.mode){case X.OBLIQ:n*=this.cosph0*t-this.sinph0*i*s;break;case X.EQUIT:n*=t;break;case X.N_POLE:n*=-(i*s);break;case X.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 oc(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=ut(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 X.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 X.EQUIT:t.y=Math.asin(e.y*l/n),e.y=r*n,e.x*=l;break;case X.N_POLE:t.y=Math.asin(r),e.y=-e.y;break;case X.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 rc=["Tilted_Perspective","tpers"];const lc={init:ac,forward:nc,inverse:oc,names:rc};function hc(){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 cc(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/ut(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/ut(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/ut(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/ut(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/ut(n,s))));return e.x=e.x*this.a,e.y=e.y*this.a,e}function gc(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)*ut(1,s)):(i=Math.tan(e.x/this.radius_g_1),s=Math.tan(e.y/this.radius_g_1)*ut(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 uc=["Geostationary Satellite View","Geostationary_Satellite","geos"];const dc={init:hc,forward:cc,inverse:gc,names:uc};function Ac(e){e.Proj.projections.add(De),e.Proj.projections.add(Be),e.Proj.projections.add(yr),e.Proj.projections.add(Sr),e.Proj.projections.add(Br),e.Proj.projections.add(zr),e.Proj.projections.add(qr),e.Proj.projections.add(Qr),e.Proj.projections.add(sl),e.Proj.projections.add(ll),e.Proj.projections.add(wl),e.Proj.projections.add(Nl),e.Proj.projections.add(Bl),e.Proj.projections.add(jl),e.Proj.projections.add(ql),e.Proj.projections.add(Ql),e.Proj.projections.add(sh),e.Proj.projections.add(lh),e.Proj.projections.add(Ah),e.Proj.projections.add(ph),e.Proj.projections.add(Eh),e.Proj.projections.add(kh),e.Proj.projections.add(Th),e.Proj.projections.add(Fh),e.Proj.projections.add(Hh),e.Proj.projections.add(Qh),e.Proj.projections.add(sc),e.Proj.projections.add(lc),e.Proj.projections.add(dc)}ot.defaultDatum="WGS84";ot.Proj=It;ot.WGS84=new ot.Proj("WGS84");ot.Point=Xt;ot.toPoint=Ks;ot.defs=$;ot.nadgrid=Mo;ot.transform=Ze;ot.mgrs=Fo;ot.version="__VERSION__";Ac(ot);async function mc(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(ot.defs(s)===void 0){const a=await A.Fetcher.fetchText(`https://epsg.io/${t}.proj4`);Ls.registerCRS(s,a)}return s}throw new Error(`Could not find projection for ${e}`)}const Ui={loadProjCrsIfNeeded:mc};async function Cc(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 u=[],g=c.getFlatCoordinates(),m=c.getStride();if(!(m>=3&&g[2]!=null&&g[2]!==a)){for(let f=0;f<g.length;f+=m){const C=new Ct(t,g[f+0],g[f+1],m>=3?g[f+2]:a);u.push(C),r.push(C)}l.set(h.ol_uid,u)}}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 u=d,g=u.getCoordinates();for(let m=0;m<g.length;m+=1)g[m][2]=c[m].values[2]+s;u.setCoordinates(g);break}case"MultiLineString":case"Polygon":{const u=d,g=u.getCoordinates();let m=0;for(let f=0;f<g.length;f+=1)for(let C=0;C<g[f].length;C+=1)g[f][C][2]=c[m].values[2]+s,m+=1;u.setCoordinates(g);break}case"MultiPolygon":{const u=d,g=u.getCoordinates();let m=0;for(let f=0;f<g.length;f+=1)for(let C=0;C<g[f].length;C+=1)for(let y=0;y<g[f][C].length;y+=1)g[f][C][y][2]=c[m].values[2]+s,m+=1;u.setCoordinates(g);break}case"Point":{const u=d,g=u.getCoordinates();g[2]=c[0].values[2]+s,u.setCoordinates(g);break}}}console.debug(`Fetched all missing altitudes in ${n.getElapsedTime()}s`),n.stop()}function fc(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 u=0;u<h[c][d].length;u+=1)h[c][d][u][2]=t;l.setCoordinates(h);break}case"Point":{const l=a,h=l.getCoordinates();h[2]=t,l.setCoordinates(h);break}}}}async function Ic(e,t,i,s){const a=await Ui.loadProjCrsIfNeeded(i??"EPSG:4326");return t.readFeatures(e,{dataProjection:a,featureProjection:s})}function pc(e,t,i,s){return ga(t.readFeatures(e,{dataProjection:i,featureProjection:s}))}function vc(e,t){const i=new A.Group,s=new Qa,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 ga(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 Qt={fetchZCoordinates:Cc,fillZCoordinates:fc,readFeatures:Ic,readSimpleFeatures:pc,toMeshes:vc,toSimpleFeatures:ga},yc=new Ja,bc=new Xa,Mc=new Ka,ht={dataProjection:"EPSG:4326",elevation:0,fetchElevation:!1,fetchElevationFast:!1,fetchElevationOffset:.1,noDataValue:0};class Ec{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=xc(i);return await ji(t,s,this.options)}}class zi{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 kc(t,i,this.format,this.options)}}class wc extends zi{constructor(t){super(bc,t)}}class _c extends zi{constructor(t){super(Mc,t)}}async function ji(e,t,i){const s=await Ui.loadProjCrsIfNeeded(i.dataProjection??ht.dataProjection),a=t.flatMap(l=>yc.readFeatures(l,{dataProjection:s,featureProjection:i.featureProjection})),n=Qt.toSimpleFeatures(a);if(i.fetchElevation??ht.fetchElevation){const l=i.fetchElevationFast??ht.fetchElevationFast,h=i.fetchElevationOffset??ht.fetchElevationOffset,c=i.noDataValue??ht.noDataValue;await Qt.fetchZCoordinates(n,i.featureProjection,Rs(e,l,c),h,c)}return n}function Oc(e,t,i=ht.elevation,s=ht.noDataValue){const a=(Array.isArray(t==null?void 0:t.elevation)?t.elevation[0]:t==null?void 0:t.elevation)??i;return Qt.fillZCoordinates(e,a,s),Qt.toMeshes(e,t)}function xc(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 kc(e,t,i,s){const a=Qt.readSimpleFeatures(t,i,s.dataProjection??ht.dataProjection,s.featureProjection);if(s.fetchElevation??ht.fetchElevation){const r=s.fetchElevationFast??ht.fetchElevationFast,l=s.fetchElevationOffset??ht.fetchElevationOffset,h=s.noDataValue??ht.noDataValue;await Qt.fetchZCoordinates(a,s.featureProjection,Rs(e,r,h),l,h)}return a}class Sc extends Ti{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=Oc(s,{elevation:i.elevation,fill:{color:Zi.DEFAULT_SURFACE_COLOR},stroke:{color:Zi.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 Nc(e,t){const i=await Pi.load(e,Ya.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 Lc{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 Nc(this.options.url,this.options.featureProjection);return await ji(t,i,{...this.options,dataProjection:this.options.featureProjection})}}async function Pc(e,t){return(await Pi.load(e,$a.ShapefileLoader,{fetch:A.Fetcher.fetch,gis:{_targetCrs:t,format:"geojson",reproject:!0},shapefile:{shape:"geojson-table"}})).features}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 ji(t,i,{...this.options,dataProjection:this.options.featureProjection})}}class xi 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",Dc="yellow",Bc="#ffd500",Vc="#73d1bd",Ve=5,Rc=new A.Vector2,ua=new A.Color(Et),Fc=new A.Color,ci=Fc.copyLinearToSRGB(ua),ms=`#${new A.Color(tn.getContrastColor(ua)).getHexString()}`,gi=12,Uc="bold",ui=[];class zc extends Ti{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,Rc),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(),u=[];switch(d){case"LineString":case"MultiPoint":u.push(...c.getCoordinates());break;case"MultiLineString":case"Polygon":u.push(...c.getCoordinates()[0]);break;case"MultiPolygon":u.push(...c.getCoordinates()[0][0]);break;case"Point":u.push(c.getCoordinates());break}if(u.length>0){const g=u.map(f=>this.createLabel(r(f),h)),m=new A.Group;g.forEach(f=>{m.add(f),this._labels.push(f)});for(const[f,C]of Object.entries(h.getProperties()))f!=="geometry"&&(m.userData[f]=C);a.add(m)}}}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 xi(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&&(ui.length=0,this.raycastLabel(a,i,ui),ui.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(${ci.r*255} ${ci.g*255} ${ci.b*255})`,i.style.borderWidth="1px",i.style.borderStyle="solid",i.style.borderColor=ms,i.style.borderRadius=`${A.MathUtils.clamp(gi-4,5,10)}px`,i.style.color=ms;const a=A.MathUtils.clamp(Math.round(gi/4),2,10);i.style.padding=`${a}px ${a}px ${a}px ${a}px`,i.style.fontSize=`${gi}px`,i.style.fontWeight=Uc,i.style.pointerEvents="auto",this._styleCallback&&this._styleCallback(i,s)}}class jc extends nt{constructor(i){super({color:Et,showLine:!0,showVertexLabels:!0,showVertices:!0,vertexRadius:Ve});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 Gc=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 Ec({...c}));break;case"geopackage":n.push(new Lc({...c}));break;case"gpx":n.push(new wc({...c}));break;case"kml":n.push(new _c({...c}));break;case"ol":n.push(new zi(h.format,{...c}));break;case"shapefile":n.push(new Tc({...c}));break;default:return h}}switch(r){case"label":l=new zc(n,s);break;case"mesh":l=new Sc(n);break;case"shape":l=new jc(n[0]);break;default:return r}return Promise.resolve(l)},ki={featureCollection:pn,flatPointcloud:bn,pointcloud:wn,tiledIfc:Mn,vector:Gc};async function Hc(e,t){const i={dataset:t,instance:e},s=ki[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 Zc(e,t){ki[e]!=null&&console.warn(`replacing entity builder for dataset type '${e}'`),ki[e]=t}const Wc={getEntity:Hc},di=e=>({name:e.filename,source:{type:"csv",url:e.file},type:"flatPointcloud",visible:!0}),Cs=e=>({name:e.filename,source:{type:e.filename.endsWith(".copc.laz")?"copc":"las",url:e.file},type:"flatPointcloud",visible:!0}),qc=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}},Yc=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}},se=e=>e.configuration.importedVectorDatasetRendering==="overlay"?qc(e):Yc(e),Ye={csv:di,dsv:di,"geo.json":se,geojson:se,gpkg:se,gpx:se,kml:se,las:Cs,laz:Cs,tsv:di};function Jc(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 Xc(e,t){const i=Jc(e,t),s=Kc(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 Kc(e){const t=Object.keys(Ye);for(const i of t)if(e.endsWith(i))return Ye[i];return null}function Qc(e,t){Ye[e]!=null&&console.warn(`replacing loader for file extension '.${e}'`),Ye[e]=t}const $c={importFile:Xc},da=[];class tg{constructor(){p(this,"_clearHighlight",null)}clear(){this._clearHighlight&&(this._clearHighlight(),this._clearHighlight=null)}dispose(){this.clear()}highlightFromPick(t){if(this.clear(),!!t.entity){nt.isShapePickResult(t)&&this.highlightShape(t);for(const i of da){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 eg=new Intl.NumberFormat(void 0,{maximumFractionDigits:2,style:"unit",unit:"meter",unitDisplay:"short"}),ig=e=>`${eg.format(e.length)}`,Je=class Je extends nt{constructor(){super({color:Dc,lineLabelFormatter:ig,showLineLabel:!0});p(this,"isMeasure3D",!0);this.userData.highlightable=!0,this.userData.highlightColor=Bc,this.depthTest=!0}get from(){return this.points[0]}get length(){return this.getLength()}get to(){return this.points[1]}clone(){return new Je().copy(this)}copy(i){return this.setPoints([i.from,i.to]),this}};p(Je,"isMeasure3D",i=>A.isObject(i)&&i.isMeasure3D);let pe=Je;class sg{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 ag{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 ng(e,t,i,s){const a=new Gt.WMTSCapabilities,n=await A.Fetcher.fetchText(t),r=a.read(n),l=rn.optionsFromCapabilities(r,{layer:e});if(l===null)throw new Error("Cannot resolve WMTS source from capabilities");return new zt.WMTS(l)}async function og(e,t){const i=await $e(t.config);switch(t.type){case"colorLayer":{const s=t.config;return new me({...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}case"elevationLayer":{const s=t.config;return new de({...i,minmax:s.minmax})}case"maskLayer":{const s=t.config;return new ze({...i,maskMode:s.maskMode})}default:return t.type}}function rg(e){if(e==null)return new W.Style;switch(e){case"LineString":case"MultiLineString":return new W.Style({stroke:new W.Stroke({color:"yellow",width:1})});case"MultiPoint":case"Point":return new W.Style({image:new W.Circle({fill:new W.Fill({color:"yellow"}),radius:3,stroke:new W.Stroke({color:"black"})})});case"MultiPolygon":case"Polygon":return new W.Style({fill:new W.Fill({color:"rgba(50, 50, 200, 0.4)"}),stroke:new W.Stroke({color:"black",width:1})});default:return console.warn(`Geometry ${e} not supported`),new W.Style}}function lg(e){if(e.imageFormat)switch(e.imageFormat){case"Bil":return new Wi;case"GeoTIFF":return new an;case"MapboxTerrain":return new nn;default:return e.imageFormat}switch(e.format){case"image/x-bil;bits=32":return new Wi;default:return}}function hg(e){return{colorSpace:e.colorSpace,flipY:e.flipY,is8bit:e.is8bit}}async function cg(e){const t=await $e(e);switch(e.type){case"color":{const i=e.options;return new me({...t,elevationRange:i.elevationRange})}case"elevation":{const i=e.options;return new de({...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 ze({...t,maskMode:i.maskMode})}default:return e.type}}async function $e(e){const t=A.getConfig(),i=await Aa(e.source),s="options"in e?e.options:e,a=A.getExtent(s.extent),n=s.interpretation?new sn(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 gg(e,t){const i=await $e(e),s=e.options;return new me({extent:t,...i,elevationRange:s.elevationRange,magFilter:s.magFilter,minFilter:s.minFilter})}async function Aa(e){const t=hg(e);switch(e.type){case"bingmaps":return new Bt({...t,source:new zt.BingMaps(e)});case"cog":return new on({...t,crs:Re(e,e.projection),url:A.getPublicFolderUrl(e.url)});case"geojson":return new he({...t,...await xe(e,new Gt.GeoJSON)});case"gpx":return new he({...t,...await xe(e,new Gt.GPX)});case"kml":return new he({...t,...await xe(e,new Gt.KML)});case"mvt":return new qi({...t,...fs(e),format:new Gt.MVT});case"osm":return new Bt({...t,source:new zt.OSM(e)});case"stadiamaps":return new Bt({...t,source:new zt.StadiaMaps(e)});case"vector":return new he({...t,...await xe(e,e.format)});case"vector-tile":return new qi({...t,...fs(e),format:e.format});case"wms":{const i=new zt.TileWMS({crossOrigin:"anonymous",params:{FORMAT:e.format,LAYERS:Array.isArray(e.layer)?e.layer:[e.layer]},projection:Re(e),url:e.url});return new Bt({...t,...Ai(e,i)})}case"wmts":{const i=await ng(e.layer,e.url,e.format,Re(e));return new Bt({...t,...Ai(e,i)})}case"xyz":return new Bt({...t,...Ai(e,new zt.XYZ(e))});default:return e}}async function ug(e){return e.url instanceof Blob?A.Fetcher.toDataURL(e.url):A.getPublicFolderUrl(e.url)}function Re(e,t){return e.dataProjection??("projection"in e?e.projection:void 0)??t}function ma(e){if(typeof e=="string"){if(e==="default")return i=>{var s;return rg((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 W.Style({})):t[e]}return dg(e)}function Ai(e,t){return{extent:A.getExtent(e.extent),format:lg(e),httpTimeout:e.httpTimeout,noDataValue:e.noDataValue??e.nodata,retries:e.retries,source:t}}async function xe(e,t){const i=await ug(e);return{data:{format:t,url:i},dataProjection:Re(e,"EPSG:4326"),style:ma(e.style)}}function fs(e){return{backgroundColor:e.backgroundColor,style:ma(e.style),url:A.getPublicFolderUrl(e.url)}}function dg(e){function t(a){if(a)return new W.Stroke({color:a.color,width:a.width})}function i(a){if(a)return new W.Fill({color:a.color})}function s(a){if(a)return new W.Circle({fill:i(a.fill),radius:a.radius,stroke:t(a.stroke)})}return new W.Style({fill:i(e.fill),image:s(e.point),stroke:t(e.stroke)})}const Si={getDatasetLayer:og,getLayer:cg,getLayerOptions:$e,getOverlay:gg,getSource:Aa};class Ag{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 we=vt.defineStore("giro3d",()=>{const e=o.shallowRef(null),t=o.shallowRef(null);function i(){return e.value}function s(g){e.value=g}function a(){return t.value}function n(g){t.value=g}function r(){const g=A.getConfig(),m=g.camera;return Array.isArray(m.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",m.position[0],m.position[1],m.altitude).as(g.default_crs)):("z"in m.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(m.position.crs??g.default_crs,m.position.x,m.position.y,"z"in m.position?m.position.z:m.altitude).as(g.default_crs))}function l(){const g=A.getConfig();return"lookAt"in g.camera&&g.camera.lookAt?new Ct(g.camera.lookAt.crs??g.default_crs,g.camera.lookAt.x,g.camera.lookAt.y,g.camera.lookAt.z).as(g.default_crs):c().center()}function h(){const g=A.getConfig();return{backgroundColor:g.basemap.backgroundColor??"white",backgroundOpacity:g.basemap.backgroundOpacity,colorimetry:g.basemap.colorimetry,contourLines:g.basemap.contourLines,elevationRange:g.basemap.elevationRange,graticule:g.basemap.graticule,lighting:g.basemap.lighting??{elevationLayersOnly:!0,enabled:!0},showOutline:g.basemap.showOutline,side:g.basemap.side??A.FrontSide,terrain:g.basemap.terrain}}function c(){const g=A.getConfig();if(g.basemap.extent)return A.getExtent(g.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 m=g.basemap.size,f=g.basemap.center;if(m==null||f==null)throw new Error("basemap.center and basemap.size need to be defined");let C;return Array.isArray(f)?(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."),C=new Ct("EPSG:4326",f[0],f[1],0)):C=new Ct(f.crs??g.default_crs,f.x,f.y,0),C=C.as(g.default_crs),Xe.fromCenterAndSize(g.default_crs,{x:C.x,y:C.y},m[0],m[1])}function d(){return A.getConfig().default_crs}function u(){var g;(g=e.value)==null||g.notifyChange()}return{getCRS:d,getDefaultBasemapExtent:c,getDefaultBasemapOptions:h,getDefaultCameraLookAt:l,getDefaultCameraPosition:r,getInspector:a,getMainView:i,notifyChange:u,setInspector:n,setMainView:s}});class mg 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 Ca 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 Cg extends Ca{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 fg extends Ca{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 Ig(){const e=A.getConfig(),t=[],i=e.basemap.layers;for(const s of i){const a=new Cg(s);a.visible=s.visible,t.push(a)}return t}function pg(){const e=A.getConfig();if("graticule"in e.basemap&&e.basemap.graticule!==void 0){const t=new mg;return typeof e.basemap.graticule=="boolean"?t.visible=e.basemap.graticule:t.visible=e.basemap.graticule.enabled??!0,o.shallowReactive(t)}}function vg(){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 fg(s);a.visible=i.visible,t.push(a)}return t}const fa=vt.defineStore("layers",()=>{const e=o.shallowReactive(Ig().map(f=>o.shallowReactive(f))),t=o.computed(()=>e.length),i=o.shallowReactive(vg().map(f=>o.shallowReactive(f))),s=o.computed(()=>i.length),a=pg();function n(){return e}function r(){return a}function l(f,C){f.visible=C}function h(f,C){f.opacity=C}function c(){return i}function d(f,C){f.visible=C}function u(f,C){f.opacity=C}function g(f){const C=i.indexOf(f);if(C>0){const y=i[C-1];i[C-1]=f,i[C]=y}}function m(f){const C=i.indexOf(f);if(C<i.length-1){const y=i[C+1];i[C+1]=f,i[C]=y}}return{basemapCount:t,getBasemaps:n,getGraticuleLayer:r,getOverlays:c,moveOverlayDown:m,moveOverlayUp:g,overlayCount:s,setBasemapOpacity:h,setBasemapVisibility:l,setOverlayOpacity:u,setOverlayVisibility:d}}),yg=3e3,Ni="grid",Li="plane",bg=5e3;class Mg 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",we());p(this,"_grid");p(this,"_instance");p(this,"_layerStore",fa());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 Ue({extent:s,...a}),this._basemap.terrain.segments=32,this._basemap.name="basemaps",this._instance.add(this._basemap),this._grid=new ag(this._instance,s,Ni),this._plane=new Ag(this._instance,s,Li),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 Si.getLayer(i);return this._baseLayers.set(i.uuid,s),await this._basemap.addLayer(s),this.updateLayerOrdering(),s.visible=i.visible,me.isColorLayer(s)&&(s.opacity=i.opacity),de.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 Si.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<yg;s!==a&&(this._grid.visible=a,this._plane.visible=a);const n=this._layerStore.getGraticuleLayer();if(n){const r=n.enabled,l=i.z<bg;r!==l&&(n.enabled=l)}}async onLayerOpacityChanged(i,s){const a=await this.getLayer(i);a&&me.isColorLayer(a)&&(a.opacity=s,this.notify(a)),a&&de.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&&de.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 Ia=[];function Eg(e,t){return nt.isShapePickResult(e)?-1:nt.isShapePickResult(t)?1:e.distance-t.distance}class Is{constructor(){p(this,"_moduleStore",A.useModuleStore())}getFeatureFromPickedObject(t){var d,u;const{entity:i,features:s,object:a}=t,n=(i==null?void 0:i.object3d)??a;let r=(u=(d=n.userData)==null?void 0:d.dataset)==null?void 0:u.name;const l=(i==null?void 0:i.id)??n.uuid,h=[],c=new Map;if(c.set("Dataset",h),i){if(Ps.isMapPickResult(t)){if(s==null||s.length===0)return null;const g=s.at(0);r=this.getNameFromOLFeature(g.feature)??r,this.getAttributesFromOLFeature(g.feature,c),h.push({key:"Layer",value:g.layer.name})}else if(en.isPointsPickResult(t))this.getAttributesFromPointCloud(t,c);else if(!i.isFeatureCollection){if(nt.isShapePickResult(t)){const g=t.entity;if(pe.isMeasure3D(g)){const m=g.userData.measure;r=(m==null?void 0:m.title)??r,this.getAttributesFromMeasure(t,c)}else{const m=g.userData.annotation;r=(m==null?void 0:m.title)??r,this.getAttributesFromAnnotation(t,c)}}}for(const g of Ia)g(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 sg(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=>Ue.isMap(l)!==!0&&l.name!==Li&&l.name!==Ni);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(Eg),r??null}hasFeature(t,i){const s=t.getObjects(n=>n.isMap!==!0&&n.name!==Li&&n.name!==Ni);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[u,g]of Object.entries(r.properties))u==="geometry"||u==="geometryProperty"||u==="metadata"||u==="entity"||s.push({key:u,value:g});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 wg{constructor(t){this.store=t}registerDatasetAction(t){this.store.registerCustomAction(t)}registerDatasetType(t,i){if(i.icon!=null&&(Ds[t]=i.icon),i.name!=null&&(Bs[t]=i.name),i.highlight&&da.push(i.highlight),Zc(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)Qc(s,i.loader);i.propertyView&&Pe.set(t,i.propertyView),i.attributeExtractor&&Ia.push(i.attributeExtractor)}}class _g{constructor(t){this.store=t}pushNotification(t){this.store.push(t)}}class Og{constructor(t){this.searchStore=t}registerProvider(t){this.searchStore.registerProvider(t)}}function xg(e){return e.coordinates instanceof Ct}class kg{constructor(t){this.store=t}addWidget(t){this.store.addWidget(t)}}const _t=new A.EventDispatcher,Gi=vt.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(w){a.value=w}function h(w){s.value=w}function c(){return t.value}function d(w){t.value=w}function u(){return e}function g(w){e.splice(e.indexOf(w),1)}function m(){}function f(){}function C(){}function y(w){e.push(w)}function I(w){return e.some(S=>S.title===w)}function b(w){}function M(){}function _(w){}function x(w){}return{add:y,count:i,createLine:f,createPoint:m,createPolygon:C,edit:b,getAnnotationMode:c,getAnnotations:u,hasAnnotation:I,importAnnotationFile:_,importAnnotationsFiles:x,isUserDrawing:n,remove:g,setAnnotationMode:d,setIsUserDrawing:h,setShowLabels:l,showLabels:r,stopEdition:M}}),Dt=vt.defineStore("notifications",()=>{function e(t){}return{push:e}});class pa 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 K{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 K("","","info")}}function Sg(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 Ng={getMinMaxAltitudes:Sg};function Lg(e){return window.prompt("Annotation name",e)}const va=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),ps=e=>{let t=e.area,i="m²";return t>1e6&&(t=t/1e6,i="km²"),`${va.format(t)} ${i}`},Pg=new A.Vector3,Tg=new A.Vector3,vs=e=>t=>{const{camera:i}=e,{end:s,start:a}=t,n=Pg.copy(a).project(i),r=Tg.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"),`${va.format(c)} ${d}`},mi=e=>{const t=e.shape;return t.userData.annotation?t.userData.annotation.title:null};class Dg{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",Dt());p(this,"_picker");p(this,"_shapes",new Map);p(this,"_store",Gi());this._instance=t,this._picker=s,this._drawTool=new kt({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 pa(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=Lg(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:Ng.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:vs(this._instance.view),showSegmentLabels:this._store.showLabels()})}drawPoint(){this.draw("createPoint","Point","New point annotation",{borderWidth:3,showVertexLabels:this._store.showLabels(),vertexLabelFormatter:mi,vertexRadius:Ve})}drawPolygon(){this.draw("createPolygon","Polygon","New polygon annotation",{showSurfaceLabel:this._store.showLabels(),surfaceLabelFormatter:ps})}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=Vc,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=>!nt.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 K("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 K("Annotations",`${s} annotations imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new K("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 Ct(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 nt({beforeRemovePoint:kt.limitRemovePointHook(2),color:Et,segmentLabelFormatter:vs(this._instance.view),showLine:!0,showSegmentLabels:!0,showVertexLabels:!1,showVertices:!0}),a.setPoints(t.geometry.coordinates.map(s));break;case"MultiPoint":a=new nt({beforeRemovePoint:kt.limitRemovePointHook(1),color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:mi,vertexRadius:Ve}),a.setPoints(t.geometry.coordinates.map(s));break;case"Point":a=new nt({beforeRemovePoint:kt.inhibitHook,color:Et,showLine:!1,showVertexLabels:!0,showVertices:!0,vertexLabelFormatter:mi,vertexRadius:Ve}),a.setPoints([s(t.geometry.coordinates)]);break;case"Polygon":a=new nt({afterRemovePoint:kt.afterRemovePointOfRing,afterUpdatePoint:kt.afterUpdatePointOfRing,beforeRemovePoint:kt.limitRemovePointHook(4),color:Et,showLine:!0,showSurface:!0,showSurfaceLabel:!0,showVertexLabels:!1,showVertices:!0,surfaceLabelFormatter:ps}),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=>nt.isShapePickResult(s)||Ps.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 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>
|
|
9
|
+
*/const G={LEFT:1,RIGHT:2,MIDDLE:4},v=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}),Vt={NONE:0,IN:1,OUT:-1};function St(e){return e.isPerspectiveCamera}function Mt(e){return e.isOrthographicCamera}const Rt=Math.PI*2,ys=Math.PI/2,ya=1e-5,ae=Math.PI/180;function ct(e,t,i){return Math.max(t,Math.min(i,e))}function j(e,t=ya){return Math.abs(e)<t}function F(e,t,i=ya){return j(e-t,i)}function bs(e,t){return Math.round(e/t)*t}function ne(e){return isFinite(e)?e:e<0?-Number.MAX_VALUE:Number.MAX_VALUE}function oe(e){return Math.abs(e)<Number.MAX_VALUE?e:e*(1/0)}function ke(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,u=a*s;c=ct(c,-u,u),t=e-c;const g=(i.value+r*c)*n;i.value=(i.value-r*g)*h;let m=t+(c+g)*h;return d-e>0==m>d&&(m=d,i.value=(m-d)/n),m}function Ms(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,u=t.y,g=t.z,m=e.x-d,f=e.y-u,C=e.z-g;const y=d,I=u,b=g,M=a*s,_=M*M,x=m*m+f*f+C*C;if(x>_){const ai=Math.sqrt(x);m=m/ai*M,f=f/ai*M,C=C/ai*M}d=e.x-m,u=e.y-f,g=e.z-C;const w=(i.x+l*m)*n,S=(i.y+l*f)*n,D=(i.z+l*C)*n;i.x=(i.x-l*w)*c,i.y=(i.y-l*S)*c,i.z=(i.z-l*D)*c,r.x=d+(m+w)*c,r.y=u+(f+S)*c,r.z=g+(C+D)*c;const P=y-e.x,R=I-e.y,B=b-e.z,Q=r.x-y,ee=r.y-I,Pa=r.z-b;return P*Q+R*ee+B*Pa>0&&(r.x=y,r.y=I,r.z=b,i.x=(r.x-y)/n,i.y=(r.y-I)/n,i.z=(r.z-b)/n),r}function Ci(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 fi(e,t){return Mt(e)?(console.warn(`${t} is not supported in OrthographicCamera`),!0):!1}class Bg{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 Ii;const Vg="2.10.1",Se=1/8,Rg=/Mac/.test((Ii=globalThis==null?void 0:globalThis.navigator)===null||Ii===void 0?void 0:Ii.platform);let N,Es,Ne,pi,et,T,V,Ft,re,At,mt,Nt,ws,_s,rt,le,Ut,Os,vi,xs,yi,bi,Le;class at extends Bg{static install(t){N=t.THREE,Es=Object.freeze(new N.Vector3(0,0,0)),Ne=Object.freeze(new N.Vector3(0,1,0)),pi=Object.freeze(new N.Vector3(0,0,1)),et=new N.Vector2,T=new N.Vector3,V=new N.Vector3,Ft=new N.Vector3,re=new N.Vector3,At=new N.Vector3,mt=new N.Vector3,Nt=new N.Vector3,ws=new N.Vector3,_s=new N.Vector3,rt=new N.Spherical,le=new N.Spherical,Ut=new N.Box3,Os=new N.Box3,vi=new N.Sphere,xs=new N.Quaternion,yi=new N.Quaternion,bi=new N.Matrix4,Le=new N.Raycaster}static get ACTION(){return v}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=v.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=Vt.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,w;if(St(this._camera)){const S=T.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*ae,P=S.length()*Math.tan(D*.5);x=this.truckSpeed*I*P/this._elementRect.height,w=this.truckSpeed*b*P/this._elementRect.height}else if(Mt(this._camera)){const S=this._camera;x=this.truckSpeed*I*(S.right-S.left)/S.zoom/this._elementRect.width,w=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(-w,!0)):M?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(x,w,!0)},this._rotateInternal=(I,b)=>{const M=Rt*this.azimuthRotateSpeed*I/this._elementRect.height,_=Rt*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,w=this._sphericalEnd.radius*_,S=ct(w,this.minDistance,this.maxDistance),D=S-w;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(w,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?w: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,w=this._zoom*_;this.zoomTo(w,!0),this.dollyToCursor&&(this._changedZoom+=w-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,Ne),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=v.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:v.ROTATE,middle:v.DOLLY,right:v.TRUCK,wheel:St(this._camera)?v.DOLLY:Mt(this._camera)?v.ZOOM:v.NONE},this.touches={one:v.TOUCH_ROTATE,two:St(this._camera)?v.TOUCH_DOLLY_TRUCK:Mt(this._camera)?v.TOUCH_ZOOM_TRUCK:v.NONE,three:v.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,w=I.clientY/_.height;if(x<this._interactiveArea.left||x>this._interactiveArea.right||w<this._interactiveArea.top||w>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,g(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);m()}},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=v.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=v.NONE;f()}};let c=-1;const d=I=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===v.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const w=this._domElement.getBoundingClientRect(),S=I.clientX/w.width,D=I.clientY/w.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===v.ROTATE||this.mouseButtons.wheel===v.TRUCK){const w=performance.now();c-w<1e3&&this._getClientRect(this._elementRect),c=w}const b=Rg?-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 v.ROTATE:{this._rotateInternal(I.deltaX,I.deltaY),this._isUserControllingRotate=!0;break}case v.TRUCK:{this._truckInternal(I.deltaX,I.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case v.SCREEN_PAN:{this._truckInternal(I.deltaX,I.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case v.OFFSET:{this._truckInternal(I.deltaX,I.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case v.DOLLY:{this._dollyInternal(-M,_,x),this._isUserControllingDolly=!0;break}case v.ZOOM:{this._zoomInternal(-M,_,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},u=I=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===at.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()}},g=I=>{if(!this._enabled)return;if(Ci(this._activePointers,et),this._getClientRect(this._elementRect),s.copy(et),a.copy(et),this._activePointers.length>=2){const M=et.x-this._activePointers[1].clientX,_=et.y-this._activePointers[1].clientY,x=Math.sqrt(M*M+_*_);n.set(0,x);const w=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;a.set(w,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&v.ROTATE)===v.ROTATE||(this._state&v.TOUCH_ROTATE)===v.TOUCH_ROTATE||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.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&v.TRUCK)===v.TRUCK||(this._state&v.SCREEN_PAN)===v.SCREEN_PAN||(this._state&v.TOUCH_TRUCK)===v.TOUCH_TRUCK||(this._state&v.TOUCH_SCREEN_PAN)===v.TOUCH_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&v.DOLLY)===v.DOLLY||(this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&v.ZOOM)===v.ZOOM||(this._state&v.TOUCH_ZOOM)===v.TOUCH_ZOOM||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&v.OFFSET)===v.OFFSET||(this._state&v.TOUCH_OFFSET)===v.TOUCH_OFFSET||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},m=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Ci(this._activePointers,et);const b=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,M=b?-b.deltaX:a.x-et.x,_=b?-b.deltaY:a.y-et.y;if(a.copy(et),((this._state&v.ROTATE)===v.ROTATE||(this._state&v.TOUCH_ROTATE)===v.TOUCH_ROTATE||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(M,_),this._isUserControllingRotate=!0),(this._state&v.DOLLY)===v.DOLLY||(this._state&v.ZOOM)===v.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,S=this.dollyDragInverted?-1:1;(this._state&v.DOLLY)===v.DOLLY?(this._dollyInternal(S*_*Se,x,w),this._isUserControllingDolly=!0):(this._zoomInternal(S*_*Se,x,w),this._isUserControllingZoom=!0)}if((this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_ZOOM)===v.TOUCH_ZOOM||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_ZOOM_ROTATE)===v.TOUCH_ZOOM_ROTATE){const x=et.x-this._activePointers[1].clientX,w=et.y-this._activePointers[1].clientY,S=Math.sqrt(x*x+w*w),D=n.y-S;n.set(0,S);const P=this.dollyToCursor?(a.x-this._elementRect.x)/this._elementRect.width*2-1:0,R=this.dollyToCursor?(a.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&v.TOUCH_DOLLY)===v.TOUCH_DOLLY||(this._state&v.TOUCH_DOLLY_ROTATE)===v.TOUCH_DOLLY_ROTATE||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*Se,P,R),this._isUserControllingDolly=!0):(this._zoomInternal(D*Se,P,R),this._isUserControllingZoom=!0)}((this._state&v.TRUCK)===v.TRUCK||(this._state&v.TOUCH_TRUCK)===v.TOUCH_TRUCK||(this._state&v.TOUCH_DOLLY_TRUCK)===v.TOUCH_DOLLY_TRUCK||(this._state&v.TOUCH_ZOOM_TRUCK)===v.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(M,_,!1,!1),this._isUserControllingTruck=!0),((this._state&v.SCREEN_PAN)===v.SCREEN_PAN||(this._state&v.TOUCH_SCREEN_PAN)===v.TOUCH_SCREEN_PAN||(this._state&v.TOUCH_DOLLY_SCREEN_PAN)===v.TOUCH_DOLLY_SCREEN_PAN||(this._state&v.TOUCH_ZOOM_SCREEN_PAN)===v.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(M,_,!1,!0),this._isUserControllingTruck=!0),((this._state&v.OFFSET)===v.OFFSET||(this._state&v.TOUCH_OFFSET)===v.TOUCH_OFFSET||(this._state&v.TOUCH_DOLLY_OFFSET)===v.TOUCH_DOLLY_OFFSET||(this._state&v.TOUCH_ZOOM_OFFSET)===v.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(M,_,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},f=()=>{Ci(this._activePointers,et),a.copy(et),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",y),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",h),g())},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",y),this.cancel()};const C=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},y=()=>{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",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",h),this._domElement.removeEventListener("wheel",d,{passive:!1}),this._domElement.removeEventListener("contextmenu",u),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",y))},this.cancel=()=>{this._state!==v.NONE&&(this._state=v.NONE,this._activePointers.length=0,f())},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=ct(t.width,0,1),this._interactiveArea.height=ct(t.height,0,1),this._interactiveArea.x=ct(t.x,0,1-this._interactiveArea.width),this._interactiveArea.y=ct(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=ct(t,this.minAzimuthAngle,this.maxAzimuthAngle),n=ct(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||F(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&F(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=Vt.NONE,this._changedDolly=0,this._dollyToNoClamp(ct(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=F(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||F(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(n)}dollyInFixed(t,i=!1){this._targetEnd.add(this._getCameraDirection(re).multiplyScalar(t)),i||this._target.copy(this._targetEnd);const s=!i||F(this._target.x,this._targetEnd.x,this.restThreshold)&&F(this._target.y,this._targetEnd.y,this.restThreshold)&&F(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=ct(t,this.minZoom,this.maxZoom),this._needsUpdate=!0,i||(this._zoom=this._zoomEnd);const s=!i||F(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(),At.setFromMatrixColumn(this._camera.matrix,0),mt.setFromMatrixColumn(this._camera.matrix,1),At.multiplyScalar(t),mt.multiplyScalar(-i);const a=T.copy(At).add(mt),n=V.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=V.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||F(this._target.x,this._targetEnd.x,this.restThreshold)&&F(this._target.y,this._targetEnd.y,this.restThreshold)&&F(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?Ut.copy(t):Ut.setFromObject(t);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const d=bs(this._sphericalEnd.theta,ys),u=bs(this._sphericalEnd.phi,ys);h.push(this.rotateTo(d,u,i));const g=T.setFromSpherical(this._sphericalEnd).normalize(),m=xs.setFromUnitVectors(g,pi),f=F(Math.abs(g.y),1);f&&m.multiply(yi.setFromAxisAngle(Ne,d)),m.multiply(this._yAxisUpSpaceInverse);const C=Os.makeEmpty();V.copy(c.min).applyQuaternion(m),C.expandByPoint(V),V.copy(c.min).setX(c.max.x).applyQuaternion(m),C.expandByPoint(V),V.copy(c.min).setY(c.max.y).applyQuaternion(m),C.expandByPoint(V),V.copy(c.max).setZ(c.min.z).applyQuaternion(m),C.expandByPoint(V),V.copy(c.min).setZ(c.max.z).applyQuaternion(m),C.expandByPoint(V),V.copy(c.max).setY(c.min.y).applyQuaternion(m),C.expandByPoint(V),V.copy(c.max).setX(c.min.x).applyQuaternion(m),C.expandByPoint(V),V.copy(c.max).applyQuaternion(m),C.expandByPoint(V),C.min.x-=a,C.min.y-=r,C.max.x+=n,C.max.y+=l,m.setFromUnitVectors(pi,g),f&&m.premultiply(yi.invert()),m.premultiply(this._yAxisUpSpace);const y=C.getSize(T),I=C.getCenter(V).applyQuaternion(m);if(St(this._camera)){const b=this.getDistanceToFitBox(y.x,y.y,y.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(Mt(this._camera)){const b=this._camera,M=b.right-b.left,_=b.top-b.bottom,x=s?Math.max(M/y.x,_/y.y):Math.min(M/y.x,_/y.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?at.createBoundingSphere(t,vi):vi.copy(t);if(s.push(this.moveTo(n.center.x,n.center.y,n.center.z,i)),St(this._camera)){const r=this.getDistanceToFitSphere(n.radius);s.push(this.dollyTo(r,i))}else if(Mt(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=Vt.NONE,this._changedDolly=0;const h=V.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||F(this._target.x,this._targetEnd.x,this.restThreshold)&&F(this._target.y,this._targetEnd.y,this.restThreshold)&&F(this._target.z,this._targetEnd.z,this.restThreshold)&&F(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&F(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&F(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(d)}lerpLookAt(t,i,s,a,n,r,l,h,c,d,u,g,m,f=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Vt.NONE,this._changedDolly=0;const C=T.set(a,n,r),y=V.set(t,i,s);rt.setFromVector3(y.sub(C).applyQuaternion(this._yAxisUpSpace));const I=Ft.set(d,u,g),b=V.set(l,h,c);le.setFromVector3(b.sub(I).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(C.lerp(I,m));const M=le.theta-rt.theta,_=le.phi-rt.phi,x=le.radius-rt.radius;this._sphericalEnd.set(rt.radius+x*m,rt.phi+_*m,rt.theta+M*m),this.normalizeRotations(),this._needsUpdate=!0,f||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const w=!f||F(this._target.x,this._targetEnd.x,this.restThreshold)&&F(this._target.y,this._targetEnd.y,this.restThreshold)&&F(this._target.z,this._targetEnd.z,this.restThreshold)&&F(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&F(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&F(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(w)}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=ct(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||F(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&F(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&F(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}setOrbitPoint(t,i,s){this._camera.updateMatrixWorld(),At.setFromMatrixColumn(this._camera.matrixWorldInverse,0),mt.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Nt.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const a=T.set(t,i,s),n=a.distanceTo(this._camera.position),r=a.sub(this._camera.position);At.multiplyScalar(r.x),mt.multiplyScalar(r.y),Nt.multiplyScalar(r.z),T.copy(At).add(mt).add(Nt),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(fi(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const n=t/i,r=this._camera.getEffectiveFOV()*ae,l=this._camera.aspect;return((a?n>l:n<l)?i:t/l)*.5/Math.tan(r*.5)+s*.5}getDistanceToFitSphere(t){if(fi(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const i=this._camera.getEffectiveFOV()*ae,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%Rt,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Rt),this._spherical.theta+=Rt*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Rt)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(t=!1){if(!F(this._camera.up.x,this._cameraUp0.x)||!F(this._camera.up.y,this._cameraUp0.y)||!F(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,Ne),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const t=T.subVectors(this._target,this._camera.position).normalize(),i=V.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=ws.subVectors(this._targetEnd,this._target),r=_s.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 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(a))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(n.x)&&j(n.y)&&j(n.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const u=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Ms(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;Ms(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(St(this._camera)&&this._changedDolly!==0){const u=this._spherical.radius-this._lastDistance,g=this._camera,m=this._getCameraDirection(re),f=T.copy(m).cross(g.up).normalize();f.lengthSq()===0&&(f.x=1);const C=V.crossVectors(f,m),y=this._sphericalEnd.radius*Math.tan(g.getEffectiveFOV()*ae*.5),b=(this._sphericalEnd.radius-u-this._sphericalEnd.radius)/this._sphericalEnd.radius,M=Ft.copy(this._targetEnd).add(f.multiplyScalar(this._dollyControlCoord.x*y*g.aspect)).add(C.multiplyScalar(this._dollyControlCoord.y*y)),_=T.copy(this._targetEnd).lerp(M,b),x=this._lastDollyDirection===Vt.IN&&this._spherical.radius<=this.minDistance,w=this._lastDollyDirection===Vt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||w)){this._sphericalEnd.radius-=u,this._spherical.radius-=u;const D=V.copy(m).multiplyScalar(-u);_.add(D)}this._boundary.clampPoint(_,_);const S=V.subVectors(_,this._targetEnd);this._targetEnd.copy(_),this._target.add(S),this._changedDolly-=u,j(this._changedDolly)&&(this._changedDolly=0)}else if(Mt(this._camera)&&this._changedZoom!==0){const u=this._zoom-this._lastZoom,g=this._camera,m=T.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(g.near+g.far)/(g.near-g.far)).unproject(g),f=V.set(0,0,-1).applyQuaternion(g.quaternion),C=Ft.copy(m).add(f.multiplyScalar(-m.dot(g.up))),I=-(this._zoom-u-this._zoom)/this._zoom,b=this._getCameraDirection(re),M=this._targetEnd.dot(b),_=T.copy(this._targetEnd).lerp(C,I),x=_.dot(b),w=b.multiplyScalar(x-M);_.sub(w),this._boundary.clampPoint(_,_);const S=V.subVectors(_,this._targetEnd);this._targetEnd.copy(_),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 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))&&(At.setFromMatrixColumn(this._camera.matrix,0),mt.setFromMatrixColumn(this._camera.matrix,1),Nt.setFromMatrixColumn(this._camera.matrix,2),At.multiplyScalar(this._focalOffset.x),mt.multiplyScalar(-this._focalOffset.y),Nt.multiplyScalar(this._focalOffset.z),T.copy(At).add(mt).add(Nt),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:ne(this.maxDistance),minZoom:this.minZoom,maxZoom:ne(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ne(this.maxPolarAngle),minAzimuthAngle:ne(this.minAzimuthAngle),maxAzimuthAngle:ne(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=oe(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=oe(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=oe(s.maxPolarAngle),this.minAzimuthAngle=oe(s.minAzimuthAngle),this.maxAzimuthAngle=oe(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),rt.setFromVector3(T.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(rt.theta,rt.phi,i),this.dollyTo(rt.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",Vg),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=V.copy(i).add(t),l=this._boundary.clampPoint(n,Ft).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(V.copy(i).multiplyScalar(c)).add(l.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(St(this._camera)){const t=this._camera,i=t.near,s=t.getEffectiveFOV()*ae,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(Mt(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)||fi(this._camera,"_collisionTest"))return t;const s=this._getTargetDirection(re);bi.lookAt(Es,s,this._camera.up);for(let a=0;a<4;a++){const n=V.copy(this._nearPlaneCorners[a]);n.applyMatrix4(bi);const r=Ft.addVectors(this._target,n);Le.set(r,s),Le.far=this._spherical.radius+1;const l=Le.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;Ut.makeEmpty(),t.traverseVisible(r=>{r.isMesh&&Ut.expandByObject(r)}),Ut.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 u=0,g=d.count;u<g;u++)T.fromBufferAttribute(d,u),n=Math.max(n,a.distanceToSquared(T))}),s.radius=Math.sqrt(n),s}}class ti{constructor(t,i,s){p(this,"camera");p(this,"focalOffset");p(this,"target");this.camera=t,this.target=i,this.focalOffset=s}}class Fg extends ln{constructor(i,s,a){super(i,a,"Camera Controls");p(this,"camera");p(this,"_boundOnAfterCameraUpdate");p(this,"_cameraPosition");this.camera=s,this._cameraPosition=new ti(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)}}at.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 Ug 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",we());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 at(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 xi(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 xi(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:u})=>{c(()=>{switch(u){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 ti(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 Ct(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 Fg(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=at.ACTION.ROTATE,this._orbitControls.mouseButtons.right=at.ACTION.TRUCK,this._orbitControls.mouseButtons.wheel=at.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=at.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=at.ACTION.TRUCK,this._orbitControls.mouseButtons.right=at.ACTION.ROTATE,this._orbitControls.mouseButtons.wheel=at.ACTION.DOLLY,this._orbitControls.mouseButtons.middle=at.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 ba=e=>A.isObject(e)&&(e.type==="colorLayer"||e.type==="maskLayer"||e.type==="elevationLayer"),zg=e=>A.isObject(e)&&!ba(e);class jg{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",Dt());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 hn({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:Xe.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 cn({geometry:new gn([[[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 ze({name:`mask-${t.uuid}`,source:new he({data:[s],style:new W.Style({fill:new W.Fill({color:"white"})})})});a.maskMode=ze.MaskMode.Inverted;const n=this._instance.getObjects(r=>Ue.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),_t.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=>Ue.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 K(s,"Importing file..."));const a=await $c.importFile(t,A.getConfig());i=this._store.add(a),this._notifications.push(new K(i.name,"Import done, parsing data...","success"))}catch(a){console.error(a),this._notifications.push(new K(s,a.message,"error"));return}try{i.isPreloading=!0,await this.preloadDataset(i),this._notifications.push(new K(i.name,"Import successful.","success"))}catch{}_t.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}_t.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(ba(t)){const i=await Si.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(zg(t)){const i=await Wc.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 K(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 Gg{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=>!nt.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 pe,t.add(this._hoverMeasurement)),this._hoverMeasurement.visible=!0,this._hoverMeasurement.setPoints([s.point,r.point]),t.notifyChange(this._hoverMeasurement))}}}const Hi=vt.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(y){s.value=y}function r(){return t.value}function l(y){t.value=y}function h(){return e}function c(y){e.splice(e.indexOf(y),1)}function d(y){e.push(y)}function u(y){return e.some(I=>I.title===y)}function g(y){}function m(y){}function f(){}function C(){}return{add:d,count:i,end:C,getMeasurementMode:r,getMeasures:h,hasMeasure:u,importMeasureFile:g,importMeasureFiles:m,isUserMeasuring:a,remove:c,setIsUserMeasuring:n,setMeasurementMode:l,start:f}});class Ma 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 Hg(e){return window.prompt("Measure name",e)}class Zg{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",Dt());p(this,"_paused",!1);p(this,"_store",Hi());this._instance=t,this._measureTool=new Gg(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 pe;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 K("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 K("Measures",`${s} measures imported (${a} skipped); ${n.length} errors: ${n}`,"warning")):this._notificationStore.push(new K("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 Ma(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=Hg(i);s!=null&&this.pushNewMeasure(s,t)}}}}class Wg 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",we());this.mainInstance=i,this.picker=new Is,this.camera=new Ug(this.mainInstance,this.picker);const s=this._store.getDefaultCameraPosition(),a=this._store.getDefaultCameraLookAt();this.camera.lookAt(s.toVector3(),a.toVector3()),this.layerManager=new Mg(this.mainInstance),this.datasetManager=new jg(this.mainInstance,this.layerManager),this.annotationManager=new Dg(this.mainInstance,this.camera,this.picker),this.highlighter=new tg,this.picker=new Is,this.measurementManager=new Zg(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"}),_t.dispatchEvent({type:"updated"})}}class qg{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(Ti.isEntity3D(s)){const a=s.getBoundingBox();a!=null&&i.union(a)}return i}getCameraController(){return this._cameraController}getInstance(){return this._instance}}const Yg={class:"toast-container"},Jg=["v-if"],Xg={class:"me-auto mx-2"},Kg=["innerHTML"],Qg=o.defineComponent({__name:"AlertToast",setup(e){const t=o.ref(null),i=o.ref(K.empty());function s(l){i.value=l,mn.Toast.getOrCreateInstance(t.value).show()}Dt().$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",Yg,[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,Jg),o.createElementVNode("strong",Xg,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,Kg)],512)]))}}),$g=A._export_sfc(Qg,[["__scopeId","data-v-002327a6"]]),tu=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))}}),eu=A._export_sfc(tu,[["__scopeId","data-v-535f5fef"]]),iu={class:"text-secondary"},su=o.defineComponent({__name:"CoordinateFragment",props:{prefix:String,suffix:String,value:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",iu,[o.createElementVNode("span",null,[o.createElementVNode("b",null,o.toDisplayString(e.prefix),1),o.createTextVNode(" "+o.toDisplayString(e.value)+o.toDisplayString(e.suffix),1)])]))}}),yt=A._export_sfc(su,[["__scopeId","data-v-ce90ec07"]]),au=["href"],nu=["src","alt"],ou={controls:"",style:{"max-width":"200px"}},ru=["src","type"],lu=["href"],hu=["href"],cu=["title","src"],gu=["href"],uu=["href"],du=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,nu)],8,au)):(n=t.type)!=null&&n.startsWith("video/")?(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[o.createElementVNode("video",ou,[o.createElementVNode("source",{src:t.href,type:t.type},null,8,ru),s[0]||(s[0]=o.createTextVNode(" Download the ",-1)),o.createElementVNode("a",{href:t.href},"video",8,lu),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,hu),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,cu),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,gu),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,uu))}}}),Au=["title"],mu={key:0,class:"text-secondary"},Cu={key:1,class:"text-secondary"},fu={key:0},Iu={key:3,class:"d-flex align-items-center justify-content-between"},pu={key:4,class:"text-secondary"},vu=["title"],yu=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,Au),o.createElementVNode("td",{class:o.normalizeClass(o.unref(i))},[t.attrValue===void 0?(o.openBlock(),o.createElementBlock("span",mu,"undefined")):t.attrValue===null?(o.openBlock(),o.createElementBlock("span",Cu,"null")):typeof t.attrValue=="object"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:2},[Array.isArray(t.attrValue)?(o.openBlock(),o.createElementBlock("table",fu,[(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(du,{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(eu,{key:t.attrValue.getHexString(),color:t.attrValue},null,8,["color"])):o.unref(A.isVector3)(t.attrValue)?(o.openBlock(),o.createElementBlock("div",Iu,[o.createVNode(yt,{value:t.attrValue.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(yt,{value:t.attrValue.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(yt,{value:t.attrValue.z.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])):(o.openBlock(),o.createElementBlock("span",pu,"Object"))],64)):(o.openBlock(),o.createElementBlock("span",{key:3,title:t.attrValue},o.toDisplayString(t.attrValue),9,vu))],2)])}}}),Ea=A._export_sfc(yu,[["__scopeId","data-v-1c2e92b2"]]),bu={key:0},Mu={class:"badge bg-info-subtle text-dark mb-0"},Eu={class:"table table-striped table-sm w-100"},wu=o.defineComponent({__name:"AttributeGroup",props:{children:{},title:{}},setup(e){return(t,i)=>t.children.length>0?(o.openBlock(),o.createElementBlock("div",bu,[o.createElementVNode("h6",Mu,o.toDisplayString(t.title),1),o.createElementVNode("table",Eu,[o.createElementVNode("tbody",null,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(t.children,(s,a)=>(o.openBlock(),o.createBlock(Ea,{key:a,"attr-name":s.key,"attr-value":s.value},null,8,["attr-name","attr-value"]))),128))])])])):o.createCommentVNode("",!0)}}),_u={class:"card"},Ou={class:"card-header d-flex align-items-center justify-content-between"},xu={class:"text-truncate mx-2"},ku={class:"card-body content py-2 px-1"},Su={class:"card-footer py-0"},Nu={class:"d-flex align-items-center column-gap-3"},Lu=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",_u,[o.createElementVNode("div",Ou,[n[1]||(n[1]=o.createElementVNode("i",{class:"bi bi-card-checklist"},null,-1)),o.createElementVNode("span",xu,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",ku,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(a.attributes.entries(),(r,l)=>(o.openBlock(),o.createBlock(wu,{key:l,title:r[0],children:r[1]},null,8,["title","children"]))),128))]),o.createElementVNode("div",Su,[o.createElementVNode("div",Nu,[o.createVNode(yt,{value:a.point.x.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(yt,{value:a.point.y.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(yt,{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)])])])]))}}),Pu=A._export_sfc(Lu,[["__scopeId","data-v-b1912966"]]),Tu="data:image/png;base64,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",Du={id:"loading-screen",class:"container"},Bu={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"}},Vu={class:"logo"},Ru=["src"],Fu=o.defineComponent({__name:"LoadingScreen",setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",Du,[i[1]||(i[1]=o.createElementVNode("h1",null,"Loading...",-1)),o.createElementVNode("h2",null,[(o.openBlock(),o.createElementBlock("svg",Bu,[...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",Vu,[o.createElementVNode("img",{src:o.unref(Tu)},null,8,Ru)])]))}}),Uu=A._export_sfc(Fu,[["__scopeId","data-v-712b955c"]]),zu={class:"main"},ju=o.defineComponent({__name:"MainView",setup(e){const t=o.ref(null),i=o.ref(null),s=o.shallowRef(null),a=we();return o.onMounted(()=>{s.value=new Ls({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",zu,[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)]))}}),Gu=A._export_sfc(ju,[["__scopeId","data-v-0d10144c"]]),Hu={class:"card root"},Zu={class:"d-flex align-items-center"},Wu=["aria-pressed"],qu=o.defineComponent({__name:"NavigationButtons",setup(e){const t=A.useCameraStore(),i=Dt(),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 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,iVBORw0KGgoAAAANSUhEUgAAAGkAAACQCAYAAAALH0XrAAAACXBIWXMAABQLAAAUCwHr6IzdAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJztXXl8VNXZft5z72SZCGGTxYUoqLjQKhozk+AWl7aubbXGisJkWMS2n9S6VIRMxsmCO23p11qqkExAq2hVsGr9qqKiWSBSFZAd2URZw5Z17j3v98dkwqx3lkwSEJ/fj9+POfece87kmXvPOe953+clZsaxgOumTEnd0+vQOaTgXGIeSeAsZtGfiQcSMABAfwBpAA74NfMQsIuBHQC+JaLtkPylzrRqwKFeq9+aNau1R75MnKCjlSTLNFt/UpAPiKtBfDkYZwJQktiFDuBLBr1VV1ox9bopU1KPVtLUnh6AP6wO+5kE3MHgG0ihUQAEwEDX/I4UAD8g4v8FgH2Zh9xWh+1EgF5VVeW1j51zdnRJrwmgx5+kbNeYAYpu+iUx3QHA2q2dM/5TV+7+MTOz1WH7O0CT2q9IADVMNL+lWZ/3+ZNVjd06riD02JNkcYw7nUjcq3LKJADpPTCEg5qJJ3L7r5SIGvx+rwLAaGIenZ4mHrcWF1YqUp35SdlzW3pgnN1PUl6xbZTONJUgbgEndY6JCwR6oN5ZudX3mRn7I1TtDcYUnbRfWxyFrwrIR2pKq1Z30zABdOPr7hLXhJM0j+4EYSK8v9QeAzHeqy13X8N+X95SbL+bmJ+JobkGxlxpIudSZ8W3XTjMDnT5k5R3X0E6m833M2EqCBld1M1BMHYx4RAxMjtKvf0NCq7rMfF4Dvp1CikbmCiWvlQQ7hIa/9LqKHxMNDb9sXrmguZOfwMDdOmTZCm2X0rMbgCnJ+F2+8C0DMQrGVitMK/QTGKr3JGyt372bE+kRiNdBSlpSB8sJJ2pSDpXSt5UV175ZshYneN+TFL8O4FxrWaW4+rKquoTaBsTuoSkka6ClBP0dBeYHkTiexsPgA8J/K5kfm+pafhydjplEocZgLwiW44kqkuwucbgMrO6tXyxc7GW1IGhC0jKdYw7hyHmA7gwwSHVMcn5qZry0kcz5u5O6uAMkHdfQbo0Z0wG8UQA5yVyDwKWMeiO2tKK9ckcW1JJskwvvJ4EXgDQO552DLSCMU+R9HT1jIo1SRtQgrAU23KJaRKAOwCkxNm8QQrcutRV+V6yxpM0knKLbPcx0ROI7/V2mAh/9ej6H+vL530Tb5+jXPY+aW00DELvJxm9BMjMAhkMOiyYD0uIwyT1PaqmfvXx43MOxXv/bJdtqKqJaQDbER9ZGhPdU1dS8bd4+wyHTpOU78pXmzxZz5B3aR0rJBhVGuvTYiUnx2UfLHRcwcyXETASwAgAA+Poczsx1kriL4npQ83U9mG984U9sTQcXTQxS4f2CAg2ADEtAQGAwX/OWtv8uwULFuhxjDMEnSIp35WvNmtZ/wDwizia1UqiKUtLKpZFq5gz3X6BEHwnCNeDcXbCAw0PCeALgP8Difm15e4vojWwFNsvJfDfwDg39m543tC1zfbOEJUwSQkQ5GHmR7LWNT9uNOA818R+rHkmMWgsEpzAEwED/yWwm3XMr5vh3hup3khXQUovzfwgA8WI8RVIIHetetr4RFenCZFUUFCgbB1hngfg9th6wRoAd9aWVH4aqYp1+qRBJLRfMfhewG9D2v1oBGGOqiiPG1nCrcWFF4HxMmLdAzIq60ynT0iEqIRIynUUPsfAhJg6ILzW1CzHRrIkX/rwHX01xVTChLsQ/0qqK9EMwrNCUV3Vzuf2hauQ55rYT+paFRjXx3JDBv+5rtQ9Jd6BxE2S1VF4P4CnYhoT8FidenpRuF8PEVGOwzaWGE8ivgVAd2MfCA/XlbqfDTYlAd7vYXXYHmPG72O5GYPvrit1z45nAHGRZHHYbiDQ64i+zNaYMKGupLIq3MVcl/001ng+gNGxD7WHwVgsTcrEpc45m8Jdbt+CPIXoqz+PIHlNdUnVh7F2HTNJ1mnjz4UiawH0ilJVI8IdNSWVC8JdzHXYb2bwswD6xTrIowgHAZ5QW+p+JdxFS3HhOGLMQXTD9R5S6eIaZ8XmWDqNiaSRroKUEzRzHYALolSNSFC+K19t0rJmEfCrWAZ2FINBeDpd2fJwODudpchmI6IKRH+ilqarW0bHYuuL6VwnQ8soQXSCGEzjwxF0/oPjMpr1rNe/AwQBAIHxQLM2dGG2a7I5+GJdmduN2OannBYt66GYOoz2JLUfNyxGtHmIUFZbUukIaT/N1p8UegNAbiwDOsawRPOk3lj/2OwDwResDtsTAD0YpX0bk5JTVzLnc6NKhk9S3n0F6e3nQdEWCq/UlbqLgwst02z9SaWP8N0kCAAuVUytiy3TbP2DL9Spw6aC6Z0o7VOINfdIV4Hh1sOQJJmR8QCib9ZWaWqqLXh5mu2abIaCRfGZUI49EDCKFHor+NXHTqfUTK13AtgW5Q7nZ3jM9xrViEhSXpHtZICjvTPbpKQ7652zm/wLr5syJVXVWt4gUF6U9t8V5Khay7yCgoKAN06984U9THwbvAeYEUGEh7NdYwZEuh6RJEn0GGDsk8AMx9Lyis+Cy/f1PjQToCuN2n73QDdvG2F+Mri0rsRdA/BjURr3UfWUkPnch7AkWYsLL4L3wCsiGFydta7p6eDy3OLCAhD/OsqgvpNg4F5rke2nweX9DmSWA7w2SuO781xjzwh3KSxJ7SYOo3W+FFK5J9iafbFjwghmPGc4mO82CERzvFPFEbw1a1arIJ4MY4fpFF1THgl3IYSk0Y7C4QTcYjwSVNSUz10eUOZyCQFtLqJbJL7r6C9B84gC/cO8ZiCeb9SQgIJggoEwJGnA/TBech/ySD3k/ZmjbZp0HC0UjEHItzjGhUwXpIpiAG0GLU0sRMhUEUBStmvMAAJsRv0zMCv4yNs6fdIgAj1qPPLjDExPZU+dHHAuVuOs2AxGpWEz5snBy/kAkhTd9EsAIaYOP7SQNP05pJQ8JQD6Rhn28YZBakprUXChhChjwCgOqr9Jawt4CgNIIqYxht0yqmrLn93pX5RTNP5UEAqjDvk4BDPuyZ4+doh/2dKyudsAhLWid7QDj/X/3EFSjmvCMBjHB7FOyszgQkHyIRxdJ6pHDQhIVYVyT0g5czRXr9H+5HaQpHj0MTBedlcvK50TsNbPcdkHI8Zj9GTi3BHX4L6bH8SNuWNw7mkWmNOO6gXlr4Pnptoy98cAVhi0EapQbvZ96DickoSbDQ9AiF8ILlI0aWNQWuzjTQ62Nm3E8EGjYT1jFIBRkAzsaGjGhp37sH7Hdqzfvhpbd62G5C5zHY8HmSa1ZQKAgLcQgZ5l8KxIjRh0K4C/AO0k5bkm9iPgfIOOPCma8nJoMd2ZwKA7BRLpEEoTqpYux/1XXQoAEASc0i8dp/Q7GVecczIACw626FixdTdWbNmIFV99it37o9g5uxCS6E4EkcSq5zVo6p8Q4e1F4Ess02z962a49woA0D2ey2FkEWd6P9h5PqfYfjF7PUm7FZTmPXVfvWclPHpkf8PeaQpGnzUYd18zGn+5awr+NLkM43/8G1x01hVQ1dTuGi4Ar6X84unjAv5Wtc752wEsj9AEABQhRB7ge90R8o174f8EFwk2tu11FURqOoDDADXh5eWrMObiH8bUbkhmKoacfxp+cv5paPZci2WbvkXN6v/is02fQNcMjdRJgaootwOYHlDIWATCRZHaSMJoAG8IACDQFYY9ED4ILeQfxTvQZECkHHngP9ocYoCPCekmgctGnISHfnY9nrm7BHdcOQlD+g9L1hDDgplvDCmDfMuoDYFHAwD98IGxGelp4iAiv+4ODF3b1N/fmJo9fewQVShfIw7n9WTBfPIwqKYjx1djR92Ky88c2un7MoAvtjTgreWf4LONS8Ay6YsOVlQ5+BNn1S5fQfbkySZ1YOsBRIi+Z6DVrFIfkZFK58HwhJY/CbZ2m0i5Ej1AEISAorYEFL2xMjlRkATg/Ky+ePjnN6DkziKck2VJyn39u9A94lL/gvrZsz0M/q/BmFJb2uhcoRP9wPjW9GVwEQOXJTzUToDUTBAF/sL3e7Zg874QP5BOYcTgXnDd9gs8fNvDOGnAmUm7LwFXhJQRLTVqw0IfJggYbnhjpnVheuu2aAd/iJRwfvwS85dFjaJJCKOy+uHpwkmwXXM30lKMTJqxgSl0NcySDSdWZhomGDB8oRPpoSQh6bFCMUGkhLc+fdWwGo1tSY8nBgAognD9qOGYMW4qTh3U6a99VnCBIGGoskJEwwRFIUkopoAg3cumjT8RXtmybocwhS8n0Ybnl0Z8tScFp/RLx6N3jMcVF9zUmducdMlDEwJsWBK6sRQO8zABMv6D78ehgJDFVlUPew7fHRBK5BXXsq8/g+wiOS8fUlTCr390KWzX3A1BiYm6tKkyYHrRd6Vvh1fWLTwIgwTY8ByoZaVzQcBJIrHosXMjVY18DMN0EP9etaFbxnH9qOH4n5vuhaJGeLQNIFQZ8PdrFwqJGFkIhlnAIKqOgZCIbWLZMyZnkQYSxpaBf6+JGEiYdFwyYgim3PhbKCI+5R+SFPL3I6AlXN32i2YB4zCNgyElomccTSglereN+g6s+iamgPKkIPfMQZj4k/hiECTRCcFlUU5qzQLxKmZJ6vxaNAGQKbokHoHxj/pElWcSw1Ujh+I6yy9jri841OGUDEhiIF3AwBeMwvg7SOIe0SkVamyHv980bcDexi4VzQrBuMsuxMjTYotJYJIhg2NwxIUDASwANEWqgHBuxiTiVhZJBoQS2wNPpKFqaffNTQAgiPDbG29Cr4wYdiYydJ4H0MegxQEB4LBBhZAnSTAb1e8yUBxiOC1Sw6J1q/Hqyg14Z+3X+PzrBrRoXXtKm5muwn61oTccAIBJCUMSRSaJvCSFLg6OQA0+n9cjy2B2KYz2SMEY0Ks3Ms2M/n3akJZxAPv5G9R8swb/Wrcai1ZvxPvrd2DtrgPQZXL3VZeMGIILz7zCsA6RDDA0ksslYOT1yzioAvwNQOdEqmNSPMPhd4KogjfKHjCAk4idpEGZoSevgoBeZoZ3jm7Ft237sW3b1zjcqABsQmaqGadmZmD4ib069e1sV16NLzbVQNPDT90mjycgev0irO0HpER8lxN7n6SvjTqVxAE75Jryqh0wfkV2CUSUPZIPqshA74zY/swmBejbW0ffzBaItH34unUb3v3qS7z+5Vq8vmoTFm/4Fht2xzcFD8lMxdUXRjQd7Vzy6PMN/gWKbjI0szPhG8GgrUaVgq3k7A3pS6roXnQIkIjNgNonfUinnoQUUyhxb29cjddWrccbX25BzZbd2HvYyJ0buMVyIVJSwm4ZQsJfiMnQakuMtSoxrQWFfzd7N1kcYgAkYBWAUYYjTSbUdFCMdrn+5uTLQ5hTGeZUDwAP2tCIlft3o2knoaVFhUopGJBhxtkn9kFfs9dMlGlWcfkPrsV/Pn018EaMEMFFIpxtFFsuQWtVhr6awuxnCVgmCfalpZWrwlxcAka3uXMJEbtr34BeIRv6LkEwcZ/v3Y2D2wl6mwkZpnScNfR0vPeZAunv0SR4SciNosQUKwJrREsrVgPoeJcw0MrM09PULXlLS8IQBIA1/iCxr5YYONIZRRicGGbR0B0gAjLNjH592pCacQA7m3cFEgRASCwObEPExpH5MlXBevH5k1WNfMTl9VMpZXZdmXuGkVJH3Qz3OkRZcCQVIraNbKrSC716IqFCGCxfE2KRX11d5g74m+U6CkfC+Gxu7WJnRYvPpesjYjjS1S3WZeVVK2MZBDPejmfQnQHFeHbTJ31I9ErdgIONjM1bglwXCCG+i5JllOBv+ghot4APXdt4f7zyk6TwC5AUj+5q4ojxSeqXcXRoStWv3gwZbI6T9I+Qikw/NVqKMvOHQDtJL593HlsdticYaBRMDQxqIGA/QzZIQQ0pitLQskPd7a9kXyeGfWiRX20DcGoyvpgRiGMj6cTe3bNoMELDIYm1Gz8OLl5fV15Zh7KKjoJ2OZ9Lgyv6QwF/BLQfU7DTKcHihwR6hAl/AnEVEy8C0RLBWKlp+tfqwNYH/G/ATqdkUEikRU/ixN49n7Or5vPVkHrgdE6AO1gxhlS6BcZneZ/55rCOnygRLzTsnVAYHFGtq/KviKL2kQwwRTcJpat9YE7tfnOVP3bs0bB5e4izZhurmjukMhvHdRHjn77/d5DEqvYGjHQGGGflTrcHLBfrne6tAELftclGDPvYvumDu3wYRtAl8MHSD8O4J7O7PYKiA+0RFjmG9xN4zff/DpLab2QoOSmJQ0ReCfIxeDW2uw4y+pqm3wk9u2ioX70TDftDLGw6IEKkbASJ3xrejPCl/x41cEZmmms8FP5Fe2xtB7xZuShMgFnywBzdbjegV1elZoqO3ft1LF/1f+EuPR+cXMQ6fdIgoijWGknP+n8MIEk0Nb4CGJ4XKYpH/11Iqep5AECXJSck3ZgkgsDAzJ5ZNHh04J1PFkNqIWNsIpWcIQ1E2/3w5sONhGZhUgIEhgNIqp65oBmEsArEPjDhLotjXIAGXq1z/nYCukxsgyOczfiQkdIPqfG7wCUFH3y6AQcOhIZ6ErMjWAjX6rrzFID+J8otXw7WIQ/ZgChSnQnjFVsKgVzBhX0P9H4qqhJVgmBuhFGkTWZ6cEa47sGKTQexbkOozRTgz9NMW0ODlj2KC8aZQJnDyTAEF3jTdPKLxsOjO/KKxgfoCL01a1YrSWVMFB+yxCAZuh7ZcNo/o/udajd/24qP614PKWegFUQTgm2fOcX2i0EUzQnijXB6rGG38pLocRiv2IQk+Uy+Kz9gIqgpn7tcME+LMpCEILXIc87AXt3rCrh7v47/W7Iw1PQDAET3BufkyHflq4Lls4iiZSuYy8OWhytcWlK5CsyVUcb6w2YtK0Stt7a86g8E/CtK27gh9fDfj0hgQJ/uS1e7e7+ON95bCI8ndJ3EwPPhElt5paXJSIIBBPyruswdNqAsolFMNakORF+xufKKbAGbMmZmpU0ZA+Pw97ihtYafJjNSBsHUTRztOSCxaPEiNLeGjSysb2mRk4MLLUXjstvT+BihTep8f6SLEUn62DlnB4NDNmJBMElCVb6rIMCy+fHjcw6l6OInYCQtzIFbw/tw9kvvnlwkO/Z4sOjd19HSHHaHsh7SdENwZpvsqZMzQeJFRNVe4j+1n9GFhaF52ayKx9tzHxmARjTr5spgu95HM+buFpJuBJCUrMayrQHhVngDesWV4zEhrNveiIXvvxT2CSJgq2RxVbB6GblcQk1pfT5auCuAHVD1MqMKhiQtdla0QPIkRDP7MG6xFBWGaLtVz6hYI1T9UgBfRRlodMhWeNpCrQoDunDRoEvgo8+24d2PX4EMJ8jB2CCAK9vl0QJg0b4qiyGvEgM0qdY538hBNXpERW2Z+2Ni/DVaPYBd1iL72ODSaue8DVKlPABRc+ZFg9Yc+CSRUDGgd9ekUT/YxHj1vRqs+PLdsJoOBCxTTHL0J6WVG8O1Z6KozhbMmFNbWmEouAHEGPZCTU2/R/Q/MoF4bq6jMMQzcKmz4luhqvkARx2QEfSmAL9C9E4ZjBj9+GOGZOC/6/fhH28uwK7dEd70RAubWmS+v3BGSBVdfQLGwRBfkUmLuFgIuFes+ZMs02xnkUL1iK5W3MLgW+tK3SHLcCIiS9G4KQA9heg5hsLCfPJwqCbv/Hx6v1G45OzkHVF8vceDj5ZVY19D2DxWAKARqLxWPa0kltx8lmL708R8X5hLzYJ4dHWJO6Zo7LgykeUW2W5jon8ghmxbxDy2psz9UriLVqctHzrNBeG0mDtvh5I5DBl9vT/Q7KFX4JxTOu8etPuAjvqVa7Ap2HnEH4wNDHl7PInoc1z2wULjjQiKTmGCLVKWtnCIO6efxWFzEuiRGKrqxPz7mjJ3iC0K8GaU4YyMhxj8MOKRB1VS0OuUgSDScO3IHyc8JzEDG3c0Y+X61djx7QojLaE2EP6WrjRNX+xcENYHPtdhvwfM+05d1/RisENPrqNwJgMdJweJJF+MmyTvK8tWCWBcTA2Y5x42Nf8qOIrdh4unjxupCPE0gJhVv5Q+Z6B33zbcbr0KFMeJOQP4dp+GTdt3Yf1Xy9HYuDtak0VSVX4XKY9fvsue1qzxbHT8LXgtMZX6kxXwNBH+OXRN021xe2YlksJ0pKsgJUMzLyTgJzE2qReqfnu1c17EzW3OdPsFisLTmPELRHudksCpZ+ThpouNdX90Cew9qOObPYfw7Z6d2LFzHZoaowY+SwLeYqby2rKK2kiVLnZMGKFAfxFhM7QFkpXrKJzJjAv6Hex97VuzZsVtgO5ExmZ7WrPGCxH7E3CIme+pK3OHOmX4IXf6+AtZ8F0AF8BAazz9hEEY0j8LqikVJtUEXUqwlPB4WtDUchiHDu9GU9NecOw6rA0ALRA6/lg9oyLiBp6IyOKwTQJjJqJkxQFhDUmU6SZ6T8DTFG0/FPE2ncl9nndfQbo0mxeCcE0czf5PqsqvIr1CfMh32dNadL6JQWPAfCW6JgdGIwj/Zqb5/Q/0ejvar9zqsJ8J8N8RRm0rIghvisNNt1bPXJBwtHWnSAK8Ca32ZR5yA3xbHM2aQHgqXWl6MtJk7I98V77apA+9WDBd2S7jdg4Sc8r8BsAKZv5QgfJB227TMn+Hz0jInjo5UzW1TGfQFALiiQiYr+1KHR9LH0boNElAxyvgCTAeiF47ADuZuEw53Dwn3l9avqvghJa2E85ikqdDoD8kehPRCRJIA2QzMTVC4CBLahBMGxWN1n/8+Jy4wvYs02z9SdBvQLgHQMRMYWHAIH68rrRqWrgsz/EiKST5kOuwT2rXuo5XK3wXAbOkzn+rm+GOrLPTTchxTRimePTfMWE8jHN3hEMzMybUlVUmzR8xqSQB7RM/yZdBiFt5loFWAr0OgTlDVze+H+9StTOwuu7szbrpBgIKwHwDomcEDQVhHeni9uDcUp1F0kkCgFEue59UDX+Lc54KAAO7BbAIwCJWtQ8SXRkZYbRr3EDNQ9dC0C1g/CjO+SYQzHPTTc2/jWWOjRddQpIP1qLCW0D4K4DOnszpAD4H4WMCryCJL2AybQh2fYqE7MmTTWknaSdqUp4HydkAZxMoO5pqZoz4Gsy/qS1zG/vSdwJdShLgTZylekyPg6gQ8YpNRUcjCFvAaIaXSN/T1gSvFMyJ8P5AukLpUgJ4Bqo2rSuecn90OUk+5BXbRuks/kDgy7ulw67Fu1LSg+HSt3YFuo0kHywO2w0Emg7jXE1HKz5iCFdd6dz3u7PTbifJB4tj/JXEcioIV6MnhOBjh2TCm4oUj1WXza3uiQH0GEk+5LnGnqFr6kQC29H5BUYy8Q2DqgB9dl1pVed9NDqBHifJh5GugpRebelXSaKbQfgpeSf97sa3YHqVCC+furZxSXfu04xw1JDkj4KCAmXb2WYrGFcw43IQ8hDN4pwY9gFcC9D7UtJ7y1JO+yKWY/HuxlFJUjCyJ082qQNazmGi84jwAyKcIZlPJtBQAINh7C9xCIy9IGwj0CYGNgJyNYM/7enXWKw4JkiKhuumTEk9lLHX3JqW1n7+JJtSW9paezX2b0rkkO1ow3eCpO86usaz8HskFd+TdAzge5KOAXxP0jGA70k6BvA9SccAvifpGABZHLaIGYMBQCj6AXhEs/CoB+PxtikoKFC2nm2+AACIZZNX3iYQo1z2Pqk6R4uEMxib+lXw6Wxeke1kKShsqAVD0VjBIWrVDigtzU2d8YUzQvbkySYxuPUyIZEDUBYR92OGDmAvAxvBcsnS8nmfxupJpIJhGCUgNQUgQKbosDoKdwK8ihnvqUQvRQqgAoD152X0StW4HgAYYjkQmj46TePLGEj42Fn3aGMQpBLGgqaA8ftw9Qk6SAOgEGSGGVaHbQuIVpJELRO9FKwDFC+sRXYriKeoA3EtpC9JCMOfCgIAErAU2bZbHYULGfLpaOapeF93gwC6kojKdWC9tcg2J9s1Jh5/tKMMlAXG9UwoBXidtajw/eBE8rEg1zHuHGux/XUQ1wC4HaFZXMIZbU8B8BuCWGNx2Ga1J7QMC3/D5B5QUAJ1id5ErDChD0OkEPMZACwABgEgEI1X9ZS80a5xlxtFvcUCYrzHAgviaaMChol0AZoN4g73KmJKBaSZmVKJMFSCziBwDnxSMoR8hcRyS5FtUjSfdR9yiwrvYBLPgrkjUIqAlQx+TbDyb2GizSetOrTz8ODBakP/Q0Ok1EeQFDcC+BmAk+GVAbqnTZE/zym237y0pCIkae4RkhgHa0sr/x5tUAUFBcrWs9JvANH/AjgFjLN1j1KF2CMswoIFVtSWRO8/Psh3a0vcrxjVaI+TupbBDngjJExENMcyvXBPXXnlm0ZtrQ7bEyDyFxxZxRIP1YZvpwPY3P7vnezJk3+nDmy9C16Nh4EAThHMH+UW2QqDg+/iXt0tWLBAry1zL1RYvQQ+2TXiH1uK7Yair0crqmcuaK4prXhV25WaA3QolClE+ONIV0HE4LZcR+F04AhBTDRz6Nqm86MR60P97Nme2tLKvwhVPQfAu+3FaUw0z+IYHyBFnfAS3CsURf5RfD9L9F5HA+pnz/YcVpsmgeDN9U44I8OTHjbEP7fIdhsDpe0fmYGJdSUVcct2A0C187l96eqWa8HsE4Q0EeQrlmm2juzOndsnSdmxMiPmPKOqxwJWOhe0wV8OgSgkpMcyzdafiZ6Bb6EGOOpKK+d0pt/FzsVaumnrZHCHwHtfEtShUdQpklRN9V869ozoXLKhi458EuQNsQmAEPQIjgS3Laotc89IRreLnYs1k+65DT4FGUJ+bpH9RqCTJLVvbn2xN12vH9MNEKmiQ2aHgsJdrK47T2HC3e0fPQA9kIzQFh+WPPp8A9MRwUcmLgE6SVLefQXpALzCmhw26+MxB73V0+EDyME5izSlQ3CdGe7Obn7Dwaxsfs4vZ9UFlmm2szpFEp+Q9sOOD9SNWWC6EELhI75/jKAoaPoD9DURAAAFBElEQVRFRz3isBoVncVi52KNQB3ZsUiImztHklQ6ZAKI8Eln7nW0gEkc2UoQOny9298aPvH6A2nq1g+6agxERxZkIL4qYZ1mS5Ht50R0V/tH1vUwWU3iAfPQXIft6lirE7GnuqTKUGw+XuS78lVwVoewoGDqSD/kSU8brrQHljGwySi/VGehauqXbUdSto6Ii6SCggJl81nm0YJ4IhHdgfY5jUBVnY8woJsZuDnW2sy0B0n0cs135avNnqy/gHBhe9GKmrLKd1DqzdQiFKWvz1IqujjB15JHK/ZYimxt8CrFDDhCEmGI1VEYkogJABhkIvBAHmEeJoDUIP/6d9PUjhXPMYds15gBJj31Buah94JwPtAeFkqw+6/cSEr2ya8wUZe6HzMzWx2FzfCSpPo/SekAwr5ufJkpg0IfthPoiVr1tL8kxzWX32IWlbHWFsRxOT1aimw/BwkLCCbB6M+MwQAPVynlDAbD79sdFJJ/WVPuDlAkFkIckD7OmLs05Vm2a7JZBXyZsg/4k+QBI1QqHgAEWsA4DGArQF9IwdXLxOmLk+o3TbSurrSiy3JeKMBSHTybGCcyEC7YRgewgCGn15aHnu80Nuub0tOEj82srhonAJi05iw+svrf5G8F31ZbVpnwKenRjuoy99e50202FvQmfBQxNgF4l4jqhaovNDpu+fzJqkaro3ANvFaIQXnFtlGx6tXFDRbX+H5EDK47rnwcasrdbxPhiEIzwcSSp9WUVjwb03mYX/JECeoygzITfu77v4B49bgiCQA8O1OLANS0fzxVKBSixBwJEjS/4wPj7ksempB0vaOcYvvFAC73doHdp65tXHLckVQ/e7ZHYfV2AA0AwMANlum2mLRQ209NfYmSBmqperwyPVEhmJ/CEQv7HxYsWKAfdyQB3rMwBo8DOpatj+YWF46OqbHkB+HzWWA8nFc8LmnR9BaH/UF4Ba4AYLumpv4JOI797upK3f8C4c/tH1UwXshzTYyac6623P0FuOOsxyRZvBScTyoR5BbZbySwLwcVM+ieeufsJuA4JgkAtJ2pDwBUBwAMDJWaZ14s85O2O+VecEce80EEsbQzT5S1uPAuJv4nOsxO7KorrejI+3Nck1Q/e7ZHqNqd6FBSoessRbZwEtEh7TRTWwEAn8PnAJ3FOxaHzRmct8MIuS77aVaH/UUwZqP9yIdA7qVlVSX+9Xo+e64PjMzgpI7RkIFDuzoruFTtnLcht8h2FxP5Ens9ai2yf2KkvwoA9c4X9mRPnZyrprQ+D8b1XvEoeqRZM99tLSp8Bsyv15a7QwTv8135apN2+mWC5a2SYPcTnZLM7Kgrdz8afJB49JAE2IWm2+Np0MTmEA/WRFBT5n7JWlR4JQh3ATCB5It5rokXRhOYqn9s9gFyuW7K8WyaSkQPAzgBwGAQXCByWR2F38DrwrWTAFUCJxOyTifIPkx+Rg/GBmKeUlvufhtloe5+x/Xrzh+iqeleACu8nyhL17WY9k/sdMq6MvcMRZXDGfxnBOacGgLvGdTPGLiBgFEI9G7dBuLfaLtTz60pd7+NCFAJPBUAJBmmLo0bQ/b2am7IPDAVAEBiZ7g6pOpfQhNTE+2DiEOPR5jeJsh9AKBBXRHrvapnLmi2Ouy3EOTNAEAMXPTIuFMBhGT4DYd2i8WUfJf9980argRwE8AXMZBFXscVDUADg9YR8RKWcmGsTvv/D2UGv9Hi6yYwAAAAAElFTkSuQmCC",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;
|
|
15
|
+
Cancel with right-click or Escape`;break}default:return n}i.push(new K("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",Hu,[o.createElementVNode("div",Zu,[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,Wu)])]))}}),Yu=A._export_sfc(qu,[["__scopeId","data-v-b890a4be"]]),Ju="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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",Xu="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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",Ku="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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",Qu="data:image/png;base64,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",$u="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 td={"@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"},"@trevoreyre/autocomplete-vue":{description:"Simple autocomplete component in vanilla JS and Vue",license:"MIT"},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 ed={class:"list-group my-3"},id={href:"https://oslandia.com",target:"_blank",class:"list-group-item"},sd={class:"d-flex w-100 justify-content-between"},ad=["src"],nd={href:"https://www.bpifrance.com/",target:"_blank",class:"list-group-item"},od={class:"d-flex w-100 justify-content-between"},rd=["src"],ld={class:"list-group-item"},hd={class:"d-flex w-100 justify-content-between"},cd=["src"],gd={class:"list-group-item"},ud={class:"d-flex w-100 justify-content-between"},dd={class:"text-end"},Ad=["src"],md=["src"],Cd=["href"],fd={key:0,class:"blockquote fw-light"},Id=o.defineComponent({__name:"AboutPanel",setup(e){const t=td,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",ed,[o.createElementVNode("a",id,[o.createElementVNode("div",sd,[a[0]||(a[0]=o.createElementVNode("span",null,"Oslandia",-1)),o.createElementVNode("img",{src:o.unref(Qu),class:"logo",alt:"Oslandia"},null,8,ad)])]),o.createElementVNode("a",nd,[o.createElementVNode("div",od,[a[1]||(a[1]=o.createElementVNode("span",null,"BPI France",-1)),o.createElementVNode("img",{src:o.unref(Ju),class:"logo",alt:"BPI France"},null,8,rd)])]),o.createElementVNode("span",ld,[o.createElementVNode("div",hd,[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(Xu),class:"logo",alt:"France 2030"},null,8,cd)])]),o.createElementVNode("span",gd,[o.createElementVNode("div",ud,[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",dd,[o.createElementVNode("img",{src:o.unref(Ku),class:"logo",alt:"France Relance"},null,8,Ad),o.createElementVNode("img",{src:o.unref($u),class:"logo",alt:"European Union - Next Generation EU"},null,8,md)])])])]),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,Cd),r.description?(o.openBlock(),o.createElementBlock("blockquote",fd,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))]))}}),pd=A._export_sfc(Id,[["__scopeId","data-v-4397f0a3"]]),J=["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 vd(){const e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0,s=Math.random()*4294967295|0;return(J[e&255]+J[e>>8&255]+J[e>>16&255]+J[e>>24&255]+"-"+J[t&255]+J[t>>8&255]+"-"+J[t>>16&15|64]+J[t>>24&255]+"-"+J[i&63|128]+J[i>>8&255]+"-"+J[i>>16&255]+J[i>>24&255]+J[s&255]+J[s>>8&255]+J[s>>16&255]+J[s>>24&255]).toLowerCase()}const wa=vt.defineStore("analysis",()=>{const e=o.ref([]);function t(s){const a={collapsible:!0,component:o.shallowRef(s.component),icon:s.icon,id:vd(),name:s.name};e.value.push(a)}function i(){return e.value}return{getTools:i,registerTool:t}}),yd=["id"],bd={class:"accordion-header"},Md=["data-bs-target","aria-controls"],Ed=["id"],wd={class:"accordion-body"},_d=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",bd,[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,Md)]),o.createElementVNode("div",{id:`${t.id}-collapse`,class:"accordion-collapse collapse","data-bs-parent":"#accordionExample"},[o.createElementVNode("div",wd,[o.renderSlot(t.$slots,"default",{},void 0,!0)])],8,Ed)],8,yd))}}),Od=A._export_sfc(_d,[["__scopeId","data-v-acce0d55"]]),xd={class:"accordion",id:"analysis-accordion"},kd={key:0,class:"warning"},Sd=o.defineComponent({__name:"AnalysisPanel",setup(e){const t=wa();return(i,s)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",xd,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTools(),a=>(o.openBlock(),o.createBlock(Od,{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",kd,"No analysis tool registered.")):o.createCommentVNode("",!0)],64))}}),Nd=A._export_sfc(Sd,[["__scopeId","data-v-48d1d631"]]),Ld={},Pd={class:"vstack gap-1 flex-grow-0 flew-shrink-0"};function Td(e,t){return o.openBlock(),o.createElementBlock("fieldset",Pd,[t[0]||(t[0]=o.createElementVNode("hr",null,null,-1)),o.renderSlot(e.$slots,"default")])}const ei=A._export_sfc(Ld,[["render",Td]]),ii=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(u){if(u){const g=[];for(const m of u)g.push(m);i("import",g)}}function r(u){const g=u.target.files;n(g)}function l(u){s.value=!0,u.preventDefault()}function h(u){s.value=!1,u.preventDefault()}function c(u){u.preventDefault(),u.dataTransfer&&(u.dataTransfer.dropEffect="copy")}function d(u){var m;s.value=!1;const g=(m=u.dataTransfer)==null?void 0:m.files;n(g),u.preventDefault()}return(u,g)=>(o.openBlock(),o.createElementBlock("div",{draggable:"true",onDragover:c,onDragenter:l,onDragleave:h,onDrop:d},[o.createVNode(A._sfc_main$1,{title:u.title,text:u.text,icon:u.icon??"bi-box-arrow-left",onClick:g[0]||(g[0]=m=>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))}}),Dd={class:"border p-2"},Bd={class:"float-none w-auto form-text mb-0 px-2"},Vd={key:0,class:"form-text mt-0 mx-2"},Rd=["id","aria-label"],Fd=["value"],Ud={key:1,class:"form-text mt-0 mx-2"},_a=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",Dd,[o.createElementVNode("legend",Bd,o.toDisplayString(l.label),1),l.descriptionPosition==="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",Vd,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,Fd))),128))],40,Rd),l.descriptionPosition!=="top"&&a.value!==null&&a.value.description?(o.openBlock(),o.createElementBlock("div",Ud,o.toDisplayString(a.value.description),1)):o.createCommentVNode("",!0)]))}}),zd=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"]))}}),te=A._export_sfc(zd,[["__scopeId","data-v-7c3ff3bf"]]),jd=o.defineComponent({__name:"EmptyIndicator",props:{text:String},setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",null,o.toDisplayString(e.text),1))}}),si=A._export_sfc(jd,[["__scopeId","data-v-a385fce5"]]),Gd={class:"list-group-item item"},Hd={class:"d-flex"},Zd=["title"],Wd={class:"icons"},qd=["data-bs-target"],Yd=["id"],Jd={key:1,class:"table table-striped table-sm table-responsive-sm"},Xd=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",Gd,[o.createElementVNode("div",Hd,[o.createVNode(te,{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,Zd),o.createElementVNode("div",Wd,[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(si,{key:0,text:"No properties"})):(o.openBlock(),o.createElementBlock("table",Jd,[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(Ea,{key:r,"attr-name":r,"attr-value":l},null,8,["attr-name","attr-value"]))),128))])]))],8,Yd)]))}}),Kd=A._export_sfc(Xd,[["__scopeId","data-v-364a81a5"]]),ks=[{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"}],Qd={class:"d-flex flex-column h-100"},$d={class:"list-group list-group-flush flex-fill overflow-auto"},tA=o.defineComponent({__name:"AnnotationPanel",setup(e){const t=Gi(),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=pa.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",Qd,[o.unref(t).count===0?(o.openBlock(),o.createBlock(si,{key:0,text:"No annotations"})):o.createCommentVNode("",!0),o.createElementVNode("ul",$d,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getAnnotations(),u=>(o.openBlock(),o.createBlock(Kd,{key:u.title,annotation:u,visible:u.visible,"onUpdate:visible":()=>{u.visible=!u.visible,c.$forceUpdate()},onEdit:g=>o.unref(t).edit(u),onStopEdit:d[0]||(d[0]=g=>o.unref(t).stopEdition()),onDelete:g=>o.unref(t).remove(u),onDownload:g=>a(u),onZoom:g=>r(u)},null,8,["annotation","visible","onUpdate:visible","onEdit","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(ei,{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]=u=>o.unref(t).setShowLabels(u)),title:"show labels"},{default:o.withCtx(()=>[...d[6]||(d[6]=[o.createTextVNode("Show annotation labels",-1)])]),_:1},8,["model-value"]),o.createVNode(_a,{label:"Picking mode","description-position":"top",current:o.unref(ks)[0],items:o.unref(ks),"onUpdated:current":d[2]||(d[2]=u=>h(u)),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]=u=>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]=u=>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]=u=>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(ii,{title:"Import annotation from GeoJSON",text:"Import annotations",onImport:l})]),_:1},8,["disabled"])]))}}),eA={key:0},iA={class:"modal-dialog"},sA={class:"modal-content"},aA={class:"modal-header"},nA={class:"modal-title fs-5",id:"exampleModalLabel"},oA={class:"modal-body"},rA={class:"modal-footer"},lA=o.defineComponent({__name:"ModalOverlay",props:{show:Boolean,title:String},setup(e){return(t,i)=>e.show?(o.openBlock(),o.createElementBlock("div",eA,[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",iA,[o.createElementVNode("div",sA,[o.createElementVNode("div",aA,[o.createElementVNode("h1",nA,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",oA,[o.renderSlot(t.$slots,"default",{},void 0,!0)]),o.createElementVNode("div",rA,[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)}}),hA=A._export_sfc(lA,[["__scopeId","data-v-1f7f2e97"]]),cA={class:"list-group-item item d-flex d-flex-end"},gA=o.defineComponent({__name:"BookmarkItem",props:["url","name"],emits:["delete","share","goto"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",cA,[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)])])]))}}),uA=A._export_sfc(gA,[["__scopeId","data-v-682112f6"]]),dA={class:"input-group mb-3"},AA={class:"form-control text-truncate"},mA={class:"input-group-text",id:"basic-addon2"},CA=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",dA,[o.createElementVNode("span",AA,o.toDisplayString(i.url),1),o.createElementVNode("span",mA,[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 Lt 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 ti(l,h,c);return new Lt(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 fA(){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 ti(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 Lt(r,l))}return t}const Oa=vt.defineStore("bookmarks",()=>{const e=o.ref(new Set(fA())),t=o.computed(()=>e.value.size);function i(r){e.value.add(r),_t.dispatchEvent({type:"bookmark-added",value:r})}function s(r){e.value.delete(r),_t.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}}),IA={class:"d-flex flex-column h-100"},pA={class:"list-group list-group-flush flex-fill overflow-auto"},vA=o.defineComponent({__name:"BookmarkPanel",setup(e){const t=o.ref(!1),i=o.ref(null),s=o.ref(null),a=Dt(),n=Oa(),r=A.useCameraStore();function l(){const f=window.prompt("Bookmark name","New bookmark");if(f!=null){const C=new Lt(f,r.getCameraPosition());n.add(C)}}function h(){const f=[];for(const C of n.getBookmarks())f.push({title:C.name,url:C.getUrl().toString()});A.Download.downloadAsJson(f,"bookmarks.json")}function c(f){r.setCameraPosition(f.camera)}function d(f){for(const C of f)u(C)}async function u(f){const C=await f.text(),y=JSON.parse(C),I=new Set(n.getBookmarks().map(_=>_.name));let b=0,M=0;y.forEach(_=>{I.has(_.title)?M++:(n.add(Lt.new(_.title,_.url)),b++)}),a.push(new K("Bookmarks",`${b} bookmarks imported (${M} skipped)`,"success"))}function g(f){i.value=f.getUrl().toString(),s.value="Share bookmark",t.value=!0}function m(){const f=new Lt("temp",r.getCameraPosition());i.value=f.getUrl().toString(),s.value="Share current view",t.value=!0}return(f,C)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[o.createElementVNode("div",IA,[o.unref(n).count===0?(o.openBlock(),o.createBlock(si,{key:0,text:"No bookmarks"})):o.createCommentVNode("",!0),o.createElementVNode("ul",pA,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(n).getBookmarks(),y=>(o.openBlock(),o.createBlock(uA,{key:y.name,name:y.name,onShare:I=>g(y),onDelete:I=>o.unref(n).remove(y),onGoto:I=>c(y)},null,8,["name","onShare","onDelete","onGoto"]))),128))]),o.createVNode(ei,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(),f.$forceUpdate()})}),o.createVNode(A._sfc_main$1,{text:"Share view",icon:"bi-share",title:"Share current view",class:"btn-outline-secondary",onClick:m}),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(ii,{title:"Import bookmarks from GeoJSON",text:"Import bookmarks",onImport:d})]),_:1})]),o.createVNode(hA,{show:t.value,title:s.value,onClose:C[1]||(C[1]=()=>t.value=!1)},{default:o.withCtx(()=>[o.createVNode(CA,{url:i.value},null,8,["url"])]),_:1},8,["show","title"])],64))}}),yA={},bA={class:"list-group list-group-flush border-start"};function MA(e,t){return o.openBlock(),o.createElementBlock("ul",bA,[o.renderSlot(e.$slots,"default")])}const Fe=A._export_sfc(yA,[["render",MA],["__scopeId","data-v-461b97dc"]]),EA=["aria-expanded","aria-controls"],wA={key:0,class:"icon me-2"},_A={class:"flex-fill"},OA={key:1,class:"icon ms-2"},xA=["id"],Mi=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",wA,[...h[0]||(h[0]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0),o.createElementVNode("span",_A,o.toDisplayString(l.title),1),l.iconPosition!=="left"?(o.openBlock(),o.createElementBlock("div",OA,[...h[1]||(h[1]=[o.createElementVNode("i",{class:"bi bi-chevron-down"},null,-1)])])):o.createCommentVNode("",!0)],8,EA)]),o.createElementVNode("div",{ref_key:"collapsible",ref:r,id:o.unref(a),class:"collapse"},[o.renderSlot(l.$slots,"default")],8,xA)]))}}),kA=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))}}),SA={class:"slider d-flex"},NA={key:0,title:"Transparent",class:"bi-x-diamond me-1"},LA={key:1,title:"Opacity",class:"bi-x-diamond-fill opacity-75 me-1"},PA=["value"],TA={key:2,title:"Opaque",class:"bi-x-diamond-fill ms-1"},DA=o.defineComponent({__name:"OpacitySlider",props:{opacity:{},size:{}},emits:["update:opacity"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("div",SA,[t.size!=="small"?(o.openBlock(),o.createElementBlock("i",NA)):o.createCommentVNode("",!0),t.size==="small"?(o.openBlock(),o.createElementBlock("i",LA)):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,PA),t.size!=="small"?(o.openBlock(),o.createElementBlock("i",TA)):o.createCommentVNode("",!0)]))}}),xa=A._export_sfc(DA,[["__scopeId","data-v-5b0604f2"]]),BA={class:"list-group-item"},VA={class:"d-flex"},RA=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",BA,[o.createElementVNode("div",VA,[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(te,{visible:s.visible,"onUpdate:visible":a[0]||(a[0]=n=>s.$emit("update:visible",n))},null,8,["visible"]),o.createVNode(kA,{title:s.name,class:o.normalizeClass(["label",s.visible?null:"disabled"])},null,8,["title","class"]),s.hasOpacitySlider?(o.openBlock(),o.createBlock(xa,{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)])]))}}),Ss=A._export_sfc(RA,[["__scopeId","data-v-a7bbfe26"]]),FA={},UA={class:"spinner-border spinner-border-sm text-secondary",role:"status"};function zA(e,t){return o.openBlock(),o.createElementBlock("div",UA,[...t[0]||(t[0]=[o.createElementVNode("span",{class:"visually-hidden"},"Loading...",-1)])])}const ka=A._export_sfc(FA,[["render",zA]]),jA={class:"d-flex"},GA={key:0,class:"icon spinner d-inline-block"},HA={key:1,class:"list-group-item"},ZA=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",jA,[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(te,{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",GA,[o.createVNode(ka,{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(Fe,{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(Sa,{key:d.name,dataset:d,onZoom:c[5]||(c[5]=u=>h.$emit("zoom",u)),onClipTo:c[6]||(c[6]=u=>h.$emit("clipTo",u)),"onUpdate:toggleGrid":c[7]||(c[7]=u=>h.$emit("update:toggle-grid",u)),"onUpdate:toggleMask":c[8]||(c[8]=u=>h.$emit("update:toggle-mask",u)),"onUpdate:visible":c[9]||(c[9]=(u,g)=>h.$emit("update:visible",u,g))},null,8,["dataset"]))),128)):(o.openBlock(),o.createElementBlock("li",HA,"No dataset in this group"))]),_:1},8,["id"])],64))}}),WA=A._export_sfc(ZA,[["__scopeId","data-v-7592eab8"]]),qA={class:"d-flex"},YA={key:0,class:"icon spinner d-inline-block"},JA=["id"],XA=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(Ds)[l.dataset.type]??"bi-file-earmark-x",title:o.unref(Bs)[l.dataset.type]??"Unknown"},null,8,["icon","title"])]),_:1}),o.createVNode(te,{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",YA,[o.createVNode(ka,{title:"Loading..."})])):o.createCommentVNode("",!0),o.unref(Pe).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(Pe).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(Pe).get(l.dataset.type)),{dataset:l.dataset},null,8,["dataset"]))],8,JA)):o.createCommentVNode("",!0)],64))}}),KA=A._export_sfc(XA,[["__scopeId","data-v-1aa9a2d7"]]),QA={class:"list-group-item"},Sa=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",QA,[o.unref(A.Datagroup).isGroup(t.dataset)?(o.openBlock(),o.createBlock(WA,{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(KA,{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"]))]))}}),$A={class:"list-group-item d-flex"},tm=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",$A,[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(te,{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(xa,{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})]))}}),em=A._export_sfc(tm,[["__scopeId","data-v-8755c19f"]]),im={class:"d-flex flex-column h-100"},sm={class:"flex-fill overflow-auto"},am=o.defineComponent({__name:"DatasetPanel",setup(e){const t=A.useDatasetStore(),i=A.useCameraStore(),s=fa();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",im,[o.createElementVNode("div",sm,[o.createVNode(Mi,{title:"Basemaps","icon-position":"left",id:"basemap-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(Fe,{id:"layers-list-group"},{default:o.withCtx(()=>[o.unref(s).getGraticuleLayer()!==void 0?(o.openBlock(),o.createBlock(Ss,{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(Ss,{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(Mi,{key:0,title:"Overlays","icon-position":"left",id:"overlay-list",class:"border-bottom mb-3"},{default:o.withCtx(()=>[o.createVNode(Fe,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(s).getOverlays(),c=>(o.openBlock(),o.createBlock(em,{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(Mi,{title:"Datasets",expanded:!0,"icon-position":"left",id:"dataset-list"},{default:o.withCtx(()=>[o.createVNode(Fe,null,{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getTree(),c=>(o.openBlock(),o.createBlock(Sa,{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,u)=>o.unref(t).setVisible(d,u))},null,8,["dataset"]))),128))]),_:1})]),_:1})]),o.createVNode(ei,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(ii,{title:"Import file",text:"Import file",onImport:a})]),_:1})]))}}),nm={class:"list-group-item item"},om={class:"d-flex"},rm=["title"],lm={class:"icons"},hm=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",nm,[o.createElementVNode("div",om,[o.createVNode(te,{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,rm),o.createElementVNode("div",lm,[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)])])])])]))}}),cm=A._export_sfc(hm,[["__scopeId","data-v-bcecb7b2"]]),Ns=[{description:"Will automatically beam perpendicularly to the selected point until a geometry is hit",name:"Laser",value:"laser"}],gm={class:"d-flex flex-column h-100"},um={class:"list-group list-group-flush flex-fill overflow-auto"},dm=o.defineComponent({__name:"MeasurementPanel",setup(e){const t=Hi(),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=Ma.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",gm,[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(si,{key:0,text:"No measurements"})):o.createCommentVNode("",!0),o.createElementVNode("ul",um,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(t).getMeasures(),u=>(o.openBlock(),o.createBlock(cm,{key:u.title,measure:u,visible:u.visible,"onUpdate:visible":()=>{u.visible=!u.visible,c.$forceUpdate()},onDelete:g=>o.unref(t).remove(u),onDownload:g=>a(u),onZoom:g=>r(u)},null,8,["measure","visible","onUpdate:visible","onDelete","onDownload","onZoom"]))),128))]),o.createVNode(ei,{id:"measures-fieldset"},{default:o.withCtx(()=>[o.createVNode(_a,{label:"Mode","description-position":"top",current:o.unref(Ns)[0],items:o.unref(Ns),"onUpdated:current":d[0]||(d[0]=u=>h(u)),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]=u=>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]=u=>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(ii,{title:"Import measures from GeoJSON",text:"Import measures",onImport:l})]),_:1})]))}}),Am={class:"panel",id:"panel-container"},mm={class:"title"},Cm={key:0,class:"badge text-bg-primary rounded-pill float-end",title:"Version"},fm={class:"content"},Im=o.defineComponent({__name:"PanelContainer",props:{selected:{}},setup(e){const t=Ts(),i=`packages-v1.0.0-beta.3
|
|
16
|
+
`;return(s,a)=>{var n;return o.openBlock(),o.createElementBlock("div",Am,[o.createElementVNode("h5",mm,[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",Cm,"Version: "+o.toDisplayString(o.unref(i)),1)):o.createCommentVNode("",!0)]),o.createElementVNode("div",fm,[s.selected==="datasets"?(o.openBlock(),o.createBlock(am,{key:0})):o.createCommentVNode("",!0),s.selected==="about"?(o.openBlock(),o.createBlock(pd,{key:1})):o.createCommentVNode("",!0),s.selected==="bookmarks"?(o.openBlock(),o.createBlock(vA,{key:2})):o.createCommentVNode("",!0),s.selected==="analysis"?(o.openBlock(),o.createBlock(Nd,{key:3})):o.createCommentVNode("",!0),s.selected==="annotations"?(o.openBlock(),o.createBlock(tA,{key:4})):o.createCommentVNode("",!0),s.selected==="measures"?(o.openBlock(),o.createBlock(dm,{key:5})):o.createCommentVNode("",!0)])])}}}),pm=A._export_sfc(Im,[["__scopeId","data-v-381fd038"]]),vm=["aria-valuenow"],ym={methods:{tick(){this.$forceUpdate()}}},bm=o.defineComponent({...ym,__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,vm))}}),Na=vt.defineStore("search",()=>{const e=o.shallowRef([]);function t(s){e.value.includes(s)||e.value.push(s)}function i(){return[...e.value]}return{getProviders:i,registerProvider:t}}),Mm={class:"main"},Em={class:"result-label"},wm={class:"result-type"},_m={class:"provider"},Om=["v-html"],xm=o.defineComponent({__name:"SearchOverlay",emits:["resultSelected"],setup(e,{emit:t}){const i=t,s=Na();function a(l){return l.label}async function n(l){if(l.length<3)return Promise.resolve([]);const c=s.getProviders().map(u=>u.search(l));return(await Promise.all(c)).flatMap(u=>u)}function r(l){i("resultSelected",l)}return(l,h)=>(o.openBlock(),o.createElementBlock("div",Mm,[o.createVNode(o.unref(dn),{debounceTime:500,search:n,getResultValue:a,onSubmit:r,id:"search-place-autocomplete",placeholder:"Search..."},{result:o.withCtx(({result:c,props:d})=>[o.createElementVNode("li",o.mergeProps(d,{class:"autocomplete-result result"}),[o.createElementVNode("div",Em,[o.createElementVNode("span",wm,[o.createVNode(A._sfc_main$2,{icon:"fg-poi",title:"Location"})]),o.createElementVNode("span",null,o.toDisplayString(c.label),1),o.createElementVNode("p",_m,o.toDisplayString(c.provider.name),1)]),o.createElementVNode("div",{class:"wiki-snippet","v-html":c.snippet},null,8,Om)],16)]),_:1})]))}}),km=A._export_sfc(xm,[["__scopeId","data-v-de1fa405"]]),Sm={class:"d-flex column-gap-3"},Nm=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",Sm,[i[0]||(i[0]=o.createElementVNode("i",{class:"bi text-secondary bi-cursor-fill"},null,-1)),o.createVNode(yt,{value:(s=e.x)==null?void 0:s.toFixed(0),prefix:"X:"},null,8,["value"]),o.createVNode(yt,{value:(a=e.y)==null?void 0:a.toFixed(0),prefix:"Y:"},null,8,["value"]),o.createVNode(yt,{value:(n=e.z)==null?void 0:n.toFixed(0),prefix:"Alt.:",suffix:"m"},null,8,["value"])])])}}}),Lm=A._export_sfc(Nm,[["__scopeId","data-v-3d05468b"]]),Pm="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGkAAACQCAYAAAALH0XrAAAACXBIWXMAABQLAAAUCwHr6IzdAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJztXXl8VNXZft5z72SZCGGTxYUoqLjQKhozk+AWl7aubbXGisJkWMS2n9S6VIRMxsmCO23p11qqkExAq2hVsGr9qqKiWSBSFZAd2URZw5Z17j3v98dkwqx3lkwSEJ/fj9+POfece87kmXvPOe953+clZsaxgOumTEnd0+vQOaTgXGIeSeAsZtGfiQcSMABAfwBpAA74NfMQsIuBHQC+JaLtkPylzrRqwKFeq9+aNau1R75MnKCjlSTLNFt/UpAPiKtBfDkYZwJQktiFDuBLBr1VV1ox9bopU1KPVtLUnh6AP6wO+5kE3MHgG0ihUQAEwEDX/I4UAD8g4v8FgH2Zh9xWh+1EgF5VVeW1j51zdnRJrwmgx5+kbNeYAYpu+iUx3QHA2q2dM/5TV+7+MTOz1WH7O0CT2q9IADVMNL+lWZ/3+ZNVjd06riD02JNkcYw7nUjcq3LKJADpPTCEg5qJJ3L7r5SIGvx+rwLAaGIenZ4mHrcWF1YqUp35SdlzW3pgnN1PUl6xbZTONJUgbgEndY6JCwR6oN5ZudX3mRn7I1TtDcYUnbRfWxyFrwrIR2pKq1Z30zABdOPr7hLXhJM0j+4EYSK8v9QeAzHeqy13X8N+X95SbL+bmJ+JobkGxlxpIudSZ8W3XTjMDnT5k5R3X0E6m833M2EqCBld1M1BMHYx4RAxMjtKvf0NCq7rMfF4Dvp1CikbmCiWvlQQ7hIa/9LqKHxMNDb9sXrmguZOfwMDdOmTZCm2X0rMbgCnJ+F2+8C0DMQrGVitMK/QTGKr3JGyt372bE+kRiNdBSlpSB8sJJ2pSDpXSt5UV175ZshYneN+TFL8O4FxrWaW4+rKquoTaBsTuoSkka6ClBP0dBeYHkTiexsPgA8J/K5kfm+pafhydjplEocZgLwiW44kqkuwucbgMrO6tXyxc7GW1IGhC0jKdYw7hyHmA7gwwSHVMcn5qZry0kcz5u5O6uAMkHdfQbo0Z0wG8UQA5yVyDwKWMeiO2tKK9ckcW1JJskwvvJ4EXgDQO552DLSCMU+R9HT1jIo1SRtQgrAU23KJaRKAOwCkxNm8QQrcutRV+V6yxpM0knKLbPcx0ROI7/V2mAh/9ej6H+vL530Tb5+jXPY+aW00DELvJxm9BMjMAhkMOiyYD0uIwyT1PaqmfvXx43MOxXv/bJdtqKqJaQDbER9ZGhPdU1dS8bd4+wyHTpOU78pXmzxZz5B3aR0rJBhVGuvTYiUnx2UfLHRcwcyXETASwAgAA+Poczsx1kriL4npQ83U9mG984U9sTQcXTQxS4f2CAg2ADEtAQGAwX/OWtv8uwULFuhxjDMEnSIp35WvNmtZ/wDwizia1UqiKUtLKpZFq5gz3X6BEHwnCNeDcXbCAw0PCeALgP8Difm15e4vojWwFNsvJfDfwDg39m543tC1zfbOEJUwSQkQ5GHmR7LWNT9uNOA818R+rHkmMWgsEpzAEwED/yWwm3XMr5vh3hup3khXQUovzfwgA8WI8RVIIHetetr4RFenCZFUUFCgbB1hngfg9th6wRoAd9aWVH4aqYp1+qRBJLRfMfhewG9D2v1oBGGOqiiPG1nCrcWFF4HxMmLdAzIq60ynT0iEqIRIynUUPsfAhJg6ILzW1CzHRrIkX/rwHX01xVTChLsQ/0qqK9EMwrNCUV3Vzuf2hauQ55rYT+paFRjXx3JDBv+5rtQ9Jd6BxE2S1VF4P4CnYhoT8FidenpRuF8PEVGOwzaWGE8ivgVAd2MfCA/XlbqfDTYlAd7vYXXYHmPG72O5GYPvrit1z45nAHGRZHHYbiDQ64i+zNaYMKGupLIq3MVcl/001ng+gNGxD7WHwVgsTcrEpc45m8Jdbt+CPIXoqz+PIHlNdUnVh7F2HTNJ1mnjz4UiawH0ilJVI8IdNSWVC8JdzHXYb2bwswD6xTrIowgHAZ5QW+p+JdxFS3HhOGLMQXTD9R5S6eIaZ8XmWDqNiaSRroKUEzRzHYALolSNSFC+K19t0rJmEfCrWAZ2FINBeDpd2fJwODudpchmI6IKRH+ilqarW0bHYuuL6VwnQ8soQXSCGEzjwxF0/oPjMpr1rNe/AwQBAIHxQLM2dGG2a7I5+GJdmduN2OannBYt66GYOoz2JLUfNyxGtHmIUFZbUukIaT/N1p8UegNAbiwDOsawRPOk3lj/2OwDwResDtsTAD0YpX0bk5JTVzLnc6NKhk9S3n0F6e3nQdEWCq/UlbqLgwst02z9SaWP8N0kCAAuVUytiy3TbP2DL9Spw6aC6Z0o7VOINfdIV4Hh1sOQJJmR8QCib9ZWaWqqLXh5mu2abIaCRfGZUI49EDCKFHor+NXHTqfUTK13AtgW5Q7nZ3jM9xrViEhSXpHtZICjvTPbpKQ7652zm/wLr5syJVXVWt4gUF6U9t8V5Khay7yCgoKAN06984U9THwbvAeYEUGEh7NdYwZEuh6RJEn0GGDsk8AMx9Lyis+Cy/f1PjQToCuN2n73QDdvG2F+Mri0rsRdA/BjURr3UfWUkPnch7AkWYsLL4L3wCsiGFydta7p6eDy3OLCAhD/OsqgvpNg4F5rke2nweX9DmSWA7w2SuO781xjzwh3KSxJ7SYOo3W+FFK5J9iafbFjwghmPGc4mO82CERzvFPFEbw1a1arIJ4MY4fpFF1THgl3IYSk0Y7C4QTcYjwSVNSUz10eUOZyCQFtLqJbJL7r6C9B84gC/cO8ZiCeb9SQgIJggoEwJGnA/TBech/ySD3k/ZmjbZp0HC0UjEHItzjGhUwXpIpiAG0GLU0sRMhUEUBStmvMAAJsRv0zMCv4yNs6fdIgAj1qPPLjDExPZU+dHHAuVuOs2AxGpWEz5snBy/kAkhTd9EsAIaYOP7SQNP05pJQ8JQD6Rhn28YZBakprUXChhChjwCgOqr9Jawt4CgNIIqYxht0yqmrLn93pX5RTNP5UEAqjDvk4BDPuyZ4+doh/2dKyudsAhLWid7QDj/X/3EFSjmvCMBjHB7FOyszgQkHyIRxdJ6pHDQhIVYVyT0g5czRXr9H+5HaQpHj0MTBedlcvK50TsNbPcdkHI8Zj9GTi3BHX4L6bH8SNuWNw7mkWmNOO6gXlr4Pnptoy98cAVhi0EapQbvZ96DickoSbDQ9AiF8ILlI0aWNQWuzjTQ62Nm3E8EGjYT1jFIBRkAzsaGjGhp37sH7Hdqzfvhpbd62G5C5zHY8HmSa1ZQKAgLcQgZ5l8KxIjRh0K4C/AO0k5bkm9iPgfIOOPCma8nJoMd2ZwKA7BRLpEEoTqpYux/1XXQoAEASc0i8dp/Q7GVecczIACw626FixdTdWbNmIFV99it37o9g5uxCS6E4EkcSq5zVo6p8Q4e1F4Ess02z962a49woA0D2ey2FkEWd6P9h5PqfYfjF7PUm7FZTmPXVfvWclPHpkf8PeaQpGnzUYd18zGn+5awr+NLkM43/8G1x01hVQ1dTuGi4Ar6X84unjAv5Wtc752wEsj9AEABQhRB7ge90R8o174f8EFwk2tu11FURqOoDDADXh5eWrMObiH8bUbkhmKoacfxp+cv5paPZci2WbvkXN6v/is02fQNcMjdRJgaootwOYHlDIWATCRZHaSMJoAG8IACDQFYY9ED4ILeQfxTvQZECkHHngP9ocYoCPCekmgctGnISHfnY9nrm7BHdcOQlD+g9L1hDDgplvDCmDfMuoDYFHAwD98IGxGelp4iAiv+4ODF3b1N/fmJo9fewQVShfIw7n9WTBfPIwqKYjx1djR92Ky88c2un7MoAvtjTgreWf4LONS8Ay6YsOVlQ5+BNn1S5fQfbkySZ1YOsBRIi+Z6DVrFIfkZFK58HwhJY/CbZ2m0i5Ej1AEISAorYEFL2xMjlRkATg/Ky+ePjnN6DkziKck2VJyn39u9A94lL/gvrZsz0M/q/BmFJb2uhcoRP9wPjW9GVwEQOXJTzUToDUTBAF/sL3e7Zg874QP5BOYcTgXnDd9gs8fNvDOGnAmUm7LwFXhJQRLTVqw0IfJggYbnhjpnVheuu2aAd/iJRwfvwS85dFjaJJCKOy+uHpwkmwXXM30lKMTJqxgSl0NcySDSdWZhomGDB8oRPpoSQh6bFCMUGkhLc+fdWwGo1tSY8nBgAognD9qOGYMW4qTh3U6a99VnCBIGGoskJEwwRFIUkopoAg3cumjT8RXtmybocwhS8n0Ybnl0Z8tScFp/RLx6N3jMcVF9zUmducdMlDEwJsWBK6sRQO8zABMv6D78ehgJDFVlUPew7fHRBK5BXXsq8/g+wiOS8fUlTCr390KWzX3A1BiYm6tKkyYHrRd6Vvh1fWLTwIgwTY8ByoZaVzQcBJIrHosXMjVY18DMN0EP9etaFbxnH9qOH4n5vuhaJGeLQNIFQZ8PdrFwqJGFkIhlnAIKqOgZCIbWLZMyZnkQYSxpaBf6+JGEiYdFwyYgim3PhbKCI+5R+SFPL3I6AlXN32i2YB4zCNgyElomccTSglereN+g6s+iamgPKkIPfMQZj4k/hiECTRCcFlUU5qzQLxKmZJ6vxaNAGQKbokHoHxj/pElWcSw1Ujh+I6yy9jri841OGUDEhiIF3AwBeMwvg7SOIe0SkVamyHv980bcDexi4VzQrBuMsuxMjTYotJYJIhg2NwxIUDASwANEWqgHBuxiTiVhZJBoQS2wNPpKFqaffNTQAgiPDbG29Cr4wYdiYydJ4H0MegxQEB4LBBhZAnSTAb1e8yUBxiOC1Sw6J1q/Hqyg14Z+3X+PzrBrRoXXtKm5muwn61oTccAIBJCUMSRSaJvCSFLg6OQA0+n9cjy2B2KYz2SMEY0Ks3Ms2M/n3akJZxAPv5G9R8swb/Wrcai1ZvxPvrd2DtrgPQZXL3VZeMGIILz7zCsA6RDDA0ksslYOT1yzioAvwNQOdEqmNSPMPhd4KogjfKHjCAk4idpEGZoSevgoBeZoZ3jm7Ft237sW3b1zjcqABsQmaqGadmZmD4ib069e1sV16NLzbVQNPDT90mjycgev0irO0HpER8lxN7n6SvjTqVxAE75Jryqh0wfkV2CUSUPZIPqshA74zY/swmBejbW0ffzBaItH34unUb3v3qS7z+5Vq8vmoTFm/4Fht2xzcFD8lMxdUXRjQd7Vzy6PMN/gWKbjI0szPhG8GgrUaVgq3k7A3pS6roXnQIkIjNgNonfUinnoQUUyhxb29cjddWrccbX25BzZbd2HvYyJ0buMVyIVJSwm4ZQsJfiMnQakuMtSoxrQWFfzd7N1kcYgAkYBWAUYYjTSbUdFCMdrn+5uTLQ5hTGeZUDwAP2tCIlft3o2knoaVFhUopGJBhxtkn9kFfs9dMlGlWcfkPrsV/Pn018EaMEMFFIpxtFFsuQWtVhr6awuxnCVgmCfalpZWrwlxcAka3uXMJEbtr34BeIRv6LkEwcZ/v3Y2D2wl6mwkZpnScNfR0vPeZAunv0SR4SciNosQUKwJrREsrVgPoeJcw0MrM09PULXlLS8IQBIA1/iCxr5YYONIZRRicGGbR0B0gAjLNjH592pCacQA7m3cFEgRASCwObEPExpH5MlXBevH5k1WNfMTl9VMpZXZdmXuGkVJH3Qz3OkRZcCQVIraNbKrSC716IqFCGCxfE2KRX11d5g74m+U6CkfC+Gxu7WJnRYvPpesjYjjS1S3WZeVVK2MZBDPejmfQnQHFeHbTJ31I9ErdgIONjM1bglwXCCG+i5JllOBv+ghot4APXdt4f7zyk6TwC5AUj+5q4ojxSeqXcXRoStWv3gwZbI6T9I+Qikw/NVqKMvOHQDtJL593HlsdticYaBRMDQxqIGA/QzZIQQ0pitLQskPd7a9kXyeGfWiRX20DcGoyvpgRiGMj6cTe3bNoMELDIYm1Gz8OLl5fV15Zh7KKjoJ2OZ9Lgyv6QwF/BLQfU7DTKcHihwR6hAl/AnEVEy8C0RLBWKlp+tfqwNYH/G/ATqdkUEikRU/ixN49n7Or5vPVkHrgdE6AO1gxhlS6BcZneZ/55rCOnygRLzTsnVAYHFGtq/KviKL2kQwwRTcJpat9YE7tfnOVP3bs0bB5e4izZhurmjukMhvHdRHjn77/d5DEqvYGjHQGGGflTrcHLBfrne6tAELftclGDPvYvumDu3wYRtAl8MHSD8O4J7O7PYKiA+0RFjmG9xN4zff/DpLab2QoOSmJQ0ReCfIxeDW2uw4y+pqm3wk9u2ioX70TDftDLGw6IEKkbASJ3xrejPCl/x41cEZmmms8FP5Fe2xtB7xZuShMgFnywBzdbjegV1elZoqO3ft1LF/1f+EuPR+cXMQ6fdIgoijWGknP+n8MIEk0Nb4CGJ4XKYpH/11Iqep5AECXJSck3ZgkgsDAzJ5ZNHh04J1PFkNqIWNsIpWcIQ1E2/3w5sONhGZhUgIEhgNIqp65oBmEsArEPjDhLotjXIAGXq1z/nYCukxsgyOczfiQkdIPqfG7wCUFH3y6AQcOhIZ6ErMjWAjX6rrzFID+J8otXw7WIQ/ZgChSnQnjFVsKgVzBhX0P9H4qqhJVgmBuhFGkTWZ6cEa47sGKTQexbkOozRTgz9NMW0ODlj2KC8aZQJnDyTAEF3jTdPKLxsOjO/KKxgfoCL01a1YrSWVMFB+yxCAZuh7ZcNo/o/udajd/24qP614PKWegFUQTgm2fOcX2i0EUzQnijXB6rGG38pLocRiv2IQk+Uy+Kz9gIqgpn7tcME+LMpCEILXIc87AXt3rCrh7v47/W7Iw1PQDAET3BufkyHflq4Lls4iiZSuYy8OWhytcWlK5CsyVUcb6w2YtK0Stt7a86g8E/CtK27gh9fDfj0hgQJ/uS1e7e7+ON95bCI8ndJ3EwPPhElt5paXJSIIBBPyruswdNqAsolFMNakORF+xufKKbAGbMmZmpU0ZA+Pw97ihtYafJjNSBsHUTRztOSCxaPEiNLeGjSysb2mRk4MLLUXjstvT+BihTep8f6SLEUn62DlnB4NDNmJBMElCVb6rIMCy+fHjcw6l6OInYCQtzIFbw/tw9kvvnlwkO/Z4sOjd19HSHHaHsh7SdENwZpvsqZMzQeJFRNVe4j+1n9GFhaF52ayKx9tzHxmARjTr5spgu95HM+buFpJuBJCUrMayrQHhVngDesWV4zEhrNveiIXvvxT2CSJgq2RxVbB6GblcQk1pfT5auCuAHVD1MqMKhiQtdla0QPIkRDP7MG6xFBWGaLtVz6hYI1T9UgBfRRlodMhWeNpCrQoDunDRoEvgo8+24d2PX4EMJ8jB2CCAK9vl0QJg0b4qiyGvEgM0qdY538hBNXpERW2Z+2Ni/DVaPYBd1iL72ODSaue8DVKlPABRc+ZFg9Yc+CSRUDGgd9ekUT/YxHj1vRqs+PLdsJoOBCxTTHL0J6WVG8O1Z6KozhbMmFNbWmEouAHEGPZCTU2/R/Q/MoF4bq6jMMQzcKmz4luhqvkARx2QEfSmAL9C9E4ZjBj9+GOGZOC/6/fhH28uwK7dEd70RAubWmS+v3BGSBVdfQLGwRBfkUmLuFgIuFes+ZMs02xnkUL1iK5W3MLgW+tK3SHLcCIiS9G4KQA9heg5hsLCfPJwqCbv/Hx6v1G45OzkHVF8vceDj5ZVY19D2DxWAKARqLxWPa0kltx8lmL708R8X5hLzYJ4dHWJO6Zo7LgykeUW2W5jon8ghmxbxDy2psz9UriLVqctHzrNBeG0mDtvh5I5DBl9vT/Q7KFX4JxTOu8etPuAjvqVa7Ap2HnEH4wNDHl7PInoc1z2wULjjQiKTmGCLVKWtnCIO6efxWFzEuiRGKrqxPz7mjJ3iC0K8GaU4YyMhxj8MOKRB1VS0OuUgSDScO3IHyc8JzEDG3c0Y+X61djx7QojLaE2EP6WrjRNX+xcENYHPtdhvwfM+05d1/RisENPrqNwJgMdJweJJF+MmyTvK8tWCWBcTA2Y5x42Nf8qOIrdh4unjxupCPE0gJhVv5Q+Z6B33zbcbr0KFMeJOQP4dp+GTdt3Yf1Xy9HYuDtak0VSVX4XKY9fvsue1qzxbHT8LXgtMZX6kxXwNBH+OXRN021xe2YlksJ0pKsgJUMzLyTgJzE2qReqfnu1c17EzW3OdPsFisLTmPELRHudksCpZ+ThpouNdX90Cew9qOObPYfw7Z6d2LFzHZoaowY+SwLeYqby2rKK2kiVLnZMGKFAfxFhM7QFkpXrKJzJjAv6Hex97VuzZsVtgO5ExmZ7WrPGCxH7E3CIme+pK3OHOmX4IXf6+AtZ8F0AF8BAazz9hEEY0j8LqikVJtUEXUqwlPB4WtDUchiHDu9GU9NecOw6rA0ALRA6/lg9oyLiBp6IyOKwTQJjJqJkxQFhDUmU6SZ6T8DTFG0/FPE2ncl9nndfQbo0mxeCcE0czf5PqsqvIr1CfMh32dNadL6JQWPAfCW6JgdGIwj/Zqb5/Q/0ejvar9zqsJ8J8N8RRm0rIghvisNNt1bPXJBwtHWnSAK8Ca32ZR5yA3xbHM2aQHgqXWl6MtJk7I98V77apA+9WDBd2S7jdg4Sc8r8BsAKZv5QgfJB227TMn+Hz0jInjo5UzW1TGfQFALiiQiYr+1KHR9LH0boNElAxyvgCTAeiF47ADuZuEw53Dwn3l9avqvghJa2E85ikqdDoD8kehPRCRJIA2QzMTVC4CBLahBMGxWN1n/8+Jy4wvYs02z9SdBvQLgHQMRMYWHAIH68rrRqWrgsz/EiKST5kOuwT2rXuo5XK3wXAbOkzn+rm+GOrLPTTchxTRimePTfMWE8jHN3hEMzMybUlVUmzR8xqSQB7RM/yZdBiFt5loFWAr0OgTlDVze+H+9StTOwuu7szbrpBgIKwHwDomcEDQVhHeni9uDcUp1F0kkCgFEue59UDX+Lc54KAAO7BbAIwCJWtQ8SXRkZYbRr3EDNQ9dC0C1g/CjO+SYQzHPTTc2/jWWOjRddQpIP1qLCW0D4K4DOnszpAD4H4WMCryCJL2AybQh2fYqE7MmTTWknaSdqUp4HydkAZxMoO5pqZoz4Gsy/qS1zG/vSdwJdShLgTZylekyPg6gQ8YpNRUcjCFvAaIaXSN/T1gSvFMyJ8P5AukLpUgJ4Bqo2rSuecn90OUk+5BXbRuks/kDgy7ulw67Fu1LSg+HSt3YFuo0kHywO2w0Emg7jXE1HKz5iCFdd6dz3u7PTbifJB4tj/JXEcioIV6MnhOBjh2TCm4oUj1WXza3uiQH0GEk+5LnGnqFr6kQC29H5BUYy8Q2DqgB9dl1pVed9NDqBHifJh5GugpRebelXSaKbQfgpeSf97sa3YHqVCC+furZxSXfu04xw1JDkj4KCAmXb2WYrGFcw43IQ8hDN4pwY9gFcC9D7UtJ7y1JO+yKWY/HuxlFJUjCyJ082qQNazmGi84jwAyKcIZlPJtBQAINh7C9xCIy9IGwj0CYGNgJyNYM/7enXWKw4JkiKhuumTEk9lLHX3JqW1n7+JJtSW9paezX2b0rkkO1ow3eCpO86usaz8HskFd+TdAzge5KOAXxP0jGA70k6BvA9SccAvifpGABZHLaIGYMBQCj6AXhEs/CoB+PxtikoKFC2nm2+AACIZZNX3iYQo1z2Pqk6R4uEMxib+lXw6Wxeke1kKShsqAVD0VjBIWrVDigtzU2d8YUzQvbkySYxuPUyIZEDUBYR92OGDmAvAxvBcsnS8nmfxupJpIJhGCUgNQUgQKbosDoKdwK8ihnvqUQvRQqgAoD152X0StW4HgAYYjkQmj46TePLGEj42Fn3aGMQpBLGgqaA8ftw9Qk6SAOgEGSGGVaHbQuIVpJELRO9FKwDFC+sRXYriKeoA3EtpC9JCMOfCgIAErAU2bZbHYULGfLpaOapeF93gwC6kojKdWC9tcg2J9s1Jh5/tKMMlAXG9UwoBXidtajw/eBE8rEg1zHuHGux/XUQ1wC4HaFZXMIZbU8B8BuCWGNx2Ga1J7QMC3/D5B5QUAJ1id5ErDChD0OkEPMZACwABgEgEI1X9ZS80a5xlxtFvcUCYrzHAgviaaMChol0AZoN4g73KmJKBaSZmVKJMFSCziBwDnxSMoR8hcRyS5FtUjSfdR9yiwrvYBLPgrkjUIqAlQx+TbDyb2GizSetOrTz8ODBakP/Q0Ok1EeQFDcC+BmAk+GVAbqnTZE/zym237y0pCIkae4RkhgHa0sr/x5tUAUFBcrWs9JvANH/AjgFjLN1j1KF2CMswoIFVtSWRO8/Psh3a0vcrxjVaI+TupbBDngjJExENMcyvXBPXXnlm0ZtrQ7bEyDyFxxZxRIP1YZvpwPY3P7vnezJk3+nDmy9C16Nh4EAThHMH+UW2QqDg+/iXt0tWLBAry1zL1RYvQQ+2TXiH1uK7Yair0crqmcuaK4prXhV25WaA3QolClE+ONIV0HE4LZcR+F04AhBTDRz6Nqm86MR60P97Nme2tLKvwhVPQfAu+3FaUw0z+IYHyBFnfAS3CsURf5RfD9L9F5HA+pnz/YcVpsmgeDN9U44I8OTHjbEP7fIdhsDpe0fmYGJdSUVcct2A0C187l96eqWa8HsE4Q0EeQrlmm2juzOndsnSdmxMiPmPKOqxwJWOhe0wV8OgSgkpMcyzdafiZ6Bb6EGOOpKK+d0pt/FzsVaumnrZHCHwHtfEtShUdQpklRN9V869ozoXLKhi458EuQNsQmAEPQIjgS3Laotc89IRreLnYs1k+65DT4FGUJ+bpH9RqCTJLVvbn2xN12vH9MNEKmiQ2aHgsJdrK47T2HC3e0fPQA9kIzQFh+WPPp8A9MRwUcmLgE6SVLefQXpALzCmhw26+MxB73V0+EDyME5izSlQ3CdGe7Obn7Dwaxsfs4vZ9UFlmm2szpFEp+Q9sOOD9SNWWC6EELhI75/jKAoaPoD9DURAAAFBElEQVRFRz3isBoVncVi52KNQB3ZsUiImztHklQ6ZAKI8Eln7nW0gEkc2UoQOny9298aPvH6A2nq1g+6agxERxZkIL4qYZ1mS5Ht50R0V/tH1vUwWU3iAfPQXIft6lirE7GnuqTKUGw+XuS78lVwVoewoGDqSD/kSU8brrQHljGwySi/VGehauqXbUdSto6Ii6SCggJl81nm0YJ4IhHdgfY5jUBVnY8woJsZuDnW2sy0B0n0cs135avNnqy/gHBhe9GKmrLKd1DqzdQiFKWvz1IqujjB15JHK/ZYimxt8CrFDDhCEmGI1VEYkogJABhkIvBAHmEeJoDUIP/6d9PUjhXPMYds15gBJj31Buah94JwPtAeFkqw+6/cSEr2ya8wUZe6HzMzWx2FzfCSpPo/SekAwr5ufJkpg0IfthPoiVr1tL8kxzWX32IWlbHWFsRxOT1aimw/BwkLCCbB6M+MwQAPVynlDAbD79sdFJJ/WVPuDlAkFkIckD7OmLs05Vm2a7JZBXyZsg/4k+QBI1QqHgAEWsA4DGArQF9IwdXLxOmLk+o3TbSurrSiy3JeKMBSHTybGCcyEC7YRgewgCGn15aHnu80Nuub0tOEj82srhonAJi05iw+svrf5G8F31ZbVpnwKenRjuoy99e50202FvQmfBQxNgF4l4jqhaovNDpu+fzJqkaro3ANvFaIQXnFtlGx6tXFDRbX+H5EDK47rnwcasrdbxPhiEIzwcSSp9WUVjwb03mYX/JECeoygzITfu77v4B49bgiCQA8O1OLANS0fzxVKBSixBwJEjS/4wPj7ksempB0vaOcYvvFAC73doHdp65tXHLckVQ/e7ZHYfV2AA0AwMANlum2mLRQ209NfYmSBmqperwyPVEhmJ/CEQv7HxYsWKAfdyQB3rMwBo8DOpatj+YWF46OqbHkB+HzWWA8nFc8LmnR9BaH/UF4Ba4AYLumpv4JOI797upK3f8C4c/tH1UwXshzTYyac6623P0FuOOsxyRZvBScTyoR5BbZbySwLwcVM+ieeufsJuA4JgkAtJ2pDwBUBwAMDJWaZ14s85O2O+VecEce80EEsbQzT5S1uPAuJv4nOsxO7KorrejI+3Nck1Q/e7ZHqNqd6FBSoessRbZwEtEh7TRTWwEAn8PnAJ3FOxaHzRmct8MIuS77aVaH/UUwZqP9yIdA7qVlVSX+9Xo+e64PjMzgpI7RkIFDuzoruFTtnLcht8h2FxP5Ens9ai2yf2KkvwoA9c4X9mRPnZyrprQ+D8b1XvEoeqRZM99tLSp8Bsyv15a7QwTv8135apN2+mWC5a2SYPcTnZLM7Kgrdz8afJB49JAE2IWm2+Np0MTmEA/WRFBT5n7JWlR4JQh3ATCB5It5rokXRhOYqn9s9gFyuW7K8WyaSkQPAzgBwGAQXCByWR2F38DrwrWTAFUCJxOyTifIPkx+Rg/GBmKeUlvufhtloe5+x/Xrzh+iqeleACu8nyhL17WY9k/sdMq6MvcMRZXDGfxnBOacGgLvGdTPGLiBgFEI9G7dBuLfaLtTz60pd7+NCFAJPBUAJBmmLo0bQ/b2am7IPDAVAEBiZ7g6pOpfQhNTE+2DiEOPR5jeJsh9AKBBXRHrvapnLmi2Ouy3EOTNAEAMXPTIuFMBhGT4DYd2i8WUfJf9980argRwE8AXMZBFXscVDUADg9YR8RKWcmGsTvv/D2UGv9Hi6yYwAAAAAElFTkSuQmCC",Tm={class:"nav-item"},Dm=["id","title"],Bm=o.defineComponent({__name:"ToolbarButton",props:["icon","tourkey","title","active"],setup(e){return(t,i)=>(o.openBlock(),o.createElementBlock("li",Tm,[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,Dm)]))}}),Vm={class:"toolbar"},Rm={id:"menu",class:"nav nav-pills flex-column"},Fm={class:"nav-item mt-2"},Um={href:"https://giro3d.org",target:"_blank",title:"Piero, powered by Giro3D"},zm=["src"],jm=o.defineComponent({__name:"ToolBar",props:{active:{}},emits:["selected"],setup(e){const t=Ts();return(i,s)=>(o.openBlock(),o.createElementBlock("div",Vm,[o.createElementVNode("ul",Rm,[o.createElementVNode("li",Fm,[o.createElementVNode("a",Um,[o.createElementVNode("img",{src:o.unref(Pm),alt:"Piero, powered by Giro3D",class:"mb-3 w-100 p-1"},null,8,zm)])]),(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(Bm,{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))])]))}}),Gm=A._export_sfc(jm,[["__scopeId","data-v-f84bccda"]]),La=vt.defineStore("widgets",()=>{const e=o.shallowRef([]);function t(s){e.value.push(s)}function i(){return[...e.value]}return{addWidget:t,getWidgets:i}}),Hm=["id"],Zm=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=we(),u=A.useCameraStore(),g=Gi(),m=Hi(),f=La(),C=o.shallowRef(null),y=o.ref();o.onMounted(()=>{d.getMainView()&&b(),d.$onAction(({after:R,args:B,name:Q})=>{R(()=>{switch(Q){case"setMainView":B[0]===null?I():b();break}})}),y.value=setInterval(()=>{c&&(S(a),D(a),c=!1)},50),setTimeout(()=>{h.value=!1},1e3),_t.dispatchEvent({type:"ready"})}),o.onUnmounted(()=>{y.value!=null&&(clearInterval(y.value),y.value=void 0),I()});function I(){var P;(P=C.value)==null||P.dispose(),C.value=null}function b(){const P=d.getMainView();if(P===null)throw new Error("mainview is null");C.value=new Wg(P),C.value.addEventListener("update",()=>{C.value&&(i.value=C.value.mainInstance.progress,l.value=C.value.mainInstance.loading)}),e.getContext().view=new qg({camera:C.value.camera,instance:C.value.mainInstance})}function M(P){C.value&&(C.value.mainInstance.eventToCanvasCoords(P,a),c=!0)}function _(P){if(C.value&&xg(P)){const R=C.value.mainInstance,B=P.coordinates.as(R.referenceCrs),ee=Xe.fromCenterAndSize(B.crs,B.toVector2(),1e3,1e3).toBox3(B.z,B.z+200);C.value.camera.lookTopDownAt(ee,!1)}}function x(P,R){if(C.value==null||C.value.mainInstance==null||u.getNavigationMode()==="position-on-map"||u.isUserInteracting()||g.isUserDrawing()||m.isUserMeasuring())return;const B=C.value.picker.pick(C.value.mainInstance,P);if((B==null?void 0:B.point)!=null){const Q=B.point;s.value.x=Q.x,s.value.y=Q.y,s.value.z=Q.z}(B==null?void 0:B.feature)!=null?(r.value=B.feature.name,n.value=B.feature):(r.value=null,n.value=null),(B==null?void 0:B.pickResult)!=null?C.value.highlighter.highlightFromPick(B.pickResult):C.value.highlighter.clear()}function w(P){P===t.value?t.value=null:t.value=P}function S(P){if(C.value!=null){const R=C.value.picker.getMouseCoordinate(C.value.mainInstance,P);R&&(s.value.x=R.x,s.value.y=R.y,s.value.z=R.z)}}function D(P){if(C.value){if(u.getNavigationMode()==="position-on-map"||g.isUserDrawing()||m.isUserMeasuring())return;const R=C.value.picker.hasFeature(C.value.mainInstance,P);C.value.mainInstance.domElement.style.cursor=R?"pointer":"auto"}}return(P,R)=>(o.openBlock(),o.createElementBlock(o.Fragment,null,[h.value?(o.openBlock(),o.createBlock(Uu,{key:0})):o.createCommentVNode("",!0),o.createVNode(Gu,{id:"main-view",onClick:R[0]||(R[0]=B=>x(B)),onMousemove:M,class:"mainview"}),n.value!=null?(o.openBlock(),o.createBlock(Pu,{key:1,onClose:R[1]||(R[1]=B=>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(Lm,{class:"component statusbar",x:s.value.x,y:s.value.y,z:s.value.z},null,8,["x","y","z"]),o.createVNode(Gm,{id:"toolbar",active:t.value,class:"component toolbar",onSelected:R[2]||(R[2]=B=>w(B))},null,8,["active"]),t.value!=null?(o.openBlock(),o.createBlock(pm,{key:2,class:"component panel",selected:t.value},null,8,["selected"])):o.createCommentVNode("",!0),o.createVNode(bm,{progress:i.value,class:"loading-indicator"},null,8,["progress"]),o.createVNode(km,{id:"address-search",class:"search",onResultSelected:_}),o.createVNode(Yu,{class:"navigation-buttons"}),o.createVNode($g),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(o.unref(f).getWidgets(),(B,Q)=>(o.openBlock(),o.createElementBlock("div",{key:Q,id:`widget-${B.id}`},[(o.openBlock(),o.createBlock(o.resolveDynamicComponent(B.component),{context:P.getContext()},null,8,["context"]))],8,Hm))),128))],64))}}),Wm=A._export_sfc(Zm,[["__scopeId","data-v-bb753174"]]);async function qm(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 Ym(e){const t=await qm(e);await A.setConfiguration(t),console.info("Configuration loaded."),e.dynamicStyles&&A.setDynamicStyles(e.dynamicStyles),A.Download.setBaseUrl(e.baseUrl);const i=vt.createPinia();A.useModuleStore(i).setLoadedModules(e.modules??[]);const a=wa(i),n={analysis:new Cn(a),baseURL:new URL(A.Download.getBaseUrl()),bookmarks:new fn(Oa(i)),configuration:t,datasets:new wg(A.useDatasetStore(i)),events:_t,notifications:new _g(Dt(i)),search:new Og(Na(i)),widgets:new kg(La(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(Wm,{getContext:()=>n});h.use(i),h.mount(e.container)}exports.Fetcher=A.Fetcher;exports.fillObject3DUserData=A.fillObject3DUserData;exports.Bookmark=Lt;exports.Projections=Ui;exports.createPieroApp=Ym;
|
|
17
17
|
//# sourceMappingURL=index.cjs.js.map
|