@arcgis/core 4.24.0-next.20220511 → 4.24.0-next.20220512

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.
Files changed (231) hide show
  1. package/assets/components/assets/icon/compactness16.json +1 -0
  2. package/assets/components/assets/icon/compactness24.json +1 -0
  3. package/assets/components/assets/icon/compactness32.json +1 -0
  4. package/assets/components/assets/icon/configure16.json +1 -0
  5. package/assets/components/assets/icon/configure24.json +1 -0
  6. package/assets/components/assets/icon/configure32.json +1 -0
  7. package/assets/components/assets/icon/debugScript16.json +1 -0
  8. package/assets/components/assets/icon/debugScript24.json +1 -0
  9. package/assets/components/assets/icon/debugScript32.json +1 -0
  10. package/assets/components/assets/icon/dissolveFeatures16.json +1 -0
  11. package/assets/components/assets/icon/dissolveFeatures24.json +1 -0
  12. package/assets/components/assets/icon/dissolveFeatures32.json +1 -0
  13. package/assets/components/assets/icon/distanceType16.json +1 -0
  14. package/assets/components/assets/icon/distanceType24.json +1 -0
  15. package/assets/components/assets/icon/distanceType32.json +1 -0
  16. package/assets/components/assets/icon/gridDiamond16.json +1 -0
  17. package/assets/components/assets/icon/gridDiamond24.json +1 -0
  18. package/assets/components/assets/icon/gridDiamond32.json +1 -0
  19. package/assets/components/assets/icon/gridHexagon16.json +1 -0
  20. package/assets/components/assets/icon/gridHexagon24.json +1 -0
  21. package/assets/components/assets/icon/gridHexagon32.json +1 -0
  22. package/assets/components/assets/icon/gridTriangle16.json +1 -0
  23. package/assets/components/assets/icon/gridTriangle24.json +1 -0
  24. package/assets/components/assets/icon/gridTriangle32.json +1 -0
  25. package/assets/components/assets/icon/insets16.json +1 -0
  26. package/assets/components/assets/icon/insets24.json +1 -0
  27. package/assets/components/assets/icon/insets32.json +1 -0
  28. package/assets/components/assets/icon/maximumTerritoryDistance16.json +1 -0
  29. package/assets/components/assets/icon/maximumTerritoryDistance24.json +1 -0
  30. package/assets/components/assets/icon/maximumTerritoryDistance32.json +1 -0
  31. package/assets/components/assets/icon/minDistanceBetweenCenters16.json +1 -0
  32. package/assets/components/assets/icon/minDistanceBetweenCenters24.json +1 -0
  33. package/assets/components/assets/icon/minDistanceBetweenCenters32.json +1 -0
  34. package/assets/components/assets/icon/numberOfTerritories16.json +1 -0
  35. package/assets/components/assets/icon/numberOfTerritories24.json +1 -0
  36. package/assets/components/assets/icon/numberOfTerritories32.json +1 -0
  37. package/assets/components/assets/icon/overlapFeatures16.json +1 -0
  38. package/assets/components/assets/icon/overlapFeatures24.json +1 -0
  39. package/assets/components/assets/icon/overlapFeatures32.json +1 -0
  40. package/assets/components/assets/icon/profileVariables16.json +1 -0
  41. package/assets/components/assets/icon/profileVariables24.json +1 -0
  42. package/assets/components/assets/icon/profileVariables32.json +1 -0
  43. package/assets/components/assets/icon/rasterAnalysis16.json +1 -0
  44. package/assets/components/assets/icon/rasterAnalysis24.json +1 -0
  45. package/assets/components/assets/icon/rasterAnalysis32.json +1 -0
  46. package/assets/components/assets/icon/recurrence16.json +1 -0
  47. package/assets/components/assets/icon/recurrence24.json +1 -0
  48. package/assets/components/assets/icon/recurrence32.json +1 -0
  49. package/assets/components/assets/icon/splitFeatures16.json +1 -0
  50. package/assets/components/assets/icon/splitFeatures24.json +1 -0
  51. package/assets/components/assets/icon/splitFeatures32.json +1 -0
  52. package/assets/components/assets/icon/territoryBufferDistance16.json +1 -0
  53. package/assets/components/assets/icon/territoryBufferDistance24.json +1 -0
  54. package/assets/components/assets/icon/territoryBufferDistance32.json +1 -0
  55. package/assets/components/assets/icon/testData16.json +1 -0
  56. package/assets/components/assets/icon/testData24.json +1 -0
  57. package/assets/components/assets/icon/testData32.json +1 -0
  58. package/assets/esri/core/workers/RemoteClient.js +1 -1
  59. package/assets/esri/core/workers/chunks/07eda3e958d29f86b37e.js +1 -0
  60. package/assets/esri/core/workers/chunks/0ecaa28b8bff1d779d66.js +1 -0
  61. package/assets/esri/core/workers/chunks/{adae54f116f311d72d97.js → 1aba8c73c62a64e0658c.js} +1 -1
  62. package/assets/esri/core/workers/chunks/1d109cd048170e2d529a.js +1 -0
  63. package/assets/esri/core/workers/chunks/366e5c1abd1ab6d3e548.js +1 -0
  64. package/assets/esri/core/workers/chunks/3e94e35f44aadbb332ff.js +1 -0
  65. package/assets/esri/core/workers/chunks/46411f32b29a0e783105.js +1 -0
  66. package/assets/esri/core/workers/chunks/4d1c87e3e0a02efcc082.js +1 -0
  67. package/assets/esri/core/workers/chunks/{b089058b64db3912478f.js → 5e46e60fab93ad034d3a.js} +1 -1
  68. package/assets/esri/core/workers/chunks/6281b15009712a5dee3c.js +1 -0
  69. package/assets/esri/core/workers/chunks/66f627d68dbb0fdb725f.js +1 -0
  70. package/assets/esri/core/workers/chunks/672da24bbf86718bf48d.js +1 -0
  71. package/assets/esri/core/workers/chunks/733625d85602127d62cd.js +1 -0
  72. package/assets/esri/core/workers/chunks/{c51c9b5da855f84b9a48.js → 7391422fc51acb96a25d.js} +1 -1
  73. package/assets/esri/core/workers/chunks/{f435dc615fdc8917f6ca.js → 7cf3cff7b28ff007dbad.js} +1 -1
  74. package/assets/esri/core/workers/chunks/7ea06c86adfc827fda08.js +1 -0
  75. package/assets/esri/core/workers/chunks/{a054a52712a118c6d505.js → 82bc24bdc9c6ebaf58c0.js} +1 -1
  76. package/assets/esri/core/workers/chunks/8965ab74e03506e3475e.js +1 -0
  77. package/assets/esri/core/workers/chunks/{5405f478af3563580926.js → 8b497d9c37a8f577a467.js} +1 -1
  78. package/assets/esri/core/workers/chunks/919d0d8b1c2176760973.js +1 -0
  79. package/assets/esri/core/workers/chunks/ab2a0480dc2b608deda3.js +1 -0
  80. package/assets/esri/core/workers/chunks/ab97a35f7a7d5cf1da19.js +2 -0
  81. package/assets/esri/core/workers/chunks/{dcd0653191cd4a1ccaae.js.LICENSE.txt → ab97a35f7a7d5cf1da19.js.LICENSE.txt} +1 -1
  82. package/assets/esri/core/workers/chunks/ae554c88e862a5761f2e.js +1 -0
  83. package/assets/esri/core/workers/chunks/ae5ce55cd1a32525f101.js +1 -0
  84. package/assets/esri/core/workers/chunks/b597c04a4abb98e29d1c.js +1 -0
  85. package/assets/esri/core/workers/chunks/{287c484fd40eee643f3a.js → b78c3e9d31c4a562cdf0.js} +1 -1
  86. package/assets/esri/core/workers/chunks/be4bf1e4cbe2a593f8b3.js +1 -0
  87. package/assets/esri/core/workers/chunks/{b7572b0921b23aef8b9d.js → c40d9caf5189be2c698e.js} +1 -1
  88. package/assets/esri/core/workers/chunks/{b28539c5a6bedb71b038.js → d63f736b3560c577a8a4.js} +1 -1
  89. package/assets/esri/core/workers/chunks/d869dabe937d3b60504e.js +1 -0
  90. package/assets/esri/core/workers/chunks/dd6c9a114ad38cf622ba.js +1 -0
  91. package/assets/esri/core/workers/chunks/e6b0f74226b9394bfa7a.js +1 -0
  92. package/assets/esri/themes/base/widgets/_Editor.scss +3 -2
  93. package/assets/esri/themes/dark/main.css +1 -1
  94. package/assets/esri/themes/light/main.css +1 -1
  95. package/assets/esri/themes/light/view.css +1 -1
  96. package/assets/esri/views/interactive/tooltip/t9n/Tooltip.json +1 -0
  97. package/assets/esri/views/interactive/tooltip/t9n/Tooltip_en.json +1 -0
  98. package/chunks/EdgeShader.glsl.js +3 -4
  99. package/interfaces.d.ts +463 -30
  100. package/layers/FeatureLayer.js +1 -1
  101. package/layers/GeoJSONLayer.js +1 -1
  102. package/layers/OGCFeatureLayer.js +1 -1
  103. package/layers/RouteLayer.js +1 -1
  104. package/layers/SceneLayer.js +1 -1
  105. package/layers/StreamLayer.js +1 -1
  106. package/layers/SubtypeGroupLayer.js +1 -1
  107. package/layers/WFSLayer.js +1 -1
  108. package/layers/buildingSublayers/BuildingComponentSublayer.js +1 -1
  109. package/layers/mixins/ArcGISImageService.js +1 -1
  110. package/layers/save/featureLayerUtils.js +1 -1
  111. package/layers/support/AggregateField.d.ts +4 -0
  112. package/layers/support/AggregateField.js +1 -1
  113. package/layers/support/FeatureReductionBinning.d.ts +4 -0
  114. package/layers/support/FeatureReductionBinning.js +1 -1
  115. package/layers/support/OutStatistic.d.ts +4 -0
  116. package/layers/support/Sublayer.js +1 -1
  117. package/layers/support/SubtypeSublayer.js +1 -1
  118. package/layers/support/rasterDatasets/ImageServerRaster.js +1 -1
  119. package/layers/support/rasterDatasets/wcsCoverageParser.js +1 -1
  120. package/layers/support/rasterFormats/TiffDecoder.js +1 -1
  121. package/package.json +3 -3
  122. package/portal/support/portalItemUtils.js +1 -1
  123. package/renderers/PieChartRenderer.d.ts +4 -0
  124. package/renderers/PieChartRenderer.js +5 -0
  125. package/renderers/Renderer.js +1 -1
  126. package/renderers/support/AuthoringInfo.js +1 -1
  127. package/renderers/support/RasterSymbolizer.js +1 -1
  128. package/renderers/support/clickToleranceUtils.js +1 -1
  129. package/renderers/support/rasterRendererHelper.js +1 -1
  130. package/renderers/support/types.js +1 -1
  131. package/renderers/support/utils.js +1 -1
  132. package/renderers.js +1 -1
  133. package/request.js +1 -1
  134. package/rest/imageService/fetchRasterInfo.js +5 -0
  135. package/rest/imageService/getCatalogItemRasterInfo.js +5 -0
  136. package/rest/print.js +1 -1
  137. package/smartMapping/renderers/color.js +1 -1
  138. package/smartMapping/renderers/dotDensity.js +1 -1
  139. package/smartMapping/renderers/heatmap.js +1 -1
  140. package/smartMapping/renderers/location.js +1 -1
  141. package/smartMapping/renderers/size.js +1 -1
  142. package/smartMapping/renderers/type.js +1 -1
  143. package/support/arcadeUtils.js +1 -1
  144. package/support/revision.js +1 -1
  145. package/symbols/cim/CIMSymbolHelper.js +1 -1
  146. package/symbols/cim/CurveHelper.js +1 -1
  147. package/symbols/cim/ExpandedCIM.js +1 -1
  148. package/symbols/cim/cimAnalyzer.js +1 -1
  149. package/symbols/cim/placements/PlacementInsidePolygon.js +1 -1
  150. package/views/2d/engine/brushes.js +1 -1
  151. package/views/2d/engine/vectorTiles/GlyphSource.js +1 -1
  152. package/views/2d/engine/vectorTiles/style/Filter.js +1 -1
  153. package/views/2d/engine/vectorTiles/style/StyleRepository.js +1 -1
  154. package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
  155. package/views/2d/engine/webgl/Painter.js +1 -1
  156. package/views/2d/engine/webgl/Utils.js +1 -1
  157. package/views/2d/engine/webgl/brushes/WGLBrushPieChart.js +5 -0
  158. package/views/2d/engine/webgl/brushes/WGLGeometryBrush.js +1 -1
  159. package/views/2d/engine/webgl/brushes/WGLGeometryBrushFill.js +1 -1
  160. package/views/2d/engine/webgl/brushes/WGLGeometryBrushMarker.js +1 -1
  161. package/views/2d/engine/webgl/color.js +1 -1
  162. package/views/2d/engine/webgl/definitions.js +1 -1
  163. package/views/2d/engine/webgl/enums.js +1 -1
  164. package/views/2d/engine/webgl/mesh/templates/WGLBaseFillTemplate.js +1 -1
  165. package/views/2d/engine/webgl/mesh/templates/WGLBaseLineTemplate.js +1 -1
  166. package/views/2d/engine/webgl/mesh/templates/WGLDynamicFillTemplate.js +1 -1
  167. package/views/2d/engine/webgl/mesh/templates/WGLFillTemplate.js +1 -1
  168. package/views/2d/engine/webgl/mesh/templates/WGLMarkerTemplate.js +1 -1
  169. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  170. package/views/2d/engine/webgl/techniques/dotDensity/TechniqueDotDensity.js +1 -1
  171. package/views/2d/engine/webgl/techniques/pieChart/TechniquePieChart.js +5 -0
  172. package/views/2d/engine/webgl/techniques/utils.js +1 -1
  173. package/views/2d/engine/webgl/util/Matcher.js +1 -1
  174. package/views/2d/layers/features/schemaUtils.js +1 -1
  175. package/views/2d/layers/features/support/AttributeStore.js +1 -1
  176. package/views/2d/layers/features/tileRenderers/SymbolTileRenderer.js +1 -1
  177. package/views/2d/layers/features/tileRenderers/support/WGLFeatureView.js +1 -1
  178. package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
  179. package/views/3d/analysis/Dimensioning/DimensioningTool.js +1 -1
  180. package/views/3d/analysis/Dimensioning/LengthDimensionVisualization.js +1 -1
  181. package/views/3d/environment/SnowyWeather.d.ts +4 -0
  182. package/views/3d/layers/I3SMeshView3D.js +1 -1
  183. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  184. package/views/3d/terrain/TerrainRenderer.js +1 -1
  185. package/views/3d/terrain/TerrainSurface.js +1 -1
  186. package/views/3d/terrain/TileRenderer.js +1 -1
  187. package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
  188. package/views/3d/webgl-engine/collections/Component/Material/shader/ComponentData.glsl.js +5 -5
  189. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  190. package/views/3d/webgl-engine/lib/edgeRendering/EdgeRenderer.js +1 -1
  191. package/views/3d/webgl-engine/lib/edgeRendering/EdgeShaderTechniqueConfiguration.js +1 -1
  192. package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
  193. package/views/3d/webgl-engine/shaders/sources/edgeRenderer/EdgeUtil.glsl.js +37 -31
  194. package/views/draw/DrawOperation.js +1 -1
  195. package/views/interactive/snapping/FeatureSnappingEngine.js +1 -1
  196. package/views/interactive/snapping/SceneSnappingEngine.js +5 -0
  197. package/views/interactive/snapping/SnappingManager.js +1 -1
  198. package/views/interactive/snapping/snappingFactory.js +5 -0
  199. package/views/interactive/tooltip/content/TooltipContent.js +1 -1
  200. package/views/interactive/tooltip/content/TooltipContentDrawPoint.js +1 -1
  201. package/views/interactive/tooltip/content/TooltipContentDrawPolygon.js +1 -1
  202. package/views/interactive/tooltip/content/TooltipContentDrawPolyline.js +1 -1
  203. package/views/interactive/tooltip/content/TooltipContentTranslateVertex.js +1 -1
  204. package/widgets/Editor/workflowUtils.js +1 -1
  205. package/widgets/Editor.js +1 -1
  206. package/widgets/Popup/PopupViewModel.js +1 -1
  207. package/widgets/Popup/actionUtils.js +1 -1
  208. package/widgets/Sketch/SketchViewModel.js +1 -1
  209. package/assets/esri/core/workers/chunks/0564f1cfa3d17ff1aad3.js +0 -1
  210. package/assets/esri/core/workers/chunks/0806d5d706a864542bfb.js +0 -1
  211. package/assets/esri/core/workers/chunks/52478ee2d2a1354b6900.js +0 -1
  212. package/assets/esri/core/workers/chunks/5759af97f96f24c40105.js +0 -1
  213. package/assets/esri/core/workers/chunks/7bc828fbdd54c0b28aac.js +0 -1
  214. package/assets/esri/core/workers/chunks/875f26ee040f3d75c0db.js +0 -1
  215. package/assets/esri/core/workers/chunks/88384e7cafbfd2348598.js +0 -1
  216. package/assets/esri/core/workers/chunks/89acd5f888d6b8df4aad.js +0 -1
  217. package/assets/esri/core/workers/chunks/9d7533aaeac3b8d145c4.js +0 -1
  218. package/assets/esri/core/workers/chunks/a3bb600bfcb0282622f1.js +0 -1
  219. package/assets/esri/core/workers/chunks/b50ae3dc7e43ff452568.js +0 -1
  220. package/assets/esri/core/workers/chunks/b5b7bcbc19b3430903ee.js +0 -1
  221. package/assets/esri/core/workers/chunks/b758f3c419edc2306784.js +0 -1
  222. package/assets/esri/core/workers/chunks/cf47b605c31063e88357.js +0 -1
  223. package/assets/esri/core/workers/chunks/cfbb332d144e65a4a55d.js +0 -1
  224. package/assets/esri/core/workers/chunks/db937849b2c1af87b481.js +0 -1
  225. package/assets/esri/core/workers/chunks/dc3ed59f450283d97a19.js +0 -1
  226. package/assets/esri/core/workers/chunks/dcd0653191cd4a1ccaae.js +0 -2
  227. package/assets/esri/core/workers/chunks/dfb6a28039e5d5ce6fd4.js +0 -1
  228. package/assets/esri/core/workers/chunks/e4fdd1eaf987977d0a51.js +0 -1
  229. package/assets/esri/core/workers/chunks/f7e0bb11ba3677069c94.js +0 -1
  230. package/assets/esri/core/workers/chunks/f7f3dde4c8f9c687cc1e.js +0 -1
  231. package/assets/esri/core/workers/chunks/fc6beaf9466ea3898549.js +0 -1
