UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.44 kB
import t from"../../Graphic.js";import{isSome as e}from"../../core/maybe.js";import r from"../../geometry/Extent.js";import n from"../../geometry/Mesh.js";import o from"../../geometry/Point.js";import s from"../../geometry/SpatialReference.js";import{fromAxisAndAngle as a}from"../../geometry/support/axisAngleDegrees.js";import i from"../../geometry/support/MeshTransform.js";import c from"./FeatureSet.js";function u(r,n,o){const a=o.features;o.features=[],delete o.geometryType;const i=c.fromJSON(o);if(i.geometryType="mesh",!o.assetMaps)return i;const u=E(n,o.assetMaps),m=i.spatialReference??s.WGS84,p=o.globalIdFieldName,{outFields:g}=r,D=e(g)&&g.length>0?l(g.includes("*")?null:new Set(g)):()=>({});for(const s of a){const r=f(s,p,m,n,u);e(r)&&i.features.push(new t({geometry:r,attributes:D(s)}))}return i}function l(t){return({attributes:e})=>{if(!e)return{};if(!t)return e;for(const r in e)t.has(r)||delete e[r];return e}}function f(t,e,o,s,a){const i=t.attributes[e],c=a.get(i);if(null==c||c.status===g.FAILED||null==c.url)return null;const u=m(t,o,s),l=r.fromJSON(t.geometry);l.spatialReference=o;const f=p(t.attributes,s,c.projectVertices);return c.status===g.PENDING?n.createIncomplete(u,{extent:l,transform:f}):n.createWithExternalSource(u,[{name:c.name,source:c.url}],{extent:l,transform:f})}function m({attributes:t},e,{transformFieldRoles:r}){return new o({x:t[r.originX],y:t[r.originY],z:t[r.originZ],spatialReference:e})}function p(t,{transformFieldRoles:e},r){return new i({translation:[t[e.translationX],-t[e.translationZ],t[e.translationY]],rotation:a([t[e.rotationX],t[e.rotationZ],t[e.rotationY]],t[e.rotationDeg]),scale:[t[e.scaleX],t[e.scaleY],t[e.scaleZ]],geographic:r})}var g;function E(t,e){const r=new Map;for(const n of e){const t=n.parentGlobalId;if(null==t)continue;const e=n.assetName,o=n.assetURL,s=n.conversionStatus;let a=r.get(t);if(null==a)switch(a={name:e,status:g.FAILED,url:o,projectVertices:D(n.flags).projectVertices},r.set(t,a),s){case"COMPLETED":case"SUBMITTED":a.status=g.COMPLETED;break;case"INPROGRESS":a.status=g.PENDING;break;default:a.status=g.FAILED}else console.warn(`Multiple asset parts not expected. Ignoring additional parts. conflicting assetname: ${n.assetName}`)}return r}function D(t){return{projectVertices:t.includes("PROJECT_VERTICES")}}!function(t){t[t.FAILED=0]="FAILED",t[t.PENDING=1]="PENDING",t[t.COMPLETED=2]="COMPLETED"}(g||(g={}));export{u as meshFeatureSetFromJSON};