@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.07 kB
JavaScript
import e from"../core/Error.js";import t from"../layers/support/Field.js";function n(e){return Object.keys(e.attributes).map((n=>{const i=e.attributes[n];return"objectid"===n.toLowerCase()||"fid"===n.toLowerCase()?new t({name:n,alias:n,type:"oid"}):new t("number"==typeof i?{name:n,alias:n,type:"double"}:{name:n,alias:n,type:"string"})}))}function i(e){if(!e.fields){const t=e.features[0];if(t.layer){e.fields=t.layer.fields;const n=Object.keys(t.attributes),i=e.fields.filter((e=>n.includes(e.name)));e.fields=i}else e.fields=n(t)}return e}function o(e){return e.map((({attributes:e})=>e))}function r(e){const{delimiter:t,fields:n=[],outFields:i=[]}=e,o=t||",",r=n.map((e=>e.name));return e=>{let t="";return r.filter((e=>i.includes(e))).forEach((i=>{const r=n.find((({name:e})=>e===i));let a=e[i]||"";if("date"===r?.type&&(a=new Date(a).toString()),r?.domain&&"coded-value"===r.domain.type){const e=r.domain.codedValues.find((e=>a===e.code));e&&(a=e.name)}"string"==typeof a&&a.includes(o)&&(a=`"${a}"`),t+=`${a}${o}`})),`${t}\r\n`}}async function a(n,{includeGeometry:a=!0,delimiter:s=",",outFields:l=["*"]}={}){if(n=i(n),a&&"point"!==n.geometryType)throw new e("export-csv:invalid-geometries",`the input geometry ${n.geometryType} is not supported, must be point`);const{features:d}=n;if(!d.length)return null;let u=n.fields;const[m]=l;"*"===m&&(l=u.map((e=>e.name))),a&&"point"===n.geometryType&&(u.some((e=>"x"===e.name||"y"===e.name))||(u=[...u,new t({name:"lon",alias:"Longitude",type:"double"}),new t({name:"lat",alias:"Latitude",type:"double"})],l=[...l,"lon","lat"]),d.forEach((e=>{e.attributes.lon=e.geometry.longitude,e.attributes.lat=e.geometry.latitude}))),u=u.filter((e=>l.includes(e.name)));const f=s||",",c=o(d),p=u.map((e=>e.name)).join(f),y=r({delimiter:f,outFields:l||u.map((e=>e.name)),fields:u});let g=`${p}${f}\r\n`;c.forEach((e=>{g+=y(e)}));const b=new RegExp(`${f}\r\ns*$`,"g");return g.replace(b,"")}export{r as attributeToString,a as convertFeaturesToCSV,o as extractAttributes,n as extractFieldsFromFeature,i as validateFeatureSetFields};