@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 2.14 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import e from"../core/Logger.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 l=e[i]||"";if("date"===r?.type&&(l=new Date(l).toString()),"coded-value"===r?.domain?.type){const e=r.domain.codedValues.find(e=>l===e.code);e&&(l=e.name)}"string"==typeof l&&l.includes(o)&&(l=`"${l}"`),t+=`${l}${o}`}),`${t}\r\n`}}async function l(n,{includeGeometry:l=!0,delimiter:a=",",outFields:s=["*"]}={}){n=i(n),l&&"point"!==n.geometryType&&e.getLogger("esri.exports.csv").warn(`The input geometry ${n.geometryType} is not supported. Geometry will be excluded from export.`);const{features:u}=n;if(!u.length)return null;let d=n.fields;const[m]=s;"*"===m&&(s=d.map(e=>e.name)),l&&"point"===n.geometryType&&(d.some(e=>"x"===e.name||"y"===e.name)||(d=[...d,new t({name:"lon",alias:"Longitude",type:"double"}),new t({name:"lat",alias:"Latitude",type:"double"})],s=[...s,"lon","lat"]),u.forEach(({attributes:e,geometry:t})=>{e.lon="point"===t?.type?t.longitude:null,e.lat="point"===t?.type?t.latitude:null})),d=d.filter(e=>s.includes(e.name));const p=a||",",c=o(u),f=d.map(e=>e.name).join(p),y=r({delimiter:p,outFields:s||d.map(e=>e.name),fields:d});let g=`${f}${p}\r\n`;c.forEach(e=>{g+=y(e)});const b=new RegExp(`${p}\r\n\\s*$`,"g");return g.replace(b,"")}export{r as attributeToString,l as convertFeaturesToCSV,o as extractAttributes,n as extractFieldsFromFeature,i as validateFeatureSetFields};