@@ -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"../../../geometry/Extent.js";import t from"../../../geometry/Polygon.js";import{isAxesOrderReversedForWkid as n}from"../../ogc/crsUtils.js";import i from"../RasterInfo.js";import{getElements as s,isSameTagIgnoreNS as o,getElementValue as a,getElementValues as r,getNodeNameIgnoreNS as l,getElement as p,getSpaceDelimitedNumericValues as u}from"./xmlUtilities.js";function m(e){return{requestResponseCRSs:r(e,"requestResponseCRSs").map((e=>e.split(":")[1])),nativeCRSs:r(e,"nativeCRSs").map((e=>e.split(":")[1]))}}function c(e,t){const n=r(e,"1.0.0"===t?"interpolationMethod":"InterpolationMethod"),i="1.0.0"===t?e.getAttribute("default"):a(e,"InterpolationMethods/Default");return null!=i?[i].concat(n.filter((e=>e.toLowerCase()!==i.toLowerCase()))):n}function d(e){return null==e?["nearest"]:e.map((e=>{const t=e.toLowerCase();return t.includes("nearest")?"nearest":t.includes("linear")?"bilinear":t.includes("cubic")?"cubic":null})).filter((e=>!!e))}function f(t){const n=s(t,"pos"),i=u(n[0]),o=u(n[1]);return new e({xmin:i[0],ymin:i[1],xmax:o[0],ymax:o[1],spatialReference:{wkid:4326}})}function g(e){const t=[],n=s(e,"RangeSet");let i=[];for(let o=0;o<n.length;o++){const e=a(n[o],"name"),l=a(n[o],"label"),p=[],u=s(n[o],"AxisDescription");for(let t=0;t<u.length;t++){const e=a(u[t],"name"),n=a(u[t],"label"),s=r(u[t],"singleValue");if(0===s.length){const e=a(u[t],"min"),n=a(u[t],"max"),i=Number(a(u[t],"res"))||1;if(null!==e&&null!==n)for(let t=parseInt(e,10);t<=parseInt(n,10);t+=i)s.push(t.toString())}"band"===e.toLowerCase()&&(i=s),p.push({name:e,label:n,values:s})}t.push({name:e,label:l,axis:p})}return{rangeSet:t,bandNames:i}}function h(e=null){if(!e)return{resolution:null,units:null};let t=e.toUpperCase();const n=["Y","M","D"],i=["H","M","S"],s=["Years","Months","Days","Hours","Minutes","Seconds"];let o,a,r;return t.includes("PT")?(t=t.slice(2),r=i.findIndex((e=>t.includes(e))),o=s[3+r],a=parseFloat(t.substring(0,t.length-1))):(t=t.slice(1),r=n.findIndex((e=>t.includes(e))),r>-1&&(o=s[r]),a=parseFloat(t.substring(0,t.length-1))),{resolution:a,units:o}}function b(e){const t=s(e,"timeposition");if(t.length>0){const e=[];for(let n=0;n<t.length;n++)e.push(new Date(a(t[n])));return{begin:e[0],end:e[e.length-1],values:e}}const n=p(e,"timePeriod")||p(e,"TimePeriod");if(n){return{begin:new Date(a(n,"beginPosition")||a(n,"BeginPosition")),end:new Date(a(n,"endPosition")||a(n,"EndPosition")),...h(a(n,"timeResolution")||a(n,"TimeResolution"))}}return null}function x(t){const n=p(t,"spatialDomain"),i=p(n,"Envelope")||p(n,"EnvelopeWithTimePeriod"),o=i.getAttribute("srsName").split(":"),r=o[o.length-1],l=s(i,"pos"),m=u(l[0]),c=u(l[1]),d=parseInt(r,10),f=isNaN(d)?null:{wkid:d},g=new e({xmin:m[0],ymin:m[1],xmax:c[0],ymax:c[1],spatialReference:f}),h=p(n,"RectifiedGrid"),x=a(h,"low").split(" "),v=a(h,"high").split(" "),w=parseInt(v[0],10)-parseInt(x[0],10)+1,y=parseInt(v[1],10)-parseInt(x[1],10)+1,D=u(n,"origin/pos"),L=s(n,"offsetVector"),S={envelope:g,columns:w,rows:y,offset:{x:parseFloat(a(L[0]).split(" ")[0]),y:parseFloat(a(L[1]).split(" ")[1])},origin:{x:D[0],y:D[1]}},C=p(t,"temporalDomain")||p(t,"TemporalDomain");return{spatialDomain:S,temporalDomain:C?b(C):null}}function v(e){const t={version:"1.0"};let n=[];for(let i=0;i<e.childNodes.length;i++){const s=e.childNodes[i];if(1===s.nodeType)if(o(s,"description"))t.description=a(s);else if(o(s,"name"))t.name=a(s);else if(o(s,"label"))t.label=a(s);else if(o(s,"supportedFormats"))t.supportedFormats=r(s,"formats");else if(o(s,"supportedCRSs"))t.supportedCRSs=m(s);else if(o(s,"supportedInterpolations"))t.supportedInterpolations=c(s,"1.0.0");else if(o(s,"lonLatEnvelope"))t.lonLatEnvelope=f(s);else if(o(s,"rangeSet")){const e=g(s);t.rangeSet=e.rangeSet,n=e.bandNames}else o(s,"domainSet")&&(t.domainSet=x(s))}const s=d(t.supportedInterpolations),{name:l,description:p,label:u,lonLatEnvelope:h,supportedFormats:b}=t,{spatialDomain:v}=t.domainSet,w={x:Math.abs(v.offset.x),y:Math.abs(v.offset.y)},y=new i({width:v.columns,height:v.rows,pixelSize:w,extent:v.envelope,spatialReference:v.envelope.spatialReference,bandCount:n.length||1});return{id:l,title:t.name,description:p||u,lonLatEnvelope:h,rasterInfo:y,bandNames:n,supportedFormats:b,supportedInterpolations:s,coverageDescription:t,version:"1.0.0",useEPSGAxis:!1}}function w(e){const t=[],n=s(e,"Field");let i=[];for(let o=0;o<n.length;o++){const e=a(n[o],"Identifier"),l=a(n[o],"Description"),p=a(n[o],"Definition"),u=a(n[o],"Abstract"),m=a(n[o],"Title"),d=c(n[o],"1.1.0"),f=[],g=s(n[o],"Axis");for(let t=0;t<g.length;t++){const e=g[t].getAttribute("identifier"),n=a(g[t],"UOM"),s=a(g[t],"DataType"),o=r(g[t],"Key");"band"===e.toLowerCase()&&(i=o),f.push({identifier:e,uom:n,dataType:s,values:o})}t.push({identifier:e,description:l,definition:p,abstract:u,title:m,supportedInterpolations:d,axis:f})}return{rangeSet:t,bandNames:i}}function y(e,t){const n=e.filter((e=>!e.identifier.toLowerCase().includes("field_1")&&!e.axis.some((e=>"band"===e.identifier.toLowerCase())))),i=[];if(n.length&&n.forEach((e=>{const t=e.axis.map((e=>{const t=e.values.map((t=>{if("ISO8601"===e.uom){return(t=t.trim()).toLowerCase().includes("z")?new Date(t).getTime():new Date(t+"Z").getTime()}return parseFloat(t.trim())})),n=[Math.min.apply(null,t),Math.max.apply(null,t)];return{name:e.identifier.trim(),description:"",field:e.identifier.trim(),unit:e.uom?e.uom.trim():"",hasRegularIntervals:!1,values:t,extent:n}}));i.push({name:e.identifier.trim(),description:e.description?.trim()??"",unit:"",dimensions:t})})),t.temporalDomain){const{begin:e,end:n,values:s,units:o,resolution:a}=t.temporalDomain;i.some((e=>e.dimensions.some((e=>"stdtime"===e.name.toLowerCase()))))||i.forEach((t=>{t.dimensions.push({name:"StdTime",description:"",unit:"ISO8601",values:s?.map((e=>e.getTime())),hasRegularIntervals:!s,interval:a,intervalUnit:o,extent:[e.getTime(),n.getTime()]})}))}return i.length?{variables:i}:null}function D(t){const i=p(t,"SpatialDomain"),o=p(i,"GridCRS"),r=a(o,"GridBaseCRS"),l=a(o,"GridOrigin")?.split(" ").map((e=>parseFloat(e)))??[0,0],m=u(o,"GridOffsets"),c=s(i,"BoundingBox");let d,f,g,h;for(let n=0;n<c.length;n++){const t=c[n].getAttribute("crs")?.toLowerCase();if(null!=t)if(t.includes("imagecrs")){const e=u(c[n],"LowerCorner"),t=u(c[n],"UpperCorner");d=t[0]-e[0]+1,f=t[1]-e[1]+1}else if(t.indexOf("epsg")>0){const i=t.split(":");g=parseInt(i[i.length-1],10);const s=u(c[n],"LowerCorner"),o=u(c[n],"UpperCorner");h=new e({xmin:s[0],ymin:s[1],xmax:o[0],ymax:o[1],spatialReference:{wkid:g}})}}const x=d>f,v=h.xmax-h.xmin>h.ymax-h.ymin;let w=!1;n(g)&&(x===v?w=!1:(w=!0,h=new e({xmin:h.ymin,ymin:h.xmin,xmax:h.ymax,ymax:h.xmax,spatialReference:{wkid:g}})));const y={columns:d,rows:f,origin:{x:l[0],y:l[1]},offset:{x:m[0],y:m[1]},gridBaseCRS:r,envelope:h,useEPSGAxis:w},D=p(t,"temporalDomain")||p(t,"TemporalDomain");return{spatialDomain:y,temporalDomain:D?b(D):null}}function L(e,t){const n=[],s=[],o={supportedFormats:n,supportedCRSs:s,version:"1.1"};let r;for(let i=0;i<e.childNodes.length;i++){const t=e.childNodes[i];if(1!==t.nodeType)continue;const p=l(t).toLowerCase();switch(p){case"title":case"abstract":case"identifier":o[p]=a(t);break;case"supportedformat":{const e=a(t);n.includes(e)||n.push(e)}break;case"supportedcrs":{const e=a(t);s.includes(e)||s.push(e)}break;case"range":{const e=w(t);o.range=e.rangeSet,r=e.bandNames}break;case"domain":o.domain=D(t)}}const p=d(o.range[0].supportedInterpolations),{identifier:u,abstract:m,title:c,domain:f,range:g}=o,h={x:Math.abs(f.spatialDomain.offset.x),y:Math.abs(f.spatialDomain.offset.y)},b=y(g,f),x=new i({width:f.spatialDomain.columns,height:f.spatialDomain.rows,pixelSize:h,extent:f.spatialDomain.envelope,spatialReference:f.spatialDomain.envelope.spatialReference,bandCount:r.length||1,multidimensionalInfo:b});return{id:u,title:o.title,description:m||c,lonLatEnvelope:null,bandNames:r,rasterInfo:x,supportedFormats:n,supportedInterpolations:p,coverageDescription:o,version:t,useEPSGAxis:f.spatialDomain.useEPSGAxis}}function S(t){const n=p(t,"Envelope")||p(t,"EnvelopeWithTimePeriod"),i=n.getAttribute("srsName"),s=i.slice(i.lastIndexOf("/")+1),r=n.getAttribute("axisLabels").split(" ").map((e=>e.trim())).filter((e=>""!==e.trim())),l=u(n,"lowerCorner"),m=u(n,"upperCorner"),c=!["y","lat","latitude","north","nor","n","b"].includes(r[0].toLowerCase());let d;const f=parseInt(s,10),g=isNaN(f)?null:{wkid:f};d=new e(c?{xmin:l[0],ymin:l[1],xmax:m[0],ymax:m[1],spatialReference:g}:{xmin:l[1],ymin:l[0],xmax:m[1],ymax:m[0],spatialReference:g});const h={mins:l,maxs:m},b=n.getAttribute("uomLabels").trim().split(" ");let x,v;return o(n,"EnvelopeWithTimePeriod")&&(x=new Date(a(t,"beginPosition")||a(t,"BeginPosition")),v=new Date(a(t,"endPosition")||a(t,"EndPosition"))),{envelope:d,axisLabels:r,uomLabels:b.length?b:null,envelopeAllDims:h,beginPosition:x,endPosition:v,isEastFirst:c}}function C(e){const t=[],n=s(e,"DataRecord"),i=[];for(let o=0;o<n.length;o++){const e=s(n[o],"field"),r=[];for(let t=0;t<e.length;t++){const n=e[t].getAttribute("name"),s=a(e[t],"description")||"",o=p(e[t],"uom")?.getAttribute("code")||"",l=u(e[t],"interval");n.toLowerCase().includes("band")&&i.push(n),r.push({name:n,description:s,uom:o,allowedValues:l})}t.push(r)}return{rangeType:t,bandNames:i}}function I(e){let t=1,n="";const i=.01;return Math.abs(e-1/24)<1/24*i?n="Hours":Math.abs(e-1)<1*i?n="Days":e<1?(t=Math.round(24*e),n="Hours"):e>28-i&&e<31+i||Math.round(e/30)<12?n="Months":e>365-i&&e<366+i&&(n="Years"),{interval:t,intervalUnit:n}}function R(e,t,n){const i=[];for(let o=0;o<e.length;o++){const t=e[o];for(let e=0;e<t.length;e++)t[e].name.toLowerCase().includes("band")||i.push(t[e])}const s=[];if(i.length){const e=[];for(let i=2;i<n.axisLabels.length;i++){const s=(t.uomLabels&&t.uomLabels.length)>i?t.uomLabels[i]:"",o=n.axisLabels[i].toLowerCase().includes("time")||"iso8601"===s.toLowerCase()||"oledatetime"===s.toLowerCase();let a,r;if(o){const e=I(n.offset[i]);a=e.interval,r=e.intervalUnit}else a=n.offset[i],r=s;const l=[];o?(l.push((new Date).setTime(24*(t.envelopeAllDims.mins[i]-25569)*3600*1e3)),l.push((new Date).setTime(24*(t.envelopeAllDims.maxs[i]-25569)*3600*1e3))):(l.push(t.envelopeAllDims.mins[i]),l.push(t.envelopeAllDims.maxs[i])),e.push({name:n.axisLabels[i].trim(),description:n.axisLabels[i].trim(),unit:t.uomLabels&&t.uomLabels.length>i?t.uomLabels[i].trim():"",hasRegularIntervals:!0,extent:l,interval:a,intervalUnit:r})}if(i.forEach((t=>s.push({name:t.name.trim(),description:t.description?.trim()??"",unit:t.uom.trim(),dimensions:e}))),s.length)return{variables:s}}return null}function T(e,t){const n=p(e,"RectifiedGrid"),i=u(n,"low"),o=u(n,"high"),r=[];for(let s=0;s<i.length;s++)r.push(o[s]-i[s]+1);const l=a(n,"axisLabels").split(" "),m=u(n,"origin/pos"),c=s(n,"offsetVector"),d=[];for(let s=0;s<c.length;s++){const e=u(c[s]),t=e.findIndex((e=>0!==e));d[t]=e[t]}let f,g,h;return["y","lat","latitude","north","nor","n","b"].includes((t||l)[0].toLowerCase())?(f=r[1],g=r[0],h={y:Math.abs(d[0]),x:Math.abs(d[1])}):(f=r[0],g=r[1],h={x:Math.abs(d[0]),y:Math.abs(d[1])}),{columns:f,rows:g,origin:m,offset:d,resolution:h,gridSamples:r,axisLabels:l}}function M(e){const n=p(e,"EarthObservation");if(!n)return null;const i=p(n,"phenomenonTime"),s=i?b(i):null,o=p(n,"phenomenonTime"),r=o?b(o):null,l=a(n,"featureOfInterest/Footprint/multiExtentOf/MultiSurface/surfaceMembers/Polygon/exterior/LinearRing/posList");let u=null;if(l){const e=l.split(" ").map((e=>e.trim())).filter((e=>null!=e&&""!==e));if(e.length){const n=[];for(let t=0;t<e.length/2;t+=2)n.push(e[t],e[t+1]);u=new t({rings:[n],spatialReference:{wkid:4326}})}}return{observation:{phonomenonTime:s,resultTime:r,footprint:u,identifier:a(e,"metaDataProperty/EarthObservationMetaData/identifier"),acquisitionType:a(e,"metaDataProperty/EarthObservationMetaData/acquisitionType"),status:a(e,"metaDataProperty/EarthObservationMetaData/status")}}}function P(e){const t={version:"2.0"};let n=[];for(let i=0;i<e.childNodes.length;i++){const s=e.childNodes[i];if(1===s.nodeType)if(o(s,"coverageId"))t.coverageId=a(s);else if(o(s,"ServiceParameters"))t.serviceParameters={supportedFormats:r(s,"nativeFormat")};else if(o(s,"boundedBy"))t.boundedBy=S(s);else if(o(s,"rangeType")){const e=C(s);t.rangeType=e.rangeType,n=e.bandNames}else if(o(s,"domainSet"))t.domainSet=T(s,t.boundedBy?.axisLabels);else if(o(s,"metadata")){const e=p(s,"EOMetadata");t.eoMetadata=e?M(e):null}}const{coverageId:s,boundedBy:l,domainSet:u,rangeType:m,serviceParameters:c}=t,d=R(m,l,u);return{id:s,title:s,description:s,lonLatEnvelope:null,bandNames:n,rasterInfo:new i({width:u.columns,height:u.rows,pixelSize:u.resolution,extent:l.envelope,spatialReference:l.envelope.spatialReference,bandCount:n.length||1,multidimensionalInfo:d}),supportedFormats:c.supportedFormats,supportedInterpolations:null,coverageDescription:t,version:"2.0.1",useEPSGAxis:!1}}function E(e,t){let n=null;if("string"==typeof e){n=(new DOMParser).parseFromString(e,"text/xml")}else n=e;if("1.0.0"===t){return s(n,"CoverageOffering").map((e=>v(e)))}const i=s(n,"CoverageDescription");return"1.1.0"===t||"1.1.1"===t||"1.1.2"===t?i.map((e=>L(e,t))):i.map((e=>P(e)))}export{E as parseCoverages,d as standardizeInterpolations};
5
+ import e from"../../../geometry/Extent.js";import t from"../../../geometry/Polygon.js";import{isAxesOrderReversedForWkid as n}from"../../ogc/crsUtils.js";import i from"../RasterInfo.js";import{getElements as s,isSameTagIgnoreNS as o,getElementValue as a,getElementValues as r,getNodeNameIgnoreNS as l,getElement as p,getSpaceDelimitedNumericValues as u}from"./xmlUtilities.js";function m(e){return{requestResponseCRSs:r(e,"requestResponseCRSs").map((e=>e.split(":")[1])),nativeCRSs:r(e,"nativeCRSs").map((e=>e.split(":")[1]))}}function c(e,t){const n=r(e,"1.0.0"===t?"interpolationMethod":"InterpolationMethod"),i="1.0.0"===t?e.getAttribute("default"):a(e,"InterpolationMethods/Default");return null!=i?[i].concat(n.filter((e=>e.toLowerCase()!==i.toLowerCase()))):n}function d(e){return null==e?["nearest"]:e.map((e=>{const t=e.toLowerCase();return t.includes("nearest")?"nearest":t.includes("linear")?"bilinear":t.includes("cubic")?"cubic":null})).filter((e=>!!e))}function f(t){const n=s(t,"pos"),i=u(n[0]),o=u(n[1]);return new e({xmin:i[0],ymin:i[1],xmax:o[0],ymax:o[1],spatialReference:{wkid:4326}})}function g(e){const t=[],n=s(e,"RangeSet");let i=[];for(let o=0;o<n.length;o++){const e=a(n[o],"name"),l=a(n[o],"label"),p=[],u=s(n[o],"AxisDescription");for(let t=0;t<u.length;t++){const e=a(u[t],"name"),n=a(u[t],"label"),s=r(u[t],"singleValue");if(0===s.length){const e=a(u[t],"min"),n=a(u[t],"max"),i=Number(a(u[t],"res"))||1;if(null!==e&&null!==n)for(let t=parseInt(e,10);t<=parseInt(n,10);t+=i)s.push(t.toString())}"band"===e.toLowerCase()&&(i=s),p.push({name:e,label:n,values:s})}t.push({name:e,label:l,axis:p})}return{rangeSet:t,bandNames:i}}function h(e=null){if(!e)return{resolution:null,units:null};let t=e.toUpperCase();const n=["Y","M","D"],i=["H","M","S"],s=["Years","Months","Days","Hours","Minutes","Seconds"];let o,a,r;return t.includes("PT")?(t=t.slice(2),r=i.findIndex((e=>t.includes(e))),o=s[3+r],a=parseFloat(t.substring(0,t.length-1))):(t=t.slice(1),r=n.findIndex((e=>t.includes(e))),r>-1&&(o=s[r]),a=parseFloat(t.substring(0,t.length-1))),{resolution:a,units:o}}function b(e){const t=s(e,"timeposition");if(t.length>0){const e=[];for(let n=0;n<t.length;n++)e.push(new Date(a(t[n])));return{begin:e[0],end:e[e.length-1],values:e}}const n=p(e,"timePeriod")||p(e,"TimePeriod");if(n){return{begin:new Date(a(n,"beginPosition")||a(n,"BeginPosition")),end:new Date(a(n,"endPosition")||a(n,"EndPosition")),...h(a(n,"timeResolution")||a(n,"TimeResolution"))}}return null}function x(t){const n=p(t,"spatialDomain"),i=p(n,"Envelope")||p(n,"EnvelopeWithTimePeriod"),o=i.getAttribute("srsName").split(":"),r=o[o.length-1],l=s(i,"pos"),m=u(l[0]),c=u(l[1]),d=parseInt(r,10),f=isNaN(d)?null:{wkid:d},g=new e({xmin:m[0],ymin:m[1],xmax:c[0],ymax:c[1],spatialReference:f}),h=p(n,"RectifiedGrid"),x=a(h,"low").split(" "),v=a(h,"high").split(" "),w=parseInt(v[0],10)-parseInt(x[0],10)+1,y=parseInt(v[1],10)-parseInt(x[1],10)+1,D=u(n,"origin/pos"),L=s(n,"offsetVector"),S={envelope:g,columns:w,rows:y,offset:{x:parseFloat(a(L[0]).split(" ")[0]),y:parseFloat(a(L[1]).split(" ")[1])},origin:{x:D[0],y:D[1]}},C=p(t,"temporalDomain")||p(t,"TemporalDomain");return{spatialDomain:S,temporalDomain:C?b(C):null}}function v(e){const t={version:"1.0"};let n=[];for(let i=0;i<e.childNodes.length;i++){const s=e.childNodes[i];if(1===s.nodeType)if(o(s,"description"))t.description=a(s);else if(o(s,"name"))t.name=a(s);else if(o(s,"label"))t.label=a(s);else if(o(s,"supportedFormats"))t.supportedFormats=r(s,"formats");else if(o(s,"supportedCRSs"))t.supportedCRSs=m(s);else if(o(s,"supportedInterpolations"))t.supportedInterpolations=c(s,"1.0.0");else if(o(s,"lonLatEnvelope"))t.lonLatEnvelope=f(s);else if(o(s,"rangeSet")){const e=g(s);t.rangeSet=e.rangeSet,n=e.bandNames}else o(s,"domainSet")&&(t.domainSet=x(s))}const s=d(t.supportedInterpolations),{name:l,description:p,label:u,lonLatEnvelope:h,supportedFormats:b}=t,{spatialDomain:v}=t.domainSet,w={x:Math.abs(v.offset.x),y:Math.abs(v.offset.y)},y=new i({width:v.columns,height:v.rows,pixelSize:w,extent:v.envelope,spatialReference:v.envelope.spatialReference,bandCount:n.length||1});return{id:l,title:t.name,description:p||u,lonLatEnvelope:h,rasterInfo:y,bandNames:n,supportedFormats:b,supportedInterpolations:s,coverageDescription:t,version:"1.0.0",useEPSGAxis:!1}}function w(e){const t=[],n=s(e,"Field");let i=[];for(let o=0;o<n.length;o++){const e=a(n[o],"Identifier"),l=a(n[o],"Description"),p=a(n[o],"Definition"),u=a(n[o],"Abstract"),m=a(n[o],"Title"),d=c(n[o],"1.1.0"),f=[],g=s(n[o],"Axis");for(let t=0;t<g.length;t++){const e=g[t].getAttribute("identifier"),n=a(g[t],"UOM"),s=a(g[t],"DataType"),o=r(g[t],"Key");"band"===e.toLowerCase()&&(i=o),f.push({identifier:e,uom:n,dataType:s,values:o})}t.push({identifier:e,description:l,definition:p,abstract:u,title:m,supportedInterpolations:d,axis:f})}return{rangeSet:t,bandNames:i}}function y(e,t){const n=e.filter((e=>!e.identifier.toLowerCase().includes("field_1")&&!e.axis.some((e=>"band"===e.identifier.toLowerCase())))),i=[];if(n.length&&n.forEach((e=>{const t=e.axis.map((e=>{const t=e.values.map((t=>{if("ISO8601"===e.uom){return(t=t.trim()).toLowerCase().includes("z")?new Date(t).getTime():new Date(t+"Z").getTime()}return parseFloat(t.trim())})),n=[Math.min.apply(null,t),Math.max.apply(null,t)];return{name:e.identifier.trim(),description:"",field:e.identifier.trim(),unit:e.uom?e.uom.trim():"",hasRegularIntervals:!1,values:t,extent:n}}));i.push({name:e.identifier.trim(),description:e.description?.trim()??"",unit:"",dimensions:t})})),t.temporalDomain){const{begin:e,end:n,values:s,units:o,resolution:a}=t.temporalDomain;i.some((e=>e.dimensions.some((e=>"stdtime"===e.name.toLowerCase()))))||i.forEach((t=>{t.dimensions.push({name:"StdTime",description:"",unit:"ISO8601",values:s?.map((e=>e.getTime())),hasRegularIntervals:!s,interval:a,intervalUnit:o,extent:[e.getTime(),n.getTime()]})}))}return i.length?{variables:i}:null}function D(t){const i=p(t,"SpatialDomain"),o=p(i,"GridCRS"),r=a(o,"GridBaseCRS"),l=a(o,"GridOrigin")?.split(" ").map((e=>parseFloat(e)))??[0,0],m=u(o,"GridOffsets"),c=s(i,"BoundingBox");let d,f,g,h;for(let n=0;n<c.length;n++){const t=c[n].getAttribute("crs")?.toLowerCase();if(null!=t)if(t.includes("imagecrs")){const e=u(c[n],"LowerCorner"),t=u(c[n],"UpperCorner");d=t[0]-e[0]+1,f=t[1]-e[1]+1}else if(t.indexOf("epsg")>0){const i=t.split(":");g=parseInt(i[i.length-1],10);const s=u(c[n],"LowerCorner"),o=u(c[n],"UpperCorner");h=new e({xmin:s[0],ymin:s[1],xmax:o[0],ymax:o[1],spatialReference:{wkid:g}})}}const x=d>f,v=h.xmax-h.xmin>h.ymax-h.ymin;let w=!1;n(g)&&(x===v?w=!1:(w=!0,h=new e({xmin:h.ymin,ymin:h.xmin,xmax:h.ymax,ymax:h.xmax,spatialReference:{wkid:g}})));const y={columns:d,rows:f,origin:{x:l[0],y:l[1]},offset:{x:m[0],y:m[1]},gridBaseCRS:r,envelope:h,useEPSGAxis:w},D=p(t,"temporalDomain")||p(t,"TemporalDomain");return{spatialDomain:y,temporalDomain:D?b(D):null}}function L(e,t){const n=[],s=[],o={supportedFormats:n,supportedCRSs:s,version:"1.1"};let r;for(let i=0;i<e.childNodes.length;i++){const t=e.childNodes[i];if(1!==t.nodeType)continue;const p=l(t).toLowerCase();switch(p){case"title":case"abstract":case"identifier":o[p]=a(t);break;case"supportedformat":{const e=a(t);n.includes(e)||n.push(e)}break;case"supportedcrs":{const e=a(t);s.includes(e)||s.push(e)}break;case"range":{const e=w(t);o.range=e.rangeSet,r=e.bandNames}break;case"domain":o.domain=D(t)}}const p=d(o.range[0].supportedInterpolations),{identifier:u,abstract:m,title:c,domain:f,range:g}=o,h={x:Math.abs(f.spatialDomain.offset.x),y:Math.abs(f.spatialDomain.offset.y)},b=y(g,f),x=new i({width:f.spatialDomain.columns,height:f.spatialDomain.rows,pixelSize:h,extent:f.spatialDomain.envelope,spatialReference:f.spatialDomain.envelope.spatialReference,bandCount:r.length||1,multidimensionalInfo:b});return{id:u,title:o.title,description:m||c,lonLatEnvelope:null,bandNames:r,rasterInfo:x,supportedFormats:n,supportedInterpolations:p,coverageDescription:o,version:t,useEPSGAxis:f.spatialDomain.useEPSGAxis}}function S(t){const n=p(t,"Envelope")||p(t,"EnvelopeWithTimePeriod"),i=n.getAttribute("srsName"),s=i.slice(i.lastIndexOf("/")+1),r=n.getAttribute("axisLabels").split(" ").map((e=>e.trim())).filter((e=>""!==e.trim())),l=u(n,"lowerCorner"),m=u(n,"upperCorner"),c=!["y","lat","latitude","north","nor","n","b"].includes(r[0].toLowerCase());let d;const f=parseInt(s,10),g=isNaN(f)?null:{wkid:f};d=new e(c?{xmin:l[0],ymin:l[1],xmax:m[0],ymax:m[1],spatialReference:g}:{xmin:l[1],ymin:l[0],xmax:m[1],ymax:m[0],spatialReference:g});const h={mins:l,maxs:m},b=n.getAttribute("uomLabels").trim().split(" ");let x,v;return o(n,"EnvelopeWithTimePeriod")&&(x=new Date(a(t,"beginPosition")||a(t,"BeginPosition")),v=new Date(a(t,"endPosition")||a(t,"EndPosition"))),{envelope:d,axisLabels:r,uomLabels:b.length?b:null,envelopeAllDims:h,beginPosition:x,endPosition:v,isEastFirst:c}}function C(e){const t=[],n=s(e,"DataRecord"),i=[];let o;for(let r=0;r<n.length;r++){const e=s(n[r],"field"),l=[];for(let t=0;t<e.length;t++){const n=e[t].getAttribute("name"),s=a(e[t],"description")||"",r=p(e[t],"uom")?.getAttribute("code")||"",m=u(e[t],"interval");n.toLowerCase().includes("band")&&(i.push(n),m?.length&&(o=o||[],o.push({min:m[0],max:m[1],avg:-1,stddev:-1}))),l.push({name:n,description:s,uom:r,allowedValues:m})}t.push(l)}return{rangeType:t,bandNames:i,bandStats:o}}function I(e){let t=1,n="";const i=.01;return Math.abs(e-1/24)<1/24*i?n="Hours":Math.abs(e-1)<1*i?n="Days":e<1?(t=Math.round(24*e),n="Hours"):e>28-i&&e<31+i||Math.round(e/30)<12?n="Months":e>365-i&&e<366+i&&(n="Years"),{interval:t,intervalUnit:n}}function R(e,t,n){const i=[];for(let o=0;o<e.length;o++){const t=e[o];for(let e=0;e<t.length;e++)t[e].name.toLowerCase().includes("band")||i.push(t[e])}const s=[];if(i.length){const e=[];for(let i=2;i<n.axisLabels.length;i++){const s=(t.uomLabels&&t.uomLabels.length)>i?t.uomLabels[i]:"",o=n.axisLabels[i].toLowerCase().includes("time")||"iso8601"===s.toLowerCase()||"oledatetime"===s.toLowerCase();let a,r;if(o){const e=I(n.offset[i]);a=e.interval,r=e.intervalUnit}else a=n.offset[i],r=s;const l=[];o?(l.push((new Date).setTime(24*(t.envelopeAllDims.mins[i]-25569)*3600*1e3)),l.push((new Date).setTime(24*(t.envelopeAllDims.maxs[i]-25569)*3600*1e3))):(l.push(t.envelopeAllDims.mins[i]),l.push(t.envelopeAllDims.maxs[i])),e.push({name:n.axisLabels[i].trim(),description:n.axisLabels[i].trim(),unit:t.uomLabels&&t.uomLabels.length>i?t.uomLabels[i].trim():"",hasRegularIntervals:!0,extent:l,interval:a,intervalUnit:r})}if(i.forEach((t=>{const{allowedValues:n}=t,i=2===n?.length?[{min:n[0],max:n[1],avg:-1,stddev:-1}]:null;s.push({name:t.name.trim(),description:t.description?.trim()??"",unit:t.uom.trim(),statistics:i,dimensions:e})})),s.length)return{variables:s}}return null}function T(e,t){const n=p(e,"RectifiedGrid"),i=u(n,"low"),o=u(n,"high"),r=[];for(let s=0;s<i.length;s++)r.push(o[s]-i[s]+1);const l=a(n,"axisLabels").split(" "),m=u(n,"origin/pos"),c=s(n,"offsetVector"),d=[];for(let s=0;s<c.length;s++){const e=u(c[s]),t=e.findIndex((e=>0!==e));d[t]=e[t]}let f,g,h;return["y","lat","latitude","north","nor","n","b"].includes((t||l)[0].toLowerCase())?(f=r[1],g=r[0],h={y:Math.abs(d[0]),x:Math.abs(d[1])}):(f=r[0],g=r[1],h={x:Math.abs(d[0]),y:Math.abs(d[1])}),{columns:f,rows:g,origin:m,offset:d,resolution:h,gridSamples:r,axisLabels:l}}function M(e){const n=p(e,"EarthObservation");if(!n)return null;const i=p(n,"phenomenonTime"),s=i?b(i):null,o=p(n,"phenomenonTime"),r=o?b(o):null,l=a(n,"featureOfInterest/Footprint/multiExtentOf/MultiSurface/surfaceMembers/Polygon/exterior/LinearRing/posList");let u=null;if(l){const e=l.split(" ").map((e=>e.trim())).filter((e=>null!=e&&""!==e));if(e.length){const n=[];for(let t=0;t<e.length/2;t+=2)n.push(e[t],e[t+1]);u=new t({rings:[n],spatialReference:{wkid:4326}})}}return{observation:{phonomenonTime:s,resultTime:r,footprint:u,identifier:a(e,"metaDataProperty/EarthObservationMetaData/identifier"),acquisitionType:a(e,"metaDataProperty/EarthObservationMetaData/acquisitionType"),status:a(e,"metaDataProperty/EarthObservationMetaData/status")}}}function P(e){const t={version:"2.0"};let n,s=[];for(let i=0;i<e.childNodes.length;i++){const l=e.childNodes[i];if(1===l.nodeType)if(o(l,"coverageId"))t.coverageId=a(l);else if(o(l,"ServiceParameters"))t.serviceParameters={supportedFormats:r(l,"nativeFormat")};else if(o(l,"boundedBy"))t.boundedBy=S(l);else if(o(l,"rangeType")){const e=C(l);t.rangeType=e.rangeType,s=e.bandNames,n=e.bandStats}else if(o(l,"domainSet"))t.domainSet=T(l,t.boundedBy?.axisLabels);else if(o(l,"metadata")){const e=p(l,"EOMetadata");t.eoMetadata=e?M(e):null}}const{coverageId:l,boundedBy:u,domainSet:m,rangeType:c,serviceParameters:d}=t,f=R(c,u,m);!n&&f&&(n=f?.variables[0].statistics);return{id:l,title:l,description:l,lonLatEnvelope:null,bandNames:s,rasterInfo:new i({width:m.columns,height:m.rows,pixelSize:m.resolution,extent:u.envelope,spatialReference:u.envelope.spatialReference,bandCount:s.length||1,statistics:n,multidimensionalInfo:f}),supportedFormats:d.supportedFormats,supportedInterpolations:null,coverageDescription:t,version:"2.0.1",useEPSGAxis:!1}}function E(e,t){let n=null;if("string"==typeof e){n=(new DOMParser).parseFromString(e,"text/xml")}else n=e;if("1.0.0"===t){return s(n,"CoverageOffering").map((e=>v(e)))}const i=s(n,"CoverageDescription");return"1.1.0"===t||"1.1.1"===t||"1.1.2"===t?i.map((e=>L(e,t))):i.map((e=>P(e)))}export{E as parseCoverages,d as standardizeInterpolations};
@@ -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;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++)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){E=r[h];for(let e=0;e<p;e++)d[e]=E[h][e+h]}else 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=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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcgis/core",
3
- "version": "4.24.0-next.20220511",
3
+ "version": "4.24.0-next.20220512",
4
4
  "homepage": "https://js.arcgis.com",
