UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

1 lines • 17.4 kB
"use strict";(self.webpackChunkRemoteClient=self.webpackChunkRemoteClient||[]).push([[91],{1555(e,t,n){n.d(t,{C:()=>m});var i=n(5482),a=n(53966),s=n(86211),l=n(91429),o=n(16930),r=n(19419),c=n(65529),u=n(86738),h=n(28735);let p=class extends c.nJ{queryElevation(e){const t=this.projectIfRequired(e,this.spatialReference);if(!t)return null;switch(e.type){case"point":return function(e,t,n){return e.hasZ=!0,e.z=n.elevationAt(t.x,t.y),e}(e,t,this);case"polyline":return function(e,t,n){f.spatialReference=t.spatialReference;const i=e.hasM&&!e.hasZ;for(let a=0;a<e.paths.length;a++){const s=e.paths[a],l=t.paths[a];for(let e=0;e<s.length;e++){const t=s[e],a=l[e];f.x=a[0],f.y=a[1],i&&(t[3]=t[2]),t[2]=n.elevationAt(f.x,f.y)}}return e.hasZ=!0,e}(e,t,this);case"multipoint":return function(e,t,n){f.spatialReference=t.spatialReference;const i=e.hasM&&!e.hasZ;for(let a=0;a<e.points.length;a++){const s=e.points[a],l=t.points[a];f.x=l[0],f.y=l[1],i&&(s[3]=s[2]),s[2]=n.elevationAt(f.x,f.y)}return e.hasZ=!0,e}(e,t,this);default:return null}}projectIfRequired(e,t){if(null==e)return null;const n=e.spatialReference;if(n.equals(t))return e;const i=(0,h.Cv)(e,t);return i||a.A.getLogger(this).error(`Cannot project geometry spatial reference (wkid:${n.wkid}) to elevation sampler spatial reference (wkid:${t.wkid})`),i}};p=(0,i.Cg)([(0,l.$K)("esri.layers.support.ElevationSampler")],p);const f=new u.A;let m=class extends p{get spatialReference(){return this.extent.spatialReference}constructor(e){const t=e.noDataValue,n="tiles"in e?e.tiles.map(n=>new d({tile:n,tileInfo:e.tileInfo,noDataValue:t})):e.samplers;super({noDataValue:t,samplers:n});const i=n[0];if(i){this.extent=i.extent.clone();const{min:e,max:t}=i.demResolution;this.demResolution={min:e,max:t};for(let e=1;e<n.length;e++){const t=n[e];this.extent.union(t.extent),this.demResolution.min=Math.min(this.demResolution.min,t.demResolution.min),this.demResolution.max=Math.max(this.demResolution.max,t.demResolution.max)}}else{const t="tileInfo"in e?e.tileInfo:null;this.extent=(0,r.w1)((0,r.vt)(),t?.spatialReference??o.A.WGS84),this.demResolution={min:0,max:0}}}elevationAt(e,t){let n;for(const i of this.samplers)if(i.containsAt(e,t)&&(n=i.elevationAt(e,t),n!==i.noDataValue))return n;return null!=n?n:(a.A.getLogger(this).warn("#elevationAt()",`Point used to sample elevation (${e}, ${t}) is outside of the sampler`),this.noDataValue)}};(0,i.Cg)([(0,l.MZ)({constructOnly:!0})],m.prototype,"noDataValue",void 0),(0,i.Cg)([(0,l.MZ)({constructOnly:!0})],m.prototype,"samplers",void 0),m=(0,i.Cg)([(0,l.$K)("esri.layers.support.TileElevationSampler")],m);let d=class extends p{get spatialReference(){return this.extent.spatialReference}constructor(e){super(e);const t=e.tile.key.extent;this.extent=(0,r.w1)(t,e.tileInfo.spatialReference),this.extent.zmin=e.tile.zmin,this.extent.zmax=e.tile.zmax;const n=(0,s.GA)(e.tileInfo.spatialReference),i=e.tileInfo.lodAt(e.tile.key.level).resolution*n;this.demResolution={min:i,max:i}}contains(e){const t=this.projectIfRequired(e,this.spatialReference);return null!=t&&this.containsAt(t.x,t.y)}containsAt(e,t){return(0,r.Rj)(this.tile.key.extent,e,t)}elevationAt(e,t){return this.containsAt(e,t)?this.tile.sample(e,t)??this.noDataValue:this.noDataValue}};(0,i.Cg)([(0,l.MZ)({constructOnly:!0})],d.prototype,"tile",void 0),(0,i.Cg)([(0,l.MZ)({constructOnly:!0})],d.prototype,"noDataValue",void 0),(0,i.Cg)([(0,l.MZ)({constructOnly:!0})],d.prototype,"tileInfo",void 0),d=(0,i.Cg)([(0,l.$K)("esri.layers.support.TileElevationSampler.SingleTileElevationSampler")],d)},90091(e,t,n){n.d(t,{createSampler:()=>C,query:()=>V});var i=n(60999),a=n(49186),s=n(97768),l=n(74887),o=n(86211),r=n(91218),c=n(19419),u=n(4576),h=n(72802);class p{constructor(e,t){this.layer=e,this.parameters=t}}class f extends p{constructor(e,t,n){super(e,n),this.outSpatialReference=t,this.type="geometry"}selectTilesAtLOD(e){if(e<0)this.geometry.coordinates.forEach(e=>e.tile=null);else{const{tileInfo:t,tilemapCache:n}=this.layer,i=y(t,n)[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?.id&&(t.elevationTile=e[t.tile.id])}remapTiles(e){for(const t of this.geometry.coordinates){const n=t.tile?.id;t.tile=n?e[n]:null}}getTilesToFetch(){return(0,u.Am)(this.geometry.coordinates.filter(({tile:e,elevationTile:t})=>e?.id&&!t),(e,t)=>e.tile?.id===t.tile?.id).map(({tile:e})=>e)}forEachTileToFetch(e){for(const t of this.geometry.coordinates)t.tile&&!t.elevationTile&&e(t.tile,()=>t.tile=null)}}class m extends p{constructor(e,t,n,i){super(e,n),this.maskExtents=i,this.type="extent",this.elevationTiles=[],this._candidateTiles=[],this._fetchedCandidates=new Set,this.extent=t.clone().intersection(e.fullExtent)}selectTilesAtLOD(e,t){const n=this._maximumLodForRequests(t),i=Math.min(n,e);i<0?this._candidateTiles.length=0:this._selectCandidateTilesCoveringExtentAt(i)}_maximumLodForRequests(e){const{tileInfo:t,tilemapCache:n}=this.layer,i=y(t,n);if(!e)return i.length-1;const a=this.extent;if(null==a)return-1;for(let n=i.length-1;n>=0;n--){const s=i[n],l=s.resolution*t.size[0],o=s.resolution*t.size[1];if(Math.ceil(a.width/l)*Math.ceil(a.height/o)<=e)return n}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 n=t.id&&e[t.id];n&&(this._fetchedCandidates.add(t),this.elevationTiles.push(n))}}remapTiles(e){this._candidateTiles=x(this._candidateTiles.map(t=>e[t.id]))}getTilesToFetch(){return this._candidateTiles}forEachTileToFetch(e,t){const n=this._candidateTiles;this._candidateTiles=[],n.forEach(n=>{if(this._fetchedCandidates.has(n))return void t?.(n);let i=!1;e(n,()=>i=!0),i?t?.(n):this._candidateTiles.push(n)}),this._candidateTiles=x(this._candidateTiles,t)}_selectCandidateTilesCoveringExtentAt(e){this._candidateTiles.length=0;const t=this.extent;if(null==t)return;const{tileInfo:n,tilemapCache:i}=this.layer,a=y(n,i)[e],s=n.tileAt(a.level,t.xmin,t.ymin),l=s.extent,o=a.resolution*n.size[0],r=a.resolution*n.size[1],c=Math.ceil((t.xmax-l[0])/o),u=Math.ceil((t.ymax-l[1])/r);for(let e=0;e<u;e++)for(let t=0;t<c;t++){const i=new h.U(s.level,s.row-e,s.col+t);n.updateTileInfo(i),this._tileIsMasked(i)||this._candidateTiles.push(i)}}_tileIsMasked(e){return this.maskExtents?.some(t=>(0,c.gR)(t,e.extent))??!1}}function d(e){return null!=e?.tileInfo}function y(e,t){const n=e.lods;if(d(t)){const{effectiveMinLOD:e,effectiveMaxLOD:i}=t;return n.filter(t=>t.level>=e&&t.level<=i)}return n}function x(e,t){const n={},i=[];for(const a of e){const e=a.id;e&&!n[e]?(n[e]=a,i.push(a)):t?.(a)}const a=i.sort((e,t)=>e.level-t.level);return a.filter((e,n)=>{for(let i=0;i<n;i++){const n=a[i].extent;if(n&&(0,c.gR)(n,e.extent))return t?.(e),!1}return!0})}class v{constructor(e,t){this.data=e,this.safeWidth=.99999999*(e.width-1),this.dx=(e.width-1)/(t[2]-t[0]),this.dy=(e.width-1)/(t[3]-t[1]),this.x0=t[0],this.y1=t[3]}}class w{constructor(e,t=null){if(this.key=e,null!=t){const n=e.extent;this._samplerData=new v(t,n)}}get zmin(){return null!=this._samplerData?this._samplerData.data.minValue:0}get zmax(){return null!=this._samplerData?this._samplerData.data.maxValue:0}get hasNoDataValues(){return!!this._samplerData?.data.hasNoDataValues}sample(e,t){if(null==this._samplerData)return;const{safeWidth:n,data:i,dx:a,dy:s,y1:l,x0:o}=this._samplerData,{width:r,values:c,noDataValue:u}=i,h=g(s*(l-t),0,n),p=g(a*(e-o),0,n),f=Math.floor(h),m=Math.floor(p),d=f*r+m,y=d+r,x=c[d],v=c[y],w=c[d+1],T=c[y+1];if(x!==u&&v!==u&&w!==u&&T!==u){const e=p-m,t=x+(w-x)*e;return t+(v+(T-v)*e-t)*(h-f)}}}function g(e,t,n){return e<t?t:e>n?n:e}var T=n(87378),R=n(48526),A=n(86738),D=n(82799);class E{constructor(e){this.geometry=e,this.spatialReference=e.spatialReference}export(){return this._exporter(this.coordinates,this.spatialReference)}clone(e){const t=new E(this.geometry);return t.spatialReference=this.spatialReference,t.coordinates=e??this.coordinates.map(e=>e.clone()),t._exporter=this._exporter,t}async project(e,t){if(this.spatialReference.equals(e))return this.clone();await(0,r.initializeProjection)([{source:this.spatialReference,dest:e}],{signal:t});const n=new R.A({spatialReference:this.spatialReference,points:this.coordinates.map(e=>[e.x,e.y])}),i=(0,r.project)(n,e);if(!i)return null;const a=this.coordinates.map((e,t)=>{const n=e.clone(),a=i.points[t];return n.x=a[0],n.y=a[1],n}),s=this.clone(a);return s.spatialReference=e,s}projectSync(e){if(this.spatialReference.equals(e))return this.clone();const t=new R.A({spatialReference:this.spatialReference,points:this.coordinates.map(e=>[e.x,e.y])}),n=(0,r.project)(t,e);if(!n)return null;const i=this.coordinates.map((e,t)=>{const i=e.clone(),a=n.points[t];return i.x=a[0],i.y=a[1],i}),a=this.clone(i);return a.spatialReference=e,a}static fromGeometry(e){const t=new E(e);if(e instanceof E)return t.coordinates=e.coordinates.map(e=>e.clone()),t._exporter=(t,n)=>{const i=e.clone(t);return i.spatialReference=n,i},t;switch(e.type){case"point":{const n=e,{hasZ:i,hasM:a}=n;return t.coordinates=i&&a?[new _(n.x,n.y,n.z,n.m)]:i?[new _(n.x,n.y,n.z)]:a?[new _(n.x,n.y,null,n.m)]:[new _(n.x,n.y)],t._exporter=(t,n)=>e.hasM?new A.A(t[0].x,t[0].y,t[0].z,t[0].m,n):new A.A(t[0].x,t[0].y,t[0].z,n),t}case"multipoint":{const n=e,{hasZ:i,hasM:a}=n;return t.coordinates=i&&a?n.points.map(e=>new _(e[0],e[1],e[2],e[3])):i?n.points.map(e=>new _(e[0],e[1],e[2])):a?n.points.map(e=>new _(e[0],e[1],null,e[2])):n.points.map(e=>new _(e[0],e[1])),t._exporter=(t,n)=>e.hasM?new R.A({points:t.map(e=>[e.x,e.y,e.z??0,e.m??0]),hasZ:!0,hasM:!0,spatialReference:n}):new R.A({points:t.map(e=>[e.x,e.y,e.z??0]),spatialReference:n}),t}case"polyline":{const n=e,i=[],a=[],{hasZ:s,hasM:l}=e;let o=0;for(const e of n.paths)if(a.push([o,o+e.length]),o+=e.length,s&&l)for(const t of e)i.push(new _(t[0],t[1],t[2],t[3]));else if(s)for(const t of e)i.push(new _(t[0],t[1],t[2]));else if(l)for(const t of e)i.push(new _(t[0],t[1],null,t[2]));else for(const t of e)i.push(new _(t[0],t[1]));return t.coordinates=i,t._exporter=(t,n)=>{const i=e.hasM?t.map(e=>[e.x,e.y,e.z??0,e.m??0]):t.map(e=>[e.x,e.y,e.z??0]),s=a.map(e=>i.slice(e[0],e[1]));return new D.A({paths:s,hasM:e.hasM,hasZ:!0,spatialReference:n})},t}}}}class _{constructor(e,t,n=null,i=null,a=null,s=null){this.x=e,this.y=t,this.z=n,this.m=i,this.tile=a,this.elevationTile=s}clone(){return new _(this.x,this.y,this.z,this.m)}}var I=n(1555);async function V(e,t,n){if(!e)throw new a.A(F,"Elevation queries require an elevation layer to fetch tiles from");if(!t||!(t instanceof E)&&"point"!==t.type&&"multipoint"!==t.type&&"polyline"!==t.type)throw new a.A("elevation-query:invalid-geometry","Only point, polyline and multipoint geometries can be used to query elevation");const i={...L,...n},l=i.signal;if("integrated-mesh-3dtiles"===e.type){const a=E.fromGeometry(t);if(e.queryElevationCallback&&e.replacesTerrain){const s=12.9*(n?.minDemResolution||0)+.71,o=await e.queryElevationCallback(a,{signal:l,maxGeometricError:s}),r=a.coordinates.map(()=>({demResolution:1,source:e})),c=await o.project(t.spatialReference,l);if(c){if(void 0!==i.noDataValue&&i.noDataValue!==Number.MAX_VALUE)for(const e of c.coordinates)e.z===Number.MAX_VALUE&&(e.z=i.noDataValue);return{geometry:c.export(),noDataValue:i.noDataValue??Number.MAX_VALUE,sampleInfo:r}}}const s=a.coordinates.map(()=>({demResolution:-1,source:e}));return{geometry:a.export(),noDataValue:Number.MAX_VALUE,sampleInfo:s}}const c=new f(e,t.spatialReference,i);return await e.load({signal:l}),await async function(e,t,n){let i;const s=e.layer.tileInfo.spatialReference;if(t instanceof E?i=await t.project(s,n):(await(0,r.initializeProjection)([{source:t.spatialReference,dest:s}],{signal:n}),i=(0,r.project)(t,s)),!i)throw new a.A("elevation-query:spatial-reference-mismatch",`Cannot query elevation in '${t.spatialReference.wkid}' on an elevation service in '${s.wkid}'`);e.geometry=E.fromGeometry(i)}(c,t,l),await z(c,l),await S(c,l),function(e){e.geometry.coordinates.forEach(t=>{const n=t.elevationTile;let i=e.parameters.noDataValue;if(n){const e=n.sample(t.x,t.y);null==e?t.elevationTile=null:i=e}t.z=i})}(c),async function(e,t){const n=await e.geometry.project(e.outSpatialReference,t);(0,s.Lw)(n);const i={geometry:n.export(),noDataValue:e.parameters.noDataValue};return e.parameters.returnSampleInfo&&(i.sampleInfo=function(e){const t=e.layer.tileInfo,n=(0,o.GA)(t.spatialReference);return e.geometry.coordinates.map(i=>{let a=-1;return i.elevationTile&&i.elevationTile!==e.outsideExtentTile&&(a=t.lodAt(i.elevationTile.key.level).resolution*n),{demResolution:a,source:-1===a?void 0:e.layer}})}(e)),e.geometry.coordinates.forEach(e=>{e.tile=null,e.elevationTile=null}),i}(c,l)}async function C(e,t,n){if(e=Array.isArray(e)?e:[e],0===(e=n?.ignoreInvisibleLayers?e.filter(e=>e.visible):e.slice()).length)throw new a.A(F,"Elevation queries require at least one elevation layer to fetch tiles from");if(!t||"extent"!==t.type)throw new a.A("elevation-query:invalid-extent","Invalid or undefined extent");const i={...L,...n,returnSampleInfo:!0},s=M(e[e.length-1],t,i);return 1===e.length?s:q(e,t,await s,i)}async function M(e,t,n,i){const a=n.signal;await e.load({signal:a});const s=t.spatialReference,l=e.tileInfo.spatialReference;s.equals(l)||(await(0,r.initializeProjection)([{source:s,dest:l}],{signal:a}),t=(0,r.project)(t,l));const o=new m(e,t,n,i);await z(o,a),await S(o,a);const c=o.elevationTiles,u=o.layer.tileInfo,h=o.parameters.noDataValue;return new I.C({noDataValue:h,tiles:c,tileInfo:u})}async function q(e,t,n,i){if(e.pop(),!e.length)return n;const a=n.samplers.filter(e=>!e.tile.hasNoDataValues).map(e=>(0,c.VY)(e.extent)),s=await M(e[e.length-1],t,i,a);if(0===s.samplers.length)return n;const l=n.samplers.concat(s.samplers),o=i.noDataValue;return q(e,t,new I.C({samplers:l,noDataValue:o}),i)}async function z(e,t){"geometry"===e.type&&function(e){if(null==e.layer.fullExtent)return;const t=new w(new h.U(-1,-1,-1));t.sample=()=>e.parameters.noDataValue,e.outsideExtentTile=t;const n=e.layer.fullExtent;e.geometry.coordinates.forEach(e=>{const i=e.x,a=e.y;(i<n.xmin||i>n.xmax||a<n.ymin||a>n.ymax)&&(e.elevationTile=t)})}(e);const n=e.parameters.demResolution;if("number"==typeof n)!function(e,t){const n=function(e,t){const{tileInfo:n,tilemapCache:i}=e.layer,a=t/(0,o.GA)(n.spatialReference),s=y(n,i);let l=s[0],r=0;for(let e=1;e<s.length;e++){const t=s[e];Math.abs(t.resolution-a)<Math.abs(l.resolution-a)&&(l=t,r=e)}return r}(e,t);e.selectTilesAtLOD(n)}(e,n);else if("finest-contiguous"===n)await async function(e,t){const{tileInfo:n,tilemapCache:i}=e.layer,a=j(n,i,e.parameters.minDemResolution);await k(e,a,t)}(e,t);else{if("auto"!==n)throw new a.A("elevation-query:invalid-dem-resolution",`Invalid dem resolution value '${n}', expected a number, "finest-contiguous" or "auto"`);await async function(e,t){(function(e){const{tileInfo:t,tilemapCache:n}=e.layer,i=j(t,n,e.parameters.minDemResolution);e.selectTilesAtLOD(i,e.parameters.maximumAutoTileRequests)})(e),function(e){const t=e.layer.tileInfo;let n=0;const i={},a=e=>{null!=e.id&&(e.id in i?i[e.id]++:(i[e.id]=1,n++))},s=e=>{if(null==e.id)return;const t=i[e.id];1===t?(delete i[e.id],n--):i[e.id]=t-1};e.forEachTileToFetch(a,s);let l=!0;for(;l&&(l=!1,e.forEachTileToFetch(i=>{n<=e.parameters.maximumAutoTileRequests||(s(i),t.upsampleTile(i)&&(l=!0),a(i))},s),l););}(e);const n=e.layer.tilemapCache;if(!n||d(n))return b(e,t);const a=e.getTilesToFetch(),s={},o=a.map(async e=>{const a=new h.U(0,0,0),o=await(0,i.Ke)(n.fetchAvailabilityUpsample(e.level,e.row,e.col,a,{signal:t}));!1!==o.ok?null!=e.id&&(s[e.id]=a):(0,l.QP)(o.error)});await(0,l.qr)(Promise.all(o),t),e.remapTiles(s)}(e,t)}}async function k(e,t,n){const i=e.layer;if(e.selectTilesAtLOD(t),t<0)return;const s=i.tilemapCache,o=e.getTilesToFetch();try{if(s&&!d(s))await(0,l.qr)(Promise.all(o.map(e=>s.fetchAvailability(e.level,e.row,e.col,{signal:n}))),n);else if(await S(e,n),!e.allElevationTilesFetched())throw e.clearElevationTiles(),new a.A("elevation-query:has-unavailable-tiles","Some elevation tiles are unavailable")}catch(i){(0,l.QP)(i),await k(e,t-1,n)}}async function b(e,t){const n=e.layer.tileInfo;await S(e,t);let i=!1;e.forEachTileToFetch((e,t)=>{n.upsampleTile(e)?i=!0:t()}),i&&await b(e,t)}function j(e,t,n=0){const i=y(e,t);let a=i.length-1;if(n>0){const t=n/(0,o.GA)(e.spatialReference),s=i.findIndex(e=>e.resolution<t);0===s?a=0:s>0&&(a=s-1)}return a}const L={maximumAutoTileRequests:20,noDataValue:0,returnSampleInfo:!1,demResolution:"auto",minDemResolution:0,signal:null};async function S(e,t){const n=e.getTilesToFetch(),i={},a=e.parameters.cache,s=e.parameters.noDataValue,o={noDataValue:s,signal:t},r=n.map(async t=>{if(null==t.id)return;const n=`${e.layer.uid}:${t.id}:${s}`,l=a?.get(n),r=l??T.A.from(await e.layer.fetchTile(t.level,t.row,t.col,o));a?.put(n,r),i[t.id]=new w(t,r)});await(0,l.qr)(Promise.allSettled(r),t),e.populateElevationTiles(i)}const F="elevation-query:invalid-layer"}}]);