(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0bdf78"],{"2df6":function(e,t,i){"use strict";i.r(t),i.d(t,"ElevationQuery",(function(){return y})),i.d(t,"GeometryDescriptor",(function(){return T})),i.d(t,"default",(function(){return y})),i.d(t,"getFinestLodIndex",(function(){return w}));var s=i("792b"),n=i("ce50"),o=i("b2b2"),l=i("f4cc"),a=i("8048"),r=i("57dc"),c=i("4ae5"),u=i("521c"),h=i("8188"),p=i("9180"),d=i("851f");class f{constructor(e,t=null){if(this.tile=e,Object(o["k"])(t)){const i=e.extent;this.samplerData={pixelData:t.values,width:t.width,height:t.height,safeWidth:.99999999*(t.width-1),noDataValue:t.noDataValue,dx:(t.width-1)/(i[2]-i[0]),dy:(t.width-1)/(i[3]-i[1]),x0:i[0],y1:i[3]}}}sample(e,t){if(Object(o["j"])(this.samplerData))return;const{safeWidth:i,width:s,pixelData:n,noDataValue:l,dx:a,dy:r,y1:c,x0:u}=this.samplerData,h=m(r*(c-t),0,i),p=m(a*(e-u),0,i),d=Math.floor(h),f=Math.floor(p),y=d*s+f,T=y+s,x=n[y],v=n[T],g=n[y+1],w=n[T+1];if(x!==l&&v!==l&&g!==l&&w!==l){const e=p-f,t=x+(g-x)*e;return t+(v+(w-v)*e-t)*(h-d)}}}function m(e,t,i){return ei?i:e}class y{async queryAll(e,t,i){if(!(e=i&&i.ignoreInvisibleLayers?e.filter(e=>e.visible):e.slice()).length)throw new n["a"]("elevation-query:invalid-layer","Elevation queries require at least one elevation layer to fetch tiles from");const s=T.fromGeometry(t);let o=!1;i&&i.returnSampleInfo||(o=!0);const l={..._,...i,returnSampleInfo:!0},a=await this.query(e[e.length-1],s,l),r=await this._queryAllContinue(e,a,l);return r.geometry=r.geometry.export(),o&&delete r.sampleInfo,r}async query(e,t,i){if(!e)throw new n["a"]("elevation-query:invalid-layer","Elevation queries require an elevation layer to fetch tiles from");if(!t||!(t instanceof T)&&"point"!==t.type&&"multipoint"!==t.type&&"polyline"!==t.type)throw new n["a"]("elevation-query:invalid-geometry","Only point, polyline and multipoint geometries can be used to query elevation");const s={..._,...i},o=new v(e,t.spatialReference,s),l=s.signal;return await e.load({signal:l}),await this._createGeometryDescriptor(o,t,l),await this._selectTiles(o,l),await this._populateElevationTiles(o,l),this._sampleGeometryWithElevation(o),this._createQueryResult(o,l)}async createSampler(e,t,i){if(!e)throw new n["a"]("elevation-query:invalid-layer","Elevation queries require an elevation layer to fetch tiles from");if(!t||"extent"!==t.type)throw new n["a"]("elevation-query:invalid-extent","Invalid or undefined extent");const s={..._,...i};return this._createSampler(e,t,s)}async createSamplerAll(e,t,i){if(!(e=i&&i.ignoreInvisibleLayers?e.filter(e=>e.visible):e.slice()).length)throw new n["a"]("elevation-query:invalid-layer","Elevation queries require at least one elevation layer to fetch tiles from");if(!t||"extent"!==t.type)throw new n["a"]("elevation-query:invalid-extent","Invalid or undefined extent");const s={..._,...i,returnSampleInfo:!0},o=await this._createSampler(e[e.length-1],t,s);return this._createSamplerAllContinue(e,t,o,s)}async _createSampler(e,t,i,s){const n=i.signal;await e.load({signal:n});const o=t.spatialReference,l=e.tileInfo.spatialReference;o.equals(l)||(await Object(h["g"])([{source:o,dest:l}],{signal:n}),t=Object(h["m"])(t,l));const a=new g(e,t,i,s);return await this._selectTiles(a,n),await this._populateElevationTiles(a,n),new d["a"](a.elevationTiles,a.layer.tileInfo,a.options.noDataValue)}async _createSamplerAllContinue(e,t,i,s){if(e.pop(),!e.length)return i;const n=i.samplers.map(e=>Object(p["s"])(e.extent)),o=await this._createSampler(e[e.length-1],t,s,n);if(0===o.samplers.length)return i;const l=i.samplers.concat(o.samplers),a=new d["a"](l,s.noDataValue);return this._createSamplerAllContinue(e,t,a,s)}async _queryAllContinue(e,t,i){const s=e.pop(),n=t.geometry.coordinates,o=[],l=[];for(let c=0;c=0?i.source||(i.source=s):e.length&&(o.push(n[c]),l.push(c))}if(!e.length||0===o.length)return t;const a=t.geometry.clone(o),r=await this.query(e[e.length-1],a,i);return l.forEach((e,i)=>{n[e].z=r.geometry.coordinates[i].z,t.sampleInfo[e].demResolution=r.sampleInfo[i].demResolution}),this._queryAllContinue(e,t,i)}async _createQueryResult(e,t){const i={geometry:(await e.geometry.project(e.outSpatialReference,t)).export(),noDataValue:e.options.noDataValue};return e.options.returnSampleInfo&&(i.sampleInfo=this._extractSampleInfo(e)),e.geometry.coordinates.forEach(e=>{e.tile=null,e.elevationTile=null}),i}async _createGeometryDescriptor(e,t,i){let s;const o=e.layer.tileInfo.spatialReference;if(t instanceof T?s=await t.project(o,i):(await Object(h["g"])([{source:t.spatialReference,dest:o}],{signal:i}),s=Object(h["m"])(t,o)),!s)throw new n["a"]("elevation-query:spatial-reference-mismatch",`Cannot query elevation in '${t.spatialReference.wkid}' on an elevation service in '${o.wkid}'`);e.geometry=T.fromGeometry(s)}async _selectTiles(e,t){const i=e.options.demResolution;if("geometry"===e.type&&this._preselectOutsideLayerExtent(e),"number"==typeof i)this._selectTilesClosestResolution(e);else if("finest-contiguous"===i)await this._selectTilesFinestContiguous(e,t);else{if("auto"!==i)throw new n["a"]("elevation-query:invalid-dem-resolution",`Invalid dem resolution value '${i}', expected a number, "finest-contiguous" or "auto"`);await this._selectTilesAuto(e,t)}}_preselectOutsideLayerExtent(e){if(Object(o["j"])(e.layer.fullExtent))return;const t=new f(null);t.sample=()=>e.options.noDataValue,e.outsideExtentTile=t;const i=e.layer.fullExtent;e.geometry.coordinates.forEach(e=>{const s=e.x,n=e.y;(si.xmax||ni.ymax)&&(e.elevationTile=t)})}_selectTilesClosestResolution(e){const t=e.layer.tileInfo,i=this._findNearestDemResolutionLODIndex(t,e.options.demResolution);e.selectTilesAtLOD(i)}_findNearestDemResolutionLODIndex(e,t){const i=t/Object(a["f"])(e.spatialReference);let s=e.lods[0],n=0;for(let o=1;oo.fetchAvailability(e.level,e.row,e.col,{signal:i}))),i);else if(await this._populateElevationTiles(e,i),!e.allElevationTilesFetched())throw e.clearElevationTiles(),new n["a"]("elevation-query:has-unavailable-tiles")}catch(r){Object(l["u"])(r),await this._selectTilesFinestContiguousAt(e,t-1,i)}}async _populateElevationTiles(e,t){const i=e.getTilesToFetch(),s={},n=e.options.cache,a=e.options.noDataValue,r=i.map(async i=>{const l=`${e.layer.uid}:${i.id}:${a}`,r=Object(o["k"])(n)?n.get(l):null,c=Object(o["k"])(r)?r:await e.layer.fetchTile(i.level,i.row,i.col,{noDataValue:a,signal:t});Object(o["k"])(n)&&n.put(l,c),s[i.id]=new f(i,c)});await Object(l["z"])(Object(l["j"])(r),t),e.populateElevationTiles(s)}async _selectTilesAuto(e,t){this._selectTilesAutoFinest(e),this._reduceTilesForMaximumRequests(e);const i=e.layer.tilemapCache;if(!i)return this._selectTilesAutoPrefetchUpsample(e,t);const n=e.getTilesToFetch(),o={},a=n.map(async e=>{const n={id:null,level:0,row:0,col:0,extent:Object(p["l"])()},a=await Object(s["d"])(i.fetchAvailabilityUpsample(e.level,e.row,e.col,n,{signal:t}));!1===a.ok?Object(l["u"])(a.error):o[e.id]=n});await Object(l["z"])(Promise.all(a),t),e.remapTiles(o)}_reduceTilesForMaximumRequests(e){const t=e.layer.tileInfo;let i=0;const s={},n=e=>{e.id in s?s[e.id]++:(s[e.id]=1,i++)},o=e=>{const t=s[e.id];1===t?(delete s[e.id],i--):s[e.id]=t-1};e.forEachTileToFetch(n,o);let l=!0;for(;l&&(l=!1,e.forEachTileToFetch(s=>{i<=e.options.maximumAutoTileRequests||(o(s),t.upsampleTile(s)&&(l=!0),n(s))},o),l););}_selectTilesAutoFinest(e){const t=w(e.layer.tileInfo,e.options.minDemResolution);e.selectTilesAtLOD(t,e.options.maximumAutoTileRequests)}async _selectTilesAutoPrefetchUpsample(e,t){const i=e.layer.tileInfo;await this._populateElevationTiles(e,t);let s=!1;e.forEachTileToFetch((e,t)=>{i.upsampleTile(e)?s=!0:t()}),s&&await this._selectTilesAutoPrefetchUpsample(e,t)}_sampleGeometryWithElevation(e){e.geometry.coordinates.forEach(t=>{const i=t.elevationTile;let s=e.options.noDataValue;if(i){const e=i.sample(t.x,t.y);Object(o["k"])(e)?s=e:t.elevationTile=null}t.z=s})}_extractSampleInfo(e){const t=e.layer.tileInfo,i=Object(a["f"])(t.spatialReference);return e.geometry.coordinates.map(s=>{let n=-1;return s.elevationTile&&s.elevationTile!==e.outsideExtentTile&&(n=t.lodAt(s.elevationTile.tile.level).resolution*i),{demResolution:n}})}}class T{export(){return this._exporter(this.coordinates,this.spatialReference)}clone(e){const t=new T;return t.geometry=this.geometry,t.spatialReference=this.spatialReference,t.coordinates=e||this.coordinates.map(e=>this._cloneCoordinate(e)),t._exporter=this._exporter,t}async project(e,t){if(this.spatialReference.equals(e))return this.clone();await Object(h["g"])([{source:this.spatialReference,dest:e}],{signal:t});const i=new r["a"]({spatialReference:this.spatialReference,points:this.coordinates.map(e=>[e.x,e.y])}),s=Object(h["m"])(i,e);if(!s)return null;const n=this.coordinates.map((e,t)=>{const i=this._cloneCoordinate(e),n=s.points[t];return i.x=n[0],i.y=n[1],i}),o=this.clone(n);return o.spatialReference=e,o}_cloneCoordinate(e){return{x:e.x,y:e.y,z:e.z,m:e.m,tile:null,elevationTile:null}}static fromGeometry(e){const t=new T;if(t.geometry=e,t.spatialReference=e.spatialReference,e instanceof T)t.coordinates=e.coordinates.map(e=>t._cloneCoordinate(e)),t._exporter=(t,i)=>{const s=e.clone(t);return s.spatialReference=i,s};else switch(e.type){case"point":{const i=e,{hasZ:s,hasM:n}=i;t.coordinates=s&&n?[{x:i.x,y:i.y,z:i.z,m:i.m}]:s?[{x:i.x,y:i.y,z:i.z}]:n?[{x:i.x,y:i.y,m:i.m}]:[{x:i.x,y:i.y}],t._exporter=(t,i)=>e.hasM?new c["a"](t[0].x,t[0].y,t[0].z,t[0].m,i):new c["a"](t[0].x,t[0].y,t[0].z,i);break}case"multipoint":{const i=e,{hasZ:s,hasM:n}=i;t.coordinates=s&&n?i.points.map(e=>({x:e[0],y:e[1],z:e[2],m:e[3]})):s?i.points.map(e=>({x:e[0],y:e[1],z:e[2]})):n?i.points.map(e=>({x:e[0],y:e[1],m:e[2]})):i.points.map(e=>({x:e[0],y:e[1]})),t._exporter=(t,i)=>e.hasM?new r["a"]({points:t.map(e=>[e.x,e.y,e.z,e.m]),hasZ:!0,hasM:!0,spatiaReference:i}):new r["a"](t.map(e=>[e.x,e.y,e.z]),i);break}case"polyline":{const i=e,s=[],n=[],{hasZ:o,hasM:l}=e;let a=0;for(const e of i.paths)if(n.push([a,a+e.length]),a+=e.length,o&&l)for(const t of e)s.push({x:t[0],y:t[1],z:t[2],m:t[3]});else if(o)for(const t of e)s.push({x:t[0],y:t[1],z:t[2]});else if(l)for(const t of e)s.push({x:t[0],y:t[1],m:t[2]});else for(const t of e)s.push({x:t[0],y:t[1]});t.coordinates=s,t._exporter=(t,i)=>{const s=e.hasM?t.map(e=>[e.x,e.y,e.z,e.m]):t.map(e=>[e.x,e.y,e.z]),o=n.map(e=>s.slice(e[0],e[1]));return new u["a"]({paths:o,hasM:e.hasM,hasZ:!0,spatialReference:i})};break}}return t}}class x{constructor(e,t){this.layer=e,this.options=t}}class v extends x{constructor(e,t,i){super(e,i),this.outSpatialReference=t,this.type="geometry"}selectTilesAtLOD(e){if(e<0)this.geometry.coordinates.forEach(e=>e.tile=null);else{const t=this.layer.tileInfo,i=t.lods[e].level;this.geometry.coordinates.forEach(e=>{e.tile=t.tileAt(i,e.x,e.y)})}}allElevationTilesFetched(){return!this.geometry.coordinates.some(e=>!e.elevationTile)}clearElevationTiles(){for(const e of this.geometry.coordinates)e.elevationTile!==this.outsideExtentTile&&(e.elevationTile=null)}populateElevationTiles(e){for(const t of this.geometry.coordinates)!t.elevationTile&&t.tile&&(t.elevationTile=e[t.tile.id])}remapTiles(e){for(const t of this.geometry.coordinates)t.tile=e[t.tile.id]}getTilesToFetch(){const e={},t=[];for(const i of this.geometry.coordinates){const s=i.tile;i.elevationTile||!i.tile||e[s.id]||(e[s.id]=s,t.push(s))}return t}forEachTileToFetch(e){for(const t of this.geometry.coordinates)t.tile&&!t.elevationTile&&e(t.tile,()=>t.tile=null)}}class g extends x{constructor(e,t,i,s){super(e,i),this.type="extent",this.elevationTiles=[],this.candidateTiles=[],this.fetchedCandidates=new Set,this.extent=t.intersection(e.fullExtent),this.maskExtents=s}selectTilesAtLOD(e,t){const i=this._maximumLodForRequests(t),s=Math.min(i,e);s<0?this.candidateTiles.length=0:this._selectCandidateTilesCoveringExtentAt(s)}_maximumLodForRequests(e){const t=this.layer.tileInfo;if(!e)return t.lods.length-1;const i=this.extent;if(Object(o["j"])(i))return-1;for(let s=t.lods.length-1;s>=0;s--){const n=t.lods[s],o=n.resolution*t.size[0],l=n.resolution*t.size[1];if(Math.ceil(i.width/o)*Math.ceil(i.height/l)<=e)return s}return-1}allElevationTilesFetched(){return this.candidateTiles.length===this.elevationTiles.length}clearElevationTiles(){this.elevationTiles.length=0,this.fetchedCandidates.clear()}populateElevationTiles(e){for(const t of this.candidateTiles){const i=e[t.id];i&&(this.fetchedCandidates.add(t),this.elevationTiles.push(i))}}remapTiles(e){this.candidateTiles=this._uniqueNonOverlappingTiles(this.candidateTiles.map(t=>e[t.id]))}getTilesToFetch(){return this.candidateTiles}forEachTileToFetch(e,t){const i=this.candidateTiles;this.candidateTiles=[],i.forEach(i=>{if(this.fetchedCandidates.has(i))return void(t&&t(i));let s=!1;e(i,()=>s=!0),s?t&&t(i):this.candidateTiles.push(i)}),this.candidateTiles=this._uniqueNonOverlappingTiles(this.candidateTiles,t)}_uniqueNonOverlappingTiles(e,t){const i={},s=[];for(const o of e)i[o.id]?t&&t(o):(i[o.id]=o,s.push(o));const n=s.sort((e,t)=>e.level-t.level);return n.filter((e,i)=>{for(let s=0;sObject(p["g"])(t,e.extent))}}function w(e,t){let i=e.lods.length-1;if(t>0){const s=e.lods.findIndex(e=>e.resolution0&&(i=s-1)}return i}const _={maximumAutoTileRequests:20,noDataValue:0,returnSampleInfo:!1,demResolution:"auto",minDemResolution:0}}}]); //# sourceMappingURL=chunk-2d0bdf78.da1efb49.js.map