@oceanum/layers 0.1.3 → 0.1.4

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("@oceanum/deck-gl-grid"),R=require("@deck.gl/core"),B=require("@oceanum/datamesh");function E(a,e){const n={x:a.x,y:a.y};return e.xvector&&e.yvector?(n.u=e.xvector,n.v=e.yvector):n.c=e.magnitude,n}function q(a,e){const n={x:a.x,y:a.y};return e.xvector&&e.yvector?(n.u=e.xvector,n.v=e.yvector):(n.m=e.magnitude,n.d=e.direction),n}function $(a){const e=[];return a.magnitude&&e.push(a.magnitude),a.xvector&&e.push(a.xvector),a.yvector&&e.push(a.yvector),a.direction&&e.push(a.direction),e}function C(a,e){if(!a||a.length===0)return 0;const n=e instanceof Date?e.getTime()/1e3:new Date(e).getTime()/1e3;let t=0,l=a.length-1;for(;t<l;){const o=t+l>>1;a[o]<n?t=o+1:l=o}return t>0&&Math.abs(a[t-1]-n)<Math.abs(a[t]-n)?t-1:t}function M(a,e){return e<=0?0:Math.max(0,Math.min(a,e-1))}function S(a,e,n){if(!a||a.length===0)return[0,0];const t=a.length<2||a[1]>=a[0];let l=0,o=a.length-1;if(t){let r=0,s=a.length-1;for(;r<s;){const i=r+s>>1;a[i]<e?r=i+1:s=i}for(l=Math.max(0,r-1),r=l,s=a.length-1;r<s;){const i=r+s+1>>1;a[i]>n?s=i-1:r=i}o=Math.min(a.length-1,r+1)}else{let r=0,s=a.length-1;for(;r<s;){const i=r+s>>1;a[i]>n?r=i+1:s=i}for(l=Math.max(0,r-1),r=l,s=a.length-1;r<s;){const i=r+s+1>>1;a[i]<e?s=i-1:r=i}o=Math.min(a.length-1,r+1)}return[l,o]}function P(a,e){return{start:a,stop:e,step:null}}async function T(a,e,n,t,l,o,r){const s={},i={},c=a.variables[e.x],y=a.variables[e.y],[h,m]=await Promise.all([c.get([P(r[0],r[1]+1)]),y.get([P(o[0],o[1]+1)])]);s[e.x]={data:h},s[e.y]={data:m};const v=n.map(async b=>{const p=a.variables[b];if(!p)return;const x=p.dimensions.map(f=>e.t&&f===e.t?t:e.z&&f===e.z?l:f===e.y?P(o[0],o[1]+1):f===e.x?P(r[0],r[1]+1):null),D=await p.get(x);i[b]={data:D}});return await Promise.all(v),{coords:s,data_vars:i}}function V(a,e=.1){const n=a.getBounds(),t=n[0][0],l=n[0][1],o=n[1][0],r=n[1][1],s=o-t,i=r-l,c=s*e,y=i*e;return{west:t-c,south:Math.max(-90,l-y),east:o+c,north:Math.min(90,r+y)}}function j(a,e){return e?a.west>=e.west&&a.south>=e.south&&a.east<=e.east&&a.north<=e.north:!1}function W(a,e){let n=null;const t=((...l)=>{n&&clearTimeout(n),n=setTimeout(()=>{n=null,a(...l)},e)});return t.cancel=()=>{n&&(clearTimeout(n),n=null)},t}const A={onMetadataError:a=>console.warn(`[OceanumLayer] ${a.message}`),onChunkError:a=>console.warn(`[OceanumLayer] ${a.message}`),onVariableError:a=>console.warn(`[OceanumLayer] ${a.message}`),onValidationError:a=>console.error(`[OceanumLayer] ${a.message}`)},U={serviceUrl:{type:"string",value:"https://layers.app.oceanum.io"},authHeaders:{type:"object",value:{}},layerId:{type:"string",value:null},instance:{type:"string",value:null},time:{type:"string",value:null},level:{type:"number",value:0},colormap:{type:"object",value:null},opacity:{type:"number",value:1},altitude:{type:"number",value:0},globalWrap:{type:"boolean",value:!1},scale:{type:"number",value:1},offset:{type:"number",value:0},pickable:{type:"boolean",value:!1},visible:{type:"boolean",value:!0},viewportPadding:{type:"number",value:.1},debounceWait:{type:"number",value:100},onDataLoad:{type:"function",value:null},errorHandlers:{type:"object",value:null},xvector:{type:"string",value:null},yvector:{type:"string",value:null},magnitude:{type:"string",value:null},direction:{type:"string",value:null},directionConvention:{type:"string",value:"NAUTICAL_FROM"}};function g(a){return a.props}function w(a){return a.state}function _(a){return a.context}class d extends R.CompositeLayer{static layerName="OceanumBaseLayer";static defaultProps=U;initializeState(){this.setState({dataset:null,loading:!1,slicing:!1,error:null,instance:null,coordNames:null,times:null,nlevels:0,lats:null,lons:null,timeIndex:0,levelIndex:0,latRange:[0,0],lonRange:[0,0],fetchedBbox:null,slicedData:null,datakeys:null,debouncedSlice:W(()=>this._requestSlice(),g(this).debounceWait)}),this._openDataset()}shouldUpdateState({changeFlags:e}){return e.somethingChanged}updateState({props:e,oldProps:n,changeFlags:t}){const l=e,o=n,r=w(this);if(l.debounceWait!==o.debounceWait&&(r.debouncedSlice&&r.debouncedSlice.cancel(),this.setState({debouncedSlice:W(()=>this._requestSlice(),l.debounceWait)})),l.layerId!==o.layerId||l.instance!==o.instance||l.serviceUrl!==o.serviceUrl||this._variablePropsChanged(l,o)){this._openDataset();return}if(!r.dataset)return;let s=!1;if(l.time!==o.time&&r.times){const i=l.time?C(r.times,l.time):0;i!==r.timeIndex&&(this.setState({timeIndex:i}),s=!0)}if(l.level!==o.level){const i=M(l.level||0,r.nlevels);i!==r.levelIndex&&(this.setState({levelIndex:i}),s=!0)}if(s){this._requestSlice();return}if(t.viewportChanged&&_(this).viewport){const i=V(_(this).viewport,l.viewportPadding);if(!j(i,r.fetchedBbox)){const c=S(r.lons,i.west,i.east),y=S(r.lats,i.south,i.north);this.setState({latRange:y,lonRange:c,fetchedBbox:i}),r.debouncedSlice&&r.debouncedSlice()}}}finalizeState(){const e=w(this);e.debouncedSlice&&e.debouncedSlice.cancel()}_variablePropsChanged(e,n){return e.magnitude!==n.magnitude||e.direction!==n.direction||e.xvector!==n.xvector||e.yvector!==n.yvector||e.directionConvention!==n.directionConvention}_validateVariableProps(e){return null}_buildDatakeys(e){return{x:e.x,y:e.y}}_createInnerLayer(e,n){return null}_fireError(e,n){const t={type:e,...n};this.setState({error:t});const l=g(this).errorHandlers||{},o=`on${e.charAt(0).toUpperCase()+e.slice(1)}Error`,r=l[o]||A[o];r&&r(t)}async _openDataset(){const e=g(this),{serviceUrl:n,layerId:t,authHeaders:l}=e;if(!n||!t)return;const o=this._validateVariableProps(e);if(o){this._fireError("validation",{message:o});return}this.setState({loading:!0,error:null});try{let r=`${n}/zarr/${t}`,s=e.instance;if(!s){const u=await this._discoverInstances(r,l||{});u.length>0&&(u.sort(),s=u[u.length-1])}s&&(r=`${r}/${s}`);const i=await B.Dataset.zarr(r,l||{}),c=i.coordkeys;if(!c||!c.x||!c.y)throw new Error("Dataset is missing required coordinate mappings (x, y) in _coordinates");const y=$(e);for(const u of y)if(!i.variables[u]){const L=Object.keys(i.variables);this._fireError("variable",{layerId:t,variable:u,availableVariables:L,message:`Variable "${u}" not found in dataset. Available: ${L.join(", ")}`}),this.setState({loading:!1});return}const[h,m,v]=await Promise.all([i.variables[c.x]?.get(),i.variables[c.y]?.get(),c.t&&i.variables[c.t]?i.variables[c.t].get():null]),b=c.z&&i.dimensions[c.z]?i.dimensions[c.z]:0,p=e.time&&v?C(v,e.time):0,O=M(e.level||0,b),x={x:c.x,y:c.y,t:c.t,z:c.z},D=this._buildDatakeys(x);let f=[0,m?m.length-1:0],I=[0,h?h.length-1:0],z=null;if(_(this).viewport){const u=V(_(this).viewport,e.viewportPadding);h&&(I=S(h,u.west,u.east)),m&&(f=S(m,u.south,u.north)),z=u}if(this.setState({dataset:i,loading:!1,instance:s,coordNames:x,times:v,nlevels:b,lats:m,lons:h,timeIndex:p,levelIndex:O,latRange:f,lonRange:I,fetchedBbox:z,datakeys:D}),e.onDataLoad){const u=v?Array.from(v,L=>new Date(L*1e3)):[];e.onDataLoad({dataset:i,times:u,nlevels:b,instance:s})}this._requestSlice()}catch(r){this._fireError("metadata",{layerId:t,message:`Failed to open dataset: ${r.message}`,cause:r}),this.setState({loading:!1})}}async _discoverInstances(e,n){try{const t=await fetch(`${e}/.zmetadata`,{headers:n});if(!t.ok)return[];const l=await t.json();if(!l.metadata)return[];const o=new Set;for(const r of Object.keys(l.metadata)){const s=r.split("/");s.length===2&&s[1]===".zgroup"&&o.add(s[0])}return Array.from(o)}catch{return[]}}async _requestSlice(){const e=w(this),{dataset:n,coordNames:t,timeIndex:l,levelIndex:o,latRange:r,lonRange:s}=e;if(!n||!t)return;const i=$(g(this));if(i.length!==0){this.setState({slicing:!0});try{const c=await T(n,t,i,l,o,r,s);this.setState({slicedData:c,slicing:!1,error:null})}catch(c){this._fireError("chunk",{layerId:g(this).layerId,time:e.times?new Date(e.times[l]*1e3):null,level:o,message:`Chunk fetch failed: ${c.message}`,cause:c}),this.setState({slicing:!1})}}}renderLayers(){const e=w(this);return!e.slicedData||!e.datakeys?[]:this._createInnerLayer(e.slicedData,e.datakeys)}}const H={...d.defaultProps,color:{type:"array",value:[200,200,200]},material:!1};class X extends d{static layerName="OceanumPcolorLayer";static defaultProps=H;_validateVariableProps(e){const n=!!e.magnitude,t=e.xvector&&e.yvector;return!n&&!t?'OceanumPcolorLayer requires "magnitude" or "xvector" + "yvector"':null}_buildDatakeys(e){return E(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.PcolorLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,material:t.material,pickable:t.pickable,visible:t.visible})}}const Y={...d.defaultProps,speed:{type:"number",value:1},npart:{type:"number",value:1e3},size:{type:"number",value:3},length:{type:"number",value:12},color:{type:"array",value:[200,200,200]}};class F extends d{static layerName="OceanumParticleLayer";static defaultProps=Y;_validateVariableProps(e){const n=e.xvector&&e.yvector,t=e.magnitude&&e.direction;return!n&&!t?'OceanumParticleLayer requires "xvector" + "yvector" or "magnitude" + "direction"':n&&t?'OceanumParticleLayer: provide "xvector" + "yvector" or "magnitude" + "direction", not both':null}_buildDatakeys(e){return q(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.ParticleLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,direction:t.directionConvention,speed:t.speed,npart:t.npart,size:t.size,length:t.length,pickable:t.pickable,visible:t.visible})}}const N={...d.defaultProps,speed:{type:"number",value:1},size:{type:"number",value:3},color:{type:"array",value:[200,200,200]},meshShape:{type:"string",value:"cone"},meshLength:{type:"number",value:4},meshWidth:{type:"number",value:1},meshSize:{type:"number",value:1}};class G extends d{static layerName="OceanumPartmeshLayer";static defaultProps=N;_validateVariableProps(e){const n=e.xvector&&e.yvector,t=e.magnitude&&e.direction;return!n&&!t?'OceanumPartmeshLayer requires "xvector" + "yvector" or "magnitude" + "direction"':n&&t?'OceanumPartmeshLayer: provide "xvector" + "yvector" or "magnitude" + "direction", not both':null}_buildDatakeys(e){return q(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.PartmeshLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,direction:t.directionConvention,speed:t.speed,size:t.size,mesh:{shape:t.meshShape,length:t.meshLength,width:t.meshWidth,size:t.meshSize},pickable:t.pickable,visible:t.visible})}}const J={...d.defaultProps,levels:{type:"array",value:[]},labelSize:{type:"number",value:12},labelColor:{type:"array",value:[255,255,255,255]},smoothing:{type:"boolean",value:!1},numLabels:{type:"number",value:1},color:{type:"array",value:[200,200,200]}};class K extends d{static layerName="OceanumContourLayer";static defaultProps=J;_validateVariableProps(e){const n=!!e.magnitude,t=e.xvector&&e.yvector;return!n&&!t?'OceanumContourLayer requires "magnitude" or "xvector" + "yvector"':null}_buildDatakeys(e){return E(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.ContourLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,levels:t.levels,labelSize:t.labelSize,labelColor:t.labelColor,smoothing:t.smoothing,numLabels:t.numLabels,pickable:t.pickable,visible:t.visible})}}exports.OceanumBaseLayer=d;exports.OceanumContourLayer=K;exports.OceanumParticleLayer=F;exports.OceanumPartmeshLayer=G;exports.OceanumPcolorLayer=X;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("@oceanum/deck-gl-grid"),R=require("@deck.gl/core"),B=require("@oceanum/datamesh");function E(a,e){const n={x:a.x,y:a.y};return e.xvector&&e.yvector?(n.u=e.xvector,n.v=e.yvector):n.c=e.magnitude,n}function q(a,e){const n={x:a.x,y:a.y};return e.xvector&&e.yvector?(n.u=e.xvector,n.v=e.yvector):(n.m=e.magnitude,n.d=e.direction),n}function $(a){const e=[];return a.magnitude&&e.push(a.magnitude),a.xvector&&e.push(a.xvector),a.yvector&&e.push(a.yvector),a.direction&&e.push(a.direction),e}function C(a,e){if(!a||a.length===0)return 0;const n=e instanceof Date?e.getTime()/1e3:new Date(e).getTime()/1e3;let t=0,l=a.length-1;for(;t<l;){const o=t+l>>1;a[o]<n?t=o+1:l=o}return t>0&&Math.abs(a[t-1]-n)<Math.abs(a[t]-n)?t-1:t}function M(a,e){return e<=0?0:Math.max(0,Math.min(a,e-1))}function S(a,e,n){if(!a||a.length===0)return[0,0];const t=a.length<2||a[1]>=a[0];let l=0,o=a.length-1;if(t){let r=0,s=a.length-1;for(;r<s;){const i=r+s>>1;a[i]<e?r=i+1:s=i}for(l=Math.max(0,r-1),r=l,s=a.length-1;r<s;){const i=r+s+1>>1;a[i]>n?s=i-1:r=i}o=Math.min(a.length-1,r+1)}else{let r=0,s=a.length-1;for(;r<s;){const i=r+s>>1;a[i]>n?r=i+1:s=i}for(l=Math.max(0,r-1),r=l,s=a.length-1;r<s;){const i=r+s+1>>1;a[i]<e?s=i-1:r=i}o=Math.min(a.length-1,r+1)}return[l,o]}function P(a,e){return{start:a,stop:e,step:null}}async function T(a,e,n,t,l,o,r){const s={},i={},c=a.variables[e.x],y=a.variables[e.y],[h,m]=await Promise.all([c.get([P(r[0],r[1]+1)]),y.get([P(o[0],o[1]+1)])]);s[e.x]={data:h},s[e.y]={data:m};const v=n.map(async b=>{const p=a.variables[b];if(!p)return;const x=p.dimensions.map(f=>e.t&&f===e.t?t:e.z&&f===e.z?l:f===e.y?P(o[0],o[1]+1):f===e.x?P(r[0],r[1]+1):null),D=await p.get(x);i[b]={data:D}});return await Promise.all(v),{coords:s,data_vars:i}}function V(a,e=.1){const n=a.getBounds(),t=n[0][0],l=n[0][1],o=n[1][0],r=n[1][1],s=o-t,i=r-l,c=s*e,y=i*e;return{west:t-c,south:Math.max(-90,l-y),east:o+c,north:Math.min(90,r+y)}}function j(a,e){return e?a.west>=e.west&&a.south>=e.south&&a.east<=e.east&&a.north<=e.north:!1}function W(a,e){let n=null;const t=((...l)=>{n&&clearTimeout(n),n=setTimeout(()=>{n=null,a(...l)},e)});return t.cancel=()=>{n&&(clearTimeout(n),n=null)},t}const A={onMetadataError:a=>console.warn(`[OceanumLayer] ${a.message}`),onChunkError:a=>console.warn(`[OceanumLayer] ${a.message}`),onVariableError:a=>console.warn(`[OceanumLayer] ${a.message}`),onValidationError:a=>console.error(`[OceanumLayer] ${a.message}`)},U={serviceUrl:{type:"string",value:"https://layers.app.oceanum.io"},authHeaders:{type:"object",value:{}},layerId:{type:"string",value:null},instance:{type:"string",value:null},time:{type:"string",value:null},level:{type:"number",value:0},colormap:{type:"object",value:null},opacity:{type:"number",value:1},altitude:{type:"number",value:0},globalWrap:{type:"boolean",value:!1},scale:{type:"number",value:1},offset:{type:"number",value:0},pickable:{type:"boolean",value:!1},visible:{type:"boolean",value:!0},viewportPadding:{type:"number",value:.1},debounceWait:{type:"number",value:100},onDataLoad:{type:"function",value:null},errorHandlers:{type:"object",value:null},xvector:{type:"string",value:null},yvector:{type:"string",value:null},magnitude:{type:"string",value:null},direction:{type:"string",value:null},directionConvention:{type:"string",value:"NAUTICAL_FROM"}};function g(a){return a.props}function w(a){return a.state}function _(a){return a.context}class d extends R.CompositeLayer{static layerName="OceanumBaseLayer";static defaultProps=U;initializeState(){this.setState({dataset:null,loading:!1,slicing:!1,error:null,instance:null,coordNames:null,times:null,nlevels:0,lats:null,lons:null,timeIndex:0,levelIndex:0,latRange:[0,0],lonRange:[0,0],fetchedBbox:null,slicedData:null,datakeys:null,debouncedSlice:W(()=>this._requestSlice(),g(this).debounceWait)}),this._openDataset()}shouldUpdateState({changeFlags:e}){return e.somethingChanged}updateState({props:e,oldProps:n,changeFlags:t}){const l=e,o=n,r=w(this);if(l.debounceWait!==o.debounceWait&&(r.debouncedSlice&&r.debouncedSlice.cancel(),this.setState({debouncedSlice:W(()=>this._requestSlice(),l.debounceWait)})),l.layerId!==o.layerId||l.instance!==o.instance||l.serviceUrl!==o.serviceUrl||this._variablePropsChanged(l,o)){this._openDataset();return}if(!r.dataset)return;let s=!1;if(l.time!==o.time&&r.times){const i=l.time?C(r.times,l.time):0;i!==r.timeIndex&&(this.setState({timeIndex:i}),s=!0)}if(l.level!==o.level){const i=M(l.level||0,r.nlevels);i!==r.levelIndex&&(this.setState({levelIndex:i}),s=!0)}if(s){this._requestSlice();return}if(t.viewportChanged&&_(this).viewport){const i=V(_(this).viewport,l.viewportPadding);if(!j(i,r.fetchedBbox)){const c=S(r.lons,i.west,i.east),y=S(r.lats,i.south,i.north);this.setState({latRange:y,lonRange:c,fetchedBbox:i}),r.debouncedSlice&&r.debouncedSlice()}}}finalizeState(){const e=w(this);e.debouncedSlice&&e.debouncedSlice.cancel()}_variablePropsChanged(e,n){return e.magnitude!==n.magnitude||e.direction!==n.direction||e.xvector!==n.xvector||e.yvector!==n.yvector||e.directionConvention!==n.directionConvention}_validateVariableProps(e){return null}_buildDatakeys(e){return{x:e.x,y:e.y}}_createInnerLayer(e,n){return null}_fireError(e,n){const t={type:e,...n};this.setState({error:t});const l=g(this).errorHandlers||{},o=`on${e.charAt(0).toUpperCase()+e.slice(1)}Error`,r=l[o]||A[o];r&&r(t)}async _openDataset(){const e=g(this),{serviceUrl:n,layerId:t,authHeaders:l}=e;if(!n||!t)return;const o=this._validateVariableProps(e);if(o){this._fireError("validation",{message:o});return}this.setState({loading:!0,error:null});try{let r=`${n}/zarr/${t}`,s=e.instance;if(!s){const u=await this._discoverInstances(r,l||{});u.length>0&&(u.sort(),s=u[u.length-1])}s&&(r=`${r}/${s}`);const i=await B.Dataset.zarr(r,l||{}),c=i.coordkeys;if(!c||!c.x||!c.y)throw new Error("Dataset is missing required coordinate mappings (x, y) in _coordinates");const y=$(e);for(const u of y)if(!i.variables[u]){const L=Object.keys(i.variables);this._fireError("variable",{layerId:t,variable:u,availableVariables:L,message:`Variable "${u}" not found in dataset. Available: ${L.join(", ")}`}),this.setState({loading:!1});return}const[h,m,v]=await Promise.all([i.variables[c.x]?.get(),i.variables[c.y]?.get(),c.t&&i.variables[c.t]?i.variables[c.t].get():null]),b=c.z&&i.dimensions[c.z]?i.dimensions[c.z]:0,p=e.time&&v?C(v,e.time):0,O=M(e.level||0,b),x={x:c.x,y:c.y,t:c.t,z:c.z},D=this._buildDatakeys(x);let f=[0,m?m.length-1:0],I=[0,h?h.length-1:0],z=null;if(_(this).viewport){const u=V(_(this).viewport,e.viewportPadding);h&&(I=S(h,u.west,u.east)),m&&(f=S(m,u.south,u.north)),z=u}if(this.setState({dataset:i,loading:!1,instance:s,coordNames:x,times:v,nlevels:b,lats:m,lons:h,timeIndex:p,levelIndex:O,latRange:f,lonRange:I,fetchedBbox:z,datakeys:D}),e.onDataLoad){const u=v?Array.from(v,L=>new Date(L*1e3)):[];e.onDataLoad({dataset:i,times:u,nlevels:b,instance:s})}this._requestSlice()}catch(r){this._fireError("metadata",{layerId:t,message:`Failed to open dataset: ${r.message}`,cause:r}),this.setState({loading:!1})}}async _discoverInstances(e,n){try{const t=await fetch(`${e}/.zmetadata`,{headers:n});if(!t.ok)return[];const l=await t.json();if(!l.metadata)return[];const o=new Set;for(const r of Object.keys(l.metadata)){const s=r.split("/");s.length===2&&s[1]===".zgroup"&&o.add(s[0])}return Array.from(o)}catch{return[]}}async _requestSlice(){const e=w(this),{dataset:n,coordNames:t,timeIndex:l,levelIndex:o,latRange:r,lonRange:s}=e;if(!n||!t)return;const i=$(g(this));if(i.length!==0){this.setState({slicing:!0});try{const c=await T(n,t,i,l,o,r,s);this.setState({slicedData:c,slicing:!1,error:null}),this.setNeedsRedraw()}catch(c){this._fireError("chunk",{layerId:g(this).layerId,time:e.times?new Date(e.times[l]*1e3):null,level:o,message:`Chunk fetch failed: ${c.message}`,cause:c}),this.setState({slicing:!1})}}}renderLayers(){const e=w(this);return!e.slicedData||!e.datakeys?[]:this._createInnerLayer(e.slicedData,e.datakeys)}}const H={...d.defaultProps,color:{type:"array",value:[200,200,200]},material:!1};class N extends d{static layerName="OceanumPcolorLayer";static defaultProps=H;_validateVariableProps(e){const n=!!e.magnitude,t=e.xvector&&e.yvector;return!n&&!t?'OceanumPcolorLayer requires "magnitude" or "xvector" + "yvector"':null}_buildDatakeys(e){return E(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.PcolorLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,material:t.material,pickable:t.pickable,visible:t.visible})}}const X={...d.defaultProps,speed:{type:"number",value:1},npart:{type:"number",value:1e3},size:{type:"number",value:3},length:{type:"number",value:12},color:{type:"array",value:[200,200,200]}};class Y extends d{static layerName="OceanumParticleLayer";static defaultProps=X;_validateVariableProps(e){const n=e.xvector&&e.yvector,t=e.magnitude&&e.direction;return!n&&!t?'OceanumParticleLayer requires "xvector" + "yvector" or "magnitude" + "direction"':n&&t?'OceanumParticleLayer: provide "xvector" + "yvector" or "magnitude" + "direction", not both':null}_buildDatakeys(e){return q(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.ParticleLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,direction:t.directionConvention,speed:t.speed,npart:t.npart,size:t.size,length:t.length,pickable:t.pickable,visible:t.visible})}}const F={...d.defaultProps,speed:{type:"number",value:1},size:{type:"number",value:3},color:{type:"array",value:[200,200,200]},meshShape:{type:"string",value:"cone"},meshLength:{type:"number",value:4},meshWidth:{type:"number",value:1},meshSize:{type:"number",value:1}};class G extends d{static layerName="OceanumPartmeshLayer";static defaultProps=F;_validateVariableProps(e){const n=e.xvector&&e.yvector,t=e.magnitude&&e.direction;return!n&&!t?'OceanumPartmeshLayer requires "xvector" + "yvector" or "magnitude" + "direction"':n&&t?'OceanumPartmeshLayer: provide "xvector" + "yvector" or "magnitude" + "direction", not both':null}_buildDatakeys(e){return q(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.PartmeshLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,direction:t.directionConvention,speed:t.speed,size:t.size,mesh:{shape:t.meshShape,length:t.meshLength,width:t.meshWidth,size:t.meshSize},pickable:t.pickable,visible:t.visible})}}const J={...d.defaultProps,levels:{type:"array",value:[]},labelSize:{type:"number",value:12},labelColor:{type:"array",value:[255,255,255,255]},smoothing:{type:"boolean",value:!1},numLabels:{type:"number",value:1},color:{type:"array",value:[200,200,200]}};class K extends d{static layerName="OceanumContourLayer";static defaultProps=J;_validateVariableProps(e){const n=!!e.magnitude,t=e.xvector&&e.yvector;return!n&&!t?'OceanumContourLayer requires "magnitude" or "xvector" + "yvector"':null}_buildDatakeys(e){return E(e,this.props)}_createInnerLayer(e,n){const t=this.props;return new k.ContourLayer({id:`${t.id}-inner`,data:e,datakeys:n,opacity:t.opacity,altitude:t.altitude,globalWrap:t.globalWrap,colormap:t.colormap,scale:t.scale,offset:t.offset,color:t.color,levels:t.levels,labelSize:t.labelSize,labelColor:t.labelColor,smoothing:t.smoothing,numLabels:t.numLabels,pickable:t.pickable,visible:t.visible})}}exports.OceanumBaseLayer=d;exports.OceanumContourLayer=K;exports.OceanumParticleLayer=Y;exports.OceanumPartmeshLayer=G;exports.OceanumPcolorLayer=N;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { PcolorLayer as q, ParticleLayer as R, PartmeshLayer as A, ContourLayer as B } from "@oceanum/deck-gl-grid";
1
+ import { PcolorLayer as R, ParticleLayer as q, PartmeshLayer as A, ContourLayer as B } from "@oceanum/deck-gl-grid";
2
2
  import { CompositeLayer as T } from "@deck.gl/core";
