@arcgis/core 4.23.0-next.20220119 → 4.23.0-next.20220123
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/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0bf079e752ab79468478.js +1 -0
- package/assets/esri/core/workers/chunks/199670a3a564ebe3bd79.js +1 -0
- package/assets/esri/core/workers/chunks/1e4d37c2b9dc83d20a11.js +1 -0
- package/assets/esri/core/workers/chunks/{99f0d896c17dd09cd285.js → 2629adf79e7fd9f25f07.js} +1 -1
- package/assets/esri/core/workers/chunks/{8a250ec51097f16feb66.js → 40a1e713f63ec77110c0.js} +1 -1
- package/assets/esri/core/workers/chunks/{4b69129c0557852d9b3d.js → 4c9084a04948b6924749.js} +1 -1
- package/assets/esri/core/workers/chunks/{1b28042fdf3f4dbc8ea5.js → 5383a8f3e4ec1a8a4fcd.js} +1 -1
- package/assets/esri/core/workers/chunks/{9d9dffc8884d66a258e4.js → 5538639a49c7cc2eca63.js} +1 -1
- package/assets/esri/core/workers/chunks/5a4a5585ec8027079f32.js +1 -0
- package/assets/esri/core/workers/chunks/663ad15b86936eb06b69.js +1 -0
- package/assets/esri/core/workers/chunks/68a59ce98177d8513337.js +1 -0
- package/assets/esri/core/workers/chunks/739e579150bf466d43ae.js +1 -0
- package/assets/esri/core/workers/chunks/74df1f3e1e2e524a89d2.js +1 -0
- package/assets/esri/core/workers/chunks/7baf6b1f3f050aa67ae4.js +1 -0
- package/assets/esri/core/workers/chunks/{47395d225229d237f0ac.js → 7bc5cc5dbf1b7b70ddac.js} +1 -1
- package/assets/esri/core/workers/chunks/8fa0a14165d43ffe87a5.js +1 -0
- package/assets/esri/core/workers/chunks/94b8dbf859df71858d1c.js +1 -0
- package/assets/esri/core/workers/chunks/{e2d68bcd2f99a65387bf.js → 9cb2ae42a8e328b1d98d.js} +1 -1
- package/assets/esri/core/workers/chunks/9d3c58a0ef634d95b7bd.js +1 -0
- package/assets/esri/core/workers/chunks/a78757b9c7e8cbea08fa.js +1 -0
- package/assets/esri/core/workers/chunks/a96afc176041f698c7a1.js +1 -0
- package/assets/esri/core/workers/chunks/{b10fcbe1393c812fc219.js → aa861b8eae6c85f3dad4.js} +1 -1
- package/assets/esri/core/workers/chunks/{a960074644c3722be71e.js → afa6912454f2a5ffadce.js} +1 -1
- package/assets/esri/core/workers/chunks/b0b036ad3ad3cd956747.js +1 -0
- package/assets/esri/core/workers/chunks/b2beb6e1fd2ee6503830.js +1 -0
- package/assets/esri/core/workers/chunks/bab1cfd0a901181622af.js +1 -0
- package/assets/esri/core/workers/chunks/bf6dda4a2af14c4b7716.js +1 -0
- package/assets/esri/core/workers/chunks/{ed0297fc61014e848c18.js → c080114a69fa95b88d22.js} +1 -1
- package/assets/esri/core/workers/chunks/{573dc3064e84ca86844d.js → c959e0d1cf7dce0421b9.js} +1 -1
- package/assets/esri/core/workers/chunks/{1fd48459afb58a6cf14f.js → ca2f5faa01d99c21ec14.js} +1 -1
- package/assets/esri/core/workers/chunks/{7aa543a97f055cddea99.js → cc146c57bbdac8029fd8.js} +1 -1
- package/assets/esri/core/workers/chunks/{631c5b514bb73782c570.js → cd7d83d127e085d52584.js} +1 -1
- package/assets/esri/core/workers/chunks/{7e596478507466953e65.js → cef4af64860ebbfc1c47.js} +1 -1
- package/assets/esri/core/workers/chunks/d72488db62fcf39447b6.js +1 -0
- package/assets/esri/core/workers/chunks/de6cff7b6cbbf99b20d1.js +981 -0
- package/assets/esri/core/workers/chunks/e079cb1d53aca15b7df2.js +1 -0
- package/assets/esri/core/workers/chunks/{f7fc4c993536e62f7f3e.js → e97e986120aaadad7d4c.js} +1 -1
- package/assets/esri/core/workers/chunks/f8e7755240a94b499e1f.js +1 -0
- package/assets/esri/libs/vxl/vxlLayer.wasm +0 -0
- package/chunks/CloudsComposition.glsl.js +4 -4
- package/chunks/vxlLayer.js +1 -1
- package/core/has.js +1 -1
- package/core/workers/workerFactory.js +1 -1
- package/geometry/support/heightModelInfoUtils.js +1 -1
- package/interfaces.d.ts +279 -76
- package/layers/RouteLayer.js +1 -1
- package/layers/VoxelLayer.js +1 -1
- package/layers/VoxelWasmPerScene.js +1 -1
- package/layers/support/RasterWorker.js +1 -1
- package/layers/support/rasterDatasets/BaseRaster.js +1 -1
- package/layers/support/rasterFunctions/rasterProjectionHelper.js +1 -1
- package/libs/vxl/enums.js +1 -1
- package/package.json +1 -1
- package/portal/schemas/buildingSceneLayerItem.js +1 -1
- package/portal/schemas/definitions.js +1 -1
- package/portal/schemas/integratedMeshLayerItem.js +1 -1
- package/portal/schemas/pointCloudLayerItem.js +1 -1
- package/portal/schemas/sceneLayerItem.js +1 -1
- package/portal/schemas/webScene.js +1 -1
- package/rest/find.js +1 -1
- package/rest/geometryService/generalize.js +1 -1
- package/rest/geometryService/lengths.js +1 -1
- package/rest/geometryService/offset.js +1 -1
- package/rest/geometryService/relation.js +1 -1
- package/rest/geometryService/trimExtend.js +1 -1
- package/rest/identify.js +1 -1
- package/{tasks → rest}/operations/find.js +0 -0
- package/{tasks → rest}/operations/generalize.js +0 -0
- package/rest/operations/identify.js +5 -0
- package/{tasks → rest}/operations/lengths.js +0 -0
- package/{tasks → rest}/operations/offset.js +0 -0
- package/{tasks → rest}/operations/relation.js +0 -0
- package/{tasks → rest}/operations/trimExtend.js +0 -0
- package/{tasks → rest}/operations/urlUtils.js +0 -0
- package/rest/print.js +1 -1
- package/rest/query/operations/query.js +1 -1
- package/rest/query/operations/queryAttachments.js +1 -1
- package/rest/query/operations/queryRelatedRecords.js +1 -1
- package/rest/query/operations/queryTopFeatures.js +1 -1
- package/rest/route/utils.js +1 -1
- package/rest/support/NetworkServiceDescription.js +1 -1
- package/rest/support/RouteInfo.js +1 -1
- package/rest/support/RouteParameters.js +1 -1
- package/rest/support/RouteSettings.js +5 -0
- package/rest/support/Stop.js +1 -1
- package/rest/support/networkEnums.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/Font.js +1 -1
- package/symbols/TextSymbol.js +1 -1
- package/symbols/TextSymbol3DLayer.js +1 -1
- package/symbols/cim/placements/PlacementAlongLineSameSize.js +1 -1
- package/symbols/support/cimSymbolUtils.js +1 -1
- package/symbols/support/textUtils.js +5 -0
- package/views/2d/layers/features/sources/BaseFeatureSource.js +1 -1
- package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
- package/views/2d/support/engineHelpers.js +1 -1
- package/views/3d/environment/CloudsComposition.glsl.js +1 -1
- package/views/3d/environment/CloudsComposition.js +1 -1
- package/views/3d/environment/CloudsGenerator.js +1 -1
- package/views/3d/layers/FeatureLayerViewBase3D.js +1 -1
- package/views/3d/layers/FeatureLikeLayerView3D.js +1 -1
- package/views/3d/layers/GraphicsLayerView3D.js +1 -1
- package/views/3d/layers/GraphicsView3D.js +1 -1
- package/views/3d/layers/SceneLayerGraphicsView3D.js +1 -1
- package/views/3d/layers/VoxelLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DDrapedGraphicLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DElevationAlignment.js +1 -1
- package/views/3d/layers/graphics/{Graphics3DFeatureLikeLayerView.js → Graphics3DFeatureProcessor.js} +1 -1
- package/views/3d/layers/graphics/Graphics3DFrustumVisibility.js +1 -1
- package/views/3d/layers/graphics/Graphics3DIconSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPolygonFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DScaleVisibility.js +1 -1
- package/views/3d/layers/graphics/Graphics3DSymbolCreationContext.js +1 -1
- package/views/3d/layers/graphics/Graphics3DSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DTextSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/{Graphics3DGraphicLikeLayerView.js → GraphicsProcessor.js} +1 -1
- package/views/3d/layers/graphics/IGraphics3DFeatureProcessor.js +4 -0
- package/views/3d/layers/graphics/QueryEngine.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/util/CloudsParallaxShading.glsl.js +12 -14
- package/views/3d/webgl-engine/lib/OffscreenRendering.js +1 -1
- package/views/3d/webgl-engine/lib/TextRenderParameters.js +1 -1
- package/views/3d/webgl-engine/lib/TextRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/intersectorUtilsConversions.js +1 -1
- package/views/3d/webgl-engine/parts/ScreenshotManager.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/webgl/ContextState.js +1 -1
- package/views/webgl/FramebufferObject.js +1 -1
- package/views/webgl/Program.js +1 -1
- package/views/webgl/Renderbuffer.js +1 -1
- package/views/webgl/RenderingContext.js +1 -1
- package/views/webgl/Texture.js +1 -1
- package/views/webgl/Util.js +1 -1
- package/views/webgl/enums.js +1 -1
- package/views/webgl/rasterUtils.js +1 -1
- package/views/webgl/testFloatBufferBlend.js +1 -1
- package/widgets/Feature/FeatureExpression.js +1 -1
- package/widgets/Feature/FeatureMedia/FeatureMediaViewModel.js +1 -1
- package/widgets/Feature/FeatureMedia.js +1 -1
- package/widgets/Feature/FeatureViewModel.js +1 -1
- package/widgets/LayerList/LayerListViewModel.js +1 -1
- package/widgets/support/geolocationUtils.js +1 -1
- package/assets/esri/core/workers/chunks/01ef8de7f76a8c61b464.js +0 -1
- package/assets/esri/core/workers/chunks/05db312a0ca6bd3f014a.js +0 -1
- package/assets/esri/core/workers/chunks/0f254c3e91e8fee55f28.js +0 -1
- package/assets/esri/core/workers/chunks/21a77eed1a4ef5b0ff08.js +0 -1
- package/assets/esri/core/workers/chunks/3564e14010953def6df9.js +0 -1
- package/assets/esri/core/workers/chunks/403c7d64f12f00330d88.js +0 -1
- package/assets/esri/core/workers/chunks/4409d77c9734de4e82a7.js +0 -1
- package/assets/esri/core/workers/chunks/615aa2d3ecafe30c80c0.js +0 -1
- package/assets/esri/core/workers/chunks/618076e6de605873e433.js +0 -1
- package/assets/esri/core/workers/chunks/6c1e92ff4c732dfda756.js +0 -1
- package/assets/esri/core/workers/chunks/722a10c65456844d72b9.js +0 -1
- package/assets/esri/core/workers/chunks/75d53b28afe732c459b2.js +0 -1
- package/assets/esri/core/workers/chunks/8fdd5bca3716816d359b.js +0 -1
- package/assets/esri/core/workers/chunks/a28b53c61bddefb6616e.js +0 -1
- package/assets/esri/core/workers/chunks/b9de831ac379cf1d2969.js +0 -1
- package/assets/esri/core/workers/chunks/c3eca92d02958732e141.js +0 -1
- package/assets/esri/core/workers/chunks/c8f976e53e232e8da9cc.js +0 -981
- package/assets/esri/core/workers/chunks/cb68db7169b9dfd1c3ff.js +0 -1
- package/assets/esri/core/workers/chunks/cc96608b2802fbfe7a08.js +0 -1
- package/assets/esri/core/workers/chunks/cd02fe27eb07681cb366.js +0 -1
- package/assets/esri/core/workers/chunks/dd433c160f7a0c120b82.js +0 -1
- package/assets/esri/core/workers/chunks/ef8b75b92cf549e0507e.js +0 -1
- package/symbols/support/constants.js +0 -5
- package/tasks/operations/identify.js +0 -5
package/layers/RouteLayer.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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../chunks/tslib.es6.js";import r from"../config.js";import"../geometry.js";import t from"../Graphic.js";import o from"../PopupTemplate.js";import"../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{read as i}from"../renderers/support/jsonUtils.js";import s from"../core/Collection.js";import n from"../core/Error.js";import{isSome as l,isNone as a}from"../core/maybe.js";import{MultiOriginJSONMixin as p}from"../core/MultiOriginJSONSupport.js";import{setDeepValue as y}from"../core/object.js";import{property as u}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{reader as m}from"../core/accessorSupport/decorators/reader.js";import{subclass as f}from"../core/accessorSupport/decorators/subclass.js";import{writer as d}from"../core/accessorSupport/decorators/writer.js";import c from"../geometry/Extent.js";import{WGS84 as S}from"../geometry/support/spatialReferenceUtils.js";import h from"./Layer.js";import{BlendLayer as g}from"./mixins/BlendLayer.js";import{OperationalLayer as b}from"./mixins/OperationalLayer.js";import{PortalLayer as w}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as P}from"./mixins/ScaleRangeLayer.js";import B from"./support/DefaultSymbols.js";import{solve as N}from"../rest/route.js";import v from"../rest/support/DirectionLine.js";import O from"../rest/support/DirectionPoint.js";import I from"../rest/support/PointBarrier.js";import j from"../rest/support/PolygonBarrier.js";import D from"../rest/support/PolylineBarrier.js";import _ from"../rest/support/RouteInfo.js";import L from"../rest/support/RouteParameters.js";import J from"../rest/support/Stop.js";import R from"../geometry/SpatialReference.js";import T from"../geometry/Multipoint.js";function C(e){return e.length?e:null}function x(e){return"layers"in e}function F(e){return"esri.rest.support.FeatureSet"===e.declaredClass}function G(e){return"esri.rest.support.NetworkFeatureSet"===e.declaredClass}const k=s.ofType(v),A=s.ofType(O),M=s.ofType(I),E=s.ofType(j),U=s.ofType(D),q=s.ofType(J);let W=class extends(g(P(b(w(p(h)))))){constructor(...e){super(...e),this._featureCollection=null,this._type="Feature Collection",this.defaultSymbols=new B,this.directionLines=null,this.directionPoints=null,this.featureCollectionType="route",this.legendEnabled=!1,this.maxScale=0,this.minScale=0,this.pointBarriers=new M,this.polygonBarriers=new E,this.polylineBarriers=new U,this.routeInfo=null,this.spatialReference=R.WGS84,this.stops=new q,this.title="Route",this.type="route"}writeFeatureCollectionWebmap(e,r){const t=[this._writePolygonBarriers(),this._writePolylineBarriers(),this._writePointBarriers(),this._writeRouteInfo(),this._writeDirectionLines(),this._writeDirectionPoints(),this._writeStops()].filter((e=>!!e)),o=t.map(((e,r)=>r));y("featureCollection.layers",t,r),r.opacity=this.opacity,r.visibility=this.visible,r.visibleLayers=o}readDirectionLines(e,r){return this._getNetworkFeatures(r,"DirectionLines",(e=>v.fromPortalJSON(e)))}readDirectionPoints(e,r){return this._getNetworkFeatures(r,"DirectionPoints",(e=>O.fromPortalJSON(e)))}get fullExtent(){if(l(this.routeInfo)&&l(this.routeInfo.geometry))return this.routeInfo.geometry.extent;if(this.stops.length>1){const{spatialReference:e}=this.stops[0],r=new T({spatialReference:e}),t=this.stops.toArray().map((e=>e.geometry));for(const o of t)l(o)&&r.addPoint(o);return r.extent}return new c({xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:R.WGS84})}readMaxScale(e,r){var t;const o=(x(r)?r.layers:r.featureCollection.layers).find((e=>l(e.layerDefinition.maxScale)));return null!=(t=null==o?void 0:o.layerDefinition.maxScale)?t:0}readMinScale(e,r){var t;const o=(x(r)?r.layers:r.featureCollection.layers).find((e=>l(e.layerDefinition.minScale)));return null!=(t=null==o?void 0:o.layerDefinition.minScale)?t:0}readPointBarriers(e,r){return this._getNetworkFeatures(r,"Barriers",(e=>I.fromPortalJSON(e)))}readPolygonBarriers(e,r){return this._getNetworkFeatures(r,"PolygonBarriers",(e=>j.fromPortalJSON(e)))}readPolylineBarriers(e,r){return this._getNetworkFeatures(r,"PolylineBarriers",(e=>D.fromPortalJSON(e)))}readRouteInfo(e,r){const t=this._getNetworkFeatures(r,"RouteInfo",(e=>_.fromPortalJSON(e)));return t.length>0?t.getItemAt(0):null}get routeServiceUrl(){var e,t,o,i;return null!=(e=this.portalItem)&&e.id&&null!=(t=null==(o=this.portalItem.portal.helperServices)||null==(i=o.route)?void 0:i.url)?t:r.routeServiceUrl}readSpatialReference(e,r){var t,o;const i=x(r)?r.layers:r.featureCollection.layers;if(!i.length)return R.WGS84;const{layerDefinition:s}=i[0],n=null!=(t=null!=(o=s.spatialReference)?o:s.extent.spatialReference)?t:S;return R.fromJSON(n)}readStops(e,r){return this._getNetworkFeatures(r,"Stops",(e=>J.fromPortalJSON(e)),(e=>this._setStopSymbol(e)))}load(e){return this.addResolvingPromise(this.loadFromPortal({supportedTypes:["Feature Collection"]},e)),Promise.resolve(this)}async solve(e,r){var t,o,i,l;const p=null!=(t=null==e?void 0:e.stops)?t:this.stops,y=null!=(o=null==e?void 0:e.pointBarriers)?o:C(this.pointBarriers),u=null!=(i=null==e?void 0:e.polylineBarriers)?i:C(this.polylineBarriers),m=null!=(l=null==e?void 0:e.polygonBarriers)?l:C(this.polygonBarriers);if(a(p))throw new n("routelayer:undefined-stops","the route layer must have stops defined in the route parameters.");if((F(p)||G(p))&&p.features.length<2||s.isCollection(p)&&p.length<2)throw new n("routelayer:insufficent-stops","the route layer must have two or more stops to solve a route.");const f={startTime:new Date},d={directionsOutputType:"featuresets",ignoreInvalidLocations:!0,pointBarriers:y,polylineBarriers:u,polygonBarriers:m,preserveFirstStop:!0,preserveLastStop:!0,returnBarriers:!!y,returnDirections:!0,returnPolygonBarriers:!!m,returnPolylineBarriers:!!u,returnRoutes:!0,returnStops:!0,stops:p},c=e?L.from(e):new L;for(const s in f)null==c[s]&&(c[s]=f[s]);return c.set(d),N(this.routeServiceUrl,c,r)}update(e){var r,t,o;const i=e.routeResults[0].stops.map((e=>J.fromJSON(e.toJSON())));this._setStopSymbol(i),this.stops=new q(i),this.polygonBarriers=new E(null==(r=e.polygonBarriers)?void 0:r.map((e=>{const r=j.fromJSON(e.toJSON());return r.symbol=this.defaultSymbols.polygonBarriers,r}))),this.polylineBarriers=new U(null==(t=e.polylineBarriers)?void 0:t.map((e=>{const r=D.fromJSON(e.toJSON());return r.symbol=this.defaultSymbols.polylineBarriers,r}))),this.pointBarriers=new M(null==(o=e.pointBarriers)?void 0:o.map((e=>{const r=I.fromJSON(e.toJSON());return r.symbol=this.defaultSymbols.pointBarriers,r})));const s=_.fromJSON(e.routeResults[0].route.toJSON());s.symbol=this.defaultSymbols.routeInfo,this._set("routeInfo",s),this._set("directionPoints",new A(e.routeResults[0].directionPoints.features.map((e=>{const r=O.fromJSON(e.toJSON());return r.symbol=this.defaultSymbols.directionPoints,r})))),this._set("directionLines",new k(e.routeResults[0].directionLines.features.map((e=>{const r=v.fromJSON(e.toJSON());return r.symbol=this.defaultSymbols.directionLines,r}))))}_getLayerDefinition(){return{capabilities:"Query,Update,Editing",extent:this.fullExtent.toJSON(),hasM:!1,hasZ:!1,maxScale:this.maxScale,minScale:this.minScale,objectIdField:"__OBJECTID",spatialReference:this.spatialReference.toJSON(),type:"Feature Layer",typeIdField:""}}_getNetworkFeatures(e,r,n,l){const p=(x(e)?e.layers:e.featureCollection.layers).find((e=>e.layerDefinition.name===r));if(a(p))return new s;const{layerDefinition:y,popupInfo:u,featureSet:m}=p,f=y.drawingInfo.renderer,{features:d}=m,c=f&&i(f),S=d.map((e=>{var i;const s=n(e),{attributes:l}=e,a=new t({attributes:l});return null!=s.symbol||(s.symbol=null!=(i=null==c?void 0:c.getSymbol(a))?i:this._getNetworkSymbol(r)),null!=s.popupTemplate||(s.popupTemplate=u&&o.fromJSON(u)),s}));return l&&S.some((e=>!e.symbol))&&l(S),new s(S)}_getNetworkSymbol(e){switch(e){case"Barriers":return this.defaultSymbols.pointBarriers;case"DirectionPoints":return this.defaultSymbols.directionPoints;case"DirectionLines":return this.defaultSymbols.directionLines;case"PolylineBarriers":return this.defaultSymbols.polylineBarriers;case"PolygonBarriers":return this.defaultSymbols.polygonBarriers;case"RouteInfo":return this.defaultSymbols.routeInfo;case"Stops":return null}}_setStopSymbol(e){if(!e)return;if(e.length<2){for(const r of e)r.symbol=this.defaultSymbols.invalidStop;return}const r=e.map((e=>e.sequence)).filter((e=>l(e))),t=Math.min(...r),o=Math.max(...r);for(const i of e)i.sequence!==t?i.sequence!==o?"ok"===i.status||"not-located-on-closest"===i.status?"waypoint"!==i.locationType?"break"!==i.locationType?i.symbol=this.defaultSymbols.middleStop:i.symbol=this.defaultSymbols.breakStop:i.symbol=this.defaultSymbols.waypointStop:i.symbol=this.defaultSymbols.invalidStop:i.symbol=this.defaultSymbols.lastStop:i.symbol=this.defaultSymbols.firstStop}_writeDirectionLines(){return a(this.directionLines)||!this.directionLines.length?null:{featureSet:{features:this.directionLines.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.directionLines.toJSON()}},fields:v.fields,geometryType:"esriGeometryPolyline",name:"DirectionLines",title:"Direction Lines"},popupInfo:v.popupInfo}}_writeDirectionPoints(){return a(this.directionPoints)||!this.directionPoints.length?null:{featureSet:{features:this.directionPoints.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.directionPoints.toJSON()}},fields:O.fields,geometryType:"esriGeometryPoint",name:"DirectionPoints",title:"Direction Points"},popupInfo:O.popupInfo}}_writePointBarriers(){return a(this.pointBarriers)||!this.pointBarriers.length?null:{featureSet:{features:this.pointBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.pointBarriers.toJSON()}},fields:I.fields,geometryType:"esriGeometryPoint",name:"Barrier",title:"Point Barrier"},popupInfo:I.popupInfo}}_writePolygonBarriers(){return a(this.polygonBarriers)||!this.polygonBarriers.length?null:{featureSet:{features:this.polygonBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolygon"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.polygonBarriers.toJSON()}},fields:j.fields,geometryType:"esriGeometryPolygon",name:"PolygonBarriers",title:"Polygon Barriers"},popupInfo:j.popupInfo}}_writePolylineBarriers(){return a(this.polylineBarriers)||!this.polylineBarriers.length?null:{featureSet:{features:this.polylineBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.polylineBarriers.toJSON()}},fields:D.fields,geometryType:"esriGeometryPolyline",name:"PolylineBarriers",title:"Line Barriers"},popupInfo:D.popupInfo}}_writeRouteInfo(){return a(this.routeInfo)?null:{featureSet:{features:[this.routeInfo.toPortalJSON()],geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.routeInfo.toJSON()}},fields:_.fields,geometryType:"esriGeometryPolyline",name:"RouteInfo",title:"Route Details"},popupInfo:_.popupInfo}}_writeStops(){return a(this.stops)||!this.stops.length?null:{featureSet:{features:this.stops.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"uniqueValue",field1:"Sequence",defaultSymbol:this.defaultSymbols.middleStop.toJSON(),uniqueValueInfos:[{value:"1",symbol:this.defaultSymbols.firstStop.toJSON(),label:"First Stop"},{value:`${this.stops.length}`,symbol:this.defaultSymbols.lastStop.toJSON(),label:"Last Stop"}]}},fields:J.fields,geometryType:"esriGeometryPoint",name:"Stops",title:"Stops"},popupInfo:J.popupInfo}}};e([u({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{overridePolicy(){return{allowNull:!0,ignoreOrigin:null==this.portalItem}}}}}}})],W.prototype,"_featureCollection",void 0),e([d("web-map","_featureCollection")],W.prototype,"writeFeatureCollectionWebmap",null),e([u({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{target:"type",overridePolicy(){return{ignoreOrigin:null!=this.portalItem}}}}}}})],W.prototype,"_type",void 0),e([u({nonNullable:!0,type:B})],W.prototype,"defaultSymbols",void 0),e([u({readOnly:!0})],W.prototype,"directionLines",void 0),e([m(["web-map","portal-item"],"directionLines",["layers","featureCollection.layers"])],W.prototype,"readDirectionLines",null),e([u({readOnly:!0})],W.prototype,"directionPoints",void 0),e([m(["web-map","portal-item"],"directionPoints",["layers","featureCollection.layers"])],W.prototype,"readDirectionPoints",null),e([u({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{ignoreOrigin:!0}}}}})],W.prototype,"featureCollectionType",void 0),e([u({readOnly:!0})],W.prototype,"fullExtent",null),e([u({json:{origins:{"web-map":{name:"featureCollection.showLegend"}},write:!0}})],W.prototype,"legendEnabled",void 0),e([u({type:["show","hide"]})],W.prototype,"listMode",void 0),e([u({type:Number,nonNullable:!0,json:{write:!1}})],W.prototype,"maxScale",void 0),e([m(["web-map","portal-item"],"maxScale",["layers","featureCollection.layers"])],W.prototype,"readMaxScale",null),e([u({type:Number,nonNullable:!0,json:{write:!1}})],W.prototype,"minScale",void 0),e([m(["web-map","portal-item"],"minScale",["layers","featureCollection.layers"])],W.prototype,"readMinScale",null),e([u({type:["ArcGISFeatureLayer"],value:"ArcGISFeatureLayer"})],W.prototype,"operationalLayerType",void 0),e([u({nonNullable:!0,type:s.ofType(I)})],W.prototype,"pointBarriers",void 0),e([m(["web-map","portal-item"],"pointBarriers",["layers","featureCollection.layers"])],W.prototype,"readPointBarriers",null),e([u({nonNullable:!0,type:s.ofType(j)})],W.prototype,"polygonBarriers",void 0),e([m(["web-map","portal-item"],"polygonBarriers",["layers","featureCollection.layers"])],W.prototype,"readPolygonBarriers",null),e([u({nonNullable:!0,type:s.ofType(D)})],W.prototype,"polylineBarriers",void 0),e([m(["web-map","portal-item"],"polylineBarriers",["layers","featureCollection.layers"])],W.prototype,"readPolylineBarriers",null),e([u({readOnly:!0})],W.prototype,"routeInfo",void 0),e([m(["web-map","portal-item"],"routeInfo",["layers","featureCollection.layers"])],W.prototype,"readRouteInfo",null),e([u({nonNullable:!0})],W.prototype,"routeServiceUrl",null),e([u({type:R})],W.prototype,"spatialReference",void 0),e([m(["web-map","portal-item"],"spatialReference",["layers","featureCollection.layers"])],W.prototype,"readSpatialReference",null),e([u({nonNullable:!0,type:s.ofType(J)})],W.prototype,"stops",void 0),e([m(["web-map","portal-item"],"stops",["layers","featureCollection.layers"])],W.prototype,"readStops",null),e([u()],W.prototype,"title",void 0),e([u({readOnly:!0,json:{read:!1}})],W.prototype,"type",void 0),W=e([f("esri.layers.RouteLayer")],W);const V=W;export{V as default};
|
|
5
|
+
import{_ as e}from"../chunks/tslib.es6.js";import t from"../config.js";import"../geometry.js";import r from"../Graphic.js";import o from"../PopupTemplate.js";import"../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{read as i}from"../renderers/support/jsonUtils.js";import s from"../core/Collection.js";import n from"../core/Error.js";import{isSome as l,isNone as a}from"../core/maybe.js";import{MultiOriginJSONMixin as p}from"../core/MultiOriginJSONSupport.js";import{setDeepValue as u}from"../core/object.js";import{convertUnit as y}from"../core/unitUtils.js";import{property as m}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{reader as f}from"../core/accessorSupport/decorators/reader.js";import{subclass as c}from"../core/accessorSupport/decorators/subclass.js";import{writer as d}from"../core/accessorSupport/decorators/writer.js";import S from"../geometry/Extent.js";import{WGS84 as h}from"../geometry/support/spatialReferenceUtils.js";import g from"./Layer.js";import{BlendLayer as b}from"./mixins/BlendLayer.js";import{OperationalLayer as w}from"./mixins/OperationalLayer.js";import{PortalLayer as v}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as B}from"./mixins/ScaleRangeLayer.js";import P from"./support/DefaultSymbols.js";import{fetchServiceDescription as N}from"../rest/networkService.js";import{solve as I}from"../rest/route.js";import D from"../rest/support/DirectionLine.js";import O from"../rest/support/DirectionPoint.js";import{directionsTimeUnitJsonMap as j,directionsLengthUnitJsonMap as L}from"../rest/support/networkEnums.js";import C from"../rest/support/PointBarrier.js";import _ from"../rest/support/PolygonBarrier.js";import T from"../rest/support/PolylineBarrier.js";import J from"../rest/support/RouteInfo.js";import R from"../rest/support/RouteParameters.js";import x from"../rest/support/RouteSettings.js";import F from"../rest/support/Stop.js";import k from"../geometry/SpatialReference.js";import A from"../geometry/Multipoint.js";function G(e){return e.length?e:null}function U(e){return"layers"in e}function M(e){return"esri.rest.support.FeatureSet"===e.declaredClass}function W(e){return"esri.rest.support.NetworkFeatureSet"===e.declaredClass}function E(e,t,r){var o,i,s,a,p,u,y,m,f,c,d;const S=t.networkDataset.networkAttributes.filter((e=>"esriNAUTCost"===e.usageType)),h=t.supportedTravelModes.find((e=>e.id===t.defaultTravelMode)),g=null!=(o=r.travelMode)?o:h,{timeAttributeName:b,distanceAttributeName:w}=g,v=S.find((e=>e.name===b)),B=S.find((e=>e.name===w)),P=null!=(i=null!=(s=null==(a=r.travelMode)?void 0:a.impedanceAttributeName)?s:r.impedanceAttribute)?i:t.impedance,N=j.fromJSON(null==v?void 0:v.units),I=L.fromJSON(null==B?void 0:B.units);if(!N||!I)throw new n("routelayer:unknown-impedance-units","the units of either the distance or time impedance are unknown");const D=null!=(p=r.directionsLanguage)?p:t.directionsLanguage,O=null!=(u=null!=(y=r.accumulateAttributes)?y:t.accumulateAttributeNames)?u:[],C=new Set(S.filter((({name:e})=>e===b||e===w||e===P||O.includes(e))).map((({name:e})=>e))),_=e=>{for(const t in e)C.has(t)||delete e[t]};for(const n of e.pointBarriers){var T;if(l(n.costs))n.addedCost=null!=(T=n.costs[P])?T:0,_(n.costs)}for(const n of e.polygonBarriers){var J;if(l(n.costs))n.scaleFactor=null!=(J=n.costs[P])?J:1,_(n.costs)}for(const n of e.polylineBarriers){var R;if(l(n.costs))n.scaleFactor=null!=(R=n.costs[P])?R:1,_(n.costs)}const{routeInfo:F}=e,{findBestSequence:k,preserveFirstStop:A,preserveLastStop:G,startTimeIsUTC:U,timeWindowsAreUTC:M}=r;F.analysisSettings=new x({accumulateAttributes:O,directionsLanguage:D,findBestSequence:k,preserveFirstStop:A,preserveLastStop:G,startTimeIsUTC:U,timeWindowsAreUTC:M,travelMode:g}),F.totalDuration=q(null!=(m=F.totalCosts[b])?m:0,N),F.totalDistance=V(null!=(f=F.totalCosts[w])?f:0,I),F.totalLateDuration=q(null!=(c=F.totalViolations[b])?c:0,N),F.totalWaitDuration=q(null!=(d=F.totalWait[b])?d:0,N),l(F.totalCosts)&&_(F.totalCosts),l(F.totalViolations)&&_(F.totalViolations),l(F.totalWait)&&_(F.totalWait);for(const n of e.stops){var W,E,H,K,Q,Z;if(l(n.serviceCosts))n.serviceDuration=q(null!=(W=n.serviceCosts[b])?W:0,N),n.serviceDistance=V(null!=(E=n.serviceCosts[w])?E:0,I),_(n.serviceCosts);if(l(n.cumulativeCosts))n.cumulativeDuration=q(null!=(H=n.cumulativeCosts[b])?H:0,N),n.cumulativeDistance=V(null!=(K=n.cumulativeCosts[w])?K:0,I),_(n.cumulativeCosts);if(l(n.violations))n.lateDuration=q(null!=(Q=n.violations[b])?Q:0,N),_(n.violations);if(l(n.wait))n.waitDuration=q(null!=(Z=n.wait[b])?Z:0,N),_(n.wait)}}function q(e,t){switch(t){case"seconds":return e/60;case"hours":return 60*e;case"days":return 60*e*24;default:return e}}function V(e,t){return"decimal-degrees"===t||"points"===t?e:y(e,t,"meters")}const H=s.ofType(D),K=s.ofType(O),Q=s.ofType(C),Z=s.ofType(_),$=s.ofType(T),z=s.ofType(F);let X=class extends(b(B(w(v(p(g)))))){constructor(...e){super(...e),this._featureCollection=null,this._type="Feature Collection",this.defaultSymbols=new P,this.directionLines=null,this.directionPoints=null,this.featureCollectionType="route",this.legendEnabled=!1,this.maxScale=0,this.minScale=0,this.pointBarriers=new Q,this.polygonBarriers=new Z,this.polylineBarriers=new $,this.routeInfo=null,this.spatialReference=k.WGS84,this.stops=new z,this.title="Route",this.type="route"}writeFeatureCollectionWebmap(e,t){const r=[this._writePolygonBarriers(),this._writePolylineBarriers(),this._writePointBarriers(),this._writeRouteInfo(),this._writeDirectionLines(),this._writeDirectionPoints(),this._writeStops()].filter((e=>!!e)),o=r.map(((e,t)=>t));u("featureCollection.layers",r,t),t.opacity=this.opacity,t.visibility=this.visible,t.visibleLayers=o}readDirectionLines(e,t){return this._getNetworkFeatures(t,"DirectionLines",(e=>D.fromPortalJSON(e)))}readDirectionPoints(e,t){return this._getNetworkFeatures(t,"DirectionPoints",(e=>O.fromPortalJSON(e)))}get fullExtent(){if(l(this.routeInfo)&&l(this.routeInfo.geometry))return this.routeInfo.geometry.extent;if(this.stops.length>1){const{spatialReference:e}=this.stops[0],t=new A({spatialReference:e}),r=this.stops.toArray().map((e=>e.geometry));for(const o of r)l(o)&&t.addPoint(o);return t.extent}return new S({xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:k.WGS84})}readMaxScale(e,t){var r;const o=(U(t)?t.layers:t.featureCollection.layers).find((e=>l(e.layerDefinition.maxScale)));return null!=(r=null==o?void 0:o.layerDefinition.maxScale)?r:0}readMinScale(e,t){var r;const o=(U(t)?t.layers:t.featureCollection.layers).find((e=>l(e.layerDefinition.minScale)));return null!=(r=null==o?void 0:o.layerDefinition.minScale)?r:0}readPointBarriers(e,t){return this._getNetworkFeatures(t,"Barriers",(e=>C.fromPortalJSON(e)))}readPolygonBarriers(e,t){return this._getNetworkFeatures(t,"PolygonBarriers",(e=>_.fromPortalJSON(e)))}readPolylineBarriers(e,t){return this._getNetworkFeatures(t,"PolylineBarriers",(e=>T.fromPortalJSON(e)))}readRouteInfo(e,t){const r=this._getNetworkFeatures(t,"RouteInfo",(e=>J.fromPortalJSON(e)));return r.length>0?r.getItemAt(0):null}get routeServiceUrl(){var e,r,o,i;return null!=(e=this.portalItem)&&e.id&&null!=(r=null==(o=this.portalItem.portal.helperServices)||null==(i=o.route)?void 0:i.url)?r:t.routeServiceUrl}readSpatialReference(e,t){var r,o;const i=U(t)?t.layers:t.featureCollection.layers;if(!i.length)return k.WGS84;const{layerDefinition:s}=i[0],n=null!=(r=null!=(o=s.spatialReference)?o:s.extent.spatialReference)?r:h;return k.fromJSON(n)}readStops(e,t){return this._getNetworkFeatures(t,"Stops",(e=>F.fromPortalJSON(e)),(e=>this._setStopSymbol(e)))}load(e){return this.addResolvingPromise(this.loadFromPortal({supportedTypes:["Feature Collection"]},e)),Promise.resolve(this)}async solve(e,t){var r,o,i,l;const p=null!=(r=null==e?void 0:e.stops)?r:this.stops,u=null!=(o=null==e?void 0:e.pointBarriers)?o:G(this.pointBarriers),y=null!=(i=null==e?void 0:e.polylineBarriers)?i:G(this.polylineBarriers),m=null!=(l=null==e?void 0:e.polygonBarriers)?l:G(this.polygonBarriers);if(a(p))throw new n("routelayer:undefined-stops","the route layer must have stops defined in the route parameters.");if((M(p)||W(p))&&p.features.length<2||s.isCollection(p)&&p.length<2)throw new n("routelayer:insufficent-stops","the route layer must have two or more stops to solve a route.");const f=await N(this.routeServiceUrl,null==e?void 0:e.apiKey,t),c={startTime:new Date},d={directionsOutputType:"featuresets",ignoreInvalidLocations:!0,pointBarriers:u,polylineBarriers:y,polygonBarriers:m,preserveFirstStop:!0,preserveLastStop:!0,returnBarriers:!!u,returnDirections:!0,returnPolygonBarriers:!!m,returnPolylineBarriers:!!y,returnRoutes:!0,returnStops:!0,stops:p},S=e?R.from(e):new R;for(const s in c)null==S[s]&&(S[s]=c[s]);S.set(d);const h=await I(this.routeServiceUrl,S,t),g=this._toRouteLayerSolution(h);return E(g,f,S),g}update(e){const{stops:t,directionLines:r,directionPoints:o,pointBarriers:i,polylineBarriers:s,polygonBarriers:n,routeInfo:l}=e;this.set({stops:t,pointBarriers:i,polylineBarriers:s,polygonBarriers:n}),this._set("directionLines",r),this._set("directionPoints",o),this._set("routeInfo",l)}_getLayerDefinition(){return{capabilities:"Query,Update,Editing",extent:this.fullExtent.toJSON(),hasM:!1,hasZ:!1,maxScale:this.maxScale,minScale:this.minScale,objectIdField:"__OBJECTID",spatialReference:this.spatialReference.toJSON(),type:"Feature Layer",typeIdField:""}}_getNetworkFeatures(e,t,n,l){const p=(U(e)?e.layers:e.featureCollection.layers).find((e=>e.layerDefinition.name===t));if(a(p))return new s;const{layerDefinition:u,popupInfo:y,featureSet:m}=p,f=u.drawingInfo.renderer,{features:c}=m,d=f&&i(f),S=c.map((e=>{var i;const s=n(e),{attributes:l}=e,a=new r({attributes:l});return null!=s.symbol||(s.symbol=null!=(i=null==d?void 0:d.getSymbol(a))?i:this._getNetworkSymbol(t)),null!=s.popupTemplate||(s.popupTemplate=y&&o.fromJSON(y)),s}));return l&&S.some((e=>!e.symbol))&&l(S),new s(S)}_getNetworkSymbol(e){switch(e){case"Barriers":return this.defaultSymbols.pointBarriers;case"DirectionPoints":return this.defaultSymbols.directionPoints;case"DirectionLines":return this.defaultSymbols.directionLines;case"PolylineBarriers":return this.defaultSymbols.polylineBarriers;case"PolygonBarriers":return this.defaultSymbols.polygonBarriers;case"RouteInfo":return this.defaultSymbols.routeInfo;case"Stops":return null}}_setStopSymbol(e){if(!e)return;if(e.length<2){for(const t of e)t.symbol=this.defaultSymbols.invalidStop;return}const t=e.map((e=>e.sequence)).filter((e=>l(e))),r=Math.min(...t),o=Math.max(...t);for(const i of e)i.sequence!==r?i.sequence!==o?"ok"===i.status||"not-located-on-closest"===i.status?"waypoint"!==i.locationType?"break"!==i.locationType?i.symbol=this.defaultSymbols.middleStop:i.symbol=this.defaultSymbols.breakStop:i.symbol=this.defaultSymbols.waypointStop:i.symbol=this.defaultSymbols.invalidStop:i.symbol=this.defaultSymbols.lastStop:i.symbol=this.defaultSymbols.firstStop}_toRouteLayerSolution(e){var t,r,o;const i=e.routeResults[0].stops.map((e=>F.fromJSON(e.toJSON())));this._setStopSymbol(i);const s=new z(i),n=new Z(null==(t=e.polygonBarriers)?void 0:t.map((e=>{const t=_.fromJSON(e.toJSON());return t.symbol=this.defaultSymbols.polygonBarriers,t}))),l=new $(null==(r=e.polylineBarriers)?void 0:r.map((e=>{const t=T.fromJSON(e.toJSON());return t.symbol=this.defaultSymbols.polylineBarriers,t}))),a=new Q(null==(o=e.pointBarriers)?void 0:o.map((e=>{const t=C.fromJSON(e.toJSON());return t.symbol=this.defaultSymbols.pointBarriers,t}))),p=J.fromJSON(e.routeResults[0].route.toJSON());p.symbol=this.defaultSymbols.routeInfo;const u=new K(e.routeResults[0].directionPoints.features.map((e=>{const t=O.fromJSON(e.toJSON());return t.symbol=this.defaultSymbols.directionPoints,t})));return{directionLines:new H(e.routeResults[0].directionLines.features.map((e=>{const t=D.fromJSON(e.toJSON());return t.symbol=this.defaultSymbols.directionLines,t}))),directionPoints:u,pointBarriers:a,polygonBarriers:n,polylineBarriers:l,routeInfo:p,stops:s}}_writeDirectionLines(){return a(this.directionLines)||!this.directionLines.length?null:{featureSet:{features:this.directionLines.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.directionLines.toJSON()}},fields:D.fields,geometryType:"esriGeometryPolyline",name:"DirectionLines",title:"Direction Lines"},popupInfo:D.popupInfo}}_writeDirectionPoints(){return a(this.directionPoints)||!this.directionPoints.length?null:{featureSet:{features:this.directionPoints.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.directionPoints.toJSON()}},fields:O.fields,geometryType:"esriGeometryPoint",name:"DirectionPoints",title:"Direction Points"},popupInfo:O.popupInfo}}_writePointBarriers(){return a(this.pointBarriers)||!this.pointBarriers.length?null:{featureSet:{features:this.pointBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.pointBarriers.toJSON()}},fields:C.fields,geometryType:"esriGeometryPoint",name:"Barrier",title:"Point Barrier"},popupInfo:C.popupInfo}}_writePolygonBarriers(){return a(this.polygonBarriers)||!this.polygonBarriers.length?null:{featureSet:{features:this.polygonBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolygon"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.polygonBarriers.toJSON()}},fields:_.fields,geometryType:"esriGeometryPolygon",name:"PolygonBarriers",title:"Polygon Barriers"},popupInfo:_.popupInfo}}_writePolylineBarriers(){return a(this.polylineBarriers)||!this.polylineBarriers.length?null:{featureSet:{features:this.polylineBarriers.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.polylineBarriers.toJSON()}},fields:T.fields,geometryType:"esriGeometryPolyline",name:"PolylineBarriers",title:"Line Barriers"},popupInfo:T.popupInfo}}_writeRouteInfo(){return a(this.routeInfo)?null:{featureSet:{features:[this.routeInfo.toPortalJSON()],geometryType:"esriGeometryPolyline"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"simple",symbol:this.defaultSymbols.routeInfo.toJSON()}},fields:J.fields,geometryType:"esriGeometryPolyline",name:"RouteInfo",title:"Route Details"},popupInfo:J.popupInfo}}_writeStops(){return a(this.stops)||!this.stops.length?null:{featureSet:{features:this.stops.toArray().map((e=>e.toPortalJSON())),geometryType:"esriGeometryPoint"},layerDefinition:{...this._getLayerDefinition(),drawingInfo:{renderer:{type:"uniqueValue",field1:"Sequence",defaultSymbol:this.defaultSymbols.middleStop.toJSON(),uniqueValueInfos:[{value:"1",symbol:this.defaultSymbols.firstStop.toJSON(),label:"First Stop"},{value:`${this.stops.length}`,symbol:this.defaultSymbols.lastStop.toJSON(),label:"Last Stop"}]}},fields:F.fields,geometryType:"esriGeometryPoint",name:"Stops",title:"Stops"},popupInfo:F.popupInfo}}};e([m({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{overridePolicy(){return{allowNull:!0,ignoreOrigin:null==this.portalItem}}}}}}})],X.prototype,"_featureCollection",void 0),e([d("web-map","_featureCollection")],X.prototype,"writeFeatureCollectionWebmap",null),e([m({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{target:"type",overridePolicy(){return{ignoreOrigin:null!=this.portalItem}}}}}}})],X.prototype,"_type",void 0),e([m({nonNullable:!0,type:P})],X.prototype,"defaultSymbols",void 0),e([m({readOnly:!0})],X.prototype,"directionLines",void 0),e([f(["web-map","portal-item"],"directionLines",["layers","featureCollection.layers"])],X.prototype,"readDirectionLines",null),e([m({readOnly:!0})],X.prototype,"directionPoints",void 0),e([f(["web-map","portal-item"],"directionPoints",["layers","featureCollection.layers"])],X.prototype,"readDirectionPoints",null),e([m({readOnly:!0,json:{read:!1,origins:{"web-map":{write:{ignoreOrigin:!0}}}}})],X.prototype,"featureCollectionType",void 0),e([m({readOnly:!0})],X.prototype,"fullExtent",null),e([m({json:{origins:{"web-map":{name:"featureCollection.showLegend"}},write:!0}})],X.prototype,"legendEnabled",void 0),e([m({type:["show","hide"]})],X.prototype,"listMode",void 0),e([m({type:Number,nonNullable:!0,json:{write:!1}})],X.prototype,"maxScale",void 0),e([f(["web-map","portal-item"],"maxScale",["layers","featureCollection.layers"])],X.prototype,"readMaxScale",null),e([m({type:Number,nonNullable:!0,json:{write:!1}})],X.prototype,"minScale",void 0),e([f(["web-map","portal-item"],"minScale",["layers","featureCollection.layers"])],X.prototype,"readMinScale",null),e([m({type:["ArcGISFeatureLayer"],value:"ArcGISFeatureLayer"})],X.prototype,"operationalLayerType",void 0),e([m({nonNullable:!0,type:s.ofType(C)})],X.prototype,"pointBarriers",void 0),e([f(["web-map","portal-item"],"pointBarriers",["layers","featureCollection.layers"])],X.prototype,"readPointBarriers",null),e([m({nonNullable:!0,type:s.ofType(_)})],X.prototype,"polygonBarriers",void 0),e([f(["web-map","portal-item"],"polygonBarriers",["layers","featureCollection.layers"])],X.prototype,"readPolygonBarriers",null),e([m({nonNullable:!0,type:s.ofType(T)})],X.prototype,"polylineBarriers",void 0),e([f(["web-map","portal-item"],"polylineBarriers",["layers","featureCollection.layers"])],X.prototype,"readPolylineBarriers",null),e([m({readOnly:!0})],X.prototype,"routeInfo",void 0),e([f(["web-map","portal-item"],"routeInfo",["layers","featureCollection.layers"])],X.prototype,"readRouteInfo",null),e([m({nonNullable:!0})],X.prototype,"routeServiceUrl",null),e([m({type:k})],X.prototype,"spatialReference",void 0),e([f(["web-map","portal-item"],"spatialReference",["layers","featureCollection.layers"])],X.prototype,"readSpatialReference",null),e([m({nonNullable:!0,type:s.ofType(F)})],X.prototype,"stops",void 0),e([f(["web-map","portal-item"],"stops",["layers","featureCollection.layers"])],X.prototype,"readStops",null),e([m()],X.prototype,"title",void 0),e([m({readOnly:!0,json:{read:!1}})],X.prototype,"type",void 0),X=e([c("esri.layers.RouteLayer")],X);const Y=X;export{Y as default};
|
package/layers/VoxelLayer.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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../chunks/tslib.es6.js";import r from"../core/Collection.js";import t from"../core/Handles.js";import i from"../core/Logger.js";import{destroyMaybe as s,isSome as o}from"../core/maybe.js";import{MultiOriginJSONMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as l}from"../core/reactiveUtils.js";import{property as p}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{reader as m}from"../core/accessorSupport/decorators/reader.js";import{subclass as d}from"../core/accessorSupport/decorators/subclass.js";import{n as c}from"../chunks/vec3.js";import{f as u}from"../chunks/vec3f64.js";import h from"./Layer.js";import y from"./VoxelWasmManager.js";import{APIKeyMixin as b}from"./mixins/APIKeyMixin.js";import{ArcGISService as f}from"./mixins/ArcGISService.js";import{OperationalLayer as g}from"./mixins/OperationalLayer.js";import{PortalLayer as v}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as S}from"./mixins/ScaleRangeLayer.js";import{SceneService as V}from"./mixins/SceneService.js";import{sanitizeUrl as _}from"./support/arcgisLayerUrl.js";import{popupEnabled as x,legendEnabled as j,url as I}from"./support/commonProperties.js";import w from"./support/VoxelDynamicSection.js";import L from"./support/VoxelSection.js";import T from"./support/VoxelSlice.js";import P from"./support/VoxelStyle.js";import W from"./support/VoxelVariable.js";import A from"./support/VoxelVolume.js";import N from"./support/VoxelVolumeIndex.js";const M=i.getLogger(" esri.layers.VoxelLayer");var D;!function(e){e[e.API=1]="API",e[e.VerboseAPI=2]="VerboseAPI",e[e.Error=3]="Error"}(D||(D={}));let E=class extends(V(f(g(v(S(n(b(h)))))))){constructor(e){super(e),this.serviceRoot="",this.popupEnabled=!0,this.operationalLayerType="Voxel",this.legendEnabled=!0,this.title=null,this.sections=new r,this.style=null,this.opacity=1,this.variables=new r,this.volumes=new r,this.index=null,this.minScale=0,this.maxScale=0,this.type="voxel",this._dbgFlags=new Set,this._handles=new t,this.version={major:Number.NaN,minor:Number.NaN,versionString:""}}set url(e){this._set("url",_(e,M))}destroy(){this._handles=s(this._handles)}_dbg(e,r){this._dbgFlags.has(e)&&(e===D.Error?M.error(r):M.warn(r))}load(e){const r=o(e)?e.signal:null,t=this.loadFromPortal({supportedTypes:["Scene Service"]},e).catch(a).then((()=>this._fetchService(r))).then((()=>this.serviceRoot=this.url));return this.addResolvingPromise(t),Promise.resolve(this)}getConfiguration(){this._handles.add([l((()=>this._getRenderMode()),(e=>this._pushRenderModeToWasm(e))),l((()=>this._getCurrentVariableId()),(e=>this._pushCurrentVariableIdToWasm(e))),l((()=>this._getDynamicSections()),(e=>this._pushDynamicSectionsToWasm(e))),l((()=>this._getSlices()),(e=>this._pushSlicesToWasm(e))),l((()=>this._getSections()),(e=>this._pushSectionsToWasm(e)))]);const e={layerType:this.operationalLayerType,version:this.version.versionString,name:this.title,spatialReference:this.spatialReference,fullExtent:this.fullExtent,volumes:this.volumes.toJSON(),variables:this.variables.toJSON(),index:this.index.toJSON(),sections:this.sections.toJSON(),style:this.style};return e.index&&this.index.isValid()?JSON.stringify(e):""}readVersion(e,r){return super.parseVersionString(e)}_getSections(){const e=[];for(const r of this.sections)e.push(new L({enabled:r.enabled,href:r.href,id:r.id,label:r.label,normal:r.normal,point:r.point,sizeInPixel:r.sizeInPixel,slices:r.slices,timeId:r.timeId,variableId:r.variableId}));return e}_pushSectionsToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushSectionsToWasm() called");y.getInstance().setLayerStaticSections(this,e)||this._dbg(D.Error,"VoxelLayer._pushSectionsToWasm() failed!")}_isPlaneValid(e,r,t){if(!e.point)return!1;if(!Array.isArray(e.point)||3!==e.point.length)return!1;if(!e.normal)return!1;if(!Array.isArray(e.normal)||3!==e.normal.length)return!1;for(let o=0;o<3;++o){const i=e.point[o];if(i<0||i>=t[r[o]].size)return!1}const i=u(e.normal[0],e.normal[1],e.normal[2]);c(i,i);const s=1e-6;return!(Math.abs(i[0])+Math.abs(i[1])+Math.abs(i[2])<s)&&(e.normal[0]=i[0],e.normal[1]=i[1],e.normal[2]=i[2],!0)}getVariableStyle(e){let r=-1;r=o(e)?e:this._getCurrentVariableId();if(!(null==this?void 0:this.style.variableStyles)||-1===r)return null;const t=this.style.variableStyles.findIndex((e=>e.variableId===r));return t<0?null:this.style.variableStyles.getItemAt(t)}getVariable(e){let r=-1;if(r=o(e)?e:this._getCurrentVariableId(),!this.variables||-1===r)return null;const t=this.variables.findIndex((e=>e.id===r));return t<0?null:this.variables.getItemAt(t)}
|
|
5
|
+
import{_ as e}from"../chunks/tslib.es6.js";import r from"../core/Collection.js";import t from"../core/Handles.js";import i from"../core/Logger.js";import{destroyMaybe as s,isSome as o}from"../core/maybe.js";import{MultiOriginJSONMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as l}from"../core/reactiveUtils.js";import{property as p}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/has.js";import"../core/accessorSupport/ensureType.js";import{reader as m}from"../core/accessorSupport/decorators/reader.js";import{subclass as d}from"../core/accessorSupport/decorators/subclass.js";import{n as c}from"../chunks/vec3.js";import{f as u}from"../chunks/vec3f64.js";import h from"./Layer.js";import y from"./VoxelWasmManager.js";import{APIKeyMixin as b}from"./mixins/APIKeyMixin.js";import{ArcGISService as f}from"./mixins/ArcGISService.js";import{OperationalLayer as g}from"./mixins/OperationalLayer.js";import{PortalLayer as v}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as S}from"./mixins/ScaleRangeLayer.js";import{SceneService as V}from"./mixins/SceneService.js";import{sanitizeUrl as _}from"./support/arcgisLayerUrl.js";import{popupEnabled as x,legendEnabled as j,url as I}from"./support/commonProperties.js";import w from"./support/VoxelDynamicSection.js";import L from"./support/VoxelSection.js";import T from"./support/VoxelSlice.js";import P from"./support/VoxelStyle.js";import W from"./support/VoxelVariable.js";import A from"./support/VoxelVolume.js";import N from"./support/VoxelVolumeIndex.js";const M=i.getLogger(" esri.layers.VoxelLayer");var D;!function(e){e[e.API=1]="API",e[e.VerboseAPI=2]="VerboseAPI",e[e.Error=3]="Error"}(D||(D={}));let E=class extends(V(f(g(v(S(n(b(h)))))))){constructor(e){super(e),this.serviceRoot="",this.popupEnabled=!0,this.operationalLayerType="Voxel",this.legendEnabled=!0,this.title=null,this.sections=new r,this.style=null,this.opacity=1,this.variables=new r,this.volumes=new r,this.index=null,this.minScale=0,this.maxScale=0,this.type="voxel",this._dbgFlags=new Set,this._handles=new t,this.version={major:Number.NaN,minor:Number.NaN,versionString:""}}set url(e){this._set("url",_(e,M))}destroy(){this._handles=s(this._handles)}_dbg(e,r){this._dbgFlags.has(e)&&(e===D.Error?M.error(r):M.warn(r))}load(e){const r=o(e)?e.signal:null,t=this.loadFromPortal({supportedTypes:["Scene Service"]},e).catch(a).then((()=>this._fetchService(r))).then((()=>this.serviceRoot=this.url));return this.addResolvingPromise(t),Promise.resolve(this)}getConfiguration(){this._handles.add([l((()=>this._getRenderMode()),(e=>this._pushRenderModeToWasm(e))),l((()=>this._getCurrentVariableId()),(e=>this._pushCurrentVariableIdToWasm(e))),l((()=>this._getDynamicSections()),(e=>this._pushDynamicSectionsToWasm(e))),l((()=>this._getSlices()),(e=>this._pushSlicesToWasm(e))),l((()=>this._getSections()),(e=>this._pushSectionsToWasm(e)))]);const e={layerType:this.operationalLayerType,version:this.version.versionString,name:this.title,spatialReference:this.spatialReference,fullExtent:this.fullExtent,volumes:this.volumes.toJSON(),variables:this.variables.toJSON(),index:this.index.toJSON(),sections:this.sections.toJSON(),style:this.style};return e.index&&this.index.isValid()?JSON.stringify(e):""}readVersion(e,r){return super.parseVersionString(e)}_getSections(){const e=[];for(const r of this.sections)e.push(new L({enabled:r.enabled,href:r.href,id:r.id,label:r.label,normal:r.normal,point:r.point,sizeInPixel:r.sizeInPixel,slices:r.slices,timeId:r.timeId,variableId:r.variableId}));return e}_pushSectionsToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushSectionsToWasm() called");y.getInstance().setLayerStaticSections(this,e)||this._dbg(D.Error,"VoxelLayer._pushSectionsToWasm() failed!")}_isPlaneValid(e,r,t){if(!e.point)return!1;if(!Array.isArray(e.point)||3!==e.point.length)return!1;if(!e.normal)return!1;if(!Array.isArray(e.normal)||3!==e.normal.length)return!1;for(let o=0;o<3;++o){const i=e.point[o];if(i<0||i>=t[r[o]].size)return!1}const i=u(e.normal[0],e.normal[1],e.normal[2]);c(i,i);const s=1e-6;return!(Math.abs(i[0])+Math.abs(i[1])+Math.abs(i[2])<s)&&(e.normal[0]=i[0],e.normal[1]=i[1],e.normal[2]=i[2],!0)}getVariableStyle(e){let r=-1;r=o(e)?e:this._getCurrentVariableId();if(!(null==this?void 0:this.style.variableStyles)||-1===r)return null;const t=this.style.variableStyles.findIndex((e=>e.variableId===r));return t<0?null:this.style.variableStyles.getItemAt(t)}getVariable(e){let r=-1;if(r=o(e)?e:this._getCurrentVariableId(),!this.variables||-1===r)return null;const t=this.variables.findIndex((e=>e.id===r));return t<0?null:this.variables.getItemAt(t)}getVolume(e){const r=this.getVariable(e);return o(r)?this.volumes.find((({id:e})=>e===r.volumeId)):null}_getVolumeStyle(e){const r=this.getVariable(e);return o(r)?this.style.volumeStyles.find((({volumeId:e})=>e===r.volumeId)):null}_getSlices(){const e=[],r=this.getVolume(null);if(!o(r)||!r.isVolumeValid())return e;const t=this._getVolumeStyle(null);if(!o(t))return e;for(const i of t.slices)this._isPlaneValid(i,[0,1,r.getZDimension()],r.dimensions)?e.push(new T({enabled:i.enabled,label:i.label,point:i.point,normal:i.normal})):e.push(new T({enabled:!1,label:"invalid",point:i.point,normal:i.normal}));return e}_pushSlicesToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushSlicesToWasm() called!");y.getInstance().setLayerSlices(this,e)||this._dbg(D.Error,"VoxelLayer._pushSlicesToWasm() failed!")}_getDynamicSections(){const e=[],r=this.getVolume(null);if(!o(r)||!r.isVolumeValid())return e;const t=this._getVolumeStyle(null);if(!o(t))return e;for(const i of t.dynamicSections)this._isPlaneValid(i,[0,1,r.getZDimension()],r.dimensions)?e.push(new w({enabled:i.enabled,label:i.label,point:i.point,normal:i.normal})):e.push(new w({enabled:!1,label:"invalid",point:i.point,normal:i.normal}));return e}_pushDynamicSectionsToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushDynamicSectionsToWasm() called!");y.getInstance().setLayerDynamicSections(this,e)||this._dbg(D.Error,"VoxelLayer._updateDynamicSections() failed!")}_getCurrentVariableId(){return this.style?this.style.currentVariableId:-1}_pushCurrentVariableIdToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushCurrentVariableIdToWasm() called!");y.getInstance().setLayerCurrentVariable(this,e)||this._dbg(D.Error,"VoxelLayer._pushCurrentVariableIdToWasm() failed!")}_getRenderMode(){return this.style?this.style.renderMode:"volume"}_pushRenderModeToWasm(e){this._dbg(D.VerboseAPI,"VoxelLayer._pushRenderModeToWasm() called!");y.getInstance().setLayerRenderMode(this,e)||this._dbg(D.Error,"VoxelLayer.setLayerRenderMode() failed!")}};e([p(x)],E.prototype,"popupEnabled",void 0),e([p({type:["Voxel"]})],E.prototype,"operationalLayerType",void 0),e([p(j)],E.prototype,"legendEnabled",void 0),e([p({json:{write:!0}})],E.prototype,"title",void 0),e([p(I)],E.prototype,"url",null),e([p({type:r.ofType(L),json:{write:!0,origins:{"web-scene":{name:"layerDefinition.sections",write:!0},service:{write:!1}}}})],E.prototype,"sections",void 0),e([p({type:P,json:{write:!0,origins:{"web-scene":{name:"layerDefinition.style",write:!0},service:{write:!1}}}})],E.prototype,"style",void 0),e([p({type:["show","hide"]})],E.prototype,"listMode",void 0),e([p({type:Number,range:{min:0,max:1},nonNullable:!0,json:{read:!1,write:!1,origins:{"web-scene":{read:!1,write:!1},"portal-item":{read:!1,write:!1}}}})],E.prototype,"opacity",void 0),e([p({type:r.ofType(W)})],E.prototype,"variables",void 0),e([p({type:r.ofType(A)})],E.prototype,"volumes",void 0),e([p({type:N})],E.prototype,"index",void 0),e([p({type:Number,json:{name:"layerDefinition.minScale",read:!1,write:!1,origins:{service:{read:!1,write:!1}}}})],E.prototype,"minScale",void 0),e([p({type:Number,json:{name:"layerDefinition.maxScale",read:!1,write:!1,origins:{service:{read:!1,write:!1}}}})],E.prototype,"maxScale",void 0),e([p({json:{read:!1},readOnly:!0})],E.prototype,"type",void 0),e([p({readOnly:!0,json:{name:"serviceVersion"}})],E.prototype,"version",void 0),e([m("service","version")],E.prototype,"readVersion",null),E=e([d("esri.layers.VoxelLayer")],E);const R=E;export{R 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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../request.js";import t from"../core/Logger.js";import{isSome as i,removeMaybe as r}from"../core/maybe.js";import{isAbortError as s}from"../core/promiseUtils.js";import{watch as n}from"../core/reactiveUtils.js";import{WasmCullMode as a,UpdateFlags as o}from"../libs/vxl/enums.js";import{loadVoxelWASM as l}from"../libs/vxl/VxlModule.js";import{RenderPass as h}from"../views/3d/webgl-engine/lib/RenderPass.js";import{RenderSlot as _}from"../views/3d/webgl-engine/lib/RenderSlot.js";import{ContextType as d}from"../views/webgl/context-util.js";import{CompareFunction as c,Face as u,StencilOperation as g}from"../views/webgl/enums.js";const x=t.getLogger("esri.layers.VoxelWasmPerScene");var v;!function(e){e[e.Lifetime=1]="Lifetime",e[e.RequestResponse=2]="RequestResponse",e[e.Rendering=3]="Rendering",e[e.Error=4]="Error"}(v||(v={}));class m{constructor(e){this._halfIntTexturesAvailable=!1,this._havePreparedWithAllLayers=!1,this._renderPluginContext=null,this._vxl=null,this._pluginIsActive=!1,this._moreToLoad=!1,this._viewportWidth=-1,this._viewportHeight=-1,this._newLayers=[],this._layers=new Map,this._renderPass=h.MATERIAL,this._renderSlot=_.VOXEL,this._rctx=null,this._renderTargetToRestore=null,this._lastFrameWasStationary=!1,this._wasmMemBlockSizes=[512,1024,2048,4096,8192,16384,32768,65536],this._wasmMemBlocks=new Map,this._dbgFlags=new Set,this._view=e,this._initialize()}get canRender(){return!!this._vxl&&"local"===this._view.viewingMode}_dbg(e,t){this._dbgFlags.has(e)&&(e===v.Error?x.error(t):x.warn(t))}_removeRenderPlugin(){this._pluginIsActive&&this._view._stage&&(this._dbg(v.Lifetime,"--removeRenderPlugin--"),this._view._stage.removeRenderPlugin(this)),this._pluginIsActive=!1}_initialize(){this._dbg(v.Lifetime,"--initialize--");for(const e of this._wasmMemBlockSizes)this._wasmMemBlocks.set(e,0);this._readyWatchHandle=n((()=>this._view.ready),(e=>{e&&"local"===this._view.viewingMode?(this._dbg(v.Lifetime,"view ready status changed to ready on a local view, calling addRenderPlugin"),this._view._stage.addRenderPlugin([this._renderSlot],this),this._pluginIsActive=!0):(this._dbg(v.Lifetime,"view ready status changed, not ready or not a local view!"),this._removeRenderPlugin())}),{initial:!0}),this._qualityWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.qualityProfile}),(e=>{this._dbg(v.Rendering,"qualityProfile changed to "+e),this._vxl&&this._vxl.set_quality(this._toWasmQuality(e))}),{initial:!0}),this._timeExtentWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.timeExtent}),(()=>{if(this._vxl){var e;const t=this._getTimeArgs(null==(e=this._view)?void 0:e.timeExtent);this._dbg(v.Rendering,"sceneView timeExtent changed to useTime="+t.useTime+" st="+t.startTime+" et="+t.endTime),this._vxl.set_scene_time_extent(t.startTime,t.endTime,t.useTime),this._renderPluginContext.requestRender()}}),{initial:!0}),this._stationaryWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.stationary}),(e=>{this._vxl&&e&&!this._lastFrameWasStationary&&this._renderPluginContext.requestRender()}))}initializeRenderContext(e){this._dbg(v.Lifetime,"--initializeRenderContext--");const t=e.renderContext.rctx;t.type===d.WEBGL2?(this._renderPluginContext=e,this._rctx=e.renderContext.rctx,this._halfIntTexturesAvailable=!!this._rctx.capabilities.textureNorm16,this._initializeWasm(t.gl)):this._dbg(v.Error,"WebGL 1 context only!")}uninitializeRenderContext(){this._renderPluginContext=null,this._rctx=null,this._dbg(v.Lifetime,"--uninitializeRenderContext--")}_restoreFramebuffer(){if(!this._renderTargetToRestore)return;const e=this._renderTargetToRestore.fbo;if(!!!this._rctx)return void this._dbg(v.Error,"no context in restoreFramebuffer!");this._rctx.bindFramebuffer(e,!0);const t=this._renderTargetToRestore.viewport;this._rctx.setViewport(t.x,t.y,t.width,t.height)}_bindPreviousDepthToSlot(e,t){const i=!!this._rctx,r=!!this._renderTargetToRestore;if(!i||!r)return 0;const s=this._renderTargetToRestore.fbo.depthStencilTexture;return s?(0===t?this._rctx.bindTexture(null,e,!0):this._rctx.bindTexture(s,e,!0),1):(this._dbg(v.Error,"no depth/stencil texture exists!"),0)}_setBlendState(e,t,i,r){this._rctx?(this._rctx.setBlendingEnabled(1===e),this._rctx.setBlendFunction(t,i),this._rctx.setBlendEquation(r)):this._dbg(v.Error,"setBlendState callback has no rendering context!")}_setFrontFace(e){this._rctx?this._rctx.setFrontFace(e):this._dbg(v.Error,"setFrontFace callback has no rendering context!")}_setDepthStencilStateFunction(e,t,i){this._rctx?(this._rctx.setDepthFunction(i),this._rctx.setDepthTestEnabled(1===e),this._rctx.setDepthWriteEnabled(1===t),this._rctx.setStencilTestEnabled(!1),this._rctx.setStencilFunction(c.ALWAYS,0,255),this._rctx.setStencilOpSeparate(u.FRONT,g.KEEP,g.INCR,g.KEEP),this._rctx.setStencilOpSeparate(u.BACK,g.KEEP,g.DECR,g.KEEP)):this._dbg(v.Error,"setDepthStencilStateFunction callback has no rendering context!")}_setRasterizerState(e){if(this._rctx)switch(e){case a.None:this._rctx.setFaceCullingEnabled(!1);break;case a.Back:this._rctx.setCullFace(u.BACK),this._rctx.setFaceCullingEnabled(!0);break;case a.Front:this._rctx.setCullFace(u.FRONT),this._rctx.setFaceCullingEnabled(!0)}else this._dbg(v.Error,"setRasterizerState callback has no rendering context!")}_setViewport(e,t,i,r){this._rctx?this._rctx.setViewport(e,t,i,r):this._dbg(v.Error,"setViewport callback has no rendering context!")}_syncRequestsResponses(){this._layers.forEach(((t,i)=>{const r=[];t.responses.forEach(((e,t)=>{r.push(t),this._dbg(v.RequestResponse,"responding for requestID:"+t+" size:"+e.size),this._vxl.respond(i,t,e)}));const n=t.responses;for(const e of r)n.delete(e);const a=this._vxl.get_new_requests(i),o=t.abortController.signal;for(const l in a){t.outstandingRequestCount+=1,1===t.outstandingRequestCount&&t.layerView.updatingFlagChanged();const i=a[l],r={responseType:"array-buffer",signal:o};this._dbg(v.RequestResponse,"making requestID:"+l+" url:"+i.url),e(i.url,r).then((e=>{t.outstandingRequestCount-=1,0===t.outstandingRequestCount&&t.layerView.updatingFlagChanged(),this._dbg(v.RequestResponse,"have response for requestID:"+l);let r=0;if(e.data.byteLength>0){r=this._vxl._malloc(e.data.byteLength);const t=new Uint8Array(this._vxl.HEAPU8.buffer,r,e.data.byteLength),i=new Uint8Array(e.data);for(let r=0;r<e.data.byteLength;++r)t[r]=i[r]}n.set(+l,{type:i.type,ptr:r,size:e.data.byteLength,success:!0})})).catch((e=>{t.outstandingRequestCount-=1,0===t.outstandingRequestCount&&t.layerView.updatingFlagChanged(),s(e)||(this._dbg(v.Error,`requestID:${l} failed, error=${e.toString()}`),n.set(+l,{type:i.type,ptr:0,size:0,success:!1}))}))}}))}updateWasmCamera(e){this._vxl.set_projection_matrix.apply(this._vxl,e.projectionMatrix),this._vxl.set_view_matrix.apply(this._vxl,e.viewMatrix),this._vxl.set_near_far(e.near,e.far)}isUpdating(e){return!(this._vxl||!this._vxlPromise)||!!this._layers.has(e)&&this._layers.get(e).outstandingRequestCount>0}setEnabled(e,t){this._layers.forEach(((i,r)=>{i.layerView===e&&(this._vxl.set_enabled(r,t),this._renderPluginContext.requestRender())}))}setSlices(e,t){const i={mask:o.Slices,slices:{planes:t,currentEditPlane:-1}};return this._doMaskedUIUpdate(e,i,!0)}setDynamicSections(e,t){const i={mask:o.DynamicSections,dynamicSections:{planes:t,currentEditPlane:-1}};return this._doMaskedUIUpdate(e,i,!0)}setStaticSections(e,t){const i={mask:o.StaticSections,staticSections:t};return this._doMaskedUIUpdate(e,i,!0)}setCurrentVariable(e,t){const i={mask:o.CurrentVariable,currentVariable:t};return this._doMaskedUIUpdate(e,i,!0)}setRenderMode(e,t){const i={mask:o.RenderMode,renderMode:t};return this._doMaskedUIUpdate(e,i,!0)}_doMaskedUIUpdate(e,t,i){if(!this._vxl)return!1;let r=!1;return this._layers.forEach(((i,s)=>{if(i.layerView===e){const e={str:JSON.stringify(t),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(r=1===this._vxl.handle_masked_ui_update(s,e.ptr,e.byteCount),e.isReusable||this._vxl._free(e.ptr))}})),r&&i&&this._renderPluginContext.requestRender(),r}addVoxelLayer(e){if(!this._vxl){const t={layerView:e,resolveCallback:null,rejectCallback:null},i=new Promise(((e,i)=>{t.resolveCallback=e,t.rejectCallback=i}));return this._newLayers.push(t),i}const t=this._addVoxelLayer(e);return t<0?Promise.reject(-1):Promise.resolve(t)}removeVoxelLayer(e){if(!this._vxl){const t=this._newLayers.findIndex((t=>e===t.layerView));t>=0&&(this._newLayers[t].resolveCallback(-1),this._newLayers.splice(t,1));const i=this._newLayers.length;return 0===i&&(this._dbg(v.Lifetime," no voxel layers left after removing a layer, removing RenderPlugin and destroying"),this.destroy()),i}let t=-1;this._layers.forEach(((i,r)=>{i.layerView===e&&(t=r,i.abortController.abort(),this._vxl.remove_layer(t))})),t>=0&&this._layers.delete(t);const i=this._layers.size;return 0===i&&(this._dbg(v.Lifetime," no voxel layers left after removing a layer, removing RenderPlugin and destroying"),this.destroy()),i}_getBlockSize(e){for(const t of this._wasmMemBlockSizes)if(e<t)return t;return-1}_allocateBlock(e){e.byteCount=this._vxl.lengthBytesUTF8(e.str)+1;const t=this._getBlockSize(e.byteCount);return t<0?(e.isReusable=!1,e.ptr=this._vxl._malloc(e.byteCount)):(e.isReusable=!0,e.ptr=this._wasmMemBlocks.get(t),0===e.ptr&&(e.ptr=this._vxl._malloc(t),this._wasmMemBlocks.set(t,e.ptr))),0!==e.ptr&&(this._vxl.stringToUTF8(e.str,e.ptr,e.byteCount),!0)}_getTimeArgs(e){let t=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=!1;return i(e)&&(e.isAllTime?s=!0:(i(e.start)&&(s=!0,t=e.start.getTime()/1e3),i(e.end)&&(s=!0,r=e.end.getTime()/1e3))),{startTime:t,endTime:r,useTime:s}}_addVoxelLayer(e){var t;const i=e.layer;let r=-1;const s=i.getConfiguration();if(s.length<1)return-1;const n={str:s,byteCount:0,ptr:0,isReusable:!1};if(!this._allocateBlock(n))return-1;const a=this._getTimeArgs(null==(t=this._view)?void 0:t.timeExtent),o=this._view.spatialReference.isWGS84&&i.spatialReference.isWGS84?111319.49079327357:1;if(r=this._vxl.add_layer(i.serviceRoot,n.ptr,n.byteCount,o,o,a.startTime,a.endTime,a.useTime,this._toWasmQuality(this._view.qualityProfile)),n.isReusable||this._vxl._free(n.ptr),r>=0){const t=new AbortController;if(this._layers.set(r,{layerView:e,responses:new Map,outstandingRequestCount:0,abortController:t}),!this._halfIntTexturesAvailable){const t=[];let i="";for(const r of e.layer.variables)"Int16"!==r.renderingFormat.type&&"UInt16"!==r.renderingFormat.type||(t.push(r.name),r.id===e.layer.style.currentVariableId&&(i=r.name));""!==i&&x.error("#addVoxelLayer_error()",e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${i}' in this browser`),t.length>0&&x.warn("#addVoxelLayer_warning()",e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}return r}return-1}prepareRender(e){if(!this._vxl)return;const t=e.viewForward,i=e.eye;this._vxl.update_camera_pos_and_direction(i[0],i[1],i[2],t[0],t[1],t[2]);const r=this._vxl.cull();this._dbg(v.RequestResponse,"missingResourceCount="+r),this._moreToLoad=r>0,this._havePreparedWithAllLayers=0===this._newLayers.length}render(e){if(!this._vxl||e.pass!==this._renderPass||e.slot!==this._renderSlot)return;for(const i of this._newLayers){const e=this._addVoxelLayer(i.layerView);-1===e?i.rejectCallback(-1):i.resolveCallback(e)}if(this._newLayers=[],0===this._layers.size)return void this._dbg(v.Error,"No voxel layers but RenderPlugin instance is being asked to render!");this._renderTargetToRestore={fbo:this._rctx.getBoundFramebufferObject(),viewport:this._rctx.getViewport()},this._syncRequestsResponses(),this._lastFrameWasStationary=this._view.stationary,this._vxl.begin_color_frame(!this._view.stationary||this._moreToLoad,e.scenelightingData.lightingMainDirection[0],e.scenelightingData.lightingMainDirection[1],e.scenelightingData.lightingMainDirection[2]);const t=this._renderTargetToRestore.viewport;t.width===this._viewportWidth&&t.height===this._viewportHeight||(this._viewportWidth=t.width,this._viewportHeight=t.height,this._vxl.set_viewport(t.width,t.height)),0===t.x&&0===t.y||this._dbg(v.Error,"Unsupported viewport parameters detected!"),this.updateWasmCamera(e.camera),this._vxl.draw(),this._renderTargetToRestore.fbo=null,e.rctx.externalTextureUnitUpdate(this._vxl.get_texture_units_bound_in_frame(),this._vxl.get_active_texture_unit()),e.rctx.externalVertexArrayObjectUpdate(),e.rctx.externalVertexBufferUpdate(),this._rctx.externalProgramUpdate(),(this._moreToLoad||!this._havePreparedWithAllLayers&&this._layers.size>0)&&this._renderPluginContext.requestRender()}destroy(){this._dbg(v.Lifetime,"--destroy--"),this._removeRenderPlugin(),this._readyWatchHandle=r(this._readyWatchHandle),this._qualityWatchHandle=r(this._qualityWatchHandle),this._timeExtentWatchHandle=r(this._timeExtentWatchHandle),this._stationaryWatchHandle=r(this._stationaryWatchHandle),this._vxl&&(this._layers.forEach((e=>{e.abortController.abort()})),this._wasmMemBlocks.forEach((e=>{0!==e&&this._vxl._free(e)})),this._vxl.uninitialize_voxel_wasm(),this._vxl=null)}_initializeWasm(e){return this._vxl?Promise.resolve():(this._vxlPromise||(this._vxlPromise=l(e).then((e=>{var t;if(this._vxl=e,this._vxlPromise=null,this._newLayers.length<=0)return this._dbg(v.Lifetime," no voxel layers left after WASM downloaded, removing RenderPlugin and destroying"),void this.destroy();const i=this._getTimeArgs(null==(t=this._view)?void 0:t.timeExtent),r=this._vxl.addFunction(this._restoreFramebuffer.bind(this),"v"),s=this._vxl.addFunction(this._setBlendState.bind(this),"viiii"),n=this._vxl.addFunction(this._setFrontFace.bind(this),"vi"),a=this._vxl.addFunction(this._setRasterizerState.bind(this),"vi"),o=this._vxl.addFunction(this._setDepthStencilStateFunction.bind(this),"viii"),l=this._vxl.addFunction(this._setViewport.bind(this),"viiii"),h=this._vxl.addFunction(this._bindPreviousDepthToSlot.bind(this),"iii");this._vxl.initialize_voxel_wasm(r,s,n,a,o,l,h,i.startTime,i.endTime,i.useTime),this._renderPluginContext&&this._renderPluginContext.requestRender()})).catch((()=>{for(const e of this._newLayers)e.rejectCallback(-2);this._dbg(v.Error," WASM failed to download, removing RenderPlugin and destroying"),this.destroy()}))),this._vxlPromise)}pickDepth(e,t,i){if(!this._vxl||!this._rctx||0===this._layers.size)return null;const r=i.viewport[3]-t;if(e<0||e>i.viewport[2]||t<0||t>i.viewport[3])return this._dbg(v.Error,`pickDepth: outOfRange, screenXY=[${e}, ${r}], vp=[${i.viewport.toString()}]`),null;this._renderTargetToRestore={fbo:this._rctx.getBoundFramebufferObject(),viewport:this._rctx.getViewport()};const s=i.viewForward,n=i.eye;this._vxl.update_camera_pos_and_direction(n[0],n[1],n[2],s[0],s[1],s[2]),this.updateWasmCamera(i),this._vxl.begin_frame();const a=this._vxl.pick_depth(e,r);if(this._renderTargetToRestore.fbo=null,this._rctx.externalTextureUnitUpdate(this._vxl.get_texture_units_bound_in_frame(),this._vxl.get_active_texture_unit()),this._rctx.externalVertexArrayObjectUpdate(),this._rctx.externalVertexBufferUpdate(),this._rctx.externalProgramUpdate(),a.success){return a.distanceToCamera}return null}_toWasmQuality(e){switch(e){case"low":return 0;case"medium":return 1;case"high":return 2}}}export{m as default};
|
|
5
|
+
import e from"../request.js";import t from"../core/Logger.js";import{isSome as i,removeMaybe as r}from"../core/maybe.js";import{isAbortError as s}from"../core/promiseUtils.js";import{watch as n}from"../core/reactiveUtils.js";import{WasmCullMode as a,VoxelRequestType as o,UpdateFlags as l}from"../libs/vxl/enums.js";import{loadVoxelWASM as h}from"../libs/vxl/VxlModule.js";import{RenderPass as _}from"../views/3d/webgl-engine/lib/RenderPass.js";import{RenderSlot as d}from"../views/3d/webgl-engine/lib/RenderSlot.js";import{ContextType as c}from"../views/webgl/context-util.js";import{CompareFunction as u,Face as g,StencilOperation as x}from"../views/webgl/enums.js";const v=t.getLogger("esri.layers.VoxelWasmPerScene");var m;!function(e){e[e.Lifetime=1]="Lifetime",e[e.RequestResponse=2]="RequestResponse",e[e.Rendering=3]="Rendering",e[e.Error=4]="Error"}(m||(m={}));class p{constructor(e){this._halfIntTexturesAvailable=!1,this._havePreparedWithAllLayers=!1,this._renderPluginContext=null,this._vxl=null,this._pluginIsActive=!1,this._moreToLoad=!1,this._viewportWidth=-1,this._viewportHeight=-1,this._newLayers=[],this._layers=new Map,this._renderPass=_.MATERIAL,this._renderSlot=d.VOXEL,this._rctx=null,this._renderTargetToRestore=null,this._lastFrameWasStationary=!1,this._wasmMemBlockSizes=[512,1024,2048,4096,8192,16384,32768,65536],this._wasmMemBlocks=new Map,this._dbgFlags=new Set,this._view=e,this._initialize()}get canRender(){return!!this._vxl&&"local"===this._view.viewingMode}_dbg(e,t){this._dbgFlags.has(e)&&(e===m.Error?v.error(t):v.warn(t))}_removeRenderPlugin(){this._pluginIsActive&&this._view._stage&&(this._dbg(m.Lifetime,"--removeRenderPlugin--"),this._view._stage.removeRenderPlugin(this)),this._pluginIsActive=!1}_initialize(){this._dbg(m.Lifetime,"--initialize--");for(const e of this._wasmMemBlockSizes)this._wasmMemBlocks.set(e,0);this._readyWatchHandle=n((()=>this._view.ready),(e=>{e&&"local"===this._view.viewingMode?(this._dbg(m.Lifetime,"view ready status changed to ready on a local view, calling addRenderPlugin"),this._view._stage.addRenderPlugin([this._renderSlot],this),this._pluginIsActive=!0):(this._dbg(m.Lifetime,"view ready status changed, not ready or not a local view!"),this._removeRenderPlugin())}),{initial:!0}),this._qualityWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.qualityProfile}),(e=>{this._dbg(m.Rendering,"qualityProfile changed to "+e),this._vxl&&this._vxl.set_quality(this._toWasmQuality(e))}),{initial:!0}),this._timeExtentWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.timeExtent}),(()=>{if(this._vxl){var e;const t=this._getTimeArgs(null==(e=this._view)?void 0:e.timeExtent);this._dbg(m.Rendering,"sceneView timeExtent changed to useTime="+t.useTime+" st="+t.startTime+" et="+t.endTime),this._vxl.set_scene_time_extent(t.startTime,t.endTime,t.useTime),this._renderPluginContext.requestRender()}}),{initial:!0}),this._stationaryWatchHandle=n((()=>{var e;return null==(e=this._view)?void 0:e.stationary}),(e=>{this._vxl&&e&&!this._lastFrameWasStationary&&this._renderPluginContext.requestRender()}))}initializeRenderContext(e){this._dbg(m.Lifetime,"--initializeRenderContext--");const t=e.renderContext.rctx;t.type===c.WEBGL2?(this._renderPluginContext=e,this._rctx=e.renderContext.rctx,this._halfIntTexturesAvailable=!!this._rctx.capabilities.textureNorm16,this._initializeWasm(t.gl)):this._dbg(m.Error,"WebGL 1 context only!")}uninitializeRenderContext(){this._renderPluginContext=null,this._rctx=null,this._dbg(m.Lifetime,"--uninitializeRenderContext--")}_restoreFramebuffer(){if(!this._renderTargetToRestore)return;const e=this._renderTargetToRestore.fbo;if(!!!this._rctx)return void this._dbg(m.Error,"no context in restoreFramebuffer!");this._rctx.bindFramebuffer(e,!0);const t=this._renderTargetToRestore.viewport;this._rctx.setViewport(t.x,t.y,t.width,t.height)}_bindPreviousDepthToSlot(e,t){const i=!!this._rctx,r=!!this._renderTargetToRestore;if(!i||!r)return 0;const s=this._renderTargetToRestore.fbo.depthStencilTexture;return s?(0===t?this._rctx.bindTexture(null,e,!0):this._rctx.bindTexture(s,e,!0),1):(this._dbg(m.Error,"no depth/stencil texture exists!"),0)}_setBlendState(e,t,i,r){this._rctx?(this._rctx.setBlendingEnabled(1===e),this._rctx.setBlendFunction(t,i),this._rctx.setBlendEquation(r)):this._dbg(m.Error,"setBlendState callback has no rendering context!")}_setFrontFace(e){this._rctx?this._rctx.setFrontFace(e):this._dbg(m.Error,"setFrontFace callback has no rendering context!")}_setDepthStencilStateFunction(e,t,i){this._rctx?(this._rctx.setDepthFunction(i),this._rctx.setDepthTestEnabled(1===e),this._rctx.setDepthWriteEnabled(1===t),this._rctx.setStencilTestEnabled(!1),this._rctx.setStencilFunction(u.ALWAYS,0,255),this._rctx.setStencilOpSeparate(g.FRONT,x.KEEP,x.INCR,x.KEEP),this._rctx.setStencilOpSeparate(g.BACK,x.KEEP,x.DECR,x.KEEP)):this._dbg(m.Error,"setDepthStencilStateFunction callback has no rendering context!")}_setRasterizerState(e){if(this._rctx)switch(e){case a.None:this._rctx.setFaceCullingEnabled(!1);break;case a.Back:this._rctx.setCullFace(g.BACK),this._rctx.setFaceCullingEnabled(!0);break;case a.Front:this._rctx.setCullFace(g.FRONT),this._rctx.setFaceCullingEnabled(!0)}else this._dbg(m.Error,"setRasterizerState callback has no rendering context!")}_setViewport(e,t,i,r){this._rctx?this._rctx.setViewport(e,t,i,r):this._dbg(m.Error,"setViewport callback has no rendering context!")}_updateMemoryUsage(){this._layers.forEach(((e,t)=>{if(e.needMemoryUsageUpdate){const i=this._vxl.estimate_memory_usage(t);i>=0&&(e.needMemoryUsageUpdate=!1,e.layerView.setUsedMemory(i))}}))}_syncRequestsResponses(){this._layers.forEach(((t,i)=>{const r=[];t.responses.forEach(((e,s)=>{r.push(s),this._dbg(m.RequestResponse,"responding for requestID:"+s+" size:"+e.size),this._vxl.respond(i,s,e),e.requestType!==o.TreeIndex&&e.requestType!==o.Section||(t.needMemoryUsageUpdate=!0)}));const n=t.responses;for(const e of r)n.delete(e);const a=this._vxl.get_new_requests(i),l=t.abortController.signal;for(const o in a){t.outstandingRequestCount+=1,1===t.outstandingRequestCount&&t.layerView.updatingFlagChanged();const i=a[o],r={responseType:"array-buffer",signal:l};this._dbg(m.RequestResponse,"making requestID:"+o+" url:"+i.url),e(i.url,r).then((e=>{t.outstandingRequestCount-=1,0===t.outstandingRequestCount&&t.layerView.updatingFlagChanged(),this._dbg(m.RequestResponse,"have response for requestID:"+o);let r=0;if(e.data.byteLength>0){r=this._vxl._malloc(e.data.byteLength);const t=new Uint8Array(this._vxl.HEAPU8.buffer,r,e.data.byteLength),i=new Uint8Array(e.data);for(let r=0;r<e.data.byteLength;++r)t[r]=i[r]}n.set(+o,{responseType:i.responseType,ptr:r,size:e.data.byteLength,success:!0,requestType:i.requestType})})).catch((e=>{t.outstandingRequestCount-=1,0===t.outstandingRequestCount&&t.layerView.updatingFlagChanged(),s(e)||(this._dbg(m.Error,`requestID:${o} failed, error=${e.toString()}`),n.set(+o,{responseType:i.responseType,ptr:0,size:0,success:!1,requestType:i.requestType}))}))}}))}updateWasmCamera(e){this._vxl.set_projection_matrix.apply(this._vxl,e.projectionMatrix),this._vxl.set_view_matrix.apply(this._vxl,e.viewMatrix),this._vxl.set_near_far(e.near,e.far)}isUpdating(e){return!(this._vxl||!this._vxlPromise)||!!this._layers.has(e)&&this._layers.get(e).outstandingRequestCount>0}setEnabled(e,t){this._layers.forEach(((i,r)=>{i.layerView===e&&(this._vxl.set_enabled(r,t),this._renderPluginContext.requestRender())}))}setSlices(e,t){const i={mask:l.Slices,slices:{planes:t,currentEditPlane:-1}};return this._doMaskedUIUpdate(e,i,!0)}setDynamicSections(e,t){const i={mask:l.DynamicSections,dynamicSections:{planes:t,currentEditPlane:-1}};return this._doMaskedUIUpdate(e,i,!0)}setStaticSections(e,t){const i={mask:l.StaticSections,staticSections:t};return this._doMaskedUIUpdate(e,i,!0)}setCurrentVariable(e,t){const i={mask:l.CurrentVariable,currentVariable:t};return this._doMaskedUIUpdate(e,i,!0)}setRenderMode(e,t){const i={mask:l.RenderMode,renderMode:t};return this._doMaskedUIUpdate(e,i,!0)}_doMaskedUIUpdate(e,t,i){if(!this._vxl)return!1;let r=!1;return this._layers.forEach(((i,s)=>{if(i.layerView===e){const e={str:JSON.stringify(t),byteCount:0,ptr:0,isReusable:!1};this._allocateBlock(e)&&(r=1===this._vxl.handle_masked_ui_update(s,e.ptr,e.byteCount),e.isReusable||this._vxl._free(e.ptr))}})),r&&i&&this._renderPluginContext.requestRender(),r}addVoxelLayer(e){if(!this._vxl){const t={layerView:e,resolveCallback:null,rejectCallback:null},i=new Promise(((e,i)=>{t.resolveCallback=e,t.rejectCallback=i}));return this._newLayers.push(t),i}const t=this._addVoxelLayer(e);return t<0?Promise.reject(-1):Promise.resolve(t)}removeVoxelLayer(e){if(!this._vxl){const t=this._newLayers.findIndex((t=>e===t.layerView));t>=0&&(this._newLayers[t].resolveCallback(-1),this._newLayers.splice(t,1));const i=this._newLayers.length;return 0===i&&(this._dbg(m.Lifetime," no voxel layers left after removing a layer, removing RenderPlugin and destroying"),this.destroy()),i}let t=-1;this._layers.forEach(((i,r)=>{i.layerView===e&&(t=r,i.abortController.abort(),this._vxl.remove_layer(t))})),t>=0&&this._layers.delete(t);const i=this._layers.size;return 0===i&&(this._dbg(m.Lifetime," no voxel layers left after removing a layer, removing RenderPlugin and destroying"),this.destroy()),i}_getBlockSize(e){for(const t of this._wasmMemBlockSizes)if(e<t)return t;return-1}_allocateBlock(e){e.byteCount=this._vxl.lengthBytesUTF8(e.str)+1;const t=this._getBlockSize(e.byteCount);return t<0?(e.isReusable=!1,e.ptr=this._vxl._malloc(e.byteCount)):(e.isReusable=!0,e.ptr=this._wasmMemBlocks.get(t),0===e.ptr&&(e.ptr=this._vxl._malloc(t),this._wasmMemBlocks.set(t,e.ptr))),0!==e.ptr&&(this._vxl.stringToUTF8(e.str,e.ptr,e.byteCount),!0)}_getTimeArgs(e){let t=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=!1;return i(e)&&(e.isAllTime?s=!0:(i(e.start)&&(s=!0,t=e.start.getTime()/1e3),i(e.end)&&(s=!0,r=e.end.getTime()/1e3))),{startTime:t,endTime:r,useTime:s}}_addVoxelLayer(e){var t;const i=e.layer;let r=-1;const s=i.getConfiguration();if(s.length<1)return-1;const n={str:s,byteCount:0,ptr:0,isReusable:!1};if(!this._allocateBlock(n))return-1;const a=this._getTimeArgs(null==(t=this._view)?void 0:t.timeExtent),o=this._view.spatialReference.isWGS84&&i.spatialReference.isWGS84?111319.49079327357:1;if(r=this._vxl.add_layer(i.serviceRoot,n.ptr,n.byteCount,o,o,a.startTime,a.endTime,a.useTime,this._toWasmQuality(this._view.qualityProfile)),n.isReusable||this._vxl._free(n.ptr),r>=0){const t=new AbortController;if(this._layers.set(r,{layerView:e,responses:new Map,outstandingRequestCount:0,abortController:t,needMemoryUsageUpdate:!1}),!this._halfIntTexturesAvailable){const t=[];let i="";for(const r of e.layer.variables)"Int16"!==r.renderingFormat.type&&"UInt16"!==r.renderingFormat.type||(t.push(r.name),r.id===e.layer.style.currentVariableId&&(i=r.name));""!==i&&v.error("#addVoxelLayer_error()",e.layer,`The voxel layer '${e.layer.title}' cannot render the current variable '${i}' in this browser`),t.length>0&&v.warn("#addVoxelLayer_warning()",e.layer,`The voxel layer '${e.layer.title}' cannot render the variables '${t.toString()}' in this browser`)}return r}return-1}prepareRender(e){if(!this._vxl)return;const t=e.viewForward,i=e.eye;this._vxl.update_camera_pos_and_direction(i[0],i[1],i[2],t[0],t[1],t[2]);const r=this._vxl.cull();this._dbg(m.RequestResponse,"missingResourceCount="+r),this._moreToLoad=r>0,this._havePreparedWithAllLayers=0===this._newLayers.length,this._updateMemoryUsage()}render(e){if(!this._vxl||e.pass!==this._renderPass||e.slot!==this._renderSlot)return;for(const i of this._newLayers){const e=this._addVoxelLayer(i.layerView);-1===e?i.rejectCallback(-1):i.resolveCallback(e)}if(this._newLayers=[],0===this._layers.size)return void this._dbg(m.Error,"No voxel layers but RenderPlugin instance is being asked to render!");this._renderTargetToRestore={fbo:this._rctx.getBoundFramebufferObject(),viewport:this._rctx.getViewport()},this._syncRequestsResponses(),this._lastFrameWasStationary=this._view.stationary,this._vxl.begin_color_frame(!this._view.stationary||this._moreToLoad,e.scenelightingData.lightingMainDirection[0],e.scenelightingData.lightingMainDirection[1],e.scenelightingData.lightingMainDirection[2]);const t=this._renderTargetToRestore.viewport;t.width===this._viewportWidth&&t.height===this._viewportHeight||(this._viewportWidth=t.width,this._viewportHeight=t.height,this._vxl.set_viewport(t.width,t.height),this._layers.forEach((e=>{e.needMemoryUsageUpdate=!0}))),0===t.x&&0===t.y||this._dbg(m.Error,"Unsupported viewport parameters detected!"),this.updateWasmCamera(e.camera),this._vxl.draw(),this._renderTargetToRestore.fbo=null,e.rctx.externalTextureUnitUpdate(this._vxl.get_texture_units_bound_in_frame(),this._vxl.get_active_texture_unit()),e.rctx.externalVertexArrayObjectUpdate(),e.rctx.externalVertexBufferUpdate(),this._rctx.externalProgramUpdate(),(this._moreToLoad||!this._havePreparedWithAllLayers&&this._layers.size>0)&&this._renderPluginContext.requestRender()}destroy(){this._dbg(m.Lifetime,"--destroy--"),this._removeRenderPlugin(),this._readyWatchHandle=r(this._readyWatchHandle),this._qualityWatchHandle=r(this._qualityWatchHandle),this._timeExtentWatchHandle=r(this._timeExtentWatchHandle),this._stationaryWatchHandle=r(this._stationaryWatchHandle),this._vxl&&(this._layers.forEach((e=>{e.abortController.abort()})),this._wasmMemBlocks.forEach((e=>{0!==e&&this._vxl._free(e)})),this._vxl.uninitialize_voxel_wasm(),this._vxl=null)}_initializeWasm(e){return this._vxl?Promise.resolve():(this._vxlPromise||(this._vxlPromise=h(e).then((e=>{var t;if(this._vxl=e,this._vxlPromise=null,this._newLayers.length<=0)return this._dbg(m.Lifetime," no voxel layers left after WASM downloaded, removing RenderPlugin and destroying"),void this.destroy();const i=this._getTimeArgs(null==(t=this._view)?void 0:t.timeExtent),r=this._vxl.addFunction(this._restoreFramebuffer.bind(this),"v"),s=this._vxl.addFunction(this._setBlendState.bind(this),"viiii"),n=this._vxl.addFunction(this._setFrontFace.bind(this),"vi"),a=this._vxl.addFunction(this._setRasterizerState.bind(this),"vi"),o=this._vxl.addFunction(this._setDepthStencilStateFunction.bind(this),"viii"),l=this._vxl.addFunction(this._setViewport.bind(this),"viiii"),h=this._vxl.addFunction(this._bindPreviousDepthToSlot.bind(this),"iii");this._vxl.initialize_voxel_wasm(r,s,n,a,o,l,h,i.startTime,i.endTime,i.useTime),this._renderPluginContext&&this._renderPluginContext.requestRender()})).catch((()=>{for(const e of this._newLayers)e.rejectCallback(-2);this._dbg(m.Error," WASM failed to download, removing RenderPlugin and destroying"),this.destroy()}))),this._vxlPromise)}pickDepth(e,t,i){if(!this._vxl||!this._rctx||0===this._layers.size)return null;const r=i.viewport[3]-t;if(e<0||e>i.viewport[2]||t<0||t>i.viewport[3])return this._dbg(m.Error,`pickDepth: outOfRange, screenXY=[${e}, ${r}], vp=[${i.viewport.toString()}]`),null;this._renderTargetToRestore={fbo:this._rctx.getBoundFramebufferObject(),viewport:this._rctx.getViewport()};const s=i.viewForward,n=i.eye;this._vxl.update_camera_pos_and_direction(n[0],n[1],n[2],s[0],s[1],s[2]),this.updateWasmCamera(i),this._vxl.begin_frame();const a=this._vxl.pick_depth(e,r);if(this._renderTargetToRestore.fbo=null,this._rctx.externalTextureUnitUpdate(this._vxl.get_texture_units_bound_in_frame(),this._vxl.get_active_texture_unit()),this._rctx.externalVertexArrayObjectUpdate(),this._rctx.externalVertexBufferUpdate(),this._rctx.externalProgramUpdate(),a.success){return a.distanceToCamera}return null}_toWasmQuality(e){switch(e){case"low":return 0;case"medium":return 1;case"high":return 2}}}export{p as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../geometry.js";import{isSome as r}from"../../core/maybe.js";import e from"../../geometry/support/GeographicTransformation.js";import t from"./PixelBlock.js";import{decode as o}from"./rasterFormats/RasterCodec.js";import{estimateStatisticsHistograms as s,split as i,mosaic as a,approximateTransform as n}from"./rasterFunctions/pixelUtils.js";import{requirePE as m,load as l,getProjectionOffsetGrid as f}from"./rasterFunctions/rasterProjectionHelper.js";import{convertVectorFieldData as c}from"./rasterFunctions/vectorFieldUtils.js";import{readTransform as p}from"./rasterTransforms/utils.js";import u from"../../renderers/support/RasterSymbolizer.js";import{createStreamlinesMesh as S}from"../../views/2d/engine/flow/dataUtils.js";import d from"../../geometry/Extent.js";class h{convertVectorFieldData(e){const o=t.fromJSON(e.pixelBlock),s=c(o,e.type);return Promise.resolve(r(s)&&s.toJSON())}async decode(r){const e=await o(r.data,r.options);return e&&e.toJSON()}symbolize(e){e.pixelBlock=t.fromJSON(e.pixelBlock),e.extent=e.extent?d.fromJSON(e.extent):null;const o=this.symbolizer.symbolize(e);return Promise.resolve(r(o)&&o.toJSON())}async updateSymbolizer(r){var e;this.symbolizer=u.fromJSON(r.symbolizerJSON),r.histograms&&"rasterStretch"===(null==(e=this.symbolizer)?void 0:e.rendererJSON.type)&&(this.symbolizer.rendererJSON.histograms=r.histograms)}stretch(e){const o=this.symbolizer.simpleStretch(t.fromJSON(e.srcPixelBlock),e.stretchParams);return Promise.resolve(r(o)&&o.toJSON())}estimateStatisticsHistograms(r){const e=s(t.fromJSON(r.srcPixelBlock));return Promise.resolve(e)}split(r){const e=i(t.fromJSON(r.srcPixelBlock),r.tileSize,r.maximumPyramidLevel);return e&&e.forEach(((r,t)=>{e.set(t,null==r?void 0:r.toJSON())})),Promise.resolve(e)}async mosaicAndTransform(r){const e=r.srcPixelBlocks.map((r=>r?new t(r):null)),o=a(e,r.srcMosaicSize,{blockWidths:r.blockWidths,alignmentInfo:r.alignmentInfo,clipOffset:r.clipOffset,clipSize:r.clipSize});if(!r.coefs)return o&&o.toJSON();const s=n(o,r.destDimension,r.coefs,r.sampleSpacing,r.interpolation);return s&&s.toJSON()}async createStreamlinesMesh(r,e){const t={data:new Float32Array(r.flowData.buffer),width:r.flowData.width,height:r.flowData.height},{vertexData:o,indexData:s}=await S(r.rendererSettings,t,e.signal);return{result:{vertexBuffer:o.buffer,indexBuffer:s.buffer},transferList:[o.buffer,s.buffer]}}async getProjectionOffsetGrid(r){const t=d.fromJSON(r.projectedExtent),o=d.fromJSON(r.srcBufferExtent);let s=null;r.
|
|
5
|
+
import"../../geometry.js";import{isSome as r}from"../../core/maybe.js";import e from"../../geometry/support/GeographicTransformation.js";import t from"./PixelBlock.js";import{decode as o}from"./rasterFormats/RasterCodec.js";import{estimateStatisticsHistograms as s,split as i,mosaic as a,approximateTransform as n}from"./rasterFunctions/pixelUtils.js";import{requirePE as m,load as l,getProjectionOffsetGrid as f}from"./rasterFunctions/rasterProjectionHelper.js";import{convertVectorFieldData as c}from"./rasterFunctions/vectorFieldUtils.js";import{readTransform as p}from"./rasterTransforms/utils.js";import u from"../../renderers/support/RasterSymbolizer.js";import{createStreamlinesMesh as S}from"../../views/2d/engine/flow/dataUtils.js";import d from"../../geometry/Extent.js";class h{convertVectorFieldData(e){const o=t.fromJSON(e.pixelBlock),s=c(o,e.type);return Promise.resolve(r(s)&&s.toJSON())}async decode(r){const e=await o(r.data,r.options);return e&&e.toJSON()}symbolize(e){e.pixelBlock=t.fromJSON(e.pixelBlock),e.extent=e.extent?d.fromJSON(e.extent):null;const o=this.symbolizer.symbolize(e);return Promise.resolve(r(o)&&o.toJSON())}async updateSymbolizer(r){var e;this.symbolizer=u.fromJSON(r.symbolizerJSON),r.histograms&&"rasterStretch"===(null==(e=this.symbolizer)?void 0:e.rendererJSON.type)&&(this.symbolizer.rendererJSON.histograms=r.histograms)}stretch(e){const o=this.symbolizer.simpleStretch(t.fromJSON(e.srcPixelBlock),e.stretchParams);return Promise.resolve(r(o)&&o.toJSON())}estimateStatisticsHistograms(r){const e=s(t.fromJSON(r.srcPixelBlock));return Promise.resolve(e)}split(r){const e=i(t.fromJSON(r.srcPixelBlock),r.tileSize,r.maximumPyramidLevel);return e&&e.forEach(((r,t)=>{e.set(t,null==r?void 0:r.toJSON())})),Promise.resolve(e)}async mosaicAndTransform(r){const e=r.srcPixelBlocks.map((r=>r?new t(r):null)),o=a(e,r.srcMosaicSize,{blockWidths:r.blockWidths,alignmentInfo:r.alignmentInfo,clipOffset:r.clipOffset,clipSize:r.clipSize});if(!r.coefs)return o&&o.toJSON();const s=n(o,r.destDimension,r.coefs,r.sampleSpacing,r.interpolation);return s&&s.toJSON()}async createStreamlinesMesh(r,e){const t={data:new Float32Array(r.flowData.buffer),width:r.flowData.width,height:r.flowData.height},{vertexData:o,indexData:s}=await S(r.rendererSettings,t,e.signal);return{result:{vertexBuffer:o.buffer,indexBuffer:s.buffer},transferList:[o.buffer,s.buffer]}}async getProjectionOffsetGrid(r){const t=d.fromJSON(r.projectedExtent),o=d.fromJSON(r.srcBufferExtent);let s=null;r.datumTransformationSteps&&(s=new e({steps:r.datumTransformationSteps})),m(t.spatialReference,o.spatialReference,s)&&await l();const i=r.rasterTransform?p(r.rasterTransform):null;return f({...r,projectedExtent:t,srcBufferExtent:o,datumTransformation:s,rasterTransform:i})}}export{h 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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import"../../../geometry.js";import t from"../../../request.js";import r from"../../../core/Error.js";import{JSONSupport as i}from"../../../core/JSONSupport.js";import o from"../../../core/Logger.js";import{isSome as n,isNone as s,unwrap as a}from"../../../core/maybe.js";import{EsriPromiseMixin as l}from"../../../core/Promise.js";import{onAbort as c}from"../../../core/promiseUtils.js";import{property as f}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as h}from"../../../core/accessorSupport/decorators/subclass.js";import{sanitizeUrl as u}from"../arcgisLayerUrl.js";import{url as m}from"../commonProperties.js";import d from"../RasterStorageInfo.js";import x from"../TileInfo.js";import{getRasterId as p,getBlock as g,putBlock as y,deleteBlock as I,decreaseRefCount as w}from"./RawBlockCache.js";import{decode as R}from"../rasterFormats/RasterCodec.js";import{mosaic as k,approximateTransform as v}from"../rasterFunctions/pixelUtils.js";import{load as b,projectPoint as T,snapPyramid as M,snapExtent as C,getWorldWidth as B,getWorldWrapCount as S,projectExtent as P,getProjectionOffsetGrid as H,getRasterDatasetAlignmentInfo as W,projectResolution as _}from"../rasterFunctions/rasterProjectionHelper.js";import{uvComponentToVector as j}from"../rasterFunctions/vectorFieldUtils.js";import F from"../../../geometry/Extent.js";import E from"../../../geometry/Point.js";const L=8;let A=class extends(l(i)){constructor(){super(...arguments),this.rasterJobHandler=null,this.datasetName=null,this.datasetFormat=null,this.rasterInfo=null,this.ioConfig={sampling:"closest"}}async init(){const e=b();this.addResolvingPromise(e),await this.when()}normalizeCtorArgs(e){return e&&e.ioConfig&&(e={...e,ioConfig:{resolution:null,bandIds:null,sampling:"closest",tileInfo:x.create(),...e.ioConfig}}),e}set url(e){this._set("url",u(e,o.getLogger(this.declaredClass)))}async open(e){throw new r("BaseRaster:open-not-implemented","open() is not implemented")}async fetchTile(e,t,r,i={}){const o=i.tileInfo||this.rasterInfo.storageInfo.tileInfo,n=this.getTileExtentFromTileInfo(e,t,r,o);return this.fetchPixels(n,o.size[0],o.size[1],i)}async identify(e,t={}){t=this._getRequestOptionsWithSliceId(t);const{spatialReference:r,extent:i}=this.rasterInfo,{datumTransformation:o}=t;let a=T(e,r,o);if(!i.intersects(a))return{location:a,value:null};if(n(this.rasterInfo.transform)){const e=this.rasterInfo.transform.inverseTransform(a);if(!this.rasterInfo.nativeExtent.intersects(e))return{location:e,value:null};a=e}let l=0;if(t.srcResolution){l=M(t.srcResolution,this.rasterInfo,this.ioConfig.sampling).pyramidLevel}else if(l=await this.computeBestPyramidLevelForLocation(e,t),null==l)return{location:a,value:null};const c=this.identifyPixelLocation(a,l,null);if(null===c)return{location:a,value:null};const{row:f,col:h,rowOffset:u,colOffset:m}=c,d=p(this.url,t.sliceId),x=`${l}/${f}/${h}`;let I=g(d,null,x);s(I)&&(I=this.fetchRawTile(l,f,h,t),y(d,null,x,I));const w=await I;if(s(w)||!w.pixels||0===w.pixels.length)return{location:a,value:null};const R=u*this.rasterInfo.storageInfo.blockHeight+m,k=!w.mask||w.mask[R]?w.pixels.map((e=>e[R])):null,v=this.rasterInfo.dataType;if(("vector-magdir"===v||"vector-uv"===v)&&(null==k?void 0:k.length)>1){return{location:a,value:k,magdirValue:"vector-magdir"===v?[k[0],k[1]]:j([k[0],k[1]]),pyramidLevel:l}}return{location:a,value:k,pyramidLevel:l}}async fetchPixels(e,t,r,i={}){e=C(e);const o=B(e.spatialReference),a=S(e),l=B(this.rasterInfo.spatialReference),c=n(l)&&this.rasterInfo.extent.width>=l/2;if(i=this._getRequestOptionsWithSliceId(i),s(o)||0===a||1===a&&c)return this._fetchPixels(e,t,r,i);if(a>=3)return{extent:e,pixelBlock:null};const f=[],{xmin:h,xmax:u}=e,m=Math.round(o/(u-h)*t),d=m-Math.round((o/2-h)/(u-h)*t);let x=0;const p=[];for(let n=0;n<=a;n++){const s=new F({xmin:0===n?h:-o/2,xmax:n===a?u-o*n:o/2,ymin:e.ymin,ymax:e.ymax,spatialReference:e.spatialReference}),l=0===n?m-d:n===a?t-x:m;x+=l,p.push(l);const c=this._fetchPixels(s,l,r,i);f.push(c)}const g=(await Promise.all(f)).map((e=>null==e?void 0:e.pixelBlock));let y=null;const I={width:t,height:r};y=this.rasterJobHandler?await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:g,srcMosaicSize:I,destDimension:null,coefs:null,sampleSpacing:null,interpolation:"nearest",alignmentInfo:null,blockWidths:p},i):k(g,I,{blockWidths:p});return{extent:e,srcExtent:P(e,this.rasterInfo.spatialReference,i.datumTransformation),pixelBlock:y}}async fetchRawPixels(e,t,r,i={}){t={x:Math.floor(t.x),y:Math.floor(t.y)};const o=await this._fetchRawTiles(e,t,r,i),{nativeExtent:s,nativePixelSize:a,storageInfo:l}=this.rasterInfo,c=2**e,f=a.x*c,h=a.y*c,u=new F({xmin:s.xmin+f*t.x,xmax:s.xmin+f*(t.x+r.width-1),ymin:s.ymax-h*(t.y+r.height-1),ymax:s.ymax-h*t.y,spatialReference:s.spatialReference});if(!o)return{extent:u,srcExtent:u,pixelBlock:null};const{pixelBlocks:m}=o;if(1===m.length&&n(m[0])&&m[0].width===r.width&&m[0].height===r.height)return{extent:u,srcExtent:u,pixelBlock:o.pixelBlocks[0]};const d=e>0?l.pyramidBlockWidth:l.blockWidth,x=e>0?l.pyramidBlockHeight:l.blockHeight,p={width:Math.ceil(r.width/d)*d,height:Math.ceil(r.height/x)*x},g={x:t.x%d,y:t.y%x};let y;return y=this.rasterJobHandler?await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:m,srcMosaicSize:r,destDimension:r,clipOffset:g,clipSize:r,coefs:null,sampleSpacing:null,interpolation:i.interpolation,alignmentInfo:null,blockWidths:null},i):k(m,p,{clipOffset:g,clipSize:r}),{extent:u,srcExtent:u,pixelBlock:y}}fetchRawTile(e,t,i,o){throw new r("BaseRaster:read-not-implemented","fetchRawTile() is not implemented")}computeExtent(e){return P(this.rasterInfo.extent,e)}decodePixelBlock(e,t){return!this.rasterJobHandler||t.useCanvas?R(e,t):this.rasterJobHandler.decode({data:e,options:t})}async request(e,r,i){var o,n;const{customFetchParameters:s}=this.ioConfig,{range:a,query:l,headers:c}=r;i=null!=(o=null!=(n=i)?n:r.retryCount)?o:this.ioConfig.retryCount;const f=a?{Range:`bytes=${a.from}-${a.to}`}:null;try{return await t(e,{...r,query:{...l,...s},headers:{...c,...f}})}catch(h){if(i>0)return i--,this.request(e,r,i);throw h}}getSliceIndex(e){const{multidimensionalInfo:t}=this.rasterInfo;if(!n(t))return null;if(!n(e)||0===e.length)return null;let r=0;const i=e[0].variableName;for(let o=0;o<t.variables.length;o++){const n=t.variables[o],s=n.dimensions;if(n.name!==i){r+=s.map((e=>this._getDimensionValuesCount(e))).reduce(((e,t)=>e+t));break}const a=s.map((e=>this._getDimensionValuesCount(e))),l=s.length;for(let t=0;t<l;t++){const i=e.filter((e=>e.dimensionName===s[t].name))[0];if(null==i)return null;const o=Array.isArray(i.values[0])?i.values[0][0]:i.values[0],n=this._getIndexFromDimensions(o,s[t]);if(-1===n)return null;a.shift(),r+=t===l-1?n:n*a.reduce(((e,t)=>e+t))}}return r}getTileExtentFromTileInfo(e,t,r,i){const o=i.lodAt(e);return this.getTileExtent({x:o.resolution,y:o.resolution},t,r,i.origin,i.spatialReference,i.size)}updateTileInfo(){const{storageInfo:e,spatialReference:t,extent:r,pixelSize:i}=this.rasterInfo;if(!e.tileInfo){const o=[],n=e.maximumPyramidLevel||0;let s=Math.max(i.x,i.y),a=1/.0254*96*s;for(let e=0;e<=n;e++)o.push({level:n-e,resolution:s,scale:a}),s*=2,a*=2;const l=new E({x:r.xmin,y:r.ymax,spatialReference:t});e.tileInfo=new x({origin:l,size:[e.blockWidth,e.blockHeight],spatialReference:t,lods:o}),e.isVirtualTileInfo=!0}}createRemoteDatasetStorageInfo(e,t=512,r=512,i){const{width:o,height:n,nativeExtent:s,pixelSize:a,spatialReference:l}=e,c=new E({x:s.xmin,y:s.ymax,spatialReference:l});null==i&&(i=Math.max(0,Math.round(Math.log(Math.max(o,n))/Math.LN2-8)));const f=this.computeBlockBoundary(s,512,512,{x:s.xmin,y:s.ymax},[a],i);e.storageInfo=new d({blockWidth:t,blockHeight:r,pyramidBlockWidth:t,pyramidBlockHeight:r,origin:c,firstPyramidLevel:1,maximumPyramidLevel:i,blockBoundary:f})}async computeBestPyramidLevelForLocation(e,t={}){return 0}computeBlockBoundary(e,t,r,i,o,n=0,s=2){if(1===o.length&&n>0){o=[...o];let{x:e,y:t}=o[0];for(let r=0;r<n;r++)e*=s,t*=s,o.push({x:e,y:t})}const a=[],{x:l,y:c}=i;for(let f=0;f<o.length;f++){const{x:i,y:n}=o[f];a.push({minCol:Math.floor((e.xmin-l+.1*i)/t/i),maxCol:Math.floor((e.xmax-l-.1*i)/t/i),minRow:Math.floor((c-e.ymax+.1*n)/r/n),maxRow:Math.floor((c-e.ymin-.1*n)/r/n)})}return a}getPyramidPixelSize(e){const{nativePixelSize:t}=this.rasterInfo,{pyramidResolutions:r,pyramidScalingFactor:i}=this.rasterInfo.storageInfo;if(0===e)return t;if(n(r)&&r.length)return r[e-1];const o=i**e;return{x:t.x*o,y:t.y*o}}identifyPixelLocation(e,t,r){const{spatialReference:i,nativeExtent:o}=this.rasterInfo,{blockWidth:n,blockHeight:s,maximumPyramidLevel:a,origin:l}=this.rasterInfo.storageInfo,c=T(e,i,r);if(!o.intersects(c))return null;if(t<0||t>a)return null;const f=this.getPyramidPixelSize(t),{x:h,y:u}=f,m=(l.y-c.y)/u/s,d=(c.x-l.x)/h/n,x=Math.min(s-1,Math.floor((m-Math.floor(m))*s)),p=Math.min(n-1,Math.floor((d-Math.floor(d))*n));return{pyramidLevel:t,row:Math.floor(m),col:Math.floor(d),rowOffset:x,colOffset:p,srcLocation:c}}getTileExtent(e,t,r,i,o,n){const[s,a]=n,l=i.x+r*s*e.x,c=l+s*e.x,f=i.y-t*a*e.y,h=f-a*e.y;return new F({xmin:l,xmax:c,ymin:h,ymax:f,spatialReference:o})}getBlockWidthHeight(e){return{blockWidth:e>0?this.rasterInfo.storageInfo.pyramidBlockWidth:this.rasterInfo.storageInfo.blockWidth,blockHeight:e>0?this.rasterInfo.storageInfo.pyramidBlockHeight:this.rasterInfo.storageInfo.blockHeight}}isBlockOutside(e,t,r){const i=this.rasterInfo.storageInfo.blockBoundary[e];return!i||i.maxRow<t||i.maxCol<r||i.minRow>t||i.minCol>r}async _fetchPixels(e,t,r,i={}){let o=S(e);if(o>=2)return{extent:e,pixelBlock:null};const n=this._getSourceDataInfo(e,t,r,i),{pyramidLevel:s,pyramidResolution:l,srcResolution:c,srcExtent:f,srcWidth:h,srcHeight:u}=n;if(0===h||0===u)return{extent:e,srcExtent:f,pixelBlock:null};const m=a(this.rasterInfo.transform);"gcs-shift"===(null==m?void 0:m.type)&&(o=S(n.srcExtent,!0));const d=this.rasterInfo.storageInfo,x={x:Math.floor((f.xmin-d.origin.x)/l.x+.1),y:Math.floor((d.origin.y-f.ymax)/l.y+.1)},p=await this._fetchRawTiles(s,x,{width:h,height:u,wrapCount:o},i);if(!p)return{extent:e,srcExtent:f,pixelBlock:null};const g=s>0?d.pyramidBlockWidth:d.blockWidth,y=s>0?d.pyramidBlockHeight:d.blockHeight,I=g===h&&y===u&&x.x%g==0&&x.y%y==0,w=new E({x:(e.xmax-e.xmin)/t,y:(e.ymax-e.ymin)/r,spatialReference:e.spatialReference}),R=!e.spatialReference.equals(this.rasterInfo.spatialReference),{datumTransformation:b}=i;if(!R&&I&&1===p.pixelBlocks.length&&g===t&&y===r&&c.x===w.x&&c.y===w.y)return{extent:e,srcExtent:f,pixelBlock:p.pixelBlocks[0]};const T=this.rasterJobHandler?await this.rasterJobHandler.getProjectionOffsetGrid({projectedExtent:e,srcBufferExtent:p.extent,pixelSize:w.toJSON(),datumTransformation:b,rasterTransform:m,hasWrapAround:o>0,isAdaptive:!1!==this.ioConfig.optimizeProjectionAccuracy},i):H({projectedExtent:e,srcBufferExtent:p.extent,pixelSize:w,datumTransformation:b,rasterTransform:m,hasWrapAround:o>0,isAdaptive:!1});let M;const C=!i.requestRawData,B={rows:T.spacing[0],cols:T.spacing[1]},P=a(this._getRasterTileAlignmentInfo(s,p.extent.xmin)),{pixelBlocks:W,mosaicSize:_,isPartiallyFilled:j}=p;if(this.rasterJobHandler)M=await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:W,srcMosaicSize:_,destDimension:C?{width:t,height:r}:null,coefs:C?T.coefficients:null,sampleSpacing:C?B:null,interpolation:i.interpolation,alignmentInfo:P,blockWidths:null},i);else{const e=k(W,_,{alignmentInfo:P});M=C?v(e,{width:t,height:r},T.coefficients,B,i.interpolation):e}return i.requestRawData?{srcExtent:f,pixelBlock:M,transformGrid:T,extent:e,isPartiallyFilled:j}:{srcExtent:f,extent:e,pixelBlock:M}}async _fetchRawTiles(e,t,r,i){const{origin:o,blockBoundary:n}=this.rasterInfo.storageInfo,{blockWidth:s,blockHeight:l}=this.getBlockWidthHeight(e);let{x:c,y:f}=t,{width:h,height:u,wrapCount:m}=r;const d=a(this._getRasterTileAlignmentInfo(e,0));i.buffer&&(c-=i.buffer.cols,f-=i.buffer.rows,h+=2*i.buffer.cols,u+=2*i.buffer.rows);const x=Math.floor(c/s),p=Math.floor(f/l),g=Math.floor((c+h-1)/s),y=Math.floor((f+u-1)/l),I=n[e];if(!I)return null;const{minRow:w,minCol:R,maxCol:k,maxRow:v}=I;if(0===m&&(y<w||g<R||p>v||x>k))return null;const b=new Array;let T=!1;const M=null==this.ioConfig.allowPartialFill?i.allowPartialFill:this.ioConfig.allowPartialFill;for(let a=p;a<=y;a++)for(let t=x;t<=g;t++){const r=0===m||null==d||t<d.worldColumnCountFromOrigin?t:t%d.worldColumnCountFromOrigin-d.originColumnOffset;if(a>=w&&r>=R&&v>=a&&k>=r){const t=this._fetchRawTile(e,a,r,i);M?b.push(new Promise((e=>{t.then((t=>e(t))).catch((()=>{T=!0,e(null)}))}))):b.push(t)}else b.push(null)}if(0===b.length)return null;const C=await Promise.all(b),B={height:(y-p+1)*l,width:(g-x+1)*s},{spatialReference:S}=this.rasterInfo,P=this.getPyramidPixelSize(e),{x:H,y:W}=P;return{extent:new F({xmin:o.x+x*s*H,xmax:o.x+(g+1)*s*H,ymin:o.y-(y+1)*l*W,ymax:o.y-p*l*W,spatialReference:S}),pixelBlocks:C,mosaicSize:B,isPartiallyFilled:T}}_fetchRawTile(e,t,r,i){const o=this.rasterInfo.storageInfo.blockBoundary[e];if(!o)return Promise.resolve(null);const{minRow:n,minCol:a,maxCol:l,maxRow:f}=o;if(t<n||r<a||t>f||r>l)return Promise.resolve(null);const h=p(this.url,i.sliceId),u=`${e}/${t}/${r}`;let m=g(h,i.registryId,u);if(s(m)){const o=new AbortController;m=this.fetchRawTile(e,t,r,{...i,signal:o.signal}),y(h,i.registryId,u,m,o),m.catch((()=>I(h,i.registryId,u)))}return i.signal&&c(i,(()=>{w(h,i.registryId,u)})),m}_getIndexFromDimensions(e,t){const{extent:r,interval:i,unit:o,values:n}=t;if(null!=n&&n.length)return Array.isArray(n[0])?n.findIndex((t=>t[0]<=e&&t[1]>=e)):n.indexOf(e);if(e>r[1])return-1;const s=r[0];let a=-1;if("ISO8601"===o){var l;switch((null==(l=t.intervalUnit)?void 0:l.toLowerCase())||"seconds"){case"seconds":a=Math.round((e-s)/1e3/i);break;case"minutes":a=Math.round((e-s)/6e4/i);break;case"hours":a=Math.round((e-s)/36e5/i);break;case"days":a=Math.round((e-s)/864e5/i);break;case"years":a=Math.round((new Date(e).getUTCFullYear()-new Date(s).getUTCFullYear())/i);break;case"decades":a=Math.round((new Date(e).getUTCFullYear()-new Date(s).getUTCFullYear())/10/i)}return a}return Math.round((e-s)/i)}_getDimensionValuesCount(e){const{extent:t,interval:r,unit:i,values:o}=e;let n=(null==o?void 0:o.length)||0;if(n)return n;const s=t[0];if(0===n&&"ISO8601"===i){var a;switch((null==(a=e.intervalUnit)?void 0:a.toLowerCase())||"seconds"){case"seconds":n=Math.round((t[1]-t[0])/1e3/r);break;case"minutes":n=Math.round((t[1]-t[0])/6e4/r);break;case"hours":n=Math.round((t[1]-t[0])/36e5/r);break;case"days":n=Math.round((t[1]-t[0])/864e5/r);break;case"years":n=Math.round((new Date(t[1]).getUTCFullYear()-new Date(s).getUTCFullYear())/r);break;case"decades":n=Math.round((new Date(t[1]).getUTCFullYear()-new Date(s).getUTCFullYear())/10/r)}return n}return Math.round((t[1]-t[0])/r)}_getRasterTileAlignmentInfo(e,t){return null==this._rasterTileAlighmentInfo&&(this._rasterTileAlighmentInfo=W(this.rasterInfo)),n(this._rasterTileAlighmentInfo.pyramidsInfo)?{startX:t,halfWorldWidth:this._rasterTileAlighmentInfo.halfWorldWidth,hasGCSSShiftTransform:this._rasterTileAlighmentInfo.hasGCSSShiftTransform,...this._rasterTileAlighmentInfo.pyramidsInfo[e]}:null}_getSourceDataInfo(e,t,r,i={}){const o={datumTransformation:i.datumTransformation,pyramidLevel:0,pyramidResolution:null,srcExtent:null,srcHeight:0,srcResolution:null,srcWidth:0};i.srcResolution&&(o.srcResolution=i.srcResolution,this._updateSourceDataInfo(e,o));const n=this.rasterInfo.storageInfo.maximumPyramidLevel||0,{srcWidth:s,srcHeight:a,pyramidLevel:l}=o,c=s/t,f=a/r,h=l<n&&c*f>=16;if(h||l===n&&(c>L||f>L)||(0===s||0===a)){const s=new E({x:(e.xmax-e.xmin)/t,y:(e.ymax-e.ymin)/r,spatialReference:e.spatialReference});let a=_(s,this.rasterInfo.spatialReference,e,o.datumTransformation);const u=!a||i.srcResolution&&a.x+a.y<i.srcResolution.x+i.srcResolution.y;if(h&&i.srcResolution&&u){const e=Math.round(Math.log(Math.max(c,f))/Math.LN2)-1;if(n-l+3>=e){const t=2**e;a={x:i.srcResolution.x*t,y:i.srcResolution.y*t}}}a&&(o.srcResolution=a,this._updateSourceDataInfo(e,o))}return(o.srcWidth/t>L||o.srcHeight/r>L)&&(o.srcWidth=0,o.srcHeight=0),o}_updateSourceDataInfo(e,t){t.srcWidth=0,t.srcHeight=0;const r=this.rasterInfo.spatialReference,{srcResolution:i,datumTransformation:o}=t,{pyramidLevel:n,pyramidResolution:s,excessiveReading:l}=M(i,this.rasterInfo,this.ioConfig.sampling);if(l)return;let c=t.srcExtent||P(e,r,o);if(null==c)return;const f=a(this.rasterInfo.transform);f&&(c=f.inverseTransform(c)),t.srcExtent=c;const h=Math.ceil((c.xmax-c.xmin)/s.x-.1),u=Math.ceil((c.ymax-c.ymin)/s.y-.1);t.pyramidLevel=n,t.pyramidResolution=s,t.srcWidth=h,t.srcHeight=u}_getRequestOptionsWithSliceId(e){return n(this.rasterInfo.multidimensionalInfo)&&null==e.sliceId&&(e={...e,sliceId:this.getSliceIndex(e.multidimensionalDefinition)}),e}};e([f()],A.prototype,"_rasterTileAlighmentInfo",void 0),e([f(m)],A.prototype,"url",null),e([f({type:String,json:{write:!0}})],A.prototype,"datasetName",void 0),e([f({type:String,json:{write:!0}})],A.prototype,"datasetFormat",void 0),e([f()],A.prototype,"rasterInfo",void 0),e([f()],A.prototype,"ioConfig",void 0),e([f()],A.prototype,"sourceJSON",void 0),A=e([h("esri.layers.support.rasterDatasets.BaseRaster")],A);const D=A;export{D as default};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import"../../../geometry.js";import t from"../../../request.js";import r from"../../../core/Error.js";import{JSONSupport as i}from"../../../core/JSONSupport.js";import o from"../../../core/Logger.js";import{isSome as n,isNone as s,unwrap as a}from"../../../core/maybe.js";import{EsriPromiseMixin as l}from"../../../core/Promise.js";import{onAbort as c}from"../../../core/promiseUtils.js";import{property as f}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as h}from"../../../core/accessorSupport/decorators/subclass.js";import{sanitizeUrl as u}from"../arcgisLayerUrl.js";import{url as m}from"../commonProperties.js";import d from"../RasterStorageInfo.js";import p from"../TileInfo.js";import{getRasterId as x,getBlock as g,putBlock as y,deleteBlock as I,decreaseRefCount as w}from"./RawBlockCache.js";import{decode as R}from"../rasterFormats/RasterCodec.js";import{mosaic as k,approximateTransform as v}from"../rasterFunctions/pixelUtils.js";import{load as b,getWorldWidth as T,projectPoint as M,snapPyramid as S,snapExtent as B,getWorldWrapCount as C,projectExtent as P,getProjectionOffsetGrid as W,getRasterDatasetAlignmentInfo as _,projectResolution as H}from"../rasterFunctions/rasterProjectionHelper.js";import{uvComponentToVector as j}from"../rasterFunctions/vectorFieldUtils.js";import F from"../../../geometry/Extent.js";import E from"../../../geometry/Point.js";const A=8;let L=class extends(l(i)){constructor(){super(...arguments),this.rasterJobHandler=null,this.datasetName=null,this.datasetFormat=null,this.rasterInfo=null,this.ioConfig={sampling:"closest"}}async init(){const e=b();this.addResolvingPromise(e),await this.when()}normalizeCtorArgs(e){return e&&e.ioConfig&&(e={...e,ioConfig:{resolution:null,bandIds:null,sampling:"closest",tileInfo:p.create(),...e.ioConfig}}),e}get _isGlobalWrappableSource(){const{rasterInfo:e}=this,t=T(e.spatialReference);return n(t)&&e.extent.width>=t/2}set url(e){this._set("url",u(e,o.getLogger(this.declaredClass)))}async open(e){throw new r("BaseRaster:open-not-implemented","open() is not implemented")}async fetchTile(e,t,r,i={}){const o=i.tileInfo||this.rasterInfo.storageInfo.tileInfo,n=this.getTileExtentFromTileInfo(e,t,r,o);return this.fetchPixels(n,o.size[0],o.size[1],i)}async identify(e,t={}){t=this._getRequestOptionsWithSliceId(t);const{spatialReference:r,extent:i}=this.rasterInfo,{datumTransformation:o}=t;let a=M(e,r,o);if(!i.intersects(a))return{location:a,value:null};if(n(this.rasterInfo.transform)){const e=this.rasterInfo.transform.inverseTransform(a);if(!this.rasterInfo.nativeExtent.intersects(e))return{location:e,value:null};a=e}let l=0;if(t.srcResolution){l=S(t.srcResolution,this.rasterInfo,this.ioConfig.sampling).pyramidLevel}else if(l=await this.computeBestPyramidLevelForLocation(e,t),null==l)return{location:a,value:null};const c=this.identifyPixelLocation(a,l,null);if(null===c)return{location:a,value:null};const{row:f,col:h,rowOffset:u,colOffset:m}=c,d=x(this.url,t.sliceId),p=`${l}/${f}/${h}`;let I=g(d,null,p);s(I)&&(I=this.fetchRawTile(l,f,h,t),y(d,null,p,I));const w=await I;if(s(w)||!w.pixels||0===w.pixels.length)return{location:a,value:null};const R=u*this.rasterInfo.storageInfo.blockHeight+m,k=!w.mask||w.mask[R]?w.pixels.map((e=>e[R])):null,v=this.rasterInfo.dataType;if(("vector-magdir"===v||"vector-uv"===v)&&(null==k?void 0:k.length)>1){return{location:a,value:k,magdirValue:"vector-magdir"===v?[k[0],k[1]]:j([k[0],k[1]]),pyramidLevel:l}}return{location:a,value:k,pyramidLevel:l}}async fetchPixels(e,t,r,i={}){if(e=B(e),(i=this._getRequestOptionsWithSliceId(i)).requestRawData)return this._fetchPixels(e,t,r,i);const o=T(e.spatialReference),n=C(e);if(s(o)||0===n||1===n&&this._isGlobalWrappableSource)return this._fetchPixels(e,t,r,i);if(n>=3)return{extent:e,pixelBlock:null};const a=[],{xmin:l,xmax:c}=e,f=Math.round(o/(c-l)*t),h=f-Math.round((o/2-l)/(c-l)*t);let u=0;const m=[];for(let s=0;s<=n;s++){const d=new F({xmin:0===s?l:-o/2,xmax:s===n?c-o*s:o/2,ymin:e.ymin,ymax:e.ymax,spatialReference:e.spatialReference}),p=0===s?f-h:s===n?t-u:f;u+=p,m.push(p);const x=i.disableWrapAround&&s>0?null:this._fetchPixels(d,p,r,i);a.push(x)}const d=(await Promise.all(a)).map((e=>null==e?void 0:e.pixelBlock));let p=null;const x={width:t,height:r};p=this.rasterJobHandler?await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:d,srcMosaicSize:x,destDimension:null,coefs:null,sampleSpacing:null,interpolation:"nearest",alignmentInfo:null,blockWidths:m},i):k(d,x,{blockWidths:m});return{extent:e,srcExtent:P(e,this.rasterInfo.spatialReference,i.datumTransformation),pixelBlock:p}}async fetchRawPixels(e,t,r,i={}){t={x:Math.floor(t.x),y:Math.floor(t.y)};const o=await this._fetchRawTiles(e,t,r,i),{nativeExtent:s,nativePixelSize:a,storageInfo:l}=this.rasterInfo,c=2**e,f=a.x*c,h=a.y*c,u=new F({xmin:s.xmin+f*t.x,xmax:s.xmin+f*(t.x+r.width-1),ymin:s.ymax-h*(t.y+r.height-1),ymax:s.ymax-h*t.y,spatialReference:s.spatialReference});if(!o)return{extent:u,srcExtent:u,pixelBlock:null};const{pixelBlocks:m}=o;if(1===m.length&&n(m[0])&&m[0].width===r.width&&m[0].height===r.height)return{extent:u,srcExtent:u,pixelBlock:o.pixelBlocks[0]};const d=e>0?l.pyramidBlockWidth:l.blockWidth,p=e>0?l.pyramidBlockHeight:l.blockHeight,x={width:Math.ceil(r.width/d)*d,height:Math.ceil(r.height/p)*p},g={x:t.x%d,y:t.y%p};let y;return y=this.rasterJobHandler?await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:m,srcMosaicSize:r,destDimension:r,clipOffset:g,clipSize:r,coefs:null,sampleSpacing:null,interpolation:i.interpolation,alignmentInfo:null,blockWidths:null},i):k(m,x,{clipOffset:g,clipSize:r}),{extent:u,srcExtent:u,pixelBlock:y}}fetchRawTile(e,t,i,o){throw new r("BaseRaster:read-not-implemented","fetchRawTile() is not implemented")}computeExtent(e){return P(this.rasterInfo.extent,e)}decodePixelBlock(e,t){return!this.rasterJobHandler||t.useCanvas?R(e,t):this.rasterJobHandler.decode({data:e,options:t})}async request(e,r,i){var o,n;const{customFetchParameters:s}=this.ioConfig,{range:a,query:l,headers:c}=r;i=null!=(o=null!=(n=i)?n:r.retryCount)?o:this.ioConfig.retryCount;const f=a?{Range:`bytes=${a.from}-${a.to}`}:null;try{return await t(e,{...r,query:{...l,...s},headers:{...c,...f}})}catch(h){if(i>0)return i--,this.request(e,r,i);throw h}}getSliceIndex(e){const{multidimensionalInfo:t}=this.rasterInfo;if(!n(t))return null;if(!n(e)||0===e.length)return null;let r=0;const i=e[0].variableName;for(let o=0;o<t.variables.length;o++){const n=t.variables[o],s=n.dimensions;if(n.name!==i){r+=s.map((e=>this._getDimensionValuesCount(e))).reduce(((e,t)=>e+t));break}const a=s.map((e=>this._getDimensionValuesCount(e))),l=s.length;for(let t=0;t<l;t++){const i=e.filter((e=>e.dimensionName===s[t].name))[0];if(null==i)return null;const o=Array.isArray(i.values[0])?i.values[0][0]:i.values[0],n=this._getIndexFromDimensions(o,s[t]);if(-1===n)return null;a.shift(),r+=t===l-1?n:n*a.reduce(((e,t)=>e+t))}}return r}getTileExtentFromTileInfo(e,t,r,i){const o=i.lodAt(e);return this.getTileExtent({x:o.resolution,y:o.resolution},t,r,i.origin,i.spatialReference,i.size)}updateTileInfo(){const{storageInfo:e,spatialReference:t,extent:r,pixelSize:i}=this.rasterInfo;if(!e.tileInfo){const o=[],n=e.maximumPyramidLevel||0;let s=Math.max(i.x,i.y),a=1/.0254*96*s;for(let e=0;e<=n;e++)o.push({level:n-e,resolution:s,scale:a}),s*=2,a*=2;const l=new E({x:r.xmin,y:r.ymax,spatialReference:t});e.tileInfo=new p({origin:l,size:[e.blockWidth,e.blockHeight],spatialReference:t,lods:o}),e.isVirtualTileInfo=!0}}createRemoteDatasetStorageInfo(e,t=512,r=512,i){const{width:o,height:n,nativeExtent:s,pixelSize:a,spatialReference:l}=e,c=new E({x:s.xmin,y:s.ymax,spatialReference:l});null==i&&(i=Math.max(0,Math.round(Math.log(Math.max(o,n))/Math.LN2-8)));const f=this.computeBlockBoundary(s,512,512,{x:s.xmin,y:s.ymax},[a],i);e.storageInfo=new d({blockWidth:t,blockHeight:r,pyramidBlockWidth:t,pyramidBlockHeight:r,origin:c,firstPyramidLevel:1,maximumPyramidLevel:i,blockBoundary:f})}async computeBestPyramidLevelForLocation(e,t={}){return 0}computeBlockBoundary(e,t,r,i,o,n=0,s=2){if(1===o.length&&n>0){o=[...o];let{x:e,y:t}=o[0];for(let r=0;r<n;r++)e*=s,t*=s,o.push({x:e,y:t})}const a=[],{x:l,y:c}=i;for(let f=0;f<o.length;f++){const{x:i,y:n}=o[f];a.push({minCol:Math.floor((e.xmin-l+.1*i)/t/i),maxCol:Math.floor((e.xmax-l-.1*i)/t/i),minRow:Math.floor((c-e.ymax+.1*n)/r/n),maxRow:Math.floor((c-e.ymin-.1*n)/r/n)})}return a}getPyramidPixelSize(e){const{nativePixelSize:t}=this.rasterInfo,{pyramidResolutions:r,pyramidScalingFactor:i}=this.rasterInfo.storageInfo;if(0===e)return t;if(n(r)&&r.length)return r[e-1];const o=i**e;return{x:t.x*o,y:t.y*o}}identifyPixelLocation(e,t,r){const{spatialReference:i,nativeExtent:o}=this.rasterInfo,{blockWidth:n,blockHeight:s,maximumPyramidLevel:a,origin:l}=this.rasterInfo.storageInfo,c=M(e,i,r);if(!o.intersects(c))return null;if(t<0||t>a)return null;const f=this.getPyramidPixelSize(t),{x:h,y:u}=f,m=(l.y-c.y)/u/s,d=(c.x-l.x)/h/n,p=Math.min(s-1,Math.floor((m-Math.floor(m))*s)),x=Math.min(n-1,Math.floor((d-Math.floor(d))*n));return{pyramidLevel:t,row:Math.floor(m),col:Math.floor(d),rowOffset:p,colOffset:x,srcLocation:c}}getTileExtent(e,t,r,i,o,n){const[s,a]=n,l=i.x+r*s*e.x,c=l+s*e.x,f=i.y-t*a*e.y,h=f-a*e.y;return new F({xmin:l,xmax:c,ymin:h,ymax:f,spatialReference:o})}getBlockWidthHeight(e){return{blockWidth:e>0?this.rasterInfo.storageInfo.pyramidBlockWidth:this.rasterInfo.storageInfo.blockWidth,blockHeight:e>0?this.rasterInfo.storageInfo.pyramidBlockHeight:this.rasterInfo.storageInfo.blockHeight}}isBlockOutside(e,t,r){const i=this.rasterInfo.storageInfo.blockBoundary[e];return!i||i.maxRow<t||i.maxCol<r||i.minRow>t||i.minCol>r}async _fetchPixels(e,t,r,i={}){let o=C(e);if(o>=2)return{extent:e,pixelBlock:null};const s=this._getSourceDataInfo(e,t,r,i),{pyramidLevel:l,pyramidResolution:c,srcResolution:f,srcExtent:h,srcWidth:u,srcHeight:m}=s;if(0===u||0===m)return{extent:e,srcExtent:h,pixelBlock:null};const d=a(this.rasterInfo.transform);"gcs-shift"===(null==d?void 0:d.type)&&(o=C(s.srcExtent,!0));const p=this.rasterInfo.storageInfo,x={x:Math.floor((h.xmin-p.origin.x)/c.x+.1),y:Math.floor((p.origin.y-h.ymax)/c.y+.1)},g=await this._fetchRawTiles(l,x,{width:u,height:m,wrapCount:o},i);if(!g)return{extent:e,srcExtent:h,pixelBlock:null};const y=l>0?p.pyramidBlockWidth:p.blockWidth,I=l>0?p.pyramidBlockHeight:p.blockHeight,w=y===u&&I===m&&x.x%y==0&&x.y%I==0,R=new E({x:(e.xmax-e.xmin)/t,y:(e.ymax-e.ymin)/r,spatialReference:e.spatialReference}),b=!e.spatialReference.equals(this.rasterInfo.spatialReference),{datumTransformation:M}=i;if(!b&&w&&1===g.pixelBlocks.length&&y===t&&I===r&&f.x===R.x&&f.y===R.y)return{extent:e,srcExtent:h,pixelBlock:g.pixelBlocks[0]};const S=n(T(e.spatialReference))&&n(T(h.spatialReference)),B=this.rasterJobHandler?await this.rasterJobHandler.getProjectionOffsetGrid({projectedExtent:e,srcBufferExtent:g.extent,pixelSize:R.toJSON(),datumTransformation:M,rasterTransform:d,hasWrapAround:o>0||S,isAdaptive:!1!==this.ioConfig.optimizeProjectionAccuracy},i):W({projectedExtent:e,srcBufferExtent:g.extent,pixelSize:R,datumTransformation:M,rasterTransform:d,hasWrapAround:o>0||S,isAdaptive:!1});let P;const _=!i.requestRawData,H={rows:B.spacing[0],cols:B.spacing[1]},j=a(this._getRasterTileAlignmentInfo(l,g.extent.xmin)),{pixelBlocks:F,mosaicSize:A,isPartiallyFilled:L}=g;if(this.rasterJobHandler)P=await this.rasterJobHandler.mosaicAndTransform({srcPixelBlocks:F,srcMosaicSize:A,destDimension:_?{width:t,height:r}:null,coefs:_?B.coefficients:null,sampleSpacing:_?H:null,interpolation:i.interpolation,alignmentInfo:j,blockWidths:null},i);else{const e=k(F,A,{alignmentInfo:j});P=_?v(e,{width:t,height:r},B.coefficients,H,i.interpolation):e}return i.requestRawData?{srcExtent:h,pixelBlock:P,transformGrid:B,extent:e,isPartiallyFilled:L}:{srcExtent:h,extent:e,pixelBlock:P}}async _fetchRawTiles(e,t,r,i){const{origin:o,blockBoundary:s}=this.rasterInfo.storageInfo,{blockWidth:a,blockHeight:l}=this.getBlockWidthHeight(e);let{x:c,y:f}=t,{width:h,height:u,wrapCount:m}=r;const d=this._getRasterTileAlignmentInfo(e,0);i.buffer&&(c-=i.buffer.cols,f-=i.buffer.rows,h+=2*i.buffer.cols,u+=2*i.buffer.rows);let p=0,x=0,g=0;if(m&&n(d)){({worldColumnCountFromOrigin:x,originColumnOffset:g,rightPadding:p}=d);x*d.blockWidth-p>=c+h&&(p=0)}const y=Math.floor(c/a),I=Math.floor(f/l),w=Math.floor((c+h+p-1)/a),R=Math.floor((f+u+p-1)/l),k=s[e];if(!k)return null;const{minRow:v,minCol:b,maxCol:T,maxRow:M}=k;if(0===m&&(R<v||w<b||I>M||y>T))return null;const S=new Array;let B=!1;const C=null==this.ioConfig.allowPartialFill?i.allowPartialFill:this.ioConfig.allowPartialFill;for(let F=I;F<=R;F++)for(let t=y;t<=w;t++){let r=t;if(!i.disableWrapAround&&m&&n(d)&&x<=t&&(r=t-x-g),F>=v&&r>=b&&M>=F&&T>=r){const t=this._fetchRawTile(e,F,r,i);C?S.push(new Promise((e=>{t.then((t=>e(t))).catch((()=>{B=!0,e(null)}))}))):S.push(t)}else S.push(null)}if(0===S.length)return null;const P=await Promise.all(S),W={height:(R-I+1)*l,width:(w-y+1)*a},{spatialReference:_}=this.rasterInfo,H=this.getPyramidPixelSize(e),{x:j,y:E}=H;return{extent:new F({xmin:o.x+y*a*j,xmax:o.x+(w+1)*a*j,ymin:o.y-(R+1)*l*E,ymax:o.y-I*l*E,spatialReference:_}),pixelBlocks:P,mosaicSize:W,isPartiallyFilled:B}}_fetchRawTile(e,t,r,i){const o=this.rasterInfo.storageInfo.blockBoundary[e];if(!o)return Promise.resolve(null);const{minRow:n,minCol:a,maxCol:l,maxRow:f}=o;if(t<n||r<a||t>f||r>l)return Promise.resolve(null);const h=x(this.url,i.sliceId),u=`${e}/${t}/${r}`;let m=g(h,i.registryId,u);if(s(m)){const o=new AbortController;m=this.fetchRawTile(e,t,r,{...i,signal:o.signal}),y(h,i.registryId,u,m,o),m.catch((()=>I(h,i.registryId,u)))}return i.signal&&c(i,(()=>{w(h,i.registryId,u)})),m}_getIndexFromDimensions(e,t){const{extent:r,interval:i,unit:o,values:n}=t;if(null!=n&&n.length)return Array.isArray(n[0])?n.findIndex((t=>t[0]<=e&&t[1]>=e)):n.indexOf(e);if(e>r[1])return-1;const s=r[0];let a=-1;if("ISO8601"===o){var l;switch((null==(l=t.intervalUnit)?void 0:l.toLowerCase())||"seconds"){case"seconds":a=Math.round((e-s)/1e3/i);break;case"minutes":a=Math.round((e-s)/6e4/i);break;case"hours":a=Math.round((e-s)/36e5/i);break;case"days":a=Math.round((e-s)/864e5/i);break;case"years":a=Math.round((new Date(e).getUTCFullYear()-new Date(s).getUTCFullYear())/i);break;case"decades":a=Math.round((new Date(e).getUTCFullYear()-new Date(s).getUTCFullYear())/10/i)}return a}return Math.round((e-s)/i)}_getDimensionValuesCount(e){const{extent:t,interval:r,unit:i,values:o}=e;let n=(null==o?void 0:o.length)||0;if(n)return n;const s=t[0];if(0===n&&"ISO8601"===i){var a;switch((null==(a=e.intervalUnit)?void 0:a.toLowerCase())||"seconds"){case"seconds":n=Math.round((t[1]-t[0])/1e3/r);break;case"minutes":n=Math.round((t[1]-t[0])/6e4/r);break;case"hours":n=Math.round((t[1]-t[0])/36e5/r);break;case"days":n=Math.round((t[1]-t[0])/864e5/r);break;case"years":n=Math.round((new Date(t[1]).getUTCFullYear()-new Date(s).getUTCFullYear())/r);break;case"decades":n=Math.round((new Date(t[1]).getUTCFullYear()-new Date(s).getUTCFullYear())/10/r)}return n}return Math.round((t[1]-t[0])/r)}_getRasterTileAlignmentInfo(e,t){return null==this._rasterTileAlighmentInfo&&(this._rasterTileAlighmentInfo=_(this.rasterInfo)),n(this._rasterTileAlighmentInfo.pyramidsInfo)?{startX:t,halfWorldWidth:this._rasterTileAlighmentInfo.halfWorldWidth,hasGCSSShiftTransform:this._rasterTileAlighmentInfo.hasGCSSShiftTransform,...this._rasterTileAlighmentInfo.pyramidsInfo[e]}:null}_getSourceDataInfo(e,t,r,i={}){const o={datumTransformation:i.datumTransformation,pyramidLevel:0,pyramidResolution:null,srcExtent:null,srcHeight:0,srcResolution:null,srcWidth:0};i.srcResolution&&(o.srcResolution=i.srcResolution,this._updateSourceDataInfo(e,o));const n=this.rasterInfo.storageInfo.maximumPyramidLevel||0,{srcWidth:s,srcHeight:a,pyramidLevel:l}=o,c=s/t,f=a/r,h=l<n&&c*f>=16;if(h||l===n&&(c>A||f>A)||(0===s||0===a)){const s=new E({x:(e.xmax-e.xmin)/t,y:(e.ymax-e.ymin)/r,spatialReference:e.spatialReference});let a=H(s,this.rasterInfo.spatialReference,e,o.datumTransformation);const u=!a||i.srcResolution&&a.x+a.y<i.srcResolution.x+i.srcResolution.y;if(h&&i.srcResolution&&u){const e=Math.round(Math.log(Math.max(c,f))/Math.LN2)-1;if(n-l+3>=e){const t=2**e;a={x:i.srcResolution.x*t,y:i.srcResolution.y*t}}}a&&(o.srcResolution=a,this._updateSourceDataInfo(e,o))}return(o.srcWidth/t>A||o.srcHeight/r>A)&&(o.srcWidth=0,o.srcHeight=0),o}_updateSourceDataInfo(e,t){t.srcWidth=0,t.srcHeight=0;const r=this.rasterInfo.spatialReference,{srcResolution:i,datumTransformation:o}=t,{pyramidLevel:n,pyramidResolution:s,excessiveReading:l}=S(i,this.rasterInfo,this.ioConfig.sampling);if(l)return;let c=t.srcExtent||P(e,r,o);if(null==c)return;const f=a(this.rasterInfo.transform);f&&(c=f.inverseTransform(c)),t.srcExtent=c;const h=Math.ceil((c.xmax-c.xmin)/s.x-.1),u=Math.ceil((c.ymax-c.ymin)/s.y-.1);t.pyramidLevel=n,t.pyramidResolution=s,t.srcWidth=h,t.srcHeight=u}_getRequestOptionsWithSliceId(e){return n(this.rasterInfo.multidimensionalInfo)&&null==e.sliceId&&(e={...e,sliceId:this.getSliceIndex(e.multidimensionalDefinition)}),e}};e([f()],L.prototype,"_rasterTileAlighmentInfo",void 0),e([f({readOnly:!0})],L.prototype,"_isGlobalWrappableSource",null),e([f(m)],L.prototype,"url",null),e([f({type:String,json:{write:!0}})],L.prototype,"datasetName",void 0),e([f({type:String,json:{write:!0}})],L.prototype,"datasetFormat",void 0),e([f()],L.prototype,"rasterInfo",void 0),e([f()],L.prototype,"ioConfig",void 0),e([f()],L.prototype,"sourceJSON",void 0),L=e([h("esri.layers.support.rasterDatasets.BaseRaster")],L);const D=L;export{D 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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../../geometry.js";import e from"../../../core/Error.js";import{isNone as n,isSome as t}from"../../../core/maybe.js";import{getMetersPerUnitForSR as o}from"../../../core/unitUtils.js";import{canProjectWithoutEngine as i,isLoaded as
|
|
5
|
+
import"../../../geometry.js";import e from"../../../core/Error.js";import{isNone as n,isSome as t}from"../../../core/maybe.js";import{getMetersPerUnitForSR as o}from"../../../core/unitUtils.js";import{canProjectWithoutEngine as i,isLoaded as r,load as a,getTransformation as s,project as l}from"../../../geometry/projection.js";import c from"../../../geometry/Extent.js";import x from"../../../geometry/Point.js";function f(e,n,t){return!i(e,n,t)}function m(n,t,o){const i=f(n,t,o);if(i&&!r())throw new e("rasterprojectionhelper-project","projection engine is not loaded");return i}const u=function(e,n,t){const o=(e[0]+e[4]+e[4*n.cols]+e[4*n.cols+4])/4,i=(e[1]+e[5]+e[4*n.rows+1]+e[4*n.rows+5])/4,r=(e[4*n.cols]-e[0]+e[4*n.cols+4]-e[4])/t[0]*.5,a=(e[4*n.cols+1]-e[1]+e[4*n.cols+5]-e[5])/t[1]*.5;return[0===r||isNaN(r)?0:Math.abs(o-e[2*n.rows+2])/Math.abs(r),0===a||isNaN(a)?0:Math.abs(i-e[2*n.rows+3])/Math.abs(a)]},p={3395:20037508.342789244,3410:17334193.943686873,3857:20037508.342788905,3975:17367530.445161372,4087:20037508.342789244,4088:20015108.787169147,6933:17367530.445161372,32662:20037508.342789244,53001:20015086.79602057,53002:10007543.39801029,53003:20015086.79602057,53004:20015086.79602057,53016:14152803.599503474,53017:17333573.624304302,53034:20015086.79602057,53079:20015114.352186374,53080:20015114.352186374,54001:20037508.342789244,54002:10018754.171394624,54003:20037508.342789244,54004:20037508.342789244,54016:14168658.027268292,54017:17367530.44516137,54034:20037508.342789244,54079:20037508.342789244,54080:20037508.342789244,54100:20037508.342789244,54101:20037508.342789244},h=32,y=4,d=y;async function g(){if(r())return null;await a()}function M(e,n,t){if(!m(e.spatialReference,n))return null;return t?s(n,e.spatialReference,e):s(e.spatialReference,n,e)}function w(e,t,o,i=null){if(e.spatialReference.equals(t))return e;m(e.spatialReference,t,i);const r=o.center,a=new c({xmin:r.x-e.x/2,xmax:r.x+e.x/2,ymin:r.y-e.y/2,ymax:r.y+e.y/2,spatialReference:e.spatialReference}),s=l(a,t,i);if(n(s))return null;return{x:s.xmax-s.xmin,y:s.ymax-s.ymin}}function R(e,n=.01){return o(e)?n/o(e):0}function b(e,n,o=null,i=!0){const r=e.spatialReference;if(r.equals(n))return e;m(r,n,o);const a=l(e,n,o);if(!i||!a)return a;const s=P(r,!0),c=P(n,!0),x=R(r);return x&&t(s)&&t(c)&&(a.x>0&&Math.abs(e.x-s[0])<x?a.x-=c[1]-c[0]:a.x<0&&Math.abs(e.x-s[1])<x&&(a.x+=c[1]-c[0])),a}function v(e,n,t=null){const o=e[0].spatialReference;return o.equals(n)?e:(m(o,n,t),l(e,n,t))}function N(e){const n=S(e[0].spatialReference);if(e.length<2||!t(n))return e[0];let{xmin:o,xmax:i,ymin:r,ymax:a}=e[0];for(let t=1;t<e.length;t++){const o=e[t];i=o.xmax+n*t,r=Math.min(r,o.ymin),a=Math.max(a,o.ymax)}return new c({xmin:o,xmax:i,ymin:r,ymax:a,spatialReference:e[0].spatialReference})}function z(e,t,o=null,i=!0){if(e.spatialReference.equals(t))return e;const r=W(e),a=S(e.spatialReference,!0),s=S(t);if(0===r||n(a)||n(s))return j(e,t,o,i);const l=e.clone().normalize();if(1===l.length&&e.xmax<a&&e.xmax-a/2>R(e.spatialReference)){const{xmin:n,xmax:t}=e;for(let o=0;o<=r;o++){const i=0===o?n:-a/2,s=o===r?t-a*o:a/2;l[o]=new c({xmin:i,xmax:s,ymin:e.ymin,ymax:e.ymax,spatialReference:e.spatialReference})}}return N(l.map((e=>j(e,t,o,i))).filter((e=>!!e)))}function j(e,t,o=null,i=!0,r=!0){const a=e.spatialReference;if(a.equals(t))return e;m(a,t,o);const s=l(e,t,o);if(r&&t.isWebMercator&&s&&(s.ymax=Math.min(20037508.342787,s.ymax),s.ymin=Math.max(-20037508.342787,s.ymin),s.ymin>=s.ymax))return null;if(!i||!s)return s;const c=P(a,!0),f=P(t,!0);if(n(c)||n(f))return s;const u=R(a,.001),p=R(a,500),h=R(t,.001);if(Math.abs(s.xmin-f[0])<h&&Math.abs(s.xmax-f[1])<h){const n=Math.abs(e.xmin-c[0]),i=Math.abs(c[1]-e.xmax);if(n<u&&i>p){s.xmin=f[0];const n=[];n.push(new x(e.xmax,e.ymin,a)),n.push(new x(e.xmax,(e.ymin+e.ymax)/2,a)),n.push(new x(e.xmax,e.ymax,a));const i=n.map((e=>b(e,t,o))).filter((e=>!isNaN(null==e?void 0:e.x))).map((e=>e.x));s.xmax=Math.max.apply(null,i)}if(i<u&&n>p){s.xmax=f[1];const n=[];n.push(new x(e.xmin,e.ymin,a)),n.push(new x(e.xmin,(e.ymin+e.ymax)/2,a)),n.push(new x(e.xmin,e.ymax,a));const i=n.map((e=>b(e,t,o))).filter((e=>!isNaN(null==e?void 0:e.x))).map((e=>e.x));s.xmin=Math.min.apply(null,i)}}else{const e=R(t,.001);Math.abs(s.xmin-f[0])<e&&(s.xmin=f[0]),Math.abs(s.xmax-f[1])<e&&(s.xmax=f[1])}return s}function S(e,n=!1){const t=n?20037508.342787:20037508.342788905;return e.isWebMercator?2*t:e.wkid&&e.isGeographic?360:2*p[e.wkid]||null}function P(e,n=!1){if(e.isGeographic)return[-180,180];const o=S(e,n);return t(o)?[-o/2,o/2]:null}function C(e,n,t,o){let i=(e-n)/t;return i-Math.floor(i)!=0?i=Math.floor(i):o&&(i-=1),i}function W(e,n=!1){const o=S(e.spatialReference);if(!t(o))return 0;const i=n?0:-(o/2);return C(e.xmax,i,o,!0)-C(e.xmin,i,o,!1)}function T(e){const n=e.storageInfo.origin.x,o=S(e.spatialReference,!0);if(!t(o))return{originX:n,halfWorldWidth:null,pyramidsInfo:null};const i=o/2,{nativePixelSize:r,storageInfo:a,extent:s}=e,{maximumPyramidLevel:l,blockWidth:c,pyramidScalingFactor:x}=a;let f=r.x;const m=[],u=t(e.transform)&&"gcs-shift"===e.transform.type,p=n+(u?0:i),h=u?o-n:i-n;for(let t=0;t<=l;t++){const e=(s.xmax-n)/f/c,t=e-Math.floor(e)==0?e:Math.ceil(e),o=h/f/c,i=o-Math.floor(o)==0?o:Math.ceil(o),r=Math.floor(p/f/c),a=Math.round(p/f)%c,l=(c-Math.round(h/f)%c)%c;m.push({resolutionX:f,blockWidth:c,datsetColumnCount:t,worldColumnCountFromOrigin:i,leftMargin:a,rightPadding:l,originColumnOffset:r}),f*=x}return{originX:n,halfWorldWidth:i,pyramidsInfo:m,hasGCSSShiftTransform:u}}function G(e){const n=e.isAdaptive&&null==e.spacing,t=e.spacing||[h,h];let o=L(e),i={cols:o.size[0]+1,rows:o.size[1]+1},r=u(o.offsets,i,t);const a=(r[0]+r[1])/2,s=o.outofBoundPointCount>0&&o.outofBoundPointCount<o.offsets.length/2;return n&&(s||a>d)&&(o=L({...e,spacing:[y,y]}),i={cols:o.size[0]+1,rows:o.size[1]+1},r=u(o.offsets,i,t)),o.error=r,o.coefficients=k(o.offsets,i,s),o}function L(e){const{projectedExtent:n,srcBufferExtent:o,pixelSize:i,datumTransformation:r,rasterTransform:a}=e,s=n.spatialReference,l=o.spatialReference;m(s,l);const{xmin:c,ymin:f,xmax:u,ymax:p}=n,y=S(l),d=e.hasWrapAround||"gcs-shift"===(null==a?void 0:a.type),g=e.spacing||[h,h],M={x:g[0]*i.x,y:g[1]*i.y},w={cols:Math.ceil((u-c)/M.x-.1/g[0])+1,rows:Math.ceil((p-f)/M.y-.1/g[1])+1},R=M.x,b=M.y,N=[];let z,j=0;const P=[];for(let t=0;t<w.cols;t++)for(let e=0;e<w.rows;e++)P.push(new x({x:c+R*t,y:p-b*e,spatialReference:s}));const C=v(P,l,r);for(let x=0;x<w.cols;x++){const e=[];for(let n=0;n<w.rows;n++){var W;let i=C[x*w.rows+n];t(y)&&(null==(W=i)?void 0:W.x)>o.xmax&&(i.x-=y),a&&(i=a.inverseTransform(i)),e.push(i),x>0&&d&&i&&z[n]&&t(y)&&i.x<z[n].x&&(i.x+=y),i?(N.push((i.x-o.xmin)/(o.xmax-o.xmin)),N.push((o.ymax-i.y)/(o.ymax-o.ymin))):(N.push(NaN),N.push(NaN),j++)}z=e}return{offsets:N,error:null,coefficients:null,outofBoundPointCount:j,spacing:g,size:[w.cols-1,w.rows-1]}}function k(e,n,t){const{cols:o,rows:i}=n,r=new Float32Array((o-1)*(i-1)*2*6),a=new Float32Array([-0,-1,1,-1,1,-0,1,-0,-0]),s=new Float32Array([-1,1,0,0,-1,1,1,0,0]);for(let l=0;l<o-1;l++){for(let n=0;n<i-1;n++){let t=l*i*2+2*n;const c=e[t],x=e[t+1],f=e[t+2],m=e[t+3];t+=2*i;const u=e[t],p=e[t+1],h=e[t+2],y=e[t+3];let d=0,g=12*(n*(o-1)+l);for(let e=0;e<3;e++)r[g++]=a[d++]*c+a[d++]*f+a[d++]*h;d=0;for(let e=0;e<3;e++)r[g++]=a[d++]*x+a[d++]*m+a[d++]*y;d=0;for(let e=0;e<3;e++)r[g++]=s[d++]*c+s[d++]*u+s[d++]*h;d=0;for(let e=0;e<3;e++)r[g++]=s[d++]*x+s[d++]*p+s[d++]*y}if(t)for(let e=0;e<r.length;e++)isNaN(r[e])&&(r[e]=-1)}return r}function I(e){const n=e.clone().normalize();return 1===n.length?n[0]:N(n)}function q(e,n,o){const{storageInfo:i,pixelSize:r}=n;let a,s=!1;const{pyramidResolutions:l}=i;if(t(l)&&l.length){const t=(e.x+e.y)/2,i=l[l.length-1],c=(i.x+i.y)/2,f=(r.x+r.y)/2;if(t<=f)a=0;else if(t>=c)a=l.length,s=t/c>8;else{let e,n=f;for(let i=1;i<=l.length;i++){if(e=(l[i-1].x+l[i-1].y)/2,t<=e){t===e?a=i:"down"===o?(a=i-1,s=t/n>8):a="up"===o||t-n>e-t||t/n>2?i:i-1;break}n=e}}const m=0===a?r:l[a-1];return{pyramidLevel:a,pyramidResolution:new x({x:m.x,y:m.y,spatialReference:n.spatialReference}),excessiveReading:s}}const c=Math.log(e.x/r.x)/Math.LN2,f=Math.log(e.y/r.y)/Math.LN2,m=n.storageInfo.maximumPyramidLevel||0;a="down"===o?Math.floor(Math.min(c,f)):"up"===o?Math.ceil(Math.max(c,f)):Math.round((c+f)/2),a<0?a=0:a>m&&(s=a>m+3,a=m);const u=2**a;return{pyramidLevel:a,pyramidResolution:new x({x:u*n.nativePixelSize.x,y:u*n.nativePixelSize.y,spatialReference:n.spatialReference}),excessiveReading:s}}function A(e,n,t=512,i=!0){const{extent:r,spatialReference:a,pixelSize:s}=e,l=w(new x({x:s.x,y:s.y,spatialReference:a}),n,r);if(null==l)return{projectedPixelSize:null,scales:null,srcResolutions:null,isCustomTilingScheme:!1};const c=(l.x+l.y)/2,f=o(n),m=c*f*96*39.37,u=n.isGeographic?256/t*295828763.7958547:256/t*591657527.591555;let p="vector-magdir"===e.dataType||"vector-uv"===e.dataType;const h=z(r,n);p||i&&(n.isGeographic||n.isWebMercator)&&(p=h.xmin*h.xmax<0);let y,d=m;const g=1.001;if(p){d=u;const e=n.isGeographic?1341104507446289e-21:.29858214164761665,t=e*(96*f*39.37),o=n.isGeographic?4326:3857;y=w(new x({x:e,y:e,spatialReference:{wkid:o}}),a,h),y.x*=d/t,y.y*=d/t}else{y={x:s.x,y:s.y};const n=Math.ceil(Math.log(Math.min(e.width,e.height)/32)/Math.LN2);let t=0;for(;d<u*(g/2)&&t<n;)t++,d*=2,y.x*=2,y.y*=2;Math.max(d,u)/Math.min(d,u)<=g&&(d=u)}const M=[d],R=[{x:y.x,y:y.y}],b=70.5310735,v=Math.min(b,m)/g;for(;d>=v;)d/=2,y.x/=2,y.y/=2,M.push(d),R.push({x:y.x,y:y.y});return{projectedPixelSize:l,scales:M,srcResolutions:R,isCustomTilingScheme:!p}}export{A as computeProjectedScales,h as defaultGridSpacing,d as defaultProjectionToleranceInPixels,M as getDefaultDatumTransformationForDataset,G as getProjectionOffsetGrid,T as getRasterDatasetAlignmentInfo,S as getWorldWidth,W as getWorldWrapCount,g as load,y as minimumGridSpacing,z as projectExtent,b as projectPoint,w as projectResolution,f as requirePE,I as snapExtent,q as snapPyramid};
|
package/libs/vxl/enums.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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
var
|
|
5
|
+
var e,t,i,n,a;!function(e){e[e.Binary=0]="Binary",e[e.JSON=1]="JSON"}(e||(e={})),function(e){e[e.TreeIndex=0]="TreeIndex",e[e.TreeStats=1]="TreeStats",e[e.TreeData=2]="TreeData",e[e.BrickBundles=3]="BrickBundles",e[e.Section=4]="Section",e[e.VariableStats=5]="VariableStats"}(t||(t={})),function(e){e[e.None=1]="None",e[e.Front=2]="Front",e[e.Back=3]="Back"}(i||(i={})),function(e){e[e.Low=0]="Low",e[e.Medium=1]="Medium",e[e.High=2]="High"}(n||(n={})),function(e){e[e.None=0]="None",e[e.StaticSections=1]="StaticSections",e[e.Slices=2]="Slices",e[e.DynamicSections=4]="DynamicSections",e[e.GhostShell=8]="GhostShell",e[e.Isosurface=16]="Isosurface",e[e.Quality=32]="Quality",e[e.SunLocation=64]="SunLocation",e[e.StaticSectionSelection=128]="StaticSectionSelection",e[e.ExaggerationAndOffset=256]="ExaggerationAndOffset",e[e.CurrentTime=512]="CurrentTime",e[e.CurrentVariable=1024]="CurrentVariable",e[e.DeleteIsosurface=2048]="DeleteIsosurface",e[e.ContainerVisibility=4096]="ContainerVisibility",e[e.RenderMode=8192]="RenderMode",e[e.Optimization=16384]="Optimization"}(a||(a={}));export{a as UpdateFlags,t as VoxelRequestType,i as WasmCullMode,n as WasmRenderingQuality,e as WasmResponseType};
|
package/package.json
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.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{schema_definitions as e}from"./definitions.js";const i={title:"Building Scene Layer config on layer item",type:"object",properties:{layers:{type:"array",items:{properties:{activeFilterId:{type:"string",description:"specifies the id of the currently active filter"},filters:{type:"array",description:"A list of filters available for this layer. Overrides filters defined on the service.",items:{
|
|
5
|
+
import{schema_definitions as e}from"./definitions.js";const i={title:"Building Scene Layer config on layer item",type:"object",properties:{layers:{type:"array",items:{properties:{activeFilterId:{type:"string",description:"specifies the id of the currently active filter"},filters:{type:"array",description:"A list of filters available for this layer. Overrides filters defined on the service.",items:{$ref:"#/definitions/buildingSceneLayer_filter_schema.json"},uniqueItems:!0},id:{type:"integer",description:"ID of the service layer."},layerDefinition:{type:"object",description:"Additional properties that can define an elevation offset for the layer.",allOf:[{$ref:"#/definitions/layerDefinition_schema.json"},{properties:{elevationInfo:{},maxScale:{},minScale:{}},additionalProperties:!1}]},listMode:{type:"string",description:"To show or hide the sublayer in the layer list. If the layer has sublayers, selecting `hide-children` will hide them in the layer list.",enum:["hide","hide-children","show"],default:"show"},opacity:{type:"number",description:"The degree of transparency applied to the layer on the client side, where 0 is full transparency and 1 is no transparency.",minimum:0,maximum:1,default:1},sublayers:{type:"array",description:"An array of objects specifying overrides for building scene layer sublayers",items:{$ref:"#/definitions/buildingSceneLayer_sublayer_schema.json"},uniqueItems:!0},visibility:{type:"boolean",description:"Boolean property determining whether the layer is initially visible in the web scene",default:!0}},additionalProperties:!1}}},additionalProperties:!1,$schema:"http://json-schema.org/draft-07/schema",definitions:e};export{i as json};
|