5
5
  "description": "ArcGIS API for JavaScript: A complete 2D and 3D mapping and data visualization API",
6
6
  "keywords": [
@@ -27,9 +27,9 @@
27
27
  "dependencies": {
28
28
  "@esri/arcgis-html-sanitizer": "~2.10.0",
29
29
  "@esri/calcite-colors": "~6.0.1",
30
- "@esri/calcite-components": "1.0.0-beta.81",
30
+ "@esri/calcite-components": "1.0.0-beta.82",
31
31
  "@popperjs/core": "~2.11.5",
32
- "focus-trap": "~6.9.1",
32
+ "focus-trap": "~6.9.2",
33
33
  "luxon": "~2.4.0",
34
34
  "sortablejs": "~1.15.0"
35
35
  },
@@ -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{initializeProjection as e,project as t}from"../../geometry/projection.js";import r from"../../geometry/SpatialReference.js";import{webMercatorToGeographic as o}from"../../geometry/support/webMercatorUtils.js";async function n(n){const i=n.spatialReference;if(i.isWGS84)return n.clone();if(i.isWebMercator)return o(n);const s=r.WGS84;return await e(i,s),t(n,s)}function i(e,t){if(!s(e,t)){const r=e.typeKeywords;r?r.push(t):e.typeKeywords=[t]}}function s(e,t){return!!e.typeKeywords?.includes(t)}function c(e,t){const r=e.typeKeywords;if(r){const e=r.indexOf(t);e>-1&&r.splice(e,1)}}async function a(e){const t=e.clone().normalize();let r;if(t.length>1)for(const o of t)r?o.width>r.width&&(r=o):r=o;else r=t[0];return n(r)}const f={DEVELOPER_BASEMAP:"DeveloperBasemap",JSAPI:"ArcGIS API for JavaScript",METADATA:"Metadata",MULTI_LAYER:"Multilayer",SINGLE_LAYER:"Singlelayer"};export{f as TypeKeyword,i as addTypeKeyword,a as getWGS84ExtentForItem,s as hasTypeKeyword,c as removeTypeKeyword};
5
+ import{initializeProjection as e,project as t}from"../../geometry/projection.js";import r from"../../geometry/SpatialReference.js";import{webMercatorToGeographic as o}from"../../geometry/support/webMercatorUtils.js";async function n(n){const i=n.spatialReference;if(i.isWGS84)return n.clone();if(i.isWebMercator)return o(n);const s=r.WGS84;return await e(i,s),t(n,s)}function i(e,t){if(!s(e,t)){const r=e.typeKeywords;r?r.push(t):e.typeKeywords=[t]}}function s(e,t){return!!e.typeKeywords?.includes(t)}function c(e,t){const r=e.typeKeywords;if(r){const e=r.indexOf(t);e>-1&&r.splice(e,1)}}async function a(e){const t=e.clone().normalize();let r;if(t.length>1)for(const o of t)r?o.width>r.width&&(r=o):r=o;else r=t[0];return n(r)}const f={DEVELOPER_BASEMAP:"DeveloperBasemap",JSAPI:"ArcGIS API for JavaScript",METADATA:"Metadata",MULTI_LAYER:"Multilayer",SINGLE_LAYER:"Singlelayer",TABLE:"Table"};export{f as TypeKeyword,i as addTypeKeyword,a as getWGS84ExtentForItem,s as hasTypeKeyword,c as removeTypeKeyword};
@@ -0,0 +1,4 @@
1
+ import "../interfaces";
2
+
3
+ import PieChartRenderer = __esri.PieChartRenderer;
4
+ export default PieChartRenderer;
@@ -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
+ import{_ as t}from"../chunks/tslib.es6.js";import e from"../Color.js";import"../symbols.js";import{clone as o}from"../core/lang.js";import{toPt as r}from"../core/screenUtils.js";import{property as s}from"../core/accessorSupport/decorators/property.js";import"../core/accessorSupport/ensureType.js";import{enumeration as i}from"../core/accessorSupport/decorators/enumeration.js";import{subclass as l}from"../core/accessorSupport/decorators/subclass.js";import{collectArcadeFieldNames as a}from"../layers/support/fieldUtils.js";import u from"./Renderer.js";import{VisualVariablesMixin as p}from"./mixins/VisualVariablesMixin.js";import n from"./support/AttributeColorInfo.js";import m from"../symbols/SimpleMarkerSymbol.js";import c from"../symbols/SimpleFillSymbol.js";import d from"../symbols/SimpleLineSymbol.js";var h;let y=h=class extends(p(u)){constructor(t){super(t),this.attributes=null,this.backgroundSymbol=null,this.defaultColor=new e([0,0,0,0]),this.donutRatio=0,this.outline=null,this.sectorThreshold=0,this.size=null,this.type="pie-chart"}clone(){return new h({attributes:o(this.attributes),backgroundSymbol:o(this.backgroundSymbol),donutRatio:this.donutRatio,defaultColor:o(this.defaultColor),outline:o(this.outline),sectorThreshold:this.sectorThreshold,size:this.size,visualVariables:o(this.visualVariables)})}getSymbol(){return new m({size:this.size?this.size/2+(this.outline?.width||0):0})}async getSymbolAsync(){return this.getSymbol()}getSymbols(){return[this.getSymbol(),this.backgroundSymbol]}getAttributeHash(){return this.visualVariables&&this.visualVariables.reduce(((t,e)=>t+e.getAttributeHash()),"")}getMeshHash(){return this.getSymbols().reduce(((t,e)=>t+JSON.stringify(e)),"")}async collectRequiredFields(t,e){await this.collectVVRequiredFields(t,e);for(const o of this.attributes)o.valueExpression&&await a(t,e,o.valueExpression),o.field&&t.add(o.field)}};t([s({type:[n],json:{write:!0}})],y.prototype,"attributes",void 0),t([s({type:c,json:{default:null,write:!0}})],y.prototype,"backgroundSymbol",void 0),t([s({type:e,json:{write:!0}})],y.prototype,"defaultColor",void 0),t([s({type:Number,range:{min:0,max:1},json:{write:!0}})],y.prototype,"donutRatio",void 0),t([s({type:d,json:{default:null,write:!0}})],y.prototype,"outline",void 0),t([s({type:Number,range:{min:0,max:1},json:{write:!0}})],y.prototype,"sectorThreshold",void 0),t([s({type:Number,cast:r,json:{write:!0}})],y.prototype,"size",void 0),t([i({pieChart:"pie-chart"})],y.prototype,"type",void 0),y=h=t([l("esri.renderers.PieChartRenderer")],y);const b=y;export{b as default};
@@ -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 r}from"../chunks/tslib.es6.js";import{JSONMap as e}from"../core/jsonMap.js";import{JSONSupport as t}from"../core/JSONSupport.js";import{property as s}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{subclass as o}from"../core/accessorSupport/decorators/subclass.js";import i from"./support/AuthoringInfo.js";const n=new e({simple:"simple",uniqueValue:"unique-value",classBreaks:"class-breaks",heatmap:"heatmap",dotDensity:"dot-density",dictionary:"dictionary"},{ignoreUnknown:!0});let a=class extends t{constructor(r){super(r),this.authoringInfo=null,this.type=null}async getRequiredFields(r){if(!this.collectRequiredFields)return[];const e=new Set;return await this.collectRequiredFields(e,r),Array.from(e).sort()}getSymbol(r,e){}async getSymbolAsync(r,e){}getSymbols(){return[]}getAttributeHash(){return JSON.stringify(this)}getMeshHash(){return JSON.stringify(this)}};r([s({type:i,json:{write:!0}})],a.prototype,"authoringInfo",void 0),r([s({type:n.apiValues,readOnly:!0,json:{type:n.jsonValues,read:!1,write:{writer:n.write,ignoreOrigin:!0}}})],a.prototype,"type",void 0),a=r([o("esri.renderers.Renderer")],a);const p=a;export{p as default};
5
+ import{_ as r}from"../chunks/tslib.es6.js";import{JSONMap as e}from"../core/jsonMap.js";import{JSONSupport as t}from"../core/JSONSupport.js";import{property as s}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{subclass as o}from"../core/accessorSupport/decorators/subclass.js";import i from"./support/AuthoringInfo.js";const n=new e({simple:"simple",uniqueValue:"unique-value",classBreaks:"class-breaks",heatmap:"heatmap",dotDensity:"dot-density",dictionary:"dictionary",pieChart:"pie-chart"},{ignoreUnknown:!0});let a=class extends t{constructor(r){super(r),this.authoringInfo=null,this.type=null}async getRequiredFields(r){if(!this.collectRequiredFields)return[];const e=new Set;return await this.collectRequiredFields(e,r),Array.from(e).sort()}getSymbol(r,e){}async getSymbolAsync(r,e){}getSymbols(){return[]}getAttributeHash(){return JSON.stringify(this)}getMeshHash(){return JSON.stringify(this)}};r([s({type:i,json:{write:!0}})],a.prototype,"authoringInfo",void 0),r([s({type:n.apiValues,readOnly:!0,json:{type:n.jsonValues,read:!1,write:{writer:n.write,ignoreOrigin:!0}}})],a.prototype,"type",void 0),a=r([o("esri.renderers.Renderer")],a);const p=a;export{p as default};
@@ -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{JSONMap as t}from"../../core/jsonMap.js";import{JSONSupport as i}from"../../core/JSONSupport.js";import{clone as s}from"../../core/lang.js";import{property as l}from"../../core/accessorSupport/decorators/property.js";import{Integer as r}from"../../core/accessorSupport/ensureType.js";import{reader as a}from"../../core/accessorSupport/decorators/reader.js";import{subclass as o}from"../../core/accessorSupport/decorators/subclass.js";import{AuthoringInfoFieldInfo as n}from"./AuthoringInfoFieldInfo.js";import u from"./AuthoringInfoVisualVariable.js";import{types as p,fromJSON as c}from"../../rest/support/colorRamps.js";var d;const h=new t({esriClassifyDefinedInterval:"defined-interval",esriClassifyEqualInterval:"equal-interval",esriClassifyManual:"manual",esriClassifyNaturalBreaks:"natural-breaks",esriClassifyQuantile:"quantile",esriClassifyStandardDeviation:"standard-deviation"}),m=new t({classedSize:"class-breaks-size",classedColor:"class-breaks-color",univariateColorSize:"univariate-color-size",relationship:"relationship",predominance:"predominance",dotDensity:"dot-density",flow:"flow"}),y=new t({classedSize:"class-breaks-size",classedColor:"class-breaks-color",univariateColorSize:"univariate-color-size",relationship:"relationship",predominance:"predominance",dotDensity:"dot-density"}),f=["inches","feet","yards","miles","nautical-miles","millimeters","centimeters","decimeters","meters","kilometers","decimal-degrees"],v=["high-to-low","above-and-below","above","below","90-10"],w=["flow-line","wave-front"],b=["caret","circle-caret","arrow","circle-arrow","plus-minus","circle-plus-minus","square","circle","triangle","happy-sad","thumb","custom"];let g=d=class extends i{constructor(e){super(e),this.colorRamp=null,this.lengthUnit=null,this.maxSliderValue=null,this.minSliderValue=null,this.visualVariables=null}get classificationMethod(){const e=this._get("classificationMethod"),t=this.type;return t&&"relationship"!==t?"class-breaks-size"===t||"class-breaks-color"===t?e||"manual":null:e}set classificationMethod(e){this._set("classificationMethod",e)}readColorRamp(e){if(e)return c(e)}get fields(){return this.type&&"predominance"!==this.type?null:this._get("fields")}set fields(e){this._set("fields",e)}get field1(){return this.type&&"relationship"!==this.type?null:this._get("field1")}set field1(e){this._set("field1",e)}get field2(){return this.type&&"relationship"!==this.type?null:this._get("field2")}set field2(e){this._set("field2",e)}get flowTheme(){return"flow"===this.type?this._get("flowTheme"):null}set flowTheme(e){this._set("flowTheme",e)}get focus(){return this.type&&"relationship"!==this.type?null:this._get("focus")}set focus(e){this._set("focus",e)}get numClasses(){return this.type&&"relationship"!==this.type?null:this._get("numClasses")}set numClasses(e){this._set("numClasses",e)}get statistics(){return"univariate-color-size"===this.type&&"above-and-below"===this.univariateTheme?this._get("statistics"):null}set statistics(e){this._set("statistics",e)}get standardDeviationInterval(){const e=this.type;return e&&"relationship"!==e&&"class-breaks-size"!==e&&"class-breaks-color"!==e||this.classificationMethod&&"standard-deviation"!==this.classificationMethod?null:this._get("standardDeviationInterval")}set standardDeviationInterval(e){this._set("standardDeviationInterval",e)}get type(){return this._get("type")}set type(e){let t=e;"classed-size"===e?t="class-breaks-size":"classed-color"===e&&(t="class-breaks-color"),this._set("type",t)}get univariateSymbolStyle(){return"univariate-color-size"===this.type&&"above-and-below"===this.univariateTheme?this._get("univariateSymbolStyle"):null}set univariateSymbolStyle(e){this._set("univariateSymbolStyle",e)}get univariateTheme(){return"univariate-color-size"===this.type?this._get("univariateTheme"):null}set univariateTheme(e){this._set("univariateTheme",e)}clone(){return new d({classificationMethod:this.classificationMethod,colorRamp:s(this.colorRamp),fields:this.fields&&this.fields.slice(0),field1:s(this.field1),field2:s(this.field2),focus:this.focus,numClasses:this.numClasses,maxSliderValue:this.maxSliderValue,minSliderValue:this.minSliderValue,lengthUnit:this.lengthUnit,statistics:this.statistics,standardDeviationInterval:this.standardDeviationInterval,type:this.type,visualVariables:this.visualVariables&&this.visualVariables.map((e=>e.clone())),univariateSymbolStyle:this.univariateSymbolStyle,univariateTheme:this.univariateTheme,flowTheme:this.flowTheme})}};e([l({type:h.apiValues,value:null,json:{type:h.jsonValues,read:h.read,write:h.write,origins:{"web-document":{default:"manual",type:h.jsonValues,read:h.read,write:h.write}}}})],g.prototype,"classificationMethod",null),e([l({types:p,json:{write:!0}})],g.prototype,"colorRamp",void 0),e([a("colorRamp")],g.prototype,"readColorRamp",null),e([l({type:[String],value:null,json:{write:!0}})],g.prototype,"fields",null),e([l({type:n,value:null,json:{write:!0}})],g.prototype,"field1",null),e([l({type:n,value:null,json:{write:!0}})],g.prototype,"field2",null),e([l({type:w,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"flowTheme",null),e([l({type:["HH","HL","LH","LL"],value:null,json:{write:!0}})],g.prototype,"focus",null),e([l({type:Number,value:null,json:{type:r,write:!0}})],g.prototype,"numClasses",null),e([l({type:f,json:{type:f,read:!1,write:!1,origins:{"web-scene":{read:!0,write:!0}}}})],g.prototype,"lengthUnit",void 0),e([l({type:Number,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"maxSliderValue",void 0),e([l({type:Number,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"minSliderValue",void 0),e([l({type:Object,value:null,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"statistics",null),e([l({type:[.25,.33,.5,1],value:null,json:{type:[.25,.33,.5,1],write:!0}})],g.prototype,"standardDeviationInterval",null),e([l({type:m.apiValues,value:null,json:{type:m.jsonValues,read:m.read,write:m.write,origins:{"web-scene":{type:y.jsonValues,write:{writer:y.write,overridePolicy:e=>({enabled:"flow"!==e})}}}}})],g.prototype,"type",null),e([l({type:[u],json:{write:!0}})],g.prototype,"visualVariables",void 0),e([l({type:b,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"univariateSymbolStyle",null),e([l({type:v,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"univariateTheme",null),g=d=e([o("esri.renderers.support.AuthoringInfo")],g);const j=g;export{j as default};
5
+ import{_ as e}from"../../chunks/tslib.es6.js";import{JSONMap as t}from"../../core/jsonMap.js";import{JSONSupport as i}from"../../core/JSONSupport.js";import{clone as s}from"../../core/lang.js";import{property as r}from"../../core/accessorSupport/decorators/property.js";import{Integer as l}from"../../core/accessorSupport/ensureType.js";import{reader as a}from"../../core/accessorSupport/decorators/reader.js";import{subclass as o}from"../../core/accessorSupport/decorators/subclass.js";import{AuthoringInfoFieldInfo as n}from"./AuthoringInfoFieldInfo.js";import u from"./AuthoringInfoVisualVariable.js";import{types as p,fromJSON as c}from"../../rest/support/colorRamps.js";var d;const h=new t({esriClassifyDefinedInterval:"defined-interval",esriClassifyEqualInterval:"equal-interval",esriClassifyManual:"manual",esriClassifyNaturalBreaks:"natural-breaks",esriClassifyQuantile:"quantile",esriClassifyStandardDeviation:"standard-deviation"}),m=new t({pieChart:"pie-chart",classedSize:"class-breaks-size",classedColor:"class-breaks-color",univariateColorSize:"univariate-color-size",relationship:"relationship",predominance:"predominance",dotDensity:"dot-density",flow:"flow"}),y=new t({classedSize:"class-breaks-size",classedColor:"class-breaks-color",univariateColorSize:"univariate-color-size",relationship:"relationship",predominance:"predominance",dotDensity:"dot-density"}),f=["inches","feet","yards","miles","nautical-miles","millimeters","centimeters","decimeters","meters","kilometers","decimal-degrees"],v=["high-to-low","above-and-below","above","below","90-10"],w=["flow-line","wave-front"],b=["caret","circle-caret","arrow","circle-arrow","plus-minus","circle-plus-minus","square","circle","triangle","happy-sad","thumb","custom"];let g=d=class extends i{constructor(e){super(e),this.colorRamp=null,this.lengthUnit=null,this.maxSliderValue=null,this.minSliderValue=null,this.visualVariables=null}get classificationMethod(){const e=this._get("classificationMethod"),t=this.type;return t&&"relationship"!==t?"class-breaks-size"===t||"class-breaks-color"===t?e||"manual":null:e}set classificationMethod(e){this._set("classificationMethod",e)}readColorRamp(e){if(e)return c(e)}get fields(){return this.type&&"predominance"!==this.type?null:this._get("fields")}set fields(e){this._set("fields",e)}get field1(){return this.type&&"relationship"!==this.type?null:this._get("field1")}set field1(e){this._set("field1",e)}get field2(){return this.type&&"relationship"!==this.type?null:this._get("field2")}set field2(e){this._set("field2",e)}get flowTheme(){return"flow"===this.type?this._get("flowTheme"):null}set flowTheme(e){this._set("flowTheme",e)}get focus(){return this.type&&"relationship"!==this.type?null:this._get("focus")}set focus(e){this._set("focus",e)}get numClasses(){return this.type&&"relationship"!==this.type?null:this._get("numClasses")}set numClasses(e){this._set("numClasses",e)}get statistics(){return"univariate-color-size"===this.type&&"above-and-below"===this.univariateTheme?this._get("statistics"):null}set statistics(e){this._set("statistics",e)}get standardDeviationInterval(){const e=this.type;return e&&"relationship"!==e&&"class-breaks-size"!==e&&"class-breaks-color"!==e||this.classificationMethod&&"standard-deviation"!==this.classificationMethod?null:this._get("standardDeviationInterval")}set standardDeviationInterval(e){this._set("standardDeviationInterval",e)}get type(){return this._get("type")}set type(e){let t=e;"classed-size"===e?t="class-breaks-size":"classed-color"===e&&(t="class-breaks-color"),this._set("type",t)}get univariateSymbolStyle(){return"univariate-color-size"===this.type&&"above-and-below"===this.univariateTheme?this._get("univariateSymbolStyle"):null}set univariateSymbolStyle(e){this._set("univariateSymbolStyle",e)}get univariateTheme(){return"univariate-color-size"===this.type?this._get("univariateTheme"):null}set univariateTheme(e){this._set("univariateTheme",e)}clone(){return new d({classificationMethod:this.classificationMethod,colorRamp:s(this.colorRamp),fields:this.fields&&this.fields.slice(0),field1:s(this.field1),field2:s(this.field2),focus:this.focus,numClasses:this.numClasses,maxSliderValue:this.maxSliderValue,minSliderValue:this.minSliderValue,lengthUnit:this.lengthUnit,statistics:this.statistics,standardDeviationInterval:this.standardDeviationInterval,type:this.type,visualVariables:this.visualVariables&&this.visualVariables.map((e=>e.clone())),univariateSymbolStyle:this.univariateSymbolStyle,univariateTheme:this.univariateTheme,flowTheme:this.flowTheme})}};e([r({type:h.apiValues,value:null,json:{type:h.jsonValues,read:h.read,write:h.write,origins:{"web-document":{default:"manual",type:h.jsonValues,read:h.read,write:h.write}}}})],g.prototype,"classificationMethod",null),e([r({types:p,json:{write:!0}})],g.prototype,"colorRamp",void 0),e([a("colorRamp")],g.prototype,"readColorRamp",null),e([r({type:[String],value:null,json:{write:!0}})],g.prototype,"fields",null),e([r({type:n,value:null,json:{write:!0}})],g.prototype,"field1",null),e([r({type:n,value:null,json:{write:!0}})],g.prototype,"field2",null),e([r({type:w,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"flowTheme",null),e([r({type:["HH","HL","LH","LL"],value:null,json:{write:!0}})],g.prototype,"focus",null),e([r({type:Number,value:null,json:{type:l,write:!0}})],g.prototype,"numClasses",null),e([r({type:f,json:{type:f,read:!1,write:!1,origins:{"web-scene":{read:!0,write:!0}}}})],g.prototype,"lengthUnit",void 0),e([r({type:Number,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"maxSliderValue",void 0),e([r({type:Number,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"minSliderValue",void 0),e([r({type:Object,value:null,json:{write:!0,origins:{"web-scene":{write:!1,read:!1}}}})],g.prototype,"statistics",null),e([r({type:[.25,.33,.5,1],value:null,json:{type:[.25,.33,.5,1],write:!0}})],g.prototype,"standardDeviationInterval",null),e([r({type:m.apiValues,value:null,json:{type:m.jsonValues,read:m.read,write:m.write,origins:{"web-scene":{type:y.jsonValues,write:{writer:y.write,overridePolicy:e=>({enabled:"flow"!==e})}}}}})],g.prototype,"type",null),e([r({type:[u],json:{write:!0}})],g.prototype,"visualVariables",void 0),e([r({type:b,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"univariateSymbolStyle",null),e([r({type:v,value:null,json:{write:!0,origins:{"web-scene":{write:!1}}}})],g.prototype,"univariateTheme",null),g=d=e([o("esri.renderers.support.AuthoringInfo")],g);const j=g;export{j as default};
@@ -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{toHSV as r}from"../../core/colorUtils.js";import{JSONSupport as t}from"../../core/JSONSupport.js";import s from"../../core/Logger.js";import{unwrap as o,isSome as a,isNone as n}from"../../core/maybe.js";import{property as i}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../core/accessorSupport/decorators/subclass.js";import u from"../../layers/support/RasterInfo.js";import{isValidPixelBlock as c,extractBands as p,colorize as d,remapColor as h,lookupPixels as m,createColormapLUT as f}from"../../layers/support/rasterFunctions/pixelUtils.js";import{stretch as y,getStretchCutoff as b,createStretchLUT as g,createHistogramEqualizationLUT as S}from"../../layers/support/rasterFunctions/stretchUtils.js";import{hillshade as k,tintHillshade as R,calculateHillshadeParams as x}from"../../layers/support/rasterFunctions/surfaceUtils.js";import{convertColorRampToColormap as I}from"./colorRampUtils.js";const _=s.getLogger("esri.renderers.support.RasterSymbolizer");function C(e,r){const{attributeTable:t,bandCount:s}=e;if(n(t)||s>1)return!1;if(r){if(null==t.fields.find((e=>e.name.toLowerCase()===r.toLowerCase())))return!1}return!0}function L(e){return"elevation"===e.dataType}function V(e){const{bandCount:r,colormap:t}=e;return a(t)&&t.length&&1===r}let v=class extends t{constructor(e){super(e)}bind(){const{rendererJSON:e}=this;if(!e)return{success:!1};let r;switch(this.lookup={rendererJSON:{}},e.type){case"uniqueValue":r=this._updateUVRenderer(e);break;case"rasterColormap":r=this._updateColormapRenderer(e);break;case"rasterStretch":r=this._updateStretchRenderer(e);break;case"classBreaks":r=this._updateClassBreaksRenderer(e);break;case"rasterShadedRelief":r=this._updateShadedReliefRenderer(e);break;case"vectorField":r=this._updateVectorFieldRenderer();break;case"flowRenderer":r=this._updateFlowRenderer()}return r}symbolize(e){let r=e&&e.pixelBlock;if(!O(r))return r;if(e.simpleStretchParams&&"rasterStretch"===this.rendererJSON.type)return this.simpleStretch(r,e.simpleStretchParams);try{let t;switch(r.pixels.length>3&&(r=p(r,[0,1,2])),this.rendererJSON.type){case"uniqueValue":case"rasterColormap":t=this._symbolizeColormap(r);break;case"classBreaks":t=this._symbolizeClassBreaks(r);break;case"rasterStretch":t=this._symbolizeStretch(r,e.bandIds);break;case"rasterShadedRelief":{const{extent:s}=e,o=s.spatialReference.isGeographic,a={x:(s.xmax-s.xmin)/r.width,y:(s.ymax-s.ymin)/r.height};t=this._symbolizeShadedRelief(r,{isGCS:o,resolution:a});break}}return t}catch(t){return _.error("symbolize",t.message),r}}simpleStretch(e,r){if(!O(e))return e;try{return e.pixels.length>3&&(e=p(e,[0,1,2])),y(e,r)}catch(t){return _.error("symbolize",t.message),e}}generateWebGLParameters(e){if(["uniqueValue","rasterColormap","classBreaks"].includes(this.rendererJSON.type)){const{indexedColormap:e,offset:r}=this.lookup?.colormapLut||{};return{colormap:e,colormapOffset:r,type:"lut"}}const{pixelBlock:r,isGCS:t,resolution:s,bandIds:o}=e,{rendererJSON:a}=this;return"rasterStretch"===a.type?this._generateStretchWebGLParams(r,a,o):"rasterShadedRelief"===a.type?this._generateShadedReliefWebGLParams(a,t,s):"vectorField"===a.type?this._generateVectorFieldWebGLParams(a):null}_isLUTChanged(e){if(!this.lookup||!this.lookup.rendererJSON)return!0;if("colorRamp"in this.rendererJSON){const r=this.rendererJSON.colorRamp;return e?JSON.stringify(r)!==JSON.stringify(this.lookup.rendererJSON.colorRamp):(this.rendererJSON,this.lookup.rendererJSON,JSON.stringify(this.rendererJSON)!==JSON.stringify(this.lookup.rendererJSON))}return JSON.stringify(this.rendererJSON)!==JSON.stringify(this.lookup.rendererJSON)}_symbolizeColormap(e){if(this._isLUTChanged()){if(!this.bind().success)return e}return d(e,this.lookup.colormapLut)}_symbolizeClassBreaks(e){const r=this.rasterInfo.pixelType,t=["u8","u16","s8","s16"].includes(r);if(this._isLUTChanged()){if(!this.bind().success)return e}return t?d(e,this.lookup.colormapLut):h(e,this.lookup.remapLut)}_symbolizeStretch(e,r){const{rasterInfo:t}=this,{pixelType:s,bandCount:a}=t,n=this.rendererJSON,i=["u8","u16","s8","s16"].includes(s);let l,u;const{dra:c}=n,p=n.useGamma?n.gamma:null;if("histogramEqualization"===n.stretchType){const s=c?null:this.lookup.histogramLut,o=b(n,{rasterInfo:t,pixelBlock:e,bandIds:r,returnHistogramLut:!s}),a=y(e,{...o,gamma:p});u=m(a,{lut:c?o.histogramLut:s,offset:0})}else if(i){if(c){const o=b(n,{rasterInfo:t,pixelBlock:e,bandIds:r});l=g({pixelType:s,...o,gamma:p})}else if(this._isLUTChanged()){if(!this.bind().success)return e;l=this.lookup?this.lookup.stretchLut:null}else l=this.lookup?this.lookup.stretchLut:null;if(!l)return e;a>1&&r?.length===o(e)?.pixels.length&&l?.lut.length===a&&(l={lut:r.map((e=>l.lut[e])),offset:l.offset}),u=m(e,l)}else{const s=b(n,{rasterInfo:t,pixelBlock:e,bandIds:r});u=y(e,{...s,gamma:p})}if(n.colorRamp){if(this._isLUTChanged(!0)){if(!this.bind().success)return e}u=d(u,this.lookup.colormapLut)}return u}_symbolizeShadedRelief(e,r){const t=this.rendererJSON,s={...t,...r},a=k(e,s);if(!t.colorRamp)return a;let n;if(this._isLUTChanged(!0)){if(!this.bind().success)return a;n=this.lookup?this.lookup.hsvMap:null}else n=this.lookup?this.lookup.hsvMap:null;if(!n)return a;const i=o(this.rasterInfo.statistics)?.[0]??{min:0,max:8e3};return R(a,e,n,i),a}_isVectorFieldData(){const{bandCount:e,dataType:r}=this.rasterInfo;return 2===e&&("vector-magdir"===r||"vector-uv"===r)}_updateVectorFieldRenderer(){return this._isVectorFieldData()?{success:!0}:{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; VectorFieldRenderer only supports "vector-magdir" and "vector-uv".`}}_updateFlowRenderer(){return this._isVectorFieldData()?{success:!0}:{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; FlowRenderer only supports "vector-magdir" and "vector-uv".`}}_updateUVRenderer(e){const{bandCount:r,attributeTable:t,pixelType:s}=this.rasterInfo,o=e.field1;if(!o)return{success:!1,error:"Unsupported renderer; missing UniqueValueRenderer.field."};const a=e.defaultSymbol,n=1===r&&["u8","s8"].includes(s);if(!C(this.rasterInfo,o)&&!n)return{success:!1,error:"Unsupported data; UniqueValueRenderer is only supported on single band data with a valid raster attribute table."};const i=[];if(t){const r=t.fields.find((e=>"value"===e.name.toLowerCase()));if(!r)return{success:!1,error:"Unsupported data; the data's raster attribute table does not have a value field."};t.features.forEach((t=>{const s=e.uniqueValueInfos.find((e=>String(e.value)===String(t.attributes[o])))?.symbol?.color;s?i.push([t.attributes[r.name]].concat(s)):a&&i.push([t.attributes[r.name]].concat(a.color))}))}else{if("value"!==o.toLowerCase())return{success:!1,error:'Unsupported renderer; UniqueValueRenderer.field must be "Value" when raster attribute table is not availalbe.'};e.uniqueValueInfos.forEach((e=>{const r=e?.symbol?.color;r?i.push([parseInt(""+e.value,10)].concat(r)):a&&i.push([parseInt(""+e.value,10)].concat(a.color))}))}if(0===i.length)return{success:!1,error:"Invalid UniqueValueRenderer. Cannot find matching records in the raster attribute table."};const l=f({colormap:i});return this.lookup={rendererJSON:e,colormapLut:l},this.canRenderInWebGL=!0,{success:!0}}_updateColormapRenderer(e){if(!V(this.rasterInfo))return{success:!1,error:"Unsupported data; the data source does not have a colormap."};const r=e.colormapInfos.map((e=>[e.value].concat(e.color))).sort(((e,r)=>e[0]-r[0]));if(!r||0===r.length)return{success:!1,error:"Unsupported renderer; ColormapRenderer must have meaningful colormapInfos."};const t=f({colormap:r});return this.lookup={rendererJSON:e,colormapLut:t},this.canRenderInWebGL=!0,{success:!0}}_updateShadedReliefRenderer(e){if(!L(this.rasterInfo))return{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; ShadedReliefRenderer only supports "elevation".`};if(e.colorRamp){const t=I(e.colorRamp,256,!0),s=f({colormap:t}),o=[],a=s.indexedColormap;for(let e=0;e<a.length;e+=4){const t=r({r:a[e],g:a[e+1],b:a[e+2]});o.push([t.h/60,t.s/100,255*t.v/100])}this.lookup={rendererJSON:e,colormapLut:s,hsvMap:o}}else this.lookup=null;return this.canRenderInWebGL=!0,{success:!0}}_updateClassBreaksRenderer(e){const r=this.rasterInfo.pixelType,t=["u8","u16","s8","s16"].includes(r),s=e.classBreakInfos;if(!s?.length)return{success:!1,error:"Unsupported renderer; missing or invalid ClassBreaksRenderer.classBreakInfos."};const o=s.sort(((e,r)=>e.classMaxValue-r.classMaxValue)),a=o[o.length-1];let n=e.minValue;if(!t){const r=[];for(let e=0;e<o.length;e++)r.push({value:o[e].classMinValue??n,mappedColor:o[e].symbol.color}),n=o[e].classMaxValue;return r.push({value:a.classMaxValue,mappedColor:a.symbol.color}),this.lookup={rendererJSON:e,remapLut:r},this.canRenderInWebGL=!1,{success:!0}}const i=[];n=Math.floor(e.minValue);for(let u=0;u<o.length;u++){const e=o[u];for(let r=n;r<e.classMaxValue;r++)i.push([r].concat(e.symbol.color));n=Math.ceil(e.classMaxValue)}a.classMaxValue===n&&i.push([a.classMaxValue].concat(a.symbol.color));const l=f({colormap:i,fillUnspecified:!1});return this.lookup={rendererJSON:e,colormapLut:l},this.canRenderInWebGL=!0,{success:!0}}_isHistogramRequired(e){return"percentClip"===e||"histogramEqualization"===e}_isValidRasterStatistics(e){return a(e)&&e.length>0&&null!=e[0].min&&null!=e[0].max}_updateStretchRenderer(e){let{stretchType:r,dra:t}=e;if(!("none"===r||e.statistics?.length||this._isValidRasterStatistics(this.rasterInfo.statistics)||t))return{success:!1,error:"Unsupported renderer; StretchRenderer.statistics is required when dynamic range adjustment is not used."};const s=o(e.histograms||this.rasterInfo.histograms);!this._isHistogramRequired(e.stretchType)||s?.length||t||(r="minMax");const{gamma:a,useGamma:n,colorRamp:i}=e,l=this.rasterInfo.pixelType,u=!t&&["u8","u16","s8","s16"].includes(l);if("histogramEqualization"===r){const r=s.map((e=>S(e)));this.lookup={rendererJSON:e,histogramLut:r}}else if(u){const r=b(e,{rasterInfo:this.rasterInfo}),t=g({pixelType:l,...r,gamma:n?a:null});this.lookup={rendererJSON:e,stretchLut:t}}if(i){const r=I(i,256,!0);this.lookup||(this.lookup={rendererJSON:e}),this.lookup.colormapLut=f({colormap:r}),this.lookup.rendererJSON=e}return this.canRenderInWebGL=!0,{success:!0}}_generateStretchWebGLParams(e,r,t){let s=null,o=null;const n=this.lookup&&this.lookup.colormapLut;r.colorRamp&&n&&(s=n.indexedColormap,o=n.offset),"histogramEqualization"===r.stretchType&&(r={...r,stretchType:"minMax"});const{gamma:i}=r,l=!!(r.useGamma&&i&&i.some((e=>1!==e))),{minCutOff:u,maxCutOff:c,outMin:p,outMax:d}=b(r,{rasterInfo:this.rasterInfo,pixelBlock:e,bandIds:t});let h=0;a(e)&&(h=e.getPlaneCount(),2===h&&((e=e.clone()).statistics=[e.statistics[0]],e.pixels=[e.pixels[0]]));const m=Math.min(3,t?.length||h||this.rasterInfo.bandCount),f=new Float32Array(m),y=s||l?1:255;let g;for(g=0;g<m;g++)f[g]=(d-p)/(c[g]-u[g])/y;const S=new Float32Array(m);if(l)for(g=0;g<m;g++)i[g]>1?i[g]>2?S[g]=6.5+(i[g]-2)**2.5:S[g]=6.5+100*(2-i[g])**4:S[g]=1;return{bandCount:m,outMin:p/y,outMax:d/y,minCutOff:u,maxCutOff:c,factor:f,useGamma:l,gamma:l?i:[1,1,1],gammaCorrection:l?S:[1,1,1],colormap:s,colormapOffset:o,stretchType:r.stretchType,type:"stretch"}}_generateShadedReliefWebGLParams(e,r,t){let s=null,a=null;const n=this.lookup&&this.lookup.colormapLut;e.colorRamp&&n&&(s=n.indexedColormap,a=n.offset);const i={...e,isGCS:r,resolution:t},l=x(i),u=o(this.rasterInfo.statistics)?.[0];return{...l,minValue:u?.min??0,maxValue:u?.max??8e3,hillshadeType:"traditional"===e.hillshadeType?0:1,type:"hillshade",colormap:s,colormapOffset:a}}_generateVectorFieldWebGLParams(e){const{style:r,inputUnit:t,outputUnit:s,visualVariables:o,symbolTileSize:n,flowRepresentation:i}=e;let l;const u=this.rasterInfo.statistics?.[0].min??0,c=this.rasterInfo.statistics?.[0].max??50,p=o?.find((e=>"sizeInfo"===e.type))??{type:"sizeInfo",field:"Magnitude",maxDataValue:c,maxSize:.8*n,minDataValue:u,minSize:.2*n},d=p.minDataValue??u,h=p.maxDataValue??c,m=a(p.maxSize)&&a(p.minSize)?[p.minSize/n,p.maxSize/n]:[.2,.8];if("wind_speed"===r){const e=(m[0]+m[1])/2;m[0]=m[1]=e}const f=a(d)&&a(h)?[d,h]:null;if("classified_arrow"===r)if(a(d)&&a(h)&&a(p)){l=[];const e=(p.maxDataValue-p.minDataValue)/5;for(let r=0;r<6;r++)l.push(p.minDataValue+e*r)}else l=[0,1e-6,3.5,7,10.5,14];const y="flow_to"===i===("ocean_current_kn"===r||"ocean_current_m"===r)?0:Math.PI,b=o?.find((e=>"rotationInfo"===e.type));return{breakValues:l,dataRange:f,inputUnit:t,outputUnit:s,symbolTileSize:n,symbolPercentRange:m,style:r||"single_arrow",rotation:y,rotationType:this.rasterInfo.storageInfo?.tileInfo&&"vector-uv"===this.rasterInfo.dataType?"geographic":b?.rotationType||e.rotationType,type:"vectorField"}}};function O(e){return c(e)&&0!==e.validPixelCount}e([i({json:{write:!0}})],v.prototype,"rendererJSON",void 0),e([i({type:u,json:{write:!0}})],v.prototype,"rasterInfo",void 0),e([i({json:{write:!0}})],v.prototype,"lookup",void 0),e([i()],v.prototype,"canRenderInWebGL",void 0),v=e([l("esri.renderers.support.RasterSymbolizer")],v);const T=v;export{T as default};
5
+ import{_ as e}from"../../chunks/tslib.es6.js";import{toHSV as r}from"../../core/colorUtils.js";import{JSONSupport as t}from"../../core/JSONSupport.js";import s from"../../core/Logger.js";import{unwrap as a,isSome as o,isNone as n}from"../../core/maybe.js";import{property as i}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../core/accessorSupport/decorators/subclass.js";import u from"../../layers/support/RasterInfo.js";import{isValidPixelBlock as c,extractBands as p,colorize as d,remapColor as h,lookupPixels as m,createColormapLUT as f}from"../../layers/support/rasterFunctions/pixelUtils.js";import{stretch as b,getStretchCutoff as y,createStretchLUT as g,createHistogramEqualizationLUT as S}from"../../layers/support/rasterFunctions/stretchUtils.js";import{hillshade as k,tintHillshade as R,calculateHillshadeParams as x}from"../../layers/support/rasterFunctions/surfaceUtils.js";import{convertColorRampToColormap as I}from"./colorRampUtils.js";const C=s.getLogger("esri.renderers.support.RasterSymbolizer");function _(e,r){const{attributeTable:t,bandCount:s}=e;if(n(t)||s>1)return!1;if(r){if(null==t.fields.find((e=>e.name.toLowerCase()===r.toLowerCase())))return!1}return!0}function L(e){return"elevation"===e.dataType}function V(e){const{bandCount:r,colormap:t}=e;return o(t)&&t.length&&1===r}let v=class extends t{constructor(e){super(e)}bind(){const{rendererJSON:e}=this;if(!e)return{success:!1};let r;switch(this.lookup={rendererJSON:{}},e.type){case"uniqueValue":r=this._updateUVRenderer(e);break;case"rasterColormap":r=this._updateColormapRenderer(e);break;case"rasterStretch":r=this._updateStretchRenderer(e);break;case"classBreaks":r=this._updateClassBreaksRenderer(e);break;case"rasterShadedRelief":r=this._updateShadedReliefRenderer(e);break;case"vectorField":r=this._updateVectorFieldRenderer();break;case"flowRenderer":r=this._updateFlowRenderer()}return r}symbolize(e){let r=e&&e.pixelBlock;if(!O(r))return r;if(e.simpleStretchParams&&"rasterStretch"===this.rendererJSON.type)return this.simpleStretch(r,e.simpleStretchParams);try{let t;switch(r.pixels.length>3&&(r=p(r,[0,1,2])),this.rendererJSON.type){case"uniqueValue":case"rasterColormap":t=this._symbolizeColormap(r);break;case"classBreaks":t=this._symbolizeClassBreaks(r);break;case"rasterStretch":t=this._symbolizeStretch(r,e.bandIds);break;case"rasterShadedRelief":{const{extent:s}=e,a=s.spatialReference.isGeographic,o={x:(s.xmax-s.xmin)/r.width,y:(s.ymax-s.ymin)/r.height};t=this._symbolizeShadedRelief(r,{isGCS:a,resolution:o});break}}return t}catch(t){return C.error("symbolize",t.message),r}}simpleStretch(e,r){if(!O(e))return e;try{return e.pixels.length>3&&(e=p(e,[0,1,2])),b(e,r)}catch(t){return C.error("symbolize",t.message),e}}generateWebGLParameters(e){if(["uniqueValue","rasterColormap","classBreaks"].includes(this.rendererJSON.type)){const{indexedColormap:e,offset:r}=this.lookup?.colormapLut||{};return{colormap:e,colormapOffset:r,type:"lut"}}const{pixelBlock:r,isGCS:t,resolution:s,bandIds:a}=e,{rendererJSON:o}=this;return"rasterStretch"===o.type?this._generateStretchWebGLParams(r,o,a):"rasterShadedRelief"===o.type?this._generateShadedReliefWebGLParams(o,t,s):"vectorField"===o.type?this._generateVectorFieldWebGLParams(o):null}_isLUTChanged(e){if(!this.lookup||!this.lookup.rendererJSON)return!0;if("colorRamp"in this.rendererJSON){const r=this.rendererJSON.colorRamp;return e?JSON.stringify(r)!==JSON.stringify(this.lookup.rendererJSON.colorRamp):(this.rendererJSON,this.lookup.rendererJSON,JSON.stringify(this.rendererJSON)!==JSON.stringify(this.lookup.rendererJSON))}return JSON.stringify(this.rendererJSON)!==JSON.stringify(this.lookup.rendererJSON)}_symbolizeColormap(e){if(this._isLUTChanged()){if(!this.bind().success)return e}return d(e,this.lookup.colormapLut)}_symbolizeClassBreaks(e){const{canUseIndexedLUT:r}=this._analyzeClassBreaks(this.rendererJSON);if(this._isLUTChanged()){if(!this.bind().success)return e}return r?d(e,this.lookup.colormapLut):h(e,this.lookup.remapLut)}_symbolizeStretch(e,r){const{rasterInfo:t}=this,{pixelType:s,bandCount:o}=t,n=this.rendererJSON,i=["u8","u16","s8","s16"].includes(s);let l,u;const{dra:c}=n,p=n.useGamma?n.gamma:null;if("histogramEqualization"===n.stretchType){const s=c?null:this.lookup.histogramLut,a=y(n,{rasterInfo:t,pixelBlock:e,bandIds:r,returnHistogramLut:!s}),o=b(e,{...a,gamma:p});u=m(o,{lut:c?a.histogramLut:s,offset:0})}else if(i){if(c){const a=y(n,{rasterInfo:t,pixelBlock:e,bandIds:r});l=g({pixelType:s,...a,gamma:p})}else if(this._isLUTChanged()){if(!this.bind().success)return e;l=this.lookup?this.lookup.stretchLut:null}else l=this.lookup?this.lookup.stretchLut:null;if(!l)return e;o>1&&r?.length===a(e)?.pixels.length&&l?.lut.length===o&&(l={lut:r.map((e=>l.lut[e])),offset:l.offset}),u=m(e,l)}else{const s=y(n,{rasterInfo:t,pixelBlock:e,bandIds:r});u=b(e,{...s,gamma:p})}if(n.colorRamp){if(this._isLUTChanged(!0)){if(!this.bind().success)return e}u=d(u,this.lookup.colormapLut)}return u}_symbolizeShadedRelief(e,r){const t=this.rendererJSON,s={...t,...r},o=k(e,s);if(!t.colorRamp)return o;let n;if(this._isLUTChanged(!0)){if(!this.bind().success)return o;n=this.lookup?this.lookup.hsvMap:null}else n=this.lookup?this.lookup.hsvMap:null;if(!n)return o;const i=a(this.rasterInfo.statistics)?.[0]??{min:0,max:8e3};return R(o,e,n,i),o}_isVectorFieldData(){const{bandCount:e,dataType:r}=this.rasterInfo;return 2===e&&("vector-magdir"===r||"vector-uv"===r)}_updateVectorFieldRenderer(){return this._isVectorFieldData()?{success:!0}:{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; VectorFieldRenderer only supports "vector-magdir" and "vector-uv".`}}_updateFlowRenderer(){return this._isVectorFieldData()?{success:!0}:{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; FlowRenderer only supports "vector-magdir" and "vector-uv".`}}_updateUVRenderer(e){const{bandCount:r,attributeTable:t,pixelType:s}=this.rasterInfo,a=e.field1;if(!a)return{success:!1,error:"Unsupported renderer; missing UniqueValueRenderer.field."};const o=e.defaultSymbol,n=1===r&&["u8","s8"].includes(s);if(!_(this.rasterInfo,a)&&!n)return{success:!1,error:"Unsupported data; UniqueValueRenderer is only supported on single band data with a valid raster attribute table."};const i=[];if(t){const r=t.fields.find((e=>"value"===e.name.toLowerCase()));if(!r)return{success:!1,error:"Unsupported data; the data's raster attribute table does not have a value field."};t.features.forEach((t=>{const s=e.uniqueValueInfos.find((e=>String(e.value)===String(t.attributes[a])))?.symbol?.color;s?i.push([t.attributes[r.name]].concat(s)):o&&i.push([t.attributes[r.name]].concat(o.color))}))}else{if("value"!==a.toLowerCase())return{success:!1,error:'Unsupported renderer; UniqueValueRenderer.field must be "Value" when raster attribute table is not availalbe.'};e.uniqueValueInfos.forEach((e=>{const r=e?.symbol?.color;r?i.push([parseInt(""+e.value,10)].concat(r)):o&&i.push([parseInt(""+e.value,10)].concat(o.color))}))}if(0===i.length)return{success:!1,error:"Invalid UniqueValueRenderer. Cannot find matching records in the raster attribute table."};const l=f({colormap:i});return this.lookup={rendererJSON:e,colormapLut:l},this.canRenderInWebGL=!0,{success:!0}}_updateColormapRenderer(e){if(!V(this.rasterInfo))return{success:!1,error:"Unsupported data; the data source does not have a colormap."};const r=e.colormapInfos.map((e=>[e.value].concat(e.color))).sort(((e,r)=>e[0]-r[0]));if(!r||0===r.length)return{success:!1,error:"Unsupported renderer; ColormapRenderer must have meaningful colormapInfos."};const t=f({colormap:r});return this.lookup={rendererJSON:e,colormapLut:t},this.canRenderInWebGL=!0,{success:!0}}_updateShadedReliefRenderer(e){if(!L(this.rasterInfo))return{success:!1,error:`Unsupported data type "${this.rasterInfo.dataType}"; ShadedReliefRenderer only supports "elevation".`};if(e.colorRamp){const t=I(e.colorRamp,256,!0),s=f({colormap:t}),a=[],o=s.indexedColormap;for(let e=0;e<o.length;e+=4){const t=r({r:o[e],g:o[e+1],b:o[e+2]});a.push([t.h/60,t.s/100,255*t.v/100])}this.lookup={rendererJSON:e,colormapLut:s,hsvMap:a}}else this.lookup=null;return this.canRenderInWebGL=!0,{success:!0}}_analyzeClassBreaks(e){const{attributeTable:r,pixelType:t}=this.rasterInfo,s=o(r)?r.fields.find((e=>"value"===e.name.toLowerCase())):null,a=o(r)?r.fields.find((r=>r.name.toLowerCase()===e.field.toLowerCase())):null,n=null!=s&&null!==a;return{canUseIndexedLUT:["u8","u16","s8","s16"].includes(t)||n,tableValueField:s,tableBreakField:a}}_updateClassBreaksRenderer(e){const{attributeTable:r}=this.rasterInfo,{canUseIndexedLUT:t,tableValueField:s,tableBreakField:a}=this._analyzeClassBreaks(e),o=e.classBreakInfos;if(!o?.length)return{success:!1,error:"Unsupported renderer; missing or invalid ClassBreaksRenderer.classBreakInfos."};const n=o.sort(((e,r)=>e.classMaxValue-r.classMaxValue)),i=n[n.length-1];let l=e.minValue;if(!t){const r=[];for(let e=0;e<n.length;e++)r.push({value:n[e].classMinValue??l,mappedColor:n[e].symbol.color}),l=n[e].classMaxValue;return r.push({value:i.classMaxValue,mappedColor:i.symbol.color}),this.lookup={rendererJSON:e,remapLut:r},this.canRenderInWebGL=!1,{success:!0}}const u=[];if(null!=s&&null!==a&&s!==a){const t=s.name,o=a.name,i=n[n.length-1],{classMaxValue:c}=i;l=e.minValue;for(const e of r.features){const r=e.attributes[t],s=e.attributes[o],a=s===c?i:s<l?null:n.find((({classMaxValue:e})=>e>s));a&&u.push([r].concat(a.symbol.color))}}else{l=Math.floor(e.minValue);for(let e=0;e<n.length;e++){const r=n[e];for(let e=l;e<r.classMaxValue;e++)u.push([e].concat(r.symbol.color));l=Math.ceil(r.classMaxValue)}i.classMaxValue===l&&u.push([i.classMaxValue].concat(i.symbol.color))}const c=f({colormap:u,fillUnspecified:!1});return this.lookup={rendererJSON:e,colormapLut:c},this.canRenderInWebGL=!0,{success:!0}}_isHistogramRequired(e){return"percentClip"===e||"histogramEqualization"===e}_isValidRasterStatistics(e){return o(e)&&e.length>0&&null!=e[0].min&&null!=e[0].max}_updateStretchRenderer(e){let{stretchType:r,dra:t}=e;if(!("none"===r||e.statistics?.length||this._isValidRasterStatistics(this.rasterInfo.statistics)||t))return{success:!1,error:"Unsupported renderer; StretchRenderer.statistics is required when dynamic range adjustment is not used."};const s=a(e.histograms||this.rasterInfo.histograms);!this._isHistogramRequired(e.stretchType)||s?.length||t||(r="minMax");const{gamma:o,useGamma:n,colorRamp:i}=e,l=this.rasterInfo.pixelType,u=!t&&["u8","u16","s8","s16"].includes(l);if("histogramEqualization"===r){const r=s.map((e=>S(e)));this.lookup={rendererJSON:e,histogramLut:r}}else if(u){const r=y(e,{rasterInfo:this.rasterInfo}),t=g({pixelType:l,...r,gamma:n?o:null});this.lookup={rendererJSON:e,stretchLut:t}}if(i){const r=I(i,256,!0);this.lookup||(this.lookup={rendererJSON:e}),this.lookup.colormapLut=f({colormap:r}),this.lookup.rendererJSON=e}return this.canRenderInWebGL=!0,{success:!0}}_generateStretchWebGLParams(e,r,t){let s=null,a=null;const n=this.lookup&&this.lookup.colormapLut;r.colorRamp&&n&&(s=n.indexedColormap,a=n.offset),"histogramEqualization"===r.stretchType&&(r={...r,stretchType:"minMax"});const{gamma:i}=r,l=!!(r.useGamma&&i&&i.some((e=>1!==e))),{minCutOff:u,maxCutOff:c,outMin:p,outMax:d}=y(r,{rasterInfo:this.rasterInfo,pixelBlock:e,bandIds:t});let h=0;o(e)&&(h=e.getPlaneCount(),2===h&&((e=e.clone()).statistics=[e.statistics[0]],e.pixels=[e.pixels[0]]));const m=Math.min(3,t?.length||h||this.rasterInfo.bandCount),f=new Float32Array(m),b=s||l?1:255;let g;for(g=0;g<m;g++)f[g]=(d-p)/(c[g]-u[g])/b;const S=new Float32Array(m);if(l)for(g=0;g<m;g++)i[g]>1?i[g]>2?S[g]=6.5+(i[g]-2)**2.5:S[g]=6.5+100*(2-i[g])**4:S[g]=1;return{bandCount:m,outMin:p/b,outMax:d/b,minCutOff:u,maxCutOff:c,factor:f,useGamma:l,gamma:l?i:[1,1,1],gammaCorrection:l?S:[1,1,1],colormap:s,colormapOffset:a,stretchType:r.stretchType,type:"stretch"}}_generateShadedReliefWebGLParams(e,r,t){let s=null,o=null;const n=this.lookup&&this.lookup.colormapLut;e.colorRamp&&n&&(s=n.indexedColormap,o=n.offset);const i={...e,isGCS:r,resolution:t},l=x(i),u=a(this.rasterInfo.statistics)?.[0];return{...l,minValue:u?.min??0,maxValue:u?.max??8e3,hillshadeType:"traditional"===e.hillshadeType?0:1,type:"hillshade",colormap:s,colormapOffset:o}}_generateVectorFieldWebGLParams(e){const{style:r,inputUnit:t,outputUnit:s,visualVariables:a,symbolTileSize:n,flowRepresentation:i}=e;let l;const u=this.rasterInfo.statistics?.[0].min??0,c=this.rasterInfo.statistics?.[0].max??50,p=a?.find((e=>"sizeInfo"===e.type))??{type:"sizeInfo",field:"Magnitude",maxDataValue:c,maxSize:.8*n,minDataValue:u,minSize:.2*n},d=p.minDataValue??u,h=p.maxDataValue??c,m=o(p.maxSize)&&o(p.minSize)?[p.minSize/n,p.maxSize/n]:[.2,.8];if("wind_speed"===r){const e=(m[0]+m[1])/2;m[0]=m[1]=e}const f=o(d)&&o(h)?[d,h]:null;if("classified_arrow"===r)if(o(d)&&o(h)&&o(p)){l=[];const e=(p.maxDataValue-p.minDataValue)/5;for(let r=0;r<6;r++)l.push(p.minDataValue+e*r)}else l=[0,1e-6,3.5,7,10.5,14];const b="flow_to"===i===("ocean_current_kn"===r||"ocean_current_m"===r)?0:Math.PI,y=a?.find((e=>"rotationInfo"===e.type));return{breakValues:l,dataRange:f,inputUnit:t,outputUnit:s,symbolTileSize:n,symbolPercentRange:m,style:r||"single_arrow",rotation:b,rotationType:this.rasterInfo.storageInfo?.tileInfo&&"vector-uv"===this.rasterInfo.dataType?"geographic":y?.rotationType||e.rotationType,type:"vectorField"}}};function O(e){return c(e)&&0!==e.validPixelCount}e([i({json:{write:!0}})],v.prototype,"rendererJSON",void 0),e([i({type:u,json:{write:!0}})],v.prototype,"rasterInfo",void 0),e([i({json:{write:!0}})],v.prototype,"lookup",void 0),e([i()],v.prototype,"canRenderInWebGL",void 0),v=e([l("esri.renderers.support.RasterSymbolizer")],v);const T=v;export{T as default};
@@ -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
- function t(t,e){return e?"xoffset"in e&&e.xoffset?Math.max(t,Math.abs(e.xoffset)):"yoffset"in e&&e.yoffset?Math.max(t,Math.abs(e.yoffset||0)):t:t}function e(t){let e=0,n=0;for(let r=0;r<t.length;r++){const s=t[r].size;"number"==typeof s&&(e+=s,n++)}return e/n}function n(t,n){return"number"==typeof t?t:t&&t.stops&&t.stops.length?e(t.stops):n}function r(t,e){if(!e)return t;const r=e.filter((t=>"size"===t.type)).map((e=>{const{maxSize:r,minSize:s}=e;return(n(r,t)+n(s,t))/2}));let s=0;const o=r.length;if(0===o)return t;for(let n=0;n<o;n++)s+=r[n];const f=Math.floor(s/o);return Math.max(f,t)}function s(e){const n=e&&e.renderer,s="touch"===(e&&e.event&&e.event.pointerType)?9:6;if(!n)return s;const o="visualVariables"in n?r(s,n.visualVariables):s;if("simple"===n.type)return t(o,n.symbol);if("unique-value"===n.type){let e=o;return n.uniqueValueInfos.forEach((n=>{e=t(e,n.symbol)})),e}if("class-breaks"===n.type){let e=o;return n.classBreakInfos.forEach((n=>{e=t(e,n.symbol)})),e}return n.type,o}export{s as calculateTolerance};
5
+ function t(t,e){return e?"xoffset"in e&&e.xoffset?Math.max(t,Math.abs(e.xoffset)):"yoffset"in e&&e.yoffset?Math.max(t,Math.abs(e.yoffset||0)):t:t}function e(t){let e=0,n=0;for(let r=0;r<t.length;r++){const s=t[r].size;"number"==typeof s&&(e+=s,n++)}return e/n}function n(t,n){return"number"==typeof t?t:t&&t.stops&&t.stops.length?e(t.stops):n}function r(t,e){if(!e)return t;const r=e.filter((t=>"size"===t.type)).map((e=>{const{maxSize:r,minSize:s}=e;return(n(r,t)+n(s,t))/2}));let s=0;const o=r.length;if(0===o)return t;for(let n=0;n<o;n++)s+=r[n];const f=Math.floor(s/o);return Math.max(f,t)}function s(e){const n=e&&e.renderer,s="touch"===(e&&e.event&&e.event.pointerType)?9:6;if(!n)return s;const o="visualVariables"in n?r(s,n.visualVariables):s;if("simple"===n.type)return t(o,n.symbol);if("unique-value"===n.type){let e=o;return n.uniqueValueInfos.forEach((n=>{e=t(e,n.symbol)})),e}if("class-breaks"===n.type){let e=o;return n.classBreakInfos.forEach((n=>{e=t(e,n.symbol)})),e}return"dot-density"===n.type||n.type,o}export{s as calculateTolerance};
@@ -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"../../rasterRenderers.js";import{isSome as t,unwrap as n,isNone as r}from"../../core/maybe.js";import{getMetersPerUnitForSR as a}from"../../core/unitUtils.js";import s from"../../layers/support/Field.js";import o from"../../layers/support/RasterInfo.js";import i from"../FlowRenderer.js";import l from"./AuthoringInfo.js";import u from"./ClassBreakInfo.js";import{PREDEFINED_JSON_COLOR_RAMPS as m,convertColorRampToColormap as c}from"./colorRampUtils.js";import f from"./UniqueValueInfo.js";import p from"../../rest/support/AlgorithmicColorRamp.js";import d from"../../rest/support/ClassBreaksDefinition.js";import{createGenerateRendererClassBreaks as b}from"../../rest/support/generateRendererUtils.js";import h from"../../rest/support/MultipartColorRamp.js";import g from"../RasterStretchRenderer.js";import y from"../UniqueValueRenderer.js";import v from"../RasterColormapRenderer.js";import C from"../RasterShadedReliefRenderer.js";import w from"../ClassBreaksRenderer.js";import M from"../VectorFieldRenderer.js";const x=.25,T=h.fromJSON({type:"multipart",colorRamps:[{fromColor:[0,0,255],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]}]}),R=h.fromJSON(m[0]),j=new Set(["scientific","standard-time","vector-uv","vector-magdir","vector-u","vector-v","vector-magnitude","vector-direction"]);function k(e,n){const{attributeTable:r,colormap:a}=e;if(X(e)){const n=$(e);if(t(n))return n}if(t(a)){const n=A(e);if(t(n))return n}if(t(r)){const n=N(e);if(t(n))return n}return S(e,n)}function V(e){const t=["raster-stretch"];return U(e)&&t.push("raster-colormap"),O(e)&&t.push("unique-value"),_(e)&&t.push("class-breaks"),D(e)&&t.push("raster-shaded-relief"),X(e)&&t.push("vector-field"),Y(e)&&t.push("flow"),t}function I(e,t,n){const r=["nearest","bilinear","cubic","majority"].find((e=>e===n?.toLowerCase()));if("Map"===t)return r??"bilinear";if("standard-time"===e.dataType)return r??"nearest";return"thematic"===e.dataType||e.attributeTable||e.colormap?"nearest"===r||"majority"===r?r:"nearest":r??"bilinear"}function S(e,r){e=L(e,r?.variableName);const{bandCount:a}=e;let{bandIds:s,stretchType:o}=r||{};s?.some((e=>e>=a))&&(s=null);let i=n(e.statistics),l=n(e.histograms);a>1?(s=s?.length?s:B(e),i=null==i?null:s.map((e=>i[e])),l=null==l?null:s.map((e=>l[e]))):s=[0],null==o&&(o=F(e));let u=!1;switch(o){case"none":u=!1;break;case"percent-clip":u=!l?.length;break;default:u=!i?.length}const{dataType:m}=e,c=1===s?.length&&j.has(m)?T:null,f=new g({stretchType:o,dynamicRangeAdjustment:u,colorRamp:c,outputMin:0,outputMax:255,gamma:1===s.length?[1]:[1,1,1],useGamma:!1});return"percent-clip"===o?f.maxPercent=f.minPercent=x:"standard-deviation"===o&&(f.numberOfStandardDeviations=2),u||!t(e.multidimensionalInfo)&&!r?.includeStatisticsInStretch||("percent-clip"===o?f.histograms=l:"min-max"!==o&&"standard-deviation"!==o||(f.statistics=i)),f}function L(e,r){if(null==r)return e;let a=n(e.statistics),s=n(e.histograms);const{multidimensionalInfo:i}=e;if(r&&t(i)){const{statistics:e,histograms:t}=i.variables.find((e=>e.name===r));e?.length&&(a=e),t?.length&&(s=t)}return o.fromJSON({...e.toJSON(),statistics:a,histograms:s})}function B(e){const t=e.bandCount;if(1===t)return null;if(2===t)return[0];const n=e.keyProperties&&e.keyProperties.BandProperties;let r;if(n&&n.length===t){const{red:e,green:t,blue:a,nir:s}=q(n);null!=e&&null!=t&&null!=a?r=[e,t,a]:null!=s&&null!=e&&null!=t&&(r=[s,e,t])}return!r&&t>=3&&(r=[0,1,2]),r}function E(e,t){const n=e.keyProperties&&e.keyProperties.BandProperties;return(t=t?.length?t:Array.from(Array(e.bandCount).keys())).map((t=>n&&n.length===e.bandCount&&n[t]&&n[t].BandName||"band_"+(t+1)))}function q(e){const t={};for(let n=0;n<e.length;n++){const r=e[n],a=r.BandName?.toLowerCase();if("red"===a)t.red=n;else if("green"===a)t.green=n;else if("blue"===a)t.blue=n;else if("nearinfrared"===a||"nearinfrared_1"===a||"nir"===a)t.nir=n;else if(r.WavelengthMax&&r.WavelengthMin){const e=r.WavelengthMin,a=r.WavelengthMax;null==t.blue&&e>=410&&e<=480&&a>=480&&a<=540?t.blue=n:null==t.green&&e>=490&&e<=560&&a>=560&&a<=610?t.green=n:null==t.red&&e>=595&&e<=670&&a>=660&&a<=730?t.red=n:null==t.nir&&e>=700&&e<=860&&a>=800&&a<=950&&(t.nir=n)}}return t}function F(e){let n="percent-clip";const{pixelType:r,dataType:a,histograms:s,statistics:o}=e;return"u8"!==r||"processed"!==a&&t(s)&&t(o)?"u8"===r||"elevation"===a||j.has(a)?n="min-max":t(s)?n="percent-clip":t(o)&&(n="min-max",n="min-max"):n="none",n}function N(n,r,a,s){if(!O(n,r))return null;const{attributeTable:o,statistics:i}=n,u=P(o,r),m=W(o,"red"),p=W(o,"green"),d=W(o,"blue"),b=new l,h=[],g=new Set,v=!!(m&&p&&d);if(t(o))o.features.forEach((t=>{const n=t.attributes[u.name];if(!g.has(t.attributes[u.name])&&null!=n){g.add(n);const r=v&&("single"===m.type||"double"===m.type)&&("single"===p.type||"double"===p.type)&&("single"===d.type||"double"===d.type)&&!o.features.some((e=>e.attributes[m.name]>1||e.attributes[p.name]>1||e.attributes[d.name]>1)),a=r?255:1;h.push(new f({value:t.attributes[u.name],label:t.attributes[u.name]+"",symbol:{type:"simple-fill",style:"solid",outline:null,color:new e(v?[t.attributes[m.name]*a,t.attributes[p.name]*a,t.attributes[d.name]*a,1]:[0,0,0,0])}}))}}));else if(i?.[0])for(let t=i[0].min;t<=i[0].max;t++)h.push(new f({value:t,label:t.toString(),symbol:{type:"simple-fill",style:"solid",outline:null,color:new e([0,0,0,0])}}));if(h.sort(((e,t)=>e.value&&"string"==typeof e.value.valueOf()?0:e.value>t.value?1:-1)),!v){const t=c(R,h.length);h.forEach(((n,r)=>n.symbol.color=new e(t[r].slice(1,4)))),b.colorRamp=R}if(a||s){const t=a||c(s,h.length).map((e=>e.slice(1)));h.forEach(((n,r)=>n.symbol.color=new e(t[r]))),b.colorRamp=s}return new y({field:u.name,uniqueValueInfos:h,authoringInfo:b})}function P(e,n,r){let a;return t(e)?(a=n?e.fields.find((e=>n.toLowerCase()===e.name.toLowerCase())):z(e.fields),a||(r||(a=e.fields.find((e=>"string"===e.type))),a||(a=W(e,"value")))):a=new s({name:"value"}),a}function z(e){let t;for(let n=0;n<e.length;n++){const r=e[n].name.toLowerCase();if("string"===e[n].type){if(r.startsWith("class")){t=e[n];break}null==t&&(r.endsWith("name")||r.endsWith("type"))&&(t=e[n])}}return t}function W(e,t){return r(e)?null:e.fields.find((e=>e.name.toLowerCase()===t))}function O(e,t){const{attributeTable:n,bandCount:a}=e;if(r(n)&&K(e))return!0;if(r(n)||a>1)return!1;if(t){if(null==n.fields.find((e=>e.name.toLowerCase()===t.toLowerCase())))return!1}return!0}function U(e){const{bandCount:n,colormap:r}=e;return t(r)&&r.length&&1===n}function A(e){if(!U(e))return null;let r;const{attributeTable:a,colormap:s}=e;if(t(a)){const e=W(a,"value"),t=P(a,null,!0);"string"===t.type&&(r={},a.features.forEach((n=>{const a=n.attributes;r[a[e.name]]=t?a[t.name]:a[e.name]})))}return v.createFromColormap(n(s),r)}function D(e){return"elevation"===e.dataType}function J(e,t){if(!D(e))return null;const{extent:n}=e,r=n.width*a(n.spatialReference);return new C({hillshadeType:t=t??"multi-directional",scalingType:r>5e6?"adjusted":"none"})}function _(e){const{attributeTable:n,bandCount:r}=e;return 1===r&&(t(n)||t(e.histograms))}function G(e,n){e=L(e,n?.variableName);const{attributeTable:r}=e;if(!_(e))return null;const a=t(e.histograms)?e.histograms[0]:null,s=isFinite(n?.numClasses)?n.numClasses:5,o=new l({classificationMethod:n?.classificationMethod,colorRamp:n?.colorRamp});let i=n?.field||"value";const m=[],f=[],p=1e3,h=t(r),g=h&&r.fields.find((e=>"count"===e.name.toLowerCase())),y=h&&r.fields.find((e=>e.name.toLowerCase()===i.toLowerCase()));if(y){i=y.name;const e=r.features.length;let t=0;r.features.forEach((n=>t+=(g?n.attributes[g.name]:50)/e)),r.features.forEach((n=>{const r=n.attributes[y.name],a=g?n.attributes[g.name]:50;if(a>0){f.push(a);const n=Math.max(1,Math.round(a/e/t*p));for(let e=0;e<n;e++)m.push(r)}}))}else{const{pixelType:t}=e,n=(a.max-a.min)/a.size,s=t.includes("s")||t.includes("u"),o=s&&1===n?Math.floor(a.min+.5):a.min,i=s&&1===n?Math.floor(a.max-.5):a.max,l=a.size;let u,c=0;a.counts.forEach((e=>c+=e/l)),a.counts.forEach(((e,t)=>{if(e>0){f.push(e);const s=Math.max(1,Math.round(e/l/c*p));u=h?r.features[t].attributes[y.name]:0===t?o:t===l-1?i:a.min+n*(t+.5);for(let e=0;e<s;e++)m.push(u)}}))}const v=n?.classificationMethod||"natural-breaks";let C=n?.definedInterval;"defined-interval"!==v||C||(C=H(e,y,s));const M=b({values:m,valueFrequency:f,normalizationTotal:null,definition:new d({classificationMethod:v,breakCount:s,definedInterval:C})});let x=n?.colors;if(!x){const e=n?.colorRamp||T;o.colorRamp=e;const t=c(e,M.classBreaks.length,!0);x=t.map((e=>e.slice(1)))}const R=M.classBreaks.map(((e,t)=>new u({minValue:e.minValue,maxValue:e.maxValue,label:e.label,symbol:{type:"simple-fill",color:x[t]}})));return new w({field:i,classBreakInfos:R,authoringInfo:o})}function H(e,n,r){let a=0,s=0;if(t(e.attributeTable)){const t=e.attributeTable;a=s=t.features[0].attributes[n.name],t.features.forEach((e=>{const t=e.attributes[n.name];t<a&&(a=t),t>s&&(s=t)}))}else if(t(e.histograms)){const t=e.histograms;a=t[0].min,s=t[0].max}return(s-a)/r}function K(e){return["u8","s8"].includes(e.pixelType)&&null!=e.statistics?.[0]?.min&&null!=e.statistics[0]?.max&&1===e.bandCount}function Q(t){const n=[];for(let r=0;r<t.length-1;r++)n[r]=new p({algorithm:"hsv",fromColor:t[r],toColor:t[r+1]||new e({r:255,g:255,b:255,a:1})});if(t.length>2){return new h({colorRamps:n})}return n[0]}function X(e){const{dataType:t}=e;return"vector-uv"===t||"vector-magdir"===t}function Y(e){const{dataType:t}=e;return"vector-uv"===t||"vector-magdir"===t}const Z=new Map([["m/s","meter-per-second"],["km/h","kilometer-per-hour"],["knots","knots"],["ft/s","feet-per-second"],["mph","mile-per-hour"]]);function $(e){if(!X(e))return null;let n;if(t(e.statistics)&&e.statistics.length&&("vector-magdir"===e.dataType||"vector-uv"===e.dataType)){const{minMagnitude:t,maxMagnitude:r}=re(e.dataType,e.statistics);n=[{type:"size",field:"Magnitude",minSize:10,maxSize:40,minDataValue:t,maxDataValue:r}]}const r=t(e.multidimensionalInfo)?Z.get(e.multidimensionalInfo.variables[0].unit):null,a=new M({visualVariables:n,inputUnit:r,rotationType:"geographic"});return a.visualVariables=[...a.sizeVariables,...a.rotationVariables],a}function ee(e){return{color:e.symbolLayers[0].material?.color,type:"esriSFS",style:"esriSFSSolid"}}function te(e){if("uniqueValue"===e.type){const t=e.uniqueValueInfos;return t[0].symbol?.symbolLayers?.length&&(e.uniqueValueInfos=t.map((e=>({value:e.value,label:e.label,symbol:e.symbol?ee(e.symbol):null})))),e}if("classBreaks"===e.type){const t=e.classBreakInfos;return t[0].symbol?.symbolLayers?.length&&(e.classBreakInfos=t.map((e=>({classMinValue:e.classMinValue,classMaxValue:e.classMaxValue,label:e.label,symbol:e.symbol?ee(e.symbol):null})))),e}return e}function ne(e){if(!Y(e))return null;let n;if(t(e.statistics)&&e.statistics.length>0&&("vector-magdir"===e.dataType||"vector-uv"===e.dataType)){const{minMagnitude:t,maxMagnitude:r}=re(e.dataType,e.statistics);n=[{type:"color",field:"Magnitude",stops:[{value:t,color:"#1020C0"},{value:r,color:"#C02010"}]}]}return new i({visualVariables:n})}function re(e,t){let n,r;if("vector-magdir"===e)n=t[0].min,r=t[0].max;else{const e=t[0].min,a=t[0].max,s=t[1].min,o=t[1].max;n=0,r=Math.max(Math.abs(e),Math.abs(s),Math.abs(a),Math.abs(o))}return{minMagnitude:n,maxMagnitude:r}}export{G as createClassBreaksRenderer,Q as createColorRamp,A as createColormapRenderer,k as createDefaultRenderer,ne as createFlowRenderer,J as createShadedReliefRenderer,S as createStretchRenderer,N as createUVRenderer,$ as createVectorFieldRenderer,re as estimateMagnitudeRange,E as getBandNames,P as getClassField,B as getDefaultBandCombination,I as getDefaultInterpolation,H as getDefinedInterval,W as getField,V as getSupportedRendererTypes,q as getWellKnownBandIndexes,_ as isClassBreaksSupported,U as isColormapRendererSupported,Y as isFlowRendererSupported,D as isShadedReliefRendererSupported,K as isSingleBand8BitRasterWithStats,O as isUVRendererSupported,X as isVectorFieldRendererSupported,te as normalizeRendererJSON};
5
+ import e from"../../Color.js";import"../../rasterRenderers.js";import{isSome as t,unwrap as n,isNone as r}from"../../core/maybe.js";import{getMetersPerUnitForSR as a}from"../../core/unitUtils.js";import s from"../../layers/support/Field.js";import o from"../../layers/support/RasterInfo.js";import i from"../FlowRenderer.js";import l from"./AuthoringInfo.js";import u from"./ClassBreakInfo.js";import{PREDEFINED_JSON_COLOR_RAMPS as m,convertColorRampToColormap as c}from"./colorRampUtils.js";import f from"./UniqueValueInfo.js";import p from"../../rest/support/AlgorithmicColorRamp.js";import d from"../../rest/support/ClassBreaksDefinition.js";import{createGenerateRendererClassBreaks as b}from"../../rest/support/generateRendererUtils.js";import h from"../../rest/support/MultipartColorRamp.js";import g from"../RasterStretchRenderer.js";import y from"../UniqueValueRenderer.js";import v from"../RasterColormapRenderer.js";import C from"../RasterShadedReliefRenderer.js";import w from"../ClassBreaksRenderer.js";import M from"../VectorFieldRenderer.js";const x=.25,T=h.fromJSON({type:"multipart",colorRamps:[{fromColor:[0,0,255],toColor:[0,255,255]},{fromColor:[0,255,255],toColor:[255,255,0]},{fromColor:[255,255,0],toColor:[255,0,0]}]}),R=h.fromJSON(m[0]),j=new Set(["scientific","standard-time","vector-uv","vector-magdir","vector-u","vector-v","vector-magnitude","vector-direction"]);function k(e,n){const{attributeTable:r,colormap:a}=e;if(X(e)){const n=$(e);if(t(n))return n}if(t(a)){const n=A(e);if(t(n))return n}if(t(r)){const n=N(e);if(t(n))return n}return S(e,n)}function V(e){const t=["raster-stretch"];return U(e)&&t.push("raster-colormap"),O(e)&&t.push("unique-value"),_(e)&&t.push("class-breaks"),D(e)&&t.push("raster-shaded-relief"),X(e)&&t.push("vector-field"),Y(e)&&t.push("flow"),t}function I(e,t,n){const r=["nearest","bilinear","cubic","majority"].find((e=>e===n?.toLowerCase()));if("Map"===t)return r??"bilinear";if("standard-time"===e.dataType)return r??"nearest";return"thematic"===e.dataType||e.attributeTable||e.colormap?"nearest"===r||"majority"===r?r:"nearest":r??"bilinear"}function S(e,r){e=L(e,r?.variableName);const{bandCount:a}=e;let{bandIds:s,stretchType:o}=r||{};s?.some((e=>e>=a))&&(s=null);let i=n(e.statistics),l=n(e.histograms);a>1?(s=s?.length?s:B(e),i=null==i?null:s.map((e=>i[e])),l=null==l?null:s.map((e=>l[e]))):s=[0],null==o&&(o=F(e));let u=!1;switch(o){case"none":u=!1;break;case"percent-clip":u=!l?.length;break;default:u=!i?.length}const{dataType:m}=e,c=1===s?.length&&j.has(m)?T:null,f=new g({stretchType:o,dynamicRangeAdjustment:u,colorRamp:c,outputMin:0,outputMax:255,gamma:1===s.length?[1]:[1,1,1],useGamma:!1});return"percent-clip"===o?f.maxPercent=f.minPercent=x:"standard-deviation"===o&&(f.numberOfStandardDeviations=2),u||!t(e.multidimensionalInfo)&&!r?.includeStatisticsInStretch||("percent-clip"===o?f.histograms=l:"min-max"!==o&&"standard-deviation"!==o||(f.statistics=i)),f}function L(e,r){if(null==r)return e;let a=n(e.statistics),s=n(e.histograms);const{multidimensionalInfo:i}=e;if(r&&t(i)){const e=i.variables.find((e=>e.name===r));if(e){const{statistics:t,histograms:n}=e;t?.length&&(a=t),n?.length&&(s=n)}}return o.fromJSON({...e.toJSON(),statistics:a,histograms:s})}function B(e){const t=e.bandCount;if(1===t)return null;if(2===t)return[0];const n=e.keyProperties&&e.keyProperties.BandProperties;let r;if(n&&n.length===t){const{red:e,green:t,blue:a,nir:s}=q(n);null!=e&&null!=t&&null!=a?r=[e,t,a]:null!=s&&null!=e&&null!=t&&(r=[s,e,t])}return!r&&t>=3&&(r=[0,1,2]),r}function E(e,t){const n=e.keyProperties&&e.keyProperties.BandProperties;return(t=t?.length?t:Array.from(Array(e.bandCount).keys())).map((t=>n&&n.length===e.bandCount&&n[t]&&n[t].BandName||"band_"+(t+1)))}function q(e){const t={};for(let n=0;n<e.length;n++){const r=e[n],a=r.BandName?.toLowerCase();if("red"===a)t.red=n;else if("green"===a)t.green=n;else if("blue"===a)t.blue=n;else if("nearinfrared"===a||"nearinfrared_1"===a||"nir"===a)t.nir=n;else if(r.WavelengthMax&&r.WavelengthMin){const e=r.WavelengthMin,a=r.WavelengthMax;null==t.blue&&e>=410&&e<=480&&a>=480&&a<=540?t.blue=n:null==t.green&&e>=490&&e<=560&&a>=560&&a<=610?t.green=n:null==t.red&&e>=595&&e<=670&&a>=660&&a<=730?t.red=n:null==t.nir&&e>=700&&e<=860&&a>=800&&a<=950&&(t.nir=n)}}return t}function F(e){let n="percent-clip";const{pixelType:r,dataType:a,histograms:s,statistics:o}=e;return"u8"!==r||"processed"!==a&&t(s)&&t(o)?"u8"===r||"elevation"===a||j.has(a)?n="min-max":t(s)?n="percent-clip":t(o)&&(n="min-max"):n="none",n}function N(n,r,a,s){if(!O(n,r))return null;const{attributeTable:o,statistics:i}=n,u=P(o,r),m=W(o,"red"),p=W(o,"green"),d=W(o,"blue"),b=new l,h=[],g=new Set,v=!!(m&&p&&d);if(t(o))o.features.forEach((t=>{const n=t.attributes[u.name];if(!g.has(t.attributes[u.name])&&null!=n){g.add(n);const r=v&&("single"===m.type||"double"===m.type)&&("single"===p.type||"double"===p.type)&&("single"===d.type||"double"===d.type)&&!o.features.some((e=>e.attributes[m.name]>1||e.attributes[p.name]>1||e.attributes[d.name]>1)),a=r?255:1;h.push(new f({value:t.attributes[u.name],label:t.attributes[u.name]+"",symbol:{type:"simple-fill",style:"solid",outline:null,color:new e(v?[t.attributes[m.name]*a,t.attributes[p.name]*a,t.attributes[d.name]*a,1]:[0,0,0,0])}}))}}));else if(i?.[0])for(let t=i[0].min;t<=i[0].max;t++)h.push(new f({value:t,label:t.toString(),symbol:{type:"simple-fill",style:"solid",outline:null,color:new e([0,0,0,0])}}));if(h.sort(((e,t)=>e.value&&"string"==typeof e.value.valueOf()?0:e.value>t.value?1:-1)),!v){const t=c(R,h.length);h.forEach(((n,r)=>n.symbol.color=new e(t[r].slice(1,4)))),b.colorRamp=R}if(a||s){const t=a||c(s,h.length).map((e=>e.slice(1)));h.forEach(((n,r)=>n.symbol.color=new e(t[r]))),b.colorRamp=s}return new y({field:u.name,uniqueValueInfos:h,authoringInfo:b})}function P(e,n,r){let a;return t(e)?(a=n?e.fields.find((e=>n.toLowerCase()===e.name.toLowerCase())):z(e.fields),a||(r||(a=e.fields.find((e=>"string"===e.type))),a||(a=W(e,"value")))):a=new s({name:"value"}),a}function z(e){let t;for(let n=0;n<e.length;n++){const r=e[n].name.toLowerCase();if("string"===e[n].type){if(r.startsWith("class")){t=e[n];break}null==t&&(r.endsWith("name")||r.endsWith("type"))&&(t=e[n])}}return t}function W(e,t){return r(e)?null:e.fields.find((e=>e.name.toLowerCase()===t))}function O(e,t){const{attributeTable:n,bandCount:a}=e;if(r(n)&&K(e))return!0;if(r(n)||a>1)return!1;if(t){if(null==n.fields.find((e=>e.name.toLowerCase()===t.toLowerCase())))return!1}return!0}function U(e){const{bandCount:n,colormap:r}=e;return t(r)&&r.length&&1===n}function A(e){if(!U(e))return null;let r;const{attributeTable:a,colormap:s}=e;if(t(a)){const e=W(a,"value"),t=P(a,null,!0);"string"===t.type&&(r={},a.features.forEach((n=>{const a=n.attributes;r[a[e.name]]=t?a[t.name]:a[e.name]})))}return v.createFromColormap(n(s),r)}function D(e){return"elevation"===e.dataType}function J(e,t){if(!D(e))return null;const{extent:n}=e,r=n.width*a(n.spatialReference);return new C({hillshadeType:t=t??"multi-directional",scalingType:r>5e6?"adjusted":"none"})}function _(e){const{attributeTable:n,bandCount:r}=e;return 1===r&&(t(n)||t(e.histograms))}function G(e,n){e=L(e,n?.variableName);const{attributeTable:r}=e;if(!_(e))return null;const a=t(e.histograms)?e.histograms[0]:null,s=isFinite(n?.numClasses)?n.numClasses:5,o=new l({classificationMethod:n?.classificationMethod,colorRamp:n?.colorRamp});let i=n?.field||"value";const m=[],f=[],p=1e3,h=t(r),g=h&&r.fields.find((e=>"count"===e.name.toLowerCase())),y=h&&r.fields.find((e=>e.name.toLowerCase()===i.toLowerCase()));if(y){i=y.name;const e=r.features.length;let t=0;r.features.forEach((n=>t+=(g?n.attributes[g.name]:50)/e)),r.features.forEach((n=>{const r=n.attributes[y.name],a=g?n.attributes[g.name]:50;if(a>0){f.push(a);const n=Math.max(1,Math.round(a/e/t*p));for(let e=0;e<n;e++)m.push(r)}}))}else{const{pixelType:t}=e,n=(a.max-a.min)/a.size,s=t.includes("s")||t.includes("u"),o=s&&1===n?Math.floor(a.min+.5):a.min,i=s&&1===n?Math.floor(a.max-.5):a.max,l=a.size;let u,c=0;a.counts.forEach((e=>c+=e/l)),a.counts.forEach(((e,t)=>{if(e>0){f.push(e);const s=Math.max(1,Math.round(e/l/c*p));u=h?r.features[t].attributes[y.name]:0===t?o:t===l-1?i:a.min+n*(t+.5);for(let e=0;e<s;e++)m.push(u)}}))}const v=n?.classificationMethod||"natural-breaks";let C=n?.definedInterval;"defined-interval"!==v||C||(C=H(e,y,s));const M=b({values:m,valueFrequency:f,normalizationTotal:null,definition:new d({classificationMethod:v,breakCount:s,definedInterval:C})});let x=n?.colors;if(!x){const e=n?.colorRamp||T;o.colorRamp=e;const t=c(e,M.classBreaks.length,!0);x=t.map((e=>e.slice(1)))}const R=M.classBreaks.map(((e,t)=>new u({minValue:e.minValue,maxValue:e.maxValue,label:e.label,symbol:{type:"simple-fill",color:x[t]}})));return new w({field:i,classBreakInfos:R,authoringInfo:o})}function H(e,n,r){let a=0,s=0;if(t(e.attributeTable)){const t=e.attributeTable;a=s=t.features[0].attributes[n.name],t.features.forEach((e=>{const t=e.attributes[n.name];t<a&&(a=t),t>s&&(s=t)}))}else if(t(e.histograms)){const t=e.histograms;a=t[0].min,s=t[0].max}return(s-a)/r}function K(e){return["u8","s8"].includes(e.pixelType)&&null!=e.statistics?.[0]?.min&&null!=e.statistics[0]?.max&&1===e.bandCount}function Q(t){const n=[];for(let r=0;r<t.length-1;r++)n[r]=new p({algorithm:"hsv",fromColor:t[r],toColor:t[r+1]||new e({r:255,g:255,b:255,a:1})});if(t.length>2){return new h({colorRamps:n})}return n[0]}function X(e){const{dataType:t}=e;return"vector-uv"===t||"vector-magdir"===t}function Y(e){const{dataType:t}=e;return"vector-uv"===t||"vector-magdir"===t}const Z=new Map([["m/s","meter-per-second"],["km/h","kilometer-per-hour"],["knots","knots"],["ft/s","feet-per-second"],["mph","mile-per-hour"]]);function $(e){if(!X(e))return null;let n;if(t(e.statistics)&&e.statistics.length&&("vector-magdir"===e.dataType||"vector-uv"===e.dataType)){const{minMagnitude:t,maxMagnitude:r}=re(e.dataType,e.statistics);n=[{type:"size",field:"Magnitude",minSize:10,maxSize:40,minDataValue:t,maxDataValue:r}]}const r=t(e.multidimensionalInfo)?Z.get(e.multidimensionalInfo.variables[0].unit):null,a=new M({visualVariables:n,inputUnit:r,rotationType:"geographic"});return a.visualVariables=[...a.sizeVariables,...a.rotationVariables],a}function ee(e){return{color:e.symbolLayers[0].material?.color,type:"esriSFS",style:"esriSFSSolid"}}function te(e){if("uniqueValue"===e.type){const t=e.uniqueValueInfos;return t[0].symbol?.symbolLayers?.length&&(e.uniqueValueInfos=t.map((e=>({value:e.value,label:e.label,symbol:e.symbol?ee(e.symbol):null})))),e}if("classBreaks"===e.type){const t=e.classBreakInfos;return t[0].symbol?.symbolLayers?.length&&(e.classBreakInfos=t.map((e=>({classMinValue:e.classMinValue,classMaxValue:e.classMaxValue,label:e.label,symbol:e.symbol?ee(e.symbol):null})))),e}return e}function ne(e){if(!Y(e))return null;let n;if(t(e.statistics)&&e.statistics.length>0&&("vector-magdir"===e.dataType||"vector-uv"===e.dataType)){const{minMagnitude:t,maxMagnitude:r}=re(e.dataType,e.statistics);n=[{type:"color",field:"Magnitude",stops:[{value:t,color:"#1020C0"},{value:r,color:"#C02010"}]}]}return new i({visualVariables:n})}function re(e,t){let n,r;if("vector-magdir"===e)n=t[0].min,r=t[0].max;else{const e=t[0].min,a=t[0].max,s=t[1].min,o=t[1].max;n=0,r=Math.max(Math.abs(e),Math.abs(s),Math.abs(a),Math.abs(o))}return{minMagnitude:n,maxMagnitude:r}}export{G as createClassBreaksRenderer,Q as createColorRamp,A as createColormapRenderer,k as createDefaultRenderer,ne as createFlowRenderer,J as createShadedReliefRenderer,S as createStretchRenderer,N as createUVRenderer,$ as createVectorFieldRenderer,re as estimateMagnitudeRange,E as getBandNames,P as getClassField,B as getDefaultBandCombination,I as getDefaultInterpolation,H as getDefinedInterval,W as getField,V as getSupportedRendererTypes,q as getWellKnownBandIndexes,_ as isClassBreaksSupported,U as isColormapRendererSupported,Y as isFlowRendererSupported,D as isShadedReliefRendererSupported,K as isSingleBand8BitRasterWithStats,O as isUVRendererSupported,X as isVectorFieldRendererSupported,te as normalizeRendererJSON};
@@ -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"../ClassBreaksRenderer.js";import r from"../DictionaryRenderer.js";import t from"../DotDensityRenderer.js";import o from"../HeatmapRenderer.js";import s from"../Renderer.js";import a from"../SimpleRenderer.js";import i from"../UniqueValueRenderer.js";const m={key:"type",base:s,typeMap:{heatmap:o,simple:a,"unique-value":i,"class-breaks":e,"dot-density":t,dictionary:r},errorContext:"renderer"},n={key:"type",base:s,typeMap:{simple:a,"unique-value":i,"class-breaks":e},errorContext:"renderer"};export{m as rendererTypes,n as webSceneRendererTypes};
5
+ import e from"../ClassBreaksRenderer.js";import r from"../DictionaryRenderer.js";import t from"../DotDensityRenderer.js";import o from"../HeatmapRenderer.js";import s from"../PieChartRenderer.js";import i from"../Renderer.js";import a from"../SimpleRenderer.js";import m from"../UniqueValueRenderer.js";const p={key:"type",base:i,typeMap:{heatmap:o,simple:a,"unique-value":m,"class-breaks":e,"dot-density":t,dictionary:r,"pie-chart":s},errorContext:"renderer"},n={key:"type",base:i,typeMap:{simple:a,"unique-value":m,"class-breaks":e},errorContext:"renderer"};export{p as rendererTypes,n as webSceneRendererTypes};
@@ -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{unique as e}from"../../core/arrayUtils.js";import n from"../../core/Logger.js";import{convertDateFormatToIntlOptions as t,formatDate as l}from"../../intl/date.js";import{format as a,round as i}from"./numberUtils.js";import o from"../visualVariables/support/ColorStop.js";const r=n.getLogger("esri.renderers.support.utils"),s={lte:"<=",gte:">=",lt:"<",gt:">",pct:"%",ld:"–"},u={millisecond:0,second:1,minute:2,hour:3,day:4,month:5,year:6},d={millisecond:"long-month-day-year-long-time",second:"long-month-day-year-long-time",minute:"long-month-day-year-short-time",hour:"long-month-day-year-short-time",day:"long-month-day-year",month:"long-month-day-year",year:"year"},m=t("short-date");function f(e,n,t){let l="";return 0===n?l=s.lt+" ":n===t&&(l=s.gt+" "),l+e}function c(e){const{values:n,colors:t,labelIndexes:i,isDate:r,dateFormatOptions:s}=e;return n.map(((e,u)=>{let d=null;if(!i||i.includes(u)){let t;t=r?l(e,s):a(e),t&&(d=f(t,u,n.length-1))}return new o({value:e,color:t[u],label:d})}))}function p(e){const{stops:n,changes:t,isDate:o,dateFormatOptions:r}=e,s=n.map((e=>e.value)),u=[];for(const l of t)u.push(l.index),s[l.index]=l.value;const d=i(s,{indexes:u});n.forEach(((e,t)=>{if(e.value=s[t],null!=e.label){let i,s=null;i=o?l(d[t],r):a(d[t]),i&&(s=f(i,t,n.length-1)),e.label=s}}))}function h(e){let n=e.minValue,t=e.maxValue;const l=e.isFirstBreak?"":s.gt+" ",i="percent-of-total"===e.normalizationType?s.pct:"";return n=null==n?"":a(n),t=null==t?"":a(t),l+n+i+" "+s.ld+" "+t+i}function y(e){const n=e.classBreakInfos,t=e.normalizationType;let l=[];if(n&&n.length)if("standard-deviation"!==e.classificationMethod)if(e.round){l.push(n[0].minValue);for(const e of n)l.push(e.maxValue);l=i(l),n.forEach(((e,n)=>{e.label=h({minValue:0===n?l[0]:l[n],maxValue:l[n+1],isFirstBreak:0===n,normalizationType:t})}))}else n.forEach(((e,n)=>{e.label=h({minValue:e.minValue,maxValue:e.maxValue,isFirstBreak:0===n,normalizationType:t})}));else r.warn("setLabelsForClassBreaks","cannot set labels for class breaks generated using 'standard-deviation' method.")}function g(e){if("standard-deviation"===e.classificationMethod)return void r.warn("updateClassBreak","cannot update labels for class breaks generated using 'standard-deviation' method.");const n=e.classBreaks,t=e.change,l=t.index,a=t.value,i=n.length;let o=-1,s=-1;0===l?o=l:l===i?s=l-1:(s=l-1,o=l);const u=e.normalizationType;let d=null;o>-1&&o<i&&(d=n[o],d.minValue=a,d.label=h({minValue:d.minValue,maxValue:d.maxValue,isFirstBreak:0===o,normalizationType:u})),s>-1&&s<i&&(d=n[s],d.maxValue=a,d.label=h({minValue:d.minValue,maxValue:d.maxValue,isFirstBreak:0===s,normalizationType:u}))}function V(e){const n=e.map((e=>new Date(e))),t=n.length;let l=1/0,a=null;for(let i=0;i<t-1;i++){const e=n[i];let o=1/0,r=null;for(let l=i+1;l<t;l++){const t=n[l],a=(e.getFullYear()!==t.getFullYear()?"year":e.getMonth()!==t.getMonth()&&"month")||e.getDate()!==t.getDate()&&"day"||e.getHours()!==t.getHours()&&"hour"||e.getMinutes()!==t.getMinutes()&&"minute"||e.getSeconds()!==t.getSeconds()&&"second"||"millisecond",i=u[a];i<o&&(o=i,r=a)}o<l&&(l=o,a=r)}return a}function x(e){const{value:n,domain:i,fieldInfo:o,dateFormatInterval:r}=e;let s=String(n);const u=i&&"codedValues"in i&&i.codedValues?i.getName(n):null;return u?s=u:"number"==typeof n&&(s=o&&"date"===o.type?l(n,r&&t(d[r])):a(n)),s}function b(e,n){return"normalizationField"in e&&e.normalizationField?F(e.field,e.normalizationField):"field"in e&&e.field?v(e.field):"valueExpression"in e&&e.valueExpression?z(e.valueExpression,e.valueExpressionTitle,n):null}function v(e){return{type:"field",field:e}}function F(e,n){return{type:"normalized-field",field:e,normalizationField:n}}function z(e,n,t){return{type:"expression",expression:e,title:n,returnType:t}}function k(n,t){const l=[];if("class-breaks"===n.type||"heatmap"===n.type)l.push(b(n,"number"));else if("unique-value"===n.type){const e=n.authoringInfo;if(e&&"relationship"===e.type){if(e.field1&&e.field2){const n=e.field1.field,t=e.field2.field,a=e.field1.normalizationField,i=e.field2.normalizationField;l.push(b({field:n,normalizationField:a})),l.push(b({field:t,normalizationField:i}))}}else{const e=n.uniqueValueInfos[0];let t=null;if(e&&e.value){const e=typeof n.uniqueValueInfos[0].value;"string"!==e&&"number"!==e||(t=e)}l.push(b(n,t)),[n.field2,n.field3].forEach((e=>e&&l.push(v(e))))}}else"dot-density"===n.type&&n.attributes.forEach((e=>l.push(b(e,"number"))));const a=t?t(n):"visualVariables"in n?n.visualVariables:null;return a&&a.forEach((e=>l.push(b(e,"number")))),e(l.filter(Boolean),((e,n)=>"field"===e.type&&"field"===n.type?e.field===n.field:"normalized-field"===e.type&&"normalized-field"===n.type?e.field===n.field&&e.normalizationField===n.normalizationField:"expression"===e.type&&"expression"===n.type&&e.expression===n.expression))}export{V as calculateDateFormatInterval,h as createClassBreakLabel,c as createColorStops,x as createUniqueValueLabel,b as getAttribute,k as getAttributes,y as setLabelsForClassBreaks,m as timelineDateFormatOptions,g as updateClassBreak,p as updateColorStops};
5
+ import{unique as e}from"../../core/arrayUtils.js";import l from"../../core/Logger.js";import{getOrCreateMapValue as n}from"../../core/MapUtils.js";import{convertDateFormatToIntlOptions as t,formatDate as o}from"../../intl/date.js";import{format as i,round as a}from"./numberUtils.js";import s from"../visualVariables/support/ColorStop.js";import{getColorFromSymbol as r}from"../../symbols/support/utils.js";import{getRampStops as u}from"../../widgets/Legend/support/colorRampUtils.js";import{getHeatmapRampStops as f}from"../../widgets/Legend/support/heatmapRampUtils.js";const d=l.getLogger("esri.renderers.support.utils"),m={lte:"<=",gte:">=",lt:"<",gt:">",pct:"%",ld:"–"},p={millisecond:0,second:1,minute:2,hour:3,day:4,month:5,year:6},c={millisecond:"long-month-day-year-long-time",second:"long-month-day-year-long-time",minute:"long-month-day-year-short-time",hour:"long-month-day-year-short-time",day:"long-month-day-year",month:"long-month-day-year",year:"year"},y=t("short-date");function g(e,l,t){n(e,l,(()=>[])).push(...t)}async function h(l){const n=new Map;if("visualVariables"in l&&l.visualVariables){const e=l.visualVariables.filter((e=>"color"===e.type));for(const l of e){const e=l.field||l.valueExpression,t=(await u(l)).map((e=>e.color));g(n,e,t)}}if("heatmap"===l.type){const e=f(l).map((e=>e.color));g(n,l.field,e)}else if("pie-chart"===l.type){for(const e of l.attributes)g(n,e.field,[e.color]);g(n,null,[l.defaultColor,r(l.backgroundSymbol,null)])}else if("dot-density"===l.type){for(const e of l.attributes)g(n,e.field,[e.color]);g(n,null,[l.backgroundColor])}else if("unique-value"===l.type)if("predominance"===l.authoringInfo?.type)for(const e of l.uniqueValueInfos)g(n,e.value.toString(),[r(e.symbol,null)]);else{const e=l.uniqueValueInfos.map((e=>r(e.symbol,null))),{field:t,field2:o,field3:i,valueExpression:a}=l;(t||a)&&g(n,t||a,e),o&&g(n,o,e),i&&g(n,i,e)}else if("class-breaks"===l.type){const e=l.classBreakInfos.map((e=>r(e.symbol,null)));g(n,l.field||l.valueExpression,e)}else"simple"===l.type&&g(n,null,[r(l.symbol,null)]);return"defaultSymbol"in l&&l.defaultSymbol&&g(n,null,[r(l.defaultSymbol,null)]),n.forEach(((l,t)=>{const o=e(l.filter(Boolean),((e,l)=>JSON.stringify(e)===JSON.stringify(l)));n.set(t,o)})),n}function b(e,l,n){let t="";return 0===l?t=m.lt+" ":l===n&&(t=m.gt+" "),t+e}function V(e){const{values:l,colors:n,labelIndexes:t,isDate:a,dateFormatOptions:r}=e;return l.map(((e,u)=>{let f=null;if(!t||t.includes(u)){let n;n=a?o(e,r):i(e),n&&(f=b(n,u,l.length-1))}return new s({value:e,color:n[u],label:f})}))}function v(e){const{stops:l,changes:n,isDate:t,dateFormatOptions:s}=e,r=l.map((e=>e.value)),u=[];for(const o of n)u.push(o.index),r[o.index]=o.value;const f=a(r,{indexes:u});l.forEach(((e,n)=>{if(e.value=r[n],null!=e.label){let a,r=null;a=t?o(f[n],s):i(f[n]),a&&(r=b(a,n,l.length-1)),e.label=r}}))}function x(e){let l=e.minValue,n=e.maxValue;const t=e.isFirstBreak?"":m.gt+" ",o="percent-of-total"===e.normalizationType?m.pct:"";return l=null==l?"":i(l),n=null==n?"":i(n),t+l+o+" "+m.ld+" "+n+o}function F(e){const l=e.classBreakInfos,n=e.normalizationType;let t=[];if(l&&l.length)if("standard-deviation"!==e.classificationMethod)if(e.round){t.push(l[0].minValue);for(const e of l)t.push(e.maxValue);t=a(t),l.forEach(((e,l)=>{e.label=x({minValue:0===l?t[0]:t[l],maxValue:t[l+1],isFirstBreak:0===l,normalizationType:n})}))}else l.forEach(((e,l)=>{e.label=x({minValue:e.minValue,maxValue:e.maxValue,isFirstBreak:0===l,normalizationType:n})}));else d.warn("setLabelsForClassBreaks","cannot set labels for class breaks generated using 'standard-deviation' method.")}function z(e){if("standard-deviation"===e.classificationMethod)return void d.warn("updateClassBreak","cannot update labels for class breaks generated using 'standard-deviation' method.");const l=e.classBreaks,n=e.change,t=n.index,o=n.value,i=l.length;let a=-1,s=-1;0===t?a=t:t===i?s=t-1:(s=t-1,a=t);const r=e.normalizationType;let u=null;a>-1&&a<i&&(u=l[a],u.minValue=o,u.label=x({minValue:u.minValue,maxValue:u.maxValue,isFirstBreak:0===a,normalizationType:r})),s>-1&&s<i&&(u=l[s],u.maxValue=o,u.label=x({minValue:u.minValue,maxValue:u.maxValue,isFirstBreak:0===s,normalizationType:r}))}function k(e){const l=e.map((e=>new Date(e))),n=l.length;let t=1/0,o=null;for(let i=0;i<n-1;i++){const e=l[i];let a=1/0,s=null;for(let t=i+1;t<n;t++){const n=l[t],o=(e.getFullYear()!==n.getFullYear()?"year":e.getMonth()!==n.getMonth()&&"month")||e.getDate()!==n.getDate()&&"day"||e.getHours()!==n.getHours()&&"hour"||e.getMinutes()!==n.getMinutes()&&"minute"||e.getSeconds()!==n.getSeconds()&&"second"||"millisecond",i=p[o];i<a&&(a=i,s=o)}a<t&&(t=a,o=s)}return o}function E(e){const{value:l,domain:n,fieldInfo:a,dateFormatInterval:s}=e;let r=String(l);const u=n&&"codedValues"in n&&n.codedValues?n.getName(l):null;return u?r=u:"number"==typeof l&&(r=a&&"date"===a.type?o(l,s&&t(c[s])):i(l)),r}function B(e,l){return"normalizationField"in e&&e.normalizationField?S(e.field,e.normalizationField):"field"in e&&e.field?I(e.field):"valueExpression"in e&&e.valueExpression?j(e.valueExpression,e.valueExpressionTitle,l):null}function I(e){return{type:"field",field:e}}function S(e,l){return{type:"normalized-field",field:e,normalizationField:l}}function j(e,l,n){return{type:"expression",expression:e,title:l,returnType:n}}function T(l,n){const t=[];if("class-breaks"===l.type||"heatmap"===l.type)t.push(B(l,"number"));else if("unique-value"===l.type){const e=l.authoringInfo;if(e&&"relationship"===e.type){if(e.field1&&e.field2){const l=e.field1.field,n=e.field2.field,o=e.field1.normalizationField,i=e.field2.normalizationField;t.push(B({field:l,normalizationField:o})),t.push(B({field:n,normalizationField:i}))}}else{const e=l.uniqueValueInfos[0];let n=null;if(e&&e.value){const e=typeof l.uniqueValueInfos[0].value;"string"!==e&&"number"!==e||(n=e)}t.push(B(l,n)),[l.field2,l.field3].forEach((e=>e&&t.push(I(e))))}}else"attributes"in l&&l.attributes.forEach((e=>t.push(B(e,"number"))));const o=n?n(l):"visualVariables"in l?l.visualVariables:null;return o&&o.forEach((e=>t.push(B(e,"number")))),e(t.filter(Boolean),((e,l)=>"field"===e.type&&"field"===l.type?e.field===l.field:"normalized-field"===e.type&&"normalized-field"===l.type?e.field===l.field&&e.normalizationField===l.normalizationField:"expression"===e.type&&"expression"===l.type&&e.expression===l.expression))}export{k as calculateDateFormatInterval,x as createClassBreakLabel,V as createColorStops,E as createUniqueValueLabel,B as getAttribute,T as getAttributes,h as getColorsFromRenderer,F as setLabelsForClassBreaks,y as timelineDateFormatOptions,z as updateClassBreak,v as updateColorStops};
package/renderers.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
- export{default as ClassBreaksRenderer}from"./renderers/ClassBreaksRenderer.js";export{default as DictionaryRenderer}from"./renderers/DictionaryRenderer.js";export{default as DotDensityRenderer}from"./renderers/DotDensityRenderer.js";export{default as HeatmapRenderer}from"./renderers/HeatmapRenderer.js";import e from"./renderers/Renderer.js";export{default as BaseRenderer}from"./renderers/Renderer.js";export{default as SimpleRenderer}from"./renderers/SimpleRenderer.js";export{default as UniqueValueRenderer}from"./renderers/UniqueValueRenderer.js";export{fromJSON,read}from"./renderers/support/jsonUtils.js";export{rendererTypes,webSceneRendererTypes}from"./renderers/support/types.js";function r(r){return r instanceof e}export{r as isRenderer};
5
+ export{default as ClassBreaksRenderer}from"./renderers/ClassBreaksRenderer.js";export{default as DictionaryRenderer}from"./renderers/DictionaryRenderer.js";export{default as DotDensityRenderer}from"./renderers/DotDensityRenderer.js";export{default as HeatmapRenderer}from"./renderers/HeatmapRenderer.js";export{default as PieChartRenderer}from"./renderers/PieChartRenderer.js";import e from"./renderers/Renderer.js";export{default as BaseRenderer}from"./renderers/Renderer.js";export{default as SimpleRenderer}from"./renderers/SimpleRenderer.js";export{default as UniqueValueRenderer}from"./renderers/UniqueValueRenderer.js";export{fromJSON,read}from"./renderers/support/jsonUtils.js";export{rendererTypes,webSceneRendererTypes}from"./renderers/support/types.js";function r(r){return r instanceof e}export{r as isRenderer};
package/request.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 e from"./config.js";import{id as t}from"./kernel.js";import r from"./core/Error.js";import s from"./core/has.js";import{clone as o}from"./core/lang.js";import{unwrap as n}from"./core/maybe.js";import{onAbort as a,isAbortError as i,createAbortError as l,isAborted as u}from"./core/promiseUtils.js";import{isDataProtocol as c,isBlobProtocol as d,normalize as p,getInterceptor as m,isTrustedServer as h,getOrigin as f,toHTTPS as y,addQueryParameter as w,objectToQuery as g,getProxyRule as b,getProxyUrl as q,addQueryParameters as T,hasSameOrigin as k,getAppUrl as O,addProxyRule as S}from"./core/urlUtils.js";import{supportsApiKey as C}from"./support/apiKeyUtils.js";import{registerNoCorsDomains as x,isNoCorsRequestRequired as v,sendNoCorsRequest as E,loadImageAsync as L}from"./support/requestUtils.js";async function U(e,t){const r=c(e),o=d(e);o||r||(e=p(e));const i={url:e,requestOptions:{...n(t)}};let l=m(e);if(l){const e=await G(l,i);if(null!=e)return{data:e,getHeader:M,requestOptions:i.requestOptions,url:i.url};l.after||l.error||(l=null)}if(e=i.url,"image"===(t=i.requestOptions).responseType){if(s("host-webworker")||s("host-node"))throw N("request:invalid-parameters",new Error("responseType 'image' is not supported in Web Workers or Node environment"),i)}else if(r)throw N("request:invalid-parameters",new Error("Data URLs are not supported for responseType = "+t.responseType),i);if("head"===t.method){if(t.body)throw N("request:invalid-parameters",new Error("body parameter cannot be set when method is 'head'"),i);if(r||o)throw N("request:invalid-parameters",new Error("data and blob URLs are not supported for method 'head'"),i)}if(await B(),j)return j.execute(e,t);const u=new AbortController;a(t,(()=>u.abort()));const h={controller:u,credential:null,credentialToken:null,fetchOptions:null,hasToken:!1,interceptor:l,params:i,redoRequest:!1,useIdentity:D.useIdentity,useProxy:!1,useSSL:!1,withCredentials:!1},f=await Q(h);return l?.after?.(f),f}let j;const D=e.request,P="FormData"in globalThis,_=[499,498,403,401],F=["COM_0056","COM_0057","SB_0008"],I=[/\/arcgis\/tokens/i,/\/sharing(\/rest)?\/generatetoken/i,/\/rest\/info/i],M=()=>null,R=Symbol();function H(e){const t=f(e);t&&!U._corsServers.includes(t)&&U._corsServers.push(t)}function A(e){const t=f(e);return!t||t.endsWith(".arcgis.com")||U._corsServers.includes(t)||h(t)}function N(e,t,s,n){let a="Error";const u={url:s.url,requestOptions:s.requestOptions,getHeader:M,ssl:!1};if(t instanceof r)return t.details?(t.details=o(t.details),t.details.url=s.url,t.details.requestOptions=s.requestOptions):t.details=u,t;if(t){const e=n&&(e=>n.headers.get(e)),r=n&&n.status,s=t.message;s&&(a=s),e&&(u.getHeader=e),u.httpStatus=(null!=t.httpCode?t.httpCode:t.code)||r||0,u.subCode=t.subcode,u.messageCode=t.messageCode,"string"==typeof t.details?u.messages=[t.details]:u.messages=t.details,u.raw=R in t?t[R]:t}return i(t)?l():new r(e,a,u)}async function B(){s("host-webworker")?j||(j=await import("./core/workers/request.js")):U._abortableFetch||(U._abortableFetch=globalThis.fetch.bind(globalThis))}async function $(){t||await import("./identity/IdentityManager.js")}async function z(r){const s=r.params.url,o=r.params.requestOptions,n=r.controller.signal,a=o.body;let i=null,l=null,c=null;if(P&&"HTMLFormElement"in globalThis&&(a instanceof FormData?i=a:a instanceof HTMLFormElement&&(l=a,i=new FormData(l))),"string"==typeof a&&(c=a),r.fetchOptions={cache:o.cacheBust&&!U._abortableFetch.polyfill?"no-cache":"default",credentials:"same-origin",headers:o.headers||{},method:"head"===o.method?"HEAD":"GET",mode:"cors",priority:D.priority,redirect:"follow",signal:n},(i||c)&&(r.fetchOptions.body=i||c),"anonymous"===o.authMode&&(r.useIdentity=!1),r.hasToken=!!(/token=/i.test(s)||o.query&&o.query.token||i&&i.get&&i.get("token")||l&&l.elements.token),!r.hasToken&&e.apiKey&&C(s)&&(o.query||(o.query={}),o.query.token=e.apiKey,r.hasToken=!0),r.useIdentity&&!r.hasToken&&!r.credentialToken&&!K(s)&&!u(n)){let e;"immediate"===o.authMode?(await $(),e=await t.getCredential(s,{signal:n}),r.credential=e):"no-prompt"===o.authMode?(await $(),e=await t.getCredential(s,{prompt:!1,signal:n}).catch((()=>{})),r.credential=e):t&&(e=t.findCredential(s)),e&&(r.credentialToken=e.token,r.useSSL=!!e.ssl)}}function K(e){return I.some((t=>t.test(e)))}async function W(e){let r=e.params.url;const o=e.params.requestOptions,n=e.fetchOptions,a=d(r)||c(r),i=o.responseType||"json",u=a?0:null!=o.timeout?o.timeout:D.timeout;let p=!1;if(!a){e.useSSL&&(r=y(r)),o.cacheBust&&"default"===n.cache&&(r=w(r,"request.preventCache",Date.now()));let a={...o.query};e.credentialToken&&(a.token=e.credentialToken);let i=g(a);s("esri-url-encodes-apostrophe")&&(i=i.replace(/'/g,"%27"));const l=r.length+1+i.length;let u;p="delete"===o.method||"post"===o.method||"put"===o.method||!!o.body||l>D.maxUrlLength;const c=o.useProxy||!!b(r);if(c){const e=q(r);u=e.path,!p&&u.length+1+l>D.maxUrlLength&&(p=!0),e.query&&(a={...e.query,...a})}if("HEAD"===n.method&&(p||c)){if(p){if(l>D.maxUrlLength)throw N("request:invalid-parameters",new Error("URL exceeds maximum length"),e.params);throw N("request:invalid-parameters",new Error("cannot use POST request when method is 'head'"),e.params)}if(c)throw N("request:invalid-parameters",new Error("cannot use proxy when method is 'head'"),e.params)}if(p?(n.method="delete"===o.method?"DELETE":"put"===o.method?"PUT":"POST",o.body?r=T(r,a):(n.body=g(a),n.headers["Content-Type"]="application/x-www-form-urlencoded")):r=T(r,a),c&&(e.useProxy=!0,r=`${u}?${r}`),a.token&&P&&n.body instanceof FormData){const e=n.body;e.set?e.set("token",a.token):e.append("token",a.token)}if(o.hasOwnProperty("withCredentials"))e.withCredentials=o.withCredentials;else if(!k(r,O()))if(h(r))e.withCredentials=!0;else if(t){const s=t.findServerInfo(r);s&&s.webTierAuth&&(e.withCredentials=!0)}e.withCredentials&&(n.credentials="include",v(r)&&await E(p?T(r,a):r))}let m,C,x=0,L=!1;u>0&&(x=setTimeout((()=>{L=!0,e.controller.abort()}),u));try{if("native-request-init"===o.responseType)C=n,C.url=r;else if("image"!==o.responseType||"default"!==n.cache||"GET"!==n.method||p||J(o.headers)||!a&&!e.useProxy&&D.proxyUrl&&!A(r)){if(m=await U._abortableFetch(r,n),e.useProxy||H(r),"native"===o.responseType)C=m;else if("HEAD"!==n.method)if(m.ok){switch(i){case"array-buffer":C=await m.arrayBuffer();break;case"blob":case"image":C=await m.blob();break;default:C=await m.text()}if(x&&(clearTimeout(x),x=0),"json"===i||"xml"===i||"document"===i)if(C)switch(i){case"json":C=JSON.parse(C);break;case"xml":C=X(C,"application/xml");break;case"document":C=X(C,"text/html")}else C=null;if(C){if("array-buffer"===i||"blob"===i){const e=m.headers.get("Content-Type");if(/application\/json|text\/plain/i.test(e)&&C["blob"===i?"size":"byteLength"]<=750)try{const e=await new Response(C).json();e.error&&(C=e)}catch{}}"image"===i&&C instanceof Blob&&(C=await Y(URL.createObjectURL(C),e,!0))}}else C=await m.text()}else C=await Y(r,e)}catch(j){if("AbortError"===j.name){if(L)throw new Error("Timeout exceeded");throw l("Request canceled")}if(!(!m&&j instanceof TypeError&&D.proxyUrl)||o.body||"delete"===o.method||"head"===o.method||"post"===o.method||"put"===o.method||e.useProxy||A(r))throw j;e.redoRequest=!0,S({proxyUrl:D.proxyUrl,urlPrefix:f(r)})}finally{x&&clearTimeout(x)}return[m,C]}async function G(e,t){if(null!=e.responseData)return e.responseData;if(e.headers&&(t.requestOptions.headers={...t.requestOptions.headers,...e.headers}),e.query&&(t.requestOptions.query={...t.requestOptions.query,...e.query}),e.before){let o,n;try{n=await e.before(t)}catch(s){o=N("request:interceptor",s,t)}if((n instanceof Error||n instanceof r)&&(o=N("request:interceptor",n,t)),o)throw e.error&&e.error(o),o;return n}}function J(e){if(e)for(const t of Object.getOwnPropertyNames(e))if(e[t])return!0;return!1}function X(e,t){let r;try{r=(new DOMParser).parseFromString(e,t)}catch{}if(!r||r.getElementsByTagName("parsererror").length)throw new SyntaxError("XML Parse error");return r}async function Q(e){let r,s;await z(e);try{do{[r,s]=await W(e)}while(!await V(e,r,s))}catch(a){const t=N("request:server",a,e.params,r);throw t.details.ssl=e.useSSL,e.interceptor&&e.interceptor.error&&e.interceptor.error(t),t}const o=e.params.url;if(s&&/\/sharing\/rest\/(accounts|portals)\/self/i.test(o)){if(!e.hasToken&&!e.credentialToken&&s.user?.username&&!h(o)){const e=f(o,!0);e&&D.trustedServers.push(e)}Array.isArray(s.authorizedCrossOriginNoCorsDomains)&&x(s.authorizedCrossOriginNoCorsDomains)}const n=e.credential;if(n&&t){const e=t.findServerInfo(n.server);let r=e&&e.owningSystemUrl;if(r){r=r.replace(/\/?$/,"/sharing");const e=t.findCredential(r,n.userId);e&&-1===t._getIdenticalSvcIdx(r,e)&&e.resources.unshift(r)}}return{data:s,getHeader:r?e=>r.headers.get(e):M,requestOptions:e.params.requestOptions,ssl:e.useSSL,url:e.params.url}}async function V(e,r,s){if(e.redoRequest)return e.redoRequest=!1,!1;const o=e.params.requestOptions;if(!r||"native"===o.responseType||"native-request-init"===o.responseType)return!0;let n,a,i,l;if(!r.ok)throw n=new Error(`Unable to load ${r.url} status: ${r.status}`),n[R]=s,n;s?.error&&(n=s.error),n&&(a=Number(n.code),i=n.hasOwnProperty("subcode")?Number(n.subcode):null,l=n.messageCode,l=l&&l.toUpperCase());const u=o.authMode;if(403===a&&(4===i||n.message&&n.message.toLowerCase().includes("ssl")&&!n.message.toLowerCase().includes("permission"))){if(!e.useSSL)return e.useSSL=!0,!1}else if(!e.hasToken&&e.useIdentity&&("no-prompt"!==u||498===a)&&_.includes(a)&&!K(e.params.url)&&(403!==a||!F.includes(l)&&(null==i||2===i&&e.credentialToken))){await $();try{const r=await t.getCredential(e.params.url,{error:N("request:server",n,e.params),prompt:"no-prompt"!==u,signal:e.controller.signal,token:e.credentialToken});return e.credential=r,e.credentialToken=r.token,e.useSSL=e.useSSL||r.ssl,!1}catch(c){if("no-prompt"===u)return e.credential=null,e.credentialToken=null,!1;n=c}}if(n)throw n;return!0}function Y(e,t,r=!1){const s=t.controller.signal,o=new Image;return t.withCredentials?o.crossOrigin="use-credentials":o.crossOrigin="anonymous",o.alt="",o.fetchpriority=D.priority,o.src=e,L(o,e,r,s)}U._abortableFetch=null,U._corsServers=["https://server.arcgisonline.com","https://services.arcgisonline.com"];export{U as default};
5
+ import e from"./config.js";import{id as t}from"./kernel.js";import r from"./core/Error.js";import s from"./core/has.js";import{clone as o}from"./core/lang.js";import{unwrap as n}from"./core/maybe.js";import{onAbort as a,isAbortError as i,createAbortError as l,isAborted as u}from"./core/promiseUtils.js";import{isDataProtocol as c,isBlobProtocol as d,normalize as p,getInterceptor as h,isTrustedServer as m,getOrigin as f,toHTTPS as y,addQueryParameter as w,objectToQuery as g,getProxyRule as b,getProxyUrl as q,addQueryParameters as T,hasSameOrigin as k,getAppUrl as O,addProxyRule as S}from"./core/urlUtils.js";import{supportsApiKey as C}from"./support/apiKeyUtils.js";import{registerNoCorsDomains as x,isNoCorsRequestRequired as v,sendNoCorsRequest as E,loadImageAsync as L}from"./support/requestUtils.js";async function U(e,t){const r=c(e),o=d(e);o||r||(e=p(e));const i={url:e,requestOptions:{...n(t)}};let l=h(e);if(l){const e=await G(l,i);if(null!=e)return{data:e,getHeader:M,requestOptions:i.requestOptions,url:i.url};l.after||l.error||(l=null)}if(e=i.url,"image"===(t=i.requestOptions).responseType){if(s("host-webworker")||s("host-node"))throw N("request:invalid-parameters",new Error("responseType 'image' is not supported in Web Workers or Node environment"),i)}else if(r)throw N("request:invalid-parameters",new Error("Data URLs are not supported for responseType = "+t.responseType),i);if("head"===t.method){if(t.body)throw N("request:invalid-parameters",new Error("body parameter cannot be set when method is 'head'"),i);if(r||o)throw N("request:invalid-parameters",new Error("data and blob URLs are not supported for method 'head'"),i)}if(await B(),j)return j.execute(e,t);const u=new AbortController;a(t,(()=>u.abort()));const m={controller:u,credential:null,credentialToken:null,fetchOptions:null,hasToken:!1,interceptor:l,params:i,redoRequest:!1,useIdentity:D.useIdentity,useProxy:!1,useSSL:!1,withCredentials:!1},f=await Q(m);return l?.after?.(f),f}let j;const D=e.request,P="FormData"in globalThis,_=[499,498,403,401],F=["COM_0056","COM_0057","SB_0008"],I=[/\/arcgis\/tokens/i,/\/sharing(\/rest)?\/generatetoken/i,/\/rest\/info/i],M=()=>null,R=Symbol();function H(e){const t=f(e);t&&!U._corsServers.includes(t)&&U._corsServers.push(t)}function A(e){const t=f(e);return!t||t.endsWith(".arcgis.com")||U._corsServers.includes(t)||m(t)}function N(e,t,s,n){let a="Error";const u={url:s.url,requestOptions:s.requestOptions,getHeader:M,ssl:!1};if(t instanceof r)return t.details?(t.details=o(t.details),t.details.url=s.url,t.details.requestOptions=s.requestOptions):t.details=u,t;if(t){const e=n&&(e=>n.headers.get(e)),r=n&&n.status,s=t.message;s&&(a=s),e&&(u.getHeader=e),u.httpStatus=(null!=t.httpCode?t.httpCode:t.code)||r||0,u.subCode=t.subcode,u.messageCode=t.messageCode,"string"==typeof t.details?u.messages=[t.details]:u.messages=t.details,u.raw=R in t?t[R]:t}return i(t)?l():new r(e,a,u)}async function B(){s("host-webworker")?j||(j=await import("./core/workers/request.js")):U._abortableFetch||(U._abortableFetch=globalThis.fetch.bind(globalThis))}async function $(){t||await import("./identity/IdentityManager.js")}async function z(r){const s=r.params.url,o=r.params.requestOptions,n=r.controller.signal,a=o.body;let i=null,l=null;if(P&&"HTMLFormElement"in globalThis&&(a instanceof FormData?i=a:a instanceof HTMLFormElement&&(i=new FormData(a))),"string"==typeof a&&(l=a),r.fetchOptions={cache:o.cacheBust&&!U._abortableFetch.polyfill?"no-cache":"default",credentials:"same-origin",headers:o.headers||{},method:"head"===o.method?"HEAD":"GET",mode:"cors",priority:D.priority,redirect:"follow",signal:n},(i||l)&&(r.fetchOptions.body=i||l),"anonymous"===o.authMode&&(r.useIdentity=!1),r.hasToken=!!(/token=/i.test(s)||o.query?.token||i?.get("token")),!r.hasToken&&e.apiKey&&C(s)&&(o.query||(o.query={}),o.query.token=e.apiKey,r.hasToken=!0),r.useIdentity&&!r.hasToken&&!r.credentialToken&&!K(s)&&!u(n)){let e;"immediate"===o.authMode?(await $(),e=await t.getCredential(s,{signal:n}),r.credential=e):"no-prompt"===o.authMode?(await $(),e=await t.getCredential(s,{prompt:!1,signal:n}).catch((()=>{})),r.credential=e):t&&(e=t.findCredential(s)),e&&(r.credentialToken=e.token,r.useSSL=!!e.ssl)}}function K(e){return I.some((t=>t.test(e)))}async function W(e){let r=e.params.url;const o=e.params.requestOptions,n=e.fetchOptions,a=d(r)||c(r),i=o.responseType||"json",u=a?0:null!=o.timeout?o.timeout:D.timeout;let p=!1;if(!a){e.useSSL&&(r=y(r)),o.cacheBust&&"default"===n.cache&&(r=w(r,"request.preventCache",Date.now()));let a={...o.query};e.credentialToken&&(a.token=e.credentialToken);let i=g(a);s("esri-url-encodes-apostrophe")&&(i=i.replace(/'/g,"%27"));const l=r.length+1+i.length;let u;p="delete"===o.method||"post"===o.method||"put"===o.method||!!o.body||l>D.maxUrlLength;const c=o.useProxy||!!b(r);if(c){const e=q(r);u=e.path,!p&&u.length+1+l>D.maxUrlLength&&(p=!0),e.query&&(a={...e.query,...a})}if("HEAD"===n.method&&(p||c)){if(p){if(l>D.maxUrlLength)throw N("request:invalid-parameters",new Error("URL exceeds maximum length"),e.params);throw N("request:invalid-parameters",new Error("cannot use POST request when method is 'head'"),e.params)}if(c)throw N("request:invalid-parameters",new Error("cannot use proxy when method is 'head'"),e.params)}if(p?(n.method="delete"===o.method?"DELETE":"put"===o.method?"PUT":"POST",o.body?r=T(r,a):(n.body=g(a),n.headers["Content-Type"]="application/x-www-form-urlencoded")):r=T(r,a),c&&(e.useProxy=!0,r=`${u}?${r}`),a.token&&P&&n.body instanceof FormData&&!/\/sharing\/(appservices|servers)\//i.test(r)&&n.body.set("token",a.token),o.hasOwnProperty("withCredentials"))e.withCredentials=o.withCredentials;else if(!k(r,O()))if(m(r))e.withCredentials=!0;else if(t){const s=t.findServerInfo(r);s&&s.webTierAuth&&(e.withCredentials=!0)}e.withCredentials&&(n.credentials="include",v(r)&&await E(p?T(r,a):r))}let h,C,x=0,L=!1;u>0&&(x=setTimeout((()=>{L=!0,e.controller.abort()}),u));try{if("native-request-init"===o.responseType)C=n,C.url=r;else if("image"!==o.responseType||"default"!==n.cache||"GET"!==n.method||p||J(o.headers)||!a&&!e.useProxy&&D.proxyUrl&&!A(r)){if(h=await U._abortableFetch(r,n),e.useProxy||H(r),"native"===o.responseType)C=h;else if("HEAD"!==n.method)if(h.ok){switch(i){case"array-buffer":C=await h.arrayBuffer();break;case"blob":case"image":C=await h.blob();break;default:C=await h.text()}if(x&&(clearTimeout(x),x=0),"json"===i||"xml"===i||"document"===i)if(C)switch(i){case"json":C=JSON.parse(C);break;case"xml":C=X(C,"application/xml");break;case"document":C=X(C,"text/html")}else C=null;if(C){if("array-buffer"===i||"blob"===i){const e=h.headers.get("Content-Type");if(/application\/json|text\/plain/i.test(e)&&C["blob"===i?"size":"byteLength"]<=750)try{const e=await new Response(C).json();e.error&&(C=e)}catch{}}"image"===i&&C instanceof Blob&&(C=await Y(URL.createObjectURL(C),e,!0))}}else C=await h.text()}else C=await Y(r,e)}catch(j){if("AbortError"===j.name){if(L)throw new Error("Timeout exceeded");throw l("Request canceled")}if(!(!h&&j instanceof TypeError&&D.proxyUrl)||o.body||"delete"===o.method||"head"===o.method||"post"===o.method||"put"===o.method||e.useProxy||A(r))throw j;e.redoRequest=!0,S({proxyUrl:D.proxyUrl,urlPrefix:f(r)})}finally{x&&clearTimeout(x)}return[h,C]}async function G(e,t){if(null!=e.responseData)return e.responseData;if(e.headers&&(t.requestOptions.headers={...t.requestOptions.headers,...e.headers}),e.query&&(t.requestOptions.query={...t.requestOptions.query,...e.query}),e.before){let o,n;try{n=await e.before(t)}catch(s){o=N("request:interceptor",s,t)}if((n instanceof Error||n instanceof r)&&(o=N("request:interceptor",n,t)),o)throw e.error&&e.error(o),o;return n}}function J(e){if(e)for(const t of Object.getOwnPropertyNames(e))if(e[t])return!0;return!1}function X(e,t){let r;try{r=(new DOMParser).parseFromString(e,t)}catch{}if(!r||r.getElementsByTagName("parsererror").length)throw new SyntaxError("XML Parse error");return r}async function Q(e){let r,s;await z(e);try{do{[r,s]=await W(e)}while(!await V(e,r,s))}catch(a){const t=N("request:server",a,e.params,r);throw t.details.ssl=e.useSSL,e.interceptor&&e.interceptor.error&&e.interceptor.error(t),t}const o=e.params.url;if(s&&/\/sharing\/rest\/(accounts|portals)\/self/i.test(o)){if(!e.hasToken&&!e.credentialToken&&s.user?.username&&!m(o)){const e=f(o,!0);e&&D.trustedServers.push(e)}Array.isArray(s.authorizedCrossOriginNoCorsDomains)&&x(s.authorizedCrossOriginNoCorsDomains)}const n=e.credential;if(n&&t){const e=t.findServerInfo(n.server);let r=e&&e.owningSystemUrl;if(r){r=r.replace(/\/?$/,"/sharing");const e=t.findCredential(r,n.userId);e&&-1===t._getIdenticalSvcIdx(r,e)&&e.resources.unshift(r)}}return{data:s,getHeader:r?e=>r.headers.get(e):M,requestOptions:e.params.requestOptions,ssl:e.useSSL,url:e.params.url}}async function V(e,r,s){if(e.redoRequest)return e.redoRequest=!1,!1;const o=e.params.requestOptions;if(!r||"native"===o.responseType||"native-request-init"===o.responseType)return!0;let n,a,i,l;if(!r.ok)throw n=new Error(`Unable to load ${r.url} status: ${r.status}`),n[R]=s,n;s?.error&&(n=s.error),n&&(a=Number(n.code),i=n.hasOwnProperty("subcode")?Number(n.subcode):null,l=n.messageCode,l=l&&l.toUpperCase());const u=o.authMode;if(403===a&&(4===i||n.message&&n.message.toLowerCase().includes("ssl")&&!n.message.toLowerCase().includes("permission"))){if(!e.useSSL)return e.useSSL=!0,!1}else if(!e.hasToken&&e.useIdentity&&("no-prompt"!==u||498===a)&&_.includes(a)&&!K(e.params.url)&&(403!==a||!F.includes(l)&&(null==i||2===i&&e.credentialToken))){await $();try{const r=await t.getCredential(e.params.url,{error:N("request:server",n,e.params),prompt:"no-prompt"!==u,signal:e.controller.signal,token:e.credentialToken});return e.credential=r,e.credentialToken=r.token,e.useSSL=e.useSSL||r.ssl,!1}catch(c){if("no-prompt"===u)return e.credential=null,e.credentialToken=null,!1;n=c}}if(n)throw n;return!0}function Y(e,t,r=!1){const s=t.controller.signal,o=new Image;return t.withCredentials?o.crossOrigin="use-credentials":o.crossOrigin="anonymous",o.alt="",o.fetchpriority=D.priority,o.src=e,L(o,e,r,s)}U._abortableFetch=null,U._corsServers=["https://server.arcgisonline.com","https://services.arcgisonline.com"];export{U as default};