UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.62 kB
import t from"../../../../../Color.js";import{interpolate as e}from"../GeometryUtils.js";import{ops as r,createExpression as i,Interpolate as l,Zoom as a}from"../expression/expression.js";import{arrayType as s,ValueType as o,valueToString as n,NumberType as u,ColorType as p,StringType as d,BooleanType as f}from"../expression/types.js";class h{constructor(t,e){let n;switch(this.isDataDriven=!1,this.interpolator=null,t.type){case"number":case"color":n=!0;break;case"array":n="number"===t.value;break;default:n=!1}if(null==e&&(e=t.default),Array.isArray(e)&&e.length>0&&r[e[0]]){const r={number:u,color:p,string:d,boolean:f,enum:d};try{const n="array"===t.type?s(r[t.value]||o,t.length):r[t.type],u=i(e,null,n);this.getValue=this._buildExpression(u,t),this.isDataDriven=!0,u instanceof l&&u.input instanceof a&&(this.interpolator=u)}catch(c){console.log(c.message),this.getValue=this._buildSimple(t.default)}return}n&&"interval"===e.type&&(n=!1);const h=e&&e.stops&&e.stops.length>0;if(h)for(const r of e.stops)r[1]=this._validate(r[1],t);if(this.isDataDriven=!!e&&!!e.property,this.isDataDriven)if(void 0!==e.default&&(e.default=this._validate(e.default,t)),h)switch(e.type){case"identity":this.getValue=this._buildIdentity(e,t);break;case"categorical":this.getValue=this._buildCategorical(e,t);break;default:this.getValue=n?this._buildInterpolate(e,t):this._buildInterval(e,t)}else this.getValue=this._buildIdentity(e,t);else h?this.getValue=n?this._buildZoomInterpolate(e):this._buildZoomInterval(e):(e=this._validate(e,t),this.getValue=this._buildSimple(e))}_validate(t,e){if("number"===e.type){if(t<e.minimum)return e.minimum;if(t>e.maximum)return e.maximum}else"color"===e.type?t=h._parseColor(t):"enum"===e.type?"string"==typeof t&&(t=e.values.indexOf(t)):"array"===e.type&&"enum"===e.value?t=t.map((t=>"string"==typeof t?e.values.indexOf(t):t)):"string"===e.type&&(t=n(t));return t}_buildSimple(t){return()=>t}_buildExpression(t,e){return(r,i)=>{try{const l=t.evaluate(i,r);return void 0===l?e.default:this._validate(l,e)}catch(l){return console.log(l.message),e.default}}}_buildIdentity(t,e){return(r,i)=>{let l;return i&&(l=i.values[t.property]),void 0!==l&&(l=this._validate(l,e)),null!=l?l:void 0!==t.default?t.default:e.default}}_buildCategorical(t,e){return(r,i)=>{let l;return i&&(l=i.values[t.property]),l=this._categorical(l,t.stops),void 0!==l?l:void 0!==t.default?t.default:e.default}}_buildInterval(t,e){return(r,i)=>{let l;return i&&(l=i.values[t.property]),"number"==typeof l?this._interval(l,t.stops):void 0!==t.default?t.default:e.default}}_buildInterpolate(t,e){return(r,i)=>{let l;return i&&(l=i.values[t.property]),"number"==typeof l?this._interpolate(l,t.stops,t.base||1):void 0!==t.default?t.default:e.default}}_buildZoomInterpolate(t){return e=>this._interpolate(e,t.stops,t.base||1)}_buildZoomInterval(t){return e=>this._interval(e,t.stops)}_categorical(t,e){const r=e.length;for(let i=0;i<r;i++)if(e[i][0]===t)return e[i][1]}_interval(t,e){const r=e.length;let i=0;for(let l=0;l<r&&e[l][0]<=t;l++)i=l;return e[i][1]}_interpolate(t,r,i){let l,a;const s=r.length;for(let e=0;e<s;e++){const i=r[e];if(!(i[0]<=t)){a=i;break}l=i}if(l&&a){const r=a[0]-l[0],s=t-l[0],o=1===i?s/r:(i**s-1)/(i**r-1);if(Array.isArray(l[1])){const t=l[1],r=a[1],i=[];for(let l=0;l<t.length;l++)i.push(e(t[l],r[l],o));return i}return e(l[1],a[1],o)}return l?l[1]:a?a[1]:void 0}static _isEmpty(t){for(const e in t)if(t.hasOwnProperty(e))return!1;return!0}static _parseColor(e){return Array.isArray(e)?e:("string"==typeof e&&(e=new t(e)),e instanceof t&&!this._isEmpty(e)?t.toUnitRGBA(e):void 0)}}export{h as default};