3
3
  import { Dataset as U } from "@oceanum/datamesh";
4
4
  function W(a, e) {
@@ -26,7 +26,7 @@ function $(a, e) {
26
26
  function C(a, e) {
27
27
  return e <= 0 ? 0 : Math.max(0, Math.min(a, e - 1));
28
28
  }
29
- function L(a, e, n) {
29
+ function w(a, e, n) {
30
30
  if (!a || a.length === 0) return [0, 0];
31
31
  const t = a.length < 2 || a[1] >= a[0];
32
32
  let l = 0, o = a.length - 1;
@@ -55,19 +55,19 @@ function L(a, e, n) {
55
55
  }
56
56
  return [l, o];
57
57
  }
58
- function w(a, e) {
58
+ function L(a, e) {
59
59
  return { start: a, stop: e, step: null };
60
60
  }
61
61
  async function j(a, e, n, t, l, o, r) {
62
- const s = {}, i = {}, c = a.variables[e.x], d = a.variables[e.y], [h, m] = await Promise.all([
63
- c.get([w(r[0], r[1] + 1)]),
64
- d.get([w(o[0], o[1] + 1)])
62
+ const s = {}, i = {}, c = a.variables[e.x], d = a.variables[e.y], [y, m] = await Promise.all([
63
+ c.get([L(r[0], r[1] + 1)]),
64
+ d.get([L(o[0], o[1] + 1)])
65
65
  ]);
66
- s[e.x] = { data: h }, s[e.y] = { data: m };
66
+ s[e.x] = { data: y }, s[e.y] = { data: m };
67
67
  const v = n.map(async (b) => {
68
68
  const p = a.variables[b];
69
69
  if (!p) return;
70
- const x = p.dimensions.map((f) => e.t && f === e.t ? t : e.z && f === e.z ? l : f === e.y ? w(o[0], o[1] + 1) : f === e.x ? w(r[0], r[1] + 1) : null), k = await p.get(x);
70
+ const x = p.dimensions.map((f) => e.t && f === e.t ? t : e.z && f === e.z ? l : f === e.y ? L(o[0], o[1] + 1) : f === e.x ? L(r[0], r[1] + 1) : null), k = await p.get(x);
71
71
  i[b] = { data: k };
72
72
  });
73
73
  return await Promise.all(v), { coords: s, data_vars: i };
@@ -95,12 +95,12 @@ function V(a, e) {
95
95
  n && (clearTimeout(n), n = null);
96
96
  }, t;
97
97
  }
98
- const X = {
98
+ const N = {
99
99
  onMetadataError: (a) => console.warn(`[OceanumLayer] ${a.message}`),
100
100
  onChunkError: (a) => console.warn(`[OceanumLayer] ${a.message}`),
101
101
  onVariableError: (a) => console.warn(`[OceanumLayer] ${a.message}`),
102
102
  onValidationError: (a) => console.error(`[OceanumLayer] ${a.message}`)
103
- }, Y = {
103
+ }, X = {
104
104
  serviceUrl: { type: "string", value: "https://layers.app.oceanum.io" },
105
105
  authHeaders: { type: "object", value: {} },
106
106
  layerId: { type: "string", value: null },
@@ -134,9 +134,9 @@ function _(a) {
134
134
  function P(a) {
135
135
  return a.context;
136
136
  }
137
- class y extends T {
137
+ class h extends T {
138
138
  static layerName = "OceanumBaseLayer";
139
- static defaultProps = Y;
139
+ static defaultProps = X;
140
140
  initializeState() {
141
141
  this.setState({
142
142
  dataset: null,
@@ -193,7 +193,7 @@ class y extends T {
193
193
  l.viewportPadding
194
194
  );
195
195
  if (!H(i, r.fetchedBbox)) {
196
- const c = L(r.lons, i.west, i.east), d = L(r.lats, i.south, i.north);
196
+ const c = w(r.lons, i.west, i.east), d = w(r.lats, i.south, i.north);
197
197
  this.setState({ latRange: d, lonRange: c, fetchedBbox: i }), r.debouncedSlice && r.debouncedSlice();
198
198
  }
199
199
  }
@@ -219,7 +219,7 @@ class y extends T {
219
219
  _fireError(e, n) {
220
220
  const t = { type: e, ...n };
221
221
  this.setState({ error: t });
222
- const l = g(this).errorHandlers || {}, o = `on${e.charAt(0).toUpperCase() + e.slice(1)}Error`, r = l[o] || X[o];
222
+ const l = g(this).errorHandlers || {}, o = `on${e.charAt(0).toUpperCase() + e.slice(1)}Error`, r = l[o] || N[o];
223
223
  r && r(t);
224
224
  }
225
225
  async _openDataset() {
@@ -255,7 +255,7 @@ class y extends T {
255
255
  }), this.setState({ loading: !1 });
256
256
  return;
257
257
  }
258
- const [h, m, v] = await Promise.all([
258
+ const [y, m, v] = await Promise.all([
259
259
  i.variables[c.x]?.get(),
260
260
  i.variables[c.y]?.get(),
261
261
  c.t && i.variables[c.t] ? i.variables[c.t].get() : null
@@ -270,14 +270,14 @@ class y extends T {
270
270
  m ? m.length - 1 : 0
271
271
  ], I = [
272
272
  0,
273
- h ? h.length - 1 : 0
273
+ y ? y.length - 1 : 0
274
274
  ], z = null;
275
275
  if (P(this).viewport) {
276
276
  const u = M(
277
277
  P(this).viewport,
278
278
  e.viewportPadding
279
279
  );
280
- h && (I = L(h, u.west, u.east)), m && (f = L(m, u.south, u.north)), z = u;
280
+ y && (I = w(y, u.west, u.east)), m && (f = w(m, u.south, u.north)), z = u;
281
281
  }
282
282
  if (this.setState({
283
283
  dataset: i,
@@ -287,7 +287,7 @@ class y extends T {
287
287
  times: v,
288
288
  nlevels: b,
289
289
  lats: m,
290
- lons: h,
290
+ lons: y,
291
291
  timeIndex: p,
292
292
  levelIndex: D,
293
293
  latRange: f,
@@ -349,7 +349,7 @@ class y extends T {
349
349
  r,
350
350
  s
351
351
  );
352
- this.setState({ slicedData: c, slicing: !1, error: null });
352
+ this.setState({ slicedData: c, slicing: !1, error: null }), this.setNeedsRedraw();
353
353
  } catch (c) {
354
354
  this._fireError("chunk", {
355
355
  layerId: g(this).layerId,
@@ -366,14 +366,14 @@ class y extends T {
366
366
  return !e.slicedData || !e.datakeys ? [] : this._createInnerLayer(e.slicedData, e.datakeys);
367
367
  }
368
368
  }
369
- const F = {
370
- ...y.defaultProps,
369
+ const Y = {
370
+ ...h.defaultProps,
371
371
  color: { type: "array", value: [200, 200, 200] },
372
372
  material: !1
373
373
  };
374
- class ee extends y {
374
+ class ee extends h {
375
375
  static layerName = "OceanumPcolorLayer";
376
- static defaultProps = F;
376
+ static defaultProps = Y;
377
377
  _validateVariableProps(e) {
378
378
  const n = !!e.magnitude, t = e.xvector && e.yvector;
379
379
  return !n && !t ? 'OceanumPcolorLayer requires "magnitude" or "xvector" + "yvector"' : null;
@@ -383,7 +383,7 @@ class ee extends y {
383
383
  }
384
384
  _createInnerLayer(e, n) {
385
385
  const t = this.props;
386
- return new q({
386
+ return new R({
387
387
  id: `${t.id}-inner`,
388
388
  data: e,
389
389
  datakeys: n,
@@ -400,17 +400,17 @@ class ee extends y {
400
400
  });
401
401
  }
402
402
  }
403
- const N = {
404
- ...y.defaultProps,
403
+ const F = {
404
+ ...h.defaultProps,
405
405
  speed: { type: "number", value: 1 },
406
406
  npart: { type: "number", value: 1e3 },
407
407
  size: { type: "number", value: 3 },
408
408
  length: { type: "number", value: 12 },
409
409
  color: { type: "array", value: [200, 200, 200] }
410
410
  };
411
- class te extends y {
411
+ class te extends h {
412
412
  static layerName = "OceanumParticleLayer";
413
- static defaultProps = N;
413
+ static defaultProps = F;
414
414
  _validateVariableProps(e) {
415
415
  const n = e.xvector && e.yvector, t = e.magnitude && e.direction;
416
416
  return !n && !t ? 'OceanumParticleLayer requires "xvector" + "yvector" or "magnitude" + "direction"' : n && t ? 'OceanumParticleLayer: provide "xvector" + "yvector" or "magnitude" + "direction", not both' : null;
@@ -420,7 +420,7 @@ class te extends y {
420
420
  }
421
421
  _createInnerLayer(e, n) {
422
422
  const t = this.props;
423
- return new R({
423
+ return new q({
424
424
  id: `${t.id}-inner`,
425
425
  data: e,
426
426
  datakeys: n,
@@ -442,7 +442,7 @@ class te extends y {
442
442
  }
443
443
  }
444
444
  const G = {
445
- ...y.defaultProps,
445
+ ...h.defaultProps,
446
446
  speed: { type: "number", value: 1 },
447
447
  size: { type: "number", value: 3 },
448
448
  color: { type: "array", value: [200, 200, 200] },
@@ -451,7 +451,7 @@ const G = {
451
451
  meshWidth: { type: "number", value: 1 },
452
452
  meshSize: { type: "number", value: 1 }
453
453
  };
454
- class ae extends y {
454
+ class ae extends h {
455
455
  static layerName = "OceanumPartmeshLayer";
456
456
  static defaultProps = G;
457
457
  _validateVariableProps(e) {
@@ -489,7 +489,7 @@ class ae extends y {
489
489
  }
490
490
  }
491
491
  const J = {
492
- ...y.defaultProps,
492
+ ...h.defaultProps,
493
493
  levels: { type: "array", value: [] },
494
494
  labelSize: { type: "number", value: 12 },
495
495
  labelColor: { type: "array", value: [255, 255, 255, 255] },
@@ -497,7 +497,7 @@ const J = {
497
497
  numLabels: { type: "number", value: 1 },
498
498
  color: { type: "array", value: [200, 200, 200] }
499
499
  };
500
- class ne extends y {
500
+ class ne extends h {
501
501
  static layerName = "OceanumContourLayer";
502
502
  static defaultProps = J;
503
503
  _validateVariableProps(e) {
@@ -531,7 +531,7 @@ class ne extends y {
531
531
  }
532
532
  }
533
533
  export {
534
- y as OceanumBaseLayer,
534
+ h as OceanumBaseLayer,
535
535
  ne as OceanumContourLayer,
536
536
  te as OceanumParticleLayer,
537
537
  ae as OceanumPartmeshLayer,
@@ -1 +1 @@
1
- {"version":3,"file":"oceanum-base-layer.d.ts","sourceRoot":"","sources":["../src/oceanum-base-layer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACf,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;CAC/C;AASD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAuBD,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAAG,OAAO,CAAC;AA2C9D,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAC1D,OAAgB,SAAS,SAAsB;IAC/C,OAAgB,YAAY,kCAAgB;IAEnC,eAAe,IAAI,IAAI;IA4BvB,iBAAiB,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,GAAG,OAAO;IAIhD,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,GAAG,IAAI;IA+DxD,aAAa,IAAI,IAAI;IAO9B,qBAAqB,CACnB,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO;IAWV,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI;IAIhE,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc;IAKvE,iBAAiB,CACf,WAAW,EAAE,UAAU,EACvB,SAAS,EAAE,cAAc,GAAG,cAAc,GACzC,GAAG;IAIN,OAAO,CAAC,UAAU;YAWJ,YAAY;YA+IZ,kBAAkB;YA2BlB,aAAa;IAsClB,YAAY;CAKtB"}
1
+ {"version":3,"file":"oceanum-base-layer.d.ts","sourceRoot":"","sources":["../src/oceanum-base-layer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oceanum/layers",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "deck.gl layers for visualising gridded data from Oceanum datamesh zarr datasets",
5
5
  "scripts": {
6
6
  "build": "vite build",