@arcgis/core 4.24.0-next.20220331 → 4.24.0-next.20220401
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WebScene.js +1 -1
- package/analysis/LineOfSightAnalysisObserver.js +1 -1
- package/analysis/LineOfSightAnalysisTarget.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0eb9c9477d36cd212f8b.js +1 -0
- package/assets/esri/core/workers/chunks/10779a256841c37f2429.js +1 -0
- package/assets/esri/core/workers/chunks/125b14c2ccd96d7c20c2.js +1 -0
- package/assets/esri/core/workers/chunks/{19cb7315d403a4cd4f59.js → 2530e8ccf6e12787ce76.js} +1 -1
- package/assets/esri/core/workers/chunks/{302c68c5b91d1ab4fd47.js → 560234694f3e53802aff.js} +1 -1
- package/assets/esri/core/workers/chunks/5633710daeb3bbb79bcf.js +1 -0
- package/assets/esri/core/workers/chunks/6f7917da7166e8c6854b.js +1 -0
- package/assets/esri/core/workers/chunks/7388824eac8da01ea03d.js +1 -0
- package/assets/esri/core/workers/chunks/794b47764ebb0257ed41.js +1 -0
- package/assets/esri/core/workers/chunks/81e9d860a044acec74ce.js +1 -0
- package/assets/esri/core/workers/chunks/{9a32f129f0d67547e44c.js → 831dc0187f71e658550c.js} +1 -1
- package/assets/esri/core/workers/chunks/{d162d1b7b97a58e97d8c.js → 8958cd555f4887526e8b.js} +1 -1
- package/assets/esri/core/workers/chunks/{e57b71ba70f088a3a052.js → 90dcd86cdef90099abfa.js} +1 -1
- package/assets/esri/core/workers/chunks/{a5b54e134ae59629d6d1.js → 93067e27eea5844edc6c.js} +1 -1
- package/assets/esri/core/workers/chunks/{0b63c9d5d9c004923a97.js → b26bd8fde2fc65bb67fb.js} +1 -1
- package/assets/esri/core/workers/chunks/{b81e1df3a47b61421295.js → b34ba22c7a5adce8a7a2.js} +1 -1
- package/assets/esri/core/workers/chunks/c28f7ae4756ad1ba94bd.js +1 -0
- package/assets/esri/core/workers/chunks/{e1408ff1b8343674e6ef.js → c59b0b58e24e6a60cf3e.js} +1 -1
- package/assets/esri/core/workers/chunks/{f4e79769297ad9c1d508.js → c7cee13a962396b23a5e.js} +1 -1
- package/assets/esri/core/workers/chunks/{cb38754110b7a0e901f6.js → cd3679fa86129ebabfdf.js} +1 -1
- package/assets/esri/core/workers/chunks/{224c0e64160bdc170051.js → d076627bb7dadea89e89.js} +1 -1
- package/assets/esri/core/workers/chunks/e06ad3a3d71154fed654.js +1 -0
- package/assets/esri/core/workers/chunks/{7a77d4cd27c30f1a5cae.js → ee3387a43dfbb3df23e1.js} +1 -1
- package/assets/esri/core/workers/chunks/{fbb7a121a45f8ca7d89c.js → f4fc165420d449e442b8.js} +1 -1
- package/assets/esri/themes/base/widgets/_Widget.scss +2 -2
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/dark-blue/main.css +1 -1
- package/assets/esri/themes/dark-green/main.css +1 -1
- package/assets/esri/themes/dark-purple/main.css +1 -1
- package/assets/esri/themes/dark-red/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/assets/esri/themes/light-blue/main.css +1 -1
- package/assets/esri/themes/light-green/main.css +1 -1
- package/assets/esri/themes/light-purple/main.css +1 -1
- package/assets/esri/themes/light-red/main.css +1 -1
- package/core/AsyncUpdate.js +1 -1
- package/exports/csv.js +1 -1
- package/geometry/support/meshUtils/exporters/gltf/geometry.js +1 -1
- package/geometry/support/normalizeUtils.js +1 -1
- package/interfaces.d.ts +120 -0
- package/layers/MapImageLayer.js +1 -1
- package/layers/RouteLayer.js +1 -1
- package/layers/VectorTileLayer.js +1 -1
- package/layers/graphics/editingSupport.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/support/RasterJobHandler.js +1 -1
- package/layers/support/SpriteSource.js +1 -1
- package/layers/support/Sublayer.js +1 -1
- package/layers/support/TilemapCache.js +1 -1
- package/layers/support/vectorTileLayerLoader.js +1 -1
- package/libs/i3s/I3SModule.js +1 -1
- package/libs/vxl/VxlModule.js +1 -1
- package/package.json +1 -1
- package/portal/support/layersLoader.js +1 -1
- package/portal/support/portalLayers.js +1 -1
- package/renderers/support/DictionaryLoader.js +1 -1
- package/rest/query/operations/query.js +1 -1
- package/rest/query/operations/queryTopFeatures.js +1 -1
- package/rest/support/DirectionLine.js +1 -1
- package/rest/support/DirectionPoint.js +1 -1
- package/rest/support/PointBarrier.js +1 -1
- package/rest/support/PolygonBarrier.js +1 -1
- package/rest/support/PolylineBarrier.js +1 -1
- package/rest/support/RouteInfo.js +1 -1
- package/rest/support/Stop.js +1 -1
- package/smartMapping/labels/clusters.js +1 -1
- package/smartMapping/renderers/color.js +1 -1
- package/smartMapping/support/adapters/SceneLayerAdapter.js +1 -1
- package/support/elevationInfoUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/support/previewSymbol3D.js +1 -1
- package/symbols/support/symbolLayerUtils.js +1 -1
- package/views/2d/engine/vectorTiles/TileParser.js +1 -1
- package/views/2d/engine/webgl/util/Lock.js +1 -1
- package/views/2d/layers/RouteLayerView2D.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/support/FeatureSetReaderPBF.js +1 -1
- package/views/2d/layers/support/webStyleUtils.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightIntersectionResult.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightRayIntersector.js +1 -1
- package/views/3d/interactive/analysisTools/lineOfSight/LineOfSightTool.js +1 -1
- package/views/3d/layers/BuildingComponentSublayerView3D.js +1 -1
- package/views/3d/layers/FeatureLikeLayerView3D.js +1 -1
- package/views/3d/layers/ImageryLayerView3D.js +1 -1
- package/views/3d/layers/RouteLayerView3D.js +1 -1
- package/views/3d/layers/SceneLayerGraphicsView3D.js +1 -1
- package/views/3d/layers/i3s/I3SNodeLoader.js +1 -1
- package/views/3d/layers/support/PopupSceneLayerView.js +1 -1
- package/views/3d/support/debugFlags.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/layers/ImageryTileLayerView.js +1 -1
- package/views/layers/MapImageLayerView.js +1 -1
- package/views/layers/TileLayerView.js +1 -1
- package/views/support/DefaultsFromMap.js +1 -1
- package/widgets/Bookmarks/BookmarksViewModel.js +1 -1
- package/widgets/CoordinateConversion/CoordinateConversionViewModel.js +1 -1
- package/widgets/Directions/DirectionsViewModel.js +1 -1
- package/widgets/Directions.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/Feature/support/featureUtils.js +1 -1
- package/widgets/FeatureForm/InputField.js +1 -1
- package/widgets/FeatureTable/support/FeatureStore.js +1 -1
- package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
- package/widgets/Legend/support/ActiveLayerInfo.js +1 -1
- package/widgets/Popup/actionUtils.js +1 -1
- package/widgets/Search/SearchViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/113362697da1b69deaed.js +0 -1
- package/assets/esri/core/workers/chunks/1e590d63187ada4f5ff7.js +0 -1
- package/assets/esri/core/workers/chunks/391a330182c616cfffaf.js +0 -1
- package/assets/esri/core/workers/chunks/3a85312fd7d0cda9ce93.js +0 -1
- package/assets/esri/core/workers/chunks/3c00e38d3b16f4a53a4f.js +0 -1
- package/assets/esri/core/workers/chunks/4a82a6a473b3d540d0be.js +0 -1
- package/assets/esri/core/workers/chunks/5b4d9786c010d265346c.js +0 -1
- package/assets/esri/core/workers/chunks/bbfc98e33d4630eb9e5c.js +0 -1
- package/assets/esri/core/workers/chunks/bd725783b85f308e2c89.js +0 -1
- package/assets/esri/core/workers/chunks/d343f05a3366f95e0494.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"../../renderers/PointCloudClassBreaksRenderer.js";import"../../renderers/PointCloudRenderer.js";import e from"../../renderers/PointCloudRGBRenderer.js";import o from"../../renderers/PointCloudStretchRenderer.js";import"../../renderers/PointCloudUniqueValueRenderer.js";import i from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import r from"../../core/Error.js";import{isSome as a}from"../../core/maybe.js";import{fetchMessageBundle as l}from"../../intl/messages.js";import{substitute as n}from"../../intl/substitute.js";import s from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoVisualVariable.js";import{createColorStops as m,setLabelsForClassBreaks as d}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/ColorVariable.js";import c from"../heuristics/ageUnit.js";import p from"../heuristics/outline.js";import y from"../heuristics/sizeRange.js";import{getSummaryStatistics as f,getClassBreaks as b,getPointSizeAlgorithm as h,formatDate as v,updateAgeRendererAuthoringInfoVV as w,createError as g,verifyBasicFieldValidity as T,isValidPointSize as x,createColors as E,getDefaultDataRange as V,createDefaultStopValues as z,createStopValues as S,getDataRange as M,createDataValues as j,createSymbol as I,getSymbolSizeFromScheme as q,getSymbolOutlineFromScheme as C,getBasemapInfo as O}from"./support/utils.js";import{getAgeExpressions as P,verifyDates as k,supportedAgeUnits as F}from"../statistics/support/ageUtils.js";import{getFieldsList as U,getNormalizationType as R}from"../support/utils.js";import{createLayerAdapter as B,featureCapableLayerTypes as D,getLayerTypeLabels as L,LayerType as A}from"../support/adapters/support/layerUtils.js";import{c as G,g as W,a as $}from"../../chunks/color.js";const H="date",_="high-to-low",J=2**53-1,K=5;async function N(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("color-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("color-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};if("90-10"===o.theme)throw new r("color-visual-variable:not-supported","Only 'high-to-low', 'above-and-below', 'centered-on', 'extremes', 'above', 'below' themes are supported.");const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-visual-variable:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);if("mesh"!==i.geometryType&&o.worldScale&&(!o.view||"3d"!==o.view.type))return Promise.reject(g("color-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true"));const n=await U({field:o.field,normalizationField:o.normalizationField,valueExpression:o.valueExpression}),s=T(i,n,"color-visual-variable:invalid-parameters");if(s)throw s;return o}async function Q(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("color-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("color-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled;const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,o.sizeOptimizationEnabled=("point"===n||"multipoint"===n||"polyline"===n)&&o.sizeOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else{if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const s=await U({field:o.field,normalizationField:o.normalizationField,valueExpression:o.valueExpression}),t=T(i,s,"color-continuous-renderer:invalid-parameters");if(t)throw t;return o}async function X(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new r("color-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new r("color-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled,o.classificationMethod=o.classificationMethod||"equal-interval",o.normalizationType=R(o);const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));if(!(null!=o.minValue&&null!=o.maxValue)&&(null!=o.minValue||null!=o.maxValue))throw new r("color-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else{if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const s=await U({field:o.field,normalizationField:o.normalizationField}),t=T(i,s,"color-class-breaks-renderer:invalid-parameters");if(t)throw t;return o}function Y(e){const o={...e};delete o.basemap,delete o.colorScheme,delete o.legendOptions,delete o.symbolType,delete o.defaultSymbolEnabled,delete o.colorMixMode,delete o.edgesType;const i=o;return i.analyzeData=!(null!=o.minValue&&null!=o.maxValue),i}function Z(e){if(!e||!e.layer)return Promise.reject(g("color-point-cloud-true-color-renderer:missing-parameters","'layer' parameter is required"));const o={...e},i=[A.PointCloudLayer],r=B(o.layer,i);if(o.layer=r,o.density=o.density||25,o.size=o.size||"100%",!x(o.size))return Promise.reject(g("color-point-cloud-true-color-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'"));if(!r)return Promise.reject(g("color-point-cloud-true-color-renderer:invalid-parameters","'layer' must be one of these types: "+L(i).join(", ")));const l=a(o.signal)?{signal:o.signal}:null;return r.load(l).then((()=>o))}function ee(e){if(!(e&&e.layer&&e.field))return Promise.reject(g("color-point-cloud-continuous-renderer:missing-parameters","'layer' and 'field' parameters are required"));const o=e.field.toLowerCase();if("intensity"!==o&&"elevation"!==o)return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","'field' should be either 'intensity' or 'elevation'"));const i={...e},r=[A.PointCloudLayer],l=B(i.layer,r);if(i.layer=l,i.density=i.density||25,i.size=i.size||"100%",!x(i.size))return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'"));if(!l)return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+L(r).join(", ")));const n=a(i.signal)?{signal:i.signal}:null;return l.load(n).then((()=>i))}function oe(e){const o={...e},i=o.symbolType.includes("3d-volumetric");delete o.symbolType,delete o.defaultSymbolEnabled,delete o.colorMixMode,delete o.edgesType;const r=o;return r.worldScale=i,r}async function ie(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new r("color-age-renderer:missing-parameters","'layer', 'view', startTime', 'endTime' parameters are required");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled;const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-age-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,o.sizeOptimizationEnabled=("point"===n||"multipoint"===n||"polyline"===n)&&o.sizeOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'");const s=k(i,o.startTime,o.endTime,"color-age-renderer:invalid-parameters");if(s)throw s;if(o.unit&&!F.includes(o.unit))throw new r("color-age-renderer:invalid-unit",`Supported units are: ${F.join(", ")}`);return o}async function re(e,o){let i=e.colorScheme,r=null,l=null;const n=await O(e.basemap,e.view);if(r=a(n.basemapId)?n.basemapId:null,l=a(n.basemapTheme)?n.basemapTheme:null,i)return{scheme:G(i),basemapId:r,basemapTheme:l};const s=o||e.theme||_,t=W({theme:s,basemap:r,basemapTheme:l,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});if(t)if(r=t.basemapId,l=t.basemapTheme,e.schemeId){const o=s+"/"+r+"/"+e.schemeId;i=$({id:o,geometryType:e.geometryType})}else i=t.primaryScheme;return{scheme:i,basemapId:r,basemapTheme:l}}async function ae(e,o){const i=o.layer,r=await re({basemap:o.basemap,colorScheme:o.colorScheme,geometryType:i.geometryType,schemeId:"elevation"===o.field.toLowerCase()?"point-cloud-elevation-scheme":"point-cloud-intensity-scheme"}),a=r.scheme;if(!a)throw g("color-point-cloud-continuous-renderer:insufficient-info","Unable to find color scheme");const l=E(a.colors,K);if(l.length<K)throw g("color-point-cloud-continuous-renderer:insufficient-info","Color scheme does not have enough colors");const n=V(e,!1,!0),s=n?z(n[0],n[1],5):S(e);return{stops:m({values:s,isDate:!1,dateFormatOptions:null,colors:l,labelIndexes:[0,2,4]}),basemapId:r.basemapId,basemapTheme:r.basemapTheme,statistics:e,defaultValuesUsed:!!n,colorScheme:G(a)}}async function le(e,o,i){const r=e.layer,{field:a,theme:l}=e,n=a&&!("function"==typeof a)?r.getField(a):null,m=n&&n.type===H,d=await re({basemap:e.basemap,theme:e.theme,geometryType:r.geometryType,colorScheme:e.colorScheme,worldScale:e.worldScale,view:e.view}),c=d.scheme;if(!c)throw g("color-visual-variable:insufficient-info","Unable to find color scheme");const p=E(c.colors,K);if(p.length<K)throw g("color-visual-variable:insufficient-info","Color scheme does not have enough colors");const y=c.id.includes("seq-"),f=M(o,i,l,m,"90-10"!==l),b=j(f,o,l,y),h=E(p,K),v=new u({field:a,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationField:e.normalizationField,stops:b.map(((e,o)=>({value:e,color:h[o]}))),legendOptions:e.legendOptions}),w=new t({type:"color",minSliderValue:null!=e.minValue?e.minValue:o.min,maxSliderValue:null!=e.maxValue?e.maxValue:o.max,theme:c.theme}),T=new s({visualVariables:[w]});return{basemapId:d.basemapId,basemapTheme:d.basemapTheme,visualVariable:v,statistics:o,defaultValuesUsed:f.defaultValuesUsed,colorScheme:G(c),authoringInfo:T}}async function ne(e,o,r,a,n,s){const t=await l("esri/smartMapping/t9n/smartMapping"),m=s.layer,d=s.field,u=m.geometryType,c=s.defaultSymbolEnabled,p=G(e.colorScheme),y=o&&o.opacity,f=[e.visualVariable.clone()];o&&o.visualVariables&&o.visualVariables.length&&f.push(...o.visualVariables.map((e=>e.clone()))),r&&r.minSize&&f.push(r.minSize);return{renderer:new i({classBreakInfos:[{minValue:-J,maxValue:J,symbol:I(u,{type:s.symbolType,color:p.noDataColor,size:q(p,u),outline:C(p,u,y),meshInfo:{colorMixMode:s.colorMixMode,edgesType:s.edgesType}})}],defaultLabel:c?t.other:null,defaultSymbol:c?I(u,{type:s.symbolType,color:p.noDataColor,size:q(p,u),outline:C(p,u,y),meshInfo:{colorMixMode:s.colorMixMode,edgesType:s.edgesType}}):null,field:d,normalizationType:a,normalizationField:n,valueExpression:s.valueExpression,valueExpressionTitle:s.valueExpressionTitle,visualVariables:f,authoringInfo:e.authoringInfo&&e.authoringInfo.clone()}),visualVariable:e.visualVariable.clone(),statistics:e.statistics,defaultValuesUsed:e.defaultValuesUsed,colorScheme:G(e.colorScheme),basemapId:e.basemapId,basemapTheme:e.basemapTheme}}async function se(e){const o=await N(e),{view:i,field:r,valueExpression:a,minValue:l,maxValue:n,layer:s,normalizationField:t,signal:m,statistics:d}=o,u=t?"field":void 0,[c,p]=await Promise.all([d||f({layer:s,field:r,valueExpression:a,sqlExpression:o.sqlExpression,sqlWhere:o.sqlWhere,normalizationType:u,normalizationField:t,minValue:l,maxValue:n,view:i,signal:m}),"90-10"===o.theme?b({layer:s,field:r,normalizationField:t,valueExpression:a,classificationMethod:"quantile",minValue:l,maxValue:n,view:i,numClasses:10,signal:m}):null]);return le(o,c,null==p?void 0:p.result)}function te(e,o){const i=e.colorsForClassBreaks;let r;if(i&&i.length>0&&(i.some((e=>(e.numClasses===o&&(r=e.colors),!!r))),!r)){const e=i[i.length-1],a=o-e.numClasses;if(a>0){const o=e.colors[e.numClasses-1];r=e.colors.splice(0);for(let e=1;e<=a;e++)r.push(o)}}return r&&(r=E(r,r.length)),r}async function me(e,o){const a=await l("esri/smartMapping/t9n/smartMapping"),n=e.layer,t=e.defaultSymbolEnabled,m=n.geometryType,u=e.classificationMethod,c="standard-deviation"===u,p=await re({basemap:e.basemap,geometryType:m,theme:c?"above-and-below":null,colorScheme:e.colorScheme,worldScale:e.symbolType.includes("3d-volumetric"),view:e.view}),y=p.scheme,{result:f,outlineResult:b}=o,h=f.classBreakInfos,v=e.normalizationType;if(!y)throw new r("color-class-breaks-renderer:insufficient-info","Unable to find color scheme");const w=te(y,h.length);if(!w||w.length!==h.length)throw new r("color-class-breaks-renderer:insufficient-info","Color scheme does not have enough colors");const g=b&&b.opacity,T=new i({classBreakInfos:h.map(((o,i)=>({minValue:o.minValue,maxValue:o.maxValue,symbol:I(m,{type:e.symbolType,color:w[i],size:q(y,m),outline:C(y,m,g),meshInfo:{colorMixMode:e.colorMixMode,edgesType:e.edgesType}}),label:o.label}))),defaultLabel:t?a.other:null,defaultSymbol:t?I(m,{type:e.symbolType,color:y.noDataColor,size:q(y,m),outline:C(y,m,g),meshInfo:{colorMixMode:e.colorMixMode,edgesType:e.edgesType}}):null,field:e.field,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationType:v,normalizationField:e.normalizationField,normalizationTotal:"percent-of-total"===v?f.normalizationTotal:void 0,legendOptions:e.legendOptions,authoringInfo:new s({type:"class-breaks-color",classificationMethod:u,standardDeviationInterval:e.standardDeviationInterval})});return c||d({classBreakInfos:T.classBreakInfos,classificationMethod:u,normalizationType:v,round:!0}),b&&b.visualVariables&&b.visualVariables.length&&(T.visualVariables=b.visualVariables.map((e=>e.clone()))),{renderer:T,colorScheme:G(y),classBreaksResult:f,defaultValuesUsed:o.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function de(e){const o=await Q(e),{layer:i,view:r,signal:a}=o,[l,n,s]=await Promise.all([se(oe(o)),o.outlineOptimizationEnabled?p({layer:i,view:r,signal:a}):null,o.sizeOptimizationEnabled?y({layer:i,view:r,signal:a}):null]),t=o.normalizationField;return ne(l,n,s,t?"field":void 0,t,o)}async function ue(e){const o=await X(e);return me(o,await b(Y(o),o.outlineOptimizationEnabled))}function ce(o){return Z(o).then((o=>({renderer:new e({field:"RGB",pointsPerInch:o.density,pointSizeAlgorithm:h(o.size)})})))}async function pe(e){const i=await ee(e),r=i.statistics?i.statistics:await f({layer:i.layer,field:i.field,signal:i.signal}),a=await ae(r,i);return{renderer:new o({field:i.field,pointsPerInch:i.density,pointSizeAlgorithm:h(i.size),stops:a.stops}),basemapId:a.basemapId,basemapTheme:a.basemapTheme,statistics:a.statistics,defaultValuesUsed:a.defaultValuesUsed,colorScheme:a.colorScheme}}async function ye(e){const o=await l("esri/smartMapping/t9n/smartMapping"),i=await ie(e),{defaultSymbolEnabled:r,view:a,startTime:s,endTime:t,symbolType:m,colorMixMode:d,edgesType:u,minValue:f,maxValue:b,signal:h}=i,g=i.layer,[T,x,E]=await Promise.all([i.unit?{unit:i.unit,statistics:null}:c({view:a,layer:g,startTime:s,endTime:t,minValue:f,maxValue:b,signal:h}),i.outlineOptimizationEnabled?p({layer:g,view:a,signal:h}):null,i.sizeOptimizationEnabled?y({layer:g,view:a,signal:h}):null]),{unit:V,statistics:z}=T,S=P({layer:g,startTime:s,endTime:t,unit:V}).valueExpression,M=n(o[`ageInfo_${V}`],{unit:V,startTime:v(s,V,g),endTime:v(t,V,g)}),j=await se(oe({layer:g,basemap:i.basemap,valueExpression:S,symbolType:m,statistics:z,legendOptions:{title:M},colorScheme:i.colorScheme,theme:i.theme,view:a,minValue:i.minValue,maxValue:i.maxValue,signal:h})),I={layer:g,valueExpression:S,defaultSymbolEnabled:r,symbolType:m,colorMixMode:d,edgesType:u},q=await ne(j,x,E,null,null,I);return q.renderer.authoringInfo.visualVariables.forEach((e=>w(e,s,t,V))),{...q,unit:V}}export{ye as createAgeRenderer,ue as createClassBreaksRenderer,de as createContinuousRenderer,pe as createPCContinuousRenderer,ce as createPCTrueColorRenderer,se as createVisualVariable};
|
|
5
|
+
import"../../renderers/PointCloudClassBreaksRenderer.js";import"../../renderers/PointCloudRenderer.js";import e from"../../renderers/PointCloudRGBRenderer.js";import o from"../../renderers/PointCloudStretchRenderer.js";import"../../renderers/PointCloudUniqueValueRenderer.js";import i from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import r from"../../core/Error.js";import{isSome as a}from"../../core/maybe.js";import{fetchMessageBundle as l}from"../../intl/messages.js";import{substitute as n}from"../../intl/substitute.js";import s from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoVisualVariable.js";import{createColorStops as m,setLabelsForClassBreaks as d}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/ColorVariable.js";import c from"../heuristics/ageUnit.js";import p from"../heuristics/outline.js";import y from"../heuristics/sizeRange.js";import{getSummaryStatistics as f,getClassBreaks as b,getPointSizeAlgorithm as h,formatDate as v,updateAgeRendererAuthoringInfoVV as w,createError as g,verifyBasicFieldValidity as T,isValidPointSize as x,createColors as E,getDefaultDataRange as V,createDefaultStopValues as z,createStopValues as S,getDataRange as M,createDataValues as I,createSymbol as j,getSymbolSizeFromScheme as q,getSymbolOutlineFromScheme as C,getBasemapInfo as O}from"./support/utils.js";import{getAgeExpressions as k,verifyDates as P,supportedAgeUnits as F}from"../statistics/support/ageUtils.js";import{getFieldsList as U,getNormalizationType as R}from"../support/utils.js";import{createLayerAdapter as B,featureCapableLayerTypes as D,getLayerTypeLabels as L,LayerType as A}from"../support/adapters/support/layerUtils.js";import{c as G,g as W,a as $}from"../../chunks/color.js";const H="date",_="high-to-low",J=2**53-1,K=5;async function N(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("color-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("color-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};if("90-10"===o.theme)throw new r("color-visual-variable:not-supported","Only 'high-to-low', 'above-and-below', 'centered-on', 'extremes', 'above', 'below' themes are supported.");const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-visual-variable:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);if("mesh"!==i.geometryType&&o.worldScale&&(!o.view||"3d"!==o.view.type))throw g("color-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true");const n=await U({field:o.field,normalizationField:o.normalizationField,valueExpression:o.valueExpression}),s=T(i,n,"color-visual-variable:invalid-parameters");if(s)throw s;return o}async function Q(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("color-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("color-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled;const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,o.sizeOptimizationEnabled=("point"===n||"multipoint"===n||"polyline"===n)&&o.sizeOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else{if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const s=await U({field:o.field,normalizationField:o.normalizationField,valueExpression:o.valueExpression}),t=T(i,s,"color-continuous-renderer:invalid-parameters");if(t)throw t;return o}async function X(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new r("color-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new r("color-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled,o.classificationMethod=o.classificationMethod||"equal-interval",o.normalizationType=R(o);const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));if(!(null!=o.minValue&&null!=o.maxValue)&&(null!=o.minValue||null!=o.maxValue))throw new r("color-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else{if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const s=await U({field:o.field,normalizationField:o.normalizationField}),t=T(i,s,"color-class-breaks-renderer:invalid-parameters");if(t)throw t;return o}function Y(e){const o={...e};delete o.basemap,delete o.colorScheme,delete o.legendOptions,delete o.symbolType,delete o.defaultSymbolEnabled,delete o.colorMixMode,delete o.edgesType;const i=o;return i.analyzeData=!(null!=o.minValue&&null!=o.maxValue),i}function Z(e){if(!e||!e.layer)return Promise.reject(g("color-point-cloud-true-color-renderer:missing-parameters","'layer' parameter is required"));const o={...e},i=[A.PointCloudLayer],r=B(o.layer,i);if(o.layer=r,o.density=o.density||25,o.size=o.size||"100%",!x(o.size))return Promise.reject(g("color-point-cloud-true-color-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'"));if(!r)return Promise.reject(g("color-point-cloud-true-color-renderer:invalid-parameters","'layer' must be one of these types: "+L(i).join(", ")));const l=a(o.signal)?{signal:o.signal}:null;return r.load(l).then((()=>o))}function ee(e){if(!(e&&e.layer&&e.field))return Promise.reject(g("color-point-cloud-continuous-renderer:missing-parameters","'layer' and 'field' parameters are required"));const o=e.field.toLowerCase();if("intensity"!==o&&"elevation"!==o)return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","'field' should be either 'intensity' or 'elevation'"));const i={...e},r=[A.PointCloudLayer],l=B(i.layer,r);if(i.layer=l,i.density=i.density||25,i.size=i.size||"100%",!x(i.size))return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'"));if(!l)return Promise.reject(g("color-point-cloud-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+L(r).join(", ")));const n=a(i.signal)?{signal:i.signal}:null;return l.load(n).then((()=>i))}function oe(e){const o={...e},i=o.symbolType.includes("3d-volumetric");delete o.symbolType,delete o.defaultSymbolEnabled,delete o.colorMixMode,delete o.edgesType;const r=o;return r.worldScale=i,r}async function ie(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new r("color-age-renderer:missing-parameters","'layer', 'view', startTime', 'endTime' parameters are required");const o={...e};o.symbolType=o.symbolType||"2d",o.defaultSymbolEnabled=null==o.defaultSymbolEnabled||o.defaultSymbolEnabled;const i=B(o.layer,D);if(o.layer=i,!i)throw new r("color-age-renderer:invalid-parameters","'layer' must be one of these types: "+L(D).join(", "));const l=a(o.signal)?{signal:o.signal}:null;await i.load(l);const n=i.geometryType;if(o.outlineOptimizationEnabled="polygon"===n&&o.outlineOptimizationEnabled,o.sizeOptimizationEnabled=("point"===n||"multipoint"===n||"polyline"===n)&&o.sizeOptimizationEnabled,"mesh"===n)o.symbolType="3d-volumetric",o.colorMixMode=o.colorMixMode||"replace",o.edgesType=o.edgesType||"none";else if("3d-volumetric-uniform"===o.symbolType&&"point"!==n)throw new r("color-continuous-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o.symbolType.includes("3d-volumetric")&&(!o.view||"3d"!==o.view.type))throw new r("color-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'");const s=P(i,o.startTime,o.endTime,"color-age-renderer:invalid-parameters");if(s)throw s;if(o.unit&&!F.includes(o.unit))throw new r("color-age-renderer:invalid-unit",`Supported units are: ${F.join(", ")}`);return o}async function re(e,o){let i=e.colorScheme,r=null,l=null;const n=await O(e.basemap,e.view);if(r=a(n.basemapId)?n.basemapId:null,l=a(n.basemapTheme)?n.basemapTheme:null,i)return{scheme:G(i),basemapId:r,basemapTheme:l};const s=o||e.theme||_,t=W({theme:s,basemap:r,basemapTheme:l,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});if(t)if(r=t.basemapId,l=t.basemapTheme,e.schemeId){const o=s+"/"+r+"/"+e.schemeId;i=$({id:o,geometryType:e.geometryType})}else i=t.primaryScheme;return{scheme:i,basemapId:r,basemapTheme:l}}async function ae(e,o){const i=o.layer,r=await re({basemap:o.basemap,colorScheme:o.colorScheme,geometryType:i.geometryType,schemeId:"elevation"===o.field.toLowerCase()?"point-cloud-elevation-scheme":"point-cloud-intensity-scheme"}),a=r.scheme;if(!a)throw g("color-point-cloud-continuous-renderer:insufficient-info","Unable to find color scheme");const l=E(a.colors,K);if(l.length<K)throw g("color-point-cloud-continuous-renderer:insufficient-info","Color scheme does not have enough colors");const n=V(e,!1,!0),s=n?z(n[0],n[1],5):S(e);return{stops:m({values:s,isDate:!1,dateFormatOptions:null,colors:l,labelIndexes:[0,2,4]}),basemapId:r.basemapId,basemapTheme:r.basemapTheme,statistics:e,defaultValuesUsed:!!n,colorScheme:G(a)}}async function le(e,o,i){const r=e.layer,{field:a,theme:l}=e,n=a&&!("function"==typeof a)?r.getField(a):null,m=n&&n.type===H,d=await re({basemap:e.basemap,theme:e.theme,geometryType:r.geometryType,colorScheme:e.colorScheme,worldScale:e.worldScale,view:e.view}),c=d.scheme;if(!c)throw g("color-visual-variable:insufficient-info","Unable to find color scheme");const p=E(c.colors,K);if(p.length<K)throw g("color-visual-variable:insufficient-info","Color scheme does not have enough colors");const y=c.id.includes("seq-"),f=M(o,i,l,m,"90-10"!==l),b=I(f,o,l,y),h=E(p,K),v=new u({field:a,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationField:e.normalizationField,stops:b.map(((e,o)=>({value:e,color:h[o]}))),legendOptions:e.legendOptions}),w=new t({type:"color",minSliderValue:null!=e.minValue?e.minValue:o.min,maxSliderValue:null!=e.maxValue?e.maxValue:o.max,theme:c.theme}),T=new s({visualVariables:[w]});return{basemapId:d.basemapId,basemapTheme:d.basemapTheme,visualVariable:v,statistics:o,defaultValuesUsed:f.defaultValuesUsed,colorScheme:G(c),authoringInfo:T}}async function ne(e,o,r,a,n,s){const t=await l("esri/smartMapping/t9n/smartMapping"),m=s.layer,d=s.field,u=m.geometryType,c=s.defaultSymbolEnabled,p=G(e.colorScheme),y=o&&o.opacity,f=[e.visualVariable.clone()];o&&o.visualVariables&&o.visualVariables.length&&f.push(...o.visualVariables.map((e=>e.clone()))),r&&r.minSize&&f.push(r.minSize);return{renderer:new i({classBreakInfos:[{minValue:-J,maxValue:J,symbol:j(u,{type:s.symbolType,color:p.noDataColor,size:q(p,u),outline:C(p,u,y),meshInfo:{colorMixMode:s.colorMixMode,edgesType:s.edgesType}})}],defaultLabel:c?t.other:null,defaultSymbol:c?j(u,{type:s.symbolType,color:p.noDataColor,size:q(p,u),outline:C(p,u,y),meshInfo:{colorMixMode:s.colorMixMode,edgesType:s.edgesType}}):null,field:d,normalizationType:a,normalizationField:n,valueExpression:s.valueExpression,valueExpressionTitle:s.valueExpressionTitle,visualVariables:f,authoringInfo:e.authoringInfo&&e.authoringInfo.clone()}),visualVariable:e.visualVariable.clone(),statistics:e.statistics,defaultValuesUsed:e.defaultValuesUsed,colorScheme:G(e.colorScheme),basemapId:e.basemapId,basemapTheme:e.basemapTheme}}async function se(e){const o=await N(e),{view:i,field:r,valueExpression:a,minValue:l,maxValue:n,layer:s,normalizationField:t,signal:m,statistics:d}=o,u=t?"field":void 0,[c,p]=await Promise.all([d||f({layer:s,field:r,valueExpression:a,sqlExpression:o.sqlExpression,sqlWhere:o.sqlWhere,normalizationType:u,normalizationField:t,minValue:l,maxValue:n,view:i,signal:m}),"90-10"===o.theme?b({layer:s,field:r,normalizationField:t,valueExpression:a,classificationMethod:"quantile",minValue:l,maxValue:n,view:i,numClasses:10,signal:m}):null]);return le(o,c,null==p?void 0:p.result)}function te(e,o){const i=e.colorsForClassBreaks;let r;if(i&&i.length>0&&(i.some((e=>(e.numClasses===o&&(r=e.colors),!!r))),!r)){const e=i[i.length-1],a=o-e.numClasses;if(a>0){const o=e.colors[e.numClasses-1];r=e.colors.splice(0);for(let e=1;e<=a;e++)r.push(o)}}return r&&(r=E(r,r.length)),r}async function me(e,o){const a=await l("esri/smartMapping/t9n/smartMapping"),n=e.layer,t=e.defaultSymbolEnabled,m=n.geometryType,u=e.classificationMethod,c="standard-deviation"===u,p=await re({basemap:e.basemap,geometryType:m,theme:c?"above-and-below":null,colorScheme:e.colorScheme,worldScale:e.symbolType.includes("3d-volumetric"),view:e.view}),y=p.scheme,{result:f,outlineResult:b}=o,h=f.classBreakInfos,v=e.normalizationType;if(!y)throw new r("color-class-breaks-renderer:insufficient-info","Unable to find color scheme");const w=te(y,h.length);if(!w||w.length!==h.length)throw new r("color-class-breaks-renderer:insufficient-info","Color scheme does not have enough colors");const g=b&&b.opacity,T=new i({classBreakInfos:h.map(((o,i)=>({minValue:o.minValue,maxValue:o.maxValue,symbol:j(m,{type:e.symbolType,color:w[i],size:q(y,m),outline:C(y,m,g),meshInfo:{colorMixMode:e.colorMixMode,edgesType:e.edgesType}}),label:o.label}))),defaultLabel:t?a.other:null,defaultSymbol:t?j(m,{type:e.symbolType,color:y.noDataColor,size:q(y,m),outline:C(y,m,g),meshInfo:{colorMixMode:e.colorMixMode,edgesType:e.edgesType}}):null,field:e.field,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationType:v,normalizationField:e.normalizationField,normalizationTotal:"percent-of-total"===v?f.normalizationTotal:void 0,legendOptions:e.legendOptions,authoringInfo:new s({type:"class-breaks-color",classificationMethod:u,standardDeviationInterval:e.standardDeviationInterval})});return c||d({classBreakInfos:T.classBreakInfos,classificationMethod:u,normalizationType:v,round:!0}),b&&b.visualVariables&&b.visualVariables.length&&(T.visualVariables=b.visualVariables.map((e=>e.clone()))),{renderer:T,colorScheme:G(y),classBreaksResult:f,defaultValuesUsed:o.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function de(e){const o=await Q(e),{layer:i,view:r,signal:a}=o,[l,n,s]=await Promise.all([se(oe(o)),o.outlineOptimizationEnabled?p({layer:i,view:r,signal:a}):null,o.sizeOptimizationEnabled?y({layer:i,view:r,signal:a}):null]),t=o.normalizationField;return ne(l,n,s,t?"field":void 0,t,o)}async function ue(e){const o=await X(e);return me(o,await b(Y(o),o.outlineOptimizationEnabled))}function ce(o){return Z(o).then((o=>({renderer:new e({field:"RGB",pointsPerInch:o.density,pointSizeAlgorithm:h(o.size)})})))}async function pe(e){const i=await ee(e),r=i.statistics?i.statistics:await f({layer:i.layer,field:i.field,signal:i.signal}),a=await ae(r,i);return{renderer:new o({field:i.field,pointsPerInch:i.density,pointSizeAlgorithm:h(i.size),stops:a.stops}),basemapId:a.basemapId,basemapTheme:a.basemapTheme,statistics:a.statistics,defaultValuesUsed:a.defaultValuesUsed,colorScheme:a.colorScheme}}async function ye(e){const o=await l("esri/smartMapping/t9n/smartMapping"),i=await ie(e),{defaultSymbolEnabled:r,view:a,startTime:s,endTime:t,symbolType:m,colorMixMode:d,edgesType:u,minValue:f,maxValue:b,signal:h}=i,g=i.layer,[T,x,E]=await Promise.all([i.unit?{unit:i.unit,statistics:null}:c({view:a,layer:g,startTime:s,endTime:t,minValue:f,maxValue:b,signal:h}),i.outlineOptimizationEnabled?p({layer:g,view:a,signal:h}):null,i.sizeOptimizationEnabled?y({layer:g,view:a,signal:h}):null]),{unit:V,statistics:z}=T,S=k({layer:g,startTime:s,endTime:t,unit:V}).valueExpression,M=n(o[`ageInfo_${V}`],{unit:V,startTime:v(s,V,g),endTime:v(t,V,g)}),I=await se(oe({layer:g,basemap:i.basemap,valueExpression:S,symbolType:m,statistics:z,legendOptions:{title:M},colorScheme:i.colorScheme,theme:i.theme,view:a,minValue:i.minValue,maxValue:i.maxValue,signal:h})),j={layer:g,valueExpression:S,defaultSymbolEnabled:r,symbolType:m,colorMixMode:d,edgesType:u},q=await ne(I,x,E,null,null,j);return q.renderer.authoringInfo.visualVariables.forEach((e=>w(e,s,t,V))),{...q,unit:V}}export{ye as createAgeRenderer,ue as createClassBreaksRenderer,de as createContinuousRenderer,pe as createPCContinuousRenderer,ce as createPCTrueColorRenderer,se as createVisualVariable};
|
|
@@ -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 t from"../../../Graphic.js";import{pickRandom as a}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{unwrap as s,isSome as i}from"../../../core/maybe.js";import{timeout as o,throwIfAborted as n}from"../../../core/promiseUtils.js";import{whenOnce as l}from"../../../core/reactiveUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{kebabDict as p}from"../../../layers/support/fieldType.js";import{isNumericField as c,isDateField as d}from"../../../layers/support/fieldUtils.js";import h from"../../../rest/support/FeatureSet.js";import{summaryStatistics as y,uniqueValues as f,classBreaks as g,histogram as F}from"../../statistics/support/statsWorker.js";import{WorkerClient as w}from"../../statistics/support/WorkerClient.js";import{getFieldsList as _}from"../utils.js";import S from"./FeatureLayerAdapter.js";import v from"./LayerAdapter.js";import{getMissingFields as x,ensureFeaturesJSON as L,getViewInfoParams as C,getUniqueValuesFromFeatureSet as E,getHistogramFromFeatureSet as z}from"./support/utils.js";import{createUVResult as T}from"../../../statistics/utils.js";let j=class extends v{constructor(e){super(e)}destroy(){var e;this._featureLayerAdapter=null,null==(e=this.workerClient)||e.destroy()}_hasCachedStatistics(e){return this.layer.hasCachedStatistics(e)}_updateQuery(e,t=[],a=[]){if(!a.length)return e;const r=this.layer.objectIdField,s=e.clone(),i=t.filter((e=>{const t=this.layer.getField(e);return!a.includes(t.name)})),o=i.some((e=>this.layer.getField(e).name===r));return s.outFields=o?i:[...i,r],s}async _fetchFeaturesFromMemory(e,t,a){if(!e)throw new r("scene-layer-adapter:insufficient-data","view is required to fetch the features from layerView");const s=await e.whenLayerView(this.layer),i=new AbortController,u=i.signal,m=l((()=>!s.updating),u);await o(m,5e3,i);const p=await x(this,a,s);n(u);const c=this._updateQuery(t,a,p),d=await s.queryFeatures(c,{signal:u});n(u);const h=d.features;return p.length?s.whenGraphicAttributes(h,p):h}async _fetchFeaturesJSONFromMemory(e,t,a){return this._fetchFeaturesFromMemory(e,t,a).then(L)}_fetchFeaturesForStats(e,t){return _({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then((a=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:a,signal:e.signal},t)))}async _processStatsFromMemoryParams(e){const t=e.features;if(null!=t&&t.length){return t.length&&"declaredClass"in t[0]&&"esri.Graphic"===t[0].declaredClass?{graphics:t}:{featuresJSON:t}}const{view:a,field:s,normalizationField:i,valueExpression:o,signal:n}=e,l=await this._fetchFeaturesForStats({field:s,valueExpression:o,normalizationField:i,view:a,signal:n});if(null==l||!l.length)throw new r("scene-layer-adapter:insufficient-data","No features are available to calculate statistics");return{graphics:l}}_generateFeatureSetForCachedHistogram(e,a=e.minimum,r=e.maximum,s){const i=[];for(let t=0;t<s;t++)i[t]=0;const o=e.counts.length,n=e.minimum,l=e.maximum;for(let t=0;t<o;t++){const u=(t+.5)/o,m=((1-u)*n+u*l-a)/(r-a)*s;m>=0&&m<=s&&(i[m===s?s-1:Math.floor(m)]+=e.counts[t])}const u=[];i.forEach(((e,a)=>{const r=new t({attributes:{}});r.attributes.EXPR_1=a+1,r.attributes.countOFExpr=e,u.push(r)}));const m=new h;return m.features=u,m}_getCachedStatistics(e,t){const a=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.minValue||e.maxValue?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression', 'sqlWhere', 'minValue' or 'maxValue' is specified")):a.queryCachedStatistics(t&&t.name,{signal:e.signal}).then((e=>{const t=e.stats,{min:a,max:r,totalValuesCount:s}=t;let{avg:i,stddev:o,sum:n,variance:l,count:u}=t;return 0===a&&0===r||(i=0===i?null:i,n=0===n?null:n,o=0===o?null:o,l=0===l?null:l,u=0===u?null:u),null==u&&(null!=n&&null!=i?u=Math.round(n/i):null!=s&&(u=s)),{avg:i,count:u,max:r,min:a,stddev:o,sum:n,variance:l}}))}async _getNormalizationTotal(e,t,a){const s=(t?await this.workerClient.summaryStatistics({field:e},t):await y({attribute:{field:e},features:a})).sum;if(null==s)throw new r("scene-layer-adapter:invalid","invalid normalizationTotal");return s}async _getSummaryStatisticsFromMemory(e,t){const{view:a,field:r,normalizationField:s,valueExpression:i}=e,{featuresJSON:o,graphics:n}=await this._processStatsFromMemoryParams(e),l={field:r,valueExpression:i,normalizationType:e.normalizationType,normalizationField:s,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue};return e.valueExpression&&a&&o&&(l.fieldType=null!=t&&t.type?p.toJSON(t.type):null,l.viewInfoParams=C(a)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotal(r,o,n)),o?this.workerClient.summaryStatistics(l,o):y({attribute:l,features:n})}_getCachedStatisticsForUniqueValues(e,a){const s=this.layer,i=a&&a.name,o=a&&this.getFieldDomain(e.field);return e.valueExpression||e.sqlExpression||e.sqlWhere?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression' or 'sqlWhere' is specified")):s.queryCachedStatistics(i,{signal:e.signal}).then((r=>{const o=r.stats;if(!o.mostFrequentValues)return Promise.reject();const n=r.labels&&r.labels.labels,l={},u=[],m="countOF"+i;o.mostFrequentValues.forEach((e=>{const r=new t({attributes:{}});r.attributes[i]=a&&a.name!==s.objectIdField&&(c(a)||d(a))?Number(e.value):e.value,r.attributes[m]=e.count,u.push(r)})),n&&n.forEach((e=>{l[e.value]=e.label}));const p=new h;return p.features=u,E(p,this,e.field,e.view,l,e.signal)})).then((t=>T(t,o,e.returnAllCodedValues)))}async _getUniqueValuesFromMemory(e,t){const a=t&&this.getFieldDomain(e.field),{view:r,field:s,valueExpression:i,returnAllCodedValues:o}=e,n={field:s,valueExpression:i,domain:a,returnAllCodedValues:o},{featuresJSON:l,graphics:u}=await this._processStatsFromMemoryParams(e);return e.valueExpression&&r&&l&&(n.viewInfoParams=C(r)),l?this.workerClient.uniqueValues(n,l):f({attribute:n,features:u})}_getCachedStatisticsForHistogram(e,t){const a=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.normalizationType?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression' or 'sqlExpression' or 'sqlWhere' or 'normalizationType' is specified")):a.queryCachedStatistics(t&&t.name,{signal:e.signal}).then((t=>{const a=t.stats,{minValue:r,maxValue:s}=e,i=null!=r?r:a.min,o=null!=s?s:a.max,n=e.numBins||10,l=this._generateFeatureSetForCachedHistogram(a.histogram,i,o,n);return z(l,i,o,n)}))}async _getClassBreaksFromMemory(e){const{view:t,field:a,normalizationField:r,valueExpression:s}=e,{featuresJSON:i,graphics:o}=await this._processStatsFromMemoryParams(e),n={field:a,valueExpression:s,normalizationType:e.normalizationType,normalizationField:r,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&i&&(n.viewInfoParams=C(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(n.normalizationTotal=await this._getNormalizationTotal(a,i,o)),i?this.workerClient.classBreaks(n,i):g({attribute:n,features:o})}async _getHistogramFromMemory(e){const{view:t,field:a}=e,{featuresJSON:r,graphics:s}=await this._processStatsFromMemoryParams(e),i={field:a,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&r&&(i.viewInfoParams=C(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(i.normalizationTotal=await this._getNormalizationTotal(a,r,s)),r?this.workerClient.histogram(i,r):F({attribute:i,features:s})}getField(e=""){return this.layer.getField(e)}getFieldUsageInfo(e){const t=this.getField(e);if(!t)return null;const a=this.layer.getFieldUsageInfo(t.name);return{supportsLabelingInfo:a.supportsLabelingInfo,supportsPopupTemplate:a.supportsPopupTemplate,supportsRenderer:a.supportsRenderer,supportsLayerQuery:a.supportsLayerQuery,supportsStatistics:!0}}getFieldDomain(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.getFieldDomain(e,t):null}summaryStatistics(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.summaryStatistics(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatistics(e,t).catch((()=>(n(e.signal),this._getSummaryStatisticsFromMemory(e,t)))):this._getSummaryStatisticsFromMemory(e,t)}uniqueValues(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.uniqueValues(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatisticsForUniqueValues(e,t).catch((()=>(n(e.signal),this._getUniqueValuesFromMemory(e,t)))):this._getUniqueValuesFromMemory(e,t)}histogram(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.histogram(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatisticsForHistogram(e,t).catch((()=>(n(e.signal),this._getHistogramFromMemory(e)))):this._getHistogramFromMemory(e)}classBreaks(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.classBreaks(e):this._hasCachedStatistics(t&&t.name)?Promise.reject(new r("scene-layer-adapter:not-supported","Cached stats not supported")):this._getClassBreaksFromMemory(e)}queryFeatureCount(e){return this._featureLayerAdapter?this._featureLayerAdapter.queryFeatureCount(e):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support count query"))}generateRenderer(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.generateRenderer(e,t):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support generateRenderer operation"))}heatmapStatistics(e){return this._featureLayerAdapter?this._featureLayerAdapter.heatmapStatistics(e):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support heatmapStatistics operation"))}async predominantCategories(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.predominantCategories(e);throw new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support predominantCategories")}async getSampleFeatures(e,t){const{view:r,sampleSize:s,requiredFields:i,returnGeometry:o,signal:l}=e,u=1,m="json"===t,p=this.layer.createQuery();p.outFields=i,p.returnGeometry=!!o,p.where=null,p.num=s;let c=[];try{if(c=m?await this._fetchFeaturesJSONFromMemory(r,p,i):await this._fetchFeaturesFromMemory(r,p,i),c.length&&s>0&&s<=c.length)return a(c,s,u)}catch(h){n(l)}let d=null;if(this._featureLayerAdapter){const a={...e};delete a.view,d=await this._featureLayerAdapter.getSampleFeatures(a,t)}return d&&d.length?d:a(c,c.length,u)}load(e){const t=this.layer.load(e).then((async t=>{this.workerClient=w.getInstance(),await this.workerClient.open(s(s(e).signal));const a=t.associatedLayer;if(this.geometryType=t.geometryType,i(a)){this._featureLayerAdapter=new S({layer:a});return this._featureLayerAdapter.load(e).then((()=>{this.objectIdField=this._featureLayerAdapter.objectIdField,this.supportsSQLExpression=this._featureLayerAdapter.supportsSQLExpression,this.minScale=this._featureLayerAdapter.minScale,this.maxScale=this._featureLayerAdapter.maxScale,this.fullExtent=this._featureLayerAdapter.fullExtent}))}this.objectIdField=t.objectIdField,this.supportsSQLExpression=!1,this.hasQueryEngine=!1,this.fullExtent=t.fullExtent}));return this.addResolvingPromise(t),Promise.resolve(this)}};e([u({constructOnly:!0})],j.prototype,"layer",void 0),j=e([m("esri.smartMapping.support.adapters.SceneLayerAdapter")],j);const A=j;export{A as default};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../Graphic.js";import{pickRandom as a}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{unwrap as s,isSome as i}from"../../../core/maybe.js";import{timeout as o,throwIfAborted as n}from"../../../core/promiseUtils.js";import{whenOnce as l}from"../../../core/reactiveUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{kebabDict as p}from"../../../layers/support/fieldType.js";import{isNumericField as c,isDateField as d}from"../../../layers/support/fieldUtils.js";import h from"../../../rest/support/FeatureSet.js";import{summaryStatistics as y,uniqueValues as f,classBreaks as g,histogram as F}from"../../statistics/support/statsWorker.js";import{WorkerClient as w}from"../../statistics/support/WorkerClient.js";import{getFieldsList as _}from"../utils.js";import S from"./FeatureLayerAdapter.js";import v from"./LayerAdapter.js";import{getMissingFields as x,ensureFeaturesJSON as L,getViewInfoParams as C,getUniqueValuesFromFeatureSet as E,getHistogramFromFeatureSet as z}from"./support/utils.js";import{createUVResult as T}from"../../../statistics/utils.js";let A=class extends v{constructor(e){super(e)}destroy(){var e;this._featureLayerAdapter=null,null==(e=this.workerClient)||e.destroy()}_hasCachedStatistics(e){return this.layer.hasCachedStatistics(e)}_updateQuery(e,t=[],a=[]){if(!a.length)return e;const r=this.layer.objectIdField,s=e.clone(),i=t.filter((e=>{const t=this.layer.getField(e);return!a.includes(t.name)})),o=i.some((e=>this.layer.getField(e).name===r));return s.outFields=o?i:[...i,r],s}async _fetchFeaturesFromMemory(e,t,a){if(!e)throw new r("scene-layer-adapter:insufficient-data","view is required to fetch the features from layerView");const s=await e.whenLayerView(this.layer),i=new AbortController,u=i.signal,m=l((()=>!s.updating),u);await o(m,5e3,i);const p=await x(this,a,s);n(u);const c=this._updateQuery(t,a,p),d=await s.queryFeatures(c,{signal:u});n(u);const h=d.features;return p.length?s.whenGraphicAttributes(h,p):h}async _fetchFeaturesJSONFromMemory(e,t,a){return this._fetchFeaturesFromMemory(e,t,a).then(L)}_fetchFeaturesForStats(e,t){return _({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then((a=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:a,signal:e.signal},t)))}async _processStatsFromMemoryParams(e){const t=e.features;if(null!=t&&t.length){return t.length&&"declaredClass"in t[0]&&"esri.Graphic"===t[0].declaredClass?{graphics:t}:{featuresJSON:t}}const{view:a,field:s,normalizationField:i,valueExpression:o,signal:n}=e,l=await this._fetchFeaturesForStats({field:s,valueExpression:o,normalizationField:i,view:a,signal:n});if(null==l||!l.length)throw new r("scene-layer-adapter:insufficient-data","No features are available to calculate statistics");return{graphics:l}}_generateFeatureSetForCachedHistogram(e,a=e.minimum,r=e.maximum,s){const i=[];for(let t=0;t<s;t++)i[t]=0;const o=e.counts.length,n=e.minimum,l=e.maximum;for(let t=0;t<o;t++){const u=(t+.5)/o,m=((1-u)*n+u*l-a)/(r-a)*s;m>=0&&m<=s&&(i[m===s?s-1:Math.floor(m)]+=e.counts[t])}const u=[];i.forEach(((e,a)=>{const r=new t({attributes:{}});r.attributes.EXPR_1=a+1,r.attributes.countOFExpr=e,u.push(r)}));const m=new h;return m.features=u,m}_getCachedStatistics(e,t){const a=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.minValue||e.maxValue?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression', 'sqlWhere', 'minValue' or 'maxValue' is specified")):a.queryCachedStatistics(t&&t.name,{signal:e.signal}).then((e=>{const t=e.stats,{min:a,max:r,totalValuesCount:s}=t;let{avg:i,stddev:o,sum:n,variance:l,count:u}=t;return 0===a&&0===r||(i=0===i?null:i,n=0===n?null:n,o=0===o?null:o,l=0===l?null:l,u=0===u?null:u),null==u&&(null!=n&&null!=i?u=Math.round(n/i):null!=s&&(u=s)),{avg:i,count:u,max:r,min:a,stddev:o,sum:n,variance:l}}))}async _getNormalizationTotal(e,t,a){const s=(t?await this.workerClient.summaryStatistics({field:e},t):await y({attribute:{field:e},features:a})).sum;if(null==s)throw new r("scene-layer-adapter:invalid","invalid normalizationTotal");return s}async _getSummaryStatisticsFromMemory(e,t){const{view:a,field:r,normalizationField:s,valueExpression:i}=e,{featuresJSON:o,graphics:n}=await this._processStatsFromMemoryParams(e),l={field:r,valueExpression:i,normalizationType:e.normalizationType,normalizationField:s,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue};return e.valueExpression&&a&&o&&(l.fieldType=null!=t&&t.type?p.toJSON(t.type):null,l.viewInfoParams=C(a)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(l.normalizationTotal=await this._getNormalizationTotal(r,o,n)),o?this.workerClient.summaryStatistics(l,o):y({attribute:l,features:n})}_getCachedStatisticsForUniqueValues(e,a){const s=this.layer,i=a&&a.name,o=a&&this.getFieldDomain(e.field);return e.valueExpression||e.sqlExpression||e.sqlWhere?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression' or 'sqlWhere' is specified")):s.queryCachedStatistics(i,{signal:e.signal}).then((r=>{const o=r.stats;if(!o.mostFrequentValues)throw new Error;const n=r.labels&&r.labels.labels,l={},u=[],m="countOF"+i;o.mostFrequentValues.forEach((e=>{const r=new t({attributes:{}});r.attributes[i]=a&&a.name!==s.objectIdField&&(c(a)||d(a))?Number(e.value):e.value,r.attributes[m]=e.count,u.push(r)})),n&&n.forEach((e=>{l[e.value]=e.label}));const p=new h;return p.features=u,E(p,this,e.field,e.view,l,e.signal)})).then((t=>T(t,o,e.returnAllCodedValues)))}async _getUniqueValuesFromMemory(e,t){const a=t&&this.getFieldDomain(e.field),{view:r,field:s,valueExpression:i,returnAllCodedValues:o}=e,n={field:s,valueExpression:i,domain:a,returnAllCodedValues:o},{featuresJSON:l,graphics:u}=await this._processStatsFromMemoryParams(e);return e.valueExpression&&r&&l&&(n.viewInfoParams=C(r)),l?this.workerClient.uniqueValues(n,l):f({attribute:n,features:u})}_getCachedStatisticsForHistogram(e,t){const a=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.normalizationType?Promise.reject(new r("scene-layer-adapter:not-supported","This Layer does not support calculating statistics when 'valueExpression' or 'sqlExpression' or 'sqlWhere' or 'normalizationType' is specified")):a.queryCachedStatistics(t&&t.name,{signal:e.signal}).then((t=>{const a=t.stats,{minValue:r,maxValue:s}=e,i=null!=r?r:a.min,o=null!=s?s:a.max,n=e.numBins||10,l=this._generateFeatureSetForCachedHistogram(a.histogram,i,o,n);return z(l,i,o,n)}))}async _getClassBreaksFromMemory(e){const{view:t,field:a,normalizationField:r,valueExpression:s}=e,{featuresJSON:i,graphics:o}=await this._processStatsFromMemoryParams(e),n={field:a,valueExpression:s,normalizationType:e.normalizationType,normalizationField:r,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&i&&(n.viewInfoParams=C(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(n.normalizationTotal=await this._getNormalizationTotal(a,i,o)),i?this.workerClient.classBreaks(n,i):g({attribute:n,features:o})}async _getHistogramFromMemory(e){const{view:t,field:a}=e,{featuresJSON:r,graphics:s}=await this._processStatsFromMemoryParams(e),i={field:a,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&r&&(i.viewInfoParams=C(t)),"percent-of-total"===e.normalizationType&&null==e.normalizationTotal&&(i.normalizationTotal=await this._getNormalizationTotal(a,r,s)),r?this.workerClient.histogram(i,r):F({attribute:i,features:s})}getField(e=""){return this.layer.getField(e)}getFieldUsageInfo(e){const t=this.getField(e);if(!t)return null;const a=this.layer.getFieldUsageInfo(t.name);return{supportsLabelingInfo:a.supportsLabelingInfo,supportsPopupTemplate:a.supportsPopupTemplate,supportsRenderer:a.supportsRenderer,supportsLayerQuery:a.supportsLayerQuery,supportsStatistics:!0}}getFieldDomain(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.getFieldDomain(e,t):null}summaryStatistics(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.summaryStatistics(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatistics(e,t).catch((()=>(n(e.signal),this._getSummaryStatisticsFromMemory(e,t)))):this._getSummaryStatisticsFromMemory(e,t)}uniqueValues(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.uniqueValues(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatisticsForUniqueValues(e,t).catch((()=>(n(e.signal),this._getUniqueValuesFromMemory(e,t)))):this._getUniqueValuesFromMemory(e,t)}histogram(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.histogram(e):this._hasCachedStatistics(t&&t.name)?this._getCachedStatisticsForHistogram(e,t).catch((()=>(n(e.signal),this._getHistogramFromMemory(e)))):this._getHistogramFromMemory(e)}classBreaks(e){const t=this.getField(e.field);return this._featureLayerAdapter?this._featureLayerAdapter.classBreaks(e):this._hasCachedStatistics(t&&t.name)?Promise.reject(new r("scene-layer-adapter:not-supported","Cached stats not supported")):this._getClassBreaksFromMemory(e)}queryFeatureCount(e){return this._featureLayerAdapter?this._featureLayerAdapter.queryFeatureCount(e):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support count query"))}generateRenderer(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.generateRenderer(e,t):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support generateRenderer operation"))}heatmapStatistics(e){return this._featureLayerAdapter?this._featureLayerAdapter.heatmapStatistics(e):Promise.reject(new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support heatmapStatistics operation"))}async predominantCategories(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.predominantCategories(e);throw new r("scene-layer-adapter:not-supported","SceneLayer without associated FeatureLayer does not support predominantCategories")}async getSampleFeatures(e,t){const{view:r,sampleSize:s,requiredFields:i,returnGeometry:o,signal:l}=e,u=1,m="json"===t,p=this.layer.createQuery();p.outFields=i,p.returnGeometry=!!o,p.where=null,p.num=s;let c=[];try{if(c=m?await this._fetchFeaturesJSONFromMemory(r,p,i):await this._fetchFeaturesFromMemory(r,p,i),c.length&&s>0&&s<=c.length)return a(c,s,u)}catch(h){n(l)}let d=null;if(this._featureLayerAdapter){const a={...e};delete a.view,d=await this._featureLayerAdapter.getSampleFeatures(a,t)}return d&&d.length?d:a(c,c.length,u)}load(e){const t=this.layer.load(e).then((async t=>{this.workerClient=w.getInstance(),await this.workerClient.open(s(s(e).signal));const a=t.associatedLayer;if(this.geometryType=t.geometryType,i(a)){this._featureLayerAdapter=new S({layer:a});return this._featureLayerAdapter.load(e).then((()=>{this.objectIdField=this._featureLayerAdapter.objectIdField,this.supportsSQLExpression=this._featureLayerAdapter.supportsSQLExpression,this.minScale=this._featureLayerAdapter.minScale,this.maxScale=this._featureLayerAdapter.maxScale,this.fullExtent=this._featureLayerAdapter.fullExtent}))}this.objectIdField=t.objectIdField,this.supportsSQLExpression=!1,this.hasQueryEngine=!1,this.fullExtent=t.fullExtent}));return this.addResolvingPromise(t),Promise.resolve(this)}};e([u({constructOnly:!0})],A.prototype,"layer",void 0),A=e([m("esri.smartMapping.support.adapters.SceneLayerAdapter")],A);const j=A;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{isNone as e,isSome as t,unwrapOr as n}from"../core/maybe.js";import{getMetersPerUnit as o}from"../symbols/support/unitConversionUtils.js";function r(t,n){return e(n)||!n.mode?t?"absolute-height":"on-the-ground":n.mode}function i(e,n){return r(!!t(e)&&e.hasZ,n)}function u(e){const t=
|
|
5
|
+
import{isNone as e,isSome as t,unwrapOr as n}from"../core/maybe.js";import{getMetersPerUnit as o}from"../symbols/support/unitConversionUtils.js";function r(t,n){return e(n)||!n.mode?t?"absolute-height":"on-the-ground":n.mode}function i(e,n){return r(!!t(e)&&e.hasZ,n)}function u(e){const t=f(e);return i(e.geometry,t)}function s(e){const r=f(e),u=i(e.geometry,r);return{mode:u,offset:t(r)&&"on-the-ground"!==u?n(r.offset,0)*o(n(r.unit,"meters")):0}}function a(e){if("on-the-ground"===u(e))return!1;const n=f(e),o=t(n)&&n.featureExpressionInfo?n.featureExpressionInfo.expression:null;return!(!o||"0"===o)}function f(e){return e.layer&&"elevationInfo"in e.layer?e.layer.elevationInfo:null}function l(o,r,i){if(e(i)||!i.mode)return;const u=o.hasZ?o.z:0,s=t(i.offset)?i.offset:0;switch(i.mode){case"absolute-height":return u-s;case"on-the-ground":return 0;case"relative-to-ground":return u-(n(r.elevationProvider.getElevation(o.x,o.y,o.z,o.spatialReference,"ground"),0)+s);case"relative-to-scene":return u-(n(r.elevationProvider.getElevation(o.x,o.y,o.z,o.spatialReference,"scene"),0)+s)}}function c(e,t,n,o=null){return d(e,t.x,t.y,t.hasZ?t.z:0,t.spatialReference,n,o)}function v(e,t,n,o,r=null){return d(e,t[0],t[1],t.length>2?t[2]:0,n,o,r)}function d(n,o,r,i,u,s,a=null){if(e(s))return;const f=t(a)?a.mode:"absolute-height";if("on-the-ground"===f)return 0;return h(g(o,r,i,u,n,s),o,r,i,u,n,a,f)}function g(e,o,r,i,u,s){const a=t(s.offset)?s.offset:0;switch(s.mode){case"absolute-height":return r+a;case"on-the-ground":return n(u.elevationProvider.getElevation(e,o,0,i,"ground"),0);case"relative-to-ground":return r+n(u.elevationProvider.getElevation(e,o,r,i,"ground"),0)+a;case"relative-to-scene":return r+n(u.elevationProvider.getElevation(e,o,r,i,"scene"),0)+a}}function h(e,o,r,i,u,s,a,f){const l=t(a)&&t(a.offset)?a.offset:0;switch(f){case"absolute-height":return e-l;case"relative-to-ground":return e-(n(s.elevationProvider.getElevation(o,r,i,u,"ground"),0)+l);case"relative-to-scene":return e-(n(s.elevationProvider.getElevation(o,r,i,u,"scene"),0)+l)}}function m(n,o){return e(n)&&e(o)||t(n)&&t(o)&&n.mode===o.mode&&n.offset===o.offset}export{m as elevationInfoLikeEquals,c as getConvertedElevation,v as getConvertedElevationFromVector,r as getEffectiveElevationMode,i as getGeometryEffectiveElevationMode,s as getGraphicEffectiveElevationInfo,u as getGraphicEffectiveElevationMode,l as getZForElevationMode,a as hasGraphicFeatureExpressionInfo,g as zValueInAbsoluteHeightMode};
|
package/support/revision.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
const
|
|
5
|
+
const c="20220401",e="f9643e3e61565caa4964ad21cc75ef6864d1d583";export{c as buildDate,e as commitHash};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{getAssetUrl as e}from"../../assets.js";import{toHSV as t,toRGB as s}from"../../core/colorUtils.js";import"../../core/has.js";import r from"../../core/Error.js";import o from"../../core/Logger.js";import{isNone as n,isSome as a}from"../../core/maybe.js";import{eachAlways as l}from"../../core/promiseUtils.js";import{pt2px as i}from"../../core/screenUtils.js";import{defaultThematicColor as c,getPatternUrlWithColor as p,dekebabifyLineStyle as u}from"./gfxUtils.js";import{defaultPrimitive as h}from"./IconSymbol3DLayerResource.js";import{defaultPrimitive as m}from"./ObjectSymbol3DLayerResource.js";import{SymbolSizeDefaults as f,adjustColorComponentBrightness as y,getPathSymbolShapes as d,shapes as b,getExtrudeSymbolShapes as v,getTetrahedronShapes as g,getDiamondShapes as k,getCylinderShapes as w,getCubeShapes as x,getInvertedConeShapes as M,getConeShapes as j,getWaterSymbolShapes as L}from"./previewUtils.js";import{renderSymbol as z,tintImageWithColor as S}from"./renderUtils.js";import{isVolumetricSymbol as P,getIconHref as U}from"./utils.js";import{resolveWebStyleSymbol as D}from"./webStyleSymbolUtils.js";const O=f.size,C=f.maxSize,I=f.maxOutlineSize,R=f.lineWidth,E=f.tallSymbolWidth,Z=o.getLogger("esri.symbols.support.previewSymbol3D");function q(e){const t=e.outline,s=a(e.material)?e.material.color:null,r=a(s)?s.toHex():null;if(n(t)||"pattern"in t&&a(t.pattern)&&"style"===t.pattern.type&&"none"===t.pattern.style)return"fill"===e.type&&"#ffffff"===r?{color:"#bdc3c7",width:.75}:null;const o=i(t.size)||0;return{color:"rgba("+(a(t.color)?t.color.toRgba():"255,255,255,1")+")",width:Math.min(o,I),style:"pattern"in t&&a(t.pattern)&&"style"===t.pattern.type?u(t.pattern.style):null,join:"butt",cap:"patternCap"in t?t.patternCap:"butt"}}function A(t,s){const r=s&&s.resource,o=r&&r.href;if(t.thumbnail&&t.thumbnail.url)return Promise.resolve(t.thumbnail.url);if(o&&"object"!==s.type)return Promise.resolve(U(t,s));const n=e("esri/images/Legend/legend3dsymboldefault.png");return t.styleOrigin&&(t.styleOrigin.styleName||t.styleOrigin.styleUrl)?D(t.styleOrigin,{portal:t.styleOrigin.portal},"webRef").catch((e=>e)).then((e=>{var t;return(null==e||null==(t=e.thumbnail)?void 0:t.url)||n})):Promise.resolve(n)}function H(e,r=1){const o=e.a,n=t(e),a=n.h,l=n.s/r,i=100-(100-n.v)/r,{r:c,g:p,b:u}=s({h:a,s:l,v:i});return[c,p,u,o]}function N(e){return"water"===e.type?n(e.color)?null:e.color:n(e.material)||n(e.material.color)?null:e.material.color}function T(e,t=0){const s=N(e);if(!s){if("fill"===e.type)return null;const s=c.r,r=y(s,t);return[r,r,r,100]}const r=s.toRgba();for(let o=0;o<3;o++)r[o]=y(r[o],t);return r}async function W(t,s){const r=t.style;if("none"===r)return null;return{type:"pattern",x:0,y:0,src:await p(e(`esri/symbols/patterns/${r}.png`),s.toCss(!0)),width:5,height:5}}function $(e){return e.outline?q(e):{color:"rgba(0, 0, 0, 1)",width:1.5}}function B(e,t){const s=N(e);if(!s)return null;let r="rgba(";return r+=y(s.r,t)+",",r+=y(s.g,t)+",",r+=y(s.b,t)+",",r+s.a+");"}function F(e,t){const s=B(e,t);if(!s)return{};if("pattern"in e&&a(e.pattern)&&"style"===e.pattern.type&&"none"===e.pattern.style)return null;return{color:s,width:Math.min(e.size?i(e.size):.75,I),style:"pattern"in e&&a(e.pattern)&&"style"===e.pattern.type?u(e.pattern.style):null,cap:"cap"in e?e.cap:null,join:"join"in e?"miter"===e.join?i(2):e.join:null}}function G(e,t,s){const r=.75*s;return{type:"linear",x1:r?.25*r:0,y1:r?.5*r:0,x2:r||4,y2:r?.5*r:4,colors:[{color:e,offset:0},{color:t,offset:1}]}}function J(e){const t=e.depth,s=e.height,r=e.width;return r&&t&&s&&r===t&&r<s}function K(e,t,s){const r=[];if(!e)return r;switch(e.type){case"icon":{const s=0,o=0,n=t,a=t;switch(e.resource&&e.resource.primitive||h){case"circle":r.push({shape:{type:"circle",cx:0,cy:0,r:.5*t},fill:T(e,0),stroke:q(e)});break;case"square":r.push({shape:{type:"path",path:[{command:"M",values:[s,a]},{command:"L",values:[s,o]},{command:"L",values:[n,o]},{command:"L",values:[n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)});break;case"triangle":r.push({shape:{type:"path",path:[{command:"M",values:[s,a]},{command:"L",values:[.5*n,o]},{command:"L",values:[n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)});break;case"cross":r.push({shape:{type:"path",path:[{command:"M",values:[.5*n,o]},{command:"L",values:[.5*n,a]},{command:"M",values:[s,.5*a]},{command:"L",values:[n,.5*a]}]},stroke:$(e)});break;case"x":r.push({shape:{type:"path",path:[{command:"M",values:[s,o]},{command:"L",values:[n,a]},{command:"M",values:[n,o]},{command:"L",values:[s,a]}]},stroke:$(e)});break;case"kite":r.push({shape:{type:"path",path:[{command:"M",values:[s,.5*a]},{command:"L",values:[.5*n,o]},{command:"L",values:[n,.5*a]},{command:"L",values:[.5*n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)})}break}case"object":switch(e.resource&&e.resource.primitive||m){case"cone":{const o=G(T(e,0),T(e,-.6),s?E:t),n=j(t,s);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:o});break}case"inverted-cone":{const s=T(e,0),o=G(s,T(e,-.6),t),n=M(t);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:s});break}case"cube":{const o=x(t,s);r.push({shape:o[0],fill:T(e,0)}),r.push({shape:o[1],fill:T(e,-.3)}),r.push({shape:o[2],fill:T(e,-.5)});break}case"cylinder":{const o=G(T(e,0),T(e,-.6),s?E:t),n=w(t,s);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:o}),r.push({shape:n[2],fill:T(e,0)});break}case"diamond":{const s=k(t);r.push({shape:s[0],fill:T(e,-.3)}),r.push({shape:s[1],fill:T(e,0)}),r.push({shape:s[2],fill:T(e,-.3)}),r.push({shape:s[3],fill:T(e,-.7)});break}case"sphere":{const s=G(T(e,0),T(e,-.6));s.x1=0,s.y1=0,s.x2=.25*t,s.y2=.25*t,r.push({shape:{type:"circle",cx:0,cy:0,r:.5*t},fill:s});break}case"tetrahedron":{const s=g(t);r.push({shape:s[0],fill:T(e,-.3)}),r.push({shape:s[1],fill:T(e,0)}),r.push({shape:s[2],fill:T(e,-.6)});break}}break}return r}function Q(e){const t="number"==typeof(null==e?void 0:e.size)?null==e?void 0:e.size:null;return t?i(t):null}function V(e){return"icon"===e.type?"multiply":"tint"}function X(e,t){const s=Q(t),r=t&&t.maxSize?i(t.maxSize):null,o=t&&t.disableUpsampling,n=e.symbolLayers,a=[];let c=0,p=0;const u=n.getItemAt(n.length-1);let h;return u&&"icon"===u.type&&(h=u.size&&i(u.size)),n.forEach((n=>{if("icon"!==n.type&&"object"!==n.type)return;const l="icon"===n.type?n.size&&i(n.size):0,u=s||l?Math.ceil(Math.min(s||l,r||C)):O;if(n&&n.resource&&n.resource.href){const t=A(e,n).then((function(e){const t=n.get("material.color"),s=V(n);return S(e,u,t,s,o)})).then((function(e){const t=e.width,s=e.height;return c=Math.max(c,t),p=Math.max(p,s),[{shape:{type:"image",x:0,y:0,width:t,height:s,src:e.url},fill:null,stroke:null}]}));a.push(t)}else{var m;let e=u;"icon"===n.type&&h&&s&&(e=u*(l/h));const r="tall"===(null==t?void 0:t.symbolConfig)||(null==t||null==(m=t.symbolConfig)?void 0:m.isTall)||"object"===n.type&&J(n);c=Math.max(c,r?E:e),p=Math.max(p,e),a.push(Promise.resolve(K(n,e,r)))}})),l(a).then((function(e){const s=[];return e.forEach((function(e){e.value?s.push(e.value):e.error&&Z.warn("error while building swatchInfo!",e.error)})),z(s,[c,p],{node:t&&t.node,scale:!1,opacity:t&&t.opacity})}))}function Y(e,t){const s=e.symbolLayers,r=[],o=P(e),a=Q(t),l=(t&&t.maxSize?i(t.maxSize):null)||I;let c,p=0,u=0;return s.forEach(((e,t)=>{if(!e)return;if("line"!==e.type&&"path"!==e.type)return;const s=[];switch(e.type){case"line":{const r=F(e,0);if(n(r))break;const o=r&&r.width||0;0===t&&(c=o);const i=Math.min(a||o,l),h=0===t?i:a?i*(o/c):i,m=h>R/2?2*h:R;u=Math.max(u,h),p=Math.max(p,m),r.width=h,s.push({shape:{type:"path",path:[{command:"M",values:[0,.5*u]},{command:"L",values:[p,.5*u]}]},stroke:r});break}case"path":{const t=Math.min(a||O,l),r=T(e,0),o=T(e,-.2),n=B(e,-.4),i=n?{color:n,width:1}:{};if("quad"===e.profile){const t=e.width,n=e.height,a=d(t&&n?t/n:1,0===n,0===t),l={...i,join:"bevel"};s.push({shape:a[0],fill:o,stroke:l}),s.push({shape:a[1],fill:o,stroke:l}),s.push({shape:a[2],fill:r,stroke:l})}else s.push({shape:b.pathSymbol3DLayer[0],fill:o,stroke:i}),s.push({shape:b.pathSymbol3DLayer[1],fill:r,stroke:i});u=Math.max(u,t),p=u}}r.push(s)})),Promise.resolve(z(r,[p,u],{node:t&&t.node,scale:o,opacity:t&&t.opacity}))}async function _(e,t){const s="mesh-3d"===e.type,r=e.symbolLayers,o=Q(t),l=t&&t.maxSize?i(t.maxSize):null,c=o||O,p=[];let u=0,h=0,m=!1;for(let i=0;i<r.length;i++){const e=r.getItemAt(i),t=[];if(s&&"fill"!==e.type)continue;const o=b.fill[0];switch(e.type){case"fill":{const r=q(e),n=Math.min(c,l||C);u=Math.max(u,n),h=Math.max(h,n),m=!0;let i=T(e,0);const p="pattern"in e&&e.pattern,f=N(e);!s&&a(p)&&"style"===p.type&&"solid"!==p.style&&f&&(i=await W(p,f)),t.push({shape:o,fill:i,stroke:r});break}case"line":{const s=F(e,0);if(n(s))break;const r={stroke:s,shape:o};u=Math.max(u,O),h=Math.max(h,O),t.push(r);break}case"extrude":{const s={join:"round",width:1,...F(e,-.4)},r=T(e,0),o=T(e,-.2),n=Math.min(c,l||C),a=v(n);s.width=1,t.push({shape:a[0],fill:o,stroke:s}),t.push({shape:a[1],fill:o,stroke:s}),t.push({shape:a[2],fill:r,stroke:s});const i=O,p=.7*O+.5*n;u=Math.max(u,i),h=Math.max(h,p);break}case"water":{const s=N(e),r=H(s),o=H(s,2),n=H(s,3),a=L();m=!0,t.push({shape:a[0],fill:r}),t.push({shape:a[1],fill:o}),t.push({shape:a[2],fill:n});const i=Math.min(c,l||C);u=Math.max(u,i),h=Math.max(h,i);break}}p.push(t)}return
|
|
5
|
+
import{getAssetUrl as e}from"../../assets.js";import{toHSV as t,toRGB as s}from"../../core/colorUtils.js";import"../../core/has.js";import r from"../../core/Error.js";import o from"../../core/Logger.js";import{isNone as n,isSome as a}from"../../core/maybe.js";import{eachAlways as l}from"../../core/promiseUtils.js";import{pt2px as i}from"../../core/screenUtils.js";import{defaultThematicColor as c,getPatternUrlWithColor as p,dekebabifyLineStyle as u}from"./gfxUtils.js";import{defaultPrimitive as h}from"./IconSymbol3DLayerResource.js";import{defaultPrimitive as m}from"./ObjectSymbol3DLayerResource.js";import{SymbolSizeDefaults as f,adjustColorComponentBrightness as y,getPathSymbolShapes as d,shapes as b,getExtrudeSymbolShapes as v,getTetrahedronShapes as g,getDiamondShapes as k,getCylinderShapes as w,getCubeShapes as x,getInvertedConeShapes as M,getConeShapes as j,getWaterSymbolShapes as L}from"./previewUtils.js";import{renderSymbol as z,tintImageWithColor as S}from"./renderUtils.js";import{isVolumetricSymbol as P,getIconHref as U}from"./utils.js";import{resolveWebStyleSymbol as D}from"./webStyleSymbolUtils.js";const O=f.size,C=f.maxSize,I=f.maxOutlineSize,R=f.lineWidth,E=f.tallSymbolWidth,Z=o.getLogger("esri.symbols.support.previewSymbol3D");function q(e){const t=e.outline,s=a(e.material)?e.material.color:null,r=a(s)?s.toHex():null;if(n(t)||"pattern"in t&&a(t.pattern)&&"style"===t.pattern.type&&"none"===t.pattern.style)return"fill"===e.type&&"#ffffff"===r?{color:"#bdc3c7",width:.75}:null;const o=i(t.size)||0;return{color:"rgba("+(a(t.color)?t.color.toRgba():"255,255,255,1")+")",width:Math.min(o,I),style:"pattern"in t&&a(t.pattern)&&"style"===t.pattern.type?u(t.pattern.style):null,join:"butt",cap:"patternCap"in t?t.patternCap:"butt"}}function A(t,s){const r=s&&s.resource,o=r&&r.href;if(t.thumbnail&&t.thumbnail.url)return Promise.resolve(t.thumbnail.url);if(o&&"object"!==s.type)return Promise.resolve(U(t,s));const n=e("esri/images/Legend/legend3dsymboldefault.png");return t.styleOrigin&&(t.styleOrigin.styleName||t.styleOrigin.styleUrl)?D(t.styleOrigin,{portal:t.styleOrigin.portal},"webRef").catch((e=>e)).then((e=>{var t;return(null==e||null==(t=e.thumbnail)?void 0:t.url)||n})):Promise.resolve(n)}function H(e,r=1){const o=e.a,n=t(e),a=n.h,l=n.s/r,i=100-(100-n.v)/r,{r:c,g:p,b:u}=s({h:a,s:l,v:i});return[c,p,u,o]}function N(e){return"water"===e.type?n(e.color)?null:e.color:n(e.material)||n(e.material.color)?null:e.material.color}function T(e,t=0){const s=N(e);if(!s){if("fill"===e.type)return null;const s=c.r,r=y(s,t);return[r,r,r,100]}const r=s.toRgba();for(let o=0;o<3;o++)r[o]=y(r[o],t);return r}async function W(t,s){const r=t.style;if("none"===r)return null;return{type:"pattern",x:0,y:0,src:await p(e(`esri/symbols/patterns/${r}.png`),s.toCss(!0)),width:5,height:5}}function $(e){return e.outline?q(e):{color:"rgba(0, 0, 0, 1)",width:1.5}}function B(e,t){const s=N(e);if(!s)return null;let r="rgba(";return r+=y(s.r,t)+",",r+=y(s.g,t)+",",r+=y(s.b,t)+",",r+s.a+");"}function F(e,t){const s=B(e,t);if(!s)return{};if("pattern"in e&&a(e.pattern)&&"style"===e.pattern.type&&"none"===e.pattern.style)return null;return{color:s,width:Math.min(e.size?i(e.size):.75,I),style:"pattern"in e&&a(e.pattern)&&"style"===e.pattern.type?u(e.pattern.style):null,cap:"cap"in e?e.cap:null,join:"join"in e?"miter"===e.join?i(2):e.join:null}}function G(e,t,s){const r=.75*s;return{type:"linear",x1:r?.25*r:0,y1:r?.5*r:0,x2:r||4,y2:r?.5*r:4,colors:[{color:e,offset:0},{color:t,offset:1}]}}function J(e){const t=e.depth,s=e.height,r=e.width;return r&&t&&s&&r===t&&r<s}function K(e,t,s){const r=[];if(!e)return r;switch(e.type){case"icon":{const s=0,o=0,n=t,a=t;switch(e.resource&&e.resource.primitive||h){case"circle":r.push({shape:{type:"circle",cx:0,cy:0,r:.5*t},fill:T(e,0),stroke:q(e)});break;case"square":r.push({shape:{type:"path",path:[{command:"M",values:[s,a]},{command:"L",values:[s,o]},{command:"L",values:[n,o]},{command:"L",values:[n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)});break;case"triangle":r.push({shape:{type:"path",path:[{command:"M",values:[s,a]},{command:"L",values:[.5*n,o]},{command:"L",values:[n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)});break;case"cross":r.push({shape:{type:"path",path:[{command:"M",values:[.5*n,o]},{command:"L",values:[.5*n,a]},{command:"M",values:[s,.5*a]},{command:"L",values:[n,.5*a]}]},stroke:$(e)});break;case"x":r.push({shape:{type:"path",path:[{command:"M",values:[s,o]},{command:"L",values:[n,a]},{command:"M",values:[n,o]},{command:"L",values:[s,a]}]},stroke:$(e)});break;case"kite":r.push({shape:{type:"path",path:[{command:"M",values:[s,.5*a]},{command:"L",values:[.5*n,o]},{command:"L",values:[n,.5*a]},{command:"L",values:[.5*n,a]},{command:"Z",values:[]}]},fill:T(e,0),stroke:q(e)})}break}case"object":switch(e.resource&&e.resource.primitive||m){case"cone":{const o=G(T(e,0),T(e,-.6),s?E:t),n=j(t,s);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:o});break}case"inverted-cone":{const s=T(e,0),o=G(s,T(e,-.6),t),n=M(t);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:s});break}case"cube":{const o=x(t,s);r.push({shape:o[0],fill:T(e,0)}),r.push({shape:o[1],fill:T(e,-.3)}),r.push({shape:o[2],fill:T(e,-.5)});break}case"cylinder":{const o=G(T(e,0),T(e,-.6),s?E:t),n=w(t,s);r.push({shape:n[0],fill:o}),r.push({shape:n[1],fill:o}),r.push({shape:n[2],fill:T(e,0)});break}case"diamond":{const s=k(t);r.push({shape:s[0],fill:T(e,-.3)}),r.push({shape:s[1],fill:T(e,0)}),r.push({shape:s[2],fill:T(e,-.3)}),r.push({shape:s[3],fill:T(e,-.7)});break}case"sphere":{const s=G(T(e,0),T(e,-.6));s.x1=0,s.y1=0,s.x2=.25*t,s.y2=.25*t,r.push({shape:{type:"circle",cx:0,cy:0,r:.5*t},fill:s});break}case"tetrahedron":{const s=g(t);r.push({shape:s[0],fill:T(e,-.3)}),r.push({shape:s[1],fill:T(e,0)}),r.push({shape:s[2],fill:T(e,-.6)});break}}break}return r}function Q(e){const t="number"==typeof(null==e?void 0:e.size)?null==e?void 0:e.size:null;return t?i(t):null}function V(e){return"icon"===e.type?"multiply":"tint"}function X(e,t){const s=Q(t),r=t&&t.maxSize?i(t.maxSize):null,o=t&&t.disableUpsampling,n=e.symbolLayers,a=[];let c=0,p=0;const u=n.getItemAt(n.length-1);let h;return u&&"icon"===u.type&&(h=u.size&&i(u.size)),n.forEach((n=>{if("icon"!==n.type&&"object"!==n.type)return;const l="icon"===n.type?n.size&&i(n.size):0,u=s||l?Math.ceil(Math.min(s||l,r||C)):O;if(n&&n.resource&&n.resource.href){const t=A(e,n).then((function(e){const t=n.get("material.color"),s=V(n);return S(e,u,t,s,o)})).then((function(e){const t=e.width,s=e.height;return c=Math.max(c,t),p=Math.max(p,s),[{shape:{type:"image",x:0,y:0,width:t,height:s,src:e.url},fill:null,stroke:null}]}));a.push(t)}else{var m;let e=u;"icon"===n.type&&h&&s&&(e=u*(l/h));const r="tall"===(null==t?void 0:t.symbolConfig)||(null==t||null==(m=t.symbolConfig)?void 0:m.isTall)||"object"===n.type&&J(n);c=Math.max(c,r?E:e),p=Math.max(p,e),a.push(Promise.resolve(K(n,e,r)))}})),l(a).then((function(e){const s=[];return e.forEach((function(e){e.value?s.push(e.value):e.error&&Z.warn("error while building swatchInfo!",e.error)})),z(s,[c,p],{node:t&&t.node,scale:!1,opacity:t&&t.opacity})}))}function Y(e,t){const s=e.symbolLayers,r=[],o=P(e),a=Q(t),l=(t&&t.maxSize?i(t.maxSize):null)||I;let c,p=0,u=0;return s.forEach(((e,t)=>{if(!e)return;if("line"!==e.type&&"path"!==e.type)return;const s=[];switch(e.type){case"line":{const r=F(e,0);if(n(r))break;const o=r&&r.width||0;0===t&&(c=o);const i=Math.min(a||o,l),h=0===t?i:a?i*(o/c):i,m=h>R/2?2*h:R;u=Math.max(u,h),p=Math.max(p,m),r.width=h,s.push({shape:{type:"path",path:[{command:"M",values:[0,.5*u]},{command:"L",values:[p,.5*u]}]},stroke:r});break}case"path":{const t=Math.min(a||O,l),r=T(e,0),o=T(e,-.2),n=B(e,-.4),i=n?{color:n,width:1}:{};if("quad"===e.profile){const t=e.width,n=e.height,a=d(t&&n?t/n:1,0===n,0===t),l={...i,join:"bevel"};s.push({shape:a[0],fill:o,stroke:l}),s.push({shape:a[1],fill:o,stroke:l}),s.push({shape:a[2],fill:r,stroke:l})}else s.push({shape:b.pathSymbol3DLayer[0],fill:o,stroke:i}),s.push({shape:b.pathSymbol3DLayer[1],fill:r,stroke:i});u=Math.max(u,t),p=u}}r.push(s)})),Promise.resolve(z(r,[p,u],{node:t&&t.node,scale:o,opacity:t&&t.opacity}))}async function _(e,t){const s="mesh-3d"===e.type,r=e.symbolLayers,o=Q(t),l=t&&t.maxSize?i(t.maxSize):null,c=o||O,p=[];let u=0,h=0,m=!1;for(let i=0;i<r.length;i++){const e=r.getItemAt(i),t=[];if(s&&"fill"!==e.type)continue;const o=b.fill[0];switch(e.type){case"fill":{const r=q(e),n=Math.min(c,l||C);u=Math.max(u,n),h=Math.max(h,n),m=!0;let i=T(e,0);const p="pattern"in e&&e.pattern,f=N(e);!s&&a(p)&&"style"===p.type&&"solid"!==p.style&&f&&(i=await W(p,f)),t.push({shape:o,fill:i,stroke:r});break}case"line":{const s=F(e,0);if(n(s))break;const r={stroke:s,shape:o};u=Math.max(u,O),h=Math.max(h,O),t.push(r);break}case"extrude":{const s={join:"round",width:1,...F(e,-.4)},r=T(e,0),o=T(e,-.2),n=Math.min(c,l||C),a=v(n);s.width=1,t.push({shape:a[0],fill:o,stroke:s}),t.push({shape:a[1],fill:o,stroke:s}),t.push({shape:a[2],fill:r,stroke:s});const i=O,p=.7*O+.5*n;u=Math.max(u,i),h=Math.max(h,p);break}case"water":{const s=N(e),r=H(s),o=H(s,2),n=H(s,3),a=L();m=!0,t.push({shape:a[0],fill:r}),t.push({shape:a[1],fill:o}),t.push({shape:a[2],fill:n});const i=Math.min(c,l||C);u=Math.max(u,i),h=Math.max(h,i);break}}p.push(t)}return z(p,[u,h],{node:t&&t.node,scale:m,opacity:t&&t.opacity})}function ee(e,t){if(0===e.symbolLayers.length)return Promise.reject(new r("symbolPreview: renderPreviewHTML3D","No symbolLayers in the symbol."));switch(e.type){case"point-3d":return X(e,t);case"line-3d":return Y(e,t);case"polygon-3d":case"mesh-3d":return _(e,t)}return Promise.reject(new r("symbolPreview: swatchInfo3D","symbol not supported."))}export{W as getPatternDescriptor,Q as getSizeFromOptions,T as getSymbolLayerFill,ee as previewSymbol3D};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../request.js";import r from"../../core/Error.js";import o from"../../core/ItemCache.js";import{isSome as t}from"../../core/maybe.js";import{size as n,create as i}from"../../geometry/support/aaBoundingBox.js";import{objectSymbolLayerSizeWithResourceSize as s,objectSymbolLayerPrimitiveBoundingBox as u}from"./symbolLayerUtils3D.js";let c=
|
|
5
|
+
import e from"../../request.js";import r from"../../core/Error.js";import o from"../../core/ItemCache.js";import{isSome as t}from"../../core/maybe.js";import{size as n,create as i}from"../../geometry/support/aaBoundingBox.js";import{objectSymbolLayerSizeWithResourceSize as s,objectSymbolLayerPrimitiveBoundingBox as u}from"./symbolLayerUtils3D.js";let c=a();function a(){return new o(50)}function m(){c=a()}function y(e,o){if("icon"===e.type)return l(e,o);if("object"===e.type)return b(e,o);throw new r("symbol3d:unsupported-symbol-layer","computeLayerSize only works with symbol layers of type Icon and Object")}async function f(e,o){if("icon"===e.type)return p(e,o);if("object"===e.type)return d(e,o);throw new r("symbol3d:unsupported-symbol-layer","computeLayerSize only works with symbol layers of type Icon and Object")}async function l(e,o){if(e.resource.href)return h(e.resource.href).then((e=>[e.width,e.height]));if(e.resource.primitive)return t(o)?[o,o]:[256,256];throw new r("symbol3d:invalid-symbol-layer","symbol layers of type Icon must have either an href or a primitive resource")}function p(e,r){return l(e,r).then((r=>{if(null==e.size)return r;const o=r[0]/r[1];return o>1?[e.size,e.size/o]:[e.size*o,e.size]}))}function h(r){return e(r,{responseType:"image"}).then((e=>e.data))}function b(e,r){return w(e,r).then((e=>n(e)))}async function d(e,r){const o=await b(e,r);return s(o,e)}async function w(e,o){if(!e.isPrimitive){const r=e.resource.href,o=c.get(r);if(void 0!==o)return o;const t=await import("../../views/3d/layers/graphics/objectResourceUtils.js"),n=await t.fetch(r,{disableTextures:!0});return c.put(r,n.referenceBoundingBox),n.referenceBoundingBox}let n=null;if(e.resource&&e.resource.primitive&&(n=i(u(e.resource.primitive)),t(o)))for(let r=0;r<n.length;r++)n[r]*=o;return n?Promise.resolve(n):Promise.reject(new r("symbol:invalid-resource","The symbol does not have a valid resource"))}export{m as clearBoundingBoxCache,l as computeIconLayerResourceSize,y as computeLayerResourceSize,f as computeLayerSize,b as computeObjectLayerResourceSize};
|
|
@@ -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"../../../../core/pbf.js";import{isAborted as t}from"../../../../core/promiseUtils.js";import{loadLibtess as r}from"../../../../geometry/libtess.js";import s from"./Feature.js";import{TriangleIndexBuffer as i}from"./IndexMemoryBuffer.js";import o from"./SourceLayerData.js";import{FillVertexBuffer as n,OutlineVertexBuffer as c,LineVertexBuffer as l,CircleVertexBuffer as a,SymbolVertexBuffer as u}from"./VertexMemoryBuffer.js";import f from"./buckets/CircleBucket.js";import p from"./buckets/FillBucket.js";import h from"./buckets/LineBucket.js";import m from"./buckets/SymbolBucket.js";import{StyleLayerType as _}from"./style/StyleDefinition.js";import{TileClipper as y,SimpleBuilder as d}from"../webgl/TileClipper.js";import{TileStatus as k}from"../../tiling/enums.js";const T=8,g=14,w=5;class B{constructor(t,r,s,i,o){if(this._pbfTiles={},this._tileClippers={},this._client=s,this._tile=r,o){this._styleLayerUIDs=new Set;for(const e of o)this._styleLayerUIDs.add(e)}this._styleRepository=i,this._layers=this._styleRepository.layers;const[n,c,l]=r.tileKey.split("/").map(parseFloat);this._level=n;const a=T+Math.max((this._level-g)*w,0);for(const u of Object.keys(t)){const r=t[u];this._pbfTiles[u]=new e(new Uint8Array(r.protobuff),new DataView(r.protobuff));if(r.refKey){const[e]=r.refKey.split("/").map(parseFloat),t=n-e;if(t>0){const e=(1<<t)-1,r=c&e,s=l&e;this._tileClippers[u]=new y(t,r,s,8,a)}}this._tileClippers[u]||(this._tileClippers[u]=new d)}}_canParseStyleLayer(e){return!this._styleLayerUIDs||this._styleLayerUIDs.has(e)}async parse(e){const t=r(),s=this._initialize(e),{returnedBuckets:i}=s;this._processLayers(s),this._linkReferences(s),this._filterFeatures(s);const o=[],n=new Set,c=(e,t)=>{n.has(e)||(o.push({name:e,repeat:t}),n.add(e))},l={};for(const r of i)r.getResources(r.tileClipper,c,l);if(this._tile.status===k.INVALID)return
|
|
5
|
+
import e from"../../../../core/pbf.js";import{isAborted as t}from"../../../../core/promiseUtils.js";import{loadLibtess as r}from"../../../../geometry/libtess.js";import s from"./Feature.js";import{TriangleIndexBuffer as i}from"./IndexMemoryBuffer.js";import o from"./SourceLayerData.js";import{FillVertexBuffer as n,OutlineVertexBuffer as c,LineVertexBuffer as l,CircleVertexBuffer as a,SymbolVertexBuffer as u}from"./VertexMemoryBuffer.js";import f from"./buckets/CircleBucket.js";import p from"./buckets/FillBucket.js";import h from"./buckets/LineBucket.js";import m from"./buckets/SymbolBucket.js";import{StyleLayerType as _}from"./style/StyleDefinition.js";import{TileClipper as y,SimpleBuilder as d}from"../webgl/TileClipper.js";import{TileStatus as k}from"../../tiling/enums.js";const T=8,g=14,w=5;class B{constructor(t,r,s,i,o){if(this._pbfTiles={},this._tileClippers={},this._client=s,this._tile=r,o){this._styleLayerUIDs=new Set;for(const e of o)this._styleLayerUIDs.add(e)}this._styleRepository=i,this._layers=this._styleRepository.layers;const[n,c,l]=r.tileKey.split("/").map(parseFloat);this._level=n;const a=T+Math.max((this._level-g)*w,0);for(const u of Object.keys(t)){const r=t[u];this._pbfTiles[u]=new e(new Uint8Array(r.protobuff),new DataView(r.protobuff));if(r.refKey){const[e]=r.refKey.split("/").map(parseFloat),t=n-e;if(t>0){const e=(1<<t)-1,r=c&e,s=l&e;this._tileClippers[u]=new y(t,r,s,8,a)}}this._tileClippers[u]||(this._tileClippers[u]=new d)}}_canParseStyleLayer(e){return!this._styleLayerUIDs||this._styleLayerUIDs.has(e)}async parse(e){const t=r(),s=this._initialize(e),{returnedBuckets:i}=s;this._processLayers(s),this._linkReferences(s),this._filterFeatures(s);const o=[],n=new Set,c=(e,t)=>{n.has(e)||(o.push({name:e,repeat:t}),n.add(e))},l={};for(const r of i)r.getResources(r.tileClipper,c,l);if(this._tile.status===k.INVALID)return[];const a=this._fetchResources(o,l,e);return Promise.all([...a,t]).then((()=>this._processFeatures(s.returnedBuckets)))}_initialize(e){return{signal:e&&e.signal,sourceNameToTileData:this._parseTileData(this._pbfTiles),layers:this._layers,zoom:this._level,sourceNameToTileClipper:this._tileClippers,sourceNameToUniqueSourceLayerBuckets:{},sourceNameToUniqueSourceLayers:{},returnedBuckets:[],layerIdToBucket:{},referencerUIDToReferencedId:new Map}}_processLayers(e){const{sourceNameToTileData:t,layers:r,zoom:s,sourceNameToTileClipper:i,sourceNameToUniqueSourceLayerBuckets:o,sourceNameToUniqueSourceLayers:n,returnedBuckets:c,layerIdToBucket:l,referencerUIDToReferencedId:a}=e;for(let u=r.length-1;u>=0;u--){const e=r[u];if(!this._canParseStyleLayer(e.uid)||e.minzoom&&s<Math.floor(e.minzoom)||e.maxzoom&&s>=e.maxzoom||e.type===_.BACKGROUND)continue;if(!t[e.source]||!i[e.source])continue;const f=t[e.source],p=i[e.source],h=e.sourceLayer,m=f[h];if(m){let t=n[e.source];if(t||(t=n[e.source]=new Set),t.add(e.sourceLayer),e.refLayerId)a.set(e.uid,e.refLayerId);else{const t=this._createBucket(e);if(t){t.layerUIDs=[e.uid],t.layerExtent=m.extent,t.tileClipper=p;let r=o[e.source];r||(r=o[e.source]={});let s=r[h];s||(s=r[h]=[]),s.push(t),c.push(t),l[e.id]=t}}}}}_linkReferences(e){const{layerIdToBucket:t,referencerUIDToReferencedId:r}=e;r.forEach(((e,r)=>{t[e=e]&&t[e].layerUIDs.push(r)}))}_filterFeatures(e){const{signal:r,sourceNameToTileData:i,sourceNameToUniqueSourceLayerBuckets:o,sourceNameToUniqueSourceLayers:n}=e,c=10*this._level,l=10*(this._level+1),a=[],u=[];for(const t of Object.keys(n)){n[t].forEach((e=>{a.push(e),u.push(t)}))}for(let f=0;f<a.length;f++){const e=u[f],n=a[f];if(!i[e]||!o[e])continue;const p=i[e][n],h=o[e][n];if(!h||0===h.length)continue;if(t(r))return;const m=p.getData();for(;m.nextTag(2);){const e=m.getMessage(),t=new s(e,p);e.release();const r=t.values;if(r){const e=r._minzoom;if(e&&e>=l)continue;const t=r._maxzoom;if(t&&t<=c)continue}for(const s of h)s.pushFeature(t)}}}_fetchResources(e,t,r){const s=[],i=this._tile.getWorkerTileHandler();let o,n;e.length>0&&(o=i.fetchSprites(e,this._client,r),s.push(o));for(const c in t){const e=t[c];e.size>0&&(n=i.fetchGlyphs(this._tile.tileKey,c,e,this._client,r),s.push(n))}return s}_processFeatures(e){const t=e.filter((e=>e.hasFeatures()||this._canParseStyleLayer(e.layer.uid)));for(const r of t)r.processFeatures(r.tileClipper);return t}_parseTileData(e){const t={};for(const r of Object.keys(e)){const s=e[r],i={};for(;s.next();)switch(s.tag()){case 3:{const e=s.getMessage(),t=new o(e);e.release(),i[t.name]=t;break}default:s.skip()}t[r]=i}return t}_createBucket(e){switch(e.type){case _.BACKGROUND:return null;case _.FILL:return this._createFillBucket(e);case _.LINE:return this._createLineBucket(e);case _.CIRCLE:return this._createCircleBucket(e);case _.SYMBOL:return this._createSymbolBucket(e)}}_createFillBucket(e){return new p(e,this._level,this._tile.getWorkerTileHandler().getSpriteItems(),new n(e.fillMaterial.getStride()),new i,new c(e.outlineMaterial.getStride()),new i)}_createLineBucket(e){return new h(e,this._level,this._tile.getWorkerTileHandler().getSpriteItems(),new l(e.lineMaterial.getStride()),new i)}_createCircleBucket(e){return new f(e,this._level,this._tile.getWorkerTileHandler().getSpriteItems(),new a(e.circleMaterial.getStride()),new i)}_createSymbolBucket(e){const t=this._tile;return new m(e,this._level,new u(e.iconMaterial.getStride()),new i,new u(e.textMaterial.getStride()),new i,t.placementEngine,t.getWorkerTileHandler())}}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{createResolver as e}from"../../../../../core/promiseUtils.js";class r{constructor(){this._resolver=null}isHeld(){return!!this._resolver}async acquire(){
|
|
5
|
+
import{createResolver as e}from"../../../../../core/promiseUtils.js";class r{constructor(){this._resolver=null}isHeld(){return!!this._resolver}async acquire(){this._resolver?(await this._resolver.promise,await this.acquire()):this._resolver=e()}release(){const e=this._resolver;this._resolver=null,e.resolve()}}async function s(e,r,s){try{await e.acquire(),await r(s),e.release()}catch(t){throw e.release(),t}}export{r as Lock,s as withLock};
|
|
@@ -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
|
|
5
|
+
import{_ as i}from"../../../chunks/tslib.es6.js";import e from"../../../Graphic.js";import s from"../../../core/Collection.js";import{isSome as t,unwrap as r}from"../../../core/maybe.js";import{watch as h,initial as o}from"../../../core/reactiveUtils.js";import"../../../core/Logger.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/set.js";import{subclass as a}from"../../../core/accessorSupport/decorators/subclass.js";import{LayerView2DMixin as c}from"./LayerView2D.js";import n from"./graphics/GraphicContainer.js";import p from"./graphics/GraphicsView2D.js";import g from"../../layers/LayerView.js";const l=["routeInfo","directionLines","directionPoints","polygonBarriers","polylineBarriers","pointBarriers","stops"],d=Object.freeze({remove(){},pause(){},resume(){}});let m=class extends(c(g)){constructor(){super(...arguments),this._graphicsViews=new Map,this._highlightIds=new Map}attach(){for(const i of l)this.handles.add(h((()=>t(this.layer[i])?"routeInfo"===i?[r(this.layer[i])]:r(this.layer[i]).toArray():null),(e=>this._createGraphicsView(i,e)),o),i)}detach(){this._destroyGraphicsViews()}highlight(i){let t;return"number"==typeof i?t=[i]:i instanceof e?t=[i.uid]:Array.isArray(i)&&i.length>0?t="number"==typeof i[0]?i:i.map((i=>i&&i.uid)):s.isCollection(i)&&(t=i.map((i=>i&&i.uid)).toArray()),t=t.filter((i=>null!=i)),t.length?(this._addHighlight(t),{remove:()=>this._removeHighlight(t)}):d}async hitTest(i,e){if(this.suspended||!this._graphicsViews.size)return null;const s=Array.from(this._graphicsViews.values()).reverse().map((e=>e.hitTest(i))).flat().filter((i=>!!i));for(const t of s)t.layer=this.layer,t.sourceLayer=this.layer;return s}moveStart(){}moveEnd(){}update(i){for(const e of this._graphicsViews.values())e.processUpdate(i)}viewChange(){for(const i of this._graphicsViews.values())i.viewChange()}isUpdating(){for(const i of this._graphicsViews.values())if(i.updating)return!0;return!1}_createGraphicsView(i,e){this._destroyGraphicsView(i);const r=this.view,a=()=>this.requestUpdate(),c=new s(t(e)?e.map((i=>{const e=i.toGraphic();return{networkGraphic:i,graphic:e}})):[]),g=new n(r.featuresTilingScheme),d=c.map((({graphic:i})=>i)),m=new p({container:g,graphics:d,requestUpdateCallback:a,view:r});for(const s of c){const{networkGraphic:e,graphic:t}=s;this.handles.add(h((()=>[e.geometry,e.symbol]),(([i,e])=>{t.set({geometry:i,symbol:e}),m.graphicUpdateHandler({graphic:t,property:"geometry"})})),`updating-${i}`)}this._graphicsViews.set(i,m),this.container.addChildAt(g,l.indexOf(i)),this._updateHighlight(),this.handles.add(h((()=>m.updating),(()=>this.notifyChange("updating")),o),`updating-${i}`)}_destroyGraphicsView(i){if(!this._graphicsViews.has(i))return;const e=this._graphicsViews.get(i);this.container.removeChild(e.container),e.destroy(),this.handles.remove(`updating-${i}`),this._graphicsViews.delete(i)}_destroyGraphicsViews(){this.container.removeAllChildren();for(const[i,e]of this._graphicsViews.entries())this.handles.remove(i),e.destroy();this._graphicsViews.clear()}_addHighlight(i){for(const e of i)if(this._highlightIds.has(e)){const i=this._highlightIds.get(e);this._highlightIds.set(e,i+1)}else this._highlightIds.set(e,1);this._updateHighlight()}_removeHighlight(i){for(const e of i)if(this._highlightIds.has(e)){const i=this._highlightIds.get(e)-1;0===i?this._highlightIds.delete(e):this._highlightIds.set(e,i)}this._updateHighlight()}_updateHighlight(){const i=Array.from(this._highlightIds.keys());for(const e of this._graphicsViews.values())e.setHighlight(i)}};m=i([a("esri.views.2d.layers.RouteLayerView2D")],m);const f=m;export{f 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 t from"../../../../../core/Error.js";import e from"../../../../../core/has.js";import i from"../../../../../core/Logger.js";import{clamp as s}from"../../../../../core/mathUtils.js";import{isNone as r,isSome as a,mapMany as o,forEachSome as n,applySome as l,unwrap as h}from"../../../../../core/maybe.js";import{createResolver as c,isAbortError as u}from"../../../../../core/promiseUtils.js";import{diff as d}from"../../../../../core/accessorSupport/diffUtils.js";import p from"../../../../../layers/support/FieldsIndex.js";import{MAX_FILTERS as _,HIGHLIGHT_FLAG as g,ATTRIBUTE_DATA_VV as f,NAN_MAGIC_NUMBER as m,ATTRIBUTE_DATA_ANIMATION as y,ATTRIBUTE_DATA_GPGPU as x}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TYPE_AGGREGATE as b,DISPLAY_ID_TYPE_FEATURE as T,getDisplayIdTexel as z,getDisplayIdType as S,getDisplayIdFilterMask as E}from"../../../engine/webgl/DisplayId.js";import{getPixelArrayCtor as w}from"../../../engine/webgl/Utils.js";import{createDebugLogger as A,DEBUG_ATTR_UPDATES as D}from"../../../engine/webgl/util/debug.js";import{getVisualVariableSizeValueRepresentationRatio as k}from"../tileRenderers/support/visualVariablesUtils.js";import{PixelType as U}from"../../../../webgl/enums.js";const F=i.getLogger("esri.views.layers.2d.features.support.AttributeStore"),B=A(D,F),C={sharedArrayBuffer:e("esri-shared-array-buffer"),atomics:e("esri-atomics")};function R(t,e){return i=>e(t(i))}class I{constructor(t,e,i,s){this.size=0,this.texelSize=4;const{pixelType:r,layout:a,textureOnly:o}=s;this.textureOnly=o||!1,this.pixelType=r,this._ctype=e,this.layout=a,this._resetRange(),this._shared=t,this.size=i,o||(this.data=this._initData(r,i,t,e))}get buffer(){return l(this.data,(t=>t.buffer))}unsetComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]&=~e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]|=255&e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponent(t,e,i){const s=h(this.data);for(const r of i)s[r*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,r),this.dirtyEnd=Math.max(this.dirtyEnd,r)}setComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}unsetComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]&=~e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}getData(t,e){const i=z(t);return h(this.data)[i*this.texelSize+e]}setData(t,e,i){const s=z(t),r=1<<e;0!=(this.layout&r)?(this.data[s*this.texelSize+e]=i,this.dirtyStart=Math.min(this.dirtyStart,s),this.dirtyEnd=Math.max(this.dirtyEnd,s)):F.error("mapview-attributes-store","Tried to set a value for a texel's readonly component")}lock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,1)}unlock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,0)}expand(t){if(this.size=t,!this.textureOnly){const e=this._initData(this.pixelType,t,this._shared,this._ctype),i=h(this.data);e.set(i),this.data=e}}toMessage(){const t=this.dirtyStart,e=this.dirtyEnd,i=this.texelSize;if(t>e)return null;this._resetRange();const s=!(this._shared||"local"===this._ctype),r=this.pixelType,a=this.layout,o=h(this.data);return{start:t,end:e,data:s&&o.slice(t*i,(e+1)*i)||null,pixelType:r,layout:a}}_initData(t,e,i,s){const r=i&&"local"!==s?SharedArrayBuffer:ArrayBuffer,a=w(t),o=new a(new r(e*e*4*a.BYTES_PER_ELEMENT));for(let n=0;n<o.length;n+=4)o[n+1]=255;return o}_resetRange(){this.dirtyStart=2147483647,this.dirtyEnd=0}}class M{constructor(t,e){this._client=t,this.config=e,this._attributeComputeMap=new Map,this._blocks=new Array,this._filters=new Array(_),this._targetType=0,this._abortController=new AbortController,this._hasScaleExpr=!1,this._size=32,this._idsToHighlight=new Set;const i=e.supportsTextureFloat?U.FLOAT:U.UNSIGNED_BYTE;B(`Creating AttributeStore ${C.sharedArrayBuffer?"with":"without"} shared memory`),this._blockDescriptors=[{pixelType:U.UNSIGNED_BYTE,layout:1},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:i,layout:15},{pixelType:i,layout:15}],this._blocks=this._blockDescriptors.map((()=>null))}destroy(){this._abortController.abort()}get hasScaleExpr(){return this._hasScaleExpr}get _signal(){return this._abortController.signal}get hasHighlight(){return this._idsToHighlight.size>0}update(t,i){this.config=i;const s=i.schema.processors[0].storage,o=d(this._schema,s);if((t.targets.feature||t.targets.aggregate)&&(t.storage.data=!0),o&&(e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:",o),t.storage.data=!0,this._schema=s,this._attributeComputeMap.clear(),!r(s))){switch(s.target){case"feature":this._targetType=T;break;case"aggregate":this._targetType=b}if("subtype"===s.type)for(const t in s.mapping){const e=s.mapping[t];if(a(e))for(const t of e.mapping)this._bindAttribute(t)}else for(const t of s.mapping)this._bindAttribute(t)}}onTileData(t,e){if(r(e.addOrUpdate))return;const i=e.addOrUpdate.getCursor();for(;i.next();){const t=i.getDisplayId();this.setAttributeData(t,i)}}invalidateResources(){this._createResourcesPromise=null,this._abortController.abort(),this._abortController=new AbortController}async setHighlight(t,e){const i=1,s=this._getBlock(0),r=e.map((t=>z(t)));s.lock(),s.unsetComponentAllTexels(0,i),s.setComponent(0,i,r),s.unlock(),this._idsToHighlight.clear();for(const a of t)this._idsToHighlight.add(a);await this.sendUpdates()}async updateFilters(t,i){const{config:s,service:r,spatialReference:a}=i,{filters:o}=s,n=o.map(((t,e)=>this._updateFilter(t,e,r,a)));(await Promise.all(n)).some((t=>t))&&(t.storage.filters=!0,e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:","Filters changed"))}setData(t,e,i,s){const r=z(t);this._ensureSizeForTexel(r),this._getBlock(e).setData(t,i,s)}getData(t,e,i){return this._getBlock(e).getData(t,i)}getHighlightFlag(t){return this._idsToHighlight.has(t)?g:0}unsetAttributeData(t){const e=z(t);this._getBlock(0).setData(e,0,0)}setAttributeData(t,e){const i=z(t);if(this._ensureSizeForTexel(i),this._getBlock(0).setData(i,0,this.getFilterFlags(e)),this._targetType!==S(t))return;const r=this._attributeComputeMap,a=this.config.supportsTextureFloat?1:2,o=4;r.size&&r.forEach(((t,r)=>{const n=r*a%o,l=Math.floor(r*a/o),h=this._getBlock(l+f),c=t(e);if(this.config.supportsTextureFloat)h.setData(i,n,c);else if(c===m)h.setData(i,n,255),h.setData(i,n+1,255);else{const t=s(Math.round(c),-32767,32766)+32768,e=255&t,r=(65280&t)>>8;h.setData(i,n,e),h.setData(i,n+1,r)}}))}sendUpdates(){if(this._nextUpdate)return this._nextUpdate.promise;if(this._currUpdate)return this._nextUpdate=c(),this._nextUpdate.promise;const e={blocks:this._blocks.map((t=>a(t)?t.toMessage():null))};return this._currUpdate=this._createResources().then((()=>{const t=()=>{if(this._currUpdate=null,this._nextUpdate){const t=this._nextUpdate;this._nextUpdate=null,this.sendUpdates().then((()=>t.resolve()))}},i=this._client.update(e,this._signal).then(t).catch(t);return this._client.render(this._signal),i})).catch((e=>u(e)?(this._createResourcesPromise=null,this._createResources()):(F.error(new t("mapview-attribute-store","Encountered an error during client update",e)),Promise.resolve()))),this._currUpdate}_ensureSizeForTexel(t){for(;t>=this._size*this._size;)if(this._expand())return}_bindAttribute(t){function e(){return t.normalizationField?e=>{const i=e.readAttribute(t.normalizationField);if(!i)return null;return e.readAttribute(t.field)/i}:e=>e.readAttribute(t.field)}function i(){return t.normalizationField&&F.warn("mapview-arcade","Ignoring normalizationField specified with an arcade expression which is not supported."),e=>e.getComputedNumericAtIndex(t.fieldIndex)}let s;if(null!=t.fieldIndex)s=i();else{if(!t.field)return;s=e()}if(t.valueRepresentation){s=R(s,(e=>k(e,t.valueRepresentation)))}const r=t=>null===t||isNaN(t)||t===1/0?m:t;this._attributeComputeMap.set(t.binding,R(s,r))}_createResources(){if(a(this._createResourcesPromise))return this._createResourcesPromise;this._getBlock(y),this._getBlock(x),B("Initializing AttributeStore");const e={shared:C.sharedArrayBuffer&&!("local"===this._client.type),size:this._size,blocks:o(this._blocks,(t=>({textureOnly:t.textureOnly,buffer:t.buffer,pixelType:t.pixelType})))},i=this._client.initialize(e,this._signal).catch((e=>{u(e)?this._createResourcesPromise=null:F.error(new t("mapview-attribute-store","Encountered an error during client initialization",e))}));return this._createResourcesPromise=i,i.then((()=>r(this._createResourcesPromise)?this._createResources():void 0)),i}_getBlock(t){const e=this._blocks[t];if(a(e))return e;B(`Initializing AttributeBlock at index ${t}`);const i=C.sharedArrayBuffer,s=this._client.type,r=new I(i,s,this._size,this._blockDescriptors[t]);return this._blocks[t]=r,this._createResourcesPromise=null,r}_expand(){if(this._size<this.config.maxTextureSize){const t=this._size<<=1;return B("Expanding block size to",t,this._blocks),n(this._blocks,(e=>e.expand(t))),this._createResourcesPromise=null,this._size=t,0}return F.error(new t("mapview-limitations","Maximum number of onscreen features exceeded.")),-1}async _updateFilter(t,e,i,s){const o=this._filters[e],n=a(o)&&o.hash;if(!o&&!t)return!1;if(n===JSON.stringify(t))return!1;if(r(t)){if(!o)return!1;const t=1<<e+1,i=this._getBlock(0);return this._filters[e]=null,i.setComponentAllTexels(0,t),this.sendUpdates(),!0}const l=await this._getFilter(e,i);return await l.update(t,s),!0}async _getFilter(t,e){const i=this._filters[t];if(a(i))return i;const{default:s}=await import("./FeatureFilter.js"),r=new s({geometryType:e.geometryType,hasM:!1,hasZ:!1,timeInfo:e.timeInfo,fieldsIndex:new p(e.fields)});return this._filters[t]=r,r}isVisible(t){return!!(2&this._getBlock(0).getData(t,0))}getFilterFlags(t){let e=0;const i=E(t.getDisplayId());for(let a=0;a<this._filters.length;a++){const s=!!(i&1<<a),o=this._filters[a];e|=(!s||r(o)||o.check(t)?1:0)<<a}let s=0;if(this._idsToHighlight.size){const e=t.getObjectId();s=this.getHighlightFlag(e)}return e<<1|s}}export{M as default};
|
|
5
|
+
import t from"../../../../../core/Error.js";import e from"../../../../../core/has.js";import i from"../../../../../core/Logger.js";import{clamp as s}from"../../../../../core/mathUtils.js";import{isNone as r,isSome as a,mapMany as o,forEachSome as n,applySome as l,unwrap as h}from"../../../../../core/maybe.js";import{createResolver as c,isAbortError as u}from"../../../../../core/promiseUtils.js";import{diff as d}from"../../../../../core/accessorSupport/diffUtils.js";import p from"../../../../../layers/support/FieldsIndex.js";import{MAX_FILTERS as _,HIGHLIGHT_FLAG as g,ATTRIBUTE_DATA_VV as f,NAN_MAGIC_NUMBER as m,ATTRIBUTE_DATA_ANIMATION as y,ATTRIBUTE_DATA_GPGPU as x}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TYPE_AGGREGATE as b,DISPLAY_ID_TYPE_FEATURE as T,getDisplayIdTexel as z,getDisplayIdType as S,getDisplayIdFilterMask as E}from"../../../engine/webgl/DisplayId.js";import{getPixelArrayCtor as w}from"../../../engine/webgl/Utils.js";import{createDebugLogger as A,DEBUG_ATTR_UPDATES as D}from"../../../engine/webgl/util/debug.js";import{getVisualVariableSizeValueRepresentationRatio as k}from"../tileRenderers/support/visualVariablesUtils.js";import{PixelType as U}from"../../../../webgl/enums.js";const F=i.getLogger("esri.views.layers.2d.features.support.AttributeStore"),B=A(D,F),C={sharedArrayBuffer:e("esri-shared-array-buffer"),atomics:e("esri-atomics")};function R(t,e){return i=>e(t(i))}class I{constructor(t,e,i,s){this.size=0,this.texelSize=4;const{pixelType:r,layout:a,textureOnly:o}=s;this.textureOnly=o||!1,this.pixelType=r,this._ctype=e,this.layout=a,this._resetRange(),this._shared=t,this.size=i,o||(this.data=this._initData(r,i,t,e))}get buffer(){return l(this.data,(t=>t.buffer))}unsetComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]&=~e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]|=255&e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponent(t,e,i){const s=h(this.data);for(const r of i)s[r*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,r),this.dirtyEnd=Math.max(this.dirtyEnd,r)}setComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}unsetComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]&=~e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}getData(t,e){const i=z(t);return h(this.data)[i*this.texelSize+e]}setData(t,e,i){const s=z(t),r=1<<e;0!=(this.layout&r)?(this.data[s*this.texelSize+e]=i,this.dirtyStart=Math.min(this.dirtyStart,s),this.dirtyEnd=Math.max(this.dirtyEnd,s)):F.error("mapview-attributes-store","Tried to set a value for a texel's readonly component")}lock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,1)}unlock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,0)}expand(t){if(this.size=t,!this.textureOnly){const e=this._initData(this.pixelType,t,this._shared,this._ctype),i=h(this.data);e.set(i),this.data=e}}toMessage(){const t=this.dirtyStart,e=this.dirtyEnd,i=this.texelSize;if(t>e)return null;this._resetRange();const s=!(this._shared||"local"===this._ctype),r=this.pixelType,a=this.layout,o=h(this.data);return{start:t,end:e,data:s&&o.slice(t*i,(e+1)*i)||null,pixelType:r,layout:a}}_initData(t,e,i,s){const r=i&&"local"!==s?SharedArrayBuffer:ArrayBuffer,a=w(t),o=new a(new r(e*e*4*a.BYTES_PER_ELEMENT));for(let n=0;n<o.length;n+=4)o[n+1]=255;return o}_resetRange(){this.dirtyStart=2147483647,this.dirtyEnd=0}}class M{constructor(t,e){this._client=t,this.config=e,this._attributeComputeMap=new Map,this._blocks=new Array,this._filters=new Array(_),this._targetType=0,this._abortController=new AbortController,this._hasScaleExpr=!1,this._size=32,this._idsToHighlight=new Set;const i=e.supportsTextureFloat?U.FLOAT:U.UNSIGNED_BYTE;B(`Creating AttributeStore ${C.sharedArrayBuffer?"with":"without"} shared memory`),this._blockDescriptors=[{pixelType:U.UNSIGNED_BYTE,layout:1},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:i,layout:15},{pixelType:i,layout:15}],this._blocks=this._blockDescriptors.map((()=>null))}destroy(){this._abortController.abort()}get hasScaleExpr(){return this._hasScaleExpr}get _signal(){return this._abortController.signal}get hasHighlight(){return this._idsToHighlight.size>0}update(t,i){this.config=i;const s=i.schema.processors[0].storage,o=d(this._schema,s);if((t.targets.feature||t.targets.aggregate)&&(t.storage.data=!0),o&&(e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:",o),t.storage.data=!0,this._schema=s,this._attributeComputeMap.clear(),!r(s))){switch(s.target){case"feature":this._targetType=T;break;case"aggregate":this._targetType=b}if("subtype"===s.type)for(const t in s.mapping){const e=s.mapping[t];if(a(e))for(const t of e.mapping)this._bindAttribute(t)}else for(const t of s.mapping)this._bindAttribute(t)}}onTileData(t,e){if(r(e.addOrUpdate))return;const i=e.addOrUpdate.getCursor();for(;i.next();){const t=i.getDisplayId();this.setAttributeData(t,i)}}invalidateResources(){this._createResourcesPromise=null,this._abortController.abort(),this._abortController=new AbortController}async setHighlight(t,e){const i=1,s=this._getBlock(0),r=e.map((t=>z(t)));s.lock(),s.unsetComponentAllTexels(0,i),s.setComponent(0,i,r),s.unlock(),this._idsToHighlight.clear();for(const a of t)this._idsToHighlight.add(a);await this.sendUpdates()}async updateFilters(t,i){const{config:s,service:r,spatialReference:a}=i,{filters:o}=s,n=o.map(((t,e)=>this._updateFilter(t,e,r,a)));(await Promise.all(n)).some((t=>t))&&(t.storage.filters=!0,e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:","Filters changed"))}setData(t,e,i,s){const r=z(t);this._ensureSizeForTexel(r),this._getBlock(e).setData(t,i,s)}getData(t,e,i){return this._getBlock(e).getData(t,i)}getHighlightFlag(t){return this._idsToHighlight.has(t)?g:0}unsetAttributeData(t){const e=z(t);this._getBlock(0).setData(e,0,0)}setAttributeData(t,e){const i=z(t);if(this._ensureSizeForTexel(i),this._getBlock(0).setData(i,0,this.getFilterFlags(e)),this._targetType!==S(t))return;const r=this._attributeComputeMap,a=this.config.supportsTextureFloat?1:2,o=4;r.size&&r.forEach(((t,r)=>{const n=r*a%o,l=Math.floor(r*a/o),h=this._getBlock(l+f),c=t(e);if(this.config.supportsTextureFloat)h.setData(i,n,c);else if(c===m)h.setData(i,n,255),h.setData(i,n+1,255);else{const t=s(Math.round(c),-32767,32766)+32768,e=255&t,r=(65280&t)>>8;h.setData(i,n,e),h.setData(i,n+1,r)}}))}sendUpdates(){if(this._nextUpdate)return this._nextUpdate.promise;if(this._currUpdate)return this._nextUpdate=c(),this._nextUpdate.promise;const e={blocks:this._blocks.map((t=>a(t)?t.toMessage():null))};return this._currUpdate=this._createResources().then((()=>{const t=()=>{if(this._currUpdate=null,this._nextUpdate){const t=this._nextUpdate;this._nextUpdate=null,this.sendUpdates().then((()=>t.resolve()))}},i=this._client.update(e,this._signal).then(t).catch(t);return this._client.render(this._signal),i})).catch((e=>{if(u(e))return this._createResourcesPromise=null,this._createResources();F.error(new t("mapview-attribute-store","Encountered an error during client update",e))})),this._currUpdate}_ensureSizeForTexel(t){for(;t>=this._size*this._size;)if(this._expand())return}_bindAttribute(t){function e(){return t.normalizationField?e=>{const i=e.readAttribute(t.normalizationField);if(!i)return null;return e.readAttribute(t.field)/i}:e=>e.readAttribute(t.field)}function i(){return t.normalizationField&&F.warn("mapview-arcade","Ignoring normalizationField specified with an arcade expression which is not supported."),e=>e.getComputedNumericAtIndex(t.fieldIndex)}let s;if(null!=t.fieldIndex)s=i();else{if(!t.field)return;s=e()}if(t.valueRepresentation){s=R(s,(e=>k(e,t.valueRepresentation)))}const r=t=>null===t||isNaN(t)||t===1/0?m:t;this._attributeComputeMap.set(t.binding,R(s,r))}_createResources(){if(a(this._createResourcesPromise))return this._createResourcesPromise;this._getBlock(y),this._getBlock(x),B("Initializing AttributeStore");const e={shared:C.sharedArrayBuffer&&!("local"===this._client.type),size:this._size,blocks:o(this._blocks,(t=>({textureOnly:t.textureOnly,buffer:t.buffer,pixelType:t.pixelType})))},i=this._client.initialize(e,this._signal).catch((e=>{u(e)?this._createResourcesPromise=null:F.error(new t("mapview-attribute-store","Encountered an error during client initialization",e))}));return this._createResourcesPromise=i,i.then((()=>r(this._createResourcesPromise)?this._createResources():void 0)),i}_getBlock(t){const e=this._blocks[t];if(a(e))return e;B(`Initializing AttributeBlock at index ${t}`);const i=C.sharedArrayBuffer,s=this._client.type,r=new I(i,s,this._size,this._blockDescriptors[t]);return this._blocks[t]=r,this._createResourcesPromise=null,r}_expand(){if(this._size<this.config.maxTextureSize){const t=this._size<<=1;return B("Expanding block size to",t,this._blocks),n(this._blocks,(e=>e.expand(t))),this._createResourcesPromise=null,this._size=t,0}return F.error(new t("mapview-limitations","Maximum number of onscreen features exceeded.")),-1}async _updateFilter(t,e,i,s){const o=this._filters[e],n=a(o)&&o.hash;if(!o&&!t)return!1;if(n===JSON.stringify(t))return!1;if(r(t)){if(!o)return!1;const t=1<<e+1,i=this._getBlock(0);return this._filters[e]=null,i.setComponentAllTexels(0,t),this.sendUpdates(),!0}const l=await this._getFilter(e,i);return await l.update(t,s),!0}async _getFilter(t,e){const i=this._filters[t];if(a(i))return i;const{default:s}=await import("./FeatureFilter.js"),r=new s({geometryType:e.geometryType,hasM:!1,hasZ:!1,timeInfo:e.timeInfo,fieldsIndex:new p(e.fields)});return this._filters[t]=r,r}isVisible(t){return!!(2&this._getBlock(0).getData(t,0))}getFilterFlags(t){let e=0;const i=E(t.getDisplayId());for(let a=0;a<this._filters.length;a++){const s=!!(i&1<<a),o=this._filters[a];e|=(!s||r(o)||o.check(t)?1:0)<<a}let s=0;if(this._idsToHighlight.size){const e=t.getObjectId();s=this.getHighlightFlag(e)}return e<<1|s}}export{M 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 e from"../../../../../core/Error.js";import t from"../../../../../core/Logger.js";import{isNone as r,isSome as s}from"../../../../../core/maybe.js";import i from"../../../../../core/pbf.js";import{convertToGeometry as n,unquantizeOptimizedGeometry as a}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeature as h}from"../../../../../layers/graphics/OptimizedFeature.js";import o from"../../../../../layers/graphics/OptimizedGeometry.js";import{FeatureSetReader as d}from"./FeatureSetReader.js";import{parseHeader as u}from"./FeatureSetReaderPBFHeader.js";const c=t.getLogger("esri.view.2d.layers.features.support.FeatureSetReaderPBF"),g=!0,l=268435455,_=128,f=128e3,y={small:{delta:new Int32Array(_),decoded:new Int32Array(_)},large:{delta:new Int32Array(f),decoded:new Int32Array(f)}};function I(e){return e<=y.small.delta.length?y.small:(e<=y.large.delta.length||(y.large.delta=new Int32Array(Math.round(1.25*e)),y.large.decoded=new Int32Array(Math.round(1.25*e))),y.large)}function p(e){return e.toLowerCase().trim()}function m(t){try{const e=2,r=new i(new Uint8Array(t),new DataView(t));for(;r.next();){if(r.tag()===e)return x(r.getMessage());r.skip()}}catch(r){const t=new e("query:parsing-pbf","Error while parsing FeatureSet PBF payload",{error:r});c.error(t)}return null}function x(e){const t=1;for(;e.next();){if(e.tag()===t)return e.getMessage();e.skip()}return null}function S(e){const t=1,r=2,s=3,i=4,n=5,a=6,h=7,o=8,d=9,u=e.getLength(),c=e.pos()+u;for(;e.pos()<c&&e.next();)switch(e.tag()){case t:return e.getString();case r:return e.getFloat();case s:return e.getDouble();case i:return e.getSInt32();case n:return e.getUInt32();case a:return e.getInt64();case h:return e.getUInt64();case o:return e.getSInt64();case d:return e.getBool();default:return e.skip(),null}return null}function F(e,t,r,s,i,n){return.5*Math.abs(e*s+r*n+i*t-e*n-r*t-i*s)}function G(e,t,r,s){return 0===e*s-r*t&&e*r+t*s>0}class v extends d{constructor(e,t,r,s){super(e,s),this._hasNext=!1,this._isPoints=!1,this._featureIndex=-1,this._featureOffset=0,this._cache={area:0,unquantGeometry:void 0,geometry:void 0,centroid:void 0,legacyFeature:void 0,optFeature:void 0},this._geometryType=s.geometryType,this._reader=t,this._header=r,this._hasNext=r.hasFeatures,this._isPoints="esriGeometryPoint"===s.geometryType}static fromBuffer(e,t,r=!1){const s=t.geometryType,i=m(e),n=u(i,"esriGeometryPoint"===s,r),a=d.createInstance();return new v(a,i,n,t)}get geometryType(){return this._geometryType}get size(){return this._header.featureCount}get hasZ(){return!1}get hasM(){return!1}get stride(){return 2+(this.hasZ?1:0)+(this.hasM?1:0)}get hasFeatures(){return this._header.hasFeatures}get hasNext(){return this._hasNext}get exceededTransferLimit(){return this._header.exceededTransferLimit}hasField(e){return this._header.hasField(e)}getFieldNames(){return this._header.fields.map((e=>e.fieldName))}getSize(){return this.size}getQuantizationTransform(){return this._header.transform}getCursor(){return this.copy()}getIndex(){return this._featureIndex}setIndex(e){this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0,this._featureIndex=e}getAttributeHash(){let e="";return this._header.fields.forEach((({index:t})=>{e+=this._readAttributeAtIndex(t)+"."})),e}getObjectId(){return this._readAttributeAtIndex(this._header.objectIdFieldIndex)}getDisplayId(){return this._header.displayIds[this._featureIndex]}setDisplayId(e){this._header.displayIds[this._featureIndex]=e}getGroupId(){return this._header.groupIds[this._featureIndex]}setGroupId(e){this._header.groupIds[this._featureIndex]=e}readLegacyFeature(){if(void 0===this._cache.legacyFeature){var e;const t=this.readCentroid(),r={attributes:this.readAttributes(),geometry:this._isPoints?this.readLegacyPointGeometry():this.readLegacyGeometry(),centroid:null!=(e=t&&{x:t.coords[0],y:t.coords[1]})?e:null};return this._cache.legacyFeature=r,r}return this._cache.legacyFeature}readOptimizedFeature(){if(void 0===this._cache.optFeature){const e=new h(this.readGeometry(),this.readAttributes(),this.readCentroid());return e.objectId=this.getObjectId(),e.displayId=this.getDisplayId(),this._cache.optFeature=e,e}return this._cache.optFeature}getXHydrated(){const e=this._header.centroid[2*this._featureIndex],t=this.getQuantizationTransform();return r(t)?e:e*t.scale[0]+t.translate[0]}getYHydrated(){const e=this._header.centroid[2*this._featureIndex+1],t=this.getQuantizationTransform();return r(t)?e:t.translate[1]-e*t.scale[1]}getX(){return this._header.centroid[2*this._featureIndex]*this._sx+this._tx}getY(){return this._header.centroid[2*this._featureIndex+1]*this._sy+this._ty}readLegacyPointGeometry(){return{x:this.getX(),y:this.getY()}}readLegacyGeometry(e){const t=this.readGeometry(e);return n(t,this.geometryType,!1,!1)}readLegacyCentroid(){const e=this.readCentroid();if(!e)return null;const[t,r]=e.coords;return{x:t,y:r}}readGeometryArea(){return this._cache.area||this.readGeometry(!0),this._cache.area}readUnquantizedGeometry(e=!1){if(void 0===this._cache.unquantGeometry){const t=this.readGeometry(e);if(!t)return this._cache.unquantGeometry=null,null;const r=I(t.coords.length).decoded,s=t.clone(r),i=s.coords;let n=0;for(const e of s.lengths){for(let t=1;t<e;t++){const e=2*(n+t),r=2*(n+t-1);i[e]+=i[r],i[e+1]+=i[r+1]}n+=e}return this._cache.unquantGeometry=s,s}return this._cache.unquantGeometry}readHydratedGeometry(){if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getXHydrated(),t=this.getYHydrated();return new o([],[e,t])}const e=this.readGeometry();if(!e)return null;const t=e.clone(),r=this.getQuantizationTransform();return s(r)&&a(t,t,this.hasZ,this.hasM,r),t}readGeometry(e=!1){if(void 0===this._cache.geometry){let r=null;if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getX(),t=this.getY();r=new o([],[e,t])}else{const s=this._header.offsets.geometry[this._featureIndex],i=this._reader;if(0===s)return null;i.move(s);try{r=e?this._parseGeometryForDisplay(i):this._parseGeometry(i)}catch(t){return console.error("Failed to parse geometry!",t),null}}return this._cache.geometry=r,r}return this._cache.geometry}readCentroid(){if(void 0===this._cache.centroid){let e=null;const t=this._header.centroid[2*this._featureIndex]+this._tx,r=this._header.centroid[2*this._featureIndex+1]+this._ty;return t===l?(e=this._computeCentroid(),e&&(this._header.centroid[2*this._featureIndex]=e.coords[0]-this._tx,this._header.centroid[2*this._featureIndex+1]=e.coords[1]-this._ty)):e=new o([],[t,r]),this._cache.centroid=e,e}return this._cache.centroid}copy(){const e=this._reader.clone(),t=new v(this.instance,e,this._header,this.fullSchema());return this.copyInto(t),t}next(){for(this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0;++this._featureIndex<this.size&&!this._getExists(););return this._featureIndex<this.size}_readAttribute(e,t){const r=this._header.hasField(e)?e:p(e),s=this._header.getFieldIndex(r);if(null==s)return;const i=this._readAttributeAtIndex(s);if(!t)return i;if(null==i)return i;return this._header.isDateField(r)?new Date(i):i}_readAttributes(){const e={};return this._header.fields.forEach((({fieldName:t,index:r})=>{e[t]=this._readAttributeAtIndex(r)})),e}copyInto(e){super.copyInto(e),e._featureIndex=this._featureIndex,e._featureOffset=this._featureOffset,e._hasNext=this._hasNext}_readAttributeAtIndex(e){const t=this._header.offsets.attributes[this._featureIndex*this._header.fieldCount+e],r=this._reader;return r.move(t),S(r)}_parseGeometry(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;)a.push(e.getUInt32());break}case r:{const t=e.getUInt32(),r=e.pos()+t;for(n.push(e.getSInt32()+this._tx),n.push(e.getSInt32()+this._ty),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();e.pos()<r;)n.push(e.getSInt32()),n.push(e.getSInt32()),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();break}default:e.skip()}return new o(a,n)}_parseGeometryForDisplay(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];let h=0,d=0,u=null,c=0;const l="esriGeometryPolygon"===this.geometryType;for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;){const t=e.getUInt32();n.push(t),h+=t}u=I(2*h).delta;break}case r:{e.getUInt32();const t=2+(this.hasZ?1:0)+(this.hasM?1:0);for(const r of n)if(d+t*r>u.length)for(let t=0;t<r;t++)e.getSInt32(),e.getSInt32(),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();else if(l&&g){const t=this.getAreaSimplificationThreshold(r,this._header.vertexCount);let s=2,i=1;const n=!1;let h=e.getSInt32(),o=e.getSInt32();u[d++]=h,u[d++]=o,this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();let g=e.getSInt32(),l=e.getSInt32();for(this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();s<r;){let r=e.getSInt32(),n=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();const a=h+g,_=o+l;F(h,o,a,_,a+r,_+n)>=t?(c+=-.5*(a-h)*(_+o),i>1&&G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l):(u[d++]=g,u[d++]=l,i++),h=a,o=_):(r+=g,n+=l),g=r,l=n,s++}i<3||n?d-=2*i:(c+=-.5*(h+g-h)*(o+l+o),G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l,a.push(i)):(u[d++]=g,u[d++]=l,a.push(++i)))}else{let t=0,s=e.getSInt32(),i=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),u[d++]=s,u[d++]=i,t+=1;for(let n=1;n<r;n++){const r=e.getSInt32(),a=e.getSInt32(),h=s+r,o=i+a;c+=-.5*(h-s)*(o+i),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),n>2&&G(u[d-2],u[d-1],r,a)?(u[d-2]+=r,u[d-1]+=a):(u[d++]=r,u[d++]=a,t+=1),s=h,i=o}a.push(t)}break}default:e.skip()}if(this._cache.area=c,!a.length)return null;if(this._tx||this._ty){let e=0;for(const t of a)u[2*e]+=this._tx,u[2*e+1]+=this._ty,e+=t}return new o(a,u)}}export{v as FeatureSetReaderPBF};
|
|
5
|
+
import e from"../../../../../core/Error.js";import t from"../../../../../core/Logger.js";import{isNone as r,isSome as s}from"../../../../../core/maybe.js";import i from"../../../../../core/pbf.js";import{convertToGeometry as n,unquantizeOptimizedGeometry as a}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeature as h}from"../../../../../layers/graphics/OptimizedFeature.js";import o from"../../../../../layers/graphics/OptimizedGeometry.js";import{FeatureSetReader as d}from"./FeatureSetReader.js";import{parseHeader as u}from"./FeatureSetReaderPBFHeader.js";const c=t.getLogger("esri.view.2d.layers.features.support.FeatureSetReaderPBF"),g=!0,l=268435455,_=128,f=128e3,y={small:{delta:new Int32Array(_),decoded:new Int32Array(_)},large:{delta:new Int32Array(f),decoded:new Int32Array(f)}};function I(e){return e<=y.small.delta.length?y.small:(e<=y.large.delta.length||(y.large.delta=new Int32Array(Math.round(1.25*e)),y.large.decoded=new Int32Array(Math.round(1.25*e))),y.large)}function p(e){return e.toLowerCase().trim()}function m(t){try{const e=2,r=new i(new Uint8Array(t),new DataView(t));for(;r.next();){if(r.tag()===e)return x(r.getMessage());r.skip()}}catch(r){const t=new e("query:parsing-pbf","Error while parsing FeatureSet PBF payload",{error:r});c.error(t)}return null}function x(e){const t=1;for(;e.next();){if(e.tag()===t)return e.getMessage();e.skip()}return null}function S(e){const t=1,r=2,s=3,i=4,n=5,a=6,h=7,o=8,d=9,u=e.getLength(),c=e.pos()+u;for(;e.pos()<c&&e.next();)switch(e.tag()){case t:return e.getString();case r:return e.getFloat();case s:return e.getDouble();case i:return e.getSInt32();case n:return e.getUInt32();case a:return e.getInt64();case h:return e.getUInt64();case o:return e.getSInt64();case d:return e.getBool();default:return e.skip(),null}return null}function F(e,t,r,s,i,n){return.5*Math.abs(e*s+r*n+i*t-e*n-r*t-i*s)}function G(e,t,r,s){return 0===e*s-r*t&&e*r+t*s>0}class v extends d{constructor(e,t,r,s){super(e,s),this._hasNext=!1,this._isPoints=!1,this._featureIndex=-1,this._featureOffset=0,this._cache={area:0,unquantGeometry:void 0,geometry:void 0,centroid:void 0,legacyFeature:void 0,optFeature:void 0},this._geometryType=s.geometryType,this._reader=t,this._header=r,this._hasNext=r.hasFeatures,this._isPoints="esriGeometryPoint"===s.geometryType}static fromBuffer(e,t,r=!1){const s=t.geometryType,i=m(e),n=u(i,"esriGeometryPoint"===s,r),a=d.createInstance();return new v(a,i,n,t)}get geometryType(){return this._geometryType}get size(){return this._header.featureCount}get hasZ(){return!1}get hasM(){return!1}get stride(){return 2+(this.hasZ?1:0)+(this.hasM?1:0)}get hasFeatures(){return this._header.hasFeatures}get hasNext(){return this._hasNext}get exceededTransferLimit(){return this._header.exceededTransferLimit}hasField(e){return this._header.hasField(e)||this._header.hasField(p(e))}getFieldNames(){return this._header.fields.map((e=>e.fieldName))}getSize(){return this.size}getQuantizationTransform(){return this._header.transform}getCursor(){return this.copy()}getIndex(){return this._featureIndex}setIndex(e){this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0,this._featureIndex=e}getAttributeHash(){let e="";return this._header.fields.forEach((({index:t})=>{e+=this._readAttributeAtIndex(t)+"."})),e}getObjectId(){return this._readAttributeAtIndex(this._header.objectIdFieldIndex)}getDisplayId(){return this._header.displayIds[this._featureIndex]}setDisplayId(e){this._header.displayIds[this._featureIndex]=e}getGroupId(){return this._header.groupIds[this._featureIndex]}setGroupId(e){this._header.groupIds[this._featureIndex]=e}readLegacyFeature(){if(void 0===this._cache.legacyFeature){var e;const t=this.readCentroid(),r={attributes:this.readAttributes(),geometry:this._isPoints?this.readLegacyPointGeometry():this.readLegacyGeometry(),centroid:null!=(e=t&&{x:t.coords[0],y:t.coords[1]})?e:null};return this._cache.legacyFeature=r,r}return this._cache.legacyFeature}readOptimizedFeature(){if(void 0===this._cache.optFeature){const e=new h(this.readGeometry(),this.readAttributes(),this.readCentroid());return e.objectId=this.getObjectId(),e.displayId=this.getDisplayId(),this._cache.optFeature=e,e}return this._cache.optFeature}getXHydrated(){const e=this._header.centroid[2*this._featureIndex],t=this.getQuantizationTransform();return r(t)?e:e*t.scale[0]+t.translate[0]}getYHydrated(){const e=this._header.centroid[2*this._featureIndex+1],t=this.getQuantizationTransform();return r(t)?e:t.translate[1]-e*t.scale[1]}getX(){return this._header.centroid[2*this._featureIndex]*this._sx+this._tx}getY(){return this._header.centroid[2*this._featureIndex+1]*this._sy+this._ty}readLegacyPointGeometry(){return{x:this.getX(),y:this.getY()}}readLegacyGeometry(e){const t=this.readGeometry(e);return n(t,this.geometryType,!1,!1)}readLegacyCentroid(){const e=this.readCentroid();if(!e)return null;const[t,r]=e.coords;return{x:t,y:r}}readGeometryArea(){return this._cache.area||this.readGeometry(!0),this._cache.area}readUnquantizedGeometry(e=!1){if(void 0===this._cache.unquantGeometry){const t=this.readGeometry(e);if(!t)return this._cache.unquantGeometry=null,null;const r=I(t.coords.length).decoded,s=t.clone(r),i=s.coords;let n=0;for(const e of s.lengths){for(let t=1;t<e;t++){const e=2*(n+t),r=2*(n+t-1);i[e]+=i[r],i[e+1]+=i[r+1]}n+=e}return this._cache.unquantGeometry=s,s}return this._cache.unquantGeometry}readHydratedGeometry(){if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getXHydrated(),t=this.getYHydrated();return new o([],[e,t])}const e=this.readGeometry();if(!e)return null;const t=e.clone(),r=this.getQuantizationTransform();return s(r)&&a(t,t,this.hasZ,this.hasM,r),t}readGeometry(e=!1){if(void 0===this._cache.geometry){let r=null;if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getX(),t=this.getY();r=new o([],[e,t])}else{const s=this._header.offsets.geometry[this._featureIndex],i=this._reader;if(0===s)return null;i.move(s);try{r=e?this._parseGeometryForDisplay(i):this._parseGeometry(i)}catch(t){return console.error("Failed to parse geometry!",t),null}}return this._cache.geometry=r,r}return this._cache.geometry}readCentroid(){if(void 0===this._cache.centroid){let e=null;const t=this._header.centroid[2*this._featureIndex]+this._tx,r=this._header.centroid[2*this._featureIndex+1]+this._ty;return t===l?(e=this._computeCentroid(),e&&(this._header.centroid[2*this._featureIndex]=e.coords[0]-this._tx,this._header.centroid[2*this._featureIndex+1]=e.coords[1]-this._ty)):e=new o([],[t,r]),this._cache.centroid=e,e}return this._cache.centroid}copy(){const e=this._reader.clone(),t=new v(this.instance,e,this._header,this.fullSchema());return this.copyInto(t),t}next(){for(this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0;++this._featureIndex<this.size&&!this._getExists(););return this._featureIndex<this.size}_readAttribute(e,t){const r=this._header.hasField(e)?e:p(e),s=this._header.getFieldIndex(r);if(null==s)return;const i=this._readAttributeAtIndex(s);if(!t)return i;if(null==i)return i;return this._header.isDateField(r)?new Date(i):i}_readAttributes(){const e={};return this._header.fields.forEach((({fieldName:t,index:r})=>{e[t]=this._readAttributeAtIndex(r)})),e}copyInto(e){super.copyInto(e),e._featureIndex=this._featureIndex,e._featureOffset=this._featureOffset,e._hasNext=this._hasNext}_readAttributeAtIndex(e){const t=this._header.offsets.attributes[this._featureIndex*this._header.fieldCount+e],r=this._reader;return r.move(t),S(r)}_parseGeometry(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;)a.push(e.getUInt32());break}case r:{const t=e.getUInt32(),r=e.pos()+t;for(n.push(e.getSInt32()+this._tx),n.push(e.getSInt32()+this._ty),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();e.pos()<r;)n.push(e.getSInt32()),n.push(e.getSInt32()),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();break}default:e.skip()}return new o(a,n)}_parseGeometryForDisplay(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];let h=0,d=0,u=null,c=0;const l="esriGeometryPolygon"===this.geometryType;for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;){const t=e.getUInt32();n.push(t),h+=t}u=I(2*h).delta;break}case r:{e.getUInt32();const t=2+(this.hasZ?1:0)+(this.hasM?1:0);for(const r of n)if(d+t*r>u.length)for(let t=0;t<r;t++)e.getSInt32(),e.getSInt32(),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();else if(l&&g){const t=this.getAreaSimplificationThreshold(r,this._header.vertexCount);let s=2,i=1;const n=!1;let h=e.getSInt32(),o=e.getSInt32();u[d++]=h,u[d++]=o,this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();let g=e.getSInt32(),l=e.getSInt32();for(this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();s<r;){let r=e.getSInt32(),n=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();const a=h+g,_=o+l;F(h,o,a,_,a+r,_+n)>=t?(c+=-.5*(a-h)*(_+o),i>1&&G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l):(u[d++]=g,u[d++]=l,i++),h=a,o=_):(r+=g,n+=l),g=r,l=n,s++}i<3||n?d-=2*i:(c+=-.5*(h+g-h)*(o+l+o),G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l,a.push(i)):(u[d++]=g,u[d++]=l,a.push(++i)))}else{let t=0,s=e.getSInt32(),i=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),u[d++]=s,u[d++]=i,t+=1;for(let n=1;n<r;n++){const r=e.getSInt32(),a=e.getSInt32(),h=s+r,o=i+a;c+=-.5*(h-s)*(o+i),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),n>2&&G(u[d-2],u[d-1],r,a)?(u[d-2]+=r,u[d-1]+=a):(u[d++]=r,u[d++]=a,t+=1),s=h,i=o}a.push(t)}break}default:e.skip()}if(this._cache.area=c,!a.length)return null;if(this._tx||this._ty){let e=0;for(const t of a)u[2*e]+=this._tx,u[2*e+1]+=this._ty,e+=t}return new o(a,u)}}export{v as FeatureSetReaderPBF};
|
|
@@ -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{isDevEnvironment as t,adjustStaticAGOUrl as r}from"../../../../core/devEnvironmentUtils.js";import e from"../../../../core/Error.js";import{throwIfAborted as o}from"../../../../core/promiseUtils.js";import{urlToObject as n}from"../../../../core/urlUtils.js";import s from"../../../../portal/Portal.js";import{f as l}from"../../../../chunks/persistableUrlUtils.js";import{fetchStyle as m,Style2DUrlTemplate as a,requestJSON as i,makeCIMSymbolRef as c,symbolUrlFromStyleItem as u}from"../../../../symbols/support/styleUtils.js";async function y(t,r,n){if(!t.name)
|
|
5
|
+
import{isDevEnvironment as t,adjustStaticAGOUrl as r}from"../../../../core/devEnvironmentUtils.js";import e from"../../../../core/Error.js";import{throwIfAborted as o}from"../../../../core/promiseUtils.js";import{urlToObject as n}from"../../../../core/urlUtils.js";import s from"../../../../portal/Portal.js";import{f as l}from"../../../../chunks/persistableUrlUtils.js";import{fetchStyle as m,Style2DUrlTemplate as a,requestJSON as i,makeCIMSymbolRef as c,symbolUrlFromStyleItem as u}from"../../../../symbols/support/styleUtils.js";async function y(t,r,n){if(!t.name)throw new e("style-symbol-reference-name-missing","Missing name in style symbol reference");if(t.styleName&&"Esri2DPointSymbolsStyle"===t.styleName)return f(t,n);try{return p(await m(t,r,n),t.name,r,n)}catch(s){return o(s),null}}async function f(t,r){const e=a.replace(/\{SymbolName\}/gi,t.name);try{const t=await i(e,r);return c(t.data)}catch(n){return o(n),null}}async function p(m,a,y,f){const p=m.data,b={portal:y&&y.portal||s.getDefault(),url:n(m.baseUrl),origin:"portal-item"},d=p.items.find((t=>t.name===a));if(!d){throw new e("symbolstyleutils:symbol-name-not-found",`The symbol name '${a}' could not be found`,{symbolName:a})}let h=l(u(d,"cimRef"),b);t()&&(h=r(h));try{const t=await i(h,f);return c(t.data)}catch(j){return o(j),null}}export{y as fetchCIMSymbolReference};
|
|
@@ -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 t}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import e from"../../../../core/Accessor.js";import i from"../../../../core/Evented.js";import o from"../../../../core/Handles.js";import{handlesGroup as n,makeHandle as s}from"../../../../core/handleUtils.js";import r from"../../../../core/Logger.js";import{isSome as a,isNone as c,abortMaybe as l,removeMaybe as p,none as u}from"../../../../core/maybe.js";import{createTask as h,ignoreAbortErrors as d}from"../../../../core/promiseUtils.js";import{watch as m,initial as g,syncAndInitial as v,sync as _}from"../../../../core/reactiveUtils.js";import{property as y}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as C}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as f,b,n as T,g as O,a as P,j as I,v as j}from"../../../../chunks/vec3.js";import{a as w,c as S}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as A}from"../../../../core/support/WatchUpdatingTracking.js";import{projectPoint as E,projectBoundingRect as L}from"../../../../geometry/projection.js";import{containsPointObject as R,intersectsSegment as V,empty as H}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as D,create as x}from"../../../../geometry/support/ray.js";import{LineOfSightAnalysisResult as k}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as U}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as z,applyProjectionAndElevationAlignment as F}from"../support/projectionUtils.js";import{IntersectorType as G}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as M}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as B,TaskPriority as q}from"../../../support/Scheduler.js";import J from"../../../../geometry/Point.js";const W=r.getLogger("esri.views.3d.analysis.LineOfSight.LineOfSightController");let K=class extends(i.EventedMixin(e)){constructor(t){super(t),this.updateOnCameraChange=!0,this._updatingHandles=new A,this._frameTask=B,this._handles=new o,this._computationHandles=new o,this._externalObserverUpdate=!0}initialize(){var t;const e=null==(t=this.view.resourceController)?void 0:t.scheduler;this._frameTask=e?e.registerTask(q.LINE_OF_SIGHT_TOOL):B,this._intersector=new U({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(t){this._frameTask.priority=t}get _computations(){return this.analysisViewData.computations}get _observerEngineLocation(){return this.analysisViewData.observerEngineLocation}set _observerEngineLocation(t){this.analysisViewData.observerEngineLocation=t}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._observerEngineLocation)}getLineOfSightComputationDependencies(t){const{inputPoints:e}=t;return{inputPoints:e}}_computeResult(t){const e=t.computation,{inputPoints:i,computationResult:o}=e,{observerAdjusted:n,targetAdjusted:s}=i,{start:r,end:a}=o;f(r,n),f(a,s);this._canCompute(e)?this._computeIntersection(t):this._interpolateIntersection(t),e.notifyResultChanged(),this.emit("result-changed",{target:t.computation.target,result:e.result})}_adjustStartEndPositions(t){const e=this._screenPixelSize,i=this.view,{inputPoints:o}=t,{observer:n,observerSurfaceNormal:s,target:r,targetSurfaceNormal:c,observerAdjusted:l,targetAdjusted:p}=o,u=Y;a(s)?f(u,s):b(u,r,n);const h=e;T(u,u),O(u,u,Math.min(h,1)),P(l,n,u),a(c)?f(u,c):b(u,n,r);const d=i.state.camera.computeScreenPixelSizeAt(r);T(u,u),O(u,u,Math.min(d,1)),P(p,r,u)}_computeIntersection({computation:t,interpolationInfo:e}){const{view:i}=this,{sceneIntersectionHelper:o,renderCoordsHelper:n}=i;if(c(o))return;const s=this._intersector.intersector,{computationResult:r,inputPoints:l}=t,{observer:p,target:u}=l,{start:h,end:d}=r,m=D(h,d,Z);o.intersectToolIntersectorRay(m,s);const g=r.intersection,v=Y;let _=!0;if(s.results.min.getIntersectionPoint(g)){f(e.originalIntersection,g),f(e.originalObserver,h),f(e.originalTarget,d),n.fromRenderCoords(g,v,i.spatialReference);const t=1-I(d,u)/I(h,u);_=I(p,g)>=t*I(p,u)}const y=new J(v,i.spatialReference);{const{result:e,target:o}=t;a(e)?(e.target=o,e.intersectedGraphic=_?null:M(s.results.min,i),e.intersectedLocation=_?null:y,e.visible=_):t.result=new k({target:o,elevationAlignedTargetLocation:t.elevationAlignedTargetLocation,intersectedGraphic:_?null:M(s.results.min,i),intersectedLocation:_?null:y,visible:_})}r.isValid=l.isValid=!0,r.isTargetVisible=_}_interpolateIntersection({computation:t,interpolationInfo:e}){const{computationResult:i,inputPoints:o}=t,{start:n,end:s,intersection:r}=i,{originalIntersection:a,originalObserver:c,originalTarget:l}=e;if(f(r,a),o.isValid){const t=Y,e=I(c,a)/I(c,l);j(t,n,c),O(t,t,1-e),P(r,r,t),j(t,s,l),O(t,t,e),P(r,r,t),i.isValid=!0}else t.result=null,i.isValid=!1,i.isTargetVisible=!1}_canCompute(t){const e=this.analysisViewData.elevationAlignedObserver,i=this.view.frustum;if(c(e)||c(t.elevationAlignedTargetLocation)||c(i))return!1;const{observerAdjusted:o,targetAdjusted:n}=t.inputPoints,s=i.intersectsPoint(o),r=i.intersectsPoint(n);return s&&r}_onObserverPositionChange(t,e,i){if(this._externalObserverUpdate=i,c(t))return void(this.analysisViewData.elevationAlignedObserver=null);const o=this._applyProjectionAndElevationAlignment(t,e);if(c(o))return z(this.analysis,t.spatialReference,W),void(this.analysisViewData.elevationAlignedObserver=null);const n=S();this.analysisViewData.elevationAlignedObserver=o,this.view.renderCoordsHelper.toRenderCoords(this.analysisViewData.elevationAlignedObserver,n),this._observerEngineLocation=n,this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_applyProjectionAndElevationAlignment(t,e){const i=a(e)&&e.type!==G.OBJECT;return F(t,this.view.spatialReference,this.view.elevationProvider,i)}_onObserverRenderSpacePositionChangeForComputation(t,e,i){const{inputPoints:o}=t;if(f(o.observer,e),a(i)){const t=this._intersector.updateFromIntersectionResult(i);a(t)&&this.view.renderCoordsHelper.toRenderCoords(t,o.observer),o.observerSurfaceNormal=w(i.normal)}else o.observerSurfaceNormal=null;this._adjustStartEndPositions(t),t.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(t,e,i,o=!0){const n=t.inputPoints;if(o&&(n.isValid=!1),t.elevationAlignedTargetLocation=this._applyProjectionAndElevationAlignment(e,i),c(t.elevationAlignedTargetLocation))z(this.analysis,e.spatialReference,W);else{if(this.view.renderCoordsHelper.toRenderCoords(t.elevationAlignedTargetLocation,n.target),a(i)){const t=this._intersector.updateFromIntersectionResult(i);a(t)&&this.view.renderCoordsHelper.toRenderCoords(t,n.target),n.targetSurfaceNormal=w(i.normal)}else n.targetSurfaceNormal=null;this._adjustStartEndPositions(t)}t.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(t){return n([m((()=>t.target.position),(e=>{Q(e,t.target.intersection)||(t.target.intersection=null)}),g),m((()=>({computation:t,targetPosition:t.target.position,targetIntersection:t.target.intersection})),(({computation:t,targetPosition:e,targetIntersection:i})=>{a(e)&&this._onTargetPositionChange(t,e,i)}),v)])}_connectComputationToObserver(t){return m((()=>({computation:t,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:t})=>{this._externalObserverUpdate&&(t.inputPoints.isValid=!1,t.notifyInputPointsChanged())}),v)}_connectComputationToRenderSpaceObserver(t){return m((()=>({computation:t,observer:this._observerEngineLocation,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({computation:t,observer:e,observerIntersection:i})=>{this._onObserverRenderSpacePositionChangeForComputation(t,e,i)}),v)}_connectComputationToCamera(t){return m((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:e})=>{!this.updateOnCameraChange||t.inputPoints.isValid&&!e||t.notifyInputPointsChanged()}),_)}_connectComputationToSlicePlane(t){return m((()=>this.view.slicePlane),(()=>t.notifyInputPointsChanged()))}_connectComputationToElevation(t){return this.view.elevationProvider.on("elevation-change",(e=>{const i=this.analysis.observer,o=t.target;let n=null,s=null,r=null,l=null;const p=a(i)&&a(i.position)?i.position.spatialReference:a(o.position)?o.position.spatialReference:e.spatialReference;a(i)&&a(i.position)&&(n=tt,s=i.intersection,E(i.position,n,p)),a(o.position)&&(r=et,l=o.intersection,E(o.position,r,p)),c(n)&&c(r)||(L(e.extent,e.spatialReference,$,p),a(n)&&R($,n)&&this._onObserverPositionChange(n,s,!1),a(r)&&R($,r)&&this._onTargetPositionChange(t,r,l,!1),a(n)&&a(r)&&V($,n,r)&&t.notifyInputPointsChanged())}))}_connectComputationToTask(t){let e=u;const i={computation:t,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return n([m((()=>this.getLineOfSightComputationDependencies(t)),(()=>{e=l(e),e=h((async t=>{await d(this._frameTask.schedule((()=>this._computeResult(i)),t))}))}),v),s((()=>e=l(e)))])}_connectComputation(t){const e=this._computationHandles;e.has(t)||e.add([this._connectComputationToTarget(t),this._connectComputationToObserver(t),this._connectComputationToRenderSpaceObserver(t),this._connectComputationToCamera(t),this._connectComputationToSlicePlane(t),this._connectComputationToElevation(t),this._connectComputationToTask(t)],t)}_disconnectAnalysis(t){this._computationHandles.remove(t)}_onComputationCollectionChange(t){t.added.forEach((t=>this._connectComputation(t))),t.removed.forEach((t=>this._disconnectAnalysis(t)))}_onTargetsChange(){return this._computations.removeAll(),this.analysis.targets.forEach((t=>this._addTarget(t))),this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(t=>this._onTargetCollectionChange(t)))}_onTargetCollectionChange(t){t.added.forEach((t=>this._addTarget(t))),t.removed.forEach((t=>this._removeTarget(t)))}_onCursorTargetChange(t,e){a(e)&&this._removeTarget(e),a(t)&&this._addTarget(t)}_addTarget(t){this._computations.some((e=>e.target===t))||this._computations.add(new N({target:t}))}_removeTarget(t){const e=this._computations.find((e=>e.target===t));this._computations.remove(e)}_connectObserver(){return n([m((()=>({observer:this.analysis.observer,observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observer:t,observerPosition:e,observerIntersection:i})=>{a(t)&&!Q(e,i)&&(t.intersection=null)}),g),m((()=>({observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observerPosition:t,observerIntersection:e})=>this._onObserverPositionChange(t,e,!0)),v)])}_connectComputations(){let t=null;return n([m((()=>this._computations),(()=>{p(t),t=this._updatingHandles.addOnCollectionChange((()=>this._computations),(t=>this._onComputationCollectionChange(t))),this._computations.forEach((t=>this._connectComputation(t)))}),v),s((()=>t=p(t)))])}_connectTargets(){let t=null;return n([m((()=>this.analysis.targets),(()=>{t=p(t),t=this._onTargetsChange()}),v),m((()=>this.analysisViewData.cursorTarget),((t,e)=>{this._onCursorTargetChange(t,e)})),s((()=>{t=p(t)}))])}get _isCameraDirty(){const t=this.analysisViewData.elevationAlignedObserver,{view:e}=this,{renderCoordsHelper:i}=e;if(c(t)||c(i))return!1;const o=Y;i.toRenderCoords(t,o);const n=e.state.camera.computeScreenPixelSizeAt(o);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>X}};function Q(t,e){return c(e)||a(t)&&t.equals(e.point)}t([y({constructOnly:!0})],K.prototype,"analysis",void 0),t([y({constructOnly:!0})],K.prototype,"analysisViewData",void 0),t([y({constructOnly:!0})],K.prototype,"view",void 0),t([y()],K.prototype,"updating",null),t([y()],K.prototype,"priority",null),t([y()],K.prototype,"updateOnCameraChange",void 0),t([y()],K.prototype,"_computations",null),t([y()],K.prototype,"_observerEngineLocation",null),t([y()],K.prototype,"_screenPixelSize",null),t([y({readOnly:!0})],K.prototype,"_updatingHandles",void 0),t([y()],K.prototype,"_frameTask",void 0),t([y()],K.prototype,"_isCameraDirty",null),K=t([C("esri.views.3d.analysis.LineOfSight.LineOfSightController")],K);const X=.1,Y=S(),Z=x(),$=H(),tt=new J,et=new J;export{K as LineOfSightController};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import t from"../../../../core/Accessor.js";import i from"../../../../core/Evented.js";import o from"../../../../core/Handles.js";import{handlesGroup as n,makeHandle as s}from"../../../../core/handleUtils.js";import r from"../../../../core/Logger.js";import{isSome as a,isNone as l,abortMaybe as c,removeMaybe as p,unwrapOr as u,none as h}from"../../../../core/maybe.js";import{createTask as d,ignoreAbortErrors as g}from"../../../../core/promiseUtils.js";import{watch as v,initial as m,syncAndInitial as _,sync as f}from"../../../../core/reactiveUtils.js";import{property as b}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as C,b as T,n as O,g as I,a as P,j as S,v as w}from"../../../../chunks/vec3.js";import{c as j}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as E}from"../../../../core/support/WatchUpdatingTracking.js";import{tryProjectWithZConversion as R,projectPoint as A,projectBoundingRect as L}from"../../../../geometry/projection.js";import{containsPointObject as V,intersectsSegment as H,empty as D}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as x,create as k}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as z}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as N}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as U}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as M}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{toGraphic as G}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as q,TaskPriority as B}from"../../../support/Scheduler.js";import W from"../../../../geometry/Point.js";const Z=r.getLogger("esri.views.3d.analysis.LineOfSight.LineOfSightController");let J=class extends(i.EventedMixin(t)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._updatingHandles=new E,this._frameTask=q,this._handles=new o,this._computationHandles=new o,this._externalObserverUpdate=!0}initialize(){var e;const t=null==(e=this.view.resourceController)?void 0:e.scheduler;this._frameTask=t?t.registerTask(B.LINE_OF_SIGHT_TOOL):q,this._intersector=new M({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}getLineOfSightComputationDependencies(e){const{inputPoints:t}=e;return{inputPoints:t}}_computeResult(e){const t=e.computation,{inputPoints:i,computationResult:o}=t,{observerAdjusted:n,targetAdjusted:s}=i,{start:r,end:a}=o;C(r,n),C(a,s);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){const t=this._screenPixelSize,i=this.view,{inputPoints:o}=e,{observer:n,observerSurfaceNormal:s,target:r,targetSurfaceNormal:l,observerAdjusted:c,targetAdjusted:p}=o,u=X;a(s)?C(u,s):T(u,r,n);const h=t;O(u,u),I(u,u,Math.min(h,1)),P(c,n,u),a(l)?C(u,l):T(u,n,r);const d=i.state.camera.computeScreenPixelSizeAt(r);O(u,u),I(u,u,Math.min(d,1)),P(p,r,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:i}=this,{sceneIntersectionHelper:o,renderCoordsHelper:n}=i;if(l(o))return;const s=this._intersector.intersector,{computationResult:r,inputPoints:c}=e,{observer:p,target:u}=c,{start:h,end:d}=r,g=x(h,d,Y);o.intersectToolIntersectorRay(g,s);const v=r.intersection,m=X;let _=!0;if(s.results.min.getIntersectionPoint(v)){C(t.originalIntersection,v),C(t.originalObserver,h),C(t.originalTarget,d),n.fromRenderCoords(v,m,i.spatialReference);const e=1-S(d,u)/S(h,u);_=S(p,v)>=e*S(p,u)}const f=new W(m,i.spatialReference);{const{result:t,target:o}=e;a(t)?(t.target=o,t.intersectedGraphic=_?null:G(s.results.min,i),t.intersectedLocation=_?null:f,t.visible=_):e.result=new N({target:o,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:_?null:G(s.results.min,i),intersectedLocation:_?null:f,visible:_})}r.isValid=c.isValid=!0,r.isTargetVisible=_}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:i,inputPoints:o}=e,{start:n,end:s,intersection:r}=i,{originalIntersection:a,originalObserver:l,originalTarget:c}=t;if(C(r,a),o.isValid){const e=X,t=S(l,a)/S(l,c);w(e,n,l),I(e,e,1-t),P(r,r,e),w(e,s,c),I(e,e,t),P(r,r,e),i.isValid=!0}else e.result=null,i.isValid=!1,i.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,i=this.view.frustum;if(l(t)||l(e.elevationAlignedTargetLocation)||l(i))return!1;const{observerAdjusted:o,targetAdjusted:n}=e.inputPoints,s=i.intersectsPoint(o),r=i.intersectsPoint(n);return s&&r}_onObserverPositionChange(e,t,i,o){if(this._externalObserverUpdate=o,l(e))return void(this.analysisViewData.elevationAlignedObserver=null);const n=R(e,this.view.spatialReference);if(l(n))return F(this.analysis,e.spatialReference,Z),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(n,t);n.z=z(n.x,n.y,n.z,this.view.spatialReference,this.view,s),this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=n;const r=j();this.view.renderCoordsHelper.toRenderCoords(n,r),this._elevationAlignedObserverPositionRenderSpace=r,this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,i,o){const{inputPoints:n}=e;switch(C(n.observer,t),i){case"on-the-ground":case"relative-to-ground":n.observerSurfaceNormal=this._intersector.adjustFromGroundIntersection(t,n.observer);break;case"relative-to-scene":case"absolute-height":n.observerSurfaceNormal=null}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,i,o,n=!0){const s=e.inputPoints;n&&(s.isValid=!1);const r=R(t,this.view.spatialReference);if(l(r))return F(this.analysis,t.spatialReference,Z),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const a=this._getEffectiveElevationInfo(r,i);switch(r.z=z(r.x,r.y,r.z,this.view.spatialReference,this.view,a),e.elevationAlignedTargetLocation=r,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),a.mode){case"on-the-ground":case"relative-to-ground":s.targetSurfaceNormal=this._intersector.adjustFromGroundIntersection(s.target,s.targetAdjusted);break;case"relative-to-scene":case"absolute-height":s.targetSurfaceNormal=null}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return n([v((()=>e.target.position),(t=>{K(t,e.target.intersection)||(e.target.intersection=null)}),m),v((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetIntersection:e.target.intersection})),(({computation:e,targetPosition:t,targetElevationInfo:i,targetIntersection:o})=>{a(t)&&this._onTargetPositionChange(e,t,i,o)}),_)])}_connectComputationToObserver(e){return v((()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())}),_)}_connectComputationToRenderSpaceObserver(e){return v((()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({computation:e,observer:t,observerElevationMode:i,observerIntersection:o})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,i,o)}),_)}_connectComputationToCamera(e){return v((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}),f)}_connectComputationToSlicePlane(e){return v((()=>this.view.slicePlane),(()=>e.notifyInputPointsChanged()))}_connectComputationToElevation(e){return this.view.elevationProvider.on("elevation-change",(t=>{const i=this.analysis.observer,o=e.target;let n=null,s=null,r=null,c=null,p=null,u=null;const h=a(i)&&a(i.position)?i.position.spatialReference:a(o.position)?o.position.spatialReference:t.spatialReference;a(i)&&a(i.position)&&(n=ee,s=i.elevationInfo,r=i.intersection,A(i.position,n,h)),a(o.position)&&(c=te,p=o.elevationInfo,u=o.intersection,A(o.position,c,h)),l(n)&&l(c)||(L(t.extent,t.spatialReference,$,h),a(n)&&V($,n)&&this._onObserverPositionChange(n,s,r,!1),a(c)&&V($,c)&&this._onTargetPositionChange(e,c,p,u,!1),a(n)&&a(c)&&H($,n,c)&&e.notifyInputPointsChanged())}))}_connectComputationToTask(e){let t=h;const i={computation:e,interpolationInfo:{originalIntersection:j(),originalObserver:j(),originalTarget:j()}};return n([v((()=>this.getLineOfSightComputationDependencies(e)),(()=>{t=c(t),t=d((async e=>{await g(this._frameTask.schedule((()=>this._computeResult(i)),e))}))}),_),s((()=>t=c(t)))])}_connectComputation(e){const t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e)],e)}_disconnectAnalysis(e){this._computationHandles.remove(e)}_onComputationCollectionChange(e){e.added.forEach((e=>this._connectComputation(e))),e.removed.forEach((e=>this._disconnectAnalysis(e)))}_onTargetsChange(){return this._computations.removeAll(),this.analysis.targets.forEach((e=>this._addTarget(e))),this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)))}_onTargetCollectionChange(e){e.added.forEach((e=>this._addTarget(e))),e.removed.forEach((e=>this._removeTarget(e)))}_onCursorTargetChange(e,t){a(t)&&this._removeTarget(t),a(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new U({target:e}))}_removeTarget(e){const t=this._computations.find((t=>t.target===e));this._computations.remove(t)}_connectObserver(){return n([v((()=>({observer:this.analysis.observer,observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observer:e,observerPosition:t,observerIntersection:i})=>{a(e)&&!K(t,i)&&(e.intersection=null)}),m),v((()=>({observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerElevationInfo:a(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observerPosition:e,observerElevationInfo:t,observerIntersection:i})=>this._onObserverPositionChange(e,t,i,!0)),_)])}_connectComputations(){let e=null;return n([v((()=>this._computations),(()=>{p(e),e=this._updatingHandles.addOnCollectionChange((()=>this._computations),(e=>this._onComputationCollectionChange(e))),this._computations.forEach((e=>this._connectComputation(e)))}),_),s((()=>e=p(e)))])}_connectTargets(){let e=null;return n([v((()=>this.analysis.targets),(()=>{e=p(e),e=this._onTargetsChange()}),_),v((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)})),s((()=>{e=p(e)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:i}=t;if(l(e)||l(i))return!1;const o=X;i.toRenderCoords(e,o);const n=t.state.camera.computeScreenPixelSizeAt(o);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>Q}_getEffectiveElevationInfo(e,t){return e.hasZ?u(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};function K(e,t){return l(t)||a(e)&&e.equals(t.point)}e([b({constructOnly:!0})],J.prototype,"analysis",void 0),e([b({constructOnly:!0})],J.prototype,"analysisViewData",void 0),e([b({constructOnly:!0})],J.prototype,"view",void 0),e([b()],J.prototype,"updating",null),e([b()],J.prototype,"priority",null),e([b()],J.prototype,"updateOnCameraChange",void 0),e([b()],J.prototype,"_computations",null),e([b()],J.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([b()],J.prototype,"_effectiveObserverElevationMode",void 0),e([b()],J.prototype,"_screenPixelSize",null),e([b({readOnly:!0})],J.prototype,"_updatingHandles",void 0),e([b()],J.prototype,"_frameTask",void 0),e([b()],J.prototype,"_isCameraDirty",null),J=e([y("esri.views.3d.analysis.LineOfSight.LineOfSightController")],J);const Q=.1,X=j(),Y=k(),$=D(),ee=new W,te=new W;export{J as LineOfSightController};
|
|
@@ -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 o from"../../../../core/Accessor.js";import{equals as t}from"../../../../core/arrayUtils.js";import{clone as s}from"../../../../core/lang.js";import{equalsMaybe as
|
|
5
|
+
import{_ as r}from"../../../../chunks/tslib.es6.js";import o from"../../../../core/Accessor.js";import{equals as t}from"../../../../core/arrayUtils.js";import{clone as s}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{property as e}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as p}from"../../../../core/accessorSupport/decorators/subclass.js";import{equals as c}from"../../../../geometry/support/ray.js";var a;let n=a=class extends o{constructor(r){super(r)}clone(){return new a({type:this.type,id:s(this.id),point:s(this.point),normal:s(this.normal),ray:s(this.ray),graphic:this.graphic})}equals(r){return this.type===r.type&&this.id===r.id&&i(this.point,r.point)&&t(this.normal,r.normal)&&c(this.ray,r.ray)&&this.graphic===r.graphic}};r([e()],n.prototype,"type",void 0),r([e({constructOnly:!0})],n.prototype,"id",void 0),r([e({constructOnly:!0})],n.prototype,"point",void 0),r([e({constructOnly:!0})],n.prototype,"normal",void 0),r([e({constructOnly:!0})],n.prototype,"graphic",void 0),r([e({constructOnly:!0})],n.prototype,"ray",void 0),n=a=r([p("esri.views.3d.analysis.LineOfSight.LineOfSightIntersectionResult")],n);export{n as LineOfSightIntersectionResult};
|