@arcgis/core 4.24.0-next.20220607 → 4.24.0-next.20220610
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/analysis/Analysis.js +1 -1
- package/analysis/LineOfSightAnalysis.js +1 -1
- package/arcade/arcadeCompiler.js +1 -1
- package/arcade.d.ts +4 -0
- package/arcade.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{4d2181bde97983ecac8b.js → 03ddf44e6fb8bf9db3ff.js} +1 -1
- package/assets/esri/core/workers/chunks/{2e2d7f5952934af43fd7.js → 04034dabc8e0a489b0f8.js} +1 -1
- package/assets/esri/core/workers/chunks/{d7168ff8f26ca2537080.js → 0747c28fce0b344dc89b.js} +1 -1
- package/assets/esri/core/workers/chunks/1e4e5d147263e98536bc.js +1 -0
- package/assets/esri/core/workers/chunks/{cbe98327181d8d7ad9e5.js → 262fabdc409d55831ffa.js} +1 -1
- package/assets/esri/core/workers/chunks/2a52c2c6edd70432f4a5.js +1 -0
- package/assets/esri/core/workers/chunks/{71d445d1e6812e03a1d7.js → 3ce7adaefc9de28d9c87.js} +1 -1
- package/assets/esri/core/workers/chunks/{c165845a117c21246b1e.js → 42aa8ce4eb7bd851475e.js} +1 -1
- package/assets/esri/core/workers/chunks/{a9a4bb1d781b1a995fb3.js → 4824926501e11d04eb4a.js} +1 -1
- package/assets/esri/core/workers/chunks/{e51420d231c286b9c062.js → 540f1ed1ea9cddc739af.js} +1 -1
- package/assets/esri/core/workers/chunks/6196cfdeb91ceba52af3.js +1 -0
- package/assets/esri/core/workers/chunks/71a4618d959a09302c51.js +1 -0
- package/assets/esri/core/workers/chunks/76fbc8eaabba62fd4f9c.js +1 -0
- package/assets/esri/core/workers/chunks/{cb906a3f03dd0805c880.js → 7cc17b716b16a6684023.js} +1 -1
- package/assets/esri/core/workers/chunks/871681c1353026cb6d4b.js +1 -0
- package/assets/esri/core/workers/chunks/{13e9e6f0b4942d79b0eb.js → 88942e9f60687ac006dc.js} +1 -1
- package/assets/esri/core/workers/chunks/{4c5b80ba3dbfe6f6cafb.js → acb1e649cda99d4f69a5.js} +1 -1
- package/assets/esri/core/workers/chunks/b71a0a8a2f446c671161.js +1 -0
- package/assets/esri/core/workers/chunks/b8002aaa665712299121.js +1 -0
- package/assets/esri/core/workers/chunks/{e4ca3f04ca7f71b46240.js → bb3480e231934b7bb34e.js} +1 -1
- package/assets/esri/core/workers/chunks/{185da42e7cc8e440c0f0.js → c157b46b0724f3f0947e.js} +1 -1
- package/assets/esri/core/workers/chunks/{1aba8c73c62a64e0658c.js → c6af8b0903d8d934d542.js} +1 -1
- package/assets/esri/core/workers/chunks/c8402e32307a7b7eaaeb.js +1 -0
- package/assets/esri/core/workers/chunks/c8e08a956b16034d9819.js +1 -0
- package/assets/esri/core/workers/chunks/d0d2566bedc493ed0a3b.js +1 -0
- package/assets/esri/core/workers/chunks/{8152cd26ebeae910b753.js → d3c73da9c2abb59e762a.js} +1 -1
- package/assets/esri/core/workers/chunks/d828a0656e7351a74fc4.js +1 -0
- package/assets/esri/core/workers/chunks/{172368d4eb6e6f8d2bdb.js → d8b9551df1bd196d0126.js} +1 -1
- package/assets/esri/core/workers/chunks/e5c8584ae764892c324d.js +1 -0
- package/assets/esri/core/workers/chunks/{1d893ebc6f203ff1fc3d.js → efe605ff4ba2a95c14c5.js} +1 -1
- package/assets/esri/core/workers/chunks/f54d5abbb9668c45bd19.js +1 -0
- package/assets/esri/core/workers/chunks/{bd2f4a01cb71e25837ba.js → f7ba74fc4eb541c424fc.js} +1 -1
- package/assets/esri/core/workers/chunks/{1ebed6d6f561f926bd36.js → faf6e48f9f1205fb2e43.js} +1 -1
- package/assets/esri/geometry/support/pe-wasm.wasm +0 -0
- package/assets/esri/themes/base/widgets/_BasemapToggle.scss +6 -23
- package/assets/esri/themes/base/widgets/_Directions.scss +0 -3
- package/assets/esri/themes/base/widgets/_FeatureTable.scss +10 -2
- package/assets/esri/themes/base/widgets/_Slider.scss +8 -3
- package/assets/esri/themes/base/widgets/_Tooltip.scss +8 -8
- package/assets/esri/themes/base/widgets/_Weather.scss +5 -1
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ar.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_bg.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_bs.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ca.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_cs.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_da.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_de.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_el.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_en.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_es.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_et.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_fi.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_fr.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_he.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_hr.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_hu.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_id.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_it.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ja.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ko.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_lt.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_lv.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_nb.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_nl.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_pl.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_pt-BR.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_pt-PT.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ro.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_ru.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_sk.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_sl.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_sr.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_sv.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_th.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_tr.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_uk.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_vi.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_zh-CN.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_zh-HK.json +1 -1
- package/assets/esri/widgets/BasemapToggle/t9n/BasemapToggle_zh-TW.json +1 -1
- package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_en.json +1 -1
- package/chunks/RasterColorizer.glsl.js +22 -18
- package/chunks/basis_transcoder.js +1 -1
- package/chunks/i3s.js +1 -1
- package/chunks/lclayout.js +1 -1
- package/chunks/lerc-wasm.js +1 -1
- package/chunks/libtess-asm.js +1 -1
- package/chunks/libtess.js +1 -1
- package/chunks/pe-wasm.js +1 -1
- package/chunks/persistableUrlUtils.js +1 -1
- package/chunks/vxlLayer.js +1 -1
- package/core/quantityUtils.js +1 -1
- package/geometry/projection.js +1 -1
- package/geometry/support/geodesicUtils.js +1 -1
- package/geometry/support/plane.js +1 -1
- package/interfaces.d.ts +471 -52
- package/layers/LineOfSightLayer.js +1 -1
- package/layers/RouteLayer.js +1 -1
- package/layers/VectorTileLayer.js +1 -1
- package/layers/support/LayerContingentValuesCache.js +1 -1
- package/layers/support/RasterInfo.js +1 -1
- package/layers/support/rasterDatasets/ImageAuxRaster.js +1 -1
- package/layers/support/rasterDatasets/InMemoryRaster.js +1 -1
- package/layers/support/rasterDatasets/WCSRaster.js +1 -1
- package/layers/support/rasterDatasets/wcsCoverageParser.js +1 -1
- package/layers/support/rasterFormats/JpgPlus.js +1 -1
- package/layers/support/rasterFormats/RasterCodec.js +1 -1
- package/layers/support/rasterFormats/TiffDecoder.js +1 -1
- package/package.json +1 -1
- package/portal/support/urlUtils.js +5 -0
- package/renderers/support/colorRampUtils.js +1 -1
- package/rest/imageService/fetchRasterInfo.js +1 -1
- package/smartMapping/renderers/pieChart.js +1 -1
- package/smartMapping/support/adapters/FeatureLayerAdapter.js +1 -1
- package/support/arcadeUtils.js +1 -1
- package/support/elevationInfoUtils.js +1 -1
- package/support/persistableUrlUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/views/2d/engine/vectorTiles/shaders/VTLMaterial.js +1 -1
- package/views/2d/engine/webgl/Utils.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/layers/graphics/GraphicStoreItem.js +1 -1
- package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
- package/views/3d/analysis/AnalysisViewManager3D.js +1 -1
- package/views/3d/analysis/Dimensioning/LengthDimensionComputation.js +1 -1
- package/views/3d/analysis/DirectLineMeasurement/DirectLineMeasurementVisualization.js +1 -1
- package/views/3d/analysis/DirectLineMeasurementAnalysisView3D.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightRayIntersector.js +1 -1
- package/views/3d/input/SceneInputManager.js +1 -1
- package/views/3d/interactive/editingTools/draw/DrawGraphicTool3D.js +1 -1
- package/views/3d/interactive/editingTools/moveGraphic/GraphicMoveTool.js +1 -1
- package/views/3d/interactive/editingTools/reshapeGraphic/ReshapeOperation.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/ExtentTransformTool.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/GraphicTransformTool.js +1 -1
- package/views/3d/layers/i3s/I3SAttributeOverrides.js +1 -1
- package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
- package/views/3d/support/MemoryController.js +1 -1
- package/views/3d/terrain/RasterColorizerTechnique.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/TileCompositor.js +1 -1
- package/views/3d/terrain/TileRenderer.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/output/BlendOptions.js +1 -1
- package/views/MapView.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/View.js +1 -1
- package/views/draw/DrawOperation.js +1 -1
- package/views/draw/support/GraphicMover.js +1 -1
- package/views/interactive/SegmentLabels.js +1 -1
- package/views/interactive/editGeometry/support/editPlaneUtils.js +1 -1
- package/views/interactive/tooltip/TranslateTooltipInfos.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentTranslateVertex.js +1 -1
- package/views/interactive/tooltip/support/measurements.js +1 -1
- package/views/support/areaMeasurementUtils.js +1 -1
- package/views/support/automaticLengthMeasurementUtils.js +5 -0
- package/views/support/euclideanLengthMeasurementUtils.js +5 -0
- package/views/support/geodesicLengthMeasurementUtils.js +5 -0
- package/views/support/measurementUtils.js +5 -0
- package/widgets/BasemapToggle/BasemapToggleViewModel.js +1 -1
- package/widgets/BasemapToggle.js +1 -1
- package/widgets/BuildingExplorer/BuildingDisciplinesTree/BuildingDisciplinesTree.js +1 -1
- package/widgets/BuildingExplorer/BuildingLevelPicker/BuildingLevelPicker.js +1 -1
- package/widgets/BuildingExplorer/BuildingPhasePicker/BuildingPhasePicker.js +1 -1
- package/widgets/BuildingExplorer.js +1 -1
- package/widgets/Daylight/DaylightViewModel.js +1 -1
- package/widgets/Directions/DirectionsViewModel.js +1 -1
- package/widgets/Directions.js +1 -1
- package/widgets/Feature/FeatureMedia/FeatureMediaViewModel.js +1 -1
- package/widgets/Feature/support/featureUtils.js +1 -1
- package/widgets/FeatureTable/FieldColumn.js +1 -1
- package/widgets/Legend/support/sizeRampUtils.js +1 -1
- package/widgets/Print/PrintViewModel.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/widgets/UtilityNetworkTrace/UtilityNetworkTraceViewModel.js +1 -1
- package/widgets/UtilityNetworkTrace.js +1 -1
- package/widgets/Weather.js +1 -1
- package/widgets/Widget.js +1 -1
- package/widgets/support/AnalysisViewModel.js +1 -1
- package/widgets/support/AnchorElementViewModel.js +1 -1
- package/widgets/support/InteractiveAnalysisViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/2ac6c99aacb873134f7c.js +0 -1
- package/assets/esri/core/workers/chunks/471beeb6924599209567.js +0 -1
- package/assets/esri/core/workers/chunks/5242c9badca17ba2ab25.js +0 -1
- package/assets/esri/core/workers/chunks/72c7d48408d1f8050026.js +0 -1
- package/assets/esri/core/workers/chunks/770cf0a66102100abe74.js +0 -1
- package/assets/esri/core/workers/chunks/96ff15d6c2bfca0c6061.js +0 -1
- package/assets/esri/core/workers/chunks/9c4c721d890b49697132.js +0 -1
- package/assets/esri/core/workers/chunks/af3766a2d27419c7766c.js +0 -1
- package/assets/esri/core/workers/chunks/b50bbfd75768d9a8de88.js +0 -1
- package/assets/esri/core/workers/chunks/b577ec80647cf2ece397.js +0 -1
- package/assets/esri/core/workers/chunks/c1653b6cb201ecbaabaa.js +0 -1
- package/assets/esri/core/workers/chunks/e99b58d07475bffce7ea.js +0 -1
- package/assets/esri/core/workers/chunks/f3d885aec4bca18928d4.js +0 -1
- package/assets/esri/core/workers/chunks/fc0da1dfeef041182ddf.js +0 -1
- package/views/support/lengthMeasurementUtils.js +0 -5
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{bytesToUTF8 as e}from"../rasterDatasets/byteStreamUtils.js";import{J as t}from"../../../chunks/Jpg.js";import{load as n,decode as a}from"./Lerc.js";import{decode as i}from"./Lzw.js";import s from"./TiffTags.js";import{isPlatformLittleEndian as r}from"./utils.js";import{Z as l}from"../../../chunks/Zlib.js";const o=[0,1,1,2,4,8,1,1,2,4,8,4,8,-1,-1,-1,8,8,8],f=4294967296,c=new Set([1,5,6,7,8,34712,34887]);function u(e,t){let n="unknown";return 3===e?n="f32":1===e?1===t?n="u1":2===t?n="u2":4===t?n="u4":t<=8?n="u8":t<=16?n="u16":t<=32&&(n="u32"):2===e&&(t<=8?n="s8":t<=16?n="s16":t<=32&&(n="s32")),n}function h(e){let t=null;switch(e?e.toLowerCase():"f32"){case"u1":case"u2":case"u4":case"u8":t=Uint8Array;break;case"u16":t=Uint16Array;break;case"u32":t=Uint32Array;break;case"s8":t=Int8Array;break;case"s16":t=Int16Array;break;case"s32":t=Int32Array;break;default:t=Float32Array}return t}function g(e,t){return{x:t[0]*e.x+t[1]*e.y+t[2],y:t[3]*e.x+t[4]*e.y+t[5]}}function w(e,t){return e.get(t)?.values}function p(e,t){return e.get(t)?.values}function d(e,t){return e.get(t)?.values[0]}function I(e,t){return e.get(t)?.values[0]}function T(e,t,n,a=0,i=s.TIFF_TAGS,r=4){const l=8===r,o=l?U(new DataView(e,n,8),0,t):new DataView(e,n,2).getUint16(0,t),f=4+2*r,c=l?8:2,u=c+o*f;if(n+u>e.byteLength)return{success:!1,ifd:null,nextIFD:null,requiredBufferSize:u};const h=n+u+4<=e.byteLength?P(new DataView(e,n+u,8===r?8:4),0,t,8===r):null,g=n+c,w=new Map;let p,d,I,T,E,y,m;for(let A=0;A<o;A++){d=new DataView(e,g+f*A,f),I=d.getUint16(0,t),E=d.getUint16(2,t),T=s.getTagName(I,i);const n=[];2===r?(y=d.getUint16(4,t),m=d.getUint16(6,t)):4===r?(y=d.getUint32(4,t),m=d.getUint32(8,t)):8===r&&(y=P(d,4,t,!0),m=P(d,12,t,!0),n.push(d.getUint32(12,t)),n.push(d.getUint32(16,t))),p={id:I,type:E,valueCount:y,valueOffset:m,valueOffsets:n,values:null},x(e,t,p,a,!1,r),w.set(T,p)}return{success:!0,ifd:w,nextIFD:h,requiredBufferSize:u}}const E=(e,t)=>a(e,{inputOffset:t}).pixels[0];async function y(e,a,s,o,f){const c=r===a,g=I(s,"BITSPERSAMPLE"),w=u(I(s,"SAMPLEFORMAT")??1,g),p=I(s,"COMPRESSION")??1,d=h(w);let T,y,m,A,S,M,x;if(34887===p)return await n(),E(e,o);if(1===p)m=e.slice(o,o+f),A=new Uint8Array(m);else if(8===p||32946===p)A=new Uint8Array(e,o,f),M=new l(A),x=M.getBytes(),m=new ArrayBuffer(x.length),A=new Uint8Array(m),A.set(x);else if(6===p){A=new Uint8Array(e,o,f);const n=new t;n.parse(A);const a=n.getData(n.width,n.height,!0);m=new ArrayBuffer(a.length),A=new Uint8Array(m),A.set(a)}else if(7===p){const n=s.get("JPEGTABLES").values,a=n.length-2;A=new Uint8Array(a+f-2);for(let e=0;e<a;e++)A[e]=n[e];const i=new Uint8Array(e,o+2,f-2);for(let e=0;e<i.length;e++)A[a+e]=i[e];const r=new t;r.parse(A);const l=r.getData(r.width,r.height,!0);m=new ArrayBuffer(l.length),A=new Uint8Array(m),A.set(l)}else 5===p&&(A=i(e,o,f,a),m=A.buffer);if("u8"===w||"s8"===w||c)y=new d(m);else{switch(m=new ArrayBuffer(A.length),S=new Uint8Array(m),w){case"u16":case"s16":for(T=0;T<A.length;T+=2)S[T]=A[T+1],S[T+1]=A[T];break;case"u32":case"s32":case"f32":for(T=0;T<A.length;T+=4)S[T]=A[T+3],S[T+1]=A[T+2],S[T+2]=A[T+1],S[T+3]=A[T]}y=new d(m)}return y}async function m(e,t,n){const a=p(n,"TILEOFFSETS");if(void 0===a)return null;const i=p(n,"TILEBYTECOUNTS"),{width:s,height:r,pixelType:l,tileWidth:o,tileHeight:f}=b([n]),c=O(n,t),u=t.planes,g=s*r,w=I(n,"BITSPERSAMPLE"),d=34887===(I(n,"COMPRESSION")??1),T=h(l),E=[];for(let h=0;h<u;h++)E.push(new T(g));let m,A,S,M,x,D,U,L,P,N,k,G,R;const C=Math.ceil(s/o);if(w%8==0)if(d&&c&&u>1){const l=Math.round(a.length/u);for(m=0;m<l;m++){D=Math.floor(m/C)*f,U=m%C*o,L=D*s+U;for(let l=0;l<u;l++){const c=m*u+l;if(0!==i[c])for(S=await y(e,t.littleEndian,n,a[c],i[c]),N=0,P=L,G=Math.min(o,s-U),k=Math.min(f,r-D),R=E[l],M=0;M<k;M++)for(P=L+M*s,N=M*o,x=0;x<G;x++,P++,N++)R[P]=S[N]}}}else for(m=0;m<a.length;m++)if(0!==i[m])for(D=Math.floor(m/C)*f,U=m%C*o,L=D*s+U,S=await y(e,t.littleEndian,n,a[m],i[m]),N=0,P=L,G=Math.min(o,s-U),k=Math.min(f,r-D),A=0;A<u;A++)if(R=E[A],c||d)for(M=0;M<k;M++)for(P=L+M*s,N=o*f*A+M*o,x=0;x<G;x++,P++,N++)R[P]=S[N];else for(M=0;M<k;M++)for(P=L+M*s,N=M*o*u+A,x=0;x<G;x++,P++,N+=u)R[P]=S[N];return{width:s,height:r,pixelType:l,pixels:E}}const A=(e,n,a)=>{const s=r===n.littleEndian,o=p(a,"STRIPOFFSETS");if(void 0===o)return null;const{width:f,height:c,pixelType:u}=b([a]),g=n.planes,w=f*c,d=I(a,"BITSPERSAMPLE"),T=h(u),E=new T(w*g),y=p(a,"STRIPBYTECOUNTS"),m=I(a,"ROWSPERSTRIP"),A=I(a,"COMPRESSION")??1;let S,M,x,O,D,U,L,P,N,k,G,R=m;if(d%8==0)for(S=0;S<o.length;S++){if(D=S*(m*f)*g,R=(S+1)*m>c?c-S*m:m,"u8"===u||"s8"===u||s){if(8===A||32946===A)L=new Uint8Array(e,o[S],y[S]),k=new l(L),G=k.getBytes(),U=new ArrayBuffer(G.length),L=new Uint8Array(U),L.set(G),L.length!==R*f*g*d/8&&console.log("strip byte counts is different than expected");else if(6===A){L=new Uint8Array(e,o[S],y[S]);const n=new t;n.parse(L);const a=n.getData(n.width,n.height,!0);U=new ArrayBuffer(a.length),L=new Uint8Array(U),L.set(a)}else 5===A?(L=i(e,o[S],y[S],n.littleEndian),U=L.buffer):1===A&&(y[S]!==R*f*g*d/8&&console.log("strip byte counts is different than expected"),U=e.slice(o[S],o[S]+y[S]));O=new T(U)}else{switch(6===A||8===A||32946===A?(L=new Uint8Array(e,o[S],y[S]),k=new l(L),L=k.getBytes(),U=new ArrayBuffer(L.length),P=new Uint8Array(U),L.length!==R*f*g*d/8&&console.log("strip byte counts is different than expected")):1===A&&(y[S]!==R*f*g*d/8&&console.log("strip byte counts is different than expected"),U=new ArrayBuffer(y[S]),L=new Uint8Array(e,o[S],y[S]),P=new Uint8Array(U)),u){case"u16":case"s16":for(x=0;x<L.length;x+=2)P[x]=L[x+1],P[x+1]=L[x];break;case"u32":case"s32":case"f32":for(x=0;x<L.length;x+=4)P[x]=L[x+3],P[x+1]=L[x+2],P[x+2]=L[x+1],P[x+3]=L[x]}O=new T(U)}E.set(O,D)}const C=[];if(1===g)C.push(E);else for(S=0;S<g;S++){for(N=new T(w),M=0;M<w;M++)N[M]=E[M*g+S];C.push(N)}return{width:f,height:c,pixelType:u,pixels:C}},S=(e,t,n)=>{if(!(e&&e.length>0&&t&&n))return null;let a,i,s;const r=e[0].length,l=e.length,o=new Uint8Array(r);for(let f=0;f<l;f++)if(a=e[f],i=t[f],s=n[f],0===f)for(let e=0;e<r;e++)o[e]=a[e]<i||a[e]>s?0:1;else for(let e=0;e<r;e++)o[e]&&(o[e]=a[e]<i||a[e]>s?0:1);return o},M=e=>{if(!e)return null;const t=e.match(/<Item(.*?)Item>/gi);if(!t||0===t.length)return null;const n=new Map;let a,i,s,r,l;for(let I=0;I<t.length;I++)a=t[I],i=a.slice("<Item ".length,a.indexOf(">")),r=a.indexOf("sample="),r>-1&&(l=a.slice(r+'sample="'.length,a.indexOf('"',r+'sample="'.length))),r=a.indexOf("name="),r>-1&&(i=a.slice(r+'name="'.length,a.indexOf('"',r+'name="'.length))),i&&(s=a.slice(a.indexOf(">")+1,a.indexOf("</Item>")).trim(),null!=l?n.has(i)?n.get(i)[l]=s:n.set(i,[s]):n.set(i,s)),l=null;const o=n.get("STATISTICS_MINIMUM"),f=n.get("STATISTICS_MAXIMUM"),c=n.get("STATISTICS_MEAN"),u=n.get("STATISTICS_STDDEV");let h=null;if(o&&f){h=[];for(let e=0;e<o.length;e++)h.push({min:parseFloat(o[e]),max:parseFloat(f[e]),avg:c&&parseFloat(c[e]),stddev:u&&parseFloat(u[e])})}const g=n.get("BandName"),w=n.get("WavelengthMin"),p=n.get("WavelengthMax");let d=null;if(g){d=[];for(let e=0;e<g.length;e++)d.push({BandName:g[e],WavelengthMin:w&&parseFloat(w[e]),WavelengthMax:p&&parseFloat(p[e])})}return{statistics:h,bandProperties:d,dataType:n.get("DataType"),rawMetadata:n}};function x(e,t,n,a=0,i=!1,s=4){if(n.values)return!0;const r=n.type,l=n.valueCount;let c=n.valueOffset,u=[];const h=o[r],g=8*h,w=l*h,p=l*o[r]*8;let d,I;const T=8===s?64:32,E=n.valueOffsets;if(p>T){if(w>(i?e.byteLength:e?e.byteLength-c+a:0))return n.offlineOffsetSize=[c,w],n.values=null,!1}if(p<=T){if(!t)if(T<=32)c>>>=32-p;else{const e=E?.length?E[0]:c>>>0,t=E?.length?E[1]:Math.round((c-e)/f);p<=32?(c=e>>>32-p,E[0]=c):(c=e*2**(32-p)+(t>>>32-p),E[0]=e,E[1]=t>>>32-p)}if(1===l&&g===T)u=[c];else if(64===T){const e=E?.length?E[0]:c>>>0,t=E?.length?E[1]:Math.round((c-e)/f);let n=e,a=32;for(I=1;I<=l;I++){const e=32-g*I%32;if(a<g){const i=n<<e>>>32-a,s=t<<32-a>>>32-a;n=t,u.push(i+s*2**(g-a)),a-=32-(g-a)}else u.push(n<<e>>>32-g),a-=g;0===a&&(a=32,n=t)}}else for(I=1;I<=l;I++){const e=32-g*I;u.push(c<<e>>>32-g)}}else{c-=a,i&&(c=0);for(let n=c;n<c+w;n+=h){switch(r){case 1:case 2:case 7:d=new DataView(e,n,1).getUint8(0);break;case 3:d=new DataView(e,n,2).getUint16(0,t);break;case 4:case 13:d=new DataView(e,n,4).getUint32(0,t);break;case 5:d=new DataView(e,n,4).getUint32(0,t)/new DataView(e,n+4,4).getUint32(0,t);break;case 6:d=new DataView(e,n,1).getInt8(0);break;case 8:d=new DataView(e,n,2).getInt16(0,t);break;case 9:d=new DataView(e,n,4).getInt32(0,t);break;case 10:d=new DataView(e,n,4).getInt32(0,t)/new DataView(e,n+4,4).getInt32(0,t);break;case 11:d=new DataView(e,n,4).getFloat32(0,t);break;case 12:d=new DataView(e,n,8).getFloat64(0,t);break;case 16:case 18:d=U(new DataView(e,n,8),0,t);break;case 17:d=L(new DataView(e,n,8),0,t);break;default:d=null}u.push(d)}}if(2===r){let e="";const t=u;for(u=[],I=0;I<t.length;I++)0===t[I]&&""!==e?(u.push(e),e=""):e+=String.fromCharCode(t[I]);""===e&&0!==u.length||u.push(e)}return n.values=u,!0}function b(e){const t=e[0],n=I(t,"TILEWIDTH"),a=I(t,"TILELENGTH"),i=I(t,"IMAGEWIDTH"),s=I(t,"IMAGELENGTH"),r=I(t,"BITSPERSAMPLE"),l=I(t,"SAMPLESPERPIXEL"),o=I(t,"SAMPLEFORMAT")??1,f=u(o,r),h=O(t),T=w(t,"GDAL_NODATA");let E;T?.length&&(E=T.map((e=>parseFloat(e))),E.some((e=>isNaN(e)))&&(E=null));const y=I(t,"COMPRESSION")??1;let m;switch(y){case 1:m="NONE";break;case 2:case 3:case 4:case 32771:m="CCITT";break;case 5:m="LZW";break;case 6:case 7:m="JPEG";break;case 32773:m="PACKBITS";break;case 8:case 32946:m="DEFLATE";break;case 34712:m="JPEG2000";break;case 34887:m="LERC";break;default:m=String(y)}let A=!0,S="";c.has(y)||(A=!1,S+="unsupported tag compression "+y),o>3&&(A=!1,S+="unsupported tag sampleFormat "+o),r%8!=0&&(A=!1,S+="unsupported tag bitsPerSample "+r);const x=d(t,"GEOASCIIPARAMS");let b;if(x){const e=x.split("|").find((e=>e.includes("ESRI PE String = "))),t=e?e.replace("ESRI PE String = ",""):"";b=t.startsWith("COMPD_CS")||t.startsWith("PROJCS")||t.startsWith("GEOGCS")?{wkid:null,wkt:t}:null}const D=p(t,"GEOTIEPOINTS"),U=p(t,"GEOPIXELSCALE"),L=p(t,"GEOTRANSMATRIX"),P=t.has("GEOKEYDIRECTORY")?t.get("GEOKEYDIRECTORY").data:null;let N,k,R=!1;if(P){R=2===I(P,"GTRasterTypeGeoKey");const e=I(P,"GTModelTypeGeoKey");if(2===e){const e=I(P,"GeographicTypeGeoKey");e>=1024&&e<=32766&&(b={wkid:e})}else if(1===e){const e=I(P,"ProjectedCSTypeGeoKey");e>=1024&&e<=32766&&(b={wkid:e})}}if(U&&D&&D.length>=6?(N=[U[0],0,D[3]-D[0]*U[0],0,-Math.abs(U[1]),D[4]-D[1]*U[1]],R&&(N[2]-=.5*N[0]+.5*N[1],N[5]-=.5*N[3]+.5*N[4])):L&&16===L.length&&(N=R?[L[0],L[1],L[3]-.5*L[0],L[4],L[5],L[7]-.5*L[5]]:[L[0],L[1],L[3],L[4],L[5],L[7]]),N){const e=[{x:0,y:s},{x:0,y:0},{x:i,y:s},{x:i,y:0}];let t,n=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let i=0;i<e.length;i++)t=g(e[i],N),n=t.x>n?n:t.x,r=t.x<r?r:t.x,a=t.y>a?a:t.y,l=t.y<l?l:t.y;k={xmin:n,xmax:r,ymin:a,ymax:l,spatialReference:b}}else k={xmin:-.5,ymin:.5-s,xmax:i-.5,ymax:.5,spatialReference:b};const C=e.filter((e=>1===d(e,"NEWSUBFILETYPE")));let F,v,B,V,W;if(C.length>0){F=Math.round(Math.log(i/I(C[0],"IMAGEWIDTH"))/Math.LN2);const e=C[C.length-1];v=Math.round(Math.log(i/I(e,"IMAGEWIDTH"))/Math.LN2),B=I(e,"TILEWIDTH"),V=I(e,"TILELENGTH")}B=v>0?B||n:null,V=v>0?V||a:null,n&&(W=[{maxCol:Math.ceil(i/n)-1,maxRow:Math.ceil(s/a)-1,minRow:0,minCol:0}],C.forEach((e=>{W.push({maxCol:Math.ceil(I(e,"IMAGEWIDTH")/I(e,"TILEWIDTH"))-1,maxRow:Math.ceil(I(e,"IMAGELENGTH")/I(e,"TILELENGTH"))-1,minRow:0,minCol:0})})));const H=d(e[0],"GDAL_METADATA"),Y=M(H);return S+=" "+G({width:i,height:s,tileWidth:n,tileHeight:a,planes:l,ifds:e}),{width:i,height:s,tileWidth:n,tileHeight:a,planes:l,isBSQ:h,pixelType:f,compression:m,noData:E,isSupported:A,message:S,extent:k,affine:U?null:N,firstPyramidLevel:F,maximumPyramidLevel:v,pyramidBlockWidth:B,pyramidBlockHeight:V,tileBoundary:W,metadata:Y}}function O(e,t){const n=w(e,"PLANARCONFIGURATION");return n?2===n[0]:!!t&&t.isBSQ}function D(e){const{littleEndian:t,isBigTiff:n,firstIFD:a}=N(e);let i=a;const r=[];do{const a=k(e,t,i,0,s.TIFF_TAGS,n?8:4);if(!a.success)break;r.push(a.ifd),i=a.nextIFD}while(i>0);return{...b(r),littleEndian:t,isBigTiff:n,ifds:r}}function U(e,t,n){const a=e.getUint32(t,n),i=e.getUint32(t+4,n);return n?i*f+a:a*f+i}function L(e,t,n){let a=n?e.getInt32(t,n):e.getUint32(t,n),i=n?e.getUint32(t+4,n):e.getInt32(t+4,n);const s=(n?a:i)>=0?1:-1;n?a*=s:i*=s;return s*(n?i*f+a:a*f+i)}function P(e,t,n,a){return a?U(e,t,n):e.getUint32(t,n)}function N(e){const t=new DataView(e,0,16),n=t.getUint16(0,!1);let a=null;if(18761===n)a=!0;else{if(19789!==n)throw"unexpected endianess byte";a=!1}const i=t.getUint16(2,a);if(42!==i&&43!==i)throw"unexpected tiff identifier";let s=4;const r=43===i;if(r){const e=t.getUint16(s,a);if(s+=2,8!==e)throw"unsupported bigtiff version";if(0!==t.getUint16(s,a))throw"unsupported bigtiff version";s+=2}return{littleEndian:a,isBigTiff:r,firstIFD:P(t,s,a,r)}}function k(t,n,a,i=0,r=s.TIFF_TAGS,l=4){const o=T(t,n,a,i,r,l);let f;const c=o.ifd;if(c){if(s.ifdTags.forEach(((e,a)=>{c.has(a)&&(f=c.get(a),f.data=T(t,n,f.valueOffset-i,i,e).ifd)})),c.has("GEOKEYDIRECTORY")){f=c.get("GEOKEYDIRECTORY");const e=f.values;if(e&&e.length>4){const a=e[0]+"."+e[1]+"."+e[2];f.data=T(t,n,f.valueOffset+6-i,i,s.GEO_KEYS,2).ifd,f.data&&f.data.set("GEOTIFFVersion",{id:0,type:2,valueCount:1,valueOffset:null,values:[a]})}}if(c.has("XMP")){f=c.get("XMP");const t=f.values;"number"==typeof t[0]&&7===f.type&&(f.values=[e(new Uint8Array(t))])}}return o}function G(e){const{width:t,height:n,tileHeight:a,tileWidth:i}=e,s=e.planes,r=i?i*a:t*n,l=I(e.ifds[0],"BITSPERSAMPLE");let o="";return r*s>2**30/(l>8?l/8:1)&&(o=i?"tiled tiff exceeding 1 gigabits per tile is not supported":"scanline tiff exceeding 1 gigabits is not supported"),o}async function R(e,t){const{headerInfo:n,ifd:a,offsets:i,sizes:s}=t,r=[];for(let h=0;h<i.length;h++){const t=await y(e,n.littleEndian,a,i[h],s[h]||e.byteLength);r.push(t)}const l=O(a,n),{pixelType:o,planes:f}=n,c=h(o),u=I(a,"TILEWIDTH"),g=I(a,"TILELENGTH"),w=I(a,"COMPRESSION")??1,p=u*g;let d;const T=[];let E=r[0];const m=34887===w;for(let h=0;h<f;h++){if(d=new c(p),l&&m){if(E=r[h],E.length)for(let e=0;e<p;e++)d[e]=E[h][e+h]}else if(E.length)if(l||m&&!l)d=E.slice(p*h,p*(h+1));else for(let e=0;e<p;e++)d[e]=E[e*f+h];T.push(d)}const A=n.noData?n.noData[0]:null,M=n.metadata?n.metadata.statistics:null,x=M?M.map((e=>e.min)):null,b=M?M.map((e=>e.max)):null;let D,U;if(null!=A)if(D=new Uint8Array(p),Math.abs(A)>1e24)for(U=0;U<p;U++)Math.abs((T[0][U]-A)/A)<1e-6?D[U]=0:D[U]=1;else for(U=0;U<p;U++)T[0][U]===A?D[U]=0:D[U]=1;else x&&b&&t.applyMinMaxConstraint&&(D=S(T,x,b));return{pixelType:o,width:u,height:g,pixels:T,mask:D,noDataValue:A}}async function C(e,t=0,n){n=n||D(e);const{ifds:a,noData:i}=n;if(0===a.length)throw"no valid image file directory";const s=G(n);if(s)throw s;let r,l;const o=-1===t?a[a.length-1]:a[t],f=i?i[0]:null;if(l=n.tileWidth?await m(e,n,o):await A(e,n,o),null!==f){if(l.mask=new Uint8Array(l.width*l.height),Math.abs(f)>1e24)for(r=0;r<l.width*l.height;r++)Math.abs((l.pixels[0][r]-f)/f)<1e-6?l.mask[r]=0:l.mask[r]=1;else for(r=0;r<l.width*l.height;r++)l.pixels[0][r]===f?l.mask[r]=0:l.mask[r]=1;l.noDataValue=f}return l}export{C as decode,R as decodeTileOrStrip,b as getImageInfo,O as isBSQConfig,x as parseFieldValues,D as parseHeader,k as parseIFD,N as parseSignature};
|
|
5
|
+
import{bytesToUTF8 as e}from"../rasterDatasets/byteStreamUtils.js";import{J as t}from"../../../chunks/Jpg.js";import{load as n,decode as a}from"./Lerc.js";import{decode as i}from"./Lzw.js";import s from"./TiffTags.js";import{isPlatformLittleEndian as r}from"./utils.js";import{Z as l}from"../../../chunks/Zlib.js";const o=[0,1,1,2,4,8,1,1,2,4,8,4,8,-1,-1,-1,8,8,8],f=4294967296,c=new Set([1,5,6,7,8,34712,34887]);function u(e,t){let n="unknown";return 3===e?n="f32":1===e?1===t?n="u1":2===t?n="u2":4===t?n="u4":t<=8?n="u8":t<=16?n="u16":t<=32&&(n="u32"):2===e&&(t<=8?n="s8":t<=16?n="s16":t<=32&&(n="s32")),n}function h(e){let t=null;switch(e?e.toLowerCase():"f32"){case"u1":case"u2":case"u4":case"u8":t=Uint8Array;break;case"u16":t=Uint16Array;break;case"u32":t=Uint32Array;break;case"s8":t=Int8Array;break;case"s16":t=Int16Array;break;case"s32":t=Int32Array;break;default:t=Float32Array}return t}function g(e,t){return{x:t[0]*e.x+t[1]*e.y+t[2],y:t[3]*e.x+t[4]*e.y+t[5]}}function w(e,t){return e.get(t)?.values}function p(e,t){return e.get(t)?.values}function d(e,t){return e.get(t)?.values[0]}function I(e,t){return e.get(t)?.values[0]}function T(e,t,n,a=0,i=s.TIFF_TAGS,r=4){const l=8===r,o=l?U(new DataView(e,n,8),0,t):new DataView(e,n,2).getUint16(0,t),f=4+2*r,c=l?8:2,u=c+o*f;if(n+u>e.byteLength)return{success:!1,ifd:null,nextIFD:null,requiredBufferSize:u};const h=n+u+4<=e.byteLength?P(new DataView(e,n+u,8===r?8:4),0,t,8===r):null,g=n+c,w=new Map;let p,d,I,T,E,y,m;for(let A=0;A<o;A++){d=new DataView(e,g+f*A,f),I=d.getUint16(0,t),E=d.getUint16(2,t),T=s.getTagName(I,i);const n=[];2===r?(y=d.getUint16(4,t),m=d.getUint16(6,t)):4===r?(y=d.getUint32(4,t),m=d.getUint32(8,t)):8===r&&(y=P(d,4,t,!0),m=P(d,12,t,!0),n.push(d.getUint32(12,t)),n.push(d.getUint32(16,t))),p={id:I,type:E,valueCount:y,valueOffset:m,valueOffsets:n,values:null},x(e,t,p,a,!1,r),w.set(T,p)}return{success:!0,ifd:w,nextIFD:h,requiredBufferSize:u}}const E=(e,t)=>a(e,{inputOffset:t}).pixels[0];async function y(e,a,s,o,f){const c=r===a,g=I(s,"BITSPERSAMPLE"),w=u(I(s,"SAMPLEFORMAT")??1,g),p=I(s,"COMPRESSION")??1,d=h(w);let T,y,m,A,S,M,x;if(34887===p)return await n(),E(e,o);if(1===p)m=e.slice(o,o+f),A=new Uint8Array(m);else if(8===p||32946===p)A=new Uint8Array(e,o,f),M=new l(A),x=M.getBytes(),m=new ArrayBuffer(x.length),A=new Uint8Array(m),A.set(x);else if(6===p){A=new Uint8Array(e,o,f);const n=new t;n.parse(A);const a=n.getData(n.width,n.height,!0);m=new ArrayBuffer(a.length),A=new Uint8Array(m),A.set(a)}else if(7===p){const n=s.get("JPEGTABLES").values,a=n.length-2;A=new Uint8Array(a+f-2);for(let e=0;e<a;e++)A[e]=n[e];const i=new Uint8Array(e,o+2,f-2);for(let e=0;e<i.length;e++)A[a+e]=i[e];const r=new t;r.parse(A);const l=r.getData(r.width,r.height,!0);m=new ArrayBuffer(l.length),A=new Uint8Array(m),A.set(l)}else 5===p&&(A=i(e,o,f,a),m=A.buffer);if("u8"===w||"s8"===w||c)y=new d(m);else{switch(m=new ArrayBuffer(A.length),S=new Uint8Array(m),w){case"u16":case"s16":for(T=0;T<A.length;T+=2)S[T]=A[T+1],S[T+1]=A[T];break;case"u32":case"s32":case"f32":for(T=0;T<A.length;T+=4)S[T]=A[T+3],S[T+1]=A[T+2],S[T+2]=A[T+1],S[T+3]=A[T]}y=new d(m)}return y}async function m(e,t,n){const a=p(n,"TILEOFFSETS");if(void 0===a)return null;const i=p(n,"TILEBYTECOUNTS"),{width:s,height:r,pixelType:l,tileWidth:o,tileHeight:f}=b([n]),c=D(n,t),u=t.planes,g=s*r,w=I(n,"BITSPERSAMPLE"),d=34887===(I(n,"COMPRESSION")??1),T=h(l),E=[];for(let h=0;h<u;h++)E.push(new T(g));let m,A,S,M,x,O,U,L,P,N,k,G,R;const C=Math.ceil(s/o);if(w%8==0)if(d&&c&&u>1){const l=Math.round(a.length/u);for(m=0;m<l;m++){O=Math.floor(m/C)*f,U=m%C*o,L=O*s+U;for(let l=0;l<u;l++){const c=m*u+l;if(0!==i[c])for(S=await y(e,t.littleEndian,n,a[c],i[c]),N=0,P=L,G=Math.min(o,s-U),k=Math.min(f,r-O),R=E[l],M=0;M<k;M++)for(P=L+M*s,N=M*o,x=0;x<G;x++,P++,N++)R[P]=S[N]}}}else for(m=0;m<a.length;m++)if(0!==i[m])for(O=Math.floor(m/C)*f,U=m%C*o,L=O*s+U,S=await y(e,t.littleEndian,n,a[m],i[m]),N=0,P=L,G=Math.min(o,s-U),k=Math.min(f,r-O),A=0;A<u;A++)if(R=E[A],c||d)for(M=0;M<k;M++)for(P=L+M*s,N=o*f*A+M*o,x=0;x<G;x++,P++,N++)R[P]=S[N];else for(M=0;M<k;M++)for(P=L+M*s,N=M*o*u+A,x=0;x<G;x++,P++,N+=u)R[P]=S[N];return{width:s,height:r,pixelType:l,pixels:E}}const A=(e,n,a)=>{const s=r===n.littleEndian,o=p(a,"STRIPOFFSETS");if(void 0===o)return null;const{width:f,height:c,pixelType:u}=b([a]),g=n.planes,w=f*c,d=I(a,"BITSPERSAMPLE"),T=h(u),E=new T(w*g),y=p(a,"STRIPBYTECOUNTS"),m=I(a,"ROWSPERSTRIP"),A=I(a,"COMPRESSION")??1;let S,M,x,D,O,U,L,P,N,k,G,R=m;if(d%8==0)for(S=0;S<o.length;S++){if(O=S*(m*f)*g,R=(S+1)*m>c?c-S*m:m,"u8"===u||"s8"===u||s){if(8===A||32946===A)L=new Uint8Array(e,o[S],y[S]),k=new l(L),G=k.getBytes(),U=new ArrayBuffer(G.length),L=new Uint8Array(U),L.set(G),L.length!==R*f*g*d/8&&console.log("strip byte counts is different than expected");else if(6===A){L=new Uint8Array(e,o[S],y[S]);const n=new t;n.parse(L);const a=n.getData(n.width,n.height,!0);U=new ArrayBuffer(a.length),L=new Uint8Array(U),L.set(a)}else 5===A?(L=i(e,o[S],y[S],n.littleEndian),U=L.buffer):1===A&&(y[S]!==R*f*g*d/8&&console.log("strip byte counts is different than expected"),U=e.slice(o[S],o[S]+y[S]));D=new T(U)}else{switch(6===A||8===A||32946===A?(L=new Uint8Array(e,o[S],y[S]),k=new l(L),L=k.getBytes(),U=new ArrayBuffer(L.length),P=new Uint8Array(U),L.length!==R*f*g*d/8&&console.log("strip byte counts is different than expected")):1===A&&(y[S]!==R*f*g*d/8&&console.log("strip byte counts is different than expected"),U=new ArrayBuffer(y[S]),L=new Uint8Array(e,o[S],y[S]),P=new Uint8Array(U)),u){case"u16":case"s16":for(x=0;x<L.length;x+=2)P[x]=L[x+1],P[x+1]=L[x];break;case"u32":case"s32":case"f32":for(x=0;x<L.length;x+=4)P[x]=L[x+3],P[x+1]=L[x+2],P[x+2]=L[x+1],P[x+3]=L[x]}D=new T(U)}E.set(D,O)}const C=[];if(1===g)C.push(E);else for(S=0;S<g;S++){for(N=new T(w),M=0;M<w;M++)N[M]=E[M*g+S];C.push(N)}return{width:f,height:c,pixelType:u,pixels:C}},S=(e,t,n)=>{if(!(e&&e.length>0&&t&&n))return null;let a,i,s;const r=e[0].length,l=e.length,o=new Uint8Array(r);for(let f=0;f<l;f++)if(a=e[f],i=t[f],s=n[f],0===f)for(let e=0;e<r;e++)o[e]=a[e]<i||a[e]>s?0:1;else for(let e=0;e<r;e++)o[e]&&(o[e]=a[e]<i||a[e]>s?0:1);return o},M=e=>{if(!e)return null;const t=e.match(/<Item(.*?)Item>/gi);if(!t||0===t.length)return null;const n=new Map;let a,i,s,r,l;for(let I=0;I<t.length;I++)a=t[I],i=a.slice("<Item ".length,a.indexOf(">")),r=a.indexOf("sample="),r>-1&&(l=a.slice(r+'sample="'.length,a.indexOf('"',r+'sample="'.length))),r=a.indexOf("name="),r>-1&&(i=a.slice(r+'name="'.length,a.indexOf('"',r+'name="'.length))),i&&(s=a.slice(a.indexOf(">")+1,a.indexOf("</Item>")).trim(),null!=l?n.has(i)?n.get(i)[l]=s:n.set(i,[s]):n.set(i,s)),l=null;const o=n.get("STATISTICS_MINIMUM"),f=n.get("STATISTICS_MAXIMUM"),c=n.get("STATISTICS_MEAN"),u=n.get("STATISTICS_STDDEV");let h=null;if(o&&f){h=[];for(let e=0;e<o.length;e++)h.push({min:parseFloat(o[e]),max:parseFloat(f[e]),avg:c&&parseFloat(c[e]),stddev:u&&parseFloat(u[e])})}const g=n.get("BandName"),w=n.get("WavelengthMin"),p=n.get("WavelengthMax");let d=null;if(g){d=[];for(let e=0;e<g.length;e++)d.push({BandName:g[e],WavelengthMin:w&&parseFloat(w[e]),WavelengthMax:p&&parseFloat(p[e])})}return{statistics:h,bandProperties:d,dataType:n.get("DataType"),rawMetadata:n}};function x(e,t,n,a=0,i=!1,s=4){if(n.values)return!0;const r=n.type,l=n.valueCount;let c=n.valueOffset,u=[];const h=o[r],g=8*h,w=l*h,p=l*o[r]*8;let d,I;const T=8===s?64:32,E=n.valueOffsets;if(p>T){if(w>(i?e.byteLength:e?e.byteLength-c+a:0))return n.offlineOffsetSize=[c,w],n.values=null,!1}if(p<=T){if(!t)if(T<=32)c>>>=32-p;else{const e=E?.length?E[0]:c>>>0,t=E?.length?E[1]:Math.round((c-e)/f);p<=32?(c=e>>>32-p,E[0]=c):(c=e*2**(32-p)+(t>>>32-p),E[0]=e,E[1]=t>>>32-p)}if(1===l&&g===T)u=[c];else if(64===T){const e=E?.length?E[0]:c>>>0,t=E?.length?E[1]:Math.round((c-e)/f);let n=e,a=32;for(I=1;I<=l;I++){const e=32-g*I%32;if(a<g){const i=n<<e>>>32-a,s=t<<32-a>>>32-a;n=t,u.push(i+s*2**(g-a)),a-=32-(g-a)}else u.push(n<<e>>>32-g),a-=g;0===a&&(a=32,n=t)}}else for(I=1;I<=l;I++){const e=32-g*I;u.push(c<<e>>>32-g)}}else{c-=a,i&&(c=0);for(let n=c;n<c+w;n+=h){switch(r){case 1:case 2:case 7:d=new DataView(e,n,1).getUint8(0);break;case 3:d=new DataView(e,n,2).getUint16(0,t);break;case 4:case 13:d=new DataView(e,n,4).getUint32(0,t);break;case 5:d=new DataView(e,n,4).getUint32(0,t)/new DataView(e,n+4,4).getUint32(0,t);break;case 6:d=new DataView(e,n,1).getInt8(0);break;case 8:d=new DataView(e,n,2).getInt16(0,t);break;case 9:d=new DataView(e,n,4).getInt32(0,t);break;case 10:d=new DataView(e,n,4).getInt32(0,t)/new DataView(e,n+4,4).getInt32(0,t);break;case 11:d=new DataView(e,n,4).getFloat32(0,t);break;case 12:d=new DataView(e,n,8).getFloat64(0,t);break;case 16:case 18:d=U(new DataView(e,n,8),0,t);break;case 17:d=L(new DataView(e,n,8),0,t);break;default:d=null}u.push(d)}}if(2===r){let e="";const t=u;for(u=[],I=0;I<t.length;I++)0===t[I]&&""!==e?(u.push(e),e=""):e+=String.fromCharCode(t[I]);""===e&&0!==u.length||u.push(e)}return n.values=u,!0}function b(e){const t=e[0],n=I(t,"TILEWIDTH"),a=I(t,"TILELENGTH"),i=I(t,"IMAGEWIDTH"),s=I(t,"IMAGELENGTH"),r=I(t,"BITSPERSAMPLE"),l=I(t,"SAMPLESPERPIXEL"),o=I(t,"SAMPLEFORMAT")??1,f=u(o,r),h=D(t),T=w(t,"GDAL_NODATA");let E;T?.length&&(E=T.map((e=>parseFloat(e))),E.some((e=>isNaN(e)))&&(E=null));const y=I(t,"COMPRESSION")??1;let m;switch(y){case 1:m="NONE";break;case 2:case 3:case 4:case 32771:m="CCITT";break;case 5:m="LZW";break;case 6:case 7:m="JPEG";break;case 32773:m="PACKBITS";break;case 8:case 32946:m="DEFLATE";break;case 34712:m="JPEG2000";break;case 34887:m="LERC";break;default:m=String(y)}let A=!0,S="";c.has(y)||(A=!1,S+="unsupported tag compression "+y),o>3&&(A=!1,S+="unsupported tag sampleFormat "+o),r%8!=0&&(A=!1,S+="unsupported tag bitsPerSample "+r);const x=d(t,"GEOASCIIPARAMS");let b;if(x){const e=x.split("|").find((e=>e.includes("ESRI PE String = "))),t=e?e.replace("ESRI PE String = ",""):"";b=t.startsWith("COMPD_CS")||t.startsWith("PROJCS")||t.startsWith("GEOGCS")?{wkid:null,wkt:t}:null}const O=p(t,"GEOTIEPOINTS"),U=p(t,"GEOPIXELSCALE"),L=p(t,"GEOTRANSMATRIX"),P=t.has("GEOKEYDIRECTORY")?t.get("GEOKEYDIRECTORY").data:null;let N,k,R=!1;if(P){R=2===I(P,"GTRasterTypeGeoKey");const e=I(P,"GTModelTypeGeoKey");if(2===e){const e=I(P,"GeographicTypeGeoKey");e>=1024&&e<=32766&&(b={wkid:e})}else if(1===e){const e=I(P,"ProjectedCSTypeGeoKey");e>=1024&&e<=32766&&(b={wkid:e})}}if(U&&O&&O.length>=6?(N=[U[0],0,O[3]-O[0]*U[0],0,-Math.abs(U[1]),O[4]-O[1]*U[1]],R&&(N[2]-=.5*N[0]+.5*N[1],N[5]-=.5*N[3]+.5*N[4])):L&&16===L.length&&(N=R?[L[0],L[1],L[3]-.5*L[0],L[4],L[5],L[7]-.5*L[5]]:[L[0],L[1],L[3],L[4],L[5],L[7]]),N){const e=[{x:0,y:s},{x:0,y:0},{x:i,y:s},{x:i,y:0}];let t,n=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let i=0;i<e.length;i++)t=g(e[i],N),n=t.x>n?n:t.x,r=t.x<r?r:t.x,a=t.y>a?a:t.y,l=t.y<l?l:t.y;k={xmin:n,xmax:r,ymin:a,ymax:l,spatialReference:b}}else k={xmin:-.5,ymin:.5-s,xmax:i-.5,ymax:.5,spatialReference:b};const C=e.filter((e=>1===d(e,"NEWSUBFILETYPE")));let v,F,B,V,W;if(C.length>0){v=Math.round(Math.log(i/I(C[0],"IMAGEWIDTH"))/Math.LN2);const e=C[C.length-1];F=Math.round(Math.log(i/I(e,"IMAGEWIDTH"))/Math.LN2),B=I(e,"TILEWIDTH"),V=I(e,"TILELENGTH")}B=F>0?B||n:null,V=F>0?V||a:null,n&&(W=[{maxCol:Math.ceil(i/n)-1,maxRow:Math.ceil(s/a)-1,minRow:0,minCol:0}],C.forEach((e=>{W.push({maxCol:Math.ceil(I(e,"IMAGEWIDTH")/I(e,"TILEWIDTH"))-1,maxRow:Math.ceil(I(e,"IMAGELENGTH")/I(e,"TILELENGTH"))-1,minRow:0,minCol:0})})));const H=d(e[0],"GDAL_METADATA"),Y=M(H);return S+=" "+G({width:i,height:s,tileWidth:n,tileHeight:a,planes:l,ifds:e}),{width:i,height:s,tileWidth:n,tileHeight:a,planes:l,isBSQ:h,pixelType:f,compression:m,noData:E,isSupported:A,message:S,extent:k,affine:U?null:N,firstPyramidLevel:v,maximumPyramidLevel:F,pyramidBlockWidth:B,pyramidBlockHeight:V,tileBoundary:W,metadata:Y}}function D(e,t){const n=w(e,"PLANARCONFIGURATION");return n?2===n[0]:!!t&&t.isBSQ}function O(e){const{littleEndian:t,isBigTiff:n,firstIFD:a}=N(e);let i=a;const r=[];do{const a=k(e,t,i,0,s.TIFF_TAGS,n?8:4);if(!a.success)break;r.push(a.ifd),i=a.nextIFD}while(i>0);return{...b(r),littleEndian:t,isBigTiff:n,ifds:r}}function U(e,t,n){const a=e.getUint32(t,n),i=e.getUint32(t+4,n);return n?i*f+a:a*f+i}function L(e,t,n){let a=n?e.getInt32(t,n):e.getUint32(t,n),i=n?e.getUint32(t+4,n):e.getInt32(t+4,n);const s=(n?a:i)>=0?1:-1;n?a*=s:i*=s;return s*(n?i*f+a:a*f+i)}function P(e,t,n,a){return a?U(e,t,n):e.getUint32(t,n)}function N(e){const t=new DataView(e,0,16),n=t.getUint16(0,!1);let a=null;if(18761===n)a=!0;else{if(19789!==n)throw"unexpected endianess byte";a=!1}const i=t.getUint16(2,a);if(42!==i&&43!==i)throw"unexpected tiff identifier";let s=4;const r=43===i;if(r){const e=t.getUint16(s,a);if(s+=2,8!==e)throw"unsupported bigtiff version";if(0!==t.getUint16(s,a))throw"unsupported bigtiff version";s+=2}return{littleEndian:a,isBigTiff:r,firstIFD:P(t,s,a,r)}}function k(t,n,a,i=0,r=s.TIFF_TAGS,l=4){const o=T(t,n,a,i,r,l);let f;const c=o.ifd;if(c){if(s.ifdTags.forEach(((e,a)=>{c.has(a)&&(f=c.get(a),f.data=T(t,n,f.valueOffset-i,i,e).ifd)})),c.has("GEOKEYDIRECTORY")){f=c.get("GEOKEYDIRECTORY");const e=f.values;if(e&&e.length>4){const a=e[0]+"."+e[1]+"."+e[2];f.data=T(t,n,f.valueOffset+6-i,i,s.GEO_KEYS,2).ifd,f.data&&f.data.set("GEOTIFFVersion",{id:0,type:2,valueCount:1,valueOffset:null,values:[a]})}}if(c.has("XMP")){f=c.get("XMP");const t=f.values;"number"==typeof t[0]&&7===f.type&&(f.values=[e(new Uint8Array(t))])}}return o}function G(e){const{width:t,height:n,tileHeight:a,tileWidth:i}=e,s=e.planes,r=i?i*a:t*n,l=I(e.ifds[0],"BITSPERSAMPLE");let o="";return r*s>2**30/(l>8?l/8:1)&&(o=i?"tiled tiff exceeding 1 gigabits per tile is not supported":"scanline tiff exceeding 1 gigabits is not supported"),o}async function R(e,t){const{headerInfo:n,ifd:a,offsets:i,sizes:s}=t,r=[];for(let h=0;h<i.length;h++){const t=await y(e,n.littleEndian,a,i[h],s[h]||e.byteLength);r.push(t)}const l=D(a,n),{pixelType:o,planes:f}=n,c=h(o),u=I(a,"TILEWIDTH"),g=I(a,"TILELENGTH"),w=I(a,"COMPRESSION")??1,p=u*g;let d;const T=[];let E=r[0];const m=34887===w;for(let h=0;h<f;h++){if(d=new c(p),l&&m){if(E=r[h],E.length)for(let e=0;e<p;e++)d[e]=E[h][e+h]}else if(E.length)if(l||m&&!l)d=E.slice(p*h,p*(h+1));else for(let e=0;e<p;e++)d[e]=E[e*f+h];T.push(d)}const A=n.noData?n.noData[0]:t.noDataValue,M=n.metadata?n.metadata.statistics:null,x=M?M.map((e=>e.min)):null,b=M?M.map((e=>e.max)):null;let O,U;if(null!=A)if(O=new Uint8Array(p),Math.abs(A)>1e24)for(U=0;U<p;U++)Math.abs((T[0][U]-A)/A)<1e-6?O[U]=0:O[U]=1;else for(U=0;U<p;U++)T[0][U]===A?O[U]=0:O[U]=1;else x&&b&&t.applyMinMaxConstraint&&(O=S(T,x,b));return{pixelType:o,width:u,height:g,pixels:T,mask:O,noDataValue:A}}async function C(e,t={}){const n=t.pyramidLevel||0,a=t.headerInfo||O(e),{ifds:i,noData:s}=a;if(0===i.length)throw"no valid image file directory";const r=G(a);if(r)throw r;let l,o;const f=-1===n?i[i.length-1]:i[n],c=s?s[0]:t.noDataValue;if(o=a.tileWidth?await m(e,a,f):await A(e,a,f),null!==c){if(o.mask=new Uint8Array(o.width*o.height),Math.abs(c)>1e24)for(l=0;l<o.width*o.height;l++)Math.abs((o.pixels[0][l]-c)/c)<1e-6?o.mask[l]=0:o.mask[l]=1;else for(l=0;l<o.width*o.height;l++)o.pixels[0][l]===c?o.mask[l]=0:o.mask[l]=1;o.noDataValue=c}return o}export{C as decode,R as decodeTileOrStrip,b as getImageInfo,D as isBSQConfig,x as parseFieldValues,O as parseHeader,k as parseIFD,N as parseSignature};
|
package/package.json
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
|
+
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
|
+
*/
|
|
5
|
+
const a=/^https:\/\/([a-z\d-]+)(\.maps([^.]*))?\.arcgis\.com/i,e={devext:{customBaseUrl:"mapsdevext.arcgis.com",portalHostname:"devext.arcgis.com"},qaext:{customBaseUrl:"mapsqa.arcgis.com",portalHostname:"qaext.arcgis.com"},www:{customBaseUrl:"maps.arcgis.com",portalHostname:"www.arcgis.com"}};function t(t){const s=t?.match(a);if(!s)return null;const[,o,r,l]=s;if(!o)return null;let c=null,m=null,n=null;const{devext:u,qaext:i,www:p}=e;if(r)if(c=o,l)switch(l.toLowerCase()){case"devext":({customBaseUrl:m,portalHostname:n}=u);break;case"qa":({customBaseUrl:m,portalHostname:n}=i);break;default:return null}else({customBaseUrl:m,portalHostname:n}=p);else switch(o.toLowerCase()){case"devext":({customBaseUrl:m,portalHostname:n}=u);break;case"qaext":({customBaseUrl:m,portalHostname:n}=i);break;case"www":({customBaseUrl:m,portalHostname:n}=p);break;default:return null}return{customBaseUrl:m,isPortal:!1,portalHostname:n,urlKey:c}}export{t as parseKnownArcGISOnlineDomain};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import o from"../../Color.js";import{toRGB as r,toHSV as e,toLAB as l}from"../../core/colorUtils.js";const t=[{id:"aspect_predefined",type:"multipart",colorRamps:[{fromColor:[190,190,190],toColor:[255,45,8]},{fromColor:[255,45,8],toColor:[255,181,61]},{fromColor:[255,181,61],toColor:[255,254,52]},{fromColor:[255,254,52],toColor:[0,251,50]},{fromColor:[0,251,50],toColor:[255,254,52]},{fromColor:[0,253,255],toColor:[0,181,255]},{fromColor:[0,181,255],toColor:[26,35,253]},{fromColor:[26,35,253],toColor:[255,57,251]},{fromColor:[255,57,251],toColor:[255,45,8]}]},{id:"blackToWhite_predefined",fromColor:[0,0,0],toColor:[255,255,255]},{id:"blueBright_predefined",fromColor:[204,204,255],toColor:[0,0,224]},{id:"blueLightToDark_predefined",fromColor:[211,229,232],toColor:[46,100,140]},{id:"blueGreenBright_predefined",fromColor:[203,245,234],toColor:[48,207,146]},{id:"blueGreenLightToDark_predefined",fromColor:[216,242,237],toColor:[21,79,74]},{id:"brownLightToDark_predefined",fromColor:[240,236,170],toColor:[102,72,48]},{id:"brownToBlueGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[156,85,31],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[33,130,145]}]},{id:"brownToBlueGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[110,70,45],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[48,100,102]}]},{id:"coefficientBias_predefined",fromColor:[214,214,255],toColor:[0,57,148]},{id:"coldToHotDiverging_predefined",type:"multipart",colorRamps:[{fromColor:[69,117,181],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[214,47,39]}]},{id:"conditionNumber_predefined",type:"multipart",colorRamps:[{fromColor:[0,97,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,34,0]}]},{id:"cyanToPurple_predefined",type:"multipart",colorRamps:[{fromColor:[0,245,245],toColor:[0,0,245]},{fromColor:[0,0,245],toColor:[245,0,245]}]},{id:"cyanLightToBlueDark_predefined",type:"multipart",colorRamps:[{fromColor:[182,237,240],toColor:[31,131,224]},{fromColor:[31,131,224],toColor:[9,9,145]}]},{id:"distance_predefined",fromColor:[255,200,0],toColor:[0,0,255]},{id:"elevation1_predefined",type:"multipart",colorRamps:[{fromColor:[175,240,233],toColor:[255,255,179]},{fromColor:[255,255,179],toColor:[0,128,64]},{fromColor:[0,128,64],toColor:[252,186,3]},{fromColor:[252,186,3],toColor:[128,0,0]},{fromColor:[120,0,0],toColor:[105,48,13]},{fromColor:[105,48,13],toColor:[171,171,171]},{fromColor:[171,171,171],toColor:[255,252,255]}]},{id:"elevation2_predefined",type:"multipart",colorRamps:[{fromColor:[118,219,211],toColor:[255,255,199]},{fromColor:[255,255,199],toColor:[255,255,128]},{fromColor:[255,255,128],toColor:[217,194,121]},{fromColor:[217,194,121],toColor:[135,96,38]},{fromColor:[135,96,38],toColor:[150,150,181]},{fromColor:[150,150,181],toColor:[181,150,181]},{fromColor:[181,150,181],toColor:[255,252,255]}]},{id:"errors_predefined",fromColor:[255,235,214],toColor:[196,10,10]},{id:"grayLightToDark_predefined",fromColor:[219,219,219],toColor:[69,69,69]},{id:"greenBright_predefined",fromColor:[204,255,204],toColor:[14,204,14]},{id:"greenLightToDark_predefined",fromColor:[220,245,233],toColor:[34,102,51]},{id:"greenToBlue_predefined",type:"multipart",colorRamps:[{fromColor:[32,204,16],toColor:[0,242,242]},{fromColor:[0,242,242],toColor:[2,33,227]}]},{id:"orangeBright_predefined",fromColor:[255,235,204],toColor:[240,118,5]},{id:"orangeLightToDark_predefined",fromColor:[250,233,212],toColor:[171,65,36]},{id:"partialSpectrum_predefined",type:"multipart",colorRamps:[{fromColor:[242,241,162],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]},{fromColor:[252,3,69],toColor:[176,7,237]},{fromColor:[176,7,237],toColor:[2,29,173]}]},{id:"partialSpectrum1Diverging_predefined",type:"multipart",colorRamps:[{fromColor:[135,38,38],toColor:[240,149,12]},{fromColor:[240,149,12],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[74,80,181]},{fromColor:[74,80,181],toColor:[39,32,122]}]},{id:"partialSpectrum2Diverging_predefined",type:"multipart",colorRamps:[{fromColor:[115,77,42],toColor:[201,137,52]},{fromColor:[201,137,52],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[91,63,176]},{fromColor:[91,63,176],toColor:[81,13,97]}]},{id:"pinkToYellowGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[158,30,113],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[99,110,45]}]},{id:"pinkToYellowGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[97,47,73],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[22,59,15]}]},{id:"precipitation_predefined",type:"multipart",colorRamps:[{fromColor:[194,82,60],toColor:[237,161,19]},{fromColor:[237,161,19],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[0,219,0]},{fromColor:[0,219,0],toColor:[32,153,143]},{fromColor:[32,153,143],toColor:[11,44,122]}]},{id:"prediction_predefined",type:"multipart",colorRamps:[{fromColor:[40,146,199],toColor:[250,250,100]},{fromColor:[250,250,100],toColor:[232,16,20]}]},{id:"purpleBright_predefined",fromColor:[255,204,255],toColor:[199,0,199]},{id:"purpleToGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[77,32,150],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[20,122,11]}]},{id:"purpleToGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[67,14,89],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[24,79,15]}]},{id:"purpleBlueBright_predefined",fromColor:[223,184,230],toColor:[112,12,242]},{id:"purpleBlueLightToDark_predefined",fromColor:[229,213,242],toColor:[93,44,112]},{id:"purpleRedBright_predefined",fromColor:[255,204,225],toColor:[199,0,99]},{id:"purpleRedLightToDark_predefined",fromColor:[250,215,246],toColor:[143,17,57]},{id:"redBright_predefined",fromColor:[255,204,204],toColor:[219,0,0]},{id:"redLightToDark_predefined",fromColor:[255,224,224],toColor:[143,10,10]},{id:"redToBlueDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[196,69,57],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[48,95,207]}]},{id:"redToBlueDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[107,13,13],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[13,53,97]}]},{id:"redToGreen_predefined",type:"multipart",colorRamps:[{fromColor:[245,0,0],toColor:[245,245,0]},{fromColor:[245,245,0],toColor:[0,245,0]}]},{id:"redToGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[186,20,20],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[54,145,33]}]},{id:"redToGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[97,21,13],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[16,69,16]}]},{id:"slope_predefined",type:"multipart",colorRamps:[{fromColor:[56,168,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]}]},{id:"spectrumFullBright_predefined",type:"multipart",colorRamps:[{fromColor:[255,0,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[0,0,255]}]},{id:"spectrumFullDark_predefined",type:"multipart",colorRamps:[{fromColor:[153,0,0],toColor:[153,153,0]},{fromColor:[153,153,0],toColor:[0,153,153]},{fromColor:[0,153,153],toColor:[0,0,153]}]},{id:"spectrumFullLight_predefined",type:"multipart",colorRamps:[{fromColor:[255,153,153],toColor:[255,255,153]},{fromColor:[255,255,153],toColor:[153,255,255]},{fromColor:[153,255,255],toColor:[153,153,255]}]},{id:"surface_predefined",type:"multipart",colorRamps:[{fromColor:[112,153,89],toColor:[242,238,162]},{fromColor:[242,238,162],toColor:[242,206,133]},{fromColor:[242,206,133],toColor:[194,140,124]},{fromColor:[194,140,124],toColor:[255,242,255]}]},{id:"temperature_predefined",type:"multipart",colorRamps:[{fromColor:[255,252,255],toColor:[255,0,255]},{fromColor:[255,0,255],toColor:[0,0,255]},{fromColor:[0,0,255],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[0,255,0]},{fromColor:[0,255,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,128,0]},{fromColor:[255,128,0],toColor:[128,0,0]}]},{id:"whiteToBlack_predefined",fromColor:[255,255,255],toColor:[0,0,0]},{id:"yellowToDarkRed_predefined",type:"multipart",colorRamps:[{fromColor:[255,255,128],toColor:[242,167,46]},{fromColor:[242,167,46],toColor:[107,0,0]}]},{id:"yellowToGreenToDarkBlue_predefined",type:"multipart",colorRamps:[{fromColor:[255,255,128],toColor:[56,224,9]},{fromColor:[56,224,9],toColor:[26,147,171]},{fromColor:[26,147,171],toColor:[12,16,120]}]},{id:"yellowToRed_predefined",fromColor:[245,245,0],toColor:[255,0,0]},{id:"yellowGreenBright_predefined",fromColor:[236,252,204],toColor:[157,204,16]},{id:"yellowGreenLightToDark_predefined",fromColor:[215,240,175],toColor:[96,107,45]}],i={aspect_predefined:"Aspect",blackToWhite_predefined:"Black to White",blueBright_predefined:"Blue Bright",blueLightToDark_predefined:"Blue Light to Dark",blueGreenBright_predefined:"Blue-Green Bright",blueGreenLightToDark_predefined:"Blue-Green Light to Dark",brownLightToDark_predefined:"Brown Light to Dark",brownToBlueGreenDivergingBright_predefined:"Brown to Blue Green Diverging, Bright",brownToBlueGreenDivergingDark_predefined:"Brown to Blue Green Diverging, Dark",coefficientBias_predefined:"Coefficient Bias",coldToHotDiverging_predefined:"Cold to Hot Diverging",conditionNumber_predefined:"Condition Number",cyanToPurple_predefined:"Cyan to Purple",cyanLightToBlueDark_predefined:"Cyan-Light to Blue-Dark",distance_predefined:"Distance",elevation1_predefined:"Elevation #1",elevation2_predefined:"Elevation #2",errors_predefined:"Errors",grayLightToDark_predefined:"Gray Light to Dark",greenBright_predefined:"Green Bright",greenLightToDark_predefined:"Green Light to Dark",greenToBlue_predefined:"Green to Blue",orangeBright_predefined:"Orange Bright",orangeLightToDark_predefined:"Orange Light to Dark",partialSpectrum_predefined:"Partial Spectrum",partialSpectrum1Diverging_predefined:"Partial Spectrum 1 Diverging",partialSpectrum2Diverging_predefined:"Partial Spectrum 2 Diverging",pinkToYellowGreenDivergingBright_predefined:"Pink to YellowGreen Diverging, Bright",pinkToYellowGreenDivergingDark_predefined:"Pink to YellowGreen Diverging, Dark",precipitation_predefined:"Precipitation",prediction_predefined:"Prediction",purpleBright_predefined:"Purple Bright",purpleToGreenDivergingBright_predefined:"Purple to Green Diverging, Bright",purpleToGreenDivergingDark_predefined:"Purple to Green Diverging, Dark",purpleBlueBright_predefined:"Purple-Blue Bright",purpleBlueLightToDark_predefined:"Purple-Blue Light to Dark",purpleRedBright_predefined:"Purple-Red Bright",purpleRedLightToDark_predefined:"Purple-Red Light to Dark",redBright_predefined:"Red Bright",redLightToDark_predefined:"Red Light to Dark",redToBlueDivergingBright_predefined:"Red to Blue Diverging, Bright",redToBlueDivergingDark_predefined:"Red to Blue Diverging, Dark",redToGreen_predefined:"Red to Green",redToGreenDivergingBright_predefined:"Red to Green Diverging, Bright",redToGreenDivergingDark_predefined:"Red to Green Diverging, Dark",slope_predefined:"Slope",spectrumFullBright_predefined:"Spectrum-Full Bright",spectrumFullDark_predefined:"Spectrum-Full Dark",spectrumFullLight_predefined:"Spectrum-Full Light",surface_predefined:"Surface",temperature_predefined:"Temperature",whiteToBlack_predefined:"White to Black",yellowToDarkRed_predefined:"Yellow to Dark Red",yellowToGreenToDarkBlue_predefined:"Yellow to Green to Dark Blue",yellowToRed_predefined:"Yellow to Red",yellowGreenBright_predefined:"Yellow-Green Bright",yellowGreenLightToDark_predefined:"Yellow-Green Light to Dark"};function d(o,r){if(!o||!r||o.length!==r.length)return!1;for(let e=0;e<o.length;e++)if(o[e]>r[e]+2||o[e]<r[e]-2)return!1;return!0}function n(o,e,t){const i=l(o),d=l(e),n={l:i.l*(1-t)+t*d.l,a:i.a*(1-t)+t*d.a,b:i.b*(1-t)+t*d.b};return r(n)}function p(r,e){if(!r)return;const l=e||t;let i,n=null;return"algorithmic"===r.type?l.some((o=>{if(d(r.fromColor.toRgb(),o.fromColor)&&d(r.toColor.toRgb(),o.toColor))return n=o.id,!0})):"multipart"===r.type&&l.some((e=>{if(r.colorRamps&&e.colorRamps&&r.colorRamps.length===e.colorRamps.length&&(i=r.colorRamps,!e.colorRamps.some(((r,e)=>{if(!d(i[e].fromColor.toRgb(),new o(r.fromColor).toRgb())||!d(i[e].toColor.toRgb(),new o(r.toColor).toRgb()))return!0})))){if(n)return!0;n=e.id}})),n}function f(o){const r=p(o);return r?i[r]:null}function C(o,r,e=!1){if(!o||!r||r<1)return;const l="toJSON"in o?o.toJSON():o,t="multipart"===l.type?l.colorRamps.length:1,i=[],d=[];let p,f,C,m,a,g=0;if(1===r)return p="multipart"===l.type?l.colorRamps[0].fromColor:l.fromColor,d.push([0].concat(p)),d;for(let n=0;n<t;n++)i[n]={start:null,end:null},i[n].start=g,i[n].end=g+1/t,g=i[n].end;for(let u=0;u<r;u++)m=u/(r-1),i.forEach(((o,i)=>{if(m>=o.start&&(m<o.end||u===r-1&&i===t-1)){a=(m-o.start)/(o.end-o.start),"multipart"===l.type?(p=l.colorRamps[i].fromColor,f=l.colorRamps[i].toColor):(p=l.fromColor,f=l.toColor),0===u?d.push([u].concat(p.slice(0,3))):u===r-1?d.push([u].concat(f.slice(0,3))):(C=n({r:p[0],g:p[1],b:p[2]},{r:f[0],g:f[1],b:f[2]},a),d.push([u,C.r,C.g,C.b]));const t=null!=p[3]?p[3]>1?p[3]/255:p[3]:1,g=null!=f[3]?f[3]>1?f[3]/255:f[3]:1;e&&d[u].push(Math.min(255,Math.round(255*(t*(1-a)+g*a))))}}));return d}function m(o){const r=f(o);if(o){if("algorithmic"===o.type)return{...a(o),Name:r};if(o.colorRamps){const e=o.colorRamps.map(a);return{type:"MultiPartColorRamp",NumColorRamps:e.length,ArrayOfColorRamp:e,Name:r}}}}function a(o){if(!o)return;return{Algorithm:o.toJSON()?.Algorithm||"esriHSVAlgorithm",type:"AlgorithmicColorRamp",FromColor:g(o.fromColor),ToColor:g(o.toColor)}}function g(o){const r=e(o);return{type:"HsvColor",Hue:r.h,Saturation:r.s,Value:r.v,AlphaValue:255}}function u(o){const r=o.reverse().map((o=>{const r=o.toString(16);return r.length<2?"0"+r:r}));return 4294967295&Number.parseInt(r.join(""),16)}export{i as PREDEFINED_COLOR_RAMP_NAME_MAP,t as PREDEFINED_JSON_COLOR_RAMPS,C as convertColorRampToColormap,p as getColorRampId,f as getColorRampName,m as getRFxArgColorRampValue,u as rgbaConvertTo32Bit};
|
|
5
|
+
import o from"../../Color.js";import{toHSV as r,toLAB as e,toLCH as t,toRGB as l}from"../../core/colorUtils.js";const i=[{id:"aspect_predefined",type:"multipart",colorRamps:[{fromColor:[190,190,190],toColor:[255,45,8]},{fromColor:[255,45,8],toColor:[255,181,61]},{fromColor:[255,181,61],toColor:[255,254,52]},{fromColor:[255,254,52],toColor:[0,251,50]},{fromColor:[0,251,50],toColor:[255,254,52]},{fromColor:[0,253,255],toColor:[0,181,255]},{fromColor:[0,181,255],toColor:[26,35,253]},{fromColor:[26,35,253],toColor:[255,57,251]},{fromColor:[255,57,251],toColor:[255,45,8]}]},{id:"blackToWhite_predefined",fromColor:[0,0,0],toColor:[255,255,255]},{id:"blueBright_predefined",fromColor:[204,204,255],toColor:[0,0,224]},{id:"blueLightToDark_predefined",fromColor:[211,229,232],toColor:[46,100,140]},{id:"blueGreenBright_predefined",fromColor:[203,245,234],toColor:[48,207,146]},{id:"blueGreenLightToDark_predefined",fromColor:[216,242,237],toColor:[21,79,74]},{id:"brownLightToDark_predefined",fromColor:[240,236,170],toColor:[102,72,48]},{id:"brownToBlueGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[156,85,31],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[33,130,145]}]},{id:"brownToBlueGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[110,70,45],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[48,100,102]}]},{id:"coefficientBias_predefined",fromColor:[214,214,255],toColor:[0,57,148]},{id:"coldToHotDiverging_predefined",type:"multipart",colorRamps:[{fromColor:[69,117,181],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[214,47,39]}]},{id:"conditionNumber_predefined",type:"multipart",colorRamps:[{fromColor:[0,97,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,34,0]}]},{id:"cyanToPurple_predefined",type:"multipart",colorRamps:[{fromColor:[0,245,245],toColor:[0,0,245]},{fromColor:[0,0,245],toColor:[245,0,245]}]},{id:"cyanLightToBlueDark_predefined",type:"multipart",colorRamps:[{fromColor:[182,237,240],toColor:[31,131,224]},{fromColor:[31,131,224],toColor:[9,9,145]}]},{id:"distance_predefined",fromColor:[255,200,0],toColor:[0,0,255]},{id:"elevation1_predefined",type:"multipart",colorRamps:[{fromColor:[175,240,233],toColor:[255,255,179]},{fromColor:[255,255,179],toColor:[0,128,64]},{fromColor:[0,128,64],toColor:[252,186,3]},{fromColor:[252,186,3],toColor:[128,0,0]},{fromColor:[120,0,0],toColor:[105,48,13]},{fromColor:[105,48,13],toColor:[171,171,171]},{fromColor:[171,171,171],toColor:[255,252,255]}]},{id:"elevation2_predefined",type:"multipart",colorRamps:[{fromColor:[118,219,211],toColor:[255,255,199]},{fromColor:[255,255,199],toColor:[255,255,128]},{fromColor:[255,255,128],toColor:[217,194,121]},{fromColor:[217,194,121],toColor:[135,96,38]},{fromColor:[135,96,38],toColor:[150,150,181]},{fromColor:[150,150,181],toColor:[181,150,181]},{fromColor:[181,150,181],toColor:[255,252,255]}]},{id:"errors_predefined",fromColor:[255,235,214],toColor:[196,10,10]},{id:"grayLightToDark_predefined",fromColor:[219,219,219],toColor:[69,69,69]},{id:"greenBright_predefined",fromColor:[204,255,204],toColor:[14,204,14]},{id:"greenLightToDark_predefined",fromColor:[220,245,233],toColor:[34,102,51]},{id:"greenToBlue_predefined",type:"multipart",colorRamps:[{fromColor:[32,204,16],toColor:[0,242,242]},{fromColor:[0,242,242],toColor:[2,33,227]}]},{id:"orangeBright_predefined",fromColor:[255,235,204],toColor:[240,118,5]},{id:"orangeLightToDark_predefined",fromColor:[250,233,212],toColor:[171,65,36]},{id:"partialSpectrum_predefined",type:"multipart",colorRamps:[{fromColor:[242,241,162],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]},{fromColor:[252,3,69],toColor:[176,7,237]},{fromColor:[176,7,237],toColor:[2,29,173]}]},{id:"partialSpectrum1Diverging_predefined",type:"multipart",colorRamps:[{fromColor:[135,38,38],toColor:[240,149,12]},{fromColor:[240,149,12],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[74,80,181]},{fromColor:[74,80,181],toColor:[39,32,122]}]},{id:"partialSpectrum2Diverging_predefined",type:"multipart",colorRamps:[{fromColor:[115,77,42],toColor:[201,137,52]},{fromColor:[201,137,52],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[91,63,176]},{fromColor:[91,63,176],toColor:[81,13,97]}]},{id:"pinkToYellowGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[158,30,113],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[99,110,45]}]},{id:"pinkToYellowGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[97,47,73],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[22,59,15]}]},{id:"precipitation_predefined",type:"multipart",colorRamps:[{fromColor:[194,82,60],toColor:[237,161,19]},{fromColor:[237,161,19],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[0,219,0]},{fromColor:[0,219,0],toColor:[32,153,143]},{fromColor:[32,153,143],toColor:[11,44,122]}]},{id:"prediction_predefined",type:"multipart",colorRamps:[{fromColor:[40,146,199],toColor:[250,250,100]},{fromColor:[250,250,100],toColor:[232,16,20]}]},{id:"purpleBright_predefined",fromColor:[255,204,255],toColor:[199,0,199]},{id:"purpleToGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[77,32,150],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[20,122,11]}]},{id:"purpleToGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[67,14,89],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[24,79,15]}]},{id:"purpleBlueBright_predefined",fromColor:[223,184,230],toColor:[112,12,242]},{id:"purpleBlueLightToDark_predefined",fromColor:[229,213,242],toColor:[93,44,112]},{id:"purpleRedBright_predefined",fromColor:[255,204,225],toColor:[199,0,99]},{id:"purpleRedLightToDark_predefined",fromColor:[250,215,246],toColor:[143,17,57]},{id:"redBright_predefined",fromColor:[255,204,204],toColor:[219,0,0]},{id:"redLightToDark_predefined",fromColor:[255,224,224],toColor:[143,10,10]},{id:"redToBlueDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[196,69,57],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[48,95,207]}]},{id:"redToBlueDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[107,13,13],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[13,53,97]}]},{id:"redToGreen_predefined",type:"multipart",colorRamps:[{fromColor:[245,0,0],toColor:[245,245,0]},{fromColor:[245,245,0],toColor:[0,245,0]}]},{id:"redToGreenDivergingBright_predefined",type:"multipart",colorRamps:[{fromColor:[186,20,20],toColor:[255,255,191]},{fromColor:[255,255,191],toColor:[54,145,33]}]},{id:"redToGreenDivergingDark_predefined",type:"multipart",colorRamps:[{fromColor:[97,21,13],toColor:[204,204,102]},{fromColor:[204,204,102],toColor:[16,69,16]}]},{id:"slope_predefined",type:"multipart",colorRamps:[{fromColor:[56,168,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]}]},{id:"spectrumFullBright_predefined",type:"multipart",colorRamps:[{fromColor:[255,0,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[0,0,255]}]},{id:"spectrumFullDark_predefined",type:"multipart",colorRamps:[{fromColor:[153,0,0],toColor:[153,153,0]},{fromColor:[153,153,0],toColor:[0,153,153]},{fromColor:[0,153,153],toColor:[0,0,153]}]},{id:"spectrumFullLight_predefined",type:"multipart",colorRamps:[{fromColor:[255,153,153],toColor:[255,255,153]},{fromColor:[255,255,153],toColor:[153,255,255]},{fromColor:[153,255,255],toColor:[153,153,255]}]},{id:"surface_predefined",type:"multipart",colorRamps:[{fromColor:[112,153,89],toColor:[242,238,162]},{fromColor:[242,238,162],toColor:[242,206,133]},{fromColor:[242,206,133],toColor:[194,140,124]},{fromColor:[194,140,124],toColor:[255,242,255]}]},{id:"temperature_predefined",type:"multipart",colorRamps:[{fromColor:[255,252,255],toColor:[255,0,255]},{fromColor:[255,0,255],toColor:[0,0,255]},{fromColor:[0,0,255],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[0,255,0]},{fromColor:[0,255,0],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,128,0]},{fromColor:[255,128,0],toColor:[128,0,0]}]},{id:"whiteToBlack_predefined",fromColor:[255,255,255],toColor:[0,0,0]},{id:"yellowToDarkRed_predefined",type:"multipart",colorRamps:[{fromColor:[255,255,128],toColor:[242,167,46]},{fromColor:[242,167,46],toColor:[107,0,0]}]},{id:"yellowToGreenToDarkBlue_predefined",type:"multipart",colorRamps:[{fromColor:[255,255,128],toColor:[56,224,9]},{fromColor:[56,224,9],toColor:[26,147,171]},{fromColor:[26,147,171],toColor:[12,16,120]}]},{id:"yellowToRed_predefined",fromColor:[245,245,0],toColor:[255,0,0]},{id:"yellowGreenBright_predefined",fromColor:[236,252,204],toColor:[157,204,16]},{id:"yellowGreenLightToDark_predefined",fromColor:[215,240,175],toColor:[96,107,45]}],n={aspect_predefined:"Aspect",blackToWhite_predefined:"Black to White",blueBright_predefined:"Blue Bright",blueLightToDark_predefined:"Blue Light to Dark",blueGreenBright_predefined:"Blue-Green Bright",blueGreenLightToDark_predefined:"Blue-Green Light to Dark",brownLightToDark_predefined:"Brown Light to Dark",brownToBlueGreenDivergingBright_predefined:"Brown to Blue Green Diverging, Bright",brownToBlueGreenDivergingDark_predefined:"Brown to Blue Green Diverging, Dark",coefficientBias_predefined:"Coefficient Bias",coldToHotDiverging_predefined:"Cold to Hot Diverging",conditionNumber_predefined:"Condition Number",cyanToPurple_predefined:"Cyan to Purple",cyanLightToBlueDark_predefined:"Cyan-Light to Blue-Dark",distance_predefined:"Distance",elevation1_predefined:"Elevation #1",elevation2_predefined:"Elevation #2",errors_predefined:"Errors",grayLightToDark_predefined:"Gray Light to Dark",greenBright_predefined:"Green Bright",greenLightToDark_predefined:"Green Light to Dark",greenToBlue_predefined:"Green to Blue",orangeBright_predefined:"Orange Bright",orangeLightToDark_predefined:"Orange Light to Dark",partialSpectrum_predefined:"Partial Spectrum",partialSpectrum1Diverging_predefined:"Partial Spectrum 1 Diverging",partialSpectrum2Diverging_predefined:"Partial Spectrum 2 Diverging",pinkToYellowGreenDivergingBright_predefined:"Pink to YellowGreen Diverging, Bright",pinkToYellowGreenDivergingDark_predefined:"Pink to YellowGreen Diverging, Dark",precipitation_predefined:"Precipitation",prediction_predefined:"Prediction",purpleBright_predefined:"Purple Bright",purpleToGreenDivergingBright_predefined:"Purple to Green Diverging, Bright",purpleToGreenDivergingDark_predefined:"Purple to Green Diverging, Dark",purpleBlueBright_predefined:"Purple-Blue Bright",purpleBlueLightToDark_predefined:"Purple-Blue Light to Dark",purpleRedBright_predefined:"Purple-Red Bright",purpleRedLightToDark_predefined:"Purple-Red Light to Dark",redBright_predefined:"Red Bright",redLightToDark_predefined:"Red Light to Dark",redToBlueDivergingBright_predefined:"Red to Blue Diverging, Bright",redToBlueDivergingDark_predefined:"Red to Blue Diverging, Dark",redToGreen_predefined:"Red to Green",redToGreenDivergingBright_predefined:"Red to Green Diverging, Bright",redToGreenDivergingDark_predefined:"Red to Green Diverging, Dark",slope_predefined:"Slope",spectrumFullBright_predefined:"Spectrum-Full Bright",spectrumFullDark_predefined:"Spectrum-Full Dark",spectrumFullLight_predefined:"Spectrum-Full Light",surface_predefined:"Surface",temperature_predefined:"Temperature",whiteToBlack_predefined:"White to Black",yellowToDarkRed_predefined:"Yellow to Dark Red",yellowToGreenToDarkBlue_predefined:"Yellow to Green to Dark Blue",yellowToRed_predefined:"Yellow to Red",yellowGreenBright_predefined:"Yellow-Green Bright",yellowGreenLightToDark_predefined:"Yellow-Green Light to Dark"};function d(o,r){if(!o||!r||o.length!==r.length)return!1;for(let e=0;e<o.length;e++)if(o[e]>r[e]+2||o[e]<r[e]-2)return!1;return!0}function p(r,e){if(!r)return;const t=e||i;let l,n=null;return"algorithmic"===r.type?t.some((o=>{if(d(r.fromColor.toRgb(),o.fromColor)&&d(r.toColor.toRgb(),o.toColor))return n=o.id,!0})):"multipart"===r.type&&t.some((e=>{if(r.colorRamps&&e.colorRamps&&r.colorRamps.length===e.colorRamps.length&&(l=r.colorRamps,!e.colorRamps.some(((r,e)=>{if(!d(l[e].fromColor.toRgb(),new o(r.fromColor).toRgb())||!d(l[e].toColor.toRgb(),new o(r.toColor).toRgb()))return!0})))){if(n)return!0;n=e.id}})),n}function f(o){const r=p(o);return r?n[r]:null}function C(o){const r=(o=o||{}).numColors||256,e=o.distanceOffset||0,t=null!=o.isCustomInterval?o.isCustomInterval:null!==o.distanceInterval&&o.distanceInterval!==1/(r-1),l=o.distanceInterval||1/(r-1);return{...o,numColors:r,distanceOffset:e,interpolateAlpha:!!o.interpolateAlpha,distanceInterval:l,isCustomInterval:t,weights:o.weights}}function a(o,r,e){const{numColors:t,distanceOffset:l,distanceInterval:i,isCustomInterval:n}=C(e),d=0===o.s,p=0===r.s;let f=o.h,a=r.h;d&&!p?f=a:p&&!d&&(r={...r,h:f},a=f);let m,u=Math.abs(a-f);const g=360;u<g/2?m=(a-f)*i:(u=g-u,m=f>a?u*i:-u*i);const s=(r.s-o.s)*i,c=(r.v-o.v)*i;let{s:h,v:_}=o,D=f;if(l){const o=l/i;D=(D+o*m+g)%g,h+=o*s,_+=o*c}const B=[];for(let C=0;C<t-1;C++)B.push({h:D,s:h,v:_}),D=(D+m+g)%g,h+=s,_+=c;return B.push(n?{h:D,s:h,v:_}:r),B}function m(o,r,e){const{numColors:t,distanceOffset:l,distanceInterval:i,isCustomInterval:n}=C(e);let{l:d,a:p,b:f}=o;const a=(r.l-d)*i,m=(r.a-p)*i,u=(r.b-f)*i,g=[];if(l){const o=l/i;d+=o*a,p+=o*m,f+=o*u}for(let C=0;C<t-1;C++)g.push({l:d,a:p,b:f}),d+=a,p+=m,f+=u;return g.push(n?{l:d,a:p,b:f}:r),g}function u(o,r,e){const{numColors:t,distanceOffset:l,distanceInterval:i,isCustomInterval:n}=C(e),d=o.h,p=r.h,f=2*Math.PI;let a;if(d<=p){const o=p-d,r=p-d-f;a=Math.abs(r)<Math.abs(o)?r:o}else{const o=p+f-d,r=p-d;a=Math.abs(r)<Math.abs(o)?r:o}const m=a*i,u=(r.l-o.l)*i,g=(r.c-o.c)*i;let{l:s,c,h}=o;if(l){const o=l/i;s+=o*u,c+=o*g,h=(h+o*m+f)%f}const _=[];for(let C=0;C<t-1;C++)_.push({l:s,c,h}),s+=u,c+=g,h=(h+m+f)%f;return _.push(n?{l:s,c,h}:r),_}function g(o,i){let{fromColor:n,toColor:d}=o;3===n.length&&(n=n.concat([255])),3===d.length&&(d=d.concat([255]));const p=o.algorithm||"esriCIELabAlgorithm",{numColors:f,distanceOffset:g,isCustomInterval:s,interpolateAlpha:c}=C(i);if(1===f&&0===g)return[n];if(2===f&&0===g&&!s)return[n,d];const h={r:n[0],g:n[1],b:n[2]},_={r:d[0],g:d[1],b:d[2]},D="esriCIELabAlgorithm"===p?m(e(h),e(_),i):"esriHSVAlgorithm"===p?a(r(h),r(_),i):u(t(h),t(_),i),B=[],R=n[3]??255,k=((d[3]??255)-R)/(f-1);for(let r=0;r<f;r++){const{r:o,g:e,b:t}=l(D[r]),i=c?Math.round(R+k*r):255;B.push([o,e,t,i])}return B}function s(o,r){const{numColors:e,interpolateAlpha:t}=C(r);let l=r?.weights;const{colorRamps:i}=o;if(l){const o=l.reduce(((o,r)=>o+r));l=l.map((r=>r/o))}else{l=[];for(let o=0;o<i.length;o++)l[o]=1/i.length}const n=[];let d=0,p=0;const f=1/(e-1);let a=!1;for(let C=0;C<i.length;C++){let o=a?0:d*f-p,r=C===i.length-1?e-1-d:(l[C]-o)/f;if(a=Math.ceil(r)===r,r=Math.ceil(r),0===r)continue;o/=l[C];const m=g(i[C],{numColors:r,interpolateAlpha:t,distanceOffset:o,distanceInterval:f/l[C]});d+=m.length,n.push(...m),p+=l[C]}const m=[...i[i.length-1].toColor];return 3===m.length&&m.push(255),n.push(m),n}function c(o,r=256,e=!1){const t="toJSON"in o?o.toJSON():o,l={numColors:r,interpolateAlpha:e};return"multipart"===t.type?s(t,l):g(t,l)}function h(o,r=256,e=!1){const t=c(o,r,e);return t.forEach(((o,r)=>{o.unshift(r),e||o.pop()})),t}function _(o){const r=f(o);if(o){if("algorithmic"===o.type)return{...D(o),Name:r};if(o.colorRamps){const e=o.colorRamps.map(D);return{type:"MultiPartColorRamp",NumColorRamps:e.length,ArrayOfColorRamp:e,Name:r}}}}function D(o){if(!o)return;return{Algorithm:o.toJSON()?.Algorithm||"esriHSVAlgorithm",type:"AlgorithmicColorRamp",FromColor:B(o.fromColor),ToColor:B(o.toColor)}}function B(o){const e=r(o);return{type:"HsvColor",Hue:e.h,Saturation:e.s,Value:e.v,AlphaValue:255}}function R(o){const r=o.reverse().map((o=>{const r=o.toString(16);return r.length<2?"0"+r:r}));return 4294967295&Number.parseInt(r.join(""),16)}export{n as PREDEFINED_COLOR_RAMP_NAME_MAP,i as PREDEFINED_JSON_COLOR_RAMPS,h as convertColorRampToColormap,c as convertColorRampToColors,p as getColorRampId,f as getColorRampName,_ as getRFxArgColorRampValue,R as rgbaConvertTo32Bit};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../request.js";import t from"../../geometry/Extent.js";import a from"../../geometry/Point.js";import l from"../../geometry/SpatialReference.js";import i from"../../layers/support/RasterInfo.js";import{parseUrl as
|
|
5
|
+
import e from"../../request.js";import t from"../../geometry/Extent.js";import a from"../../geometry/Point.js";import l from"../../geometry/SpatialReference.js";import i from"../../layers/support/RasterInfo.js";import{parseUrl as s,encode as n,asValidOptions as r}from"../utils.js";import o from"../support/FeatureSet.js";async function u(u,m,f){const p=s(u),{renderingRule:c,sourceJSON:d}=m||{},h=c?JSON.stringify(c.rasterFunctionDefinition||c):null,g=n({...p.query,renderingRule:h,f:"json"}),v=r(g,f);u=p.path;const y=d||await e(u,v).then((e=>e.data)),S=y.hasRasterAttributeTable?e(`${u}/rasterAttributeTable`,v):null,V=y.hasColormap?e(`${u}/colormap`,v):null,x=y.hasHistograms?e(`${u}/histograms`,v):null,b=y.currentVersion>=10.3?e(`${u}/keyProperties`,v):null,D=y.hasMultidimensions?e(`${u}/multidimensionalInfo`,v):null,R=await Promise.allSettled([S,V,x,b,D]);let T=null;if(y.minValues&&y.minValues.length===y.bandCount){T=[];for(let e=0;e<y.minValues.length;e++)T.push({min:y.minValues[e],max:y.maxValues[e],avg:y.meanValues[e],stddev:y.stdvValues[e]})}const j=t.fromJSON(y.extent),w=Math.ceil(j.width/y.pixelSizeX-.1),J=Math.ceil(j.height/y.pixelSizeY-.1),N=l.fromJSON(y.spatialReference||y.extent.spatialReference),O="fulfilled"===R[0].status&&R[0].value?o.fromJSON(R[0].value.data):null,I="fulfilled"===R[1].status?R[1].value?.data.colormap:null,z="fulfilled"===R[2].status?R[2].value?.data.histograms:null,C="fulfilled"===R[3].status?R[3].value?.data??{}:{},$="fulfilled"===R[4].status?R[4].value?.data.multidimensionalInfo:null;$?.variables?.length&&$.variables.forEach((e=>{e.statistics?.length&&e.statistics.forEach((e=>{e.avg=e.mean,e.stddev=e.standardDeviation}))}));const{defaultVariable:P,serviceDataType:E}=y;P&&P!==C.DefaultVariable&&(C.DefaultVariable=P),E&&E.includes("esriImageServiceDataTypeVector")&&!E.includes(C.DataType)&&(C.DataType=E.replace("esriImageServiceDataType",""));let M=y.noDataValue;return y.noDataValues?.length&&y.noDataValues.some((e=>e!==M))&&(M=y.noDataValues),new i({width:w,height:J,bandCount:y.bandCount,extent:t.fromJSON(y.extent),spatialReference:N,pixelSize:new a({x:y.pixelSizeX,y:y.pixelSizeY,spatialReference:N}),pixelType:y.pixelType.toLowerCase(),statistics:T,attributeTable:O,colormap:I,histograms:z,keyProperties:C,noDataValue:M,multidimensionalInfo:$})}function m(e,t,a){return u(e,{sourceJSON:t},a)}function f(e,t,a){return u(e,{renderingRule:t},a)}export{m as fetchServiceRasterInfo,f as generateRasterInfo};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import e from"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../symbols.js";import r from"../../core/Error.js";import{isSome as i}from"../../core/maybe.js";import{toPt as a}from"../../core/screenUtils.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import t from"../heuristics/outline.js";import n from"../heuristics/sizeRange.js";import{createVisualVariables as o}from"./size.js";import{createColors as l,createSymbol as p,getSymbolOutlineFromScheme as m,verifyBasicFieldValidity as u,getBasemapInfo as d}from"./support/utils.js";import c from"../statistics/predominantCategories.js";import{getSumOfAttributesExpr as b}from"../statistics/support/utils.js";import{getFieldsList as h}from"../support/utils.js";import{LayerType as y,createLayerAdapter as f,getLayerTypeLabels as g}from"../support/adapters/support/layerUtils.js";import{cloneScheme as
|
|
5
|
+
import"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import e from"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../symbols.js";import r from"../../core/Error.js";import{isSome as i}from"../../core/maybe.js";import{toPt as a}from"../../core/screenUtils.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import t from"../heuristics/outline.js";import n from"../heuristics/sizeRange.js";import{createVisualVariables as o}from"./size.js";import{createColors as l,createSymbol as p,getSymbolOutlineFromScheme as m,verifyBasicFieldValidity as u,getBasemapInfo as d}from"./support/utils.js";import c from"../statistics/predominantCategories.js";import{getSumOfAttributesExpr as b}from"../statistics/support/utils.js";import{getFieldsList as h}from"../support/utils.js";import{LayerType as y,createLayerAdapter as f,getLayerTypeLabels as g}from"../support/adapters/support/layerUtils.js";import{cloneScheme as z,getSchemes as v}from"../symbology/pieChart.js";import w from"../../symbols/SimpleLineSymbol.js";async function E(e){if(!(e&&e.layer&&e.view&&e.attributes?.length))throw new r("pie-chart-renderer:missing-parameters","'layer', 'view' and 'attributes' parameters are required");if(e.attributes.length>10)throw new r("pie-chart-renderer:invalid-parameters","PieChart renderer does not support more than 10 attributes");const a={...e};a.shape=a.shape||"pie",a.othersCategoryEnabled=null==a.othersCategoryEnabled||a.othersCategoryEnabled,a.includeSizeVariable=e.includeSizeVariable||!1;const s=[y.CSVLayer,y.FeatureLayer,y.OGCFeatureLayer,y.GeoJSONLayer,y.WFSLayer],t=f(a.layer,s);if(a.layer=t,!t)throw new r("pie-chart-renderer:invalid-parameters","'layer' must be one of these types: "+g(s).join(", "));const n=i(a.signal)?{signal:a.signal}:null;await Promise.all([a.view.when(),t.load(n)]);const o=t.geometryType,l="polygon"===o,p="point"===o||"multipoint"===o||l;if(a.outlineOptimizationEnabled=!!l&&a.outlineOptimizationEnabled,a.sizeOptimizationEnabled=!!p&&a.sizeOptimizationEnabled,!p)throw new r("pie-chart-renderer:not-supported","PieChart renderer is only supported for point and polygon layers");const m=[],d=a.attributes;for(const r of d){const e=await h({field:r.field,valueExpression:r.valueExpression});m.push(...e)}const c=u(t,m.filter(Boolean),"pie-chart-renderer:invalid-parameters");if(c)throw c;return a}async function j(e){let r=e.pieChartScheme,a=null,s=null;const t=await d(e.basemap,e.view);if(a=i(t.basemapId)?t.basemapId:null,s=i(t.basemapTheme)?t.basemapTheme:null,r)return{scheme:z(r),basemapId:a,basemapTheme:s};const n=v({basemap:a,numColors:e.attributes.length,geometryType:e.layer.geometryType,basemapTheme:s});return n&&(r=n.primaryScheme,a=n.basemapId,s=n.basemapTheme),{scheme:r,basemapId:a,basemapTheme:s}}async function S(e,r){const{valueExpression:i,sqlExpression:a,sqlWhere:t}=b(e.attributes),n=await s("esri/smartMapping/t9n/smartMapping");return o({layer:e.layer,basemap:e.basemap,valueExpression:i,sqlExpression:a,sqlWhere:t,sizeScheme:r,sizeOptimizationEnabled:e.sizeOptimizationEnabled,legendOptions:{title:n.sumOfCategories},view:e.view,signal:e.signal})}async function C(i){const s=await E(i),o=await j(s),u=o?.scheme;if(!u)throw new r("pie-chart-renderer:insufficient-info","Unable to find pie-chart scheme");const d=s.layer,{includeSizeVariable:b,sizeOptimizationEnabled:h,outlineOptimizationEnabled:y,view:f,signal:g}=s,v=u.sizeScheme,C=s.attributes,V=C.map((e=>e.field)),[O,T,x,I]=await Promise.all([V.length>1?c({layer:d,fields:V,view:f,signal:g}):null,b?S(s,v):null,!b&&h?n({layer:d,view:f,signal:g}):null,y?t({layer:d,view:f,signal:g}):null]),R=O&&O.predominantCategoryInfos?{uniqueValueInfos:O.predominantCategoryInfos}:{uniqueValueInfos:V.map((e=>({value:e,count:0})))},q=l(u.colors,C.length),L=C.map(((e,r)=>({field:e.field,valueExpression:e.valueExpression,label:e.label,valueExpressionTitle:e.valueExpressionTitle,color:q[r]}))),P=d.geometryType,F="background"in v&&v.background,U=new e({attributes:L,othersCategory:{color:s.othersCategoryEnabled?u.colorForOthersCategory:null,threshold:.04},holePercentage:"donut"===s.shape?.45:0,backgroundFillSymbol:F?p(P,{type:"2d",color:F.color,outline:m(F,P,I?.opacity)}):null,size:a(u.size),outline:new w(m(u,"point",I?.opacity)),legendOptions:s.legendOptions});if(T&&(h||T.visualVariables.forEach((e=>{"number"==typeof e.minSize&&"number"==typeof e.maxSize&&(e.minSize*=2.5,e.maxSize*=1.8)})),h&&"point"===P&&T.visualVariables.forEach((e=>{e?.minSize&&"object"==typeof e.minSize&&e.minSize?.stops.forEach((e=>{e.size*=1.8}))})),U.authoringInfo=T.authoringInfo.clone(),U.visualVariables=T.visualVariables?.map((e=>e.clone()))),I?.visualVariables?.length){const e=I.visualVariables.map((e=>e.clone()));U.visualVariables?U.visualVariables.push(...e):U.visualVariables=e}return x?.minSize&&("point"===P&&x.minSize.stops.forEach((e=>{e.size*=2.5})),"polygon"===P&&x.minSize.stops.forEach((e=>{e.size*=1.8})),U.visualVariables?U.visualVariables.push(x.minSize):U.visualVariables=[x.minSize]),{renderer:U,pieChartScheme:z(u),size:T,basemapId:o.basemapId,basemapTheme:o.basemapTheme,statistics:R}}export{C as createRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import{pickRandom as t}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import a from"../../../core/Logger.js";import{unwrap as i}from"../../../core/maybe.js";import{timeout as s,eachAlways as n,throwIfAborted as o}from"../../../core/promiseUtils.js";import{whenOnce as l}from"../../../core/reactiveUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{toQuantizationTransform as c}from"../../../geometry/support/quantizationUtils.js";import{isHostedAgolService as p}from"../../../layers/support/arcgisLayerUrl.js";import{kebabDict as h}from"../../../layers/support/fieldType.js";import{isStringField as d,isNumericField as y,isDateField as f}from"../../../layers/support/fieldUtils.js";import F from"../../../rest/support/GenerateRendererParameters.js";import g from"../../../rest/support/QuantizationParameters.js";import S from"../../../rest/support/StatisticDefinition.js";import w from"../../../rest/support/UniqueValueDefinition.js";import{getArcadeForPredominantCategory as v,getSQLForPredominantCategoryName as x}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as _,uniqueValues as z,histogram as q,classBreaks as V,heatmapStatistics as T}from"../../statistics/support/statsWorker.js";import{getRangeExpr as E,getSQLFilterForNormalization as L,mergeWhereClauses as j}from"../../statistics/support/utils.js";import{WorkerClient as C}from"../../statistics/support/WorkerClient.js";import{getFieldsList as Q}from"../utils.js";import M from"./LayerAdapter.js";import{ensureFeaturesJSON as N,msSinceUnixEpochSQL as b,getFieldExpr as B,getSummaryStatisticsFromFeatureSet as O,getViewInfoParams as P,getMissingFields as k,getUniqueValuesFromFeatureSet as I,getHistogramFromFeatureSet as R,generateBinParams as D,getPredominantCategoriesFromUVInfos as G}from"./support/utils.js";import{processSummaryStatisticsResult as J,isNullCountSupported as U,statisticTypes as A,createUVResult as W,getEqualIntervalBins as $,createClassBreaksDefinition as H,resolveCBResult as Z}from"../../../statistics/utils.js";import K from"../../../tasks/GenerateRendererTask.js";const X=a.getLogger("esri.smartMapping.support.adapters.FeatureLayerAdapter"),Y=5,ee=10,te=2e4,re=4e5;let ae=class extends M{constructor(e){super(e)}destroy(){this._hasLocalSource=null,this.workerClient?.destroy()}_isStatsSupportedOnService(){const e=this.layer;return!e.get("capabilities.query.supportsStatistics")||"multipatch"===this.geometryType&&!p(e.url)&&e.version<10.5?Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support statistics query")):Promise.resolve()}async _waitForLayerViewUpdate(e){if(!e)throw new r("feature-layer-adapter:insufficient-data","layerView is required to fetch the features");const t=new AbortController,a=l((()=>!e.updating),t.signal);await s(a,5e3,t).catch((e=>{throw X.warn("LayerView is taking too long to update. Aborting fetch from layerView."),e}))}async _fetchFeaturesFromMemory(e,t,r,a){const i=this.layer,s="json"===a;if(this._hasLocalSource){const e=await i.queryFeatures(t);return s?N(e.features):e.features}if(await this._waitForLayerViewUpdate(e),s&&"queryFeaturesJSON"in e&&e.queryFeaturesJSON){const{features:a}=await e.queryFeaturesJSON(t,{signal:r});return a}const n=await e.queryFeatures(t,{signal:r});return s?N(n.features):n.features}_fetchFeaturesFromService(e,t){return this.layer.queryFeatures(e,{signal:t}).then((e=>e.features))}_fetchFeaturesJSONFromService(e,t){return this._fetchFeaturesFromService(e,t).then(N)}_fetchFeaturesForStats(e,t){return Q({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then((r=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:r,signal:e.signal},t)))}_summaryStatsFromGenRend(e){const t=e.normalizationType,r=e.normalizationField;return this.classBreaks({field:e.field,numClasses:Y,classificationMethod:"standard-deviation",standardDeviationInterval:.25,normalizationType:t,normalizationField:"field"===t?r:void 0,minValue:e.minValue,maxValue:e.maxValue,signal:e.signal}).then((e=>{let t,r,a;if(e.classBreakInfos.some((e=>(e.hasAvg&&(t=e),!!t))),t){const e=t.maxValue-t.minValue;r=t.minValue+e/2,a=4*e}const i={min:e.minValue,max:e.maxValue,avg:r,stddev:a};return J(i)}))}_getSummaryStatsQuery(e,t){const{field:r,normalizationType:a,normalizationField:i,normalizationTotal:s,minValue:n,maxValue:o}=e,l=this.supportsSQLExpression&&t?b(this,r):e.sqlExpression,u=B({field:r,normalizationType:a,normalizationField:i,normalizationTotal:s,layer:this}),m=l||u,c=m?E(m,n,o):null,p=L({field:r,normalizationField:i,normalizationType:a}),h=j(e.sqlWhere,p),y=j(h,c),f=U({normalizationField:i,normalizationType:a,sqlExpression:l,supportsSQLExpression:this.supportsSQLExpression,minValue:n,maxValue:o}),F=d(this.getField(r)),g=A.filter((e=>"nullcount"===e?f:!F||"count"===e)),w=this.layer.createQuery();return w.where=j(w.where,y),w.sqlFormat=l?"standard":null,w.outStatistics=g.map((e=>{const t=new S;let r=null,a=null,i=`${e}_value`;return"variance"===e?(r="var",a=m):"nullcount"===e?(r="count",a=this.layer.objectIdField,i="totalcount_value"):"median"===e?(r="percentile-continuous",a=m,t.statisticParameters={value:.5}):(r=e,a=m),t.statisticType=r,t.onStatisticField=a,t.outStatisticFieldName=i,t})),w}async _summaryStatsFromServiceQuery(e,t){await this._isStatsSupportedOnService(),"percent-of-total"===e.normalizationType&&(e.normalizationTotal=await this._getNormalizationTotal(e.field,e.normalizationType));const r=this._getSummaryStatsQuery(e,t),a=await this.layer.queryFeatures(r,{signal:e.signal}),i=O(a,t);return J(i)}async _summaryStatsFromClientQuery(e,t){const r=this._getSummaryStatsQuery(e,t),a=await this.layer.queryFeatures(r,{signal:e.signal}),i=O(a,t);return J(i)}async _getNormalizationTotalFromMemory(e,t,a){const{featuresJSON:i,graphics:s,layerView:n,query:o}=t,l=(!i&&!s&&n&&"querySummaryStatistics"in n?await n.querySummaryStatistics(o,{field:e},{signal:a}):i?await this.workerClient.summaryStatistics({field:e},i):await _({attribute:{field:e},features:s})).sum;if(null==l)throw new r("feature-layer-adapter:invalid","invalid normalizationTotal");return l}async _summaryStatsFromMemory(e,t){const{view:r,field:a,valueExpression:i,normalizationType:s,signal:n}=e,o={field:a,valueExpression:i,normalizationType:s,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue},{featuresJSON:l,graphics:u,layerView:m,query:c}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"querySummaryStatistics"});return i&&r&&(l||u)&&(o.fieldType=t?.type?h.toJSON(t.type):null,o.viewInfoParams=P(r)),"percent-of-total"===s&&null==e.normalizationTotal&&(o.normalizationTotal=await this._getNormalizationTotalFromMemory(a,{featuresJSON:l,graphics:u,layerView:m,query:c},n)),!l&&!u&&m&&"querySummaryStatistics"in m?m.querySummaryStatistics(c,o,{signal:n}):l?this.workerClient.summaryStatistics(o,l):_({attribute:o,features:u})}async _processStatsFromMemoryParams(e){const t=e.features;if(t?.length){return t.length&&"declaredClass"in t[0]&&"esri.Graphic"===t[0].declaredClass?{graphics:t}:{featuresJSON:t}}const{view:a,field:i,normalizationField:s,valueExpression:n,returnGeometry:o,layerViewFunc:l,signal:u}=e;let m=null,c=null,p=null,h=null;if(a)try{m=await a.whenLayerView(this.layer),c=l in m&&"function"==typeof m[l]}catch{c=!1}if(c)try{await this._waitForLayerViewUpdate(m);const e=await Q({field:i,normalizationField:s,valueExpression:n});(await k(this,e,m)).length?c=!1:(p=this.layer.createQuery(),p.outFields=e,p.returnGeometry=!1),m.suspended&&(c=!1)}catch{c=!1}if(!c&&(h=await this._fetchFeaturesForStats({field:i,valueExpression:n,normalizationField:s,returnGeometry:o,view:a,signal:u},"json"),!h?.length))throw new r("feature-layer-adapter:insufficient-data","No features are available to calculate statistics");return{layerView:m,query:p,featuresJSON:h}}_uvFromGenRenderer(e,t){const r=e.field,a=new w;a.attributeField=r;const i=new F;return i.classificationDefinition=a,this.generateRenderer(i,e.signal).then((e=>{const t={},a=this.getField(r);return e.uniqueValues.forEach((e=>{let r=e.value;null!=r&&""!==r&&("string"!=typeof r||""!==r.trim()&&"<null>"!==r.toLowerCase())||(r=null),null==t[r]?t[r]={count:e.count,data:y(a)&&r?Number(r):r}:t[r].count=t[r].count+e.count})),{count:t}})).then((r=>W(r,t,e.returnAllCodedValues)))}_getUVQuery(e){const t=e.field,r=e.sqlExpression,a="countOF"+(t||"Expr"),i=new S;i.statisticType="count",i.onStatisticField=r?"1":t,i.outStatisticFieldName=a;const s=this.layer.createQuery();return s.where=j(s.where,e.sqlWhere),s.sqlFormat=r?"standard":null,s.outStatistics=[i],s.groupByFieldsForStatistics=[t||r],s}_uvFromServiceQuery(e,t){return this._isStatsSupportedOnService().then((()=>this.layer.queryFeatures(this._getUVQuery(e),{signal:e.signal}))).then((t=>I(t,this,e.field,e.view,null,e.signal))).then((r=>W(r,t,e.returnAllCodedValues)))}async _uvFromClientQuery(e,t){const{signal:r}=e,a=this._getUVQuery(e),i=await this.layer.queryFeatures(a,{signal:r}),s=await I(i,this,e.field,e.view,null,r);return W(s,t,e.returnAllCodedValues)}async _uvFromMemory(e,t){const{view:r,field:a,valueExpression:i,returnAllCodedValues:s,signal:n}=e,{featuresJSON:o,graphics:l,layerView:u,query:m}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryUniqueValues"}),c={field:a,valueExpression:i,domain:t,returnAllCodedValues:s};return i&&r&&o&&(c.viewInfoParams=P(r)),!o&&!l&&u&&"queryUniqueValues"in u?u.queryUniqueValues(m,c,{signal:n}):o?this.workerClient.uniqueValues(c,o):z({attribute:c,features:l})}_calcBinsSQL(e,t,r){const a=[],i=t.length;return t.forEach(((t,s)=>{const[n,o]=t;let l=null;l=0!==s||r?s!==i-1||r?j(`${e} >= ${n}`,`${e} ${s===i-1?" <= ":" < "} ${o}`):`${e} >= ${n}`:`${e} < ${o}`,a.push("WHEN ("+l+") THEN "+(s+1))})),["CASE",a.join(" "),"ELSE 0","END"].join(" ")}_getNormalizationTotal(e,t,r){return e&&"percent-of-total"===t?this.summaryStatistics({field:e,signal:r}).then((e=>e.sum)):Promise.resolve(null)}_getQueryParamsForExpr(e,t){const r=e.valueExpression||e.sqlExpression,a=e.signal;if(!r){const{field:r,normalizationType:i,normalizationField:s}=e,n=r?this.getField(r):null,o=f(n),l={field:r,normalizationType:i,normalizationField:s,normalizationTotal:t,layer:this};return{sqlExpression:o?b(this,r):B(l),sqlWhere:o?null:e.sqlWhere||L({field:r,normalizationType:i,normalizationField:s}),signal:a}}return{valueExpression:e.valueExpression,sqlExpression:e.sqlExpression,sqlWhere:e.sqlWhere,signal:a}}_getDataRange(e,t,r){return null!=t&&null!=r?Promise.resolve({min:t,max:r}):this.summaryStatistics(e).then((e=>({min:e.min,max:e.max})))}_histogramForExpr(e){return this._getNormalizationTotal(e.field,e.normalizationType,e.signal).then((t=>{const r=this._getQueryParamsForExpr(e,t);return this._getDataRange(r,e.minValue,e.maxValue).then((a=>{const{min:i,max:s}=a,n=e.numBins||ee,o=$(i,s,n),l=this._calcBinsSQL(r.sqlExpression,o,null!=e.minValue&&null!=e.maxValue),u=new S({statisticType:"count",outStatisticFieldName:"countOFExpr",onStatisticField:"1"}),m=this.layer.createQuery();return m.where=j(m.where,r.sqlWhere),m.sqlFormat="standard",m.outStatistics=[u],m.groupByFieldsForStatistics=[l],m.orderByFields=[l],this._isStatsSupportedOnService().then((()=>this.layer.queryFeatures(m,{signal:r.signal}))).then((e=>R(e,i,s,n,t)))}))}))}_histogramForField(e){let t=null;return t=null!=e.minValue&&null!=e.maxValue?Promise.resolve({min:e.minValue,max:e.maxValue}):this.summaryStatistics(e).then((e=>{if(!e.count)throw new r("feature-layer-adapter:insufficient-data","Either the layer has no features or none of the features have data for the field");return{min:e.min,max:e.max}})),t.then((t=>this._getBins({min:t.min,max:t.max},e.field,e.numBins,e.view,e.signal)))}_getBins(e,t,r=ee,a,i){const{min:s,max:n,normTotal:o,excludeZerosExpr:l}=e,u=e.intervals||$(s,n,r),m=e.sqlExpr||t;return this._queryBins(u,m,l,a,i).then((e=>({bins:e.map(((e,t)=>({minValue:u[t][0],maxValue:u[t][1],count:e.value}))),minValue:s,maxValue:n,normalizationTotal:o})))}_queryBins(e,t,r,a,i){const s=[],o=e.length;for(let n=0;n<o;n++){const a=j(r,j(t+" >= "+e[n][0],null!==e[n][1]?t+(n===o-1?" <= ":" < ")+e[n][1]:""));s.push(a)}return n(s.map((e=>this.queryFeatureCount({whereClause:e,view:a,signal:i}))))}_binParamsFromGenRend(e,t){const{field:r,normalizationType:a,normalizationField:i,signal:s}=e,n=L({field:r,normalizationType:a,normalizationField:i}),o=new F({classificationDefinition:H({field:r,normalizationType:a,normalizationField:i,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numBins||ee}),where:j(n,t)});return this.generateRenderer(o,s).then((e=>{const{normalizationTotal:t,classBreaks:s}=e;return D({field:r,normalizationType:a,normalizationField:i,normalizationTotal:t,classBreaks:s,where:n,layer:this})}))}async _histogramFromMemory(e){const{view:t,field:r,signal:a}=e,{featuresJSON:i,graphics:s,layerView:n,query:o}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryHistogram"}),l={field:r,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&i&&(l.viewInfoParams=P(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:i,graphics:s,layerView:n,query:o},a)),!i&&!s&&n&&"queryHistogram"in n?n.queryHistogram(o,l,{signal:a}):i?this.workerClient.histogram(l,i):q({attribute:l,features:s})}_classBreaksFromGenRend(e){const{field:t,normalizationType:r,normalizationField:a,normalizationTotal:i,signal:s}=e,n=L({field:t,normalizationType:r,normalizationField:a}),o=B({field:t,normalizationType:r,normalizationField:a,normalizationTotal:i,layer:this}),l=E(o,e.minValue,e.maxValue),u=H({field:t,normalizationType:r,normalizationField:a,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numClasses||Y}),m=new F;return m.classificationDefinition=u,m.where=j(n,l),this.generateRenderer(m,s).then((t=>Z(t,e.classificationMethod)))}_classBreaksFromInterpolation(e){const{minValue:t,maxValue:r}=e,a=e.numClasses||Y,i=[],s=(r-t)/a;for(let l=0;l<a;l++){const e=t+l*s;i.push({minValue:e,maxValue:e+s})}i[a-1].maxValue=r;const n={classBreaks:i,normalizationTotal:e.normalizationTotal},o=Z(n,e.classificationMethod);return Promise.resolve(o)}async _classBreaksFromMemory(e){const{view:t,field:r,signal:a}=e,{featuresJSON:i,graphics:s,layerView:n,query:o}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryClassBreaks"}),l={field:r,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&i&&(l.viewInfoParams=P(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:i,graphics:s,layerView:n,query:o},a)),!i&&!s&&n&&"queryClassBreaks"in n?n.queryClassBreaks(o,l,{signal:a}):i?this.workerClient.classBreaks(l,i):V({attribute:l,features:s})}async _heatmapStatsFromMemory(e,t){const{view:r,field:a,radius:i}=e,{featuresJSON:s,graphics:n}=await this._processStatsFromMemoryParams({...e,returnGeometry:!0}),o=new g({extent:r.extent,tolerance:"2d"===r.type?r.state.resolution:r.overlayPixelSizeInMapUnits(r.pointsOfInterest.centerOnSurfaceFrequent.location)}),l={field:a,fieldOffset:t,radius:i,transform:c(o),spatialReference:r.spatialReference?.toJSON(),size:r.size};return s?.length||n?.length?s?this.workerClient.heatmapStatistics(l,s):T({attribute:l,features:n}):{count:0,min:null,max:null,avg:null,stddev:null}}getField(e=""){return this.layer.getField(e)}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!0,supportsStatistics:!0}:null}getFieldDomain(e,t){return this.layer.getFieldDomain(e,t)}summaryStatistics(e){const{field:t,normalizationType:a,sqlExpression:i,view:s,features:n,useFeaturesInView:l}=e,u=t?this.getField(t):null,m=f(u),c=e.valueExpression||i,p=c&&!i,h=this._hasLocalSource||n||l,d=s&&"3d"===s.type;if(h||p)return p||n||l||d?this._summaryStatsFromMemory(e,u):this._summaryStatsFromClientQuery(e,m);if(!this.supportsSQLExpression&&(m||c||"natural-log"===a||"square-root"===a))return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support standardized SQL expression for queries"));return(a&&!this.supportsSQLExpression?this._summaryStatsFromGenRend(e):this._summaryStatsFromServiceQuery(e,m)).catch((()=>(o(e.signal),this._summaryStatsFromMemory(e,u))))}uniqueValues(e){const{field:t,valueExpression:r,sqlExpression:a,features:i,useFeaturesInView:s,signal:n}=e,l=(t?this.getField(t):null)&&this.getFieldDomain(t),u=r&&(!a||!this.supportsSQLExpression),m=this._hasLocalSource||i||s||u,c=e.view,p=c&&"3d"===c.type;return m?u||i||s||p?this._uvFromMemory(e,l):this._uvFromClientQuery(e,l):this._uvFromServiceQuery(e,l).catch((t=>(o(n),e.field?this._uvFromGenRenderer(e,l):t))).catch((()=>(o(n),p?this._uvFromMemory(e,l):this._uvFromClientQuery(e,l))))}histogram(e){const{field:t,normalizationType:a,normalizationField:i,classificationMethod:s,view:n,signal:o}=e,l=t?this.getField(t):null,u=f(l),m=e.valueExpression||e.sqlExpression,c=m&&!e.sqlExpression,p=this._hasLocalSource||e.features||e.useFeaturesInView||c,h=this.supportsSQLExpression,d=!s||"equal-interval"===s,y=e.minValue,F=e.maxValue,g=null!=y&&null!=F,S=e.numBins||ee;return p?this._histogramFromMemory(e):(m||h)&&d?h||!m&&"natural-log"!==a&&"square-root"!==a?this._histogramForExpr(e):Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support standardized SQL expression for queries")):u&&d?Promise.reject(new r("feature-layer-adapter:not-supported","Normalization and date field are not allowed when layer does not support standardized SQL expression for queries")):a||!d?this._binParamsFromGenRend(e).then((s=>{if(!g)return this._getBins(s,t,S,n,o);if(y>s.max||F<s.min)throw new r("histogram:insufficient-data","Range defined by 'minValue' and 'maxValue' does not intersect available data range of the field");if(d)return this._getBins({min:y,max:F,sqlExpr:s.sqlExpr,excludeZerosExpr:s.excludeZerosExpr},t,S,n,o);{const r={field:t,normalizationType:a,normalizationField:i,normalizationTotal:s.normTotal,layer:this},l=B(r),u=E(l,y,F);return this._binParamsFromGenRend(e,u).then((e=>this._getBins(e,t,S,n,o)))}})):this._histogramForField(e)}classBreaks(e){const t=!1!==e.analyzeData,r=this._hasLocalSource||e.features||e.useFeaturesInView||e.valueExpression;if(t&&r)return this._classBreaksFromMemory(e);return(t?this._classBreaksFromGenRend(e):this._classBreaksFromInterpolation(e)).catch((()=>(o(e.signal),this._classBreaksFromMemory(e))))}queryFeatureCount(e){if(this._hasLocalSource)return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support count query"));const t=this.layer,a=t.createQuery();return a.where=j(a.where,e.whereClause),t.queryFeatureCount(a,{signal:e.signal})}generateRenderer(e,t){const a=this.layer;if(this._hasLocalSource||a.version<10.1)return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support generateRenderer operation (requires ArcGIS Server version 10.1+)"));const i=new K({url:a.parsedUrl.path,source:a.dynamicDataSource,gdbVersion:a.gdbVersion}),s=a.createQuery();return e.where=j(e.where,s.where),i.execute(e,{signal:t})}heatmapStatistics(e){const{field:t,fieldOffset:r,view:a,signal:i}=e;return(t&&null==r?this.summaryStatistics({field:t,view:a,signal:i}):Promise.resolve(null)).then((t=>{let a=r||0;if(t){const{count:e,min:r,max:i}=t;e?r===i&&0===r?a=1:i<=0?a="abs":r<0&&(a=-1.01*r):a=1}return this._heatmapStatsFromMemory(e,a).then((e=>({...e,summaryStatistics:t,fieldOffset:a})))}))}async predominantCategories(e){if(!this._hasLocalSource&&!this.supportsSQLExpression)throw new r("feature-layer-adapter:not-supported","Layer does not support advanced SQL expressions and standardized queries");const{fields:t,view:a,signal:i}=e,s=v(t),n=x(t),o=a&&this._hasLocalSource?await this._uvFromMemory({valueExpression:s,view:a,signal:i}):await this._uvFromServiceQuery({sqlExpression:n.expression,valueExpression:s,signal:i});return G(o.uniqueValueInfos,t)}async getSampleFeatures(e,r){const{view:a,sampleSize:i,requiredFields:s,returnGeometry:n,signal:l}=e,u=this.layer.createQuery(),m=1,c="json"===r;u.outSpatialReference=e.spatialReference||a&&a.spatialReference,u.returnGeometry=!!n,u.outFields=s;let p=[],h=!1;if(a)try{const e=await a.whenLayerView(this.layer);if(h=!(await k(this,s,e)).length,h&&(p=await this._fetchFeaturesFromMemory(e,u,l,r),p.length&&i>0&&i<=p.length))return t(p,i,m)}catch(d){o(l)}try{if(this._hasLocalSource)return h?p:c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l);const r=await this.queryFeatureCount({view:a,signal:l}),s=this.layer.capabilities.query.maxRecordCount;let n=-1===i?r:i;if(n=s&&n>s?s:n,r<=p.length||p.length>=s)return p;const o=a.extent.width/a.width/a.scale*re;if(u.maxAllowableOffset=e.resolution||o,r<=n)return c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l);if(r<=te){const e=await this.layer.queryObjectIds();return u.objectIds=t(e,n,m),c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l)}return this.layer.get("capabilities.query.supportsPagination")&&(u.num=Math.min(n,te)),c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l)}catch(d){return o(l),p}}load(e){const t=this.layer.load(e).then((async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.get("capabilities.query.supportsSqlExpression"),this._hasLocalSource=!t.url&&!!t.source,this.hasQueryEngine=this._hasLocalSource,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=C.getInstance(),await this.workerClient.open(i(i(e).signal))}));return this.addResolvingPromise(t),Promise.resolve(this)}};e([u({constructOnly:!0})],ae.prototype,"layer",void 0),ae=e([m("esri.smartMapping.support.adapters.FeatureLayerAdapter")],ae);const ie=ae;export{ie as default};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import{pickRandom as t}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import a from"../../../core/Logger.js";import{unwrap as i}from"../../../core/maybe.js";import{timeout as s,eachAlways as n,throwIfAborted as o}from"../../../core/promiseUtils.js";import{whenOnce as l}from"../../../core/reactiveUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{toQuantizationTransform as c}from"../../../geometry/support/quantizationUtils.js";import{isHostedAgolService as p}from"../../../layers/support/arcgisLayerUrl.js";import{kebabDict as h}from"../../../layers/support/fieldType.js";import{isStringField as d,isNumericField as y,isDateField as f}from"../../../layers/support/fieldUtils.js";import F from"../../../rest/support/GenerateRendererParameters.js";import g from"../../../rest/support/QuantizationParameters.js";import S from"../../../rest/support/StatisticDefinition.js";import w from"../../../rest/support/UniqueValueDefinition.js";import{getArcadeForPredominantCategory as v,getSQLForPredominantCategoryName as x}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as _,uniqueValues as z,histogram as q,classBreaks as V,heatmapStatistics as T}from"../../statistics/support/statsWorker.js";import{getRangeExpr as E,getSQLFilterForNormalization as L,mergeWhereClauses as j}from"../../statistics/support/utils.js";import{WorkerClient as C}from"../../statistics/support/WorkerClient.js";import{getFieldsList as Q}from"../utils.js";import M from"./LayerAdapter.js";import{ensureFeaturesJSON as N,msSinceUnixEpochSQL as b,getFieldExpr as B,getSummaryStatisticsFromFeatureSet as k,getViewInfoParams as P,getMissingFields as O,getUniqueValuesFromFeatureSet as I,getHistogramFromFeatureSet as R,generateBinParams as D,getPredominantCategoriesFromUVInfos as G}from"./support/utils.js";import{processSummaryStatisticsResult as J,isNullCountSupported as U,statisticTypes as A,createUVResult as W,getEqualIntervalBins as $,createClassBreaksDefinition as H,resolveCBResult as Z}from"../../../statistics/utils.js";import K from"../../../tasks/GenerateRendererTask.js";const X=a.getLogger("esri.smartMapping.support.adapters.FeatureLayerAdapter"),Y=5,ee=10,te=2e4,re=4e5;let ae=class extends M{constructor(e){super(e)}destroy(){this._hasLocalSource=null,this.workerClient?.destroy()}_isStatsSupportedOnService(){const e=this.layer;return!e.get("capabilities.query.supportsStatistics")||"multipatch"===this.geometryType&&!p(e.url)&&e.version<10.5?Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support statistics query")):Promise.resolve()}async _waitForLayerViewUpdate(e){if(!e)throw new r("feature-layer-adapter:insufficient-data","layerView is required to fetch the features");const t=new AbortController,a=l((()=>!e.updating),t.signal);await s(a,5e3,t).catch((e=>{throw X.warn("LayerView is taking too long to update. Aborting fetch from layerView."),e}))}async _fetchFeaturesFromMemory(e,t,r,a){const i=this.layer,s="json"===a;if(this._hasLocalSource){const e=await i.queryFeatures(t);return s?N(e.features):e.features}if(await this._waitForLayerViewUpdate(e),s&&"queryFeaturesJSON"in e&&e.queryFeaturesJSON){const{features:a}=await e.queryFeaturesJSON(t,{signal:r});return a}const n=await e.queryFeatures(t,{signal:r});return s?N(n.features):n.features}_fetchFeaturesFromService(e,t){return this.layer.queryFeatures(e,{signal:t}).then((e=>e.features))}_fetchFeaturesJSONFromService(e,t){return this._fetchFeaturesFromService(e,t).then(N)}_fetchFeaturesForStats(e,t){return Q({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then((r=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:r,signal:e.signal},t)))}_summaryStatsFromGenRend(e){const t=e.normalizationType,r=e.normalizationField;return this.classBreaks({field:e.field,numClasses:Y,classificationMethod:"standard-deviation",standardDeviationInterval:.25,normalizationType:t,normalizationField:"field"===t?r:void 0,minValue:e.minValue,maxValue:e.maxValue,signal:e.signal}).then((e=>{let t,r,a;if(e.classBreakInfos.some((e=>(e.hasAvg&&(t=e),!!t))),t){const e=t.maxValue-t.minValue;r=t.minValue+e/2,a=4*e}const i={min:e.minValue,max:e.maxValue,avg:r,stddev:a};return J(i)}))}_getSummaryStatsQuery(e,t){const{field:r,normalizationType:a,normalizationField:i,normalizationTotal:s,minValue:n,maxValue:o}=e,l=this.supportsSQLExpression&&t?b(this,r):e.sqlExpression,u=B({field:r,normalizationType:a,normalizationField:i,normalizationTotal:s,layer:this}),m=l||u,c=m?E(m,n,o):null,p=L({field:r,normalizationField:i,normalizationType:a}),h=j(e.sqlWhere,p),y=j(h,c),f=U({normalizationField:i,normalizationType:a,sqlExpression:l,supportsSQLExpression:this.supportsSQLExpression,minValue:n,maxValue:o}),F=d(this.getField(r)),g=A.filter((e=>"nullcount"===e?f:!F||"count"===e)),w=this.layer.createQuery();return w.where=j(w.where,y),w.sqlFormat=l?"standard":null,w.outStatistics=g.map((e=>{const t=new S;let r=null,a=null,i=`${e}_value`;return"variance"===e?(r="var",a=m):"nullcount"===e?(r="count",a=this.layer.objectIdField,i="totalcount_value"):"median"===e?(r="percentile-continuous",a=m,t.statisticParameters={value:.5}):(r=e,a=m),t.statisticType=r,t.onStatisticField=a,t.outStatisticFieldName=i,t})),w}async _summaryStatsFromServiceQuery(e,t){await this._isStatsSupportedOnService(),"percent-of-total"===e.normalizationType&&(e.normalizationTotal=await this._getNormalizationTotal(e.field,e.normalizationType));const r=this._getSummaryStatsQuery(e,t),a=await this.layer.queryFeatures(r,{signal:e.signal}),i=k(a,t);return J(i)}async _summaryStatsFromClientQuery(e,t){const r=this._getSummaryStatsQuery(e,t),a=await this.layer.queryFeatures(r,{signal:e.signal}),i=k(a,t);return J(i)}async _getNormalizationTotalFromMemory(e,t,a){const{featuresJSON:i,graphics:s,layerView:n,query:o}=t,l=(!i&&!s&&n&&"querySummaryStatistics"in n?await n.querySummaryStatistics(o,{field:e},{signal:a}):i?await this.workerClient.summaryStatistics({field:e},i):await _({attribute:{field:e},features:s})).sum;if(null==l)throw new r("feature-layer-adapter:invalid","invalid normalizationTotal");return l}async _summaryStatsFromMemory(e,t){const{view:r,field:a,valueExpression:i,normalizationType:s,signal:n}=e,o={field:a,valueExpression:i,normalizationType:s,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue},{featuresJSON:l,graphics:u,layerView:m,query:c}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"querySummaryStatistics"});return i&&r&&(l||u)&&(o.fieldType=t?.type?h.toJSON(t.type):null,o.viewInfoParams=P(r)),"percent-of-total"===s&&null==e.normalizationTotal&&(o.normalizationTotal=await this._getNormalizationTotalFromMemory(a,{featuresJSON:l,graphics:u,layerView:m,query:c},n)),!l&&!u&&m&&"querySummaryStatistics"in m?m.querySummaryStatistics(c,o,{signal:n}):l?this.workerClient.summaryStatistics(o,l):_({attribute:o,features:u})}async _processStatsFromMemoryParams(e){const t=e.features;if(t?.length){return t.length&&"declaredClass"in t[0]&&"esri.Graphic"===t[0].declaredClass?{graphics:t}:{featuresJSON:t}}const{view:a,field:i,normalizationField:s,valueExpression:n,returnGeometry:o,layerViewFunc:l,signal:u}=e;let m=null,c=null,p=null,h=null;if(a)try{m=await a.whenLayerView(this.layer),c=l in m&&"function"==typeof m[l]}catch{c=!1}if(c)try{await this._waitForLayerViewUpdate(m);const e=await Q({field:i,normalizationField:s,valueExpression:n});(await O(this,e,m)).length?c=!1:(p=this.layer.createQuery(),p.outFields=e,p.returnGeometry=!1),m.suspended&&(c=!1)}catch{c=!1}if(!c&&(h=await this._fetchFeaturesForStats({field:i,valueExpression:n,normalizationField:s,returnGeometry:o,view:a,signal:u},"json"),!h?.length))throw new r("feature-layer-adapter:insufficient-data","No features are available to calculate statistics");return{layerView:m,query:p,featuresJSON:h}}_uvFromGenRenderer(e,t){const r=e.field,a=new w;a.attributeField=r;const i=new F;return i.classificationDefinition=a,this.generateRenderer(i,e.signal).then((e=>{const t={},a=this.getField(r);return e.uniqueValues.forEach((e=>{let r=e.value;null!=r&&""!==r&&("string"!=typeof r||""!==r.trim()&&"<null>"!==r.toLowerCase())||(r=null),null==t[r]?t[r]={count:e.count,data:y(a)&&r?Number(r):r}:t[r].count=t[r].count+e.count})),{count:t}})).then((r=>W(r,t,e.returnAllCodedValues)))}_getUVQuery(e){const t=e.field,r=e.sqlExpression,a="countOF"+(t||"Expr"),i=new S;i.statisticType="count",i.onStatisticField=r?"1":t,i.outStatisticFieldName=a;const s=this.layer.createQuery();return s.where=j(s.where,e.sqlWhere),s.sqlFormat=r?"standard":null,s.outStatistics=[i],s.groupByFieldsForStatistics=[t||r],s}_uvFromServiceQuery(e,t){return this._isStatsSupportedOnService().then((()=>this.layer.queryFeatures(this._getUVQuery(e),{signal:e.signal}))).then((t=>I(t,this,e.field,e.view,null,e.signal))).then((r=>W(r,t,e.returnAllCodedValues)))}async _uvFromClientQuery(e,t){const{signal:r}=e,a=this._getUVQuery(e),i=await this.layer.queryFeatures(a,{signal:r}),s=await I(i,this,e.field,e.view,null,r);return W(s,t,e.returnAllCodedValues)}async _uvFromMemory(e,t){const{view:r,field:a,valueExpression:i,returnAllCodedValues:s,signal:n}=e,{featuresJSON:o,graphics:l,layerView:u,query:m}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryUniqueValues"}),c={field:a,valueExpression:i,domain:t,returnAllCodedValues:s};return i&&r&&o&&(c.viewInfoParams=P(r)),!o&&!l&&u&&"queryUniqueValues"in u?u.queryUniqueValues(m,c,{signal:n}):o?this.workerClient.uniqueValues(c,o):z({attribute:c,features:l})}_calcBinsSQL(e,t,r){const a=[],i=t.length;return t.forEach(((t,s)=>{const[n,o]=t;let l=null;l=0!==s||r?s!==i-1||r?j(`${e} >= ${n}`,`${e} ${s===i-1?" <= ":" < "} ${o}`):`${e} >= ${n}`:`${e} < ${o}`,a.push("WHEN ("+l+") THEN "+(s+1))})),["CASE",a.join(" "),"ELSE 0","END"].join(" ")}_getNormalizationTotal(e,t,r){return e&&"percent-of-total"===t?this.summaryStatistics({field:e,signal:r}).then((e=>e.sum)):Promise.resolve(null)}_getQueryParamsForExpr(e,t){const r=e.valueExpression||e.sqlExpression,a=e.signal;if(!r){const{field:r,normalizationType:i,normalizationField:s}=e,n=r?this.getField(r):null,o=f(n),l={field:r,normalizationType:i,normalizationField:s,normalizationTotal:t,layer:this};return{sqlExpression:o?b(this,r):B(l),sqlWhere:o?null:e.sqlWhere||L({field:r,normalizationType:i,normalizationField:s}),signal:a}}return{valueExpression:e.valueExpression,sqlExpression:e.sqlExpression,sqlWhere:e.sqlWhere,signal:a}}_getDataRange(e,t,r){return null!=t&&null!=r?Promise.resolve({min:t,max:r}):this.summaryStatistics(e).then((e=>({min:e.min,max:e.max})))}_histogramForExpr(e){return this._getNormalizationTotal(e.field,e.normalizationType,e.signal).then((t=>{const r=this._getQueryParamsForExpr(e,t);return this._getDataRange(r,e.minValue,e.maxValue).then((a=>{const{min:i,max:s}=a,n=e.numBins||ee,o=$(i,s,n),l=this._calcBinsSQL(r.sqlExpression,o,null!=e.minValue&&null!=e.maxValue),u=new S({statisticType:"count",outStatisticFieldName:"countOFExpr",onStatisticField:"1"}),m=this.layer.createQuery();return m.where=j(m.where,r.sqlWhere),m.sqlFormat="standard",m.outStatistics=[u],m.groupByFieldsForStatistics=[l],m.orderByFields=[l],this._isStatsSupportedOnService().then((()=>this.layer.queryFeatures(m,{signal:r.signal}))).then((e=>R(e,i,s,n,t)))}))}))}_histogramForField(e){let t=null;return t=null!=e.minValue&&null!=e.maxValue?Promise.resolve({min:e.minValue,max:e.maxValue}):this.summaryStatistics(e).then((e=>{if(!e.count)throw new r("feature-layer-adapter:insufficient-data","Either the layer has no features or none of the features have data for the field");return{min:e.min,max:e.max}})),t.then((t=>this._getBins({min:t.min,max:t.max},e.field,e.numBins,e.view,e.signal)))}_getBins(e,t,r=ee,a,i){const{min:s,max:n,normTotal:o,excludeZerosExpr:l}=e,u=e.intervals||$(s,n,r),m=e.sqlExpr||t;return this._queryBins(u,m,l,a,i).then((e=>({bins:e.map(((e,t)=>({minValue:u[t][0],maxValue:u[t][1],count:e.value}))),minValue:s,maxValue:n,normalizationTotal:o})))}_queryBins(e,t,r,a,i){const s=[],o=e.length;for(let n=0;n<o;n++){const a=j(r,j(t+" >= "+e[n][0],null!==e[n][1]?t+(n===o-1?" <= ":" < ")+e[n][1]:""));s.push(a)}return n(s.map((e=>this.queryFeatureCount({whereClause:e,view:a,signal:i}))))}_binParamsFromGenRend(e,t){const{field:r,normalizationType:a,normalizationField:i,signal:s}=e,n=L({field:r,normalizationType:a,normalizationField:i}),o=new F({classificationDefinition:H({field:r,normalizationType:a,normalizationField:i,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numBins||ee}),where:j(n,t)});return this.generateRenderer(o,s).then((e=>{const{normalizationTotal:t,classBreaks:s}=e;return D({field:r,normalizationType:a,normalizationField:i,normalizationTotal:t,classBreaks:s,where:n,layer:this})}))}async _histogramFromMemory(e){const{view:t,field:r,signal:a}=e,{featuresJSON:i,graphics:s,layerView:n,query:o}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryHistogram"}),l={field:r,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&i&&(l.viewInfoParams=P(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:i,graphics:s,layerView:n,query:o},a)),!i&&!s&&n&&"queryHistogram"in n?n.queryHistogram(o,l,{signal:a}):i?this.workerClient.histogram(l,i):q({attribute:l,features:s})}_classBreaksFromGenRend(e){const{field:t,normalizationType:r,normalizationField:a,normalizationTotal:i,signal:s}=e,n=L({field:t,normalizationType:r,normalizationField:a}),o=B({field:t,normalizationType:r,normalizationField:a,normalizationTotal:i,layer:this}),l=E(o,e.minValue,e.maxValue),u=H({field:t,normalizationType:r,normalizationField:a,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numClasses||Y}),m=new F;return m.classificationDefinition=u,m.where=j(n,l),this.generateRenderer(m,s).then((t=>Z(t,e.classificationMethod)))}_classBreaksFromInterpolation(e){const{minValue:t,maxValue:r}=e,a=e.numClasses||Y,i=[],s=(r-t)/a;for(let l=0;l<a;l++){const e=t+l*s;i.push({minValue:e,maxValue:e+s})}i[a-1].maxValue=r;const n={classBreaks:i,normalizationTotal:e.normalizationTotal},o=Z(n,e.classificationMethod);return Promise.resolve(o)}async _classBreaksFromMemory(e){const{view:t,field:r,signal:a}=e,{featuresJSON:i,graphics:s,layerView:n,query:o}=await this._processStatsFromMemoryParams({...e,layerViewFunc:"queryClassBreaks"}),l={field:r,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&i&&(l.viewInfoParams=P(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:i,graphics:s,layerView:n,query:o},a)),!i&&!s&&n&&"queryClassBreaks"in n?n.queryClassBreaks(o,l,{signal:a}):i?this.workerClient.classBreaks(l,i):V({attribute:l,features:s})}async _heatmapStatsFromMemory(e,t){const{view:r,field:a,radius:i}=e,{featuresJSON:s,graphics:n}=await this._processStatsFromMemoryParams({...e,returnGeometry:!0}),o=new g({extent:r.extent,tolerance:"2d"===r.type?r.state.resolution:r.pixelSizeAt(r.center)}),l={field:a,fieldOffset:t,radius:i,transform:c(o),spatialReference:r.spatialReference?.toJSON(),size:r.size};return s?.length||n?.length?s?this.workerClient.heatmapStatistics(l,s):T({attribute:l,features:n}):{count:0,min:null,max:null,avg:null,stddev:null}}getField(e=""){return this.layer.getField(e)}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!0,supportsStatistics:!0}:null}getFieldDomain(e,t){return this.layer.getFieldDomain(e,t)}summaryStatistics(e){const{field:t,normalizationType:a,sqlExpression:i,view:s,features:n,useFeaturesInView:l}=e,u=t?this.getField(t):null,m=f(u),c=e.valueExpression||i,p=c&&!i,h=this._hasLocalSource||n||l,d=s&&"3d"===s.type;if(h||p)return p||n||l||d?this._summaryStatsFromMemory(e,u):this._summaryStatsFromClientQuery(e,m);if(!this.supportsSQLExpression&&(m||c||"natural-log"===a||"square-root"===a))return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support standardized SQL expression for queries"));return(a&&!this.supportsSQLExpression?this._summaryStatsFromGenRend(e):this._summaryStatsFromServiceQuery(e,m)).catch((()=>(o(e.signal),this._summaryStatsFromMemory(e,u))))}uniqueValues(e){const{field:t,valueExpression:r,sqlExpression:a,features:i,useFeaturesInView:s,signal:n}=e,l=(t?this.getField(t):null)&&this.getFieldDomain(t),u=r&&(!a||!this.supportsSQLExpression),m=this._hasLocalSource||i||s||u,c=e.view,p=c&&"3d"===c.type;return m?u||i||s||p?this._uvFromMemory(e,l):this._uvFromClientQuery(e,l):this._uvFromServiceQuery(e,l).catch((t=>(o(n),e.field?this._uvFromGenRenderer(e,l):t))).catch((()=>(o(n),p?this._uvFromMemory(e,l):this._uvFromClientQuery(e,l))))}histogram(e){const{field:t,normalizationType:a,normalizationField:i,classificationMethod:s,view:n,signal:o}=e,l=t?this.getField(t):null,u=f(l),m=e.valueExpression||e.sqlExpression,c=m&&!e.sqlExpression,p=this._hasLocalSource||e.features||e.useFeaturesInView||c,h=this.supportsSQLExpression,d=!s||"equal-interval"===s,y=e.minValue,F=e.maxValue,g=null!=y&&null!=F,S=e.numBins||ee;return p?this._histogramFromMemory(e):(m||h)&&d?h||!m&&"natural-log"!==a&&"square-root"!==a?this._histogramForExpr(e):Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support standardized SQL expression for queries")):u&&d?Promise.reject(new r("feature-layer-adapter:not-supported","Normalization and date field are not allowed when layer does not support standardized SQL expression for queries")):a||!d?this._binParamsFromGenRend(e).then((s=>{if(!g)return this._getBins(s,t,S,n,o);if(y>s.max||F<s.min)throw new r("histogram:insufficient-data","Range defined by 'minValue' and 'maxValue' does not intersect available data range of the field");if(d)return this._getBins({min:y,max:F,sqlExpr:s.sqlExpr,excludeZerosExpr:s.excludeZerosExpr},t,S,n,o);{const r={field:t,normalizationType:a,normalizationField:i,normalizationTotal:s.normTotal,layer:this},l=B(r),u=E(l,y,F);return this._binParamsFromGenRend(e,u).then((e=>this._getBins(e,t,S,n,o)))}})):this._histogramForField(e)}classBreaks(e){const t=!1!==e.analyzeData,r=this._hasLocalSource||e.features||e.useFeaturesInView||e.valueExpression;if(t&&r)return this._classBreaksFromMemory(e);return(t?this._classBreaksFromGenRend(e):this._classBreaksFromInterpolation(e)).catch((()=>(o(e.signal),this._classBreaksFromMemory(e))))}queryFeatureCount(e){if(this._hasLocalSource)return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support count query"));const t=this.layer,a=t.createQuery();return a.where=j(a.where,e.whereClause),t.queryFeatureCount(a,{signal:e.signal})}generateRenderer(e,t){const a=this.layer;if(this._hasLocalSource||a.version<10.1)return Promise.reject(new r("feature-layer-adapter:not-supported","Layer does not support generateRenderer operation (requires ArcGIS Server version 10.1+)"));const i=new K({url:a.parsedUrl.path,source:a.dynamicDataSource,gdbVersion:a.gdbVersion}),s=a.createQuery();return e.where=j(e.where,s.where),i.execute(e,{signal:t})}heatmapStatistics(e){const{field:t,fieldOffset:r,view:a,signal:i}=e;return(t&&null==r?this.summaryStatistics({field:t,view:a,signal:i}):Promise.resolve(null)).then((t=>{let a=r||0;if(t){const{count:e,min:r,max:i}=t;e?r===i&&0===r?a=1:i<=0?a="abs":r<0&&(a=-1.01*r):a=1}return this._heatmapStatsFromMemory(e,a).then((e=>({...e,summaryStatistics:t,fieldOffset:a})))}))}async predominantCategories(e){if(!this._hasLocalSource&&!this.supportsSQLExpression)throw new r("feature-layer-adapter:not-supported","Layer does not support advanced SQL expressions and standardized queries");const{fields:t,view:a,signal:i}=e,s=v(t),n=x(t),o=a&&this._hasLocalSource?await this._uvFromMemory({valueExpression:s,view:a,signal:i}):await this._uvFromServiceQuery({sqlExpression:n.expression,valueExpression:s,signal:i});return G(o.uniqueValueInfos,t)}async getSampleFeatures(e,r){const{view:a,sampleSize:i,requiredFields:s,returnGeometry:n,signal:l}=e,u=this.layer.createQuery(),m=1,c="json"===r;u.outSpatialReference=e.spatialReference||a&&a.spatialReference,u.returnGeometry=!!n,u.outFields=s;let p=[],h=!1;if(a)try{const e=await a.whenLayerView(this.layer);if(h=!(await O(this,s,e)).length,h&&(p=await this._fetchFeaturesFromMemory(e,u,l,r),p.length&&i>0&&i<=p.length))return t(p,i,m)}catch(d){o(l)}try{if(this._hasLocalSource)return h?p:c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l);const r=await this.queryFeatureCount({view:a,signal:l}),s=this.layer.capabilities.query.maxRecordCount;let n=-1===i?r:i;if(n=s&&n>s?s:n,r<=p.length||p.length>=s)return p;const o=a.extent.width/a.width/a.scale*re;if(u.maxAllowableOffset=e.resolution||o,r<=n)return c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l);if(r<=te){const e=await this.layer.queryObjectIds();return u.objectIds=t(e,n,m),c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l)}return this.layer.get("capabilities.query.supportsPagination")&&(u.num=Math.min(n,te)),c?this._fetchFeaturesJSONFromService(u,l):this._fetchFeaturesFromService(u,l)}catch(d){return o(l),p}}load(e){const t=this.layer.load(e).then((async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.get("capabilities.query.supportsSqlExpression"),this._hasLocalSource=!t.url&&!!t.source,this.hasQueryEngine=this._hasLocalSource,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=C.getInstance(),await this.workerClient.open(i(i(e).signal))}));return this.addResolvingPromise(t),Promise.resolve(this)}};e([u({constructOnly:!0})],ae.prototype,"layer",void 0),ae=e([m("esri.smartMapping.support.adapters.FeatureLayerAdapter")],ae);const ie=ae;export{ie as default};
|
package/support/arcadeUtils.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../geometry.js";import{p as e,c as r,e as n,a as t,r as o,l as i,b as s,d as a,f as u,s as l,g as c}from"../chunks/arcade.js";export{h as arcade}from"../chunks/arcade.js";import f from"../arcade/Dictionary.js";export{default as Dictionary}from"../arcade/Dictionary.js";import p from"../arcade/Feature.js";export{default as arcadeFeature}from"../arcade/Feature.js";import{l as m,n as y,j as d,b as
|
|
5
|
+
import"../geometry.js";import{p as e,c as r,e as n,a as t,r as o,l as i,b as s,d as a,f as u,s as l,g as c}from"../chunks/arcade.js";export{h as arcade}from"../chunks/arcade.js";import f from"../arcade/Dictionary.js";export{default as Dictionary}from"../arcade/Dictionary.js";import p from"../arcade/Feature.js";export{default as arcadeFeature}from"../arcade/Feature.js";import{l as m,n as y,j as d,b as x,i as g,a as v,s as j,y as w,z as b}from"../chunks/languageUtils.js";import{clone as E}from"../core/lang.js";import{isSizeVariable as F}from"../renderers/visualVariables/support/sizeVariableUtils.js";import S from"../geometry/Point.js";import $ from"../geometry/Polygon.js";import R from"../geometry/Polyline.js";import z from"../geometry/Multipoint.js";import C from"../geometry/Extent.js";const M=/^\$(feature|aggregatedFeatures)\./i,P={vars:{$feature:"any",$view:"any"},spatialReference:null};function k(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}function I(e){return null==e?null:m(e)||y(e)?"array":d(e)?"date":x(e)?"text":g(e)?"boolean":v(e)?"number":e instanceof f?"dictionary":j(e)?"feature":e instanceof S?"point":e instanceof $?"polygon":e instanceof R?"polyline":e instanceof z?"multipoint":e instanceof C?"extent":w(e)?"featureSet":b(e)?"featureSetCollection":null}function A(r){if(!r)return null;try{return e(r)}catch(n){}return null}function D(e,n){const t="string"==typeof e?A(e):e;if(!t)return null;try{return n=n||E(P),r(t,n)}catch(o){}return null}function G(e,r){return{vars:{$feature:null==e?new p:p.createFromGraphic(e),$view:r&&r.view},spatialReference:r&&r.sr}}function V(e,r,n){return p.createFromGraphicLikeObject(r,e,n)}function L(e,r){e.vars.$feature=r}function U(e,r){let t;try{t=n(e,r)}catch(o){t=null}return t}function q(e,r){let n;try{n=e?e(r):null}catch(t){n=null}return n}function O(e,r){try{return e?e(r):Promise.resolve(null)}catch(n){return Promise.resolve(null)}}function T(e,r){if(!e)return[];const n="string"==typeof e?A(e):e;if(!n)return[];const o=t(n);let i=new Array;o.forEach((e=>{M.test(e)&&(e=e.replace(M,""),i.push(e))}));const s=i.filter((e=>e.includes("*")));return i=i.filter((e=>!s.includes(e))),r&&s.forEach((e=>{const n=new RegExp(`^${e.split(/\*+/).map(k).join(".*")}$`,"i");r.forEach((e=>n.test(e)?i.push(e):null))})),[...new Set(i.sort())]}function B(e){return o(e,"$view")}function H(e,r){return!!e&&o(e,r)}function J(e){if(!e||null==e.spatialReference&&(null==e.scale||null==e.viewingMode))return;return{view:e.viewingMode&&null!=e.scale?new f({viewingMode:e.viewingMode,scale:e.scale}):null,sr:e.spatialReference}}function K({url:e,spatialReference:r,lrucache:n,interceptor:t}){const o=u();return o?o.createFeatureSetCollectionFromService(e,r,n,t):null}function N({layer:e,spatialReference:r,outFields:n,returnGeometry:t,lrucache:o,interceptor:i}){if(null===e)return null;const s=u();return s?s.constructFeatureSet(e,r,n,t??!0,o,i):null}function Q(e){if(null===e?.map)return null;const r=u();return r?r.createFeatureSetCollectionFromMap(e.map,e.spatialReference,e.lrucache,e.interceptor):null}function W(e,r,n=[]){return i(e,r,n)}function X(){return s()}function Y(){return a()}function Z(e){return"simple"===e.type||"class-breaks"===e.type||"unique-value"===e.type||"dot-density"===e.type||"dictionary"===e.type||"pie-chart"===e.type}function _(e){return"esri.layers.support.LabelClass"===e.declaredClass}function ee(e){return"esri.PopupTemplate"===e.declaredClass}function re(e,r){if(!e)return!1;if("string"==typeof e)return r(e);const n=e;if(Z(n)){if("dot-density"===n.type){const e=n.attributes.some((e=>r(e.valueExpression)));if(e)return e}const e=n.visualVariables,t=!!e&&e.some((e=>{let n=r(e.valueExpression);return"size"===e.type&&(F(e.minSize)&&(n=n||r(e.minSize.valueExpression)),F(e.maxSize)&&(n=n||r(e.maxSize.valueExpression))),n}));return!(!("valueExpression"in n)||!r(n.valueExpression))||t}if(_(n)){const e=n.labelExpressionInfo&&n.labelExpressionInfo.expression;return!(!e||!r(e))||!1}return!!ee(n)&&(!!n.expressionInfos&&n.expressionInfos.some((e=>r(e.expression)))||Array.isArray(n.content)&&n.content.some((e=>"expression"===e.type&&r(e.expressionInfo?.expression))))}function ne(e){const r=A(e);return!!r&&l(r)}function te(e){return re(e,ne)}function oe(e){const r=A(e);return!!r&&c(r)}function ie(e){return re(e,oe)}export{N as convertFeatureLayerToFeatureSet,Q as convertMapToFeatureSetCollection,K as convertServiceUrlToWorkspace,G as createExecContext,V as createFeature,D as createFunction,A as createSyntaxTree,B as dependsOnView,Y as enableFeatureSetOperations,X as enableGeometryOperations,U as evalSyntaxTree,O as executeAsyncFunction,q as executeFunction,T as extractFieldNames,I as getArcadeType,J as getViewInfo,te as hasGeometryFunctions,ie as hasGeometryOperations,H as hasVariable,W as loadScriptDependencies,L as updateExecContext};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isNone as e,isSome as t,unwrapOr as n}from"../core/maybe.js";import{getMetersPerUnit as o}from"../symbols/support/unitConversionUtils.js";function r(t,n){return e(n)||!n.mode?t?"absolute-height":"on-the-ground":n.mode}function
|
|
5
|
+
import{isNone as e,isSome as t,unwrapOr as n}from"../core/maybe.js";import{getMetersPerUnit as o}from"../symbols/support/unitConversionUtils.js";function r(t,n){return e(n)||!n.mode?t?"absolute-height":"on-the-ground":n.mode}function s(e,n){return r(!!t(e)&&e.hasZ,n)}function i(e){const t=l(e);return s(e.geometry,t)}function u(e){const r=l(e),i=s(e.geometry,r);return{mode:i,offset:t(r)&&"on-the-ground"!==i?n(r.offset,0)*o(n(r.unit,"meters")):0}}function a(e){if("on-the-ground"===i(e))return!1;const n=l(e),o=t(n)&&n.featureExpressionInfo?n.featureExpressionInfo.expression:null;return!(!o||"0"===o)}function l(e){return e.layer&&"elevationInfo"in e.layer?e.layer.elevationInfo:null}function c(o,r,s){if(e(s)||!s.mode)return;const i=o.hasZ?o.z:0,u=t(s.offset)?s.offset:0;switch(s.mode){case"absolute-height":return i-u;case"on-the-ground":return 0;case"relative-to-ground":return i-(n(r.elevationProvider.getElevation(o.x,o.y,o.z,o.spatialReference,"ground"),0)+u);case"relative-to-scene":return i-(n(r.elevationProvider.getElevation(o.x,o.y,o.z,o.spatialReference,"scene"),0)+u)}}function f(e,t,n,o=null){return g(e,t.x,t.y,t.hasZ?t.z:0,t.spatialReference,n,o)}function v(e,t,n,o,r=null){return g(e,t[0],t[1],t.length>2?t[2]:0,n,o,r)}function g(n,o,r,s,i,u,a=null){if(e(u))return;const l=t(a)?a.mode:"absolute-height";if("on-the-ground"===l)return 0;const{absoluteZ:c}=d(o,r,s,i,n,u);return h(c,o,r,s,i,n,a,l)}function d(e,o,r,s,i,u){const a=t(u.offset)?u.offset:0;switch(u.mode){case"absolute-height":return{absoluteZ:r+a,elevation:0};case"on-the-ground":{const t=n(i.elevationProvider.getElevation(e,o,0,s,"ground"),0);return{absoluteZ:t,elevation:t}}case"relative-to-ground":{const t=n(i.elevationProvider.getElevation(e,o,r,s,"ground"),0);return{absoluteZ:r+t+a,elevation:t}}case"relative-to-scene":{const t=n(i.elevationProvider.getElevation(e,o,r,s,"scene"),0);return{absoluteZ:r+t+a,elevation:t}}}}function h(e,o,r,s,i,u,a,l){const c=t(a)&&t(a.offset)?a.offset:0;switch(l){case"absolute-height":return e-c;case"relative-to-ground":return e-(n(u.elevationProvider.getElevation(o,r,s,i,"ground"),0)+c);case"relative-to-scene":return e-(n(u.elevationProvider.getElevation(o,r,s,i,"scene"),0)+c)}}const m={mode:"absolute-height",offset:0};export{m as absoluteHeightElevationInfo,f as getConvertedElevation,v as getConvertedElevationFromVector,r as getEffectiveElevationMode,s as getGeometryEffectiveElevationMode,u as getGraphicEffectiveElevationInfo,i as getGraphicEffectiveElevationMode,c as getZForElevationMode,a as hasGraphicFeatureExpressionInfo,d as zValueInAbsoluteHeightMode};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../core/maybe.js";import"../core/urlUtils.js";export{M as MarkKeep,f as fromJSON,i as itemIdFromResourceUrl,r as read,t as toJSON,w as write}from"../chunks/persistableUrlUtils.js";
|
|
5
|
+
import"../core/maybe.js";import"../core/urlUtils.js";export{M as MarkKeep,e as ensureMainOnlineDomain,f as fromJSON,i as itemIdFromResourceUrl,r as read,t as toJSON,w as write}from"../chunks/persistableUrlUtils.js";
|
package/support/revision.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
const
|
|
5
|
+
const b="20220610",c="b1bd209cb2bca89039d5b4ff6ece3697b2894693";export{b as buildDate,c as commitHash};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../Color.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{isSome as o}from"../../core/maybe.js";import{pt2px as r,px2pt as n}from"../../core/screenUtils.js";import{numericHash as l}from"../../core/string.js";import{createRendererExpression as a,ArcadeExpression as s}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as c,OverrideHelper as f}from"./CIMSymbolHelper.js";import{CapType as m,JoinType as p,Alignment as u}from"./enums.js";import{getExtent as y,getSDFMetrics as h}from"./SDFHelper.js";import{fromCIMColor as g,getValue as d,_adjustTextCase as S,createLabelOverrideFunction as v,evaluateValueOrFunction as N,isGeometryEngineRequired as b,importGeometryEngine as O}from"./utils.js";import{CIMEffectHelper as C}from"./effects/CIMEffectHelper.js";import k from"../../views/2d/arcade/callExpressionWithFeature.js";import{RANDOM_INSIDE_POLYGON_TEXTURE_SIZE as P}from"../../views/2d/engine/webgl/definitions.js";import{getFontFamily as M}from"../../views/2d/engine/webgl/fontUtils.js";import{getMaterialGroup as I}from"../../views/2d/engine/webgl/grouping.js";const w=i.getLogger("esri.symbols.cim.cimAnalyzer");function L(e){switch(e){case"Butt":return m.BUTT;case"Square":return m.SQUARE;default:return m.ROUND}}function X(e){switch(e){case"Bevel":return p.BEVEL;case"Miter":return p.MITER;default:return p.ROUND}}function z(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return w.warnOnce("Horizontal alignment 'justify' is not implemented. Falling back to 'center'."),"center"}}function A(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function R(e){let t="",i="";if(e){const o=e.toLowerCase();o.includes("italic")?t="italic":o.includes("oblique")&&(t="oblique"),o.includes("bold")?i="bold":o.includes("light")&&(i="lighter")}return{style:t,weight:i}}function J(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function x(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function H(e){const t=e.markerPlacement;return t&&t.angleToLine?u.MAP:u.SCREEN}async function Y(e,t,i,o,r){const n=o??[];if(!e)return n;let l,s;const c={};if("CIMSymbolReference"!==e.type)return w.error("Expect cim type to be 'CIMSymbolReference'"),n;if(l=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,n=a(r,t.spatialReference,t.fields).then((e=>{e&&x(c,i.primitiveName,i.propertyName,e)}));e.push(n)}else null!=i.value&&x(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(fe(l,i,f),f.length>0&&await Promise.all(f),l.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":$(l,s,c,t,n,i,r)}return n}function $(e,t,i,o,r,n,l){if(!e)return;const a=e.symbolLayers;if(!a)return;const s=e.effects;let m;const p=c.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(m=u.MAP);let y=a.length;for(;y--;){const c=a[y];if(!c||!1===c.enable)continue;let u;s&&s.length&&(u=[...s]);const h=c.effects;h&&h.length&&(s?u.push(...h):u=[...h]);const g=[];let d;f.findEffectOverrides(u,t,g),d=g.length>0?re(u,g,i,o):u;const S=[];switch(f.findApplicableOverrides(c,t,S),c.type){case"CIMSolidFill":E(c,d,i,S,o,r);break;case"CIMPictureFill":T(c,d,i,S,o,n,r);break;case"CIMHatchFill":j(c,d,i,S,o,r);break;case"CIMGradientFill":F(c,d,i,S,o,r);break;case"CIMSolidStroke":W(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMPictureStroke":D(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMGradientStroke":U(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMCharacterMarker":if(G(c,d,i,S,o,r))break;break;case"CIMPictureMarker":if(G(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=H(c)),B(c,d,i,S,o,n,r,m,p);break;case"CIMVectorMarker":if(G(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=H(c)),q(c,d,i,S,o,r,n,m,p,l);break;default:w.error("Cannot analyze CIM layer",c.type)}}}function E(e,t,i,o,r,n){const a=e.primitiveName,s=g(e.color),[c,f]=ce(o,a,t,null,null),m=l(JSON.stringify(e)+f).toString();n.push({type:"fill",templateHash:m,materialHash:c?()=>m:m,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:ie(a,i,"Color",r,s,te),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0})}function T(e,t,i,r,n,a,s){const c=e.primitiveName,f=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},[m,p]=ce(r,c,t,null,null),u=l(JSON.stringify(e)+p).toString(),y=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let h=d(e.scaleX);if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),h/=i*(e.height/t)}s.push({type:"fill",templateHash:u,materialHash:m?()=>y:y,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:ie(c,i,"TintColor",n,f,te),height:ie(c,i,"Height",n,e.height),scaleX:ie(c,i,"ScaleX",n,h),angle:ie(c,i,"Rotation",n,d(e.rotation)),offsetX:ie(c,i,"OffsetX",n,d(e.offsetX)),offsetY:ie(c,i,"OffsetY",n,d(e.offsetY)),url:e.url,applyRandomOffset:!1,sampleAlphaOnly:!1})}function j(e,t,i,o,r,n){const a=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&!a.includes(t.propertyName))),c=e.primitiveName,[f,m]=ce(o,c,t,null,null),p=l(JSON.stringify(e)+m).toString(),u=l(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();let y={r:255,g:255,b:255,a:1};if(e.lineSymbol){const t=e.lineSymbol?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(y=g(t.color))}n.push({type:"fill",templateHash:p,materialHash:f?ae(u,i,s,r):u,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:y,height:ie(c,i,"Separation",r,e.separation),scaleX:1,angle:ie(c,i,"Rotation",r,d(e.rotation)),offsetX:ie(c,i,"OffsetX",r,d(e.offsetX)),offsetY:ie(c,i,"OffsetY",r,d(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0})}function F(e,t,i,o,r,n){const a=e.primitiveName,[s,c]=ce(o,a,t,null,null),f=l(JSON.stringify(e)+c).toString();n.push({type:"fill",templateHash:f,materialHash:s?ae(f,i,o,r):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1,sampleAlphaOnly:!1})}function W(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=g(e.color),m=void 0!==e.width?e.width:4,p=L(e.capStyle),u=X(e.joinStyle),y=e.miterLimit,[h,d]=ce(o,c,t,null,null),S=l(JSON.stringify(e)+d).toString();let v,N;if(t&&t instanceof Array&&t.length>0){const e=t[t.length-1];if("CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&null===e.offsetAlongLine){const e=(t=[...t]).pop();v=e.dashTemplate,N=e.scaleDash}}n.push({type:"line",templateHash:S,materialHash:h?()=>S:S,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:ie(c,i,"Color",r,f,te),width:ie(c,i,"Width",r,m),cap:ie(c,i,"CapStyle",r,p),join:ie(c,i,"JoinStyle",r,u),miterLimit:ie(c,i,"MiterLimit",r,y),referenceWidth:s,zOrder:ee(e.name),dashTemplate:v,scaleDash:N,sampleAlphaOnly:!0})}function D(e,t,i,o,r,n,a,s){const c=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,m=g(e.tintColor),p=void 0!==e.width?e.width:4,u=L(e.capStyle),y=X(e.joinStyle),h=e.miterLimit,[d,S]=ce(o,f,t,null,null),v=l(JSON.stringify(e)+S).toString();n.push({type:"line",templateHash:v,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:ie(f,i,"TintColor",r,m,te),width:ie(f,i,"Width",r,p),cap:ie(f,i,"CapStyle",r,u),join:ie(f,i,"JoinStyle",r,y),miterLimit:ie(f,i,"MiterLimit",r,h),referenceWidth:s,zOrder:ee(e.name),dashTemplate:null,scaleDash:!1,url:e.url,sampleAlphaOnly:!1})}function U(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=L(e.capStyle),p=X(e.joinStyle),u=e.miterLimit,[y,h]=ce(o,c,t,null,null),g=l(JSON.stringify(e)+h).toString();n.push({type:"line",templateHash:g,materialHash:y?ae(g,i,o,r):g,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:ie(c,i,"Width",r,f),cap:ie(c,i,"CapStyle",r,m),join:ie(c,i,"JoinStyle",r,p),miterLimit:ie(c,i,"MiterLimit",r,u),referenceWidth:s,zOrder:ee(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}function G(e,t,i,o,r,a){const s=e.markerPlacement;if(!s||"CIMMarkerPlacementInsidePolygon"!==s.type)return!1;const c=s,f=Math.abs(c.stepX),m=Math.abs(c.stepY);if(0===f||0===m)return!0;const p=["Rotation","OffsetX","OffsetY"],u=o.filter((t=>t.primitiveName!==e.primitiveName&&!p.includes(t.propertyName))),y="url"in e?e.url:null,[h,S]=ce(o,c.primitiveName,t,null,null),v=l(JSON.stringify(e)+S).toString();let N,b,O=null;if("Random"===s.gridType){const e=n(P),t=Math.max(Math.floor(e/f),1),i=Math.max(Math.floor(e/m),1);N=m*i,O=e=>e?e*i:0;b=t*f/N}else s.shiftOddRows?(N=2*m,O=e=>e?2*e:0,b=f/m*.5):(N=m,O=null,b=f/m);let C={r:255,g:255,b:255,a:1};return"tintColor"in e&&(C=g(e.tintColor)),a.push({type:"fill",templateHash:v,materialHash:h?ae(v,i,u,r):v,cim:e,materialOverrides:u,colorLocked:e.colorLocked,effects:t,color:ie(c.primitiveName,i,"TintColor",r,C,te),height:ie(c.primitiveName,i,"StepY",r,N,O),scaleX:b,angle:ie(c.primitiveName,i,"GridAngle",r,c.gridAngle),offsetX:ie(c.primitiveName,i,"OffsetX",r,d(c.offsetX)),offsetY:ie(c.primitiveName,i,"OffsetY",r,d(c.offsetY)),url:y,applyRandomOffset:"Random"===s.gridType,sampleAlphaOnly:!y}),!0}function B(e,t,i,r,n,a,s,c,f){const m=e.primitiveName,p=d(e.size);let u=d(e.scaleX);const y=d(e.rotation),h=d(e.offsetX),S=d(e.offsetY),v=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},b=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}${JSON.stringify(e.animatedSymbolProperties)}`).toString(),O=ne(e.markerPlacement,r,i,n),C=le(e.animatedSymbolProperties,r,i,n),[k,P]=ce(r,m,t,O,C),M=l(JSON.stringify(e)+P).toString(),w=e.anchorPoint??{x:0,y:0};if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),u/=i*(p/t)}function L(e,t){return N(C,e,t)}const X=e.animatedSymbolProperties&&!0===e.animatedSymbolProperties.randomizeStartTime?(e,t,i,o)=>{const r=I(o),n=L(e,t);return b+`-MATERIALGROUP(${r})`+`-ASP(${JSON.stringify(n)})`}:k?(e,t)=>{const i=L(e,t);return b+`-ASP(${JSON.stringify(i)})`}:b;s.push({type:"marker",templateHash:M,materialHash:X,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:ie(m,i,"Size",n,p),scaleX:ie(m,i,"ScaleX",n,u),rotation:ie(m,i,"Rotation",n,y),offsetX:ie(m,i,"OffsetX",n,h),offsetY:ie(m,i,"OffsetY",n,S),color:ie(m,i,"TintColor",n,v,te),anchorPoint:{x:w.x,y:-w.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:O,url:e.url,animatedSymbolProperties:C})}function q(e,t,i,o,r,n,l,a,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}const p=ne(e.markerPlacement,o,i,r);for(const u of f)if(u){const f=u.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":K(e,t,p,null,u,o,i,r,n,l,a,s,m,c);break;case"CIMTextSymbol":V(e,t,p,u,i,o,r,n,a,s,m)}}}function V(e,t,i,o,r,n,a,s,m,p,u){const y=[];f.findApplicableOverrides(o,n,y);const h=o.geometry;if(!("x"in h)||!("y"in h))return;const b=o.symbol,O=J(b),C=R(b.fontStyleName),k=M(b.fontFamilyName);b.font={family:k,decoration:O,...C};const P=e.frame,I=h.x-.5*(P.xmin+P.xmax),w=h.y-.5*(P.ymin+P.ymax),L=e.size/u,X=e.primitiveName,x=d(b.height)*L,H=d(b.angle),Y=d(e.offsetX)+(d(b.offsetX)+I)*L,$=d(e.offsetY)+(d(b.offsetY)+w)*L,E=g(c.getFillColor(b));let T=g(c.getStrokeColor(b)),j=c.getStrokeWidth(b);j||(T=g(c.getFillColor(b.haloSymbol)),j=b.haloSize*L);const[F,W]=ce(n,X,t,i,null),D=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),U=l(JSON.stringify(o)+D+W).toString();let G=ie(o.primitiveName,r,"TextString",a,o.textString,S,b.textCase);if(null==G)return;const{fontStyleName:B}=b,q=k+(B?"-"+B.toLowerCase():"-regular"),V=q;"string"==typeof G&&G.includes("[")&&b.fieldMap&&(G=v(b.fieldMap,G,b.textCase)),s.push({type:"text",templateHash:U,materialHash:F||"function"==typeof G||G.match(/\[(.*?)\]/)?(e,t,i)=>V+"-"+N(G,e,t,i):V+"-"+l(G),cim:b,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:m,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:q,decoration:O,weight:ie(X,r,"Weight",a,C.weight),style:ie(X,r,"Size",a,C.style),size:ie(X,r,"Size",a,x),angle:ie(X,r,"Rotation",a,H),offsetX:ie(X,r,"OffsetX",a,Y),offsetY:ie(X,r,"OffsetY",a,$),horizontalAlignment:z(b.horizontalAlignment),verticalAlignment:A(b.verticalAlignment),text:G,color:E,outlineColor:T,outlineSize:j,referenceSize:p,sizeRatio:1,markerPlacement:i})}function K(e,t,i,r,n,a,s,f,m,p,u,S,v,N){const b=n.symbol,O=b.symbolLayers;if(!O)return;if(N)return void _(e,t,i,r,n,s,a,f,m,p,u,S,v);let k=O.length;if(me(O))return void Q(e,t,i,r,n,O,a,s,f,m,u,S,v);const P=C.applyEffects(b.effects,n.geometry,p.geometryEngine);if(P)for(;k--;){const N=O[k];if(N&&!1!==N.enable)switch(N.type){case"CIMSolidFill":case"CIMSolidStroke":{const b=C.applyEffects(N.effects,P,p.geometryEngine),O=y(b);if(!O)continue;const[k,M,I]=h(O,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),w="CIMSolidFill"===N.type,L={type:"sdf",geom:b,asFill:w},X=e.primitiveName,z=d(e.size)??10,A=d(e.rotation),R=d(e.offsetX),J=d(e.offsetY),x=N.path,H=N.primitiveName,Y=g(w?c.getFillColor(N):c.getStrokeColor(N)),$=w?{r:0,g:0,b:0,a:0}:g(c.getStrokeColor(N)),E=c.getStrokeWidth(N);if(!w&&!E)break;let T=!1,j="";for(const e of a)e.primitiveName!==H&&e.primitiveName!==X||(void 0!==e.value?j+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&(T=!0));o(t)&&"function"==typeof t&&(T=!0);const F=JSON.stringify({...e,markerGraphics:null}),W=l(JSON.stringify(L)+x).toString(),D={type:"marker",templateHash:l(JSON.stringify(n)+JSON.stringify(N)+F+j).toString(),materialHash:T?()=>W:W,cim:L,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:M,y:I},isAbsoluteAnchorPoint:!1,size:ie(e.primitiveName,s,"Size",f,z),rotation:ie(e.primitiveName,s,"Rotation",f,A),offsetX:ie(e.primitiveName,s,"OffsetX",f,R),offsetY:ie(e.primitiveName,s,"OffsetY",f,J),scaleX:1,frameHeight:v,rotateClockwise:e.rotateClockwise,referenceSize:S,sizeRatio:k,color:ie(H,s,"Color",f,Y,te),outlineColor:ie(H,s,"Color",f,$,te),outlineWidth:ie(H,s,"Width",f,E),markerPlacement:i,animatedSymbolProperties:r,path:x};m.push(D);break}default:_(e,t,i,r,n,s,a,f,m,p,u,S,v)}}}function Q(e,t,i,o,r,n,a,s,f,m,p,u,S){const v=r.geometry,N=n[0],b=n[1],O=y(v);if(!O)return;const[C,k,P]=h(O,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),M={type:"sdf",geom:v,asFill:!0},I=e.primitiveName,w=d(e.size),L=d(e.rotation),X=d(e.offsetX),z=d(e.offsetY),A=b.path,R=b.primitiveName,J=N.primitiveName,x=g(c.getFillColor(b)),H=g(c.getStrokeColor(N)),Y=c.getStrokeWidth(N);let $=!1,E="";for(const l of a)l.primitiveName!==R&&l.primitiveName!==J&&l.primitiveName!==I||(void 0!==l.value?E+=`-${l.primitiveName}-${l.propertyName}-${JSON.stringify(l.value)}`:l.valueExpressionInfo&&($=!0));const T=JSON.stringify({...e,markerGraphics:null}),j=l(JSON.stringify(M)+A).toString(),F={type:"marker",templateHash:l(JSON.stringify(r)+JSON.stringify(b)+JSON.stringify(N)+T+E).toString(),materialHash:$?()=>j:j,cim:M,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:k,y:P},isAbsoluteAnchorPoint:!1,size:ie(e.primitiveName,s,"Size",f,w),rotation:ie(e.primitiveName,s,"Rotation",f,L),offsetX:ie(e.primitiveName,s,"OffsetX",f,X),offsetY:ie(e.primitiveName,s,"OffsetY",f,z),scaleX:1,frameHeight:S,rotateClockwise:e.rotateClockwise,referenceSize:u,sizeRatio:C,color:ie(R,s,"Color",f,x,te),outlineColor:ie(J,s,"Color",f,H,te),outlineWidth:ie(J,s,"Width",f,Y),markerPlacement:i,path:A,animatedSymbolProperties:o};m.push(F)}function _(e,t,i,n,a,s,f,m,p,u,y,h,g){const S=Z(e,a);let v=[];const N=["Rotation","OffsetX","OffsetY"];v=f.filter((t=>t.primitiveName!==e.primitiveName||!N.includes(t.propertyName)));let b="";for(const o of f)void 0!==o.value&&(b+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[O,C,k]=c.getTextureAnchor(S,u),P=e.primitiveName,M=d(e.rotation),I=d(e.offsetX),w=d(e.offsetY),L=l(JSON.stringify(S)+b).toString(),X={type:"marker",templateHash:L,materialHash:v.length>0||o(t)&&"function"==typeof t?ae(L,s,v,m):L,cim:S,materialOverrides:v,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:y,anchorPoint:{x:O,y:C},isAbsoluteAnchorPoint:!1,size:e.size,rotation:ie(P,s,"Rotation",m,M),offsetX:ie(P,s,"OffsetX",m,I),offsetY:ie(P,s,"OffsetY",m,w),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:g,rotateClockwise:e.rotateClockwise,referenceSize:h,sizeRatio:k/r(e.size),markerPlacement:i,animatedSymbolProperties:n};p.push(X)}function Z(e,t){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function ee(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(!isNaN(t))return t}return 0}function te(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function ie(e,t,i,o,r,n,l){const a=t[e];if(a){const e=a[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof s)return(t,i,a)=>{let s=k(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function oe(e){return e?e.charAt(0).toLowerCase()+e.substr(1):e}function re(e,i,o,r){for(const t of i){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(o,r,n)=>{for(const e of i)e.fn&&(e.value=e.fn(o,r,n));const l=[];for(let a of e){const e=a?.primitiveName;if(e){let o=!1;for(const r of i)if(r.primitiveName===e){const e=oe(r.propertyName);null!=r.value&&r.value!==a[e]&&(o||(a=t(a),o=!0),a[e]=r.value)}}l.push(a)}return l}}function ne(e,i,o,r){const n=[];if(f.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const l=t(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=oe(e.propertyName);null!=e.value&&e.value!==l[t]&&(l[t]=e.value)}return l}}function le(e,i,o,r){const n=[];if(f.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const l=t(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=oe(e.propertyName);null!=e.value&&e.value!==l[t]&&(l[t]=e.value)}return l}}function ae(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof s&&(r.fn=(t,i,r)=>k(e,t,{$view:r},o.geometryType,i))}}return(t,o,r)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,r));return l(e+f.buildOverrideKey(i)).toString()}}function se(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return f.applyOverrides(i,t),i}function ce(e,t,i,r,n){let l=!1,a="";for(const o of e)o.primitiveName===t&&(void 0!==o.value?a+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`:o.valueExpressionInfo&&(l=!0));return o(i)&&"function"==typeof i&&(l=!0),o(r)&&"function"==typeof r&&(l=!0),o(n)&&"function"==typeof n&&(l=!0),[l,a]}function fe(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(ue(e,t,i),e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&fe(o,t,i)}}}}}}const me=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;let pe;function ue(e,t,i){if(!e.effects||o(t.geometryEngine))return;if(pe)return void i.push(pe);b(e.effects)&&(pe=O(),i.push(pe),pe.then((e=>t.geometryEngine=e)))}export{se as analyzeCIMResource,Y as analyzeCIMSymbol};
|
|
5
|
+
import e from"../../Color.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{isSome as o}from"../../core/maybe.js";import{pt2px as r,px2pt as n}from"../../core/screenUtils.js";import{numericHash as l}from"../../core/string.js";import{createRendererExpression as a,ArcadeExpression as s}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as c,OverrideHelper as f}from"./CIMSymbolHelper.js";import{Alignment as m,CapType as p,JoinType as u}from"./enums.js";import{getExtent as y,getSDFMetrics as h}from"./SDFHelper.js";import{fromCIMColor as g,getValue as d,_adjustTextCase as S,createLabelOverrideFunction as v,evaluateValueOrFunction as N,isGeometryEngineRequired as b,importGeometryEngine as O}from"./utils.js";import{CIMEffectHelper as C}from"./effects/CIMEffectHelper.js";import k from"../../views/2d/arcade/callExpressionWithFeature.js";import{RANDOM_INSIDE_POLYGON_TEXTURE_SIZE as P}from"../../views/2d/engine/webgl/definitions.js";import{getFontFamily as M}from"../../views/2d/engine/webgl/fontUtils.js";import{getMaterialGroup as I}from"../../views/2d/engine/webgl/grouping.js";const w=i.getLogger("esri.symbols.cim.cimAnalyzer");function L(e){switch(e){case"Butt":return p.BUTT;case"Square":return p.SQUARE;default:return p.ROUND}}function X(e){switch(e){case"Bevel":return u.BEVEL;case"Miter":return u.MITER;default:return u.ROUND}}function z(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return w.warnOnce("Horizontal alignment 'justify' is not implemented. Falling back to 'center'."),"center"}}function A(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function R(e){let t="",i="";if(e){const o=e.toLowerCase();o.includes("italic")?t="italic":o.includes("oblique")&&(t="oblique"),o.includes("bold")?i="bold":o.includes("light")&&(i="lighter")}return{style:t,weight:i}}function J(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function x(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function H(e){const t=e.markerPlacement;return t&&t.angleToLine?m.MAP:m.SCREEN}async function Y(e,t,i,o,r){const n=o??[];if(!e)return n;let l,s;const c={};if("CIMSymbolReference"!==e.type)return w.error("Expect cim type to be 'CIMSymbolReference'"),n;if(l=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,n=a(r,t.spatialReference,t.fields).then((e=>{e&&x(c,i.primitiveName,i.propertyName,e)}));e.push(n)}else null!=i.value&&x(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(fe(l,i,f),f.length>0&&await Promise.all(f),l.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":$(l,s,c,t,n,i,r)}return n}function $(e,t,i,o,r,n,l){if(!e)return;const a=e.symbolLayers;if(!a)return;const s=e.effects;let p;const u=c.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(p=m.MAP);let y=a.length;for(;y--;){const c=a[y];if(!c||!1===c.enable)continue;let m;s&&s.length&&(m=[...s]);const h=c.effects;h&&h.length&&(s?m.push(...h):m=[...h]);const g=[];let d;f.findEffectOverrides(m,t,g),d=g.length>0?re(m,g,i,o):m;const S=[];switch(f.findApplicableOverrides(c,t,S),c.type){case"CIMSolidFill":E(c,d,i,S,o,r);break;case"CIMPictureFill":T(c,d,i,S,o,n,r);break;case"CIMHatchFill":j(c,d,i,S,o,r);break;case"CIMGradientFill":F(c,d,i,S,o,r);break;case"CIMSolidStroke":W(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMPictureStroke":D(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMGradientStroke":U(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMCharacterMarker":if(G(c,d,i,S,o,r))break;break;case"CIMPictureMarker":if(G(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(p=H(c)),B(c,d,i,S,o,n,r,p,u);break;case"CIMVectorMarker":if(G(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(p=H(c)),q(c,d,i,S,o,r,n,p,u,l);break;default:w.error("Cannot analyze CIM layer",c.type)}}}function E(e,t,i,o,r,n){const a=e.primitiveName,s=g(e.color),[c,f]=ce(o,a,t,null,null),m=l(JSON.stringify(e)+f).toString();n.push({type:"fill",templateHash:m,materialHash:c?()=>m:m,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:ie(a,i,"Color",r,s,te),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0})}function T(e,t,i,r,n,a,s){const c=e.primitiveName,f=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},[m,p]=ce(r,c,t,null,null),u=l(JSON.stringify(e)+p).toString(),y=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let h=d(e.scaleX);if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),h/=i*(e.height/t)}s.push({type:"fill",templateHash:u,materialHash:m?()=>y:y,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:ie(c,i,"TintColor",n,f,te),height:ie(c,i,"Height",n,e.height),scaleX:ie(c,i,"ScaleX",n,h),angle:ie(c,i,"Rotation",n,d(e.rotation)),offsetX:ie(c,i,"OffsetX",n,d(e.offsetX)),offsetY:ie(c,i,"OffsetY",n,d(e.offsetY)),url:e.url,applyRandomOffset:!1,sampleAlphaOnly:!1})}function j(e,t,i,o,r,n){const a=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&!a.includes(t.propertyName))),c=e.primitiveName,[f,m]=ce(o,c,t,null,null),p=l(JSON.stringify(e)+m).toString(),u=l(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();let y={r:255,g:255,b:255,a:1};if(e.lineSymbol){const t=e.lineSymbol?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(y=g(t.color))}n.push({type:"fill",templateHash:p,materialHash:f?ae(u,i,s,r):u,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:y,height:ie(c,i,"Separation",r,e.separation),scaleX:1,angle:ie(c,i,"Rotation",r,d(e.rotation)),offsetX:ie(c,i,"OffsetX",r,d(e.offsetX)),offsetY:ie(c,i,"OffsetY",r,d(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0})}function F(e,t,i,o,r,n){const a=e.primitiveName,[s,c]=ce(o,a,t,null,null),f=l(JSON.stringify(e)+c).toString();n.push({type:"fill",templateHash:f,materialHash:s?ae(f,i,o,r):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1,sampleAlphaOnly:!1})}function W(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=g(e.color),m=void 0!==e.width?e.width:4,p=L(e.capStyle),u=X(e.joinStyle),y=e.miterLimit,[h,d]=ce(o,c,t,null,null),S=l(JSON.stringify(e)+d).toString();let v,N;if(t&&t instanceof Array&&t.length>0){const e=t[t.length-1];if("CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&null===e.offsetAlongLine){const e=(t=[...t]).pop();v=e.dashTemplate,N=e.scaleDash}}n.push({type:"line",templateHash:S,materialHash:h?()=>S:S,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:ie(c,i,"Color",r,f,te),width:ie(c,i,"Width",r,m),cap:ie(c,i,"CapStyle",r,p),join:ie(c,i,"JoinStyle",r,u),miterLimit:ie(c,i,"MiterLimit",r,y),referenceWidth:s,zOrder:ee(e.name),dashTemplate:v,scaleDash:N,sampleAlphaOnly:!0})}function D(e,t,i,o,r,n,a,s){const c=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,m=g(e.tintColor),p=void 0!==e.width?e.width:4,u=L(e.capStyle),y=X(e.joinStyle),h=e.miterLimit,[d,S]=ce(o,f,t,null,null),v=l(JSON.stringify(e)+S).toString();n.push({type:"line",templateHash:v,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:ie(f,i,"TintColor",r,m,te),width:ie(f,i,"Width",r,p),cap:ie(f,i,"CapStyle",r,u),join:ie(f,i,"JoinStyle",r,y),miterLimit:ie(f,i,"MiterLimit",r,h),referenceWidth:s,zOrder:ee(e.name),dashTemplate:null,scaleDash:!1,url:e.url,sampleAlphaOnly:!1})}function U(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=L(e.capStyle),p=X(e.joinStyle),u=e.miterLimit,[y,h]=ce(o,c,t,null,null),g=l(JSON.stringify(e)+h).toString();n.push({type:"line",templateHash:g,materialHash:y?ae(g,i,o,r):g,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:ie(c,i,"Width",r,f),cap:ie(c,i,"CapStyle",r,m),join:ie(c,i,"JoinStyle",r,p),miterLimit:ie(c,i,"MiterLimit",r,u),referenceWidth:s,zOrder:ee(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}function G(e,t,i,o,r,a){const s=e.markerPlacement;if(!s||"CIMMarkerPlacementInsidePolygon"!==s.type)return!1;const c=s,f=Math.abs(c.stepX),m=Math.abs(c.stepY);if(0===f||0===m)return!0;const p=["Rotation","OffsetX","OffsetY"],u=o.filter((t=>t.primitiveName!==e.primitiveName&&!p.includes(t.propertyName))),y="url"in e?e.url:null,[h,S]=ce(o,c.primitiveName,t,null,null),v=l(JSON.stringify(e)+S).toString();let N,b,O=null;if("Random"===s.gridType){const e=n(P),t=Math.max(Math.floor(e/f),1),i=Math.max(Math.floor(e/m),1);N=m*i,O=e=>e?e*i:0;b=t*f/N}else s.shiftOddRows?(N=2*m,O=e=>e?2*e:0,b=f/m*.5):(N=m,O=null,b=f/m);let C={r:255,g:255,b:255,a:1};return"tintColor"in e&&(C=g(e.tintColor)),a.push({type:"fill",templateHash:v,materialHash:h?ae(v,i,u,r):v,cim:e,materialOverrides:u,colorLocked:e.colorLocked,effects:t,color:ie(c.primitiveName,i,"TintColor",r,C,te),height:ie(c.primitiveName,i,"StepY",r,N,O),scaleX:b,angle:ie(c.primitiveName,i,"GridAngle",r,c.gridAngle),offsetX:ie(c.primitiveName,i,"OffsetX",r,d(c.offsetX)),offsetY:ie(c.primitiveName,i,"OffsetY",r,d(c.offsetY)),url:y,applyRandomOffset:"Random"===s.gridType,sampleAlphaOnly:!y}),!0}function B(e,t,i,r,n,a,s,c,f){const m=e.primitiveName,p=d(e.size);let u=d(e.scaleX);const y=d(e.rotation),h=d(e.offsetX),S=d(e.offsetY),v=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},b=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}${JSON.stringify(e.animatedSymbolProperties)}`).toString(),O=ne(e.markerPlacement,r,i,n),C=le(e.animatedSymbolProperties,r,i,n),[k,P]=ce(r,m,t,O,C),M=l(JSON.stringify(e)+P).toString(),w=e.anchorPoint??{x:0,y:0};if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),u/=i*(p/t)}function L(e,t){return N(C,e,t)}const X=e.animatedSymbolProperties&&!0===e.animatedSymbolProperties.randomizeStartTime?(e,t,i,o)=>{const r=I(o),n=L(e,t);return b+`-MATERIALGROUP(${r})`+`-ASP(${JSON.stringify(n)})`}:k?(e,t)=>{const i=L(e,t);return b+`-ASP(${JSON.stringify(i)})`}:b;s.push({type:"marker",templateHash:M,materialHash:X,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:ie(m,i,"Size",n,p),scaleX:ie(m,i,"ScaleX",n,u),rotation:ie(m,i,"Rotation",n,y),offsetX:ie(m,i,"OffsetX",n,h),offsetY:ie(m,i,"OffsetY",n,S),color:ie(m,i,"TintColor",n,v,te),anchorPoint:{x:w.x,y:-w.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:O,url:e.url,animatedSymbolProperties:C})}function q(e,t,i,o,r,n,l,a,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}const p=ne(e.markerPlacement,o,i,r);for(const u of f)if(u){const f=u.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":K(e,t,p,null,u,o,i,r,n,l,a,s,m,c);break;case"CIMTextSymbol":V(e,t,p,u,i,o,r,n,a,s,m)}}}function V(e,t,i,o,r,n,a,s,m,p,u){const y=[];f.findApplicableOverrides(o,n,y);const h=o.geometry;if(!("x"in h)||!("y"in h))return;const b=o.symbol,O=J(b),C=R(b.fontStyleName),k=M(b.fontFamilyName);b.font={family:k,decoration:O,...C};const P=e.frame,I=h.x-.5*(P.xmin+P.xmax),w=h.y-.5*(P.ymin+P.ymax),L=e.size/u,X=e.primitiveName,x=d(b.height)*L,H=d(b.angle),Y=d(e.offsetX)+(d(b.offsetX)+I)*L,$=d(e.offsetY)+(d(b.offsetY)+w)*L,E=g(c.getFillColor(b));let T=g(c.getStrokeColor(b)),j=c.getStrokeWidth(b);j||(T=g(c.getFillColor(b.haloSymbol)),j=b.haloSize*L);const[F,W]=ce(n,X,t,i,null),D=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),U=l(JSON.stringify(o)+D+W).toString();let G=ie(o.primitiveName,r,"TextString",a,o.textString,S,b.textCase);if(null==G)return;const{fontStyleName:B}=b,q=k+(B?"-"+B.toLowerCase():"-regular"),V=q;"string"==typeof G&&G.includes("[")&&b.fieldMap&&(G=v(b.fieldMap,G,b.textCase)),s.push({type:"text",templateHash:U,materialHash:F||"function"==typeof G||G.match(/\[(.*?)\]/)?(e,t,i)=>V+"-"+N(G,e,t,i):V+"-"+l(G),cim:b,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:m,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:q,decoration:O,weight:ie(X,r,"Weight",a,C.weight),style:ie(X,r,"Size",a,C.style),size:ie(X,r,"Size",a,x),angle:ie(X,r,"Rotation",a,H),offsetX:ie(X,r,"OffsetX",a,Y),offsetY:ie(X,r,"OffsetY",a,$),horizontalAlignment:z(b.horizontalAlignment),verticalAlignment:A(b.verticalAlignment),text:G,color:E,outlineColor:T,outlineSize:j,referenceSize:p,sizeRatio:1,markerPlacement:i})}function K(e,t,i,r,n,a,s,f,m,p,u,S,v,N){const b=n.symbol,O=b.symbolLayers;if(!O)return;if(N)return void _(e,t,i,r,n,s,a,f,m,p,u,S,v);let k=O.length;if(me(O))return void Q(e,t,i,r,n,O,a,s,f,m,u,S,v);const P=C.applyEffects(b.effects,n.geometry,p.geometryEngine);if(P)for(;k--;){const N=O[k];if(N&&!1!==N.enable)switch(N.type){case"CIMSolidFill":case"CIMSolidStroke":{const b=C.applyEffects(N.effects,P,p.geometryEngine),O=y(b);if(!O)continue;const[k,M,I]=h(O,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),w="CIMSolidFill"===N.type,L={type:"sdf",geom:b,asFill:w},X=e.primitiveName,z=d(e.size)??10,A=d(e.rotation),R=d(e.offsetX),J=d(e.offsetY),x=N.path,H=N.primitiveName,Y=g(w?c.getFillColor(N):c.getStrokeColor(N)),$=w?{r:0,g:0,b:0,a:0}:g(c.getStrokeColor(N)),E=c.getStrokeWidth(N);if(!w&&!E)break;let T=!1,j="";for(const e of a)e.primitiveName!==H&&e.primitiveName!==X||(void 0!==e.value?j+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&(T=!0));o(t)&&"function"==typeof t&&(T=!0);const F=JSON.stringify({...e,markerGraphics:null}),W=l(JSON.stringify(L)+x).toString(),D={type:"marker",templateHash:l(JSON.stringify(n)+JSON.stringify(N)+F+j).toString(),materialHash:T?()=>W:W,cim:L,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:M,y:I},isAbsoluteAnchorPoint:!1,size:ie(e.primitiveName,s,"Size",f,z),rotation:ie(e.primitiveName,s,"Rotation",f,A),offsetX:ie(e.primitiveName,s,"OffsetX",f,R),offsetY:ie(e.primitiveName,s,"OffsetY",f,J),scaleX:1,frameHeight:v,rotateClockwise:e.rotateClockwise,referenceSize:S,sizeRatio:k,color:ie(H,s,"Color",f,Y,te),outlineColor:ie(H,s,"Color",f,$,te),outlineWidth:ie(H,s,"Width",f,E),markerPlacement:i,animatedSymbolProperties:r,path:x};m.push(D);break}default:_(e,t,i,r,n,s,a,f,m,p,u,S,v)}}}function Q(e,t,i,o,r,n,a,s,f,m,p,u,S){const v=r.geometry,N=n[0],b=n[1],O=y(v);if(!O)return;const[C,k,P]=h(O,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),M={type:"sdf",geom:v,asFill:!0},I=e.primitiveName,w=d(e.size),L=d(e.rotation),X=d(e.offsetX),z=d(e.offsetY),A=b.path,R=b.primitiveName,J=N.primitiveName,x=g(c.getFillColor(b)),H=g(c.getStrokeColor(N)),Y=c.getStrokeWidth(N);let $=!1,E="";for(const l of a)l.primitiveName!==R&&l.primitiveName!==J&&l.primitiveName!==I||(void 0!==l.value?E+=`-${l.primitiveName}-${l.propertyName}-${JSON.stringify(l.value)}`:l.valueExpressionInfo&&($=!0));const T=JSON.stringify({...e,markerGraphics:null}),j=l(JSON.stringify(M)+A).toString(),F={type:"marker",templateHash:l(JSON.stringify(r)+JSON.stringify(b)+JSON.stringify(N)+T+E).toString(),materialHash:$?()=>j:j,cim:M,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:k,y:P},isAbsoluteAnchorPoint:!1,size:ie(e.primitiveName,s,"Size",f,w),rotation:ie(e.primitiveName,s,"Rotation",f,L),offsetX:ie(e.primitiveName,s,"OffsetX",f,X),offsetY:ie(e.primitiveName,s,"OffsetY",f,z),scaleX:1,frameHeight:S,rotateClockwise:e.rotateClockwise,referenceSize:u,sizeRatio:C,color:ie(R,s,"Color",f,x,te),outlineColor:ie(J,s,"Color",f,H,te),outlineWidth:ie(J,s,"Width",f,Y),markerPlacement:i,path:A,animatedSymbolProperties:o};m.push(F)}function _(e,t,i,n,a,s,f,m,p,u,y,h,g){const S=Z(e,a);let v=[];const N=["Rotation","OffsetX","OffsetY"];v=f.filter((t=>t.primitiveName!==e.primitiveName||!N.includes(t.propertyName)));let b="";for(const o of f)void 0!==o.value&&(b+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[O,C,k]=c.getTextureAnchor(S,u),P=e.primitiveName,M=d(e.rotation),I=d(e.offsetX),w=d(e.offsetY),L=l(JSON.stringify(S)+b).toString(),X={type:"marker",templateHash:L,materialHash:v.length>0||o(t)&&"function"==typeof t?ae(L,s,v,m):L,cim:S,materialOverrides:v,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:y,anchorPoint:{x:O,y:C},isAbsoluteAnchorPoint:!1,size:e.size,rotation:ie(P,s,"Rotation",m,M),offsetX:ie(P,s,"OffsetX",m,I),offsetY:ie(P,s,"OffsetY",m,w),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:g,rotateClockwise:e.rotateClockwise,referenceSize:h,sizeRatio:k/r(e.size),markerPlacement:i,animatedSymbolProperties:n};p.push(X)}function Z(e,t){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function ee(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(!isNaN(t))return t}return 0}function te(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function ie(e,t,i,o,r,n,l){const a=t[e];if(a){const e=a[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof s)return(t,i,a)=>{let s=k(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function oe(e){return e?e.charAt(0).toLowerCase()+e.substr(1):e}function re(e,i,o,r){for(const t of i){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(o,r,n)=>{for(const e of i)e.fn&&(e.value=e.fn(o,r,n));const l=[];for(let a of e){const e=a?.primitiveName;if(e){let o=!1;for(const r of i)if(r.primitiveName===e){const e=oe(r.propertyName);null!=r.value&&r.value!==a[e]&&(o||(a=t(a),o=!0),a[e]=r.value)}}l.push(a)}return l}}function ne(e,i,o,r){const n=[];if(f.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const l=t(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=oe(e.propertyName);null!=e.value&&e.value!==l[t]&&(l[t]=e.value)}return l}}function le(e,i,o,r){const n=[];if(f.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const l=t(e),a=e.primitiveName;for(const e of n)if(e.primitiveName===a){const t=oe(e.propertyName);null!=e.value&&e.value!==l[t]&&(l[t]=e.value)}return l}}function ae(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof s&&(r.fn=(t,i,r)=>k(e,t,{$view:r},o.geometryType,i))}}return(t,o,r)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,r));return l(e+f.buildOverrideKey(i)).toString()}}function se(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return f.applyOverrides(i,t),i}function ce(e,t,i,r,n){let l=!1,a="";for(const o of e)o.primitiveName===t&&(void 0!==o.value?a+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`:o.valueExpressionInfo&&(l=!0));return o(i)&&"function"==typeof i&&(l=!0),o(r)&&"function"==typeof r&&(l=!0),o(n)&&"function"==typeof n&&(l=!0),[l,a]}function fe(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(ue(e,t,i),e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&fe(o,t,i)}}}}}}const me=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;let pe;function ue(e,t,i){if(!e.effects||o(t.geometryEngine))return;if(pe)return void i.push(pe);b(e.effects)&&(pe=O(),i.push(pe),pe.then((e=>t.geometryEngine=e)))}export{se as analyzeCIMResource,Y as analyzeCIMSymbol